@kenkaiiii/ggcoder 5.37.0 → 5.39.0

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 (170) hide show
  1. package/dist/app-sidecar.js +31 -18
  2. package/dist/app-sidecar.js.map +1 -1
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +12 -1
  5. package/dist/cli.js.map +1 -1
  6. package/dist/config.d.ts +15 -4
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/config.js +34 -75
  9. package/dist/config.js.map +1 -1
  10. package/dist/config.test.js +19 -11
  11. package/dist/config.test.js.map +1 -1
  12. package/dist/core/agent-session-tool-tiers.test.d.ts +2 -0
  13. package/dist/core/agent-session-tool-tiers.test.d.ts.map +1 -0
  14. package/dist/core/agent-session-tool-tiers.test.js +138 -0
  15. package/dist/core/agent-session-tool-tiers.test.js.map +1 -0
  16. package/dist/core/agent-session.d.ts +43 -3
  17. package/dist/core/agent-session.d.ts.map +1 -1
  18. package/dist/core/agent-session.js +77 -11
  19. package/dist/core/agent-session.js.map +1 -1
  20. package/dist/core/agents.d.ts +29 -1
  21. package/dist/core/agents.d.ts.map +1 -1
  22. package/dist/core/agents.js +47 -97
  23. package/dist/core/agents.js.map +1 -1
  24. package/dist/core/agents.test.js +85 -5
  25. package/dist/core/agents.test.js.map +1 -1
  26. package/dist/core/bundled-agents.d.ts +3 -0
  27. package/dist/core/bundled-agents.d.ts.map +1 -0
  28. package/dist/core/bundled-agents.js +252 -0
  29. package/dist/core/bundled-agents.js.map +1 -0
  30. package/dist/core/code-retrieval-chunkers.d.ts +27 -0
  31. package/dist/core/code-retrieval-chunkers.d.ts.map +1 -0
  32. package/dist/core/code-retrieval-chunkers.js +264 -0
  33. package/dist/core/code-retrieval-chunkers.js.map +1 -0
  34. package/dist/core/code-retrieval-chunkers.test.d.ts +2 -0
  35. package/dist/core/code-retrieval-chunkers.test.d.ts.map +1 -0
  36. package/dist/core/code-retrieval-chunkers.test.js +203 -0
  37. package/dist/core/code-retrieval-chunkers.test.js.map +1 -0
  38. package/dist/core/code-retrieval.d.ts +6 -0
  39. package/dist/core/code-retrieval.d.ts.map +1 -1
  40. package/dist/core/code-retrieval.js +38 -1
  41. package/dist/core/code-retrieval.js.map +1 -1
  42. package/dist/core/lsp/client-navigation.test.d.ts +2 -0
  43. package/dist/core/lsp/client-navigation.test.d.ts.map +1 -0
  44. package/dist/core/lsp/client-navigation.test.js +119 -0
  45. package/dist/core/lsp/client-navigation.test.js.map +1 -0
  46. package/dist/core/lsp/client.d.ts +62 -0
  47. package/dist/core/lsp/client.d.ts.map +1 -1
  48. package/dist/core/lsp/client.js +147 -0
  49. package/dist/core/lsp/client.js.map +1 -1
  50. package/dist/core/lsp/manager-navigation.test.d.ts +2 -0
  51. package/dist/core/lsp/manager-navigation.test.d.ts.map +1 -0
  52. package/dist/core/lsp/manager-navigation.test.js +119 -0
  53. package/dist/core/lsp/manager-navigation.test.js.map +1 -0
  54. package/dist/core/lsp/manager.d.ts +35 -1
  55. package/dist/core/lsp/manager.d.ts.map +1 -1
  56. package/dist/core/lsp/manager.js +92 -0
  57. package/dist/core/lsp/manager.js.map +1 -1
  58. package/dist/core/mcp/deferred-catalog.d.ts +1 -1
  59. package/dist/core/mcp/deferred-catalog.js +1 -1
  60. package/dist/core/settings-manager.d.ts +2 -0
  61. package/dist/core/settings-manager.d.ts.map +1 -1
  62. package/dist/core/settings-manager.js +10 -1
  63. package/dist/core/settings-manager.js.map +1 -1
  64. package/dist/core/shutdown.d.ts +71 -0
  65. package/dist/core/shutdown.d.ts.map +1 -0
  66. package/dist/core/shutdown.js +144 -0
  67. package/dist/core/shutdown.js.map +1 -0
  68. package/dist/core/shutdown.test.d.ts +2 -0
  69. package/dist/core/shutdown.test.d.ts.map +1 -0
  70. package/dist/core/shutdown.test.js +160 -0
  71. package/dist/core/shutdown.test.js.map +1 -0
  72. package/dist/core/subagent-manager.d.ts +9 -0
  73. package/dist/core/subagent-manager.d.ts.map +1 -1
  74. package/dist/core/subagent-manager.js +45 -12
  75. package/dist/core/subagent-manager.js.map +1 -1
  76. package/dist/core/subagent-manager.test.js +13 -7
  77. package/dist/core/subagent-manager.test.js.map +1 -1
  78. package/dist/modes/agent-home-mode.d.ts.map +1 -1
  79. package/dist/modes/agent-home-mode.js +15 -11
  80. package/dist/modes/agent-home-mode.js.map +1 -1
  81. package/dist/modes/json-mode.d.ts +8 -0
  82. package/dist/modes/json-mode.d.ts.map +1 -1
  83. package/dist/modes/json-mode.js +2 -0
  84. package/dist/modes/json-mode.js.map +1 -1
  85. package/dist/modes/serve-mode.d.ts +2 -1
  86. package/dist/modes/serve-mode.d.ts.map +1 -1
  87. package/dist/modes/serve-mode.js +15 -9
  88. package/dist/modes/serve-mode.js.map +1 -1
  89. package/dist/modes/subagent-worker-mode.d.ts +5 -0
  90. package/dist/modes/subagent-worker-mode.d.ts.map +1 -1
  91. package/dist/modes/subagent-worker-mode.js.map +1 -1
  92. package/dist/system-prompt.d.ts +37 -1
  93. package/dist/system-prompt.d.ts.map +1 -1
  94. package/dist/system-prompt.js +108 -4
  95. package/dist/system-prompt.js.map +1 -1
  96. package/dist/system-prompt.test.js +48 -1
  97. package/dist/system-prompt.test.js.map +1 -1
  98. package/dist/system-prompt.tiering.test.d.ts +2 -0
  99. package/dist/system-prompt.tiering.test.d.ts.map +1 -0
  100. package/dist/system-prompt.tiering.test.js +103 -0
  101. package/dist/system-prompt.tiering.test.js.map +1 -0
  102. package/dist/tools/code-nav.d.ts +30 -0
  103. package/dist/tools/code-nav.d.ts.map +1 -0
  104. package/dist/tools/code-nav.js +247 -0
  105. package/dist/tools/code-nav.js.map +1 -0
  106. package/dist/tools/code-nav.test.d.ts +2 -0
  107. package/dist/tools/code-nav.test.d.ts.map +1 -0
  108. package/dist/tools/code-nav.test.js +109 -0
  109. package/dist/tools/code-nav.test.js.map +1 -0
  110. package/dist/tools/grep-parity.test.d.ts +2 -0
  111. package/dist/tools/grep-parity.test.d.ts.map +1 -0
  112. package/dist/tools/grep-parity.test.js +92 -0
  113. package/dist/tools/grep-parity.test.js.map +1 -0
  114. package/dist/tools/grep-recall.test.d.ts +2 -0
  115. package/dist/tools/grep-recall.test.d.ts.map +1 -0
  116. package/dist/tools/grep-recall.test.js +114 -0
  117. package/dist/tools/grep-recall.test.js.map +1 -0
  118. package/dist/tools/grep-spawn.test.d.ts +2 -0
  119. package/dist/tools/grep-spawn.test.d.ts.map +1 -0
  120. package/dist/tools/grep-spawn.test.js +66 -0
  121. package/dist/tools/grep-spawn.test.js.map +1 -0
  122. package/dist/tools/grep.d.ts +13 -3
  123. package/dist/tools/grep.d.ts.map +1 -1
  124. package/dist/tools/grep.js +340 -40
  125. package/dist/tools/grep.js.map +1 -1
  126. package/dist/tools/grep.test.js +11 -8
  127. package/dist/tools/grep.test.js.map +1 -1
  128. package/dist/tools/index.d.ts +7 -0
  129. package/dist/tools/index.d.ts.map +1 -1
  130. package/dist/tools/index.js +8 -1
  131. package/dist/tools/index.js.map +1 -1
  132. package/dist/tools/prompt-hints.d.ts +9 -0
  133. package/dist/tools/prompt-hints.d.ts.map +1 -1
  134. package/dist/tools/prompt-hints.js +61 -8
  135. package/dist/tools/prompt-hints.js.map +1 -1
  136. package/dist/tools/search-code.d.ts.map +1 -1
  137. package/dist/tools/search-code.js +7 -6
  138. package/dist/tools/search-code.js.map +1 -1
  139. package/dist/tools/search-code.test.js +8 -2
  140. package/dist/tools/search-code.test.js.map +1 -1
  141. package/dist/tools/subagent-control.d.ts.map +1 -1
  142. package/dist/tools/subagent-control.js +20 -5
  143. package/dist/tools/subagent-control.js.map +1 -1
  144. package/dist/tools/subagent-control.test.js +34 -1
  145. package/dist/tools/subagent-control.test.js.map +1 -1
  146. package/dist/tools/subagent-shared.d.ts +19 -0
  147. package/dist/tools/subagent-shared.d.ts.map +1 -1
  148. package/dist/tools/subagent-shared.js +32 -5
  149. package/dist/tools/subagent-shared.js.map +1 -1
  150. package/dist/tools/subagent-shared.test.js +42 -8
  151. package/dist/tools/subagent-shared.test.js.map +1 -1
  152. package/dist/tools/subagent.d.ts.map +1 -1
  153. package/dist/tools/subagent.js +11 -8
  154. package/dist/tools/subagent.js.map +1 -1
  155. package/dist/tools/subagent.test.js +3 -0
  156. package/dist/tools/subagent.test.js.map +1 -1
  157. package/dist/tools/tool-search.d.ts.map +1 -1
  158. package/dist/tools/tool-search.js +2 -1
  159. package/dist/tools/tool-search.js.map +1 -1
  160. package/dist/tools/tool-tiers.d.ts +42 -0
  161. package/dist/tools/tool-tiers.d.ts.map +1 -0
  162. package/dist/tools/tool-tiers.js +77 -0
  163. package/dist/tools/tool-tiers.js.map +1 -0
  164. package/dist/tools/tool-tiers.test.d.ts +2 -0
  165. package/dist/tools/tool-tiers.test.d.ts.map +1 -0
  166. package/dist/tools/tool-tiers.test.js +48 -0
  167. package/dist/tools/tool-tiers.test.js.map +1 -0
  168. package/dist/ui/hooks/useAgentLoop.js +1 -1
  169. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  170. package/package.json +4 -4
