## Summary Add LSP trace recording and replay-based smoke testing infrastructure. ### clice changes (`src/clice.cc`) - Add `--log-level` CLI option with validation (rejects unknown levels instead of silently defaulting to off) - Add `--record <path>` CLI option that wraps the transport with `RecordingTransport` to capture client→server messages as timestamped JSONL - Works in both pipe and socket modes - Fix exit code: `loop.run()` returns non-zero after `uv_stop()`, explicitly return 0 after clean shutdown ### Compile logging (`src/compile/compilation.cpp`) - Print compile commands at debug log level ### Replay script (`tests/replay.py`) - Timestamp-based pacing: sleeps between messages based on recorded intervals, faithful to original editor session - Automatic workspace path rewriting: infers repo root from script location, rewrites absolute paths in trace so CI replay works without extra arguments - Handles server→client requests (workDoneProgress/create, registerCapability, etc.) with default responses - Waits for all pending responses before sending shutdown/exit - Detects server exit mid-replay and fails pending futures immediately instead of hanging - Reports PASS/FAIL/SKIP with stderr tail on failure ### CI & config - Add `smoke-test` pixi task and CI workflow step (runs after integration tests) - `.gitattributes`: mark `tests/smoke/*.jsonl` as `linguist-generated binary` to suppress diffs - Add sample trace file `tests/smoke/session.jsonl` ### VSCode extension - Add restart command (`clice.restart`) - Support `CLICE_MODE` env var to override mode setting (for debug launch configs) - Split launch configs into socket/pipe variants with `--disable-extensions` ## Test plan - [x] `python tests/replay.py tests/smoke/session.jsonl --clice ./build/RelWithDebInfo/bin/clice` passes locally - [ ] CI smoke test passes on Linux/macOS/Windows 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
24 lines
729 B
JSON
24 lines
729 B
JSON
{
|
|
"version": "0.2.0",
|
|
"configurations": [
|
|
{
|
|
"name": "Run Extension (socket)",
|
|
"type": "extensionHost",
|
|
"request": "launch",
|
|
"args": ["--disable-extensions", "--extensionDevelopmentPath=${workspaceFolder}"],
|
|
"env": { "CLICE_MODE": "socket" },
|
|
"outFiles": ["${workspaceFolder}/dist/**/*.js"],
|
|
"preLaunchTask": "${defaultBuildTask}"
|
|
},
|
|
{
|
|
"name": "Run Extension (pipe)",
|
|
"type": "extensionHost",
|
|
"request": "launch",
|
|
"args": ["--disable-extensions", "--extensionDevelopmentPath=${workspaceFolder}"],
|
|
"env": { "CLICE_MODE": "pipe" },
|
|
"outFiles": ["${workspaceFolder}/dist/**/*.js"],
|
|
"preLaunchTask": "${defaultBuildTask}"
|
|
}
|
|
]
|
|
}
|