@gajae-code/coding-agent 0.11.11 → 0.12.1

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 (344) hide show
  1. package/CHANGELOG.md +131 -4
  2. package/dist/types/async/job-manager.d.ts +17 -3
  3. package/dist/types/cli/read-cli.d.ts +1 -0
  4. package/dist/types/commands/deep-interview.d.ts +9 -0
  5. package/dist/types/commands/harness.d.ts +22 -0
  6. package/dist/types/commands/read.d.ts +6 -0
  7. package/dist/types/config/model-registry.d.ts +4 -0
  8. package/dist/types/config/provider-auth-health.d.ts +14 -0
  9. package/dist/types/config/provider-ranking.d.ts +59 -0
  10. package/dist/types/config/settings-schema.d.ts +83 -1
  11. package/dist/types/config/settings.d.ts +2 -0
  12. package/dist/types/exa/mcp-client.d.ts +10 -1
  13. package/dist/types/exec/bash-executor.d.ts +45 -12
  14. package/dist/types/extensibility/extensions/types.d.ts +38 -4
  15. package/dist/types/extensibility/gjc-plugins/index.d.ts +12 -2
  16. package/dist/types/extensibility/gjc-plugins/installer.d.ts +63 -7
  17. package/dist/types/extensibility/gjc-plugins/lifecycle-reconciliation.d.ts +55 -0
  18. package/dist/types/extensibility/gjc-plugins/lifecycle.d.ts +64 -0
  19. package/dist/types/extensibility/gjc-plugins/runtime-quarantine.d.ts +67 -0
  20. package/dist/types/extensibility/gjc-plugins/session-validation.d.ts +3 -1
  21. package/dist/types/extensibility/gjc-plugins/types.d.ts +124 -0
  22. package/dist/types/extensibility/shared-events.d.ts +6 -0
  23. package/dist/types/gjc-runtime/deep-interview-ambiguity.d.ts +5 -12
  24. package/dist/types/gjc-runtime/deep-interview-recorder.d.ts +17 -32
  25. package/dist/types/gjc-runtime/deep-interview-stage.d.ts +37 -0
  26. package/dist/types/gjc-runtime/deep-interview-state.d.ts +4 -135
  27. package/dist/types/gjc-runtime/gc-runtime.d.ts +1 -1
  28. package/dist/types/gjc-runtime/launch-tmux.d.ts +1 -0
  29. package/dist/types/gjc-runtime/memory-guard-owner-claims.d.ts +47 -0
  30. package/dist/types/gjc-runtime/ralplan-runtime.d.ts +70 -1
  31. package/dist/types/gjc-runtime/state-writer.d.ts +5 -46
  32. package/dist/types/gjc-runtime/team-launch.d.ts +1 -1
  33. package/dist/types/gjc-runtime/team-runtime.d.ts +27 -1
  34. package/dist/types/gjc-runtime/team-store.d.ts +12 -0
  35. package/dist/types/gjc-runtime/team-worker-heartbeat.d.ts +43 -0
  36. package/dist/types/gjc-runtime/team-worker-memory-guard.d.ts +92 -0
  37. package/dist/types/gjc-runtime/tmux-owner-isolation.d.ts +17 -0
  38. package/dist/types/gjc-runtime/ultragoal-receipt-freshness.d.ts +8 -0
  39. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +31 -80
  40. package/dist/types/gjc-runtime/workflow-manifest.d.ts +3 -5
  41. package/dist/types/internal-urls/local-root-gc.d.ts +2 -0
  42. package/dist/types/main.d.ts +1 -1
  43. package/dist/types/memories/index.d.ts +2 -0
  44. package/dist/types/modes/acp/acp-agent.d.ts +10 -19
  45. package/dist/types/modes/components/assistant-message.d.ts +3 -1
  46. package/dist/types/modes/components/gjc-bundle-settings.d.ts +34 -0
  47. package/dist/types/modes/components/irc-sidebar.d.ts +41 -0
  48. package/dist/types/modes/components/notifications-settings-editor.d.ts +1 -0
  49. package/dist/types/modes/components/read-tool-group.d.ts +4 -4
  50. package/dist/types/modes/components/session-observer-overlay.d.ts +22 -0
  51. package/dist/types/modes/components/settings-selector.d.ts +11 -0
  52. package/dist/types/modes/components/status-line/gh.d.ts +5 -0
  53. package/dist/types/modes/components/tool-execution.d.ts +8 -0
  54. package/dist/types/modes/components/transcript-viewer-overlay.d.ts +18 -1
  55. package/dist/types/modes/controllers/event-controller.d.ts +3 -0
  56. package/dist/types/modes/interactive-mode.d.ts +2 -0
  57. package/dist/types/modes/irc-observation-ledger.d.ts +17 -1
  58. package/dist/types/modes/types.d.ts +2 -0
  59. package/dist/types/modes/utils/ui-helpers.d.ts +16 -0
  60. package/dist/types/reminders/star-reminder.d.ts +3 -13
  61. package/dist/types/runtime-mcp/manager.d.ts +1 -0
  62. package/dist/types/runtime-mcp/smithery-auth.d.ts +5 -0
  63. package/dist/types/sdk/acp/adapter.d.ts +3 -1
  64. package/dist/types/sdk/broker/lifecycle.d.ts +5 -0
  65. package/dist/types/sdk/broker/transport.d.ts +2 -0
  66. package/dist/types/sdk/bus/attachment-registry.d.ts +1 -0
  67. package/dist/types/sdk/bus/chat-daemon-control.d.ts +4 -1
  68. package/dist/types/sdk/bus/config.d.ts +6 -2
  69. package/dist/types/sdk/bus/control-drain-lease.d.ts +52 -0
  70. package/dist/types/sdk/bus/index.d.ts +44 -1
  71. package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +44 -0
  72. package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +4 -0
  73. package/dist/types/sdk/bus/prompt-reconciliation.d.ts +2 -1
  74. package/dist/types/sdk/bus/reconciliation-store.d.ts +69 -0
  75. package/dist/types/sdk/bus/rich-draft.d.ts +1 -0
  76. package/dist/types/sdk/bus/rich-render.d.ts +2 -0
  77. package/dist/types/sdk/bus/telegram-adoption-intent.d.ts +165 -0
  78. package/dist/types/sdk/bus/telegram-cli.d.ts +12 -0
  79. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +11 -4
  80. package/dist/types/sdk/bus/telegram-daemon.d.ts +25 -1
  81. package/dist/types/sdk/bus/telegram-reference.d.ts +11 -1
  82. package/dist/types/sdk/bus/threaded-render.d.ts +3 -2
  83. package/dist/types/sdk/bus/topic-registry.d.ts +11 -1
  84. package/dist/types/sdk/host/control/operations.d.ts +1 -1
  85. package/dist/types/sdk/host/host.d.ts +2 -0
  86. package/dist/types/sdk/host/query/handlers.d.ts +5 -0
  87. package/dist/types/sdk/host/query/revision-store.d.ts +2 -0
  88. package/dist/types/sdk/host/reverse-leases.d.ts +1 -1
  89. package/dist/types/sdk/prompt-status.d.ts +23 -3
  90. package/dist/types/sdk/session.d.ts +6 -0
  91. package/dist/types/session/agent-session.d.ts +82 -12
  92. package/dist/types/session/artifacts.d.ts +8 -0
  93. package/dist/types/session/blob-store.d.ts +57 -4
  94. package/dist/types/session/internal/managed-session-storage.d.ts +8 -1
  95. package/dist/types/session/memory-guard-checkpoint-participant.d.ts +69 -0
  96. package/dist/types/session/session-manager.d.ts +48 -19
  97. package/dist/types/session/session-storage.d.ts +4 -0
  98. package/dist/types/session/streaming-output.d.ts +96 -12
  99. package/dist/types/setup/credential-import.d.ts +12 -0
  100. package/dist/types/skill-state/active-state.d.ts +12 -4
  101. package/dist/types/skill-state/workflow-hud.d.ts +9 -0
  102. package/dist/types/task/executor.d.ts +3 -2
  103. package/dist/types/task/index.d.ts +3 -1
  104. package/dist/types/task/provider-retry-status.d.ts +8 -0
  105. package/dist/types/task/receipt.d.ts +7 -1
  106. package/dist/types/task/types.d.ts +23 -0
  107. package/dist/types/tools/ask-answer-registry.d.ts +2 -2
  108. package/dist/types/tools/bash-interactive.d.ts +4 -1
  109. package/dist/types/tools/bash.d.ts +3 -1
  110. package/dist/types/tools/browser/launch.d.ts +7 -0
  111. package/dist/types/tools/fetch.d.ts +17 -1
  112. package/dist/types/tools/image-gen.d.ts +4 -0
  113. package/dist/types/tools/index.d.ts +4 -0
  114. package/dist/types/tools/output-meta.d.ts +44 -3
  115. package/dist/types/tools/path-utils.d.ts +1 -0
  116. package/dist/types/tools/read-internals.d.ts +12 -0
  117. package/dist/types/tools/read.d.ts +45 -7
  118. package/dist/types/tools/resource-gc.d.ts +4 -0
  119. package/dist/types/tools/review.d.ts +5 -7
  120. package/dist/types/tools/subagent.d.ts +2 -0
  121. package/dist/types/tools/tool-result.d.ts +7 -1
  122. package/dist/types/utils/gh.d.ts +13 -0
  123. package/dist/types/utils/image-resize.d.ts +1 -0
  124. package/dist/types/web/search/providers/kimi.d.ts +2 -0
  125. package/dist/types/web/search/providers/searxng.d.ts +7 -0
  126. package/dist/types/web/search/providers/xai.d.ts +2 -0
  127. package/package.json +11 -13
  128. package/scripts/acp-conformance-agent.ts +218 -0
  129. package/scripts/benchmark-sticky-viewport-pr1.ts +239 -0
  130. package/scripts/capture-gjc-bundle-settings.ts +306 -0
  131. package/scripts/capture-sticky-viewport-showcase.ts +292 -0
  132. package/scripts/generate-sdk-operation-inventory.ts +5 -0
  133. package/scripts/resident-memory-bench.ts +1341 -0
  134. package/scripts/run-acp-conformance.ts +285 -0
  135. package/scripts/verify-gjc-sdk-canonicalization.ts +122 -18
  136. package/scripts/verify-sticky-viewport-showcase.ts +611 -0
  137. package/src/async/job-manager.ts +78 -20
  138. package/src/capability/index.ts +8 -0
  139. package/src/cli/fast-help.ts +1 -1
  140. package/src/cli/plugin-cli.ts +176 -18
  141. package/src/cli/read-cli.ts +2 -1
  142. package/src/cli.ts +1 -0
  143. package/src/commands/deep-interview.ts +29 -9
  144. package/src/commands/harness.ts +35 -12
  145. package/src/commands/read.ts +11 -2
  146. package/src/commands/team.ts +20 -2
  147. package/src/config/file-lock.ts +11 -2
  148. package/src/config/model-registry.ts +21 -2
  149. package/src/config/provider-auth-health.ts +42 -0
  150. package/src/config/provider-ranking.ts +119 -0
  151. package/src/config/settings-schema.ts +74 -1
  152. package/src/config/settings.ts +246 -108
  153. package/src/coordinator-mcp/question-gate-codec.ts +1 -1
  154. package/src/coordinator-mcp/server.ts +5 -12
  155. package/src/defaults/gjc/skills/deep-interview/SKILL.md +230 -82
  156. package/src/defaults/gjc/skills/ralplan/SKILL.md +77 -41
  157. package/src/defaults/gjc/skills/team/SKILL.md +3 -1
  158. package/src/defaults/gjc/skills/ultragoal/SKILL.md +62 -39
  159. package/src/defaults/gjc/skills/ultragoal/validation-batch-contracts.md +12 -0
  160. package/src/defaults/gjc-defaults.ts +4 -4
  161. package/src/eval/py/executor.ts +7 -2
  162. package/src/exa/mcp-client.ts +12 -3
  163. package/src/exec/bash-executor.ts +144 -27
  164. package/src/extensibility/extensions/runner.ts +15 -0
  165. package/src/extensibility/extensions/types.ts +46 -5
  166. package/src/extensibility/gjc-plugins/constrained-hooks.ts +8 -2
  167. package/src/extensibility/gjc-plugins/index.ts +19 -2
  168. package/src/extensibility/gjc-plugins/installer.ts +189 -50
  169. package/src/extensibility/gjc-plugins/lifecycle-reconciliation.ts +199 -0
  170. package/src/extensibility/gjc-plugins/lifecycle.ts +626 -0
  171. package/src/extensibility/gjc-plugins/observability.ts +3 -3
  172. package/src/extensibility/gjc-plugins/prompt-appendix.ts +5 -1
  173. package/src/extensibility/gjc-plugins/runtime-adapters.ts +12 -2
  174. package/src/extensibility/gjc-plugins/runtime-quarantine.ts +121 -0
  175. package/src/extensibility/gjc-plugins/schema.ts +84 -12
  176. package/src/extensibility/gjc-plugins/session-validation.ts +9 -3
  177. package/src/extensibility/gjc-plugins/types.ts +141 -0
  178. package/src/extensibility/gjc-plugins/validation.ts +9 -0
  179. package/src/extensibility/shared-events.ts +5 -0
  180. package/src/gjc-runtime/deep-interview-ambiguity.ts +47 -82
  181. package/src/gjc-runtime/deep-interview-recorder.ts +227 -310
  182. package/src/gjc-runtime/deep-interview-runtime.ts +109 -270
  183. package/src/gjc-runtime/deep-interview-stage.ts +1016 -0
  184. package/src/gjc-runtime/deep-interview-state.ts +12 -943
  185. package/src/gjc-runtime/gc-render.ts +1 -0
  186. package/src/gjc-runtime/gc-runtime.ts +11 -1
  187. package/src/gjc-runtime/launch-tmux.ts +25 -6
  188. package/src/gjc-runtime/managed-owner-admission.ts +1 -1
  189. package/src/gjc-runtime/memory-guard-owner-claims.ts +389 -0
  190. package/src/gjc-runtime/ralplan-runtime.ts +1149 -98
  191. package/src/gjc-runtime/state-runtime.ts +2 -1
  192. package/src/gjc-runtime/state-writer.ts +70 -222
  193. package/src/gjc-runtime/team-launch.ts +42 -5
  194. package/src/gjc-runtime/team-runtime.ts +1085 -40
  195. package/src/gjc-runtime/team-store.ts +32 -0
  196. package/src/gjc-runtime/team-worker-heartbeat.ts +149 -0
  197. package/src/gjc-runtime/team-worker-memory-guard.ts +363 -0
  198. package/src/gjc-runtime/team-workers.ts +1 -0
  199. package/src/gjc-runtime/tmux-owner-isolation.ts +28 -0
  200. package/src/gjc-runtime/tmux-sessions.ts +58 -13
  201. package/src/gjc-runtime/ultragoal-receipt-freshness.ts +20 -0
  202. package/src/gjc-runtime/ultragoal-runtime.ts +414 -618
  203. package/src/gjc-runtime/workflow-manifest.generated.json +105 -449
  204. package/src/gjc-runtime/workflow-manifest.ts +38 -247
  205. package/src/hooks/native-skill-hook.ts +17 -4
  206. package/src/hooks/skill-state.ts +1 -23
  207. package/src/internal-urls/docs-index.generated.ts +21 -22
  208. package/src/internal-urls/local-root-gc.ts +127 -0
  209. package/src/main.ts +9 -5
  210. package/src/memories/index.ts +10 -0
  211. package/src/modes/DESIGN.md +98 -0
  212. package/src/modes/acp/acp-agent.ts +339 -191
  213. package/src/modes/acp/acp-event-mapper.ts +14 -7
  214. package/src/modes/acp/acp-mode.ts +39 -3
  215. package/src/modes/components/assistant-message.ts +123 -22
  216. package/src/modes/components/gjc-bundle-settings.ts +508 -0
  217. package/src/modes/components/irc-sidebar.ts +176 -62
  218. package/src/modes/components/model-selector.ts +61 -4
  219. package/src/modes/components/notifications-settings-editor.ts +12 -1
  220. package/src/modes/components/oauth-selector.ts +96 -28
  221. package/src/modes/components/read-tool-group.ts +82 -14
  222. package/src/modes/components/session-observer-overlay.ts +457 -83
  223. package/src/modes/components/settings-selector.ts +116 -23
  224. package/src/modes/components/status-line/gh.ts +16 -0
  225. package/src/modes/components/tool-execution.ts +138 -27
  226. package/src/modes/components/tool-status-header.ts +3 -14
  227. package/src/modes/components/transcript-viewer-overlay.ts +99 -24
  228. package/src/modes/controllers/command-controller.ts +4 -0
  229. package/src/modes/controllers/event-controller.ts +109 -27
  230. package/src/modes/controllers/extension-ui-controller.ts +26 -2
  231. package/src/modes/controllers/input-controller.ts +18 -3
  232. package/src/modes/controllers/selector-controller.ts +127 -36
  233. package/src/modes/interactive-mode.ts +62 -3
  234. package/src/modes/irc-observation-ledger.ts +71 -15
  235. package/src/modes/runtime-init.ts +22 -2
  236. package/src/modes/types.ts +2 -0
  237. package/src/modes/utils/ui-helpers.ts +94 -1
  238. package/src/prompts/agent-fragments/ralplan-persistence.md +4 -3
  239. package/src/prompts/agents/architect.md +9 -1
  240. package/src/prompts/agents/critic.md +9 -0
  241. package/src/prompts/system/eager-todo.md +8 -4
  242. package/src/prompts/system/system-prompt.md +11 -5
  243. package/src/prompts/tools/bash.md +5 -5
  244. package/src/prompts/tools/read.md +4 -2
  245. package/src/prompts/tools/search-tool-bm25.md +5 -0
  246. package/src/prompts/tools/task.md +1 -1
  247. package/src/reminders/star-reminder.ts +4 -42
  248. package/src/runtime-mcp/manager.ts +19 -4
  249. package/src/runtime-mcp/smithery-auth.ts +17 -2
  250. package/src/runtime-mcp/smithery-connect.ts +11 -1
  251. package/src/sdk/acp/adapter.ts +22 -6
  252. package/src/sdk/broker/lifecycle.ts +25 -6
  253. package/src/sdk/broker/transport.ts +35 -3
  254. package/src/sdk/bus/attachment-registry.ts +5 -1
  255. package/src/sdk/bus/chat-daemon-cli.ts +4 -39
  256. package/src/sdk/bus/chat-daemon-control.ts +6 -3
  257. package/src/sdk/bus/config.ts +18 -2
  258. package/src/sdk/bus/control-drain-lease.ts +104 -0
  259. package/src/sdk/bus/index.ts +984 -146
  260. package/src/sdk/bus/kind-aware-reconciliation.ts +317 -0
  261. package/src/sdk/bus/lifecycle-commands.ts +4 -1
  262. package/src/sdk/bus/lifecycle-control-runtime.ts +403 -88
  263. package/src/sdk/bus/prompt-reconciliation.ts +2 -1
  264. package/src/sdk/bus/reconciliation-store.ts +303 -0
  265. package/src/sdk/bus/rich-draft.ts +1 -1
  266. package/src/sdk/bus/rich-render.ts +2 -2
  267. package/src/sdk/bus/telegram-adoption-intent.ts +574 -0
  268. package/src/sdk/bus/telegram-cli.ts +33 -8
  269. package/src/sdk/bus/telegram-daemon-cli.ts +1 -0
  270. package/src/sdk/bus/telegram-daemon-contract.ts +11 -4
  271. package/src/sdk/bus/telegram-daemon.ts +916 -23
  272. package/src/sdk/bus/telegram-reference.ts +40 -3
  273. package/src/sdk/bus/threaded-render.ts +48 -3
  274. package/src/sdk/bus/topic-registry.ts +20 -0
  275. package/src/sdk/host/control/dispatch.ts +5 -1
  276. package/src/sdk/host/control/operations.ts +1 -1
  277. package/src/sdk/host/host.ts +23 -1
  278. package/src/sdk/host/query/handlers.ts +55 -0
  279. package/src/sdk/host/query/revision-store.ts +36 -2
  280. package/src/sdk/host/reverse-leases.ts +44 -7
  281. package/src/sdk/mcp/server.ts +46 -18
  282. package/src/sdk/prompt-status.ts +16 -3
  283. package/src/sdk/protocol/operation-inventory.generated.json +51 -0
  284. package/src/sdk/protocol/operation-registry.ts +7 -2
  285. package/src/sdk/session.ts +101 -10
  286. package/src/session/agent-session.ts +1286 -220
  287. package/src/session/artifacts.ts +22 -0
  288. package/src/session/auth-broker-config.ts +10 -3
  289. package/src/session/blob-store.ts +915 -24
  290. package/src/session/internal/managed-session-scope.ts +44 -6
  291. package/src/session/internal/managed-session-storage.ts +48 -6
  292. package/src/session/memory-guard-checkpoint-participant.ts +131 -0
  293. package/src/session/session-manager.ts +2364 -438
  294. package/src/session/session-storage.ts +9 -1
  295. package/src/session/streaming-output.ts +500 -111
  296. package/src/setup/credential-import.ts +75 -13
  297. package/src/setup/provider-onboarding.ts +19 -4
  298. package/src/skill-state/active-state.ts +32 -10
  299. package/src/skill-state/workflow-hud.ts +42 -2
  300. package/src/skill-state/workflow-mutation-guard.ts +560 -8
  301. package/src/task/executor.ts +122 -39
  302. package/src/task/index.ts +23 -14
  303. package/src/task/provider-retry-status.ts +16 -0
  304. package/src/task/receipt.ts +23 -7
  305. package/src/task/render.ts +6 -2
  306. package/src/task/types.ts +108 -0
  307. package/src/tools/ask-answer-registry.ts +12 -6
  308. package/src/tools/ask.ts +169 -118
  309. package/src/tools/ast-edit.ts +1 -0
  310. package/src/tools/ast-grep.ts +1 -0
  311. package/src/tools/bash-interactive.ts +8 -3
  312. package/src/tools/bash.ts +503 -60
  313. package/src/tools/browser/launch.ts +41 -6
  314. package/src/tools/fetch.ts +114 -23
  315. package/src/tools/find.ts +1 -0
  316. package/src/tools/image-gen.ts +29 -5
  317. package/src/tools/index.ts +4 -0
  318. package/src/tools/output-meta.ts +281 -20
  319. package/src/tools/path-utils.ts +8 -3
  320. package/src/tools/read-internals.ts +44 -0
  321. package/src/tools/read.ts +1560 -310
  322. package/src/tools/resource-gc.ts +182 -18
  323. package/src/tools/review.ts +5 -7
  324. package/src/tools/search.ts +1 -0
  325. package/src/tools/subagent-render.ts +6 -2
  326. package/src/tools/subagent.ts +6 -0
  327. package/src/tools/telegram-send.ts +6 -3
  328. package/src/tools/tool-result.ts +14 -1
  329. package/src/utils/gh.ts +39 -0
  330. package/src/utils/image-resize.ts +3 -0
  331. package/src/web/search/providers/anthropic.ts +4 -4
  332. package/src/web/search/providers/codex.ts +1 -1
  333. package/src/web/search/providers/kimi.ts +15 -5
  334. package/src/web/search/providers/searxng.ts +47 -4
  335. package/src/web/search/providers/xai.ts +7 -2
  336. package/dist/types/gjc-runtime/deep-interview-draft.d.ts +0 -8
  337. package/dist/types/gjc-runtime/deep-interview-payload.d.ts +0 -41
  338. package/dist/types/gjc-runtime/deep-interview-repair.d.ts +0 -17
  339. package/dist/types/gjc-runtime/ultragoal-pipeline.d.ts +0 -23
  340. package/src/defaults/gjc/skills/ultragoal/pipeline-validation-contracts.md +0 -30
  341. package/src/gjc-runtime/deep-interview-draft.ts +0 -843
  342. package/src/gjc-runtime/deep-interview-payload.ts +0 -262
  343. package/src/gjc-runtime/deep-interview-repair.ts +0 -1674
  344. package/src/gjc-runtime/ultragoal-pipeline.ts +0 -306
