@kenkaiiii/ggcoder 5.26.3 → 5.28.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 (91) hide show
  1. package/dist/app-sidecar-sessions.d.ts +7 -2
  2. package/dist/app-sidecar-sessions.d.ts.map +1 -1
  3. package/dist/app-sidecar-sessions.js +36 -8
  4. package/dist/app-sidecar-sessions.js.map +1 -1
  5. package/dist/app-sidecar-sessions.test.js +88 -0
  6. package/dist/app-sidecar-sessions.test.js.map +1 -1
  7. package/dist/app-sidecar.js +27 -0
  8. package/dist/app-sidecar.js.map +1 -1
  9. package/dist/core/agent-session-process-gate.test.d.ts +2 -0
  10. package/dist/core/agent-session-process-gate.test.d.ts.map +1 -0
  11. package/dist/core/agent-session-process-gate.test.js +88 -0
  12. package/dist/core/agent-session-process-gate.test.js.map +1 -0
  13. package/dist/core/agent-session.d.ts +40 -0
  14. package/dist/core/agent-session.d.ts.map +1 -1
  15. package/dist/core/agent-session.js +204 -6
  16. package/dist/core/agent-session.js.map +1 -1
  17. package/dist/core/foreign-session-import.d.ts +120 -0
  18. package/dist/core/foreign-session-import.d.ts.map +1 -0
  19. package/dist/core/foreign-session-import.js +594 -0
  20. package/dist/core/foreign-session-import.js.map +1 -0
  21. package/dist/core/foreign-session-import.test.d.ts +2 -0
  22. package/dist/core/foreign-session-import.test.d.ts.map +1 -0
  23. package/dist/core/foreign-session-import.test.js +220 -0
  24. package/dist/core/foreign-session-import.test.js.map +1 -0
  25. package/dist/core/foreign-transcript-blocks.d.ts +51 -0
  26. package/dist/core/foreign-transcript-blocks.d.ts.map +1 -0
  27. package/dist/core/foreign-transcript-blocks.js +151 -0
  28. package/dist/core/foreign-transcript-blocks.js.map +1 -0
  29. package/dist/core/mcp/catalog-cache.d.ts +63 -0
  30. package/dist/core/mcp/catalog-cache.d.ts.map +1 -0
  31. package/dist/core/mcp/catalog-cache.js +163 -0
  32. package/dist/core/mcp/catalog-cache.js.map +1 -0
  33. package/dist/core/mcp/catalog-cache.test.d.ts +2 -0
  34. package/dist/core/mcp/catalog-cache.test.d.ts.map +1 -0
  35. package/dist/core/mcp/catalog-cache.test.js +99 -0
  36. package/dist/core/mcp/catalog-cache.test.js.map +1 -0
  37. package/dist/core/mcp/client.d.ts +61 -0
  38. package/dist/core/mcp/client.d.ts.map +1 -1
  39. package/dist/core/mcp/client.js +216 -31
  40. package/dist/core/mcp/client.js.map +1 -1
  41. package/dist/core/mcp/legacy-negotiation.test.d.ts +2 -0
  42. package/dist/core/mcp/legacy-negotiation.test.d.ts.map +1 -0
  43. package/dist/core/mcp/legacy-negotiation.test.js +80 -0
  44. package/dist/core/mcp/legacy-negotiation.test.js.map +1 -0
  45. package/dist/core/mcp/oauth-provider.d.ts +1 -2
  46. package/dist/core/mcp/oauth-provider.d.ts.map +1 -1
  47. package/dist/core/mcp/oauth-provider.js +5 -1
  48. package/dist/core/mcp/oauth-provider.js.map +1 -1
  49. package/dist/core/mcp/oauth-store.d.ts +1 -1
  50. package/dist/core/mcp/oauth-store.d.ts.map +1 -1
  51. package/dist/core/mcp/oauth-store.js.map +1 -1
  52. package/dist/core/mcp/when-connected.test.d.ts +2 -0
  53. package/dist/core/mcp/when-connected.test.d.ts.map +1 -0
  54. package/dist/core/mcp/when-connected.test.js +46 -0
  55. package/dist/core/mcp/when-connected.test.js.map +1 -0
  56. package/dist/core/process-gate.d.ts +45 -0
  57. package/dist/core/process-gate.d.ts.map +1 -0
  58. package/dist/core/process-gate.js +71 -0
  59. package/dist/core/process-gate.js.map +1 -0
  60. package/dist/core/process-gate.test.d.ts +2 -0
  61. package/dist/core/process-gate.test.d.ts.map +1 -0
  62. package/dist/core/process-gate.test.js +87 -0
  63. package/dist/core/process-gate.test.js.map +1 -0
  64. package/dist/core/process-manager.d.ts +9 -0
  65. package/dist/core/process-manager.d.ts.map +1 -1
  66. package/dist/core/process-manager.js +17 -15
  67. package/dist/core/process-manager.js.map +1 -1
  68. package/dist/core/project-discovery.d.ts +19 -0
  69. package/dist/core/project-discovery.d.ts.map +1 -1
  70. package/dist/core/project-discovery.js +100 -0
  71. package/dist/core/project-discovery.js.map +1 -1
  72. package/dist/core/session-manager.d.ts +5 -1
  73. package/dist/core/session-manager.d.ts.map +1 -1
  74. package/dist/core/session-manager.js +2 -1
  75. package/dist/core/session-manager.js.map +1 -1
  76. package/dist/core/settings-manager.d.ts +1 -0
  77. package/dist/core/settings-manager.d.ts.map +1 -1
  78. package/dist/core/settings-manager.js +6 -0
  79. package/dist/core/settings-manager.js.map +1 -1
  80. package/dist/tools/tool-search.d.ts +12 -1
  81. package/dist/tools/tool-search.d.ts.map +1 -1
  82. package/dist/tools/tool-search.js +22 -3
  83. package/dist/tools/tool-search.js.map +1 -1
  84. package/dist/tools/tool-search.test.d.ts +2 -0
  85. package/dist/tools/tool-search.test.d.ts.map +1 -0
  86. package/dist/tools/tool-search.test.js +69 -0
  87. package/dist/tools/tool-search.test.js.map +1 -0
  88. package/dist/ui/App.d.ts.map +1 -1
  89. package/dist/ui/App.js +27 -1
  90. package/dist/ui/App.js.map +1 -1
  91. package/package.json +5 -5
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent-session-process-gate.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-session-process-gate.test.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-process-gate.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,88 @@
1
+ import { afterEach, describe, expect, it } from "vitest";
2
+ import { AgentSession } from "./agent-session.js";
3
+ import { ProcessManager } from "./process-manager.js";
4
+ function makeSession() {
5
+ const session = new AgentSession({
6
+ provider: "anthropic",
7
+ model: "claude-sonnet-5",
8
+ cwd: "/project",
9
+ transient: true,
10
+ systemPrompt: "test",
11
+ // Isolate the process gate from the Ideal review phase.
12
+ selfCorrectionHooks: false,
13
+ });
14
+ return { session, internal: session };
15
+ }
16
+ const managers = [];
17
+ function trackedManager() {
18
+ const manager = new ProcessManager();
19
+ managers.push(manager);
20
+ return manager;
21
+ }
22
+ afterEach(() => {
23
+ for (const manager of managers.splice(0))
24
+ manager.shutdownAll();
25
+ });
26
+ /** Poll until the process log has content, so the read is meaningful. */
27
+ async function waitForOutput(manager, id) {
28
+ for (let attempt = 0; attempt < 50; attempt++) {
29
+ const result = await manager.readOutput(id);
30
+ if (result.output.trim())
31
+ return result.output;
32
+ await new Promise((resolve) => setTimeout(resolve, 50));
33
+ }
34
+ return "";
35
+ }
36
+ describe("AgentSession background-process completion gate", () => {
37
+ it("injects once for an unread in-run process, then completes after it is read", async () => {
38
+ const { internal } = makeSession();
39
+ const manager = trackedManager();
40
+ internal.processManager = manager;
41
+ internal.runStartedAt = Date.now();
42
+ const started = await manager.start("echo gate-probe; sleep 30", process.cwd());
43
+ const first = internal.getHookFollowUpMessages();
44
+ expect(first?.[0]?.role).toBe("user");
45
+ expect(first?.[0]?.content).toContain(started.id);
46
+ expect(internal.processGateInjected).toBe(1);
47
+ // The agent does what the gate asked: reads the output.
48
+ expect(await waitForOutput(manager, started.id)).toContain("gate-probe");
49
+ expect(internal.getHookFollowUpMessages()).toBeNull();
50
+ expect(internal.processGateInjected).toBe(1);
51
+ });
52
+ it("never gates a process that predates the run", async () => {
53
+ const { internal } = makeSession();
54
+ const manager = trackedManager();
55
+ internal.processManager = manager;
56
+ await manager.start("sleep 30", process.cwd());
57
+ // Run started after the process — a deliberately long-lived dev server.
58
+ internal.runStartedAt = Date.now() + 1_000;
59
+ expect(internal.getHookFollowUpMessages()).toBeNull();
60
+ expect(internal.processGateInjected).toBe(0);
61
+ });
62
+ it("stops gating after the per-run injection cap so a turn can never wedge", async () => {
63
+ const { internal } = makeSession();
64
+ const manager = trackedManager();
65
+ internal.processManager = manager;
66
+ internal.runStartedAt = Date.now();
67
+ await manager.start("sleep 30", process.cwd());
68
+ expect(internal.getHookFollowUpMessages()).not.toBeNull();
69
+ expect(internal.getHookFollowUpMessages()).not.toBeNull();
70
+ expect(internal.getHookFollowUpMessages()).toBeNull();
71
+ expect(internal.processGateInjected).toBe(2);
72
+ });
73
+ it("yields to the child-agent gate first", async () => {
74
+ const { internal } = makeSession();
75
+ const manager = trackedManager();
76
+ internal.processManager = manager;
77
+ internal.runStartedAt = Date.now();
78
+ internal.subAgentManager = {
79
+ completionGateMessage: () => "Collect child agent recovered-child before finishing.",
80
+ };
81
+ await manager.start("sleep 30", process.cwd());
82
+ expect(internal.getHookFollowUpMessages()).toEqual([
83
+ { role: "user", content: "Collect child agent recovered-child before finishing." },
84
+ ]);
85
+ expect(internal.processGateInjected).toBe(0);
86
+ });
87
+ });
88
+ //# sourceMappingURL=agent-session-process-gate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-session-process-gate.test.js","sourceRoot":"","sources":["../../src/core/agent-session-process-gate.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAUtD,SAAS,WAAW;IAClB,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC;QAC/B,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,iBAAiB;QACxB,GAAG,EAAE,UAAU;QACf,SAAS,EAAE,IAAI;QACf,YAAY,EAAE,MAAM;QACpB,wDAAwD;QACxD,mBAAmB,EAAE,KAAK;KAC3B,CAAC,CAAC;IACH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAmC,EAAE,CAAC;AACpE,CAAC;AAED,MAAM,QAAQ,GAAqB,EAAE,CAAC;AAEtC,SAAS,cAAc;IACrB,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IACrC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,CAAC,GAAG,EAAE;IACb,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,WAAW,EAAE,CAAC;AAClE,CAAC,CAAC,CAAC;AAEH,yEAAyE;AACzE,KAAK,UAAU,aAAa,CAAC,OAAuB,EAAE,EAAU;IAC9D,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QAC5C,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;YAAE,OAAO,MAAM,CAAC,MAAM,CAAC;QAC/C,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,QAAQ,CAAC,iDAAiD,EAAE,GAAG,EAAE;IAC/D,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,QAAQ,CAAC,cAAc,GAAG,OAAO,CAAC;QAClC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEnC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAEhF,MAAM,KAAK,GAAG,QAAQ,CAAC,uBAAuB,EAAE,CAAC;QACjD,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE7C,wDAAwD;QACxD,MAAM,CAAC,MAAM,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAEzE,MAAM,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtD,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,QAAQ,CAAC,cAAc,GAAG,OAAO,CAAC;QAElC,MAAM,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC/C,wEAAwE;QACxE,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAE3C,MAAM,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtD,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,QAAQ,CAAC,cAAc,GAAG,OAAO,CAAC;QAClC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEnC,MAAM,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAE/C,MAAM,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC1D,MAAM,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QAC1D,MAAM,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;QACtD,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;QACjC,QAAQ,CAAC,cAAc,GAAG,OAAO,CAAC;QAClC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACnC,QAAQ,CAAC,eAAe,GAAG;YACzB,qBAAqB,EAAE,GAAG,EAAE,CAAC,uDAAuD;SACrF,CAAC;QAEF,MAAM,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAE/C,MAAM,CAAC,QAAQ,CAAC,uBAAuB,EAAE,CAAC,CAAC,OAAO,CAAC;YACjD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,uDAAuD,EAAE;SACnF,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -4,6 +4,7 @@ import { EventBus } from "./event-bus.js";
4
4
  import { SlashCommandRegistry } from "./slash-commands.js";
