@kenkaiiii/ggcoder 5.23.1 → 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.
Files changed (176) hide show
  1. package/dist/app-sidecar.js +11 -0
  2. package/dist/app-sidecar.js.map +1 -1
  3. package/dist/chat-agents/general.test.js +6 -3
  4. package/dist/chat-agents/general.test.js.map +1 -1
  5. package/dist/chat-agents/specialists.test.js +3 -2
  6. package/dist/chat-agents/specialists.test.js.map +1 -1
  7. package/dist/cli.d.ts.map +1 -1
  8. package/dist/cli.js +12 -0
  9. package/dist/cli.js.map +1 -1
  10. package/dist/config.d.ts +14 -0
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +41 -40
  13. package/dist/config.js.map +1 -1
  14. package/dist/config.test.js +61 -1
  15. package/dist/config.test.js.map +1 -1
  16. package/dist/core/agent-mcp-passthrough.test.d.ts +2 -0
  17. package/dist/core/agent-mcp-passthrough.test.d.ts.map +1 -0
  18. package/dist/core/agent-mcp-passthrough.test.js +61 -0
  19. package/dist/core/agent-mcp-passthrough.test.js.map +1 -0
  20. package/dist/core/agent-session-compaction.test.js +4 -7
  21. package/dist/core/agent-session-compaction.test.js.map +1 -1
  22. package/dist/core/agent-session-marker-anchors.test.js +4 -7
  23. package/dist/core/agent-session-marker-anchors.test.js.map +1 -1
  24. package/dist/core/agent-session-memory-tail.test.js +4 -7
  25. package/dist/core/agent-session-memory-tail.test.js.map +1 -1
  26. package/dist/core/agent-session-queue.test.js +4 -7
  27. package/dist/core/agent-session-queue.test.js.map +1 -1
  28. package/dist/core/agent-tools-allowlist.test.js +5 -3
  29. package/dist/core/agent-tools-allowlist.test.js.map +1 -1
  30. package/dist/core/agents.d.ts +11 -0
  31. package/dist/core/agents.d.ts.map +1 -1
  32. package/dist/core/agents.js +21 -0
  33. package/dist/core/agents.js.map +1 -1
  34. package/dist/core/agents.test.d.ts +2 -0
  35. package/dist/core/agents.test.d.ts.map +1 -0
  36. package/dist/core/agents.test.js +67 -0
  37. package/dist/core/agents.test.js.map +1 -0
  38. package/dist/core/encode-cwd.d.ts +17 -0
  39. package/dist/core/encode-cwd.d.ts.map +1 -1
  40. package/dist/core/encode-cwd.js +20 -7
  41. package/dist/core/encode-cwd.js.map +1 -1
  42. package/dist/core/encode-cwd.test.js +20 -1
  43. package/dist/core/encode-cwd.test.js.map +1 -1
  44. package/dist/core/ideal-review.d.ts.map +1 -1
  45. package/dist/core/ideal-review.js +6 -1
  46. package/dist/core/ideal-review.js.map +1 -1
  47. package/dist/core/ideal-review.test.js +7 -2
  48. package/dist/core/ideal-review.test.js.map +1 -1
  49. package/dist/core/lsp/client.d.ts +50 -0
  50. package/dist/core/lsp/client.d.ts.map +1 -1
  51. package/dist/core/lsp/client.js +158 -13
  52. package/dist/core/lsp/client.js.map +1 -1
  53. package/dist/core/lsp/jsonrpc.d.ts +38 -1
  54. package/dist/core/lsp/jsonrpc.d.ts.map +1 -1
  55. package/dist/core/lsp/jsonrpc.js +13 -1
  56. package/dist/core/lsp/jsonrpc.js.map +1 -1
  57. package/dist/core/lsp/manager.d.ts.map +1 -1
  58. package/dist/core/lsp/manager.js +23 -2
  59. package/dist/core/lsp/manager.js.map +1 -1
  60. package/dist/core/lsp/manager.test.js +32 -1
  61. package/dist/core/lsp/manager.test.js.map +1 -1
  62. package/dist/core/lsp/test-support.d.ts +18 -0
  63. package/dist/core/lsp/test-support.d.ts.map +1 -0
  64. package/dist/core/lsp/test-support.js +27 -0
  65. package/dist/core/lsp/test-support.js.map +1 -0
  66. package/dist/core/lsp/uri.test.d.ts +2 -0
  67. package/dist/core/lsp/uri.test.d.ts.map +1 -0
  68. package/dist/core/lsp/uri.test.js +56 -0
  69. package/dist/core/lsp/uri.test.js.map +1 -0
  70. package/dist/core/lsp/windows.test.d.ts +2 -0
  71. package/dist/core/lsp/windows.test.d.ts.map +1 -0
  72. package/dist/core/lsp/windows.test.js +251 -0
  73. package/dist/core/lsp/windows.test.js.map +1 -0
  74. package/dist/core/mcp/resolve-stdio.d.ts +35 -0
  75. package/dist/core/mcp/resolve-stdio.d.ts.map +1 -1
  76. package/dist/core/mcp/resolve-stdio.js +80 -1
  77. package/dist/core/mcp/resolve-stdio.js.map +1 -1
  78. package/dist/core/mcp/resolve-stdio.test.js +99 -4
  79. package/dist/core/mcp/resolve-stdio.test.js.map +1 -1
  80. package/dist/core/persistent-shell.d.ts +3 -1
  81. package/dist/core/persistent-shell.d.ts.map +1 -1
  82. package/dist/core/persistent-shell.js +13 -3
  83. package/dist/core/persistent-shell.js.map +1 -1
  84. package/dist/core/process-manager-dev-server-repro.test.js +34 -12
  85. package/dist/core/process-manager-dev-server-repro.test.js.map +1 -1
  86. package/dist/core/process-manager.d.ts +1 -1
  87. package/dist/core/process-manager.d.ts.map +1 -1
  88. package/dist/core/process-manager.js +23 -13
  89. package/dist/core/process-manager.js.map +1 -1
  90. package/dist/core/project-discovery.d.ts +10 -0
  91. package/dist/core/project-discovery.d.ts.map +1 -1
  92. package/dist/core/project-discovery.js +42 -8
  93. package/dist/core/project-discovery.js.map +1 -1
  94. package/dist/core/project-discovery.test.js +102 -1
  95. package/dist/core/project-discovery.test.js.map +1 -1
  96. package/dist/core/prompt-commands.d.ts.map +1 -1
  97. package/dist/core/prompt-commands.js +12 -9
  98. package/dist/core/prompt-commands.js.map +1 -1
  99. package/dist/core/prompt-commands.test.js +10 -0
  100. package/dist/core/prompt-commands.test.js.map +1 -1
  101. package/dist/core/radio.test.js +4 -1
  102. package/dist/core/radio.test.js.map +1 -1
  103. package/dist/core/runtime-mode.d.ts +8 -0
  104. package/dist/core/runtime-mode.d.ts.map +1 -1
  105. package/dist/core/runtime-mode.js +10 -0
  106. package/dist/core/runtime-mode.js.map +1 -1
  107. package/dist/core/session-storage.d.ts.map +1 -1
  108. package/dist/core/session-storage.js +25 -1
  109. package/dist/core/session-storage.js.map +1 -1
  110. package/dist/core/session-storage.test.js +4 -1
  111. package/dist/core/session-storage.test.js.map +1 -1
  112. package/dist/core/skills-routing.test.js +3 -1
  113. package/dist/core/skills-routing.test.js.map +1 -1
  114. package/dist/core/slash-commands.d.ts.map +1 -1
  115. package/dist/core/slash-commands.js +7 -3
  116. package/dist/core/slash-commands.js.map +1 -1
  117. package/dist/core/speed-benchmark.test.js +9 -3
  118. package/dist/core/speed-benchmark.test.js.map +1 -1
  119. package/dist/core/subagent-manager.d.ts +1 -1
  120. package/dist/core/subagent-manager.d.ts.map +1 -1
  121. package/dist/core/subagent-manager.js +9 -0
  122. package/dist/core/subagent-manager.js.map +1 -1
  123. package/dist/core/subagent-store.test.js +14 -2
  124. package/dist/core/subagent-store.test.js.map +1 -1
  125. package/dist/modes/json-mode.d.ts +7 -0
  126. package/dist/modes/json-mode.d.ts.map +1 -1
  127. package/dist/modes/json-mode.js +1 -0
  128. package/dist/modes/json-mode.js.map +1 -1
  129. package/dist/modes/subagent-worker-mode.d.ts +2 -0
  130. package/dist/modes/subagent-worker-mode.d.ts.map +1 -1
  131. package/dist/modes/subagent-worker-mode.js.map +1 -1
  132. package/dist/system-prompt.js +1 -1
  133. package/dist/system-prompt.js.map +1 -1
  134. package/dist/system-prompt.test.js +3 -0
  135. package/dist/system-prompt.test.js.map +1 -1
  136. package/dist/test-support/fake-home.d.ts +20 -0
  137. package/dist/test-support/fake-home.d.ts.map +1 -0
  138. package/dist/test-support/fake-home.js +37 -0
  139. package/dist/test-support/fake-home.js.map +1 -0
  140. package/dist/tools/bash.d.ts.map +1 -1
  141. package/dist/tools/bash.js +7 -3
  142. package/dist/tools/bash.js.map +1 -1
  143. package/dist/tools/bash.test.js +103 -7
  144. package/dist/tools/bash.test.js.map +1 -1
  145. package/dist/tools/edit-robustness.test.js +3 -1
  146. package/dist/tools/edit-robustness.test.js.map +1 -1
  147. package/dist/tools/find.d.ts.map +1 -1
  148. package/dist/tools/find.js +4 -1
  149. package/dist/tools/find.js.map +1 -1
  150. package/dist/tools/grep.d.ts.map +1 -1
  151. package/dist/tools/grep.js +3 -1
  152. package/dist/tools/grep.js.map +1 -1
  153. package/dist/tools/overflow.test.js +4 -7
  154. package/dist/tools/overflow.test.js.map +1 -1
  155. package/dist/tools/path-utils.d.ts +15 -0
  156. package/dist/tools/path-utils.d.ts.map +1 -1
  157. package/dist/tools/path-utils.js +17 -0
  158. package/dist/tools/path-utils.js.map +1 -1
  159. package/dist/tools/path-utils.test.js +7 -2
  160. package/dist/tools/path-utils.test.js.map +1 -1
  161. package/dist/tools/search-code.d.ts.map +1 -1
  162. package/dist/tools/search-code.js +6 -4
  163. package/dist/tools/search-code.js.map +1 -1
  164. package/dist/tools/subagent.d.ts +1 -1
  165. package/dist/tools/subagent.d.ts.map +1 -1
  166. package/dist/tools/subagent.js +8 -0
  167. package/dist/tools/subagent.js.map +1 -1
  168. package/dist/utils/process.d.ts +26 -3
  169. package/dist/utils/process.d.ts.map +1 -1
  170. package/dist/utils/process.js +68 -10
  171. package/dist/utils/process.js.map +1 -1
  172. package/dist/utils/process.test.d.ts +2 -0
  173. package/dist/utils/process.test.d.ts.map +1 -0
  174. package/dist/utils/process.test.js +42 -0
  175. package/dist/utils/process.test.js.map +1 -0
  176. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"manager.test.js","sourceRoot":"","sources":["../../../src/core/lsp/manager.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.test.js","sourceRoot":"","sources":["../../../src/core/lsp/manager.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Remove a temp directory once the OS lets go of it.
3
+ *
4
+ * `shutdownAll()` signals a language server but does not wait for it to be
5
+ * reaped. POSIX happily unlinks a directory a live process still holds open;
6
+ * Windows refuses with EBUSY/EPERM until every handle is closed. A plain
7
+ * `fs.rm` in `afterEach`/`afterAll` therefore fails LSP suites on Windows in
8
+ * TEARDOWN, with every real assertion already passed — noise that buries the
9
+ * failures worth reading.
10
+ *
11
+ * Retries briefly, then lets a genuine failure surface rather than swallowing
12
+ * it. Test-only helper; not part of the shipped LSP surface.
13
+ */
14
+ export declare function removeWhenReleased(dir: string, { attempts, delayMs }?: {
15
+ attempts?: number | undefined;
16
+ delayMs?: number | undefined;
17
+ }): Promise<void>;
18
+ //# sourceMappingURL=test-support.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-support.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/test-support.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,EAAE,QAAa,EAAE,OAAY,EAAE;;;CAAK,GACnC,OAAO,CAAC,IAAI,CAAC,CAUf"}
@@ -0,0 +1,27 @@
1
+ import fs from "node:fs/promises";
2
+ /**
3
+ * Remove a temp directory once the OS lets go of it.
4
+ *
5
+ * `shutdownAll()` signals a language server but does not wait for it to be
6
+ * reaped. POSIX happily unlinks a directory a live process still holds open;
7
+ * Windows refuses with EBUSY/EPERM until every handle is closed. A plain
8
+ * `fs.rm` in `afterEach`/`afterAll` therefore fails LSP suites on Windows in
9
+ * TEARDOWN, with every real assertion already passed — noise that buries the
10
+ * failures worth reading.
11
+ *
12
+ * Retries briefly, then lets a genuine failure surface rather than swallowing
13
+ * it. Test-only helper; not part of the shipped LSP surface.
14
+ */
15
+ export async function removeWhenReleased(dir, { attempts = 40, delayMs = 50 } = {}) {
16
+ for (let attempt = 0; attempt < attempts; attempt++) {
17
+ try {
18
+ await fs.rm(dir, { recursive: true, force: true });
19
+ return;
20
+ }
21
+ catch {
22
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
23
+ }
24
+ }
25
+ await fs.rm(dir, { recursive: true, force: true });
26
+ }
27
+ //# sourceMappingURL=test-support.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-support.js","sourceRoot":"","sources":["../../../src/core/lsp/test-support.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAW,EACX,EAAE,QAAQ,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,EAAE;IAEpC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;QACpD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACnD,OAAO;QACT,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IACD,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=uri.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uri.test.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/uri.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,56 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import path from "node:path";
3
+ import { pathToFileURL } from "node:url";
4
+ import { normalizeUri } from "./client.js";
5
+ describe("normalizeUri", () => {
6
+ // Diagnostics are cached by URI string, so our key and the server's must be
7
+ // identical. There is no single canonical spelling of a file URI, and on
8
+ // Windows we and tsserver disagreed in two independent ways at once, so every
9
+ // lookup missed. The diagnostics arrived and were dropped on the floor —
10
+ // reported as a clean file, because LSP degrades silently by design.
11
+ it("collapses the exact URI pair observed on Windows CI", () => {
12
+ // Captured verbatim from a wire trace on `windows-latest`: `~` is an RFC
13
+ // 3986 unreserved character that pathToFileURL escapes and tsserver leaves
14
+ // literal; the drive colon is the reverse.
15
+ const ours = "file:///c:/Users/RUNNER%7E1/AppData/Local/Temp/p/src/main.ts";
16
+ const theirs = "file:///c%3A/Users/RUNNER~1/AppData/Local/Temp/p/src/main.ts";
17
+ expect(ours).not.toBe(theirs); // the bug: raw strings differ
18
+ expect(normalizeUri(ours)).toBe(normalizeUri(theirs)); // the fix
19
+ });
20
+ it("lowercases the Windows drive letter, encoded or not", () => {
21
+ expect(normalizeUri("file:///C:/repo/src/a.ts")).toBe("file:///c:/repo/src/a.ts");
22
+ expect(normalizeUri("file:///c:/repo/src/a.ts")).toBe("file:///c:/repo/src/a.ts");
23
+ expect(normalizeUri("file:///C%3A/repo/a.ts")).toBe("file:///c:/repo/a.ts");
24
+ });
25
+ it("decodes escapes so spaces and 8.3 short names match either spelling", () => {
26
+ // `C:\Program Files\…` and its `PROGRA~1` short form are ordinary Windows
27
+ // paths, not edge cases.
28
+ expect(normalizeUri("file:///c:/Program%20Files/app/a.ts")).toBe(normalizeUri("file:///c:/Program Files/app/a.ts"));
29
+ expect(normalizeUri("file:///c:/PROGRA%7E1/a.ts")).toBe(normalizeUri("file:///c:/PROGRA~1/a.ts"));
30
+ });
31
+ it("round-trips a real pathToFileURL against a literal-tilde server reply", () => {
32
+ // Guards the actual production pairing rather than hand-written constants.
33
+ const filePath = process.platform === "win32"
34
+ ? "C:\\Users\\RUNNER~1\\AppData\\Local\\Temp\\p\\src\\main.ts"
35
+ : "/tmp/RUNNER~1/p/src/main.ts";
36
+ const ours = pathToFileURL(filePath).href;
37
+ const serverStyle = ours.replace(/%7E/gi, "~").replace(/^(file:\/\/\/)([A-Za-z]):/, "$1$2%3A");
38
+ expect(normalizeUri(ours)).toBe(normalizeUri(serverStyle));
39
+ expect(path.isAbsolute(filePath)).toBe(true);
40
+ });
41
+ it("leaves POSIX and non-file URIs untouched", () => {
42
+ expect(normalizeUri("file:///Users/dev/a.ts")).toBe("file:///Users/dev/a.ts");
43
+ expect(normalizeUri("untitled:Untitled-1")).toBe("untitled:Untitled-1");
44
+ });
45
+ it("preserves case outside the drive letter", () => {
46
+ // POSIX servers are genuinely case-sensitive and share this code path, so
47
+ // case must not be folded beyond the Windows drive letter.
48
+ expect(normalizeUri("file:///c:/Repo/SRC/MyFile.ts")).toBe("file:///c:/Repo/SRC/MyFile.ts");
49
+ });
50
+ it("falls back to the raw URI on a malformed escape instead of throwing", () => {
51
+ // This runs inside a notification handler; throwing there would take out
52
+ // the diagnostics pipeline entirely.
53
+ expect(normalizeUri("file:///c:/bad%ZZ/a.ts")).toBe("file:///c:/bad%ZZ/a.ts");
54
+ });
55
+ });
56
+ //# sourceMappingURL=uri.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uri.test.js","sourceRoot":"","sources":["../../../src/core/lsp/uri.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=windows.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows.test.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/windows.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,251 @@
1
+ import { afterAll, beforeAll, describe, expect, it } from "vitest";
2
+ import fsSync from "node:fs";
3
+ import fs from "node:fs/promises";
4
+ import os from "node:os";
5
+ import path from "node:path";
6
+ import { pathToFileURL } from "node:url";
7
+ import { spawnSync } from "node:child_process";
8
+ import { closeLogger, openLog } from "@kenkaiiii/gg-core";
9
+ import { LspManager } from "./manager.js";
10
+ import { removeWhenReleased } from "./test-support.js";
11
+ import { normalizeUri } from "./client.js";
12
+ import { LSP_SERVER_CATALOG, findExecutable, serverForFile } from "./servers.js";
13
+ /**
14
+ * REAL Windows LSP diagnostics — runs only on an actual Windows host (the CI
15
+ * `windows-latest` matrix leg), skipped everywhere else.
16
+ *
17
+ * Unlike `integration.test.ts` (opt-in, npm-installs its own server), this uses
18
+ * the `typescript-language-server` + `typescript` that ship as ggcoder
19
+ * dependencies, so it runs unattended on CI with no network.
20
+ *
21
+ * Why a Windows-specific test: diagnostics are cached in a Map keyed by
22
+ * `file://` URI, so our string and the server's must match EXACTLY. Two Windows
23
+ * facts break that, and BOTH had to be fixed (see `normalizeUri` and
24
+ * `canonicalPath` in client.ts): the drive letter's case, and the fact that
25
+ * TypeScript realpaths every path it loads — which on Windows expands 8.3 short
26
+ * names, so `C:\Users\RUNNER~1\…` (exactly what CI's TEMP is) comes back as
27
+ * `C:\Users\runneradmin\…`. Neither is reproducible on a POSIX host.
28
+ *
29
+ * This is the regression guard for both. If it ever returns "" again, inline
30
+ * diagnostics have silently stopped working for every Windows user.
31
+ */
32
+ describe.skipIf(process.platform !== "win32")("LSP diagnostics on a real C:\\ path", () => {
33
+ let tmpDir;
34
+ let manager;
35
+ beforeAll(async () => {
36
+ tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "gg-lsp-win-"));
37
+ await fs.writeFile(path.join(tmpDir, "tsconfig.json"), JSON.stringify({
38
+ compilerOptions: {
39
+ strict: true,
40
+ module: "esnext",
41
+ moduleResolution: "bundler",
42
+ target: "es2022",
43
+ },
44
+ include: ["src"],
45
+ }));
46
+ await fs.mkdir(path.join(tmpDir, "src"), { recursive: true });
47
+ // First touch is slow (server boot + project load); budget generously so a
48
+ // cold CI runner reports a real result instead of a timeout.
49
+ manager = new LspManager(tmpDir, { firstBudgetMs: 60_000, warmBudgetMs: 20_000 });
50
+ });
51
+ afterAll(async () => {
52
+ manager?.shutdownAll();
53
+ // Windows won't rmdir while the server still holds handles; retry instead
54
+ // of failing the suite in teardown after every assertion has passed.
55
+ await removeWhenReleased(tmpDir);
56
+ });
57
+ it("resolves the language server AND spawns it successfully", () => {
58
+ // Resolving the file is not the same as being able to RUN it: on Windows
59
+ // `findExecutable` happily returns a `.cmd` shim that Node then refuses to
60
+ // spawn (EINVAL, post-CVE-2024-27980). So assert on the command we would
61
+ // actually execute, and prove it starts.
62
+ expect(tmpDir).toMatch(/^[A-Za-z]:\\/);
63
+ expect(findExecutable("typescript-language-server", tmpDir)).not.toBeNull();
64
+ const spec = serverForFile(path.join(tmpDir, "src", "main.ts"), LSP_SERVER_CATALOG);
65
+ expect(spec).not.toBeNull();
66
+ const resolved = spec.resolveCommand(tmpDir);
67
+ expect(resolved).not.toBeNull();
68
+ // A Node-based server must run via process.execPath + a real script, never
69
+ // a shim — that is the rule this repo already documents for LSP + MCP.
70
+ expect(resolved.command).toBe(process.execPath);
71
+ expect(resolved.args[0]).toMatch(/\.(m?js|cjs)$/);
72
+ expect(fsSync.existsSync(resolved.args[0])).toBe(true);
73
+ const probe = spawnSync(resolved.command, [...resolved.args, "--version"], {
74
+ encoding: "utf8",
75
+ windowsHide: true,
76
+ timeout: 60_000,
77
+ });
78
+ expect(probe.error).toBeUndefined();
79
+ }, 90_000);
80
+ it("reports a type error for a file on a drive-letter path, then clears it", async () => {
81
+ const filePath = path.join(tmpDir, "src", "main.ts");
82
+ const ours = pathToFileURL(filePath).href;
83
+ expect(ours).toMatch(/^file:\/\/\/[A-Za-z]:/);
84
+ expect(normalizeUri(ours)).toMatch(/^file:\/\/\/[a-z]:/);
85
+ const broken = 'export const n: number = "not a number";\n';
86
+ await fs.writeFile(filePath, broken);
87
+ // Use the DETAILED outcome, not the string wrapper. `diagnosticsAfterWrite`
88
+ // collapses timeout / unavailable / server_failed / clean all to "", which
89
+ // is exactly why this failure was uninformative: the assertion could only
90
+ // ever say 'expected "" to contain ...'. The outcome kind names the cause,
91
+ // so a CI log tells us WHICH of those it is instead of us guessing.
92
+ const outcome = await manager.diagnosticsAfterWriteDetailed(filePath, broken);
93
+ expect(outcome.kind).toBe("diagnostics");
94
+ expect(outcome.kind === "diagnostics" && outcome.formatted).toMatch(/not assignable to type 'number'/);
95
+ const fixed = "export const n: number = 42;\n";
96
+ await fs.writeFile(filePath, fixed);
97
+ expect(await manager.diagnosticsAfterWrite(filePath, fixed)).toBe("");
98
+ }, 120_000);
99
+ it("reports diagnostics for a path containing a space", async () => {
100
+ // `C:\Users\<name>\…` and `C:\Program Files\…` routinely contain spaces,
101
+ // which percent-encode in a file:// URI — another way the two sides can
102
+ // disagree about the same file.
103
+ const dir = path.join(tmpDir, "src", "with space");
104
+ await fs.mkdir(dir, { recursive: true });
105
+ const filePath = path.join(dir, "spaced.ts");
106
+ const broken = "export const s: string = 123;\n";
107
+ await fs.writeFile(filePath, broken);
108
+ const outcome = await manager.diagnosticsAfterWriteDetailed(filePath, broken);
109
+ expect(outcome.kind).toBe("diagnostics");
110
+ expect(outcome.kind === "diagnostics" && outcome.formatted).toMatch(/not assignable to type 'string'/);
111
+ }, 120_000);
112
+ });
113
+ /**
114
+ * Isolates WHY Windows diagnostics time out, by changing exactly one variable.
115
+ *
116
+ * The suite above uses a bare project with no local `typescript`, so
117
+ * `resolveCommand` takes the BUNDLED-tsserver fallback and passes ggcoder's own
118
+ * copy via `initializationOptions.tsserver.path`. On Windows that timed out
119
+ * (measured: the full 60s budget) even though the language server resolves to
120
+ * `process.execPath` + a real script and starts in ~100ms — so the failure is
121
+ * downstream of spawning, and `initialize` itself succeeded (a failure there
122
+ * would surface as `server_failed`, not `timeout`).
123
+ *
124
+ * The one remaining difference from a real user's project is that local
125
+ * `typescript`. Give the project its own copy — a junction, which needs no
126
+ * privileges on Windows — and the two outcomes are diagnostic:
127
+ *
128
+ * passes here + times out above → the bundled-tsserver fallback is the bug,
129
+ * and it hits real users whose project has no local typescript.
130
+ * times out here too → tsserver itself can't produce diagnostics
131
+ * in this environment, and the fallback is exonerated.
132
+ *
133
+ * Runs on POSIX too (symlink), where it must pass — that keeps the control arm
134
+ * honest instead of only ever observing the broken platform.
135
+ */
136
+ describe("LSP diagnostics with the project's OWN typescript (control arm)", () => {
137
+ let tmpDir;
138
+ let manager;
139
+ let linked = false;
140
+ let traceLog = "";
141
+ let traceOpen = false;
142
+ beforeAll(async () => {
143
+ tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), "gg-lsp-own-ts-"));
144
+ // Turn on JSON-RPC wire tracing and give it somewhere to land. The tracer
145
+ // writes via the shared debug logger, which DISCARDS everything until a log
146
+ // file is open (`fd === null` → return), so without this the trace would
147
+ // silently produce nothing — the same class of silent-degradation that made
148
+ // this bug hard in the first place.
149
+ process.env.GG_LSP_TRACE = "1";
150
+ traceLog = path.join(tmpDir, "lsp-trace.log");
151
+ traceOpen = openLog(traceLog, "ggcoder-test");
152
+ await fs.writeFile(path.join(tmpDir, "tsconfig.json"), JSON.stringify({
153
+ compilerOptions: {
154
+ strict: true,
155
+ module: "esnext",
156
+ moduleResolution: "bundler",
157
+ target: "es2022",
158
+ },
159
+ include: ["src"],
160
+ }));
161
+ await fs.mkdir(path.join(tmpDir, "src"), { recursive: true });
162
+ // Link ggcoder's own typescript in as if the project installed it.
163
+ const ours = findUpNodeModulesDir("typescript");
164
+ if (ours) {
165
+ await fs.mkdir(path.join(tmpDir, "node_modules"), { recursive: true });
166
+ await fs.symlink(ours, path.join(tmpDir, "node_modules", "typescript"), "junction");
167
+ linked = true;
168
+ }
169
+ manager = new LspManager(tmpDir, { firstBudgetMs: 60_000, warmBudgetMs: 20_000 });
170
+ });
171
+ afterAll(async () => {
172
+ manager?.shutdownAll();
173
+ delete process.env.GG_LSP_TRACE;
174
+ if (traceOpen)
175
+ closeLogger();
176
+ await removeWhenReleased(tmpDir);
177
+ });
178
+ it("produces diagnostics when typescript is resolvable inside the project", async () => {
179
+ expect(linked).toBe(true);
180
+ // Prove we are NOT on the bundled-tsserver code path any more.
181
+ expect(fsSync.existsSync(path.join(tmpDir, "node_modules", "typescript", "lib", "tsserver.js"))).toBe(true);
182
+ const filePath = path.join(tmpDir, "src", "main.ts");
183
+ const broken = 'export const n: number = "not a number";\n';
184
+ await fs.writeFile(filePath, broken);
185
+ const started = Date.now();
186
+ const outcome = await manager.diagnosticsAfterWriteDetailed(filePath, broken);
187
+ // Everything the CI log needs to name the cause without another round-trip:
188
+ // the outcome kind, the server's own stderr (previously discarded), and the
189
+ // JSON-RPC wire — which is the only thing that distinguishes "our didOpen
190
+ // never went out" from "the server never answered" from "it answered about
191
+ // a URI we weren't watching".
192
+ console.log(`[control arm] outcome=${outcome.kind} in ${Date.now() - started}ms\n` +
193
+ `[control arm] server stderr: ${(await serverStderr(manager)) || "(none)"}\n` +
194
+ `[control arm] wire:\n${readTrace(traceLog, traceOpen)}`);
195
+ expect(outcome.kind).toBe("diagnostics");
196
+ expect(outcome.kind === "diagnostics" && outcome.formatted).toMatch(/not assignable to type 'number'/);
197
+ }, 120_000);
198
+ });
199
+ /**
200
+ * The JSON-RPC trace for this run, trimmed to the LSP lines and capped so a
201
+ * chatty server can't bury the CI log.
202
+ */
203
+ function readTrace(traceLog, traceOpen) {
204
+ if (!traceOpen)
205
+ return "(trace log unavailable — a logger was already open)";
206
+ let raw;
207
+ try {
208
+ raw = fsSync.readFileSync(traceLog, "utf8");
209
+ }
210
+ catch {
211
+ return "(trace log unreadable)";
212
+ }
213
+ const lines = raw.split(/\r?\n/).filter((line) => line.includes("[lsp]"));
214
+ if (lines.length === 0)
215
+ return "(no rpc lines — tracer never fired)";
216
+ const head = lines.slice(0, 40);
217
+ const tail = lines.length > 60 ? lines.slice(-20) : [];
218
+ return [...head, ...(tail.length ? [` … ${lines.length - 60} more …`] : []), ...tail].join("\n");
219
+ }
220
+ /**
221
+ * The pooled client's retained stderr, for the log line above. Reaches into the
222
+ * private pool deliberately: this is a diagnostic probe, and widening the public
223
+ * API just to print stderr in one test isn't worth the surface area.
224
+ */
225
+ async function serverStderr(manager) {
226
+ // The pool stores PROMISES of resolutions, so these must be awaited — reading
227
+ // `.client` off the promise itself silently yields nothing.
228
+ const clients = manager.clients;
229
+ for (const [, pending] of clients) {
230
+ const resolution = (await pending);
231
+ if (resolution?.client)
232
+ return resolution.client.stderrTail();
233
+ }
234
+ return "";
235
+ }
236
+ /** Nearest `node_modules/<name>` walking up from this test file. */
237
+ function findUpNodeModulesDir(name) {
238
+ let dir = path.dirname(new URL(import.meta.url).pathname);
239
+ if (process.platform === "win32" && /^\/[A-Za-z]:/.test(dir))
240
+ dir = dir.slice(1);
241
+ for (;;) {
242
+ const candidate = path.join(dir, "node_modules", name);
243
+ if (fsSync.existsSync(candidate))
244
+ return fsSync.realpathSync.native(candidate);
245
+ const parent = path.dirname(dir);
246
+ if (parent === dir)
247
+ return null;
248
+ dir = parent;
249
+ }
250
+ }
251
+ //# sourceMappingURL=windows.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"windows.test.js","sourceRoot":"","sources":["../../../src/core/lsp/windows.test.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,41 @@
5
5
  * to the script, or null when the package or its bin can't be resolved.
