@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
@@ -186,6 +186,7 @@ export interface WorkerHeartbeatFile {
186
186
  last_turn_at: string;
187
187
  turn_count: number;
188
188
  alive: boolean;
189
+ process_start_time?: string;
189
190
  }
190
191
  export interface GjcWorkerIntegrationAttemptRequestResult {
191
192
  requested: boolean;
@@ -199,7 +200,14 @@ export interface GjcWorkerIntegrationAttemptRequestResult {
199
200
  export interface GjcWorkerIntegrationAttemptOptions {
200
201
  signal?: AbortSignal;
201
202
  }
202
- export declare const GJC_TEAM_API_OPERATIONS: readonly ["send-message", "broadcast", "mailbox-list", "mailbox-mark-delivered", "mailbox-mark-notified", "notification-list", "notification-read", "notification-replay", "notification-mark-pane-attempt", "worker-startup-ack", "create-task", "read-task", "list-tasks", "update-task", "claim-task", "transition-task-status", "transition-task", "release-task-claim", "read-config", "read-manifest", "read-worker-status", "update-worker-status", "read-worker-heartbeat", "recover-stale-claims", "update-worker-heartbeat", "write-worker-inbox", "write-worker-identity", "append-event", "read-events", "read-traces", "await-event", "write-shutdown-request", "read-shutdown-ack", "read-monitor-snapshot", "write-monitor-snapshot", "read-task-approval", "write-task-approval"];
203
+ export declare const GJC_TEAM_API_OPERATIONS: readonly ["send-message", "broadcast", "mailbox-list", "mailbox-mark-delivered", "mailbox-mark-notified", "notification-list", "notification-read", "notification-replay", "notification-mark-pane-attempt", "worker-startup-ack", "create-task", "read-task", "list-tasks", "update-task", "claim-task", "transition-task-status", "transition-task", "release-task-claim", "read-config", "read-manifest", "read-worker-status", "update-worker-status", "read-worker-heartbeat", "recover-stale-claims", "update-worker-heartbeat", "read-worker-memory-guard", "update-worker-memory-guard", "apply-worker-memory-guard", "write-worker-inbox", "write-worker-identity", "append-event", "read-events", "read-traces", "await-event", "write-shutdown-request", "read-shutdown-ack", "read-monitor-snapshot", "write-monitor-snapshot", "read-task-approval", "write-task-approval"];
204
+ export type GjcTeamApiOperation = (typeof GJC_TEAM_API_OPERATIONS)[number];
205
+ export declare class UnknownGjcTeamApiOperationError extends Error {
206
+ readonly code = "unknown_team_api_operation";
207
+ readonly operation: string;
208
+ readonly suggestions: readonly string[];
209
+ constructor(operation: string, suggestions: readonly string[]);
210
+ }
203
211
  export interface GjcTeamRuntimeTestSeams {
204
212
  nowMs?: () => number;
205
213
  continuationTmuxDispatch?: (command: string, args: readonly string[]) => {
@@ -224,6 +232,16 @@ export declare function resolveWorkerWorktreePath(input: {
224
232
  platform: NodeJS.Platform;
225
233
  isPsmux: boolean;
226
234
  }): string;
235
+ /**
236
+ * Check whether the current process can launch a team without changing tmux state.
237
+ * Unlike the launch path, this never adopts or tags an unmanaged tmux session.
238
+ */
239
+ export declare function probeGjcTeamAvailability(env?: NodeJS.ProcessEnv): {
240
+ available: true;
241
+ } | {
242
+ available: false;
243
+ reason: string;
244
+ };
227
245
  export declare function resolveGjcWorkerCommand(cwd?: string, env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform, argv?: string[], execPath?: string): string;
228
246
  export { buildWorkerCommand } from "./team-launch";
229
247
  export type GjcWorkerCheckpointClassification = {
@@ -256,6 +274,8 @@ export declare function requestGjcWorkerIntegrationAttempt(cwd?: string, env?: N
256
274
  export declare function buildTeamHudSummary(snapshot: GjcTeamSnapshot, latestEvent?: GjcTeamEvent, latestMessage?: GjcTeamMailboxMessage): Promise<WorkflowHudSummary>;
257
275
  export declare function monitorGjcTeam(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamSnapshot>;
258
276
  export declare function listGjcTeams(cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamSnapshot[]>;
277
+ /** Positive stale windows are clamped so a worker can publish strictly before expiry. */
278
+ export declare function parseHeartbeatStaleMs(env: NodeJS.ProcessEnv): number;
259
279
  export declare function shutdownGjcTeam(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamSnapshot>;
260
280
  export declare function listGjcTeamTasks(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamTask[]>;
261
281
  export declare function readGjcTeamTask(teamName: string, taskId: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamTask>;
@@ -277,6 +297,12 @@ export declare const readGjcWorkerStatus: (teamName: string, worker: string, cwd
277
297
  export declare function updateGjcWorkerStatus(teamName: string, worker: string, status: GjcWorkerStatusState, cwd?: string, env?: NodeJS.ProcessEnv, currentTaskId?: string, reason?: string): Promise<WorkerStatusFile>;
278
298
  export declare const readGjcWorkerHeartbeat: (teamName: string, worker: string, cwd?: string, env?: NodeJS.ProcessEnv) => Promise<WorkerHeartbeatFile | null>;
279
299
  export declare function updateGjcWorkerHeartbeat(teamName: string, worker: string, heartbeat: WorkerHeartbeatFile, cwd?: string, env?: NodeJS.ProcessEnv): Promise<WorkerHeartbeatFile>;
300
+ /**
301
+ * Refresh liveness without discarding metadata written by other heartbeat
302
+ * producers. The read/merge/write sequence shares the team mutation fence with
303
+ * CLI heartbeat updates, so a runtime tick cannot overwrite a newer turn count.
304
+ */
305
+ export declare function refreshGjcWorkerHeartbeat(teamName: string, worker: string, pid: number, cwd?: string, env?: NodeJS.ProcessEnv): Promise<WorkerHeartbeatFile>;
280
306
  export declare function writeGjcWorkerInbox(teamName: string, worker: string, content: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<{
281
307
  path: string;
282
308
  }>;
@@ -107,6 +107,18 @@ export interface GjcTeamApiClaimResult {
107
107
  claim_token?: string;
108
108
  reason?: string;
109
109
  }
110
+ export type GjcTeamWorkerClaimSelection = {
111
+ kind: "none";
112
+ } | {
113
+ kind: "exact";
114
+ task: GjcTeamTask;
115
+ claim: GjcTeamTaskClaim;
116
+ } | {
117
+ kind: "ambiguous";
118
+ tasks: GjcTeamTask[];
119
+ };
120
+ export declare function selectCurrentClaimedTaskForWorker(tasks: readonly GjcTeamTask[], workerId: string): GjcTeamWorkerClaimSelection;
121
+ export declare function findGjcTeamClaimedTaskForWorker(tasks: readonly GjcTeamTask[], workerId: string): GjcTeamTask | undefined;
110
122
  type EventAppender = (event: {
111
123
  type: string;
112
124
  task_id?: string;
@@ -0,0 +1,43 @@
1
+ import { type WorkerHeartbeatFile } from "./team-runtime";
2
+ export interface GjcTeamWorkerIdentity {
3
+ teamName: string;
4
+ workerId: string;
5
+ }
6
+ /** Resolves the team identity injected into a worker pane by `gjc team` startup. */
7
+ export declare function resolveGjcTeamWorkerIdentity(env?: NodeJS.ProcessEnv): GjcTeamWorkerIdentity | undefined;
8
+ /** Refresh cadence derived from the leader's stale window; `0` disables publishing. */
9
+ export declare function resolveGjcTeamWorkerHeartbeatIntervalMs(env?: NodeJS.ProcessEnv): number;
10
+ /**
11
+ * Publish one runtime-owned heartbeat for the worker this process is running as.
12
+ * Returns `undefined` when the process is not a team worker.
13
+ *
14
+ * `turn_count` and process-incarnation metadata are merged under the same
15
+ * mutation fence used by CLI heartbeat updates.
16
+ */
17
+ export declare function writeGjcTeamWorkerRuntimeHeartbeat(cwd?: string, env?: NodeJS.ProcessEnv): Promise<WorkerHeartbeatFile | undefined>;
18
+ export interface GjcTeamWorkerHeartbeatReporterOptions {
19
+ write: () => Promise<void>;
20
+ intervalMs: number;
21
+ }
22
+ /**
23
+ * Publishes a worker heartbeat while a turn is in flight.
24
+ *
25
+ * Writes never overlap; a slow or failing write is logged and skipped rather
26
+ * than queued, because only the most recent record matters. The timer is
27
+ * unreferenced so it can never hold the process open.
28
+ */
29
+ export declare class GjcTeamWorkerHeartbeatReporter {
30
+ #private;
31
+ constructor(options: GjcTeamWorkerHeartbeatReporterOptions);
32
+ /** Reporter for the current process, or `undefined` when it is not a team worker. */
33
+ static forProcess(cwd: () => string, env?: NodeJS.ProcessEnv): GjcTeamWorkerHeartbeatReporter | undefined;
34
+ get isRunning(): boolean;
35
+ /** Publish immediately, then keep publishing until {@link stop} or {@link dispose}. */
36
+ start(): void;
37
+ /** Stop periodic publishing after one final record, so the idle stamp is fresh. */
38
+ stop(): void;
39
+ /** Await the write in flight, if any. */
40
+ flush(): Promise<void>;
41
+ /** Permanently stop publishing. Idempotent. */
42
+ dispose(): void;
43
+ }
@@ -0,0 +1,92 @@
1
+ import { type StateWriterOptions } from "./state-writer";
2
+ export type GjcTeamWorkerMemoryGuardState = "idle" | "advisory" | "retrying" | "checkpointed" | "replaced" | "blocked";
3
+ export type GjcTeamWorkerMemoryGuardCheckpointKind = "clean" | "eligible" | "protected_only" | "conflicted" | "git_error";
4
+ export type GjcTeamWorkerMemoryGuardPidProbe = {
5
+ kind: "live";
6
+ start_time: string;
7
+ } | {
8
+ kind: "absent";
9
+ } | {
10
+ kind: "unverifiable";
11
+ reason: string;
12
+ };
13
+ export interface GjcTeamWorkerMemoryGuardCheckpoint {
14
+ kind: GjcTeamWorkerMemoryGuardCheckpointKind;
15
+ files: string[];
16
+ head?: string | null;
17
+ commit?: string | null;
18
+ recorded_at: string;
19
+ }
20
+ export interface GjcTeamWorkerMemoryGuardReplacement {
21
+ old_pane_id?: string;
22
+ new_pane_id?: string;
23
+ recorded_at: string;
24
+ }
25
+ export interface GjcTeamWorkerMemoryGuardLedger {
26
+ schema_version: 1;
27
+ worker_id: string;
28
+ platform: string;
29
+ state: GjcTeamWorkerMemoryGuardState;
30
+ automatic_action_allowed: boolean;
31
+ retry_count: number;
32
+ retry_limit: number;
33
+ current_task_id?: string;
34
+ last_incident_id?: string;
35
+ last_reason?: string;
36
+ last_pid_probe?: GjcTeamWorkerMemoryGuardPidProbe;
37
+ last_checkpoint?: GjcTeamWorkerMemoryGuardCheckpoint;
38
+ last_replacement?: GjcTeamWorkerMemoryGuardReplacement;
39
+ updated_at: string;
40
+ }
41
+ export interface GjcTeamWorkerMemoryGuardSelectionCandidate {
42
+ worker_id: string;
43
+ platform: string;
44
+ excess_bytes: number;
45
+ retry_count: number;
46
+ retry_limit: number;
47
+ blocked?: boolean;
48
+ current_task_id?: string;
49
+ }
50
+ export interface GjcTeamWorkerMemoryGuardSelection {
51
+ worker_id: string;
52
+ excess_bytes: number;
53
+ retry_count: number;
54
+ current_task_id?: string;
55
+ }
56
+ export declare function workerMemoryGuardLedgerPath(dir: string, workerId: string): string;
57
+ export declare function normalizeGjcTeamWorkerMemoryGuardPidProbe(value: unknown): GjcTeamWorkerMemoryGuardPidProbe | undefined;
58
+ export declare function isCanonicalGjcTeamWorkerMemoryGuardCheckpoint(value: unknown): value is GjcTeamWorkerMemoryGuardCheckpoint;
59
+ export declare function isCanonicalGjcTeamWorkerMemoryGuardReplacement(value: unknown): value is GjcTeamWorkerMemoryGuardReplacement;
60
+ export declare function isCanonicalGjcTeamWorkerMemoryGuardPidProbe(value: unknown): value is GjcTeamWorkerMemoryGuardPidProbe;
61
+ export declare function isCanonicalGjcTeamWorkerMemoryGuardLedger(value: unknown): value is GjcTeamWorkerMemoryGuardLedger;
62
+ export declare function createInitialGjcTeamWorkerMemoryGuardLedger(input: {
63
+ workerId: string;
64
+ platform: string;
65
+ now: string;
66
+ retryLimit?: number;
67
+ }): GjcTeamWorkerMemoryGuardLedger;
68
+ export declare function selectGjcTeamWorkerMemoryGuardCandidate(candidates: readonly GjcTeamWorkerMemoryGuardSelectionCandidate[]): GjcTeamWorkerMemoryGuardSelection | undefined;
69
+ export type TeamWorkerMemoryGuardAction = "advisory" | "replace" | "blocked";
70
+ export type TeamWorkerMemoryGuardResult = "noop" | "scheduled" | "succeeded" | "failed" | "blocked";
71
+ export interface TeamWorkerMemoryGuardLedgerEntry {
72
+ schema_version: 1;
73
+ recorded_at: string;
74
+ incident_id: string;
75
+ team_name: string;
76
+ worker_id: string;
77
+ task_id: string;
78
+ claim_token: string;
79
+ attempt: number;
80
+ platform: NodeJS.Platform;
81
+ action: TeamWorkerMemoryGuardAction;
82
+ result: TeamWorkerMemoryGuardResult;
83
+ reason: string;
84
+ }
85
+ export declare function isCanonicalTeamWorkerMemoryGuardLedgerEntry(value: unknown): value is TeamWorkerMemoryGuardLedgerEntry;
86
+ export declare function teamWorkerMemoryGuardDir(workerDirPath: string): string;
87
+ export declare function teamWorkerMemoryGuardLedgerPath(workerDirPath: string): string;
88
+ export declare function canMutateTeamWorkerMemoryGuard(platform: NodeJS.Platform): boolean;
89
+ export declare function advisoryReasonForTeamWorkerMemoryGuard(platform: NodeJS.Platform): string | undefined;
90
+ export declare function appendTeamWorkerMemoryGuardLedgerEntry(workerDirPath: string, entry: TeamWorkerMemoryGuardLedgerEntry, options?: StateWriterOptions): Promise<string>;
91
+ export declare function readTeamWorkerMemoryGuardLedger(workerDirPath: string): Promise<TeamWorkerMemoryGuardLedgerEntry[]>;
92
+ export declare function nextTeamWorkerMemoryGuardAttempt(entries: readonly TeamWorkerMemoryGuardLedgerEntry[], incidentId: string): number;
@@ -31,6 +31,16 @@ export interface TmuxServerProof {
31
31
  startTime?: string;
32
32
  cgroup?: CgroupInfo;
33
33
  sessionNames?: string[];
34
+ /**
35
+ * Whether `pid` is kernel-proved evidence about the live tmux server.
36
+ *
37
+ * Only Linux can prove a server PID (`/proc` + cgroup classification), so
38
+ * probes on other platforms may report a placeholder PID with this flag set
39
+ * to `false`. Guards must not build a `#{pid}` predicate from an unproven
40
+ * PID: no live tmux server can ever satisfy it. Omitted means proven, which
41
+ * keeps every probe that reads a real `#{pid}` unchanged.
42
+ */
43
+ pidProven?: boolean;
34
44
  }
35
45
  export interface PlanRequest {
36
46
  schema_version: 1;
@@ -267,6 +277,13 @@ export interface LifecyclePaths {
267
277
  journalFile: string;
268
278
  }
269
279
  export declare function lifecyclePaths(stateDir: string, sessionId: string, generation: string): LifecyclePaths;
280
+ export interface MemoryGuardClaimPaths {
281
+ root: string;
282
+ databaseFile: string;
283
+ walFile: string;
284
+ shmFile: string;
285
+ }
286
+ export declare function memoryGuardClaimPaths(stateDir: string, sessionId: string): MemoryGuardClaimPaths;
270
287
  export declare function replaceOwnerGeneration(stateDir: string, sessionId: string, generation?: string, expectedBaseline?: OwnerGenerationBaseline): Promise<string>;
271
288
  export type OwnerGenerationBaseline = {
272
289
  state: "absent";
@@ -39,6 +39,14 @@ export declare function computeUltragoalPlanGeneration(input: {
39
39
  basis: UltragoalCompletionVerification["basis"];
40
40
  };
41
41
  export declare function findLedgerReceiptEvent(ledger: readonly UltragoalLedgerEvent[], receipt: UltragoalCompletionVerification): UltragoalLedgerEvent | null;
42
+ /**
43
+ * A final-aggregate receipt whose recorded ledger checkpoint quality gate is
44
+ * missing a clean `criticReview` OKAY can never satisfy the completion guard,
45
+ * yet is not "stale" under {@link validateReceiptFreshBase}. Detect it so an
46
+ * identical-evidence complete replay can re-verify and re-mint with a
47
+ * corrected gate instead of no-opping into a permanently blocked run.
48
+ */
49
+ export declare function finalAggregateReceiptMissingCriticOkay(ledger: readonly UltragoalLedgerEvent[], receipt: UltragoalCompletionVerification): boolean;
42
50
  export declare function validateReceiptFreshBase(input: {
43
51
  plan: UltragoalPlan;
44
52
  ledger: readonly UltragoalLedgerEvent[];
@@ -5,37 +5,6 @@ export { CRITIC_GATE_HARD_STOP_EVENT, CRITIC_GATE_OVERRIDE_EVENT, CRITIC_VERDICT
5
5
  export { captureUltragoalRecoverySnapshot, parseStrictTerminalTranscript, persistUltragoalRecoveryDecision, planUltragoalOwnerLossRecovery, type UltragoalOwnerLossReceipt, type UltragoalRecoveryBinding, type UltragoalRecoveryDecision, type UltragoalRecoverySnapshot, validateOwnerLossBinding, validateRawUltragoalEvidence, validateRecoveryAdmission, validateRecoveryPath, } from "./ultragoal-owner-loss-recovery";
6
6
  export type UltragoalGjcGoalMode = "aggregate" | "per-story";
7
7
  export type UltragoalGoalStatus = "pending" | "active" | "complete" | "failed" | "blocked" | "review_blocked" | "superseded";
8
- export type UltragoalPipelineMetadataSource = "original_plan_graph" | "legacy_brief_only" | "steering";
9
- export type UltragoalPipelineOverlapState = "none" | "open" | "joined_clean" | "blocked_disjoint_continue" | "quarantine_required" | "rebaseline_complete";
10
- export interface UltragoalPipelineTargets extends JsonObject {
11
- files: string[];
12
- surfaces: string[];
13
- }
14
- export interface UltragoalPipelineMetadata extends JsonObject {
15
- schemaVersion: 1;
16
- goalId: string;
17
- source: UltragoalPipelineMetadataSource;
18
- eligible: boolean;
19
- dependsOn: string[];
20
- independentOf: string[];
21
- targets: UltragoalPipelineTargets;
22
- metadataHash: string;
23
- overlap: UltragoalPipelineOverlapState;
24
- overlapId?: string;
25
- priorGoalId?: string;
26
- nextGoalId?: string;
27
- blockerFootprints?: UltragoalPipelineTargets[];
28
- invalidationReason?: string;
29
- invalidatedAt?: string;
30
- }
31
- export interface UltragoalGoalMetadataInput {
32
- schemaVersion: 1;
33
- goalId: string;
34
- source: UltragoalPipelineMetadataSource;
35
- dependsOn?: string[];
36
- independentOf?: string[];
37
- targets?: Partial<UltragoalPipelineTargets>;
38
- }
39
8
  export interface UltragoalValidationBatchMetadata extends JsonObject {
40
9
  schemaVersion: 1;
41
10
  batchId: string;
@@ -50,31 +19,6 @@ export interface UltragoalValidationBatchInput {
50
19
  memberIds: string[];
51
20
  finalGoalId: string;
52
21
  }
53
- export interface UltragoalPipelineOverlapHandles extends JsonObject {
54
- review: JsonObject;
55
- qa: JsonObject;
56
- implementation: JsonObject;
57
- }
58
- export interface UltragoalPipelineOverlapReceipt extends JsonObject {
59
- ok: true;
60
- event: string;
61
- overlap_id: string;
62
- prior_goal_id: string;
63
- next_goal_id?: string;
64
- goal_id?: string;
65
- status?: UltragoalPipelineOverlapState;
66
- next_goal_status?: UltragoalGoalStatus;
67
- goals_path: string;
68
- ledger_path: string;
69
- }
70
- export type UltragoalPipelineLedgerEventName = "pipeline_overlap_started" | "pipeline_overlap_joined" | "pipeline_overlap_blocked" | "pipeline_overlap_quarantined" | "pipeline_overlap_rebaselined";
71
- export interface UltragoalPipelineLedgerEvent extends UltragoalLedgerEvent {
72
- event: UltragoalPipelineLedgerEventName;
73
- schemaVersion: 1;
74
- overlapId: string;
75
- priorGoalId: string;
76
- nextGoalId: string;
77
- }
78
22
  export interface UltragoalGoal {
79
23
  id: string;
80
24
  title: string;
@@ -87,7 +31,6 @@ export interface UltragoalGoal {
87
31
  evidence?: string;
88
32
  steering?: Record<string, unknown>;
89
33
  completionVerification?: UltragoalCompletionVerification;
90
- pipelineMetadata?: UltragoalPipelineMetadata;
91
34
  validationBatch?: UltragoalValidationBatchMetadata;
92
35
  }
93
36
  export interface UltragoalPlan {
@@ -204,7 +147,6 @@ export interface UltragoalStatusSummary {
204
147
  nudgeRemaining?: number;
205
148
  nudgeGoalId?: string;
206
149
  nudgeTargetKind?: UltragoalNudgeTargetKind;
207
- pipelineOverlap?: JsonObject;
208
150
  }
209
151
  export interface UltragoalCommandResult {
210
152
  reviewBlockerGoalIds?: string[];
@@ -267,22 +209,6 @@ export declare function recordUltragoalNudgeIfBudgetRemaining(input: {
267
209
  export declare function writePlan(cwd: string, plan: UltragoalPlan, sessionId?: string | null): Promise<void>;
268
210
  export declare function nonEmptyString(value: unknown): string | null;
269
211
  export declare function stringArray(value: unknown): string[] | null;
270
- export declare function hashPipelineMetadata(metadata: Omit<UltragoalPipelineMetadata, "metadataHash">): string;
271
- export declare function validateValidationBatchPipelineExclusion(goal: UltragoalGoal): void;
272
- export declare function targetsAreDisjoint(left: UltragoalPipelineTargets, right: UltragoalPipelineTargets): boolean;
273
- export declare function targetsOverlap(left: UltragoalPipelineTargets, right: UltragoalPipelineTargets): boolean;
274
- export declare function requireNonEmptyPipelineTargets(value: unknown, fieldName: string): UltragoalPipelineTargets;
275
- export declare function collectPipelineBlockerFootprints(result: JsonObject, fieldName: string): UltragoalPipelineTargets[];
276
- export declare function pipelinePeer(plan: UltragoalPlan, metadata: UltragoalPipelineMetadata): UltragoalGoal | undefined;
277
- export declare function handleIdsFromValue(value: JsonObject | JsonObject[], fieldName: string): string[];
278
- export declare function resultHandleIds(value: JsonObject, fieldName: string): string[];
279
- export declare function requireCoveredHandles(expected: readonly string[], actual: readonly string[], fieldName: string): void;
280
- export declare function requireFreshPipelineMetadata(goal: UltragoalGoal): UltragoalPipelineMetadata;
281
- export declare function openPipelineOverlap(plan: UltragoalPlan): {
282
- prior: UltragoalGoal;
283
- next: UltragoalGoal;
284
- overlapId: string;
285
- } | null;
286
212
  export declare function readUltragoalPlan(cwd: string, sessionId?: string | null): Promise<UltragoalPlan | null>;
287
213
  export declare function getUltragoalStatus(cwd: string, sessionId?: string | null): Promise<UltragoalStatusSummary>;
288
214
  export declare function buildUltragoalHudSummary(summary: UltragoalStatusSummary, latestLedger?: UltragoalLedgerEvent): WorkflowHudSummary;
@@ -291,8 +217,6 @@ export declare function createUltragoalPlan(input: {
291
217
  brief: string;
292
218
  gjcGoalMode?: UltragoalGjcGoalMode;
293
219
  sessionId?: string | null;
294
- goalMetadata?: UltragoalGoalMetadataInput[];
295
- goalMetadataJson?: string;
296
220
  validationBatches?: UltragoalValidationBatchInput[];
297
221
  validationBatchJson?: string;
298
222
  }): Promise<UltragoalPlan>;
@@ -304,10 +228,6 @@ export interface UltragoalRunCompletionState {
304
228
  hasBlockers: boolean;
305
229
  needsFinalAggregateReceipt: boolean;
306
230
  }
307
- export declare function requireJsonObjectValue(value: unknown, fieldName: string): JsonObject;
308
- export declare function requireJsonObjectOrArrayValue(value: unknown, fieldName: string): JsonObject | JsonObject[];
309
- import { joinUltragoalPipelineOverlap, rebaselineUltragoalPipelineOverlap, startUltragoalPipelineOverlap } from "./ultragoal-pipeline";
310
- export { joinUltragoalPipelineOverlap, rebaselineUltragoalPipelineOverlap, startUltragoalPipelineOverlap };
311
231
  export declare function getUltragoalRunCompletionState(plan: UltragoalPlan, options?: {
312
232
  retryFailed?: boolean;
313
233
  }): UltragoalRunCompletionState;
@@ -343,6 +263,22 @@ export declare function startNextUltragoalGoal(input: {
343
263
  }>;
344
264
  export declare function qualityGateObject(value: unknown): JsonObject | null;
345
265
  export declare function nonEmptyStringArray(value: unknown): string[] | null;
266
+ export interface UltragoalQualityGateDiagnostic {
267
+ path: string;
268
+ code: string;
269
+ message: string;
270
+ }
271
+ /**
272
+ * Collects every quality-gate defect in one pass instead of throwing on the first.
273
+ * Authoring a valid gate is otherwise an edit/retry loop at the most expensive phase
274
+ * of a run (#3474). The aggregate error message keeps each individual message verbatim
275
+ * so existing callers and assertions that match on a single message still work, and
276
+ * `diagnostics` carries the machine-readable stable `path` + `code` pairs.
277
+ */
278
+ export declare class UltragoalQualityGateError extends Error {
279
+ readonly diagnostics: readonly UltragoalQualityGateDiagnostic[];
280
+ constructor(diagnostics: readonly UltragoalQualityGateDiagnostic[]);
281
+ }
346
282
  export declare function requireQualityGateObject(value: unknown, fieldName: string): JsonObject;
347
283
  export declare function requireObjectArray(value: unknown, fieldName: string): JsonObject[];
348
284
  export declare function requiredStringField(row: JsonObject, key: string, fieldName: string): string;
@@ -386,6 +322,21 @@ export declare function validateExecutorQaRedTeamEvidenceForReview(cwd: string,
386
322
  mode?: "review";
387
323
  changeSet?: UltragoalChangeSet;
388
324
  }): Promise<void>;
325
+ /**
326
+ * Read-only quality-gate validation (#3474). Applies exactly the same rules as
327
+ * `checkpoint --status complete` — including deferred-vs-boundary gate selection and
328
+ * artifact existence checks — but never touches `goals.json`, `ledger.jsonl`, or goal
329
+ * state, and reports every diagnostic in one run instead of the first failure.
330
+ */
331
+ export declare function validateUltragoalQualityGateReadOnly(input: {
332
+ cwd: string;
333
+ qualityGateJson: string;
334
+ goalId?: string;
335
+ sessionId?: string | null;
336
+ }): Promise<{
337
+ valid: boolean;
338
+ errors: readonly UltragoalQualityGateDiagnostic[];
339
+ }>;
389
340
  export declare function checkpointUltragoalGoal(input: {
390
341
  cwd: string;
391
342
  goalId: string;
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * TypeScript is the authoritative source of truth for GJC workflow manifests.
3
- * Keep the checked-in JSON projection synchronized manually with this module.
3
+ * Any JSON manifest projection is derived from this module and must never be
4
+ * hand-edited.
4
5
  */
5
6
  import { type CanonicalGjcWorkflowSkill } from "../skill-state/canonical-skills";
6
7
  export interface WorkflowState {
@@ -17,9 +18,7 @@ export interface WorkflowVerb {
17
18
  name: string;
18
19
  planned?: boolean;
19
20
  /** Invocation surface that exposes this verb in the real CLI parser. */
20
- surface?: "state-action" | "command-positional" | "command-flag" | "draft-action";
21
- /** Legacy surface retained for callers that have not migrated to normal typed commands. */
22
- compatibilityOnly?: boolean;
21
+ surface?: "state-action" | "command-positional" | "command-flag";
23
22
  }
24
23
  export interface TypedArgSpec {
25
24
  name: string;
@@ -27,7 +26,6 @@ export interface TypedArgSpec {
27
26
  enumValues?: string[];
28
27
  required?: boolean;
29
28
  appliesToVerbs?: string[];
30
- compatibilityOnly?: boolean;
31
29
  planned?: boolean;
32
30
  }
33
31
  export interface RetentionPolicy {
@@ -0,0 +1,2 @@
1
+ import type { GcStoreAdapter } from "../gjc-runtime/gc-runtime";
2
+ export declare const localRootsGcAdapter: GcStoreAdapter;
@@ -96,7 +96,7 @@ export declare const BARE_RESUME_INTERACTIVE_ERROR = "--resume requires an inter
96
96
  export declare function resolveManagedAgentDirForScope(_cwd: string): string;
97
97
  export declare const BARE_RESUME_OPEN_ERROR = "Could not open the selected session. Use --resume <id>.";
98
98
  export declare function runInteractiveMode(session: AgentSession, version: string, changelogMarkdown: string | undefined, notifs: (InteractiveModeNotify | null)[], startupUpdate: StartupUpdateOrchestrator, initialMessages: string[], setExtensionUIContext: (uiContext: ExtensionUIContext, hasUI: boolean) => void, lspServers: LspStartupServerInfo[] | undefined, mcpManager: MCPManager | undefined, eventBus?: EventBus, initialMessage?: string, initialImages?: ImageContent[], createInteractiveMode?: CreateInteractiveMode, resumeAction?: "continue-tail" | "open-idle"): Promise<void>;
99
- declare function getChangelogForDisplay(parsed: Args): Promise<string | undefined>;
99
+ export declare function getChangelogForDisplay(parsed: Args): Promise<string | undefined>;
100
100
  export declare function createSessionManager(parsed: Args, cwd: string, activeSettings?: Settings): Promise<SessionManager | undefined>;
101
101
  /**
102
102
  * Research-mode (RLM) preset hook. Lets `gjc rlm` augment the session options
@@ -25,4 +25,6 @@ export declare function clearMemoryData(agentDir: string, cwd: string): Promise<
25
25
  * Force-enqueue global consolidation maintenance work.
26
26
  */
27
27
  export declare function enqueueMemoryConsolidation(agentDir: string, cwd: string, sourceUpdatedAt?: number): void;
28
+ /** Secret scrubbing applied to every phase-2 consolidation output. Test seam. */
29
+ export declare function redactMemorySecretsForTesting(input: string): string;
28
30
  export declare function getMemoryRoot(agentDir: string, cwd: string): string;
@@ -1,5 +1,5 @@
1
1
  import { type Agent, type AgentSideConnection, type AuthenticateRequest, type AuthenticateResponse, type AvailableCommand, type ClientCapabilities, type CloseSessionRequest, type CloseSessionResponse, type DeleteSessionRequest, type DeleteSessionResponse, type ForkSessionRequest, type ForkSessionResponse, type InitializeRequest, type InitializeResponse, type ListSessionsRequest, type ListSessionsResponse, type LoadSessionRequest, type LoadSessionResponse, type NewSessionRequest, type NewSessionResponse, type PromptRequest, type PromptResponse, type ResumeSessionRequest, type ResumeSessionResponse, type SetSessionConfigOptionRequest, type SetSessionConfigOptionResponse, type SetSessionModeRequest, type SetSessionModeResponse } from "@agentclientprotocol/sdk";
2
- import { type AcpProviderRegistration, AcpSdkAdapter } from "../../sdk/acp";
2
+ import { type AcpProviderRegistration, type AcpReverseConnection, AcpSdkAdapter } from "../../sdk/acp";
3
3
  import type { AcpStartupOptions } from "./startup-options";
4
4
  export declare const ACP_BOOTSTRAP_RACE_GUARD_MS = 50;
5
5
  type JsonObject = Record<string, unknown>;
@@ -195,30 +195,21 @@ export declare function acpPromptPayload(blocks: PromptRequest["prompt"]): {
195
195
  mimeType: string;
196
196
  }>;
197
197
  };
198
+ /**
199
+ * `AcpSdkAdapterError.code` is an internal string, but the SDK only derives a
200
+ * JSON-RPC code from a `RequestError`. Everything else collapses to an opaque
201
+ * `-32603 Internal error`, which hides the reason and defeats client-side
202
+ * recovery (an ACP client cannot see that it must authenticate). Map the codes
203
+ * that have a defined ACP/JSON-RPC counterpart onto a real `RequestError`.
204
+ */
205
+ export declare function acpRequestFailure(error: unknown): unknown;
198
206
  /** Registers a permission provider only when the ACP client requires prompts. */
199
207
  export declare function acpProviderRegistrations(capabilities: ClientCapabilities | undefined, env?: NodeJS.ProcessEnv): AcpProviderRegistration[];
208
+ export declare function createAcpReverseConnection(connection: AgentSideConnection, sessionId: string): AcpReverseConnection;
200
209
  /** Maps ACP permission handling to the session's canonical SDK policy. */
201
210
  export declare function applyAcpPermissionMode(adapter: Pick<AcpSdkAdapter, "control">, capabilities: ClientCapabilities | undefined, env?: NodeJS.ProcessEnv): Promise<void>;
202
211
  /** Applies CLI-provided ACP startup settings through SDK controls before session exposure. */
203
212
  export declare function applyAcpStartupOptions(adapter: Pick<AcpSdkAdapter, "setModel" | "control">, options: AcpStartupOptions | undefined): Promise<void>;
204
- /** ACP form elicitation uses the client-facing reverse surface without owning a session runtime. */
205
- export declare function createAcpExtensionUiContext(connection: AgentSideConnection, getSessionId: () => string, capabilities: ClientCapabilities | undefined): {
206
- select: (message: string, options: string[], dialog?: {
207
- signal?: AbortSignal;
208
- timeout?: number;
209
- onTimeout?: () => void;
210
- }) => Promise<string | undefined>;
211
- confirm: (message: string, detail?: string, dialog?: {
212
- signal?: AbortSignal;
213
- timeout?: number;
214
- onTimeout?: () => void;
215
- }) => Promise<boolean>;
216
- input: (message: string, placeholder?: string, dialog?: {
217
- signal?: AbortSignal;
218
- timeout?: number;
219
- onTimeout?: () => void;
220
- }) => Promise<string | undefined>;
221
- };
222
213
  /**
223
214
  * ACP is a pure SDK client. Session processes are created and resumed by the
224
215
  * broker, while all per-session operations use that session's authenticated SDK
@@ -10,11 +10,13 @@ export declare class AssistantMessageComponent extends Container {
10
10
  #private;
11
11
  private hideThinkingBlock;
12
12
  private readonly onImageUpdate?;
13
- constructor(message?: AssistantMessage, hideThinkingBlock?: boolean, onImageUpdate?: (() => void) | undefined, viewportAnchorId?: string);
13
+ private readonly onVisibleMutation?;
14
+ constructor(message?: AssistantMessage, hideThinkingBlock?: boolean, onImageUpdate?: (() => void) | undefined, viewportAnchorId?: string, onVisibleMutation?: (() => void) | undefined);
14
15
  invalidate(): void;
15
16
  setHideThinkingBlock(hide: boolean): void;
16
17
  setToolResultImages(toolCallId: string, images: ImageContent[]): void;
17
18
  setUsageInfo(usage: Usage): void;
18
19
  updateContent(message: AssistantMessage, options?: AssistantMessageUpdateOptions): void;
20
+ dispose(): void;
19
21
  }
20
22
  export {};
@@ -0,0 +1,34 @@
1
+ import { Container } from "@gajae-code/tui";
2
+ import { type GjcLifecycleContext } from "../../extensibility/gjc-plugins/lifecycle";
3
+ import { type GjcRuntimeSnapshotProvider } from "../../extensibility/gjc-plugins/runtime-quarantine";
4
+ import type { GjcBundleIdentity, GjcBundleSummary, GjcLifecycleResult, GjcReviewedUpdateToken, GjcToggleResult, GjcUpdateApplyResult, GjcUpdatePreview } from "../../extensibility/gjc-plugins/types";
5
+ /** Injectable lifecycle boundary; Settings never reads registries or executes bundle code. */
6
+ export interface GjcBundleLifecyclePort {
7
+ listGjcBundles(ctx: GjcLifecycleContext): Promise<GjcBundleSummary[]>;
8
+ getGjcBundle(ctx: GjcLifecycleContext, identity: GjcBundleIdentity): Promise<GjcLifecycleResult<GjcBundleSummary>>;
9
+ previewGjcBundleUpdate(ctx: GjcLifecycleContext, identity: GjcBundleIdentity): Promise<GjcLifecycleResult<GjcUpdatePreview>>;
10
+ applyGjcBundleUpdate(ctx: GjcLifecycleContext, token: GjcReviewedUpdateToken): Promise<GjcLifecycleResult<GjcUpdateApplyResult>>;
11
+ setGjcBundleEnabled(ctx: GjcLifecycleContext, identity: GjcBundleIdentity, enabled: boolean): Promise<GjcLifecycleResult<GjcToggleResult>>;
12
+ setGjcBundleSurfaceEnabled(ctx: GjcLifecycleContext, identity: GjcBundleIdentity, surfaceId: string, enabled: boolean): Promise<GjcLifecycleResult<GjcToggleResult>>;
13
+ }
14
+ export interface GjcBundleSettingsDependencies {
15
+ lifecycle?: GjcBundleLifecyclePort;
16
+ runtimeSnapshotProvider?: GjcRuntimeSnapshotProvider;
17
+ activationGeneration?: number;
18
+ }
19
+ export interface GjcBundleSettingsCallbacks {
20
+ onClose: () => void;
21
+ onBundlesChanged?: () => void;
22
+ }
23
+ export type GjcBundleSettingsState = "loading" | "error" | "empty" | "list" | "detail" | "unsupported-source" | "update-review" | "update-confirm" | "update-running" | "update-result" | "stale-result" | "quarantined-blocked" | "mutation-in-flight-locked";
24
+ /** Scope-qualified, lifecycle-backed Settings UI for installed GJC bundles. */
25
+ export declare class GjcBundleSettingsComponent extends Container {
26
+ #private;
27
+ private readonly callbacks;
28
+ private readonly dependencies;
29
+ constructor(cwd: string, callbacks: GjcBundleSettingsCallbacks, dependencies?: GjcBundleSettingsDependencies);
30
+ get stateId(): GjcBundleSettingsState;
31
+ get navigationLocked(): boolean;
32
+ dispose(): void;
33
+ handleInput(data: string): void;
34
+ }
@@ -2,12 +2,50 @@ import { type Component, type ViewportAnchorProvider, type ViewportAnchorRender
2
2
  import type { IrcObservationLedger } from "../irc-observation-ledger";
3
3
  export declare const IRC_SIDEBAR_WIDTH_RATIO = 0.3;
4
4
  export declare const IRC_SIDEBAR_MAX_RENDER_ROWS = 2048;
5
+ export declare const __ircSidebarPerfCounters: {
6
+ enabled: boolean;
7
+ projectionMemoHits: number;
8
+ projectionMemoMisses: number;
9
+ recordsVisited: number;
10
+ sourceBytes: number;
11
+ rows: number;
12
+ styledCacheHits: number;
13
+ styledCacheMisses: number;
14
+ wrapCalls: number;
15
+ snapshot(): {
16
+ projectionMemoHits: number;
17
+ projectionMemoMisses: number;
18
+ recordsVisited: number;
19
+ sourceBytes: number;
20
+ rows: number;
21
+ styledCacheHits: number;
22
+ styledCacheMisses: number;
23
+ wrapCalls: number;
24
+ };
25
+ enable(): void;
26
+ disable(): void;
27
+ reset(): void;
28
+ };
5
29
  /** Computes transcript/sidebar widths while preserving at least half the terminal for the transcript. */
6
30
  export declare function computeIrcSplitWidths(width: number): {
7
31
  leftWidth: number;
8
32
  separatorWidth: number;
9
33
  rightWidth: number;
10
34
  };
35
+ type SemanticLine = Readonly<{
36
+ kind: "header" | "body" | "elision" | "blank";
37
+ text: string;
38
+ sender?: string;
39
+ recipient?: string;
40
+ time?: string;
41
+ }>;
42
+ export type IrcSidebarSemanticProjection = Readonly<{
43
+ token: string;
44
+ lines: readonly SemanticLine[];
45
+ }>;
46
+ /** The authoritative bounded, display-neutral IRC sidebar projection. */
47
+ export declare function getIrcSidebarSemanticProjection(ledger: IrcObservationLedger, width: number): IrcSidebarSemanticProjection;
48
+ export declare function getIrcSidebarSemanticToken(ledger: IrcObservationLedger, width: number): string;
11
49
  export interface IrcSidebarTheme {
12
50
  fg(color: "dim" | "accent", text: string): string;
13
51
  bold(text: string): string;
@@ -26,7 +64,10 @@ export declare class IrcSplitViewComponent implements ViewportAnchorProvider {
26
64
  get visible(): boolean;
27
65
  effectiveSidebarVisible(width?: number): boolean;
28
66
  setVisible(visible: boolean): void;
67
+ invalidateTheme(): void;
68
+ resetSource(): void;
29
69
  render(width: number): string[];
30
70
  renderWithViewportAnchors(width: number): ViewportAnchorRender;
31
71
  invalidate(): void;
32
72
  }
73
+ export {};