@@ -17,8 +17,10 @@
17
17
  * prior outcome unknown — callers MUST NOT reuse a clientRef as a retry
18
18
  * mechanism and MUST treat `unknown` as uncertainty, not proof of
19
19
  * non-execution.
20
- * - The durability floor is the live session process: after restart or
21
- * retained-record eviction, a lookup honestly reports `unknown`.
20
+ * - Prompt records survive process restart: an active prompt is finalized from its
21
+ * durable pending outcome, or as `prompt_failed` when it has none. Only skill
22
+ * records settle as `process_restart`, and a lookup reports `unknown` only after
23
+ * retained-record TTL/capacity eviction.
22
24
  * - Q26 tracks prompts accepted through the SDK control surface (which always
23
25
  * carries a requesting connection); submissions without a delivery owner are
24
26
  * outside the reconciliation contract and hold no reservation.
@@ -38,8 +40,17 @@ export interface TurnPromptInput {
38
40
  clientRef?: string;
39
41
  }
40
42
 
41
- /** Terminal outcome is preserved exactly; active records never age into terminal. */
43
+ /**
44
+ * Terminal outcome is preserved exactly; active records never age into terminal. A
45
+ * prompt that is active at process restart is finalized from its durable pending
46
+ * outcome (or `prompt_failed` when it has none), so it never reports as unknown.
47
+ */
42
48
  export type PromptReconciliationStatus = "accepted" | "in_flight" | "terminal_ok" | "failed";