5
5
  import { type BranchInfo, type KenTurnPayload, type AutopilotMarkerPayload, type AppMarkerPayload, type TurnMetricPayload } from "./session-manager.js";
6
6
  import type { BackgroundProcess } from "./process-manager.js";
7
+ import { type ImportForeignTranscriptResult } from "./foreign-session-import.js";
7
8
  import { type EnhanceResult } from "../utils/prompt-enhancer.js";
8
9
  /** A chat attachment (image / video / other file) prepared for the model. The
9
10
  * raw base64 `data` rides native blocks; `path` (when persisted to disk) lets
@@ -189,6 +190,10 @@ export declare class AgentSession {
189
190
  /** 0 = none; 1 = first nudge sent; 2 = final stop-and-report injected. */
190
191
  private loopBreakInjected;
191
192
  private regroundingInjected;
193
+ /** Wall-clock start of the current run; scopes the background-process gate. */
194
+ private runStartedAt;
195
+ /** Gate injections spent this run, capped by MAX_PROCESS_GATE_INJECTIONS. */
196
+ private processGateInjected;
192
197
  private compactionOccurred;
193
198
  private lastCompactionCompacted;
194
199
  private compactionRetryAfter;
@@ -211,6 +216,11 @@ export declare class AgentSession {
211
216
  private mcpManager?;
212
217
  /** Deferred MCP tools awaiting discovery via tool_search (bench A win). */
213
218
  private mcpCatalog?;
219
+ /** Live (connected) MCP tools by name — the reconcile target for cached stubs. */
220
+ private liveMcpTools;
221
+ /** Server name for each cached-only tool, so a stub knows what to wait on. */
222
+ private cachedMcpToolServers;
223
+ private readonly mcpCatalogCache;
214
224
  private provider;
215
225
  private model;
216
226
  private cwd;
@@ -299,6 +309,27 @@ export declare class AgentSession {
299
309
  * re-reads every turn, so promoted tools are callable on the next step.
300
310
  */
301
311
  private addMcpTools;
312
+ /**
313
+ * Register `tool_search` once. Promotion of a cached-only entry waits for its
314
+ * server so the model is told immediately when that capability turns out to
315
+ * be unreachable, instead of promoting a tool that fails on first call.
316
+ */
317
+ private ensureToolSearchTool;
318
+ /** Append tools, replacing any same-named entry (cached stub → live tool). */
319
+ private replaceOrPushTools;
320
+ /** Swap already-promoted cached stubs for their live equivalents, in place. */
321
+ private replaceLivePromotedTools;
322
+ /**
323
+ * Publish cached tool definitions into the deferred catalog so `tool_search`
324
+ * answers correctly on turn 1. A cached stub carries the real name, one-line
325
+ * description and input schema; calling it waits for the live connection and
326
+ * then dispatches against the real client, or returns a clear error when that
327
+ * server ultimately failed. Live tools replace stubs on connect.
328
+ */
329
+ private seedMcpCatalogFromCache;
330
+ /** Catalog-only registration for cached stubs — never marks them live. */
331
+ private addCachedMcpTools;
332
+ private buildCachedMcpTool;
302
333
  /**
303
334
  * Resolve a `/name [args]` input to the prompt template it expands into, or
304
335
  * null when it isn't a prompt-template command for THIS session (an ordinary
@@ -618,5 +649,14 @@ export declare class AgentSession {
618
649
  private prepareDynamicContext;
619
650
  private persistMessage;
620
651
  private createSlashCommandContext;
652
+ /**
653
+ * Import a Claude Code / Codex / Cursor transcript as a resumable GG Coder
654
+ * session in this session's sessions directory. Never throws — a bad path or
655
+ * an unrecognized format comes back as `{ ok: false, error }` so both the CLI
656
+ * and the desktop app can show it verbatim.
657
+ */
658
+ importForeignTranscript(filePath: string, opts?: {
659
+ cwd?: string;
660
+ }): Promise<ImportForeignTranscriptResult>;
621
661
  }
622
662
  //# sourceMappingURL=agent-session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/core/agent-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent-session.d.ts","sourceRoot":"","sources":["../../src/core/agent-session.ts"],"names":[],"mappings":"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"}
@@ -18,10 +18,14 @@ import { discoverSkills } from "./skills.js";
18
18
  import { ensureAppDirs } from "../config.js";
19
19
  import { buildSystemPrompt } from "../system-prompt.js";
20
20
  import { createTools, createWebSearchTool, } from "../tools/index.js";
21
+ import { buildProcessCompletionFollowUp } from "./process-gate.js";
21
22
  import { buildSubAgentCompletionFollowUp } from "./subagent-manager.js";
22
23
  import { applyAsyncSubagentPolicy } from "./subagent-policy.js";
24
+ import { z } from "zod";
23
25
  import { MCPClientManager, getAllMcpServers } from "./mcp/index.js";
24
26
  import { DeferredToolCatalog } from "./mcp/deferred-catalog.js";
27
+ import { McpCatalogCache } from "./mcp/catalog-cache.js";
28
+ import { describeDropped, importForeignSession, } from "./foreign-session-import.js";
25
29
  import { createToolSearchTool } from "../tools/tool-search.js";
26
30
  import { log } from "./logger.js";
27
31
  import { setEstimatorModel, calibrateEstimatorFromUsage } from "./compaction/token-estimator.js";
@@ -136,6 +140,10 @@ export class AgentSession {
136
140
  /** 0 = none; 1 = first nudge sent; 2 = final stop-and-report injected. */
137
141
  loopBreakInjected = 0;
138
142
  regroundingInjected = false;
143
+ /** Wall-clock start of the current run; scopes the background-process gate. */
144
+ runStartedAt = 0;
145
+ /** Gate injections spent this run, capped by MAX_PROCESS_GATE_INJECTIONS. */
146
+ processGateInjected = 0;
139
147
  compactionOccurred = false;
140
148
  lastCompactionCompacted = false;
141
149
  compactionRetryAfter = 0;
@@ -168,6 +176,11 @@ export class AgentSession {
168
176
  mcpManager;
169
177
  /** Deferred MCP tools awaiting discovery via tool_search (bench A win). */
170
178
  mcpCatalog;
179
+ /** Live (connected) MCP tools by name — the reconcile target for cached stubs. */
180
+ liveMcpTools = new Map();
181
+ /** Server name for each cached-only tool, so a stub knows what to wait on. */
182
+ cachedMcpToolServers = new Map();
183
+ mcpCatalogCache = new McpCatalogCache();
171
184
  provider;
172
185
  model;
173
186
  cwd;
@@ -343,7 +356,10 @@ export class AgentSession {
343
356
  // its listening handshake until this resolves), `backgroundMcpConnect`
344
357
  // moves the connect off the critical path so the session becomes usable
345
358
  // immediately and tools are appended whenever the servers come up.
346
- this.mcpManager = new MCPClientManager();
359
+ this.mcpManager = new MCPClientManager({
360
+ catalogCache: this.mcpCatalogCache,
361
+ modernProtocol: this.settingsManager.get("mcpModernProtocol"),
362
+ });
347
363
  if (this.opts.backgroundMcpConnect) {
348
364
  void this.connectMcpServers();
349
365
  }
@@ -506,6 +522,11 @@ export class AgentSession {
506
522
  if (this.opts.allowedTools && mcpWhitelist) {
507
523
  servers = servers.filter((s) => mcpWhitelist.includes(s.name));
508
524
  }
525
+ // Seed the catalog from the on-disk cache BEFORE connecting. With
526
+ // `backgroundMcpConnect` the first turns would otherwise run against an
527
+ // empty catalog and tool_search would answer "the catalog is empty" for
528
+ // capabilities that genuinely exist — a wrong answer, not a slow one.
529
+ await this.seedMcpCatalogFromCache(servers);
509
530
  const connected = await this.mcpManager.connectAll(servers);
510
531
  // Defense-in-depth: even from a whitelisted server, only push tools that
511
532
  // pass the allow-list (no-op when there's no allow-list).
@@ -541,18 +562,137 @@ export class AgentSession {
541
562
  addMcpTools(mcpTools) {
542
563
  if (mcpTools.length === 0)
543
564
  return;
565
+ for (const tool of mcpTools) {
566
+ this.liveMcpTools.set(tool.name, tool);
567
+ this.cachedMcpToolServers.delete(tool.name);
568
+ }
544
569
  const defer = !this.opts.allowedTools && this.settingsManager.get("deferredMcpTools");
545
570
  if (!defer) {
546
- this.tools.push(...mcpTools);
571
+ this.replaceOrPushTools(mcpTools);
547
572
  return;
548
573
  }
549
574
  this.mcpCatalog ??= new DeferredToolCatalog();
575
+ // `add` is name-keyed, so live definitions replace cached stubs in place.
550
576
  this.mcpCatalog.add(mcpTools);
551
- if (!this.tools.some((t) => t.name === "tool_search")) {
552
- this.tools.push(createToolSearchTool(this.mcpCatalog, (promoted) => {
553
- this.tools.push(...promoted);
554
- }));
577
+ // A stub the model already promoted lives in `this.tools`; swap it for the
578
+ // live tool so later calls dispatch directly instead of through the stub.
579
+ this.replaceLivePromotedTools(mcpTools);
580
+ this.ensureToolSearchTool();
581
+ }
582
+ /**
583
+ * Register `tool_search` once. Promotion of a cached-only entry waits for its
584
+ * server so the model is told immediately when that capability turns out to
585
+ * be unreachable, instead of promoting a tool that fails on first call.
586
+ */
587
+ ensureToolSearchTool() {
588
+ if (!this.mcpCatalog)
589
+ return;
590
+ if (this.tools.some((t) => t.name === "tool_search"))
591
+ return;
592
+ this.tools.push(createToolSearchTool(this.mcpCatalog, (promoted) => {
593
+ this.tools.push(...promoted);
594
+ }, async (toolName) => {
595
+ if (this.liveMcpTools.has(toolName))
596
+ return undefined;
597
+ const serverName = this.cachedMcpToolServers.get(toolName);
598
+ if (!serverName)
599
+ return undefined;
600
+ const outcome = (await this.mcpManager?.whenConnected(serverName)) ?? {
601
+ ok: false,
602
+ error: "MCP is disabled for this session",
603
+ };
604
+ return outcome.ok
605
+ ? { serverName, ok: true }
606
+ : { serverName, ok: false, error: outcome.error };
607
+ }));
608
+ }
609
+ /** Append tools, replacing any same-named entry (cached stub → live tool). */
610
+ replaceOrPushTools(tools) {
611
+ for (const tool of tools) {
612
+ const index = this.tools.findIndex((t) => t.name === tool.name);
613
+ if (index >= 0)
614
+ this.tools[index] = tool;
615
+ else
616
+ this.tools.push(tool);
617
+ }
618
+ }
619
+ /** Swap already-promoted cached stubs for their live equivalents, in place. */
620
+ replaceLivePromotedTools(tools) {
621
+ for (const tool of tools) {
622
+ const index = this.tools.findIndex((t) => t.name === tool.name);
623
+ if (index >= 0)
624
+ this.tools[index] = tool;
625
+ }
626
+ }
627
+ /**
628
+ * Publish cached tool definitions into the deferred catalog so `tool_search`
629
+ * answers correctly on turn 1. A cached stub carries the real name, one-line
630
+ * description and input schema; calling it waits for the live connection and
631
+ * then dispatches against the real client, or returns a clear error when that
632
+ * server ultimately failed. Live tools replace stubs on connect.
633
+ */
634
+ async seedMcpCatalogFromCache(servers) {
635
+ if (!this.opts.backgroundMcpConnect)
636
+ return;
637
+ if (this.opts.allowedTools || !this.settingsManager.get("deferredMcpTools"))
638
+ return;
639
+ let entries;
640
+ try {
641
+ entries = await this.mcpCatalogCache.entriesFor(servers);
642
+ }
643
+ catch {
644
+ return;
645
+ }
646
+ const stubs = [];
647
+ for (const [serverName, entry] of entries) {
648
+ for (const cached of entry.tools) {
649
+ if (this.liveMcpTools.has(cached.name))
650
+ continue;
651
+ this.cachedMcpToolServers.set(cached.name, serverName);
652
+ stubs.push(this.buildCachedMcpTool(serverName, cached));
653
+ }
555
654
  }
655
+ if (stubs.length === 0)
656
+ return;
657
+ log("INFO", "mcp", "Seeded deferred tool catalog from cache", {
658
+ tools: String(stubs.length),
659
+ servers: String(entries.size),
660
+ });
661
+ this.addCachedMcpTools(stubs);
662
+ }
663
+ /** Catalog-only registration for cached stubs — never marks them live. */
664
+ addCachedMcpTools(stubs) {
665
+ this.mcpCatalog ??= new DeferredToolCatalog();
666
+ this.mcpCatalog.add(stubs);
667
+ this.ensureToolSearchTool();
668
+ }
669
+ buildCachedMcpTool(serverName, cached) {
670
+ return {
671
+ name: cached.name,
672
+ description: cached.description,
673
+ parameters: z.record(z.string(), z.unknown()),
674
+ rawInputSchema: cached.rawInputSchema,
675
+ execute: async (args, context) => {
676
+ const live = this.liveMcpTools.get(cached.name);
677
+ if (live)
678
+ return live.execute(args, context);
679
+ const outcome = (await this.mcpManager?.whenConnected(serverName)) ?? {
680
+ ok: false,
681
+ error: "MCP is disabled for this session",
682
+ };
683
+ if (!outcome.ok) {
684
+ return (`MCP tool ${cached.name} is unavailable: server "${serverName}" did not connect ` +
685
+ `(${outcome.error}). This tool was offered from a cached catalog. ` +
686
+ `Use a different approach or ask the user to check their MCP configuration.`);
687
+ }
688
+ const connected = this.liveMcpTools.get(cached.name);
689
+ if (!connected) {
690
+ return (`MCP tool ${cached.name} no longer exists: server "${serverName}" connected but ` +
691
+ `does not expose it. The cached catalog entry was stale.`);
692
+ }
693
+ return connected.execute(args, context);
694
+ },
695
+ };
556
696
  }
557
697
  /**
558
698
  * Resolve a `/name [args]` input to the prompt template it expands into, or
@@ -731,6 +871,8 @@ export class AgentSession {
731
871
  this.idealReviewPhase = "idle";
732
872
  this.loopBreakInjected = 0;
733
873
  this.regroundingInjected = false;
874
+ this.runStartedAt = Date.now();
875
+ this.processGateInjected = 0;
734
876
  this.compactionOccurred = false;
735
877
  this.originalRequest = originalRequest;
736
878
  }
@@ -922,6 +1064,17 @@ export class AgentSession {
922
1064
  const childCompletionFollowUp = buildSubAgentCompletionFollowUp(this.subAgentManager);
923
1065
  if (childCompletionFollowUp)
924
1066
  return childCompletionFollowUp;
1067
+ // Background processes started this run and never read block completion:
1068
+ // their progress/exit checkpoints only land on the steering path, which an
1069
+ // agent about to stop never reaches.
1070
+ const processFollowUp = buildProcessCompletionFollowUp(this.processManager?.list() ?? [], this.runStartedAt, this.processGateInjected);
1071
+ if (processFollowUp) {
1072
+ this.processGateInjected += 1;
1073
+ log("INFO", "process-gate", "Injecting background-process completion gate", {
1074
+ injected: String(this.processGateInjected),
1075
+ });
1076
+ return processFollowUp;
1077
+ }
925
1078
  if (this.opts.selfCorrectionHooks === false || this.idealReviewSuppressed)
926
1079
  return null;
927
1080
  if (this.idealReviewPhase === "reviewing") {
@@ -1387,6 +1540,8 @@ export class AgentSession {
1387
1540
  // re-adding. Some tools may already have been promoted out of the catalog.
1388
1541
  this.tools = this.tools.filter((t) => !t.name.startsWith("mcp__"));
1389
1542
  this.mcpCatalog?.removeWhere((name) => name.startsWith("mcp__"));
1543
+ this.liveMcpTools.clear();
1544
+ this.cachedMcpToolServers.clear();
1390
1545
  this.addMcpTools(mcpTools);
1391
1546
  }
1392
1547
  catch (err) {
@@ -2340,5 +2495,48 @@ export class AgentSession {
2340
2495
  getAdditionalRoots: () => this.getAdditionalRoots(),
2341
2496
  };
2342
2497
  }
2498
+ /**
2499
+ * Import a Claude Code / Codex / Cursor transcript as a resumable GG Coder
2500
+ * session in this session's sessions directory. Never throws — a bad path or
2501
+ * an unrecognized format comes back as `{ ok: false, error }` so both the CLI
2502
+ * and the desktop app can show it verbatim.
2503
+ */
2504
+ async importForeignTranscript(filePath, opts = {}) {
2505
+ try {
2506
+ const imported = await importForeignSession({
2507
+ filePath: resolveHomePath(filePath),
2508
+ sessionManager: this.sessionManager,
2509
+ provider: this.provider,
2510
+ model: this.model,
2511
+ cwd: opts.cwd ?? undefined,
2512
+ });
2513
+ log("INFO", "import", "Imported foreign transcript", {
2514
+ format: imported.format,
2515
+ messages: String(imported.messageCount),
2516
+ });
2517
+ return {
2518
+ ok: true,
2519
+ sessionId: imported.sessionId,
2520
+ sessionPath: imported.sessionPath,
2521
+ cwd: imported.cwd,
2522
+ format: imported.format,
2523
+ messageCount: imported.messageCount,
2524
+ dropped: describeDropped(imported.dropped),
2525
+ ...(imported.preview ? { preview: imported.preview } : {}),
2526
+ };
2527
+ }
2528
+ catch (err) {
2529
+ return { ok: false, error: err instanceof Error ? err.message : String(err) };
2530
+ }
2531
+ }
2532
+ }
2533
+ /** Expand a leading `~` so `/import ~/.codex/...` works from any shell. */
2534
+ function resolveHomePath(filePath) {
2535
+ if (filePath === "~")
2536
+ return os.homedir();
2537
+ if (filePath.startsWith("~/") || filePath.startsWith("~\\")) {
2538
+ return path.join(os.homedir(), filePath.slice(2));
2539
+ }
2540
+ return filePath;
2343
2541
  }
2344
2542
  //# sourceMappingURL=agent-session.js.map