@gajae-code/coding-agent 0.11.11 → 0.12.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 (182) hide show
  1. package/CHANGELOG.md +49 -3
  2. package/dist/types/cli/read-cli.d.ts +1 -0
  3. package/dist/types/commands/deep-interview.d.ts +9 -0
  4. package/dist/types/commands/harness.d.ts +22 -0
  5. package/dist/types/commands/read.d.ts +6 -0
  6. package/dist/types/config/model-registry.d.ts +4 -0
  7. package/dist/types/config/provider-auth-health.d.ts +14 -0
  8. package/dist/types/config/provider-ranking.d.ts +59 -0
  9. package/dist/types/config/settings-schema.d.ts +29 -1
  10. package/dist/types/config/settings.d.ts +2 -0
  11. package/dist/types/extensibility/extensions/types.d.ts +22 -2
  12. package/dist/types/extensibility/shared-events.d.ts +6 -0
  13. package/dist/types/gjc-runtime/deep-interview-ambiguity.d.ts +5 -12
  14. package/dist/types/gjc-runtime/deep-interview-recorder.d.ts +17 -32
  15. package/dist/types/gjc-runtime/deep-interview-stage.d.ts +37 -0
  16. package/dist/types/gjc-runtime/deep-interview-state.d.ts +4 -135
  17. package/dist/types/gjc-runtime/gc-runtime.d.ts +1 -1
  18. package/dist/types/gjc-runtime/memory-guard-owner-claims.d.ts +47 -0
  19. package/dist/types/gjc-runtime/ralplan-runtime.d.ts +52 -1
  20. package/dist/types/gjc-runtime/state-writer.d.ts +5 -46
  21. package/dist/types/gjc-runtime/team-launch.d.ts +1 -1
  22. package/dist/types/gjc-runtime/team-runtime.d.ts +2 -1
  23. package/dist/types/gjc-runtime/team-store.d.ts +12 -0
  24. package/dist/types/gjc-runtime/team-worker-memory-guard.d.ts +92 -0
  25. package/dist/types/gjc-runtime/tmux-owner-isolation.d.ts +7 -0
  26. package/dist/types/gjc-runtime/ultragoal-receipt-freshness.d.ts +8 -0
  27. package/dist/types/gjc-runtime/workflow-manifest.d.ts +3 -5
  28. package/dist/types/internal-urls/local-root-gc.d.ts +2 -0
  29. package/dist/types/main.d.ts +1 -1
  30. package/dist/types/memories/index.d.ts +2 -0
  31. package/dist/types/modes/acp/acp-agent.d.ts +8 -0
  32. package/dist/types/modes/components/assistant-message.d.ts +3 -1
  33. package/dist/types/modes/components/irc-sidebar.d.ts +41 -0
  34. package/dist/types/modes/components/read-tool-group.d.ts +4 -4
  35. package/dist/types/modes/components/session-observer-overlay.d.ts +4 -0
  36. package/dist/types/modes/components/settings-selector.d.ts +2 -0
  37. package/dist/types/modes/components/tool-execution.d.ts +8 -0
  38. package/dist/types/modes/controllers/event-controller.d.ts +3 -0
  39. package/dist/types/modes/interactive-mode.d.ts +2 -0
  40. package/dist/types/modes/irc-observation-ledger.d.ts +17 -1
  41. package/dist/types/modes/types.d.ts +2 -0
  42. package/dist/types/modes/utils/ui-helpers.d.ts +16 -0
  43. package/dist/types/runtime-mcp/smithery-auth.d.ts +5 -0
  44. package/dist/types/sdk/broker/lifecycle.d.ts +5 -0
  45. package/dist/types/sdk/bus/control-drain-lease.d.ts +52 -0
  46. package/dist/types/sdk/bus/index.d.ts +15 -1
  47. package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +37 -0
  48. package/dist/types/sdk/bus/prompt-reconciliation.d.ts +2 -1
  49. package/dist/types/sdk/bus/reconciliation-store.d.ts +65 -0
  50. package/dist/types/sdk/host/control/operations.d.ts +1 -1
  51. package/dist/types/sdk/host/host.d.ts +2 -0
  52. package/dist/types/sdk/host/query/handlers.d.ts +5 -0
  53. package/dist/types/session/agent-session.d.ts +44 -10
  54. package/dist/types/session/memory-guard-checkpoint-participant.d.ts +69 -0
  55. package/dist/types/session/session-manager.d.ts +25 -13
  56. package/dist/types/session/streaming-output.d.ts +60 -5
  57. package/dist/types/skill-state/active-state.d.ts +0 -4
  58. package/dist/types/skill-state/workflow-hud.d.ts +3 -0
  59. package/dist/types/tools/browser/launch.d.ts +7 -0
  60. package/dist/types/tools/fetch.d.ts +17 -1
  61. package/dist/types/tools/output-meta.d.ts +21 -1
  62. package/dist/types/tools/read-internals.d.ts +12 -0
  63. package/dist/types/tools/read.d.ts +45 -1
  64. package/dist/types/tools/resource-gc.d.ts +4 -0
  65. package/dist/types/tools/tool-result.d.ts +7 -1
  66. package/package.json +9 -13
  67. package/scripts/benchmark-sticky-viewport-pr1.ts +239 -0
  68. package/scripts/capture-sticky-viewport-showcase.ts +292 -0
  69. package/scripts/generate-sdk-operation-inventory.ts +2 -0
  70. package/scripts/verify-gjc-sdk-canonicalization.ts +122 -18
  71. package/scripts/verify-sticky-viewport-showcase.ts +611 -0
  72. package/src/capability/index.ts +8 -0
  73. package/src/cli/read-cli.ts +2 -1
  74. package/src/cli.ts +1 -0
  75. package/src/commands/deep-interview.ts +29 -9
  76. package/src/commands/harness.ts +35 -12
  77. package/src/commands/read.ts +11 -2
  78. package/src/commands/team.ts +1 -1
  79. package/src/config/model-registry.ts +21 -2
  80. package/src/config/provider-auth-health.ts +42 -0
  81. package/src/config/provider-ranking.ts +119 -0
  82. package/src/config/settings-schema.ts +23 -1
  83. package/src/config/settings.ts +246 -108
  84. package/src/defaults/gjc/skills/deep-interview/SKILL.md +229 -82
  85. package/src/defaults/gjc/skills/ralplan/SKILL.md +58 -25
  86. package/src/defaults/gjc/skills/team/SKILL.md +1 -1
  87. package/src/defaults/gjc/skills/ultragoal/SKILL.md +25 -15
  88. package/src/eval/py/executor.ts +7 -2
  89. package/src/extensibility/extensions/types.ts +28 -4
  90. package/src/extensibility/shared-events.ts +5 -0
  91. package/src/gjc-runtime/deep-interview-ambiguity.ts +47 -82
  92. package/src/gjc-runtime/deep-interview-recorder.ts +227 -310
  93. package/src/gjc-runtime/deep-interview-runtime.ts +109 -270
  94. package/src/gjc-runtime/deep-interview-stage.ts +1016 -0
  95. package/src/gjc-runtime/deep-interview-state.ts +12 -943
  96. package/src/gjc-runtime/gc-render.ts +1 -0
  97. package/src/gjc-runtime/gc-runtime.ts +11 -1
  98. package/src/gjc-runtime/memory-guard-owner-claims.ts +389 -0
  99. package/src/gjc-runtime/ralplan-runtime.ts +742 -85
  100. package/src/gjc-runtime/state-runtime.ts +2 -1
  101. package/src/gjc-runtime/state-writer.ts +70 -222
  102. package/src/gjc-runtime/team-launch.ts +34 -5
  103. package/src/gjc-runtime/team-runtime.ts +970 -33
  104. package/src/gjc-runtime/team-store.ts +32 -0
  105. package/src/gjc-runtime/team-worker-memory-guard.ts +363 -0
  106. package/src/gjc-runtime/team-workers.ts +1 -0
  107. package/src/gjc-runtime/tmux-owner-isolation.ts +18 -0
  108. package/src/gjc-runtime/ultragoal-receipt-freshness.ts +20 -0
  109. package/src/gjc-runtime/ultragoal-runtime.ts +13 -7
  110. package/src/gjc-runtime/workflow-manifest.generated.json +97 -350
  111. package/src/gjc-runtime/workflow-manifest.ts +34 -179
  112. package/src/hooks/native-skill-hook.ts +17 -4
  113. package/src/hooks/skill-state.ts +1 -23
  114. package/src/internal-urls/docs-index.generated.ts +8 -9
  115. package/src/internal-urls/local-root-gc.ts +127 -0
  116. package/src/main.ts +9 -5
  117. package/src/memories/index.ts +10 -0
  118. package/src/modes/DESIGN.md +47 -0
  119. package/src/modes/acp/acp-agent.ts +43 -7
  120. package/src/modes/acp/acp-event-mapper.ts +14 -7
  121. package/src/modes/acp/acp-mode.ts +39 -3
  122. package/src/modes/components/assistant-message.ts +123 -22
  123. package/src/modes/components/irc-sidebar.ts +176 -62
  124. package/src/modes/components/model-selector.ts +61 -4
  125. package/src/modes/components/oauth-selector.ts +42 -12
  126. package/src/modes/components/read-tool-group.ts +82 -14
  127. package/src/modes/components/session-observer-overlay.ts +187 -32
  128. package/src/modes/components/settings-selector.ts +60 -18
  129. package/src/modes/components/tool-execution.ts +138 -27
  130. package/src/modes/controllers/event-controller.ts +109 -27
  131. package/src/modes/controllers/extension-ui-controller.ts +19 -2
  132. package/src/modes/controllers/input-controller.ts +18 -3
  133. package/src/modes/controllers/selector-controller.ts +83 -37
  134. package/src/modes/interactive-mode.ts +62 -3
  135. package/src/modes/irc-observation-ledger.ts +71 -15
  136. package/src/modes/runtime-init.ts +19 -2
  137. package/src/modes/types.ts +2 -0
  138. package/src/modes/utils/ui-helpers.ts +94 -1
  139. package/src/prompts/agents/architect.md +9 -1
  140. package/src/prompts/agents/critic.md +9 -0
  141. package/src/prompts/system/system-prompt.md +0 -1
  142. package/src/prompts/tools/read.md +4 -2
  143. package/src/runtime-mcp/smithery-auth.ts +17 -2
  144. package/src/runtime-mcp/smithery-connect.ts +11 -1
  145. package/src/sdk/broker/lifecycle.ts +25 -6
  146. package/src/sdk/bus/control-drain-lease.ts +104 -0
  147. package/src/sdk/bus/index.ts +341 -38
  148. package/src/sdk/bus/kind-aware-reconciliation.ts +242 -0
  149. package/src/sdk/bus/prompt-reconciliation.ts +2 -1
  150. package/src/sdk/bus/reconciliation-store.ts +224 -0
  151. package/src/sdk/host/control/dispatch.ts +5 -1
  152. package/src/sdk/host/control/operations.ts +1 -1
  153. package/src/sdk/host/host.ts +23 -1
  154. package/src/sdk/host/query/handlers.ts +55 -0
  155. package/src/sdk/mcp/server.ts +46 -18
  156. package/src/sdk/protocol/operation-inventory.generated.json +29 -0
  157. package/src/sdk/protocol/operation-registry.ts +7 -2
  158. package/src/sdk/session.ts +13 -1
  159. package/src/session/agent-session.ts +466 -50
  160. package/src/session/memory-guard-checkpoint-participant.ts +131 -0
  161. package/src/session/session-manager.ts +764 -17
  162. package/src/session/streaming-output.ts +262 -43
  163. package/src/setup/provider-onboarding.ts +19 -4
  164. package/src/skill-state/active-state.ts +0 -10
  165. package/src/skill-state/workflow-hud.ts +25 -2
  166. package/src/skill-state/workflow-mutation-guard.ts +65 -7
  167. package/src/tools/ask.ts +89 -69
  168. package/src/tools/browser/launch.ts +41 -6
  169. package/src/tools/fetch.ts +114 -23
  170. package/src/tools/output-meta.ts +176 -9
  171. package/src/tools/path-utils.ts +5 -1
  172. package/src/tools/read-internals.ts +44 -0
  173. package/src/tools/read.ts +1542 -310
  174. package/src/tools/resource-gc.ts +182 -18
  175. package/src/tools/tool-result.ts +14 -1
  176. package/src/web/search/providers/codex.ts +1 -1
  177. package/dist/types/gjc-runtime/deep-interview-draft.d.ts +0 -8
  178. package/dist/types/gjc-runtime/deep-interview-payload.d.ts +0 -41
  179. package/dist/types/gjc-runtime/deep-interview-repair.d.ts +0 -17
  180. package/src/gjc-runtime/deep-interview-draft.ts +0 -843
  181. package/src/gjc-runtime/deep-interview-payload.ts +0 -262
  182. package/src/gjc-runtime/deep-interview-repair.ts +0 -1674