49
+ export type SdkPromptStopReason = "end_turn" | "max_tokens" | "max_turn_requests" | "refusal" | "cancelled";
50
+ export type SdkPromptFailureCode = "prompt_failed" | "prompt_deadline_exceeded";
51
+ export type SdkPromptTerminalOutcome =
52
+ | { kind: "stopped"; reason: SdkPromptStopReason; provenance: "agent" | "client_cancel" }
53
+ | { kind: "failed"; code: SdkPromptFailureCode; message: string; provenance: "agent_failed" | "deadline" };
43
54
 
44
55
  /** Exactly one selector per lookup. */
45
56
  export type TurnPromptStatusSelector = { clientRef: string } | { commandId: string; turnId: string };
@@ -67,6 +78,7 @@ export interface TurnPromptReconciliationTerminalOk extends TurnPromptReconcilia
67
78
  startedAt?: number;
68
79
  /** Epoch milliseconds of the terminal transition. */
69
80
  terminalAt: number;
81
+ outcome?: SdkPromptTerminalOutcome;
70
82
  }
71
83
 
72
84
  export interface TurnPromptReconciliationFailed extends TurnPromptReconciliationIdentity {
@@ -75,6 +87,7 @@ export interface TurnPromptReconciliationFailed extends TurnPromptReconciliation
75
87
  terminalAt: number;
76
88
  /** Bounded, sanitized failure detail (code safe-token ≤64, message ≤512). */
77
89
  error: { code: string; message: string };
90
+ outcome?: SdkPromptTerminalOutcome;
78
91
  }