@@ -1,4 +1,4 @@
1
- import type { LspDiagnostic } from "./client.js";
1
+ import type { LspDiagnostic, LspPosition } from "./client.js";
2
2
  import { type LspClientPool } from "./pool.js";
3
3
  import { type LspServerSpec } from "./servers.js";
4
4
  export interface LspManagerOptions {
@@ -31,6 +31,22 @@ export type LspDiagnosticOutcome = (LspOutcomeBase & {
31
31
  }) | (LspOutcomeBase & {
32
32
  kind: Exclude<LspOutcomeKind, "diagnostics">;
33
33
  });
34
+ /**
35
+ * A navigation answer, or the specific reason there isn't one. Shares its
36
+ * failure vocabulary with `LspDiagnosticOutcome` so both surfaces degrade in
37
+ * the same, legible way.
38
+ */
39
+ export type LspNavigationOutcome<T> = {
40
+ kind: "ok";
41
+ filePath: string;
42
+ serverId: string;
43
+ value: T;
44
+ } | {
45
+ kind: "timeout" | "unsupported" | "unavailable" | "server_failed";
46
+ filePath: string;
47
+ serverId?: string;
48
+ message?: string;
49
+ };
34
50
  /**
35
51
  * Per-session view over the process-wide language-server pool (see pool.ts).
36
52
  *
@@ -96,6 +112,24 @@ export declare class LspManager {
96
112
  private collect;
97
113
  /** The diagnostics exchange itself, against an initialized live client. */
98
114
  private collectFrom;
115
+ /** Where the symbol under `position` is defined. */
116
+ definition(filePath: string, content: string, position: LspPosition): Promise<LspNavigationOutcome<import("./client.js").LspLocation[]>>;
117
+ /** Every reference to the symbol under `position`. */
118
+ references(filePath: string, content: string, position: LspPosition): Promise<LspNavigationOutcome<import("./client.js").LspLocation[]>>;
119
+ /** Symbol outline for one document. */
120
+ documentSymbols(filePath: string, content: string): Promise<LspNavigationOutcome<import("./client.js").LspSymbolEntry[]>>;
121
+ /** Type/signature summary under `position`. */
122
+ hover(filePath: string, content: string, position: LspPosition): Promise<LspNavigationOutcome<string>>;
123
+ /**
124
+ * Shared navigation path: resolve a server, sync the document, run one
125
+ * request inside the same warm/first budget split diagnostics use.
126
+ *
127
+ * The outcome kinds match `LspDiagnosticOutcome`'s degraded kinds exactly
128
+ * (`timeout` / `unsupported` / `unavailable` / `server_failed`), because a
129
+ * navigation tool that answers "no results" when the truth is "no server"
130
+ * teaches the model that the symbol does not exist.
131
+ */
132
+ private navigate;
99
133
  }