@@ -301,9 +301,16 @@ export function createSdkMcpServer(options: SdkMcpServerOptions = {}) {
301
301
  export async function runSdkMcpStdio(options: SdkMcpServerOptions = {}): Promise<void> {
302
302
  const server = createSdkMcpServer(options);
303
303
  let buffer = "";
304
+ const inflight = new Set<Promise<void>>();
304
305
  process.stdin.setEncoding("utf8");
305
- await new Promise<void>(resolve => {
306
- process.stdin.on("data", (chunk: string) => {
306
+
307
+ const track = (work: Promise<void>): void => {
308
+ inflight.add(work);
309
+ void work.finally(() => inflight.delete(work));
310
+ };
311
+
312
+ await new Promise<void>((resolve, reject) => {
313
+ const onData = (chunk: string) => {
307
314
  buffer += chunk;
308
315
  let index = buffer.indexOf("\n");
309
316
  while (index >= 0) {
@@ -311,22 +318,43 @@ export async function runSdkMcpStdio(options: SdkMcpServerOptions = {}): Promise
311
318
  buffer = buffer.slice(index + 1);
312
319
  index = buffer.indexOf("\n");
313
320
  if (!line) continue;
314
- void (async () => {
315
- let request: JsonRpcRequest;
316
- try {
317
- request = JSON.parse(line) as JsonRpcRequest;
318
- } catch {
319
- process.stdout.write(
320
- `${JSON.stringify({ jsonrpc: "2.0", id: null, error: { code: -32700, message: "parse_error" } })}\n`,
321
- );
322
- return;
323
- }
324
- const response = await server.handleJsonRpc(request);
325
- // JSON-RPC notifications (no id) receive no response.
326
- if (request.id !== undefined) process.stdout.write(`${JSON.stringify(response)}\n`);
327
- })();
321
+ track(
322
+ (async () => {
323
+ let request: JsonRpcRequest;
324
+ try {
325
+ request = JSON.parse(line) as JsonRpcRequest;
326
+ } catch {
327
+ process.stdout.write(
328
+ `${JSON.stringify({ jsonrpc: "2.0", id: null, error: { code: -32700, message: "parse_error" } })}\n`,
329
+ );
330
+ return;
331
+ }
332
+ const response = await server.handleJsonRpc(request);
333
+ // JSON-RPC notifications (no id) receive no response.
334
+ if (request.id !== undefined) process.stdout.write(`${JSON.stringify(response)}\n`);
335
+ })(),
336
+ );
328
337
  }
329
- });
330
- process.stdin.on("end", () => resolve());
338
+ };
339
+ const onEnd = () => {
340
+ process.stdin.off("data", onData);
341
+ process.stdin.off("end", onEnd);
342
+ process.stdin.off("error", onError);
343
+ resolve();
344
+ };
345
+ const onError = (error: Error) => {
346
+ process.stdin.off("data", onData);
347
+ process.stdin.off("end", onEnd);
348
+ process.stdin.off("error", onError);
349
+ reject(error);
350
+ };
351
+ process.stdin.on("data", onData);
352
+ process.stdin.on("end", onEnd);
353
+ process.stdin.on("error", onError);
331
354
  });
355
+
356
+ // Stdin EOF must not drop in-flight tools/call handlers (WS connect/query).
357
+ // Awaiting them also prevents the process from exiting before responses flush,
358
+ // and lets clients close so the event loop can drain deterministically.
359
+ await Promise.allSettled([...inflight]);
332
360
  }
@@ -1565,6 +1565,24 @@
1565
1565
  "packages/coding-agent/test/sdk-operation-inventory.test.ts"
1566
1566
  ]
1567
1567
  },
1568
+ {
1569
+ "sourceId": "registry:Q28",
1570
+ "sourceFile": "packages/coding-agent/src/sdk/protocol/operation-registry.ts",
1571
+ "sourceKind": "registry",
1572
+ "decision": "include",
1573
+ "sdkId": "skill.invoke_status",
1574
+ "adapterMappings": {
1575
+ "telegram": "prohibited",
1576
+ "discord": "prohibited",
1577
+ "slack": "prohibited",
1578
+ "mcp": "generic_safe",
1579
+ "acp": "generic_safe",
1580
+ "daemonCli": "generic_safe"
1581
+ },
1582
+ "testIds": [
1583
+ "packages/coding-agent/test/sdk-operation-inventory.test.ts"
1584
+ ]
1585
+ },
1568
1586
  {
1569
1587
  "sourceId": "registry:R01",
1570
1588
  "sourceFile": "packages/coding-agent/src/sdk/protocol/operation-registry.ts",
@@ -2903,6 +2921,17 @@
2903
2921
  "testIds": "not_applicable"
2904
2922
  }
2905
2923
  },