79
92
 
80
93
  export interface TurnPromptReconciliationUnknown {
@@ -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",
@@ -3627,6 +3656,17 @@
3627
3656
  "packages/coding-agent/test/sdk-operation-inventory.test.ts"
3628
3657
  ]
3629
3658
  },
3659
+ {
3660
+ "sourceId": "agent_session:abortPromptAndWait",
3661
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
3662
+ "sourceKind": "agent_session",
3663
+ "decision": "exclude",
3664
+ "rationale": "internal SDK prompt-terminalization resource fence over a host-captured run handle, not an independent public SDK control seam",
3665
+ "exclusionMetadata": {
3666
+ "adapterMappings": "not_applicable",
3667
+ "testIds": "not_applicable"
3668
+ }
3669
+ },
3630
3670
  {
3631
3671
  "sourceId": "agent_session:cancelAndSubmit",
3632
3672
  "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
@@ -3823,6 +3863,17 @@
3823
3863
  "testIds": "not_applicable"
3824
3864
  }
3825
3865
  },
3866
+ {
3867
+ "sourceId": "agent_session:resolveConfiguredDefaultModel",
3868
+ "sourceFile": "packages/coding-agent/src/session/agent-session.ts",
3869
+ "sourceKind": "agent_session",
3870
+ "decision": "exclude",
3871
+ "rationale": "internal accessor/plumbing, not a user-facing control seam",
3872
+ "exclusionMetadata": {
3873
+ "adapterMappings": "not_applicable",
3874
+ "testIds": "not_applicable"
3875
+ }
3876
+ },
3826
3877
  {
3827
3878
  "sourceId": "agent_session:recordResumeDefaultModel",
3828
3879
  "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";
@@ -81,11 +82,18 @@ import {
81
82
  import { ExtensionRuntime } from "../extensibility/extensions/loader";
82
83
  import { type ConstrainedPluginHook, loadConstrainedPluginHooks } from "../extensibility/gjc-plugins/constrained-hooks";
83
84
  import { resolveCurrentPhaseForParent } from "../extensibility/gjc-plugins/injection";
85
+ import { currentActivationFingerprint } from "../extensibility/gjc-plugins/lifecycle";
84
86
  import {
85
87
  buildPluginMcpConfigs,
86
88
  loadAlwaysOnPluginTools,
87
89
  renderAlwaysOnSystemAppendices,
88
90
  } from "../extensibility/gjc-plugins/runtime-adapters";
91
+ import {
92
+ GjcRuntimeFindingAccumulator,
93
+ type GjcRuntimeSnapshotProvider,
94
+ GjcRuntimeSnapshotStore,
95
+ gjcActivationGenerationFor,
96
+ } from "../extensibility/gjc-plugins/runtime-quarantine";
89
97
  import { loadActiveSubskillTools } from "../extensibility/gjc-plugins/tools";
90
98
  import { loadSkills, type Skill, type SkillWarning, setActiveSkills } from "../extensibility/skills";
91
99
  import type { FileSlashCommand } from "../extensibility/slash-commands";
@@ -493,6 +501,11 @@ export interface CreateAgentSessionResult {
493
501
  lspServers?: LspStartupServerInfo[];
494
502
  /** Shared event bus for tool/extension communication */
495
503
  eventBus: EventBus;
504
+ /**
505
+ * Read-only view of GJC bundle runtime evidence for the activation generation
506
+ * this session published. Undefined when no GJC bundles participated.
507
+ */
508
+ gjcRuntimeSnapshot?: GjcRuntimeSnapshotProvider;
496
509
  }
497
510
 
498
511
  // Re-exports
@@ -1069,6 +1082,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
1069
1082
  "options.authStorage and options.modelRegistry.authStorage must be the same instance when both are provided",
1070
1083
  );
1071
1084
  }