100
134
  export {};
101
135
  //# sourceMappingURL=manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAa,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,OAAO,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACnC,0EAA0E;IAC1E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB;AAED,MAAM,MAAM,cAAc,GACtB,aAAa,GACb,OAAO,GACP,gBAAgB,GAChB,SAAS,GACT,aAAa,GACb,aAAa,GACb,eAAe,CAAC;AAEpB,UAAU,cAAc;IACtB,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,oBAAoB,GAC5B,CAAC,cAAc,GAAG;IAChB,IAAI,EAAE,aAAa,CAAC;IACpB,WAAW,EAAE,aAAa,EAAE,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,GACF,CAAC,cAAc,GAAG;IAChB,IAAI,EAAE,OAAO,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;CAC9C,CAAC,CAAC;AAgBP;;;;;;;GAOG;AACH,qBAAa,UAAU;IAsBnB,OAAO,CAAC,QAAQ,CAAC,GAAG;IArBtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;IACnD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgB;IACrC;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA2C;IAC1E,OAAO,CAAC,QAAQ,CAAS;gBAGN,GAAG,EAAE,MAAM,EAC5B,OAAO,CAAC,EAAE,iBAAiB;IAU7B;;;OAGG;IACG,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK/E,qEAAqE;IAC/D,6BAA6B,CACjC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,oBAAoB,CAAC;IA6BhC,8EAA8E;IAC9E,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAIpE;;;OAGG;IACH,OAAO,CAAC,MAAM;IAOd;;;OAGG;IACH,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAInC,mDAAmD;IACnD,iBAAiB,IAAI,oBAAoB,EAAE;IAI3C;;;;;;;OAOG;IACH,WAAW,IAAI,IAAI;IAMnB,OAAO,CAAC,OAAO;IAOf,OAAO,CAAC,MAAM;YAWA,OAAO;IA+BrB,2EAA2E;YAC7D,WAAW;CA6D1B"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/core/lsp/manager.ts"],"names":[],"mappings":"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"}