6
6
  */
7
7
  export declare function findPackageBinScript(pkgName: string, binName: string, start?: string): string | null;
8
+ /**
9
+ * Resolve a bare `npx`/`npm` into something Windows can actually spawn.
10
+ *
11
+ * Two Windows facts collide here, and the MCP SDK spawns stdio servers with
12
+ * `shell: false`, so both apply:
13
+ *
14
+ * 1. `CreateProcess` does not apply `PATHEXT`, so a bare `npx` is ENOENT —
15
+ * the real file is `npx.cmd`.
16
+ * 2. Since the CVE-2024-27980 fix, Node REFUSES to spawn a `.cmd`/`.bat` at
17
+ * all without `shell: true`, failing with EINVAL.
18
+ *
19
+ * So resolving `npx` → `npx.cmd` is necessary but NOT sufficient; the batch
20
+ * shim is a dead end, and using `shell: true` to get around it would re-open
21
+ * the command-injection hole the CVE fix closed. Instead map the shim to the
22
+ * Node CLI script it wraps (`<dir>\node_modules\npm\bin\npx-cli.js`, the
23
+ * standard Windows Node layout) and run it with `process.execPath` — the same
24
+ * "never a shim, always the real script" pattern this module already uses for
25
+ * package bins.
26
+ *
27
+ * Returns null when nothing better than the original command can be found, so
28
+ * the caller passes through and fails exactly as it does today.
29
+ */
30
+ export declare function resolveWindowsLauncher(command: string, env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform, exists?: (p: string) => boolean): {
31
+ command: string;
32
+ prefixArgs: string[];
33
+ } | null;
34
+ /**
35
+ * Resolve a bare command name to a real file on Windows by walking
36
+ * PATH × PATHEXT, which `CreateProcess` does not do for a shell-less spawn.
37
+ *
38
+ * No-op off Windows, for an already-extensioned name, or when nothing matches.
39
+ * The current directory is deliberately NOT searched — a stray `npx.cmd` in the
40
+ * project must not hijack the server.
41
+ */
42
+ export declare function resolveWindowsExecutable(command: string, env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform, exists?: (p: string) => boolean): string;
8
43
  /**
9
44
  * Parse an `npx`/`npm exec` command + args into the target package spec, or null
10
45
  * when the command isn't an npx/npm-exec invocation. Skips npx flags (`-y`,
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-stdio.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/resolve-stdio.ts"],"names":[],"mappings":"AA2CA;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAmB,GACzB,MAAM,GAAG,IAAI,CAcf;AAuBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CA0BvF;AAiED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CA8Bf;AAOD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,SAAS,MAAM,EAAO,GAC3B,oBAAoB,CAoBtB"}
1
+ {"version":3,"file":"resolve-stdio.d.ts","sourceRoot":"","sources":["../../../src/core/mcp/resolve-stdio.ts"],"names":[],"mappings":"AA2CA;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAmB,GACzB,MAAM,GAAG,IAAI,CAcf;AAuBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,MAAM,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAuB,GAC7C;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAelD;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,QAAQ,GAAE,MAAM,CAAC,QAA2B,EAC5C,MAAM,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,OAAuB,GAC7C,MAAM,CAwBR;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CA0BvF;AAiED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,IAAI,CA8Bf;AAOD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,SAAS,MAAM,EAAO,GAC3B,oBAAoB,CA0BtB"}
@@ -81,6 +81,79 @@ function selectBin(bin, binName) {
81
81
  return bin[keys[0]];
82
82
  return bin[binName];
83
83
  }
84
+ /**
85
+ * Resolve a bare `npx`/`npm` into something Windows can actually spawn.
86
+ *
87
+ * Two Windows facts collide here, and the MCP SDK spawns stdio servers with
88
+ * `shell: false`, so both apply:
89
+ *
90
+ * 1. `CreateProcess` does not apply `PATHEXT`, so a bare `npx` is ENOENT —
91
+ * the real file is `npx.cmd`.
92
+ * 2. Since the CVE-2024-27980 fix, Node REFUSES to spawn a `.cmd`/`.bat` at
93
+ * all without `shell: true`, failing with EINVAL.
94
+ *
95
+ * So resolving `npx` → `npx.cmd` is necessary but NOT sufficient; the batch
96
+ * shim is a dead end, and using `shell: true` to get around it would re-open
97
+ * the command-injection hole the CVE fix closed. Instead map the shim to the
98
+ * Node CLI script it wraps (`<dir>\node_modules\npm\bin\npx-cli.js`, the
99
+ * standard Windows Node layout) and run it with `process.execPath` — the same
100
+ * "never a shim, always the real script" pattern this module already uses for
101
+ * package bins.
102
+ *
103
+ * Returns null when nothing better than the original command can be found, so
104
+ * the caller passes through and fails exactly as it does today.
105
+ */
106
+ export function resolveWindowsLauncher(command, env = process.env, platform = process.platform, exists = fs.existsSync) {
107
+ if (platform !== "win32")
108
+ return null;
109
+ const base = path.win32.basename(command, path.win32.extname(command)).toLowerCase();
110
+ if (base !== "npx" && base !== "npm")
111
+ return null;
112
+ const shim = resolveWindowsExecutable(command, env, platform, exists);
113
+ // `npx.cmd` lives beside `node.exe`, with npm's CLI scripts under
114
+ // `node_modules\npm\bin` in the same directory.
115
+ const dir = path.win32.dirname(shim);
116
+ if (dir && dir !== ".") {
117
+ const cli = path.win32.join(dir, "node_modules", "npm", "bin", `${base}-cli.js`);
118
+ if (exists(cli))
119
+ return { command: process.execPath, prefixArgs: [cli] };
120
+ }
121
+ return null;
122
+ }
123
+ /**
124
+ * Resolve a bare command name to a real file on Windows by walking
125
+ * PATH × PATHEXT, which `CreateProcess` does not do for a shell-less spawn.
126
+ *
127
+ * No-op off Windows, for an already-extensioned name, or when nothing matches.
128
+ * The current directory is deliberately NOT searched — a stray `npx.cmd` in the
129
+ * project must not hijack the server.
130
+ */
131
+ export function resolveWindowsExecutable(command, env = process.env, platform = process.platform, exists = fs.existsSync) {
132
+ if (platform !== "win32")
133
+ return command;
134
+ if (path.win32.extname(command))
135
+ return command;
136
+ const exts = (env.PATHEXT ?? ".COM;.EXE;.BAT;.CMD")
137
+ .split(";")
138
+ .map((e) => e.trim())
139
+ .filter(Boolean);
140
+ // An explicit path (relative or absolute) is resolved in place, not via PATH.
141
+ if (path.win32.dirname(command) !== ".") {
142
+ for (const ext of exts) {
143
+ if (exists(`${command}${ext}`))
144
+ return `${command}${ext}`;
145
+ }
146
+ return command;
147
+ }
148
+ for (const dir of (env.PATH ?? env.Path ?? "").split(";").filter(Boolean)) {
149
+ for (const ext of exts) {
150
+ const candidate = path.win32.join(dir, `${command}${ext}`);
151
+ if (exists(candidate))
152
+ return candidate;
153
+ }
154
+ }
155
+ return command;
156
+ }
84
157
  /**
85
158
  * Parse an `npx`/`npm exec` command + args into the target package spec, or null
86
159
  * when the command isn't an npx/npm-exec invocation. Skips npx flags (`-y`,
@@ -247,7 +320,13 @@ function binNameFor(pkgName) {
247
320
  * package isn't cached yet — the true first run, which npx then installs).
248
321
  */
249
322
  export function resolveStdioCommand(command, args = []) {
250
- const passthrough = { command, args: [...args] };
323
+ // Windows can't spawn a bare `npx` (no PATHEXT) or its `.cmd` shim (EINVAL
324
+ // since the CVE-2024-27980 fix) without a shell, so passthrough resolves to
325
+ // `node <npx-cli.js>`. No-op elsewhere.
326
+ const launcher = resolveWindowsLauncher(command);
327
+ const passthrough = launcher
328
+ ? { command: launcher.command, args: [...launcher.prefixArgs, ...args] }
329
+ : { command, args: [...args] };
251
330
  const pkgSpec = parseNpxPackage(command, args);
252
331
  if (!pkgSpec)
253
332
  return passthrough;