File paths: CLI source at src/kapacitor/, npm packages at npm/, Claude Code plugin at kapacitor/, unit tests at test/kapacitor.Tests.Unit/, integration tests at test/kapacitor.Tests.Integration/.
The kapacitor CLI records Claude Code sessions by forwarding hook payloads and transcript data to a Capacitor server. It also hosts an agent daemon for remote Claude CLI management and provides PR review context via MCP tools.
- .NET 10, NativeAOT compiled
- SignalR client for real-time server communication
- TUnit for testing, WireMock.Net for HTTP mocking
dotnet build src/kapacitor/kapacitor.csprojTests use TUnit on Microsoft Testing Platform. Run directly as executables:
dotnet run --project test/kapacitor.Tests.Unit/kapacitor.Tests.Unit.csproj
dotnet run --project test/kapacitor.Tests.Integration/kapacitor.Tests.Integration.csprojAOT publish for the current platform:
dotnet publish src/kapacitor/kapacitor.csproj -c ReleaseAlways verify no IL3050/IL2026 AOT warnings after changes:
dotnet publish src/kapacitor/kapacitor.csproj -c Release 2>&1 | grep -E 'IL[23][01][0-9]{2}'- AOT warnings only show on publish —
dotnet builddoes NOT surface IL3050/IL2026 trimming warnings. Rundotnet publish -c Releaseafter changes. - JsonArray collection expressions —
[item1, item2]compiles toAdd<T>()which requires dynamic code. Usenew JsonArray(item1, item2)constructor instead. - TUnit test filtering — Use
--treenode-filterwith glob syntax, NOT--filter. - macOS AOT binary code signing — After copying an AOT binary, run
codesign --force --sign -to re-sign.