@@ -215,6 +215,98 @@ export class LspManager {
215
215
  }
216
216
  return this.outcome(client.hasActiveProgress ? "low_confidence" : "clean", filePath);
217
217
  }
218
+ // ── Navigation ───────────────────────────────────────────────
219
+ /** Where the symbol under `position` is defined. */
220
+ definition(filePath, content, position) {
221
+ return this.navigate(filePath, content, (client, uri, budgetMs) => client.definition(uri, position, budgetMs));
222
+ }
223
+ /** Every reference to the symbol under `position`. */
224
+ references(filePath, content, position) {
225
+ return this.navigate(filePath, content, (client, uri, budgetMs) => client.references(uri, position, budgetMs));
226
+ }
227
+ /** Symbol outline for one document. */
228
+ documentSymbols(filePath, content) {
229
+ return this.navigate(filePath, content, (client, uri, budgetMs) => client.documentSymbols(uri, budgetMs));
230
+ }
231
+ /** Type/signature summary under `position`. */
232
+ hover(filePath, content, position) {
233
+ return this.navigate(filePath, content, (client, uri, budgetMs) => client.hover(uri, position, budgetMs));
234
+ }
235
+ /**
236
+ * Shared navigation path: resolve a server, sync the document, run one
237
+ * request inside the same warm/first budget split diagnostics use.
238
+ *
239
+ * The outcome kinds match `LspDiagnosticOutcome`'s degraded kinds exactly
240
+ * (`timeout` / `unsupported` / `unavailable` / `server_failed`), because a
241
+ * navigation tool that answers "no results" when the truth is "no server"
242
+ * teaches the model that the symbol does not exist.
243
+ */
244
+ async navigate(filePath, content, run) {
245
+ const normalizedFilePath = path.resolve(this.cwd, filePath);
246
+ if (this.shutDown)
247
+ return { kind: "unavailable", filePath: normalizedFilePath };
248
+ try {
249
+ const spec = serverForFile(normalizedFilePath, this.catalog);
250
+ if (!spec)
251
+ return { kind: "unsupported", filePath: normalizedFilePath };
252
+ const root = findProjectRoot(normalizedFilePath, spec.rootMarkers, this.cwd);
253
+ const key = `${spec.id}\u0000${root}`;
254
+ const budgetMs = this.isWarm(key, spec, root) ? this.warmBudgetMs : this.firstBudgetMs;
255
+ const resolution = await this.pool.retain(spec, root, this);
256
+ if (resolution.status !== "ready") {
257
+ return { kind: resolution.status, filePath: normalizedFilePath, serverId: spec.id };
258
+ }
259
+ const { client } = resolution;
260
+ if (!client.isAlive) {
261
+ this.pool.markDead(spec, root);
262
+ return { kind: "server_failed", filePath: normalizedFilePath, serverId: spec.id };
263
+ }
264
+ // Hold the entry open for the whole request, exactly as diagnostics do:
265
+ // the idle sweep must not reclaim a server mid-answer.
266
+ const endCall = this.pool.beginCall(spec, root);
267
+ try {
268
+ const uri = client.syncDocument(normalizedFilePath, content);
269
+ const outcome = await withBudget(run(client, uri, budgetMs), budgetMs, () => ({
270
+ status: "timeout",
271
+ }));
272
+ this.warmKeys.set(key, this.pool.generationFor(spec, root));
273
+ if (outcome.status === "ok") {
274
+ return {
275
+ kind: "ok",
276
+ filePath: normalizedFilePath,
277
+ serverId: spec.id,
278
+ value: outcome.value,
279
+ };
280
+ }
281
+ if (outcome.status === "unsupported") {
282
+ return { kind: "unsupported", filePath: normalizedFilePath, serverId: spec.id };
283
+ }
284
+ if (outcome.status === "timeout") {
285
+ log("WARN", "lsp", `${spec.id} navigation timed out`, {
286
+ file: normalizedFilePath,
287
+ budgetMs,
288
+ stderr: client.stderrTail() || "(none)",
289
+ });
290
+ return { kind: "timeout", filePath: normalizedFilePath, serverId: spec.id };
291
+ }
292
+ return {
293
+ kind: "server_failed",
294
+ filePath: normalizedFilePath,
295
+ serverId: spec.id,
296
+ message: outcome.message,
297
+ };
298
+ }
299
+ finally {
300
+ endCall();
301
+ }
302
+ }
303
+ catch (error) {
304
+ log("WARN", "lsp", `navigation failed for ${normalizedFilePath}`, {
305
+ error: error instanceof Error ? error.message : String(error),
306
+ });
307
+ return { kind: "server_failed", filePath: normalizedFilePath };
308
+ }
309
+ }
218
310
  }
