@kenkaiiii/ggcoder 5.23.2 → 5.23.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chat-agents/general.test.js +6 -3
- package/dist/chat-agents/general.test.js.map +1 -1
- package/dist/chat-agents/specialists.test.js +3 -2
- package/dist/chat-agents/specialists.test.js.map +1 -1
- package/dist/core/agent-session-compaction.test.js +4 -7
- package/dist/core/agent-session-compaction.test.js.map +1 -1
- package/dist/core/agent-session-marker-anchors.test.js +4 -7
- package/dist/core/agent-session-marker-anchors.test.js.map +1 -1
- package/dist/core/agent-session-memory-tail.test.js +4 -7
- package/dist/core/agent-session-memory-tail.test.js.map +1 -1
- package/dist/core/agent-session-queue.test.js +4 -7
- package/dist/core/agent-session-queue.test.js.map +1 -1
- package/dist/core/encode-cwd.d.ts +17 -0
- package/dist/core/encode-cwd.d.ts.map +1 -1
- package/dist/core/encode-cwd.js +20 -7
- package/dist/core/encode-cwd.js.map +1 -1
- package/dist/core/encode-cwd.test.js +20 -1
- package/dist/core/encode-cwd.test.js.map +1 -1
- package/dist/core/ideal-review.d.ts.map +1 -1
- package/dist/core/ideal-review.js +6 -1
- package/dist/core/ideal-review.js.map +1 -1
- package/dist/core/ideal-review.test.js +7 -2
- package/dist/core/ideal-review.test.js.map +1 -1
- package/dist/core/lsp/client.d.ts +50 -0
- package/dist/core/lsp/client.d.ts.map +1 -1
- package/dist/core/lsp/client.js +158 -13
- package/dist/core/lsp/client.js.map +1 -1
- package/dist/core/lsp/jsonrpc.d.ts +38 -1
- package/dist/core/lsp/jsonrpc.d.ts.map +1 -1
- package/dist/core/lsp/jsonrpc.js +13 -1
- package/dist/core/lsp/jsonrpc.js.map +1 -1
- package/dist/core/lsp/manager.d.ts.map +1 -1
- package/dist/core/lsp/manager.js +23 -2
- package/dist/core/lsp/manager.js.map +1 -1
- package/dist/core/lsp/manager.test.js +32 -1
- package/dist/core/lsp/manager.test.js.map +1 -1
- package/dist/core/lsp/test-support.d.ts +18 -0
- package/dist/core/lsp/test-support.d.ts.map +1 -0
- package/dist/core/lsp/test-support.js +27 -0
- package/dist/core/lsp/test-support.js.map +1 -0
- package/dist/core/lsp/uri.test.d.ts +2 -0
- package/dist/core/lsp/uri.test.d.ts.map +1 -0
- package/dist/core/lsp/uri.test.js +56 -0
- package/dist/core/lsp/uri.test.js.map +1 -0
- package/dist/core/lsp/windows.test.d.ts +2 -0
- package/dist/core/lsp/windows.test.d.ts.map +1 -0
- package/dist/core/lsp/windows.test.js +251 -0
- package/dist/core/lsp/windows.test.js.map +1 -0
- package/dist/core/mcp/resolve-stdio.d.ts +35 -0
- package/dist/core/mcp/resolve-stdio.d.ts.map +1 -1
- package/dist/core/mcp/resolve-stdio.js +80 -1
- package/dist/core/mcp/resolve-stdio.js.map +1 -1
- package/dist/core/mcp/resolve-stdio.test.js +99 -4
- package/dist/core/mcp/resolve-stdio.test.js.map +1 -1
- package/dist/core/persistent-shell.d.ts +3 -1
- package/dist/core/persistent-shell.d.ts.map +1 -1
- package/dist/core/persistent-shell.js +13 -3
- package/dist/core/persistent-shell.js.map +1 -1
- package/dist/core/process-manager-dev-server-repro.test.js +34 -12
- package/dist/core/process-manager-dev-server-repro.test.js.map +1 -1
- package/dist/core/process-manager.d.ts +1 -1
- package/dist/core/process-manager.d.ts.map +1 -1
- package/dist/core/process-manager.js +23 -13
- package/dist/core/process-manager.js.map +1 -1
- package/dist/core/project-discovery.d.ts +10 -0
- package/dist/core/project-discovery.d.ts.map +1 -1
- package/dist/core/project-discovery.js +42 -8
- package/dist/core/project-discovery.js.map +1 -1
- package/dist/core/project-discovery.test.js +102 -1
- package/dist/core/project-discovery.test.js.map +1 -1
- package/dist/core/radio.test.js +4 -1
- package/dist/core/radio.test.js.map +1 -1
- package/dist/core/session-storage.d.ts.map +1 -1
- package/dist/core/session-storage.js +25 -1
- package/dist/core/session-storage.js.map +1 -1
- package/dist/core/session-storage.test.js +4 -1
- package/dist/core/session-storage.test.js.map +1 -1
- package/dist/core/skills-routing.test.js +3 -1
- package/dist/core/skills-routing.test.js.map +1 -1
- package/dist/core/speed-benchmark.test.js +9 -3
- package/dist/core/speed-benchmark.test.js.map +1 -1
- package/dist/core/subagent-store.test.js +14 -2
- package/dist/core/subagent-store.test.js.map +1 -1
- package/dist/test-support/fake-home.d.ts +20 -0
- package/dist/test-support/fake-home.d.ts.map +1 -0
- package/dist/test-support/fake-home.js +37 -0
- package/dist/test-support/fake-home.js.map +1 -0
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +7 -3
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/bash.test.js +103 -7
- package/dist/tools/bash.test.js.map +1 -1
- package/dist/tools/edit-robustness.test.js +3 -1
- package/dist/tools/edit-robustness.test.js.map +1 -1
- package/dist/tools/find.d.ts.map +1 -1
- package/dist/tools/find.js +4 -1
- package/dist/tools/find.js.map +1 -1
- package/dist/tools/grep.d.ts.map +1 -1
- package/dist/tools/grep.js +3 -1
- package/dist/tools/grep.js.map +1 -1
- package/dist/tools/overflow.test.js +4 -7
- package/dist/tools/overflow.test.js.map +1 -1
- package/dist/tools/path-utils.d.ts +15 -0
- package/dist/tools/path-utils.d.ts.map +1 -1
- package/dist/tools/path-utils.js +17 -0
- package/dist/tools/path-utils.js.map +1 -1
- package/dist/tools/path-utils.test.js +7 -2
- package/dist/tools/path-utils.test.js.map +1 -1
- package/dist/tools/search-code.d.ts.map +1 -1
- package/dist/tools/search-code.js +6 -4
- package/dist/tools/search-code.js.map +1 -1
- package/dist/utils/process.d.ts +26 -3
- package/dist/utils/process.d.ts.map +1 -1
- package/dist/utils/process.js +68 -10
- package/dist/utils/process.js.map +1 -1
- package/dist/utils/process.test.d.ts +2 -0
- package/dist/utils/process.test.d.ts.map +1 -0
- package/dist/utils/process.test.js +42 -0
- package/dist/utils/process.test.js.map +1 -0
- package/package.json +4 -4
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import { toPosixPath } from "../tools/path-utils.js";
|
|
3
4
|
/**
|
|
4
5
|
* Harness-owned proof that every successfully changed file was opened with the
|
|
5
6
|
* read tool after Ideal review began. Model-authored claims never enter it.
|
|
@@ -51,8 +52,12 @@ export class ReviewCoverageTracker {
|
|
|
51
52
|
}
|
|
52
53
|
display(filePath) {
|
|
53
54
|
const relative = path.relative(this.cwd, filePath);
|
|
55
|
+
// Forward-slashed: this string is shown to the model and matched against
|
|
56
|
+
// the paths it echoes back, which are always forward-slashed. A native
|
|
57
|
+
// `src\a.ts` on Windows never matched the model's `src/a.ts`, so review
|
|
58
|
+
// coverage counted every changed file as unread.
|
|
54
59
|
return relative && !relative.startsWith(`..${path.sep}`) && relative !== ".."
|
|
55
|
-
? relative
|
|
60
|
+
? toPosixPath(relative)
|
|
56
61
|
: filePath;
|
|
57
62
|
}
|
|
58
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ideal-review.js","sourceRoot":"","sources":["../../src/core/ideal-review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ideal-review.js","sourceRoot":"","sources":["../../src/core/ideal-review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAyBrD;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IAKH;IAJZ,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAC7B,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,GAAG,KAAK,CAAC;IAEvB,YAA6B,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;IAAG,CAAC;IAE5C,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,kEAAkE;IAClE,aAAa,CAAC,QAAgB;QAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,8EAA8E;IAC9E,KAAK,CAAC,eAAiC,EAAE;QACvC,KAAK,MAAM,QAAQ,IAAI,YAAY;YAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,wDAAwD;IACxD,UAAU,CAAC,QAAgB;QACzB,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,OAAO;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAClE,CAAC;IAED,QAAQ;QACN,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1E,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3E,OAAO;YACL,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC5D,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC1D,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SAC3D,CAAC;IACJ,CAAC;IAEO,SAAS,CAAC,QAAgB;QAChC,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC1D,CAAC;IAEO,OAAO,CAAC,QAAgB;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACnD,yEAAyE;QACzE,uEAAuE;QACvE,wEAAwE;QACxE,iDAAiD;QACjD,OAAO,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,QAAQ,KAAK,IAAI;YAC3E,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC;YACvB,CAAC,CAAC,QAAQ,CAAC;IACf,CAAC;CACF;AAED,MAAM,UAAU,0BAA0B,CAAC,YAA+B;IACxE,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EACL,wFAAwF;YACxF,sEAAsE;YACtE,YAAY,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,8BAA8B,CAC5C,OAAgB,EAChB,YAA+B;IAE/B,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAC9C,MAAM,WAAW,GAAG,0BAA0B,CAAC,YAAY,CAAC,CAAC;IAC7D,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;KACxE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAC9B,sFAAsF;IACtF,+FAA+F;IAC/F,oGAAoG;IACpG,8FAA8F;IAC9F,2FAA2F;IAC3F,2EAA2E,CAAC;AAE9E,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAE5D,MAAM,UAAU,mBAAmB,CAAC,KAAuB;IACzD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,KAAK,CAAC,YAAY,IAAI,GAAG,EAAE,CAAC;QAC9B,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,gBAAgB,CAAC,CAAC;IACtD,CAAC;SAAM,IAAI,KAAK,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;QACpC,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,gBAAgB,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;QACzB,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,aAAa,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;QAC5C,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,sBAAsB,CAAC,CAAC;IAC5E,CAAC;SAAM,IAAI,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;QACnD,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,sBAAsB,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,SAAS,GAAG,CAAC,EAAE,CAAC;QAClE,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,YAAY,oBAAoB,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,cAAc,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,OAA0B,EAC1B,eAAkC,EAAE;IAEpC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,uBAAuB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1F,MAAM,SAAS,GACb,YAAY,CAAC,MAAM,GAAG,CAAC;QACrB,CAAC,CAAC,sBAAsB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,+CAA+C;YAC5F,oGAAoG;YACpG,qDAAqD;QACvD,CAAC,CAAC,EAAE,CAAC;IACT,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,GAAG,mBAAmB,GAAG,UAAU,GAAG,SAAS,EAAE;KAC3D,CAAC;AACJ,CAAC;AAED,6DAA6D;AAC7D,MAAM,YAAY,GAAG,8BAA8B,CAAC;AACpD,sDAAsD;AACtD,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAExC;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAC7B,YAA8B,EAC9B,GAAW,EACX,aAAqC,UAAU;IAE/C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC,CAAC,+CAA+C;IAC3F,KAAK,MAAM,CAAC,IAAI,YAAY;QAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAE5C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,4BAA4B;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,SAAS,CAAC,kBAAkB;QACxC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzD,6EAA6E;QAC7E,mEAAmE;QACnE,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,QAAQ;aACxB,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,SAAS,CAAC,EAAE,EAAE,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;aAC1D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAAE,SAAS,CAAC,2BAA2B;QACpF,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,OAAO,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it } from "vitest";
|
|
2
|
+
import path from "node:path";
|
|
2
3
|
import { buildIdealReviewMessage, buildReviewCoverageMessage, detectTestDrift, evaluateIdealReview, ReviewCoverageTracker, withReviewCoverageRequirements, } from "./ideal-review.js";
|
|
3
4
|
describe("ReviewCoverageTracker", () => {
|
|
4
5
|
it("counts only successful read callbacks after review starts", () => {
|
|
@@ -105,9 +106,13 @@ describe("buildIdealReviewMessage", () => {
|
|
|
105
106
|
});
|
|
106
107
|
describe("detectTestDrift", () => {
|
|
107
108
|
const cwd = "/proj";
|
|
109
|
+
// Fixture paths are written POSIX-style for readability, but the code under
|
|
110
|
+
// test builds candidates with path.join/path.resolve — which on Windows
|
|
111
|
+
// yields `D:\proj\src\foo.test.ts`. Resolve BOTH sides so the lookup compares
|
|
112
|
+
// like with like instead of silently never matching.
|
|
108
113
|
const exists = (files) => {
|
|
109
|
-
const set = new Set(files);
|
|
110
|
-
return (p) => set.has(p);
|
|
114
|
+
const set = new Set(files.map((f) => path.resolve(cwd, f)));
|
|
115
|
+
return (p) => set.has(path.resolve(cwd, p));
|
|
111
116
|
};
|
|
112
117
|
it("flags a changed source whose sibling test exists but was not touched", () => {
|
|
113
118
|
const drift = detectTestDrift(["src/foo.ts"], cwd, exists(["/proj/src/foo.test.ts"]));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ideal-review.test.js","sourceRoot":"","sources":["../../src/core/ideal-review.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ideal-review.test.js","sourceRoot":"","sources":["../../src/core/ideal-review.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,34 @@ export interface LspDiagnostic {
|
|
|
16
16
|
source?: string;
|
|
17
17
|
code?: string | number;
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Canonical cache key for a `file://` URI.
|
|
21
|
+
*
|
|
22
|
+
* Diagnostics live in a Map keyed by URI: we `set` what the server sends and
|
|
23
|
+
* `get` what we built from the edited path, so the two must be the SAME STRING.
|
|
24
|
+
* There is no single canonical spelling of a file URI, and on Windows we and
|
|
25
|
+
* tsserver disagreed in two independent ways at once. Measured on CI:
|
|
26
|
+
*
|
|
27
|
+
* we sent: file:///c:/Users/RUNNER%7E1/…/main.ts
|
|
28
|
+
* server sent: file:///c%3A/Users/RUNNER~1/…/main.ts
|
|
29
|
+
*
|
|
30
|
+
* `~` is an RFC 3986 unreserved character that `pathToFileURL` percent-encodes
|
|
31
|
+
* and tsserver leaves literal; the drive colon is the reverse. Every lookup
|
|
32
|
+
* missed, so the diagnostics arrived (the wire trace shows `diagnostics=1`)
|
|
33
|
+
* and were then dropped on the floor — reported to the user as a clean file,
|
|
34
|
+
* because LSP degrades silently by design. 8.3 short names like `RUNNER~1` are
|
|
35
|
+
* not exotic: that IS the Windows temp path on GitHub runners, and `PROGRA~1`
|
|
36
|
+
* and friends show up in real user paths.
|
|
37
|
+
*
|
|
38
|
+
* Fix: decode percent-escapes and lower-case the drive letter, so both
|
|
39
|
+
* spellings collapse to one key. Used ONLY as a Map key — the URI actually put
|
|
40
|
+
* on the wire is still the properly encoded one from `pathToFileURL`.
|
|
41
|
+
*
|
|
42
|
+
* Windows paths are also case-insensitive, but case is deliberately NOT folded:
|
|
43
|
+
* both sides derive from the same path string, and folding would break the
|
|
44
|
+
* genuinely case-sensitive POSIX servers that share this code.
|
|
45
|
+
*/
|
|
46
|
+
export declare function normalizeUri(uri: string): string;
|
|
19
47
|
/**
|
|
20
48
|
* One language-server process bound to one project root. Owns document sync
|
|
21
49
|
* (didOpen / didChange / didSave with per-uri version counters), the
|
|
@@ -34,10 +62,19 @@ export declare class LspClient {
|
|
|
34
62
|
private readonly activeProgressTokens;
|
|
35
63
|
private alive;
|
|
36
64
|
private readonly initializationOptions;
|
|
65
|
+
private stderrBuffer;
|
|
37
66
|
constructor(spec: LspServerSpec, rootPath: string, command: ResolvedCommand);
|
|
38
67
|
get isAlive(): boolean;
|
|
39
68
|
/** True while the server reports indexing/analysis through LSP work progress. */
|
|
40
69
|
get hasActiveProgress(): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Drain the server's stderr into a bounded ring, and mirror it to the debug
|
|
72
|
+
* log so a misbehaving server is diagnosable from `~/.gg/*.log` alone.
|
|
73
|
+
* Bounded because a looping server can emit stderr without limit.
|
|
74
|
+
*/
|
|
75
|
+
private captureStderr;
|
|
76
|
+
/** Most recent server stderr, for failure diagnostics. */
|
|
77
|
+
stderrTail(): string;
|
|
41
78
|
initialize(timeoutMs: number): Promise<void>;
|
|
42
79
|
/**
|
|
43
80
|
* Sync `content` into the server's overlay for `filePath` — didOpen the
|
|
@@ -59,6 +96,19 @@ export declare class LspClient {
|
|
|
59
96
|
* servers that ignore them (and stdin EOF reaps them when we die first).
|
|
60
97
|
*/
|
|
61
98
|
shutdown(): void;
|
|
99
|
+
/**
|
|
100
|
+
* Force-kill the server and everything it spawned, immediately.
|
|
101
|
+
*
|
|
102
|
+
* For a server that never completed the handshake, the polite
|
|
103
|
+
* `shutdown`/`exit` sequence is pointless — it has already proven it isn't
|
|
104
|
+
* answering — so skip straight to the kill.
|
|
105
|
+
*
|
|
106
|
+
* Uses `killProcessTree`, not `proc.kill()`: language servers spawn children
|
|
107
|
+
* (typescript-language-server runs tsserver), Windows has no process groups,
|
|
108
|
+
* and killing only the parent leaves those children alive holding file
|
|
109
|
+
* handles in the project directory.
|
|
110
|
+
*/
|
|
111
|
+
terminate(): void;
|
|
62
112
|
private markDead;
|
|
63
113
|
private waitForPublish;
|
|
64
114
|
private pullDiagnostics;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/client.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEnE,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE;QAAE,KAAK,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,GAAG,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IAChG,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAyED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBhD;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IAclB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAd3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAe;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAoB;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAChE,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAqB;IAC1D,OAAO,CAAC,KAAK,CAAQ;IAErB,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAU;IAChD,OAAO,CAAC,YAAY,CAAM;gBAGP,IAAI,EAAE,aAAa,EACnB,QAAQ,EAAE,MAAM,EACjC,OAAO,EAAE,eAAe;IAsD1B,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,iFAAiF;IACjF,IAAI,iBAAiB,IAAI,OAAO,CAE/B;IAED;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAWrB,0DAA0D;IAC1D,UAAU,IAAI,MAAM;IAId,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BlD;;;;;OAKG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IA+BvD;;;;OAIG;IACG,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC;IAuBzF;;;;;OAKG;IACH,QAAQ,IAAI,IAAI;IAUhB;;;;;;;;;;;OAWG;IACH,SAAS,IAAI,IAAI;IAMjB,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,cAAc;YAwBR,eAAe;CAqB9B"}
|
package/dist/core/lsp/client.js
CHANGED
|
@@ -2,19 +2,95 @@ import { spawn } from "node:child_process";
|
|
|
2
2
|
import { pathToFileURL } from "node:url";
|
|
3
3
|
import { JsonRpcConnection, JsonRpcRequestError } from "./jsonrpc.js";
|
|
4
4
|
import { getSafeToolEnv } from "../../tools/safe-env.js";
|
|
5
|
+
import { killProcessTree } from "../../utils/process.js";
|
|
6
|
+
import { log } from "../logger.js";
|
|
5
7
|
function progressTokenKey(token) {
|
|
6
8
|
return `${typeof token}:${String(token)}`;
|
|
7
9
|
}
|
|
8
10
|
const SERVER_CANCELLED = -32802;
|
|
9
11
|
const METHOD_NOT_FOUND = -32601;
|
|
10
12
|
const PULL_POLL_INTERVAL_MS = 300;
|
|
13
|
+
/** Bounded stderr retained per server for failure diagnostics. */
|
|
14
|
+
const STDERR_TAIL_BYTES = 4000;
|
|
11
15
|
const SHUTDOWN_TIMEOUT_MS = 2000;
|
|
12
16
|
const KILL_GRACE_MS = 1500;
|
|
17
|
+
/**
|
|
18
|
+
* JSON-RPC wire tracer, enabled only by `GG_LSP_TRACE=1`.
|
|
19
|
+
*
|
|
20
|
+
* When a server accepts a document and then never publishes diagnostics, the
|
|
21
|
+
* outcome (`timeout`) looks identical whether our `didOpen` never went out, the
|
|
22
|
+
* server rejected it, or it answered about a URI we weren't watching. Only the
|
|
23
|
+
* wire tells those apart. Opt-in because it is genuinely chatty, and params are
|
|
24
|
+
* SUMMARIZED rather than dumped so a trace can never spill file contents into a
|
|
25
|
+
* log.
|
|
26
|
+
*/
|
|
27
|
+
function wireTracer(serverId) {
|
|
28
|
+
if (process.env.GG_LSP_TRACE !== "1")
|
|
29
|
+
return undefined;
|
|
30
|
+
return (direction, message) => {
|
|
31
|
+
const params = message.params;
|
|
32
|
+
// `window/logMessage` / `window/showMessage` are the server's own
|
|
33
|
+
// human-readable complaints ("cannot find tsserver", bad option, …) and are
|
|
34
|
+
// frequently the only statement of what actually went wrong. Everything
|
|
35
|
+
// else is summarized — never file contents.
|
|
36
|
+
const isServerMessage = message.method === "window/logMessage" || message.method === "window/showMessage";
|
|
37
|
+
log("DEBUG", "lsp", `${serverId} rpc ${direction}`, {
|
|
38
|
+
method: message.method ?? `(response id=${String(message.id)})`,
|
|
39
|
+
uri: params?.textDocument?.uri ?? params?.uri,
|
|
40
|
+
// Counts only, never the diagnostics themselves.
|
|
41
|
+
diagnostics: Array.isArray(params?.diagnostics) ? params.diagnostics.length : undefined,
|
|
42
|
+
text: isServerMessage ? params?.message?.slice(0, 300) : undefined,
|
|
43
|
+
error: message.error?.message,
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
}
|
|
13
47
|
function sleep(ms) {
|
|
14
48
|
return new Promise((resolve) => {
|
|
15
49
|
setTimeout(resolve, ms).unref();
|
|
16
50
|
});
|
|
17
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* Canonical cache key for a `file://` URI.
|
|
54
|
+
*
|
|
55
|
+
* Diagnostics live in a Map keyed by URI: we `set` what the server sends and
|
|
56
|
+
* `get` what we built from the edited path, so the two must be the SAME STRING.
|
|
57
|
+
* There is no single canonical spelling of a file URI, and on Windows we and
|
|
58
|
+
* tsserver disagreed in two independent ways at once. Measured on CI:
|
|
59
|
+
*
|
|
60
|
+
* we sent: file:///c:/Users/RUNNER%7E1/…/main.ts
|
|
61
|
+
* server sent: file:///c%3A/Users/RUNNER~1/…/main.ts
|
|
62
|
+
*
|
|
63
|
+
* `~` is an RFC 3986 unreserved character that `pathToFileURL` percent-encodes
|
|
64
|
+
* and tsserver leaves literal; the drive colon is the reverse. Every lookup
|
|
65
|
+
* missed, so the diagnostics arrived (the wire trace shows `diagnostics=1`)
|
|
66
|
+
* and were then dropped on the floor — reported to the user as a clean file,
|
|
67
|
+
* because LSP degrades silently by design. 8.3 short names like `RUNNER~1` are
|
|
68
|
+
* not exotic: that IS the Windows temp path on GitHub runners, and `PROGRA~1`
|
|
69
|
+
* and friends show up in real user paths.
|
|
70
|
+
*
|
|
71
|
+
* Fix: decode percent-escapes and lower-case the drive letter, so both
|
|
72
|
+
* spellings collapse to one key. Used ONLY as a Map key — the URI actually put
|
|
73
|
+
* on the wire is still the properly encoded one from `pathToFileURL`.
|
|
74
|
+
*
|
|
75
|
+
* Windows paths are also case-insensitive, but case is deliberately NOT folded:
|
|
76
|
+
* both sides derive from the same path string, and folding would break the
|
|
77
|
+
* genuinely case-sensitive POSIX servers that share this code.
|
|
78
|
+
*/
|
|
79
|
+
export function normalizeUri(uri) {
|
|
80
|
+
let decoded = uri;
|
|
81
|
+
try {
|
|
82
|
+
decoded = decodeURI(uri);
|
|
83
|
+
// decodeURI leaves %3A alone (`:` is reserved), so unescape it explicitly
|
|
84
|
+
// rather than reaching for decodeURIComponent, which would also mangle any
|
|
85
|
+
// literal `#`/`?` a filename is allowed to contain.
|
|
86
|
+
decoded = decoded.replace(/%3A/gi, ":");
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// Malformed escape sequence — fall back to the raw URI rather than throwing
|
|
90
|
+
// inside a notification handler.
|
|
91
|
+
}
|
|
92
|
+
return decoded.replace(/^(file:\/\/\/)([A-Za-z])(:)/, (_m, prefix, drive) => `${prefix}${drive.toLowerCase()}:`);
|
|
93
|
+
}
|
|
18
94
|
/**
|
|
19
95
|
* One language-server process bound to one project root. Owns document sync
|
|
20
96
|
* (didOpen / didChange / didSave with per-uri version counters), the
|
|
@@ -33,29 +109,49 @@ export class LspClient {
|
|
|
33
109
|
activeProgressTokens = new Set();
|
|
34
110
|
alive = true;
|
|
35
111
|
initializationOptions;
|
|
112
|
+
stderrBuffer = "";
|
|
36
113
|
constructor(spec, rootPath, command) {
|
|
37
114
|
this.spec = spec;
|
|
38
115
|
this.rootPath = rootPath;
|
|
39
116
|
this.initializationOptions = command.initializationOptions ?? {};
|
|
40
117
|
this.proc = spawn(command.command, command.args, {
|
|
41
118
|
cwd: rootPath,
|
|
42
|
-
|
|
119
|
+
// stderr was "ignore" — which made every server-side failure completely
|
|
120
|
+
// unattributable. LSP degrades silently by design, so a server that boots
|
|
121
|
+
// and then errors (a tsserver that can't start, a bad
|
|
122
|
+
// initializationOptions path, an unsupported flag) produced exactly the
|
|
123
|
+
// same empty output as a clean file, with nothing anywhere saying why.
|
|
124
|
+
// Diagnosing the Windows timeout was blind for precisely this reason.
|
|
125
|
+
// Pipe it and log it; the pipe MUST be drained either way, or a chatty
|
|
126
|
+
// server eventually blocks on a full stderr buffer.
|
|
127
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
43
128
|
env: getSafeToolEnv(),
|
|
44
129
|
});
|
|
130
|
+
this.captureStderr();
|
|
45
131
|
this.proc.on("error", () => this.markDead());
|
|
46
|
-
this.proc.on("exit", () =>
|
|
132
|
+
this.proc.on("exit", (code, signal) => {
|
|
133
|
+
if (code !== 0 && code !== null) {
|
|
134
|
+
log("WARN", "lsp", `${spec.id} language server exited`, {
|
|
135
|
+
code,
|
|
136
|
+
signal,
|
|
137
|
+
stderr: this.stderrTail(),
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
this.markDead();
|
|
141
|
+
});
|
|
47
142
|
const { stdout, stdin } = this.proc;
|
|
48
143
|
if (!stdout || !stdin) {
|
|
49
144
|
// Cannot happen with "pipe" stdio, but guard instead of asserting.
|
|
50
145
|
this.proc.kill("SIGKILL");
|
|
51
146
|
throw new Error(`failed to open stdio pipes for ${spec.id} language server`);
|
|
52
147
|
}
|
|
53
|
-
this.conn = new JsonRpcConnection(stdout, stdin);
|
|
148
|
+
this.conn = new JsonRpcConnection(stdout, stdin, wireTracer(spec.id));
|
|
54
149
|
this.conn.onNotification("textDocument/publishDiagnostics", (params) => {
|
|
55
150
|
const publish = params;
|
|
56
|
-
|
|
151
|
+
const uri = normalizeUri(publish.uri);
|
|
152
|
+
this.published.set(uri, publish.diagnostics);
|
|
57
153
|
this.waiters = this.waiters.filter((waiter) => {
|
|
58
|
-
if (waiter.uri !==
|
|
154
|
+
if (waiter.uri !== uri)
|
|
59
155
|
return true;
|
|
60
156
|
waiter.resolve(publish.diagnostics);
|
|
61
157
|
return false;
|
|
@@ -79,7 +175,30 @@ export class LspClient {
|
|
|
79
175
|
get hasActiveProgress() {
|
|
80
176
|
return this.activeProgressTokens.size > 0;
|
|
81
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* Drain the server's stderr into a bounded ring, and mirror it to the debug
|
|
180
|
+
* log so a misbehaving server is diagnosable from `~/.gg/*.log` alone.
|
|
181
|
+
* Bounded because a looping server can emit stderr without limit.
|
|
182
|
+
*/
|
|
183
|
+
captureStderr() {
|
|
184
|
+
this.proc.stderr?.on("data", (chunk) => {
|
|
185
|
+
const text = chunk.toString();
|
|
186
|
+
this.stderrBuffer = (this.stderrBuffer + text).slice(-STDERR_TAIL_BYTES);
|
|
187
|
+
const trimmed = text.trim();
|
|
188
|
+
if (trimmed)
|
|
189
|
+
log("DEBUG", "lsp", `${this.spec.id} stderr`, { text: trimmed.slice(0, 500) });
|
|
190
|
+
});
|
|
191
|
+
// A read error must not take the process down; the server is still usable.
|
|
192
|
+
this.proc.stderr?.on("error", () => { });
|
|
193
|
+
}
|
|
194
|
+
/** Most recent server stderr, for failure diagnostics. */
|
|
195
|
+
stderrTail() {
|
|
196
|
+
return this.stderrBuffer.trim().slice(-STDERR_TAIL_BYTES);
|
|
197
|
+
}
|
|
82
198
|
async initialize(timeoutMs) {
|
|
199
|
+
// Wire value: keep it properly percent-encoded. `normalizeUri` is a cache
|
|
200
|
+
// key helper, and a decoded root (`C:\Program Files\…` → a literal space)
|
|
201
|
+
// is not a valid URI to hand a server at initialize.
|
|
83
202
|
const rootUri = pathToFileURL(this.rootPath).href;
|
|
84
203
|
const result = (await this.conn.request("initialize", {
|
|
85
204
|
processId: process.pid,
|
|
@@ -106,11 +225,16 @@ export class LspClient {
|
|
|
106
225
|
* report computed against THIS content rather than a stale one.
|
|
107
226
|
*/
|
|
108
227
|
syncDocument(filePath, content) {
|
|
228
|
+
// Two different strings on purpose: `uri` is the properly percent-encoded
|
|
229
|
+
// form that goes ON THE WIRE (a literal space or `~` there would be an
|
|
230
|
+
// invalid URI), while `key` is the decoded form used for our own bookkeeping
|
|
231
|
+
// so it matches whatever spelling the server replies with.
|
|
109
232
|
const uri = pathToFileURL(filePath).href;
|
|
110
|
-
|
|
111
|
-
|
|
233
|
+
const key = normalizeUri(uri);
|
|
234
|
+
this.published.delete(key);
|
|
235
|
+
const previousVersion = this.versions.get(key);
|
|
112
236
|
if (previousVersion === undefined) {
|
|
113
|
-
this.versions.set(
|
|
237
|
+
this.versions.set(key, 1);
|
|
114
238
|
this.conn.notify("textDocument/didOpen", {
|
|
115
239
|
textDocument: {
|
|
116
240
|
uri,
|
|
@@ -122,7 +246,7 @@ export class LspClient {
|
|
|
122
246
|
}
|
|
123
247
|
else {
|
|
124
248
|
const version = previousVersion + 1;
|
|
125
|
-
this.versions.set(
|
|
249
|
+
this.versions.set(key, version);
|
|
126
250
|
this.conn.notify("textDocument/didChange", {
|
|
127
251
|
textDocument: { uri, version },
|
|
128
252
|
contentChanges: [{ text: content }],
|
|
@@ -173,10 +297,28 @@ export class LspClient {
|
|
|
173
297
|
this.conn.notify("exit");
|
|
174
298
|
const killTimer = setTimeout(() => {
|
|
175
299
|
if (this.alive)
|
|
176
|
-
this.
|
|
300
|
+
this.terminate();
|
|
177
301
|
}, KILL_GRACE_MS);
|
|
178
302
|
killTimer.unref();
|
|
179
303
|
}
|
|
304
|
+
/**
|
|
305
|
+
* Force-kill the server and everything it spawned, immediately.
|
|
306
|
+
*
|
|
307
|
+
* For a server that never completed the handshake, the polite
|
|
308
|
+
* `shutdown`/`exit` sequence is pointless — it has already proven it isn't
|
|
309
|
+
* answering — so skip straight to the kill.
|
|
310
|
+
*
|
|
311
|
+
* Uses `killProcessTree`, not `proc.kill()`: language servers spawn children
|
|
312
|
+
* (typescript-language-server runs tsserver), Windows has no process groups,
|
|
313
|
+
* and killing only the parent leaves those children alive holding file
|
|
314
|
+
* handles in the project directory.
|
|
315
|
+
*/
|
|
316
|
+
terminate() {
|
|
317
|
+
this.conn.dispose();
|
|
318
|
+
if (this.proc.pid !== undefined)
|
|
319
|
+
killProcessTree(this.proc.pid);
|
|
320
|
+
this.markDead();
|
|
321
|
+
}
|
|
180
322
|
markDead() {
|
|
181
323
|
this.alive = false;
|
|
182
324
|
this.activeProgressTokens.clear();
|
|
@@ -187,14 +329,17 @@ export class LspClient {
|
|
|
187
329
|
waiter.resolve([]);
|
|
188
330
|
}
|
|
189
331
|
waitForPublish(uri, timeoutMs) {
|
|
190
|
-
|
|
332
|
+
// Both the cache and the waiter list are keyed by the normalized form, which
|
|
333
|
+
// is what the publishDiagnostics handler stores under.
|
|
334
|
+
const key = normalizeUri(uri);
|
|
335
|
+
const cached = this.published.get(key);
|
|
191
336
|
if (cached !== undefined)
|
|
192
337
|
return Promise.resolve(cached);
|
|
193
338
|
if (!this.alive)
|
|
194
339
|
return Promise.resolve(null);
|
|
195
340
|
return new Promise((resolve) => {
|
|
196
341
|
const waiter = {
|
|
197
|
-
uri,
|
|
342
|
+
uri: key,
|
|
198
343
|
resolve: (diagnostics) => {
|
|
199
344
|
clearTimeout(timer);
|
|
200
345
|
resolve(diagnostics);
|
|
@@ -214,7 +359,7 @@ export class LspClient {
|
|
|
214
359
|
if (report?.kind === "full")
|
|
215
360
|
return report.items ?? [];
|
|
216
361
|
if (report?.kind === "unchanged")
|
|
217
|
-
return this.published.get(uri) ?? [];
|
|
362
|
+
return this.published.get(normalizeUri(uri)) ?? [];
|
|
218
363
|
return "unsupported";
|
|
219
364
|
}
|
|
220
365
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/core/lsp/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/core/lsp/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,29 @@
|
|
|
1
1
|
import type { Readable, Writable } from "node:stream";
|
|
2
|
+
/**
|
|
3
|
+
* Minimal JSON-RPC 2.0 connection over a byte stream pair with LSP-style
|
|
4
|
+
* Content-Length framing. Zero dependencies by design — this module must
|
|
5
|
+
* never pull in vscode-jsonrpc or any other package (hard distribution
|
|
6
|
+
* constraint: LSP diagnostics add no install weight).
|
|
7
|
+
*/
|
|
8
|
+
interface JsonRpcMessage {
|
|
9
|
+
jsonrpc?: string;
|
|
10
|
+
id?: number | string;
|
|
11
|
+
method?: string;
|
|
12
|
+
params?: unknown;
|
|
13
|
+
result?: unknown;
|
|
14
|
+
error?: {
|
|
15
|
+
code: number;
|
|
16
|
+
message: string;
|
|
17
|
+
data?: unknown;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
2
20
|
export declare class JsonRpcRequestError extends Error {
|
|
3
21
|
readonly code: number;
|
|
4
22
|
constructor(method: string, code: number, message: string);
|
|
5
23
|
}
|
|
6
24
|
export type NotificationHandler = (params: unknown) => void;
|
|
25
|
+
/** Observer for every framed message crossing the wire, in both directions. */
|
|
26
|
+
export type WireTracer = (direction: "out" | "in", message: JsonRpcMessage) => void;
|
|
7
27
|
/**
|
|
8
28
|
* JSON-RPC connection speaking Content-Length framed messages.
|
|
9
29
|
*
|
|
@@ -14,12 +34,28 @@ export type NotificationHandler = (params: unknown) => void;
|
|
|
14
34
|
*/
|
|
15
35
|
export declare class JsonRpcConnection {
|
|
16
36
|
private readonly output;
|
|
37
|
+
/**
|
|
38
|
+
* Optional wire tracer. Diagnosing a server that accepts a document and
|
|
39
|
+
* then never publishes requires seeing whether our notification actually
|
|
40
|
+
* went out and whether anything came back — indistinguishable from outside,
|
|
41
|
+
* because LSP failures are silent by design. Off unless a caller passes
|
|
42
|
+
* one, so the normal path is byte-identical.
|
|
43
|
+
*/
|
|
44
|
+
private readonly trace?;
|
|
17
45
|
private buffer;
|
|
18
46
|
private nextId;
|
|
19
47
|
private readonly pending;
|
|
20
48
|
private readonly notificationHandlers;
|
|
21
49
|
private disposed;
|
|
22
|
-
constructor(input: Readable, output: Writable
|
|
50
|
+
constructor(input: Readable, output: Writable,
|
|
51
|
+
/**
|
|
52
|
+
* Optional wire tracer. Diagnosing a server that accepts a document and
|
|
53
|
+
* then never publishes requires seeing whether our notification actually
|
|
54
|
+
* went out and whether anything came back — indistinguishable from outside,
|
|
55
|
+
* because LSP failures are silent by design. Off unless a caller passes
|
|
56
|
+
* one, so the normal path is byte-identical.
|
|
57
|
+
*/
|
|
58
|
+
trace?: WireTracer | undefined);
|
|
23
59
|
onNotification(method: string, handler: NotificationHandler): void;
|
|
24
60
|
request(method: string, params: unknown, timeoutMs: number): Promise<unknown>;
|
|
25
61
|
notify(method: string, params?: unknown): void;
|
|
@@ -29,4 +65,5 @@ export declare class JsonRpcConnection {
|
|
|
29
65
|
private onData;
|
|
30
66
|
private onMessage;
|
|
31
67
|
}
|
|
68
|
+
export {};
|
|
32
69
|
//# sourceMappingURL=jsonrpc.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonrpc.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/jsonrpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"jsonrpc.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/jsonrpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEtD;;;;;GAKG;AAEH,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CAC3D;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAEV,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1D;AAED,MAAM,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;AAE5D,+EAA+E;AAC/E,MAAM,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;AAIpF;;;;;;;GAOG;AACH,qBAAa,iBAAiB;IAS1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB;;;;;;OAMG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;IAhBzB,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoD;IAC5E,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA4C;IACjF,OAAO,CAAC,QAAQ,CAAS;gBAGvB,KAAK,EAAE,QAAQ,EACE,MAAM,EAAE,QAAQ;IACjC;;;;;;OAMG;IACc,KAAK,CAAC,EAAE,UAAU,YAAA;IAOrC,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAMlE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAuB7E,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI;IAI9C,iEAAiE;IACjE,OAAO,IAAI,IAAI;IASf,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,MAAM;IA0Bd,OAAO,CAAC,SAAS;CA6BlB"}
|
package/dist/core/lsp/jsonrpc.js
CHANGED
|
@@ -17,13 +17,23 @@ const HEADER_SEPARATOR = "\r\n\r\n";
|
|
|
17
17
|
*/
|
|
18
18
|
export class JsonRpcConnection {
|
|
19
19
|
output;
|
|
20
|
+
trace;
|
|
20
21
|
buffer = Buffer.alloc(0);
|
|
21
22
|
nextId = 1;
|
|
22
23
|
pending = new Map();
|
|
23
24
|
notificationHandlers = new Map();
|
|
24
25
|
disposed = false;
|
|
25
|
-
constructor(input, output
|
|
26
|
+
constructor(input, output,
|
|
27
|
+
/**
|
|
28
|
+
* Optional wire tracer. Diagnosing a server that accepts a document and
|
|
29
|
+
* then never publishes requires seeing whether our notification actually
|
|
30
|
+
* went out and whether anything came back — indistinguishable from outside,
|
|
31
|
+
* because LSP failures are silent by design. Off unless a caller passes
|
|
32
|
+
* one, so the normal path is byte-identical.
|
|
33
|
+
*/
|
|
34
|
+
trace) {
|
|
26
35
|
this.output = output;
|
|
36
|
+
this.trace = trace;
|
|
27
37
|
input.on("data", (chunk) => this.onData(chunk));
|
|
28
38
|
// Writing to a dead server's stdin must never crash the host process.
|
|
29
39
|
output.on("error", () => { });
|
|
@@ -72,6 +82,7 @@ export class JsonRpcConnection {
|
|
|
72
82
|
send(msg) {
|
|
73
83
|
if (this.disposed)
|
|
74
84
|
return;
|
|
85
|
+
this.trace?.("out", msg);
|
|
75
86
|
const body = JSON.stringify(msg);
|
|
76
87
|
try {
|
|
77
88
|
this.output.write(`Content-Length: ${Buffer.byteLength(body)}\r\n\r\n${body}`);
|
|
@@ -109,6 +120,7 @@ export class JsonRpcConnection {
|
|
|
109
120
|
}
|
|
110
121
|
}
|
|
111
122
|
onMessage(msg) {
|
|
123
|
+
this.trace?.("in", msg);
|
|
112
124
|
// Response to one of our requests.
|
|
113
125
|
if (msg.id !== undefined && msg.method === undefined) {
|
|
114
126
|
const settle = typeof msg.id === "number" ? this.pending.get(msg.id) : undefined;
|