1085
+
1072
1086
  let agent: Agent;
1073
1087
  let session!: AgentSession;
1074
1088
  let hasSession = false;
@@ -1280,13 +1294,16 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
1280
1294
  );
1281
1295
  let model = options.model;
1282
1296
  let modelFallbackMessage: string | undefined;
1297
+ const resumeModelBehavior = settings.get("session.resumeModelBehavior");
1283
1298
  const persistedDefaultChain = existingSession.configuredModelChains.default?.entries;
1284
1299
  const defaultModelEntries =
1285
- persistedDefaultChain && persistedDefaultChain.length > 0
1286
- ? persistedDefaultChain
1287
- : existingSession.models.default
1288
- ? [existingSession.models.default]
1289
- : [];
1300
+ resumeModelBehavior === "useCurrentDefault"
1301
+ ? []
1302
+ : persistedDefaultChain && persistedDefaultChain.length > 0
1303
+ ? persistedDefaultChain
1304
+ : existingSession.models.default
1305
+ ? [existingSession.models.default]
1306
+ : [];
1290
1307
  // If session has data, restore its configured default chain rather than the
1291
1308
  // scalar runtime model, which may be a stale fallback from the prior run.
1292
1309
  if (!hasExplicitModel && !model && hasExistingSession && defaultModelEntries.length > 0) {
@@ -1615,10 +1632,11 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
1615
1632
 
1616
1633
  // Wire process-wide internal URL singletons owned by their real classes.
1617
1634
  // Top-level sessions install the active snapshots; subagents inherit them.
1618
- // Artifact and agent-output URLs resolve via `AgentRegistry.global()` —
1619
- // the protocol handlers walk each ref's `sessionManager.getArtifactsDir()`,
1620
- // which collapses to the parent's dir for subagents (they adopt the
1621
- // parent's ArtifactManager) so one lookup hits everything.
1635
+ // Artifact and agent-output URLs resolve against explicitly authorized
1636
+ // directories only (see `authorizedArtifactsDirsFromContext`): the
1637
+ // caller's own `sessionManager.getArtifactsDir()` plus, when this session
1638
+ // adopted a shared `ArtifactManager` (subagent tree membership),
1639
+ // `getAuthorizedArtifactsDirs` below. There is no registry-wide lookup.
1622
1640
  const getArtifactsDir = () => sessionManager.getArtifactsDir();
1623
1641
  const localProtocolOptions = options.localProtocolOptions ?? {
1624
1642
  getArtifactsDir,
@@ -1636,6 +1654,10 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
1636
1654
  disposeLocalProtocolOverride = LocalProtocolHandler.installOverride(options.localProtocolOptions);
1637
1655
  }
1638
1656
  toolSession.getArtifactsDir = getArtifactsDir;
1657
+ toolSession.getAuthorizedArtifactsDirs = () => {
1658
+ const manager = sessionManager.getArtifactManager();
1659
+ return manager ? [manager.dir] : [];
1660
+ };
1639
1661
  toolSession.agentOutputManager = new AgentOutputManager(
1640
1662
  getArtifactsDir,
1641
1663
  options.parentTaskPrefix ? { parentPrefix: options.parentTaskPrefix } : undefined,
@@ -1708,6 +1730,23 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
1708
1730
  }
1709
1731
  }
