## Summary - **Restructure `src/server/` into subdirectories** (`service/`, `compiler/`, `worker/`, `workspace/`, `protocol/`) to separate concerns: transport/session management, compilation, worker orchestration, and persistent workspace state. - **Decouple MasterServer from transport**: MasterServer no longer holds a `JsonPeer&` reference or registers handlers itself. New `LSPClient` and `AgentClient` classes own their peer references and register protocol handlers, accessing MasterServer internals via `friend class`. - **Add agentic protocol**: A TCP-based side channel (`agentic/compileCommand`) that lets external tools (AI agents, build systems) query compile commands from a running clice server. Includes a CLI client mode (`--mode agentic --port N --path FILE`), server-side listener when `--port` is specified in pipe mode, and integration tests for happy path, fallback, concurrency, and connection-refused. - **Replace fire-and-forget `loop.schedule()` with `kota::task_group`**: Compiler compile tasks, Indexer background indexing + resource monitor, WorkerPool worker monitors, and socket accept loops now use structured concurrency. This eliminates manual `alive_count_`/generation counters and ensures all spawned tasks are joined on shutdown. - **Fix flaky integration test**: `CliceClient.initialize()` now always sets `cache_dir` to a workspace-local `.clice/` directory, preventing stale PCH artifacts from the global `~/.cache/clice/` from polluting test runs. ## Details **Compiler peer lifetime**: `Compiler` and `Indexer` previously took `JsonPeer&` in their constructors, coupling them to a single connection. They now store a `JsonPeer*` set via `set_peer()`, with null checks before sending diagnostics/progress. This supports the multi-connection model where agentic clients don't need diagnostics. **Socket mode single-LSP enforcement**: `accept_connections()` takes a `register_lsp` flag; when true, only the first connection gets an `LSPClient`. All connections get an `AgentClient`. This prevents multiple LSP sessions from racing on shared server state. **Structured shutdown**: `Compiler::stop()` cancels in-flight compile tasks and joins them. `WorkerPool::stop()` signals workers and joins the monitor task group. `Indexer` uses a `cancellation_source` to stop its resource monitor when a background indexing run completes. **Pin kotatsu**: Changed from `GIT_TAG main` + `GIT_SHALLOW TRUE` to an exact commit hash for reproducible builds. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
56 lines
1.4 KiB
CMake
56 lines
1.4 KiB
CMake
include_guard()
|
|
|
|
include(${CMAKE_CURRENT_LIST_DIR}/llvm.cmake)
|
|
setup_llvm("21.1.8")
|
|
|
|
# install dependencies
|
|
include(FetchContent)
|
|
set(FETCHCONTENT_UPDATES_DISCONNECTED ON)
|
|
|
|
# spdlog
|
|
FetchContent_Declare(
|
|
spdlog
|
|
GIT_REPOSITORY https://github.com/gabime/spdlog.git
|
|
GIT_TAG v1.15.3
|
|
GIT_SHALLOW TRUE
|
|
)
|
|
set(SPDLOG_USE_STD_FORMAT ON CACHE BOOL "" FORCE)
|
|
set(SPDLOG_NO_EXCEPTIONS ON CACHE BOOL "" FORCE)
|
|
|
|
# croaring
|
|
FetchContent_Declare(
|
|
croaring
|
|
GIT_REPOSITORY https://github.com/RoaringBitmap/CRoaring.git
|
|
GIT_TAG v4.4.2
|
|
GIT_SHALLOW TRUE
|
|
)
|
|
set(ENABLE_ROARING_TESTS OFF CACHE INTERNAL "" FORCE)
|
|
set(ENABLE_ROARING_MICROBENCHMARKS OFF CACHE INTERNAL "" FORCE)
|
|
|
|
# flatbuffers
|
|
FetchContent_Declare(
|
|
flatbuffers
|
|
GIT_REPOSITORY https://github.com/google/flatbuffers.git
|
|
GIT_TAG v25.9.23
|
|
GIT_SHALLOW TRUE
|
|
)
|
|
set(FLATBUFFERS_BUILD_GRPC OFF CACHE BOOL "" FORCE)
|
|
set(FLATBUFFERS_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
|
set(FLATBUFFERS_BUILD_FLATHASH OFF CACHE BOOL "" FORCE)
|
|
|
|
FetchContent_Declare(
|
|
kotatsu
|
|
GIT_REPOSITORY https://github.com/clice-io/kotatsu
|
|
GIT_TAG e024f3b427a554502c4aa015952800a03ca4384b
|
|
)
|
|
|
|
set(KOTA_ENABLE_ZEST ON)
|
|
set(KOTA_ENABLE_TEST OFF)
|
|
set(KOTA_CODEC_ENABLE_SIMDJSON ON)
|
|
set(KOTA_CODEC_ENABLE_YYJSON ON)
|
|
set(KOTA_CODEC_ENABLE_TOML ON)
|
|
set(KOTA_ENABLE_EXCEPTIONS OFF)
|
|
set(KOTA_ENABLE_RTTI OFF)
|
|
|
|
FetchContent_MakeAvailable(kotatsu spdlog croaring flatbuffers)
|