2924
+ {
2925
+ "sourceId": "agent_session:restoreFromMemoryGuardCheckpoint",
2926
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
2927
+ "sourceKind": "agent_session",
2928
+ "decision": "exclude",
2929
+ "rationale": "internal owner-recovery staged restore builder after durable claims/fencing, never a user-facing SDK operation",
2930
+ "exclusionMetadata": {
2931
+ "adapterMappings": "not_applicable",
2932
+ "testIds": "not_applicable"
2933
+ }
2934
+ },
2906
2935
  {
2907
2936
  "sourceId": "agent_session:promoteRecoveryHydrationAfterOwnershipReadyFence",
2908
2937
  "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
@@ -160,6 +160,10 @@ const queries = [
160
160
  "Read the authoritative reconciliation status of a submitted prompt by command/turn IDs or clientRef.",
161
161
  ],
162
162
  ["models.profiles.list", "List the effective built-in and configured model profiles for this session."],
163
+ [
164
+ "skill.invoke_status",
165
+ "Read the authoritative reconciliation status of a skill.invoke by command/turn IDs or clientRef.",
166
+ ],
163
167
  ] as const;
164
168
 
165
169
  const reverse = [
@@ -197,7 +201,8 @@ function controlDisposition(id: string): Record<Adapter, AdapterDisposition> {
197
201
 
198
202
  function controlErrors(id: string): string[] {
199
203
  const errors: Record<string, string[]> = {
200
- C01: ["client_ref_conflict", "reconciliation_capacity"],
204
+ C01: ["client_ref_conflict", "reconciliation_capacity", "reconciliation_persist_failed"],
205
+ C09: ["client_ref_conflict", "reconciliation_capacity", "reconciliation_persist_failed"],
201
206
  C06: ["action_claimed"],
202
207
  C07: ["action_claimed", "terminal_uncertain"],
203
208
  C08: ["action_claimed", "terminal_uncertain"],
@@ -238,7 +243,7 @@ function queryContinuityClass(id: string): QueryContinuityClass {
238
243
  }
239
244
 
240
245
  function queryDisposition(id: string): Record<Adapter, AdapterDisposition> {
241
- if (["Q23", "Q24", "Q25", "Q26", "Q27"].includes(id))
246
+ if (["Q23", "Q24", "Q25", "Q26", "Q27", "Q28"].includes(id))
242
247
  return dispositions({ telegram: "prohibited", discord: "prohibited", slack: "prohibited" });
243
248
  return dispositions();
244
249
  }
@@ -21,6 +21,7 @@ import {
21
21
  type ToolResultMessage,
22
22
  } from "@gajae-code/ai";
23
23
  import {
24
+ codexToolWireName,
24
25
  getOpenAICodexTransportDetails,
25
26
  prewarmOpenAICodexResponses,
26
27
  } from "@gajae-code/ai/providers/openai-codex-responses";
@@ -2188,7 +2189,18 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
2188
2189
  const previousPromptMetadataModel = promptMetadataModel;
2189
2190
  promptMetadataModel = candidateModel;
2190
2191
  try {
2191
- return buildSystemPromptToolMetadata(tools);
2192
+ const activeModel = candidateModel ?? agent?.state.model ?? model;
2193
+ // Codex renames reserved tool names on the wire; the prompt must
2194
+ // refer to the tools by the names the model actually receives.
2195
+ const overrides =
2196
+ activeModel?.api === "openai-codex-responses"
2197
+ ? Object.fromEntries(
2198
+ Array.from(tools.keys())
2199
+ .filter(name => codexToolWireName(name) !== name)
2200
+ .map(name => [name, { wireName: codexToolWireName(name) }]),
2201
+ )
2202
+ : {};
2203
+ return buildSystemPromptToolMetadata(tools, overrides);
2192
2204
  } finally {
2193
2205
  promptMetadataModel = previousPromptMetadataModel;
2194
2206
  }