1710
1732
 
1733
+ // GJC bundle runtime evidence for this activation. Producers below return
1734
+ // findings into this caller-owned accumulator and never publish; exactly one
1735
+ // complete snapshot is published once every producer has run.
1736
+ const gjcRuntimeStore = new GjcRuntimeSnapshotStore();
1737
+ let gjcProducersComplete = true;
1738
+ let gjcActivationGeneration = 0;
1739
+ try {
1740
+ gjcActivationGeneration = gjcActivationGenerationFor(await currentActivationFingerprint({ cwd }));
1741
+ } catch (error) {
1742
+ // Without a readable activation generation no snapshot can be proven
1743
+ // current, so publish nothing rather than a snapshot consumers cannot
1744
+ // validate against.
1745
+ gjcProducersComplete = false;
1746
+ logger.warn("Failed to derive GJC bundle activation generation", { error });
1747
+ }
1748
+ const gjcFindings = new GjcRuntimeFindingAccumulator(gjcActivationGeneration);
1749
+
1711
1750
  // Always-on GJC plugin bundle tools (validated registry surfaces). This is
1712
1751
  // additive and a no-op when no plugins are installed for the cwd. Surfaces
1713
1752
  // are hash-verified and collision-checked; declared names are authoritative.
@@ -1718,9 +1757,11 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
1718
1757
  });