219
311
  /** Race work against a hard budget while allowing it to settle in background. */
220
312
  function withBudget(work, budgetMs, onTimeout) {
@@ -1 +1 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/core/lsp/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../../src/core/lsp/manager.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import type { AgentTool } from "@kenkaiiii/gg-agent";
3
3
  * Holds MCP tools OUT of the per-turn request payload until the model asks
4
4
  * for them via `tool_search`.
5
5
  *
6
- * Benchmarked (bench/RESULTS.md, bench A): injecting every MCP tool schema
6
+ * Measured: injecting every MCP tool schema
7
7
  * eagerly cost ~33KB (~8.3k tokens) per cache-miss turn with just two MCP
8
8
  * servers connected — 56% of all billed input tokens in a 6-turn session.
9
9
  * Deferring keeps the tool prefix small and byte-stable; promotion is a
@@ -2,7 +2,7 @@
2
2
  * Holds MCP tools OUT of the per-turn request payload until the model asks
3
3
  * for them via `tool_search`.
4
4
  *
5
- * Benchmarked (bench/RESULTS.md, bench A): injecting every MCP tool schema
5
+ * Measured: injecting every MCP tool schema
6
6
  * eagerly cost ~33KB (~8.3k tokens) per cache-miss turn with just two MCP
7
7
  * servers connected — 56% of all billed input tokens in a 6-turn session.
8
8
  * Deferring keeps the tool prefix small and byte-stable; promotion is a
@@ -50,6 +50,8 @@ declare const SettingsSchema: z.ZodObject<{
50
50
  workspace: "workspace";
51
51
  }>>;
52
52
  deferredMcpTools: z.ZodDefault<z.ZodBoolean>;
53
+ deferredBuiltinTools: z.ZodDefault<z.ZodBoolean>;
54
+ grepUseRipgrep: z.ZodDefault<z.ZodBoolean>;
53
55
  mcpModernProtocol: z.ZodDefault<z.ZodBoolean>;
54
56
  subagentMaxPerModel: z.ZodOptional<z.ZodNumber>;
55
57
  enabledTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -1 +1 @@
1
- {"version":3,"file":"settings-manager.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAqFlB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,gBAAgB,EAAE,QAkB9B,CAAC;AAIF,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;gBAEX,QAAQ,CAAC,EAAE,MAAM;IAIvB,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC;IAazB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,GAAG,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAI5C,GAAG,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9E,MAAM,IAAI,QAAQ;CAGnB"}
1
+ {"version":3,"file":"settings-manager.d.ts","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4FlB,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD,eAAO,MAAM,gBAAgB,EAAE,QAoB9B,CAAC;AAIF,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;gBAEX,QAAQ,CAAC,EAAE,MAAM;IAIvB,IAAI,IAAI,OAAO,CAAC,QAAQ,CAAC;IAazB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAK3B,GAAG,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,GAAG,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;IAI5C,GAAG,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9E,MAAM,IAAI,QAAQ;CAGnB"}
@@ -70,8 +70,15 @@ const SettingsSchema = z.object({
70
70
  */
71
71
  sandboxMode: z.enum(["auto", "workspace", "off"]).default("off"),
72
72
  /** Defer MCP tool schemas out of the prompt until discovered via tool_search.
73
- * Cuts ~8k tokens/cache-miss turn with two MCP servers (bench/RESULTS.md). */
73
+ * Cuts ~8k tokens/cache-miss turn with two MCP servers connected. */
74
74
  deferredMcpTools: z.boolean().default(true),
75
+ /** Defer rarely reached BUILT-IN tool schemas the same way, leaving a one-line
76
+ * capability hint in the prompt that `tool_search` expands on demand. Trades
77
+ * per-request tokens against how reliably the model still finds the tool. */
78
+ deferredBuiltinTools: z.boolean().default(true),
79
+ /** Use the `rg` binary for `grep` content search when it is on PATH, falling
80
+ * back to the in-process scanner otherwise. */
81
+ grepUseRipgrep: z.boolean().default(true),
75
82
  /** Opt into the 2026-07-28 MCP protocol revision. When on, a connect probes
76
83
  * with `server/discover` and falls back to the 2025 `initialize` handshake,
77
84
  * so a legacy server still connects. Off by default: the probe costs a round
@@ -103,6 +110,8 @@ export const DEFAULT_SETTINGS = {
103
110
  networkAllow: [],
104
111
  sandboxMode: "off",
105
112
  deferredMcpTools: true,
113
+ deferredBuiltinTools: true,
114
+ grepUseRipgrep: true,
106
115
  mcpModernProtocol: false,
107
116
  sessionRetentionDays: 30,
108
117
  speedProfile: "optimized",
@@ -1 +1 @@
1
- {"version":3,"file":"settings-manager.js","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings-manager.js","sourceRoot":"","sources":["../../src/core/settings-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Bounded process shutdown.
3
+ *
4
+ * Teardown reaches third-party code we do not control — MCP servers over stdio,
5
+ * LSP servers, extension `deactivate()` hooks, Telegram long-polls. Any one of
6
+ * them can hang forever, and an `await`-everything shutdown then never reaches
7
+ * `process.exit`: the app appears to quit but the daemon keeps its port, or the
8
+ * CLI keeps polling with nobody attached. Every long-running entry point arms a
9
+ * deadline instead, so a wedged dependency costs a few seconds, not the process.
10
+ *
11
+ * `SIGHUP` matters as much as `SIGINT`: closing a terminal delivers exactly one
12
+ * hangup and never a second key press, so a process that only force-exits on the
13
+ * *second* Ctrl+C survives as an orphan.
14
+ */
15
+ /** Signals that must terminate a long-running GG process. */
16
+ export declare const TERMINATION_SIGNALS: readonly ["SIGINT", "SIGTERM", "SIGHUP"];
17
+ export type TerminationSignal = (typeof TERMINATION_SIGNALS)[number];
18
+ /** How long teardown gets before the process exits anyway. */
19
+ export declare const DEFAULT_EXIT_TIMEOUT_MS = 5000;
20
+ /** Env override, in seconds. `0` disables the deadline (debugging teardown). */
21
+ export declare const EXIT_TIMEOUT_ENV = "GG_EXIT_TIMEOUT_SECS";
22
+ /**
23
+ * Resolve the teardown deadline from the environment.
24
+ *
25
+ * Anything unparseable, negative or absurd falls back to the default rather
26
+ * than disabling the guard, because a typo in a launcher script must not be
27
+ * able to reintroduce an unbounded hang.
28
+ */
29
+ export declare function resolveExitTimeoutMs(env?: NodeJS.ProcessEnv): number;
30
+ /** Conventional exit code for a signal-initiated exit (`128 + signal number`). */
31
+ export declare function exitCodeForSignal(signal: TerminationSignal): number;
32
+ export interface ShutdownOptions {
33
+ /** Releases resources. May hang — that is the entire point of the deadline. */
34
+ teardown: () => Promise<void> | void;
35
+ /** Deadline override, mainly for tests. Defaults to {@link resolveExitTimeoutMs}. */
36
+ timeoutMs?: number;
37
+ /** Logging/reporting scope, e.g. `"app-sidecar"`. */
38
+ scope?: string;
39
+ /** Runs when teardown misses the deadline, just before the forced exit. */
40
+ onTimeout?: (timeoutMs: number) => void;
41
+ /** Runs when teardown throws. Shutdown continues regardless. */
42
+ onError?: (error: unknown) => void;
43
+ /** Terminates the process. Injectable so tests do not exit the runner. */
44
+ exit?: (code: number) => never;
45
+ }
46
+ /**
47
+ * Run `teardown`, then exit — but exit on the deadline even if teardown never
48
+ * settles.
49
+ *
50
+ * The timer is deliberately **not** unref'd: an unref'd timer lets Node exit on
51
+ * its own the moment the loop empties, which would race teardown and produce a
52
+ * nondeterministic exit code. Held ref + explicit exit on both paths means the
53
+ * code is always the one we chose.
54
+ */
55
+ export declare function shutdownWithDeadline(code: number, options: ShutdownOptions): Promise<never>;
56
+ export interface TerminationHandlerOptions extends ShutdownOptions {
57
+ /** Runs once per shutdown request, before teardown (e.g. print a banner). */
58
+ onShutdownStart?: (signal: TerminationSignal | null) => void;
59
+ }
60
+ /**
61
+ * Wire `SIGINT`/`SIGTERM`/`SIGHUP` to a bounded shutdown.
62
+ *
63
+ * A second signal while teardown is still running exits immediately rather than
64
+ * waiting out the deadline — a user hitting Ctrl+C twice is telling us they are
65
+ * done being patient.
66
+ *
67
+ * @returns `requestShutdown`, for non-signal exits (a dead parent process, a
68
+ * quit menu item) so they share the same guard and re-entrancy rules.
69
+ */
70
+ export declare function installTerminationHandlers(options: TerminationHandlerOptions): (code?: number) => void;
71
+ //# sourceMappingURL=shutdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shutdown.d.ts","sourceRoot":"","sources":["../../src/core/shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,6DAA6D;AAC7D,eAAO,MAAM,mBAAmB,0CAA2C,CAAC;AAE5E,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AASrE,8DAA8D;AAC9D,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAE7C,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,yBAAyB,CAAC;AAKvD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAOjF;AAED,kFAAkF;AAClF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAEnE;AAED,MAAM,WAAW,eAAe;IAC9B,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACrC,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,gEAAgE;IAChE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACnC,0EAA0E;IAC1E,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC;CAChC;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,CAsCjG;AAED,MAAM,WAAW,yBAA0B,SAAQ,eAAe;IAChE,6EAA6E;IAC7E,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAAC;CAC9D;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,yBAAyB,GACjC,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CA+BzB"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Bounded process shutdown.
3
+ *
4
+ * Teardown reaches third-party code we do not control — MCP servers over stdio,
5
+ * LSP servers, extension `deactivate()` hooks, Telegram long-polls. Any one of
6
+ * them can hang forever, and an `await`-everything shutdown then never reaches
7
+ * `process.exit`: the app appears to quit but the daemon keeps its port, or the
8
+ * CLI keeps polling with nobody attached. Every long-running entry point arms a
9
+ * deadline instead, so a wedged dependency costs a few seconds, not the process.
10
+ *
11
+ * `SIGHUP` matters as much as `SIGINT`: closing a terminal delivers exactly one
12
+ * hangup and never a second key press, so a process that only force-exits on the
13
+ * *second* Ctrl+C survives as an orphan.
14
+ */
15
+ import { log } from "./logger.js";
16
+ /** Signals that must terminate a long-running GG process. */
17
+ export const TERMINATION_SIGNALS = ["SIGINT", "SIGTERM", "SIGHUP"];
18
+ /** POSIX signal numbers, for the conventional `128 + n` exit code. */
19
+ const SIGNAL_NUMBERS = {
20
+ SIGHUP: 1,
21
+ SIGINT: 2,
22
+ SIGTERM: 15,
23
+ };
24
+ /** How long teardown gets before the process exits anyway. */
25
+ export const DEFAULT_EXIT_TIMEOUT_MS = 5_000;
26
+ /** Env override, in seconds. `0` disables the deadline (debugging teardown). */
27
+ export const EXIT_TIMEOUT_ENV = "GG_EXIT_TIMEOUT_SECS";
28
+ /** Upper bound on the override — a deadline nobody will wait for is no deadline. */
29
+ const MAX_EXIT_TIMEOUT_MS = 120_000;
30
+ /**
31
+ * Resolve the teardown deadline from the environment.
32
+ *
33
+ * Anything unparseable, negative or absurd falls back to the default rather
34
+ * than disabling the guard, because a typo in a launcher script must not be
35
+ * able to reintroduce an unbounded hang.
36
+ */
37
+ export function resolveExitTimeoutMs(env = process.env) {
38
+ const raw = env[EXIT_TIMEOUT_ENV];
39
+ if (raw === undefined || raw.trim() === "")
40
+ return DEFAULT_EXIT_TIMEOUT_MS;
41
+ const seconds = Number(raw);
42
+ if (!Number.isFinite(seconds) || seconds < 0)
43
+ return DEFAULT_EXIT_TIMEOUT_MS;
44
+ if (seconds === 0)
45
+ return 0;
46
+ return Math.min(Math.round(seconds * 1000), MAX_EXIT_TIMEOUT_MS);
47
+ }
48
+ /** Conventional exit code for a signal-initiated exit (`128 + signal number`). */
49
+ export function exitCodeForSignal(signal) {
50
+ return 128 + SIGNAL_NUMBERS[signal];
51
+ }
52
+ /**
53
+ * Run `teardown`, then exit — but exit on the deadline even if teardown never
54
+ * settles.
55
+ *
56
+ * The timer is deliberately **not** unref'd: an unref'd timer lets Node exit on
57
+ * its own the moment the loop empties, which would race teardown and produce a
58
+ * nondeterministic exit code. Held ref + explicit exit on both paths means the
59
+ * code is always the one we chose.
60
+ */
61
+ export async function shutdownWithDeadline(code, options) {
62
+ const exit = options.exit ?? ((c) => process.exit(c));
63
+ const scope = options.scope ?? "shutdown";
64
+ const timeoutMs = options.timeoutMs ?? resolveExitTimeoutMs();
65
+ const timer = timeoutMs > 0
66
+ ? setTimeout(() => {
67
+ // Teardown is wedged; anything here must be best-effort and never
68
+ // able to stop the exit itself.
69
+ try {
70
+ options.onTimeout?.(timeoutMs);
71
+ }
72
+ catch {
73
+ // ignored — we are leaving either way
74
+ }
75
+ try {
76
+ log("WARN", scope, "teardown exceeded the exit deadline; forcing exit", {
77
+ timeoutMs: String(timeoutMs),
78
+ code: String(code),
79
+ });
80
+ }
81
+ catch {
82
+ // ignored — the logger may already be closed
83
+ }
84
+ exit(code);
85
+ }, timeoutMs)
86
+ : undefined;
87
+ try {
88
+ await options.teardown();
89
+ }
90
+ catch (error) {
91
+ try {
92
+ options.onError?.(error);
93
+ }
94
+ catch {
95
+ // ignored — a reporting failure must not block the exit
96
+ }
97
+ }
98
+ if (timer)
99
+ clearTimeout(timer);
100
+ return exit(code);
101
+ }
102
+ /**
103
+ * Wire `SIGINT`/`SIGTERM`/`SIGHUP` to a bounded shutdown.
104
+ *
105
+ * A second signal while teardown is still running exits immediately rather than
106
+ * waiting out the deadline — a user hitting Ctrl+C twice is telling us they are
107
+ * done being patient.
108
+ *
109
+ * @returns `requestShutdown`, for non-signal exits (a dead parent process, a
110
+ * quit menu item) so they share the same guard and re-entrancy rules.
111
+ */
112
+ export function installTerminationHandlers(options) {
113
+ const exit = options.exit ?? ((c) => process.exit(c));
114
+ let shuttingDown = false;
115
+ const requestShutdown = (code = 0, signal = null) => {
116
+ if (shuttingDown) {
117
+ // Impatient second signal: skip the remaining deadline.
118
+ if (signal)
119
+ exit(code);
120
+ return;
121
+ }
122
+ shuttingDown = true;
123
+ try {
124
+ options.onShutdownStart?.(signal);
125
+ }
126
+ catch {
127
+ // ignored — a banner must not block teardown
128
+ }
129
+ // `exit` never returns in production, so this promise normally never
130
+ // settles. It only rejects when an injected exit throws (tests), and an
131
+ // unhandled rejection there would crash the runner.
132
+ void shutdownWithDeadline(code, options).catch(() => { });
133
+ };
134
+ for (const signal of TERMINATION_SIGNALS) {
135
+ try {
136
+ process.on(signal, () => requestShutdown(exitCodeForSignal(signal), signal));
137
+ }
138
+ catch {
139
+ // Windows does not deliver every POSIX signal; the others still install.
140
+ }
141
+ }
142
+ return (code = 0) => requestShutdown(code, null);
143
+ }
144
+ //# sourceMappingURL=shutdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shutdown.js","sourceRoot":"","sources":["../../src/core/shutdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shutdown.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shutdown.test.d.ts","sourceRoot":"","sources":["../../src/core/shutdown.test.ts"],"names":[],"mappings":""}