1719
1758
  if (pluginToolResult.tools.length > 0) customTools.push(...pluginToolResult.tools);
1720
1759
  for (const q of pluginToolResult.quarantine) {
1760
+ gjcFindings.add({ identity: q.identity, surfaceId: q.surfaceId, code: q.code, message: q.message });
1721
1761
  logger.warn("Quarantined GJC plugin surface", { plugin: q.plugin, surface: q.surfaceId, code: q.code });
1722
1762
  }
1723
1763
  } catch (error) {
1764
+ gjcProducersComplete = false;
1724
1765
  logger.warn("Failed to load always-on GJC plugin tools", { error });
1725
1766
  }
1726
1767
 
@@ -1752,6 +1793,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
1752
1793
  try {
1753
1794
  const { configs, quarantine } = await buildPluginMcpConfigs({ cwd });
1754
1795
  for (const q of quarantine) {
1796
+ gjcFindings.add({ identity: q.identity, surfaceId: q.surfaceId, code: q.code, message: q.message });
1755
1797
  logger.warn("Quarantined GJC plugin MCP", { plugin: q.plugin, surface: q.surfaceId, code: q.code });
1756
1798
  }
1757
1799
  if (Object.keys(configs).length > 0) {
@@ -1765,6 +1807,10 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
1765
1807
  );
1766
1808
  const result = await owned.connectServers(configs, sources as never);
1767
1809
  for (const [server, err] of result.errors) {
1810
+ // A server that failed to connect leaves this generation
1811
+ // incomplete: its surfaces produced no evidence, so publishing
1812
+ // would present a partial pass as a clear one.
1813
+ gjcProducersComplete = false;
1768
1814
  logger.warn("GJC plugin MCP connect failed", { path: `mcp:${server}`, error: err });
1769
1815
  }
1770
1816
  if (result.connectedServers.length > 0) {
@@ -1784,6 +1830,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
1784
1830
  }
1785
1831
  }
1786
1832
  } catch (error) {
1833
+ gjcProducersComplete = false;
1787
1834
  logger.warn("Failed to wire GJC plugin MCP servers", { error });
1788
1835
  }
1789
1836
  } else if (isCanonicalSubSession) {
@@ -1833,11 +1880,14 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
1833
1880
  inlineExtensions.push(createPluginHooksExtension(pluginHookResult.hooks));
1834
1881
  }
1835
1882
  for (const q of pluginHookResult.quarantine) {
1883
+ gjcFindings.add({ identity: q.identity, surfaceId: q.surfaceId, code: q.code, message: q.message });
1836
1884
  logger.warn("Quarantined GJC plugin hook", { plugin: q.plugin, surface: q.surfaceId, code: q.code });
1837
1885
  }
1838
1886
  } catch (error) {
1887
+ gjcProducersComplete = false;
1839
1888
  logger.warn("Failed to load constrained GJC plugin hooks", { error });
1840
1889
  }
1890
+
1841
1891
  let notificationCfg: NotificationConfig | undefined;
1842
1892
  try {
1843
1893
  notificationCfg = getNotificationConfig(settings);
@@ -2183,12 +2233,32 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
2183
2233
  tools: Map<string, AgentTool>,
2184
2234
  candidateModel?: Model,
2185
2235
  ): Promise<BuildSystemPromptResult> => {
2236
+ // This callback is reused for later prompt/tool/model rebuilds. Retire
2237
+ // the previous generation's evidence up front: from here until a
2238
+ // complete pass republishes, consumers must read `unavailable` rather
2239
+ // than a snapshot describing a generation that no longer applies.
2240
+ // Invalidating at entry (not beside the publish) means an await or a
2241
+ // throw in between cannot leave stale evidence readable. The reserved
2242
+ // epoch additionally fences overlapping rebuilds, so a slower earlier
2243
+ // pass cannot publish over a newer one.
2244
+ const gjcPassEpoch = gjcRuntimeStore.beginPass();
2186
2245
  toolContextStore.setToolNames(toolNames);
2187
2246
  const promptTools = (() => {
2188
2247
  const previousPromptMetadataModel = promptMetadataModel;
2189
2248
  promptMetadataModel = candidateModel;
2190
2249
  try {
2191
- return buildSystemPromptToolMetadata(tools);
2250
+ const activeModel = candidateModel ?? agent?.state.model ?? model;
2251
+ // Codex renames reserved tool names on the wire; the prompt must
2252
+ // refer to the tools by the names the model actually receives.
2253
+ const overrides =
2254
+ activeModel?.api === "openai-codex-responses"
2255
+ ? Object.fromEntries(
2256
+ Array.from(tools.keys())
2257
+ .filter(name => codexToolWireName(name) !== name)
2258
+ .map(name => [name, { wireName: codexToolWireName(name) }]),
2259
+ )
2260
+ : {};
2261
+ return buildSystemPromptToolMetadata(tools, overrides);
2192
2262
  } finally {
2193
2263
  promptMetadataModel = previousPromptMetadataModel;
2194
2264
  }
@@ -2204,8 +2274,17 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
2204
2274
  try {
2205
2275
  pluginSystemAppendices = await renderAlwaysOnSystemAppendices({ cwd });
2206
2276
  } catch (error) {
2277
+ gjcProducersComplete = false;
2207
2278
  logger.warn("Failed to render GJC plugin system appendices", { error });
2208
2279
  }
2280
+
2281
+ // Publication point for GJC bundle runtime evidence. Appendix rendering
2282
+ // is the last producer, so only here is the generation complete.
2283
+ //
2284
+ // The previous generation was already retired at callback entry, so a
2285
+ // partial pass simply never republishes and consumers keep reading
2286
+ // `unavailable` rather than a stale generation.
2287
+ if (gjcProducersComplete) gjcRuntimeStore.publish(gjcFindings.snapshot(), gjcPassEpoch);
2209
2288
  const defaultPrompt = await buildSystemPromptInternal({
2210
2289
  cwd,
2211
2290
  skills,
@@ -2352,6 +2431,9 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
2352
2431
  (options.alwaysActiveToolNames ?? []).map(name => name.toLowerCase()),
2353
2432
  );
2354
2433
  const essentialBuiltinNames = new Set(computeEssentialBuiltinNames(settings));
2434
+ // `task.eager` promises delegation preference. In discovery mode the task tool
2435
+ // would otherwise be hidden, making the matching prompt instruction unreachable.
2436
+ if (eagerTasks) essentialBuiltinNames.add("task");
2355
2437
  const allowedDiscoveredBuiltinNames = options.discoverableToolAllowedNames
2356
2438
  ? new Set(options.discoverableToolAllowedNames.map(name => name.toLowerCase()))
2357
2439
  : undefined;
@@ -2556,6 +2638,9 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
2556
2638
  maxRetryDelayMs: retrySettings.maxDelayMs,
2557
2639
  requestMaxRetries: retrySettings.requestMaxRetries,
2558
2640
  streamMaxRetries: retrySettings.streamMaxRetries,
2641
+ streamFirstEventTimeoutMs: settings.has("retry.streamFirstEventTimeoutMs")
2642
+ ? retrySettings.streamFirstEventTimeoutMs
2643
+ : undefined,
2559
2644
  kimiApiFormat: settings.get("providers.kimiApiFormat") ?? "anthropic",
2560
2645
  shouldPause: options.shouldPause,
2561
2646
  preferWebsockets: preferOpenAICodexWebsockets,
@@ -2841,6 +2926,11 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
2841
2926
  // microtask (the ToolSession closure needs `session` assigned). Await it
2842
2927
  // so a resumed canonical workflow session returns with `ask` resident.
2843
2928
  await session.workflowGateToolRestoration;
2929
+ // Expose the published evidence on the session itself so UI surfaces that
2930
+ // only hold a session (Settings) can consume it without threading the
2931
+ // creation result through every controller.
2932
+ session.gjcRuntimeSnapshot = gjcRuntimeStore;
2933
+ session.gjcActivationGeneration = gjcActivationGeneration;
2844
2934
  return {
2845
2935
  session,
2846
2936
  extensionsResult,
@@ -2849,6 +2939,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
2849
2939
  modelFallbackMessage,
2850
2940
  lspServers,
2851
2941
  eventBus,
2942
+ gjcRuntimeSnapshot: gjcRuntimeStore,
2852
2943
  };
2853
2944
  } catch (error) {
2854
2945
  // Release the subscription if the throw happened after install but before the