@gajae-code/coding-agent 0.11.0 → 0.11.2

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 (418) hide show
  1. package/CHANGELOG.md +63 -1
  2. package/dist/types/async/job-manager.d.ts +46 -7
  3. package/dist/types/cli/config-cli.d.ts +11 -1
  4. package/dist/types/cli/notify-cli.d.ts +1 -0
  5. package/dist/types/cli/session-picker.d.ts +2 -1
  6. package/dist/types/cli/setup-cli.d.ts +1 -1
  7. package/dist/types/commands/mcp-serve.d.ts +33 -0
  8. package/dist/types/commands/mcp.d.ts +1 -1
  9. package/dist/types/commands/notify.d.ts +0 -2
  10. package/dist/types/commands/sdk.d.ts +1 -1
  11. package/dist/types/config/atomic-yaml-patch.d.ts +18 -0
  12. package/dist/types/config/file-lock.d.ts +14 -4
  13. package/dist/types/config/keybindings.d.ts +42 -1
  14. package/dist/types/config/model-auth.d.ts +3 -0
  15. package/dist/types/config/model-bindings-applier.d.ts +13 -0
  16. package/dist/types/config/model-discovery-manager.d.ts +49 -0
  17. package/dist/types/config/model-equivalence.d.ts +20 -0
  18. package/dist/types/config/model-registry.d.ts +16 -15
  19. package/dist/types/config/model-resolver.d.ts +28 -18
  20. package/dist/types/config/models-config-schema.d.ts +11 -0
  21. package/dist/types/config/settings-schema.d.ts +56 -1
  22. package/dist/types/config/settings.d.ts +14 -11
  23. package/dist/types/coordinator-mcp/policy.d.ts +5 -0
  24. package/dist/types/coordinator-mcp/question-gate-codec.d.ts +129 -0
  25. package/dist/types/coordinator-mcp/question-state.d.ts +356 -0
  26. package/dist/types/coordinator-mcp/server.d.ts +4 -0
  27. package/dist/types/discovery/helpers.d.ts +0 -6
  28. package/dist/types/edit/index.d.ts +3 -0
  29. package/dist/types/eval/py/env.d.ts +9 -0
  30. package/dist/types/extensibility/extensions/loader.d.ts +2 -1
  31. package/dist/types/extensibility/extensions/runner.d.ts +2 -2
  32. package/dist/types/extensibility/extensions/types.d.ts +34 -3
  33. package/dist/types/extensibility/hooks/runner.d.ts +1 -1
  34. package/dist/types/extensibility/shared-events.d.ts +2 -0
  35. package/dist/types/gjc-runtime/deep-interview-recorder.d.ts +10 -1
  36. package/dist/types/gjc-runtime/deep-interview-state.d.ts +44 -0
  37. package/dist/types/gjc-runtime/goal-mode-request.d.ts +11 -1
  38. package/dist/types/gjc-runtime/launch-worktree.d.ts +4 -2
  39. package/dist/types/gjc-runtime/linux-proc.d.ts +29 -0
  40. package/dist/types/gjc-runtime/session-resolution.d.ts +2 -2
  41. package/dist/types/gjc-runtime/state-migrations.d.ts +1 -1
  42. package/dist/types/gjc-runtime/state-writer.d.ts +2 -1
  43. package/dist/types/gjc-runtime/team-launch.d.ts +59 -0
  44. package/dist/types/gjc-runtime/team-notify.d.ts +45 -0
  45. package/dist/types/gjc-runtime/team-runtime.d.ts +29 -121
  46. package/dist/types/gjc-runtime/team-store.d.ts +160 -0
  47. package/dist/types/gjc-runtime/team-workers.d.ts +78 -0
  48. package/dist/types/gjc-runtime/tmux-owner-isolation.d.ts +8 -0
  49. package/dist/types/gjc-runtime/ultragoal-change-set.d.ts +13 -0
  50. package/dist/types/gjc-runtime/ultragoal-evidence.d.ts +38 -0
  51. package/dist/types/gjc-runtime/ultragoal-guard.d.ts +7 -0
  52. package/dist/types/gjc-runtime/ultragoal-pipeline.d.ts +23 -0
  53. package/dist/types/gjc-runtime/ultragoal-receipt-freshness.d.ts +11 -0
  54. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +55 -33
  55. package/dist/types/gjc-runtime/workflow-cli-common.d.ts +8 -0
  56. package/dist/types/gjc-runtime/workflow-manifest.d.ts +3 -0
  57. package/dist/types/goals/continuation-timeout-guard.d.ts +22 -0
  58. package/dist/types/goals/runtime.d.ts +1 -0
  59. package/dist/types/goals/state.d.ts +8 -0
  60. package/dist/types/harness-control-plane/lifecycle-reconciliation.d.ts +17 -0
  61. package/dist/types/harness-control-plane/phase-rollup.d.ts +4 -7
  62. package/dist/types/harness-control-plane/receipt-ingest.d.ts +5 -0
  63. package/dist/types/harness-control-plane/receipt-spool.d.ts +4 -0
  64. package/dist/types/hindsight/state.d.ts +11 -4
  65. package/dist/types/lsp/lspmux.d.ts +5 -3
  66. package/dist/types/lsp/path-trust.d.ts +1 -0
  67. package/dist/types/main.d.ts +3 -2
  68. package/dist/types/memories/storage.d.ts +1 -0
  69. package/dist/types/modes/action-registry.d.ts +29 -0
  70. package/dist/types/modes/components/chrome.d.ts +14 -0
  71. package/dist/types/modes/components/command-palette.d.ts +27 -0
  72. package/dist/types/modes/components/custom-provider-wizard.d.ts +1 -0
  73. package/dist/types/modes/components/index.d.ts +2 -1
  74. package/dist/types/modes/components/pet-selector.d.ts +1 -1
  75. package/dist/types/modes/components/plan-preview-overlay.d.ts +43 -0
  76. package/dist/types/modes/components/queue-mode-selector.d.ts +1 -1
  77. package/dist/types/modes/components/queue-pane.d.ts +12 -0
  78. package/dist/types/modes/components/read-tool-group.d.ts +6 -0
  79. package/dist/types/modes/components/session-observer-overlay.d.ts +3 -4
  80. package/dist/types/modes/components/sessions-dashboard.d.ts +32 -0
  81. package/dist/types/modes/components/settings-selector.d.ts +1 -1
  82. package/dist/types/modes/components/show-images-selector.d.ts +1 -1
  83. package/dist/types/modes/components/status-line/types.d.ts +1 -1
  84. package/dist/types/modes/components/status-line.d.ts +1 -94
  85. package/dist/types/modes/components/tasks-pane.d.ts +15 -0
  86. package/dist/types/modes/components/theme-selector.d.ts +1 -1
  87. package/dist/types/modes/components/tool-execution.d.ts +15 -0
  88. package/dist/types/modes/components/tool-status-header.d.ts +111 -0
  89. package/dist/types/modes/components/transcript-viewer-overlay.d.ts +42 -0
  90. package/dist/types/modes/controllers/command-controller.d.ts +2 -2
  91. package/dist/types/modes/controllers/extension-ui-controller.d.ts +1 -0
  92. package/dist/types/modes/controllers/goal-mode-controller.d.ts +62 -0
  93. package/dist/types/modes/controllers/input-controller.d.ts +8 -1
  94. package/dist/types/modes/controllers/mode-gate.d.ts +8 -0
  95. package/dist/types/modes/controllers/plan-mode-controller.d.ts +65 -0
  96. package/dist/types/modes/controllers/selector-controller.d.ts +15 -3
  97. package/dist/types/modes/controllers/stt-controller.d.ts +26 -0
  98. package/dist/types/modes/interactive-mode.d.ts +21 -19
  99. package/dist/types/modes/jobs-observer.d.ts +2 -0
  100. package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +4 -11
  101. package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +21 -2
  102. package/dist/types/modes/shared/agent-wire/workflow-gate-types.d.ts +31 -0
  103. package/dist/types/modes/tasks-aggregator.d.ts +39 -0
  104. package/dist/types/modes/transcript-item-registry.d.ts +60 -0
  105. package/dist/types/modes/types.d.ts +22 -15
  106. package/dist/types/modes/utils/ui-helpers.d.ts +2 -2
  107. package/dist/types/runtime-mcp/manager.d.ts +1 -1
  108. package/dist/types/sdk/broker/broker.d.ts +78 -12
  109. package/dist/types/sdk/broker/ensure.d.ts +9 -0
  110. package/dist/types/sdk/broker/lifecycle-codec.d.ts +4 -0
  111. package/dist/types/sdk/broker/lifecycle-ledger.d.ts +15 -1
  112. package/dist/types/sdk/broker/lifecycle.d.ts +6 -2
  113. package/dist/types/sdk/broker/process-incarnation.d.ts +2 -0
  114. package/dist/types/sdk/broker/session-index.d.ts +0 -1
  115. package/dist/types/sdk/broker/state-version.d.ts +2 -0
  116. package/dist/types/sdk/bus/chat-effect-journal.d.ts +1 -0
  117. package/dist/types/sdk/bus/config-commands.d.ts +1 -1
  118. package/dist/types/sdk/bus/config.d.ts +11 -0
  119. package/dist/types/sdk/bus/daemon-paths.d.ts +1 -0
  120. package/dist/types/sdk/bus/discord-daemon.d.ts +5 -0
  121. package/dist/types/sdk/bus/html-format.d.ts +3 -2
  122. package/dist/types/sdk/bus/index.d.ts +27 -0
  123. package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +4 -0
  124. package/dist/types/sdk/bus/notification-service.d.ts +20 -0
  125. package/dist/types/sdk/bus/rate-limit-pool.d.ts +13 -2
  126. package/dist/types/sdk/bus/recent-activity.d.ts +21 -12
  127. package/dist/types/sdk/bus/rich-document.d.ts +7 -0
  128. package/dist/types/sdk/bus/rich-render.d.ts +18 -41
  129. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +9 -4
  130. package/dist/types/sdk/bus/telegram-daemon.d.ts +69 -3
  131. package/dist/types/sdk/bus/threaded-inbound.d.ts +1 -1
  132. package/dist/types/sdk/bus/threaded-render.d.ts +13 -0
  133. package/dist/types/sdk/bus/topic-registry.d.ts +24 -2
  134. package/dist/types/sdk/host/control/operations.d.ts +1 -1
  135. package/dist/types/sdk/host/host.d.ts +2 -0
  136. package/dist/types/sdk/index.d.ts +1 -0
  137. package/dist/types/sdk/session-directory.d.ts +56 -0
  138. package/dist/types/session/agent-session.d.ts +82 -47
  139. package/dist/types/session/agent-storage.d.ts +7 -0
  140. package/dist/types/session/fallback-chain-controller.d.ts +10 -2
  141. package/dist/types/session/internal/managed-session-scope.d.ts +102 -0
  142. package/dist/types/session/internal/managed-session-storage.d.ts +38 -0
  143. package/dist/types/session/messages.d.ts +16 -0
  144. package/dist/types/session/session-manager-internal.d.ts +14 -0
  145. package/dist/types/session/session-manager.d.ts +82 -12
  146. package/dist/types/session/session-storage.d.ts +43 -3
  147. package/dist/types/session/volatile-context-pruning.d.ts +15 -0
  148. package/dist/types/skill-state/{deep-interview-mutation-guard.d.ts → workflow-mutation-guard.d.ts} +24 -8
  149. package/dist/types/skill-state/workflow-state-contract.d.ts +1 -3
  150. package/dist/types/slash-commands/builtin-registry.d.ts +4 -1
  151. package/dist/types/system-prompt.d.ts +2 -11
  152. package/dist/types/task/executor.d.ts +3 -1
  153. package/dist/types/thinking.d.ts +7 -0
  154. package/dist/types/tool-discovery/tool-index.d.ts +1 -50
  155. package/dist/types/tools/ask.d.ts +64 -2
  156. package/dist/types/tools/bash.d.ts +3 -0
  157. package/dist/types/tools/browser/dead-tab-recovery.d.ts +24 -0
  158. package/dist/types/tools/browser/tab-supervisor.d.ts +21 -0
  159. package/dist/types/tools/cron.d.ts +2 -0
  160. package/dist/types/tools/fetch.d.ts +1 -0
  161. package/dist/types/tools/index.d.ts +30 -15
  162. package/dist/types/tools/output-meta.d.ts +1 -0
  163. package/dist/types/tools/read.d.ts +3 -0
  164. package/dist/types/tools/search-tool-bm25.d.ts +3 -4
  165. package/dist/types/tools/subagent-render.d.ts +1 -0
  166. package/dist/types/tools/subagent.d.ts +6 -1
  167. package/dist/types/utils/event-bus.d.ts +1 -1
  168. package/dist/types/web/search/index.d.ts +3 -1
  169. package/package.json +21 -9
  170. package/scripts/build-sdk-package-smoke.ts +39 -1
  171. package/scripts/generate-hotkeys-docs.ts +74 -0
  172. package/scripts/generate-sdk-operation-inventory.ts +64 -20
  173. package/scripts/verify-gjc-sdk-canonicalization.ts +182 -2
  174. package/src/async/job-manager.ts +455 -69
  175. package/src/cli/config-cli.ts +75 -2
  176. package/src/cli/notify-cli.ts +92 -26
  177. package/src/cli/session-picker.ts +20 -3
  178. package/src/cli/setup-cli.ts +1 -1
  179. package/src/cli.ts +1 -1
  180. package/src/commands/config.ts +1 -1
  181. package/src/commands/harness.ts +34 -106
  182. package/src/commands/launch.ts +6 -4
  183. package/src/commands/mcp-serve.ts +85 -8
  184. package/src/commands/mcp.ts +2 -2
  185. package/src/commands/notify.ts +8 -4
  186. package/src/commands/sdk.ts +61 -40
  187. package/src/commands/ultragoal.ts +4 -1
  188. package/src/config/atomic-yaml-patch.ts +80 -13
  189. package/src/config/file-lock.ts +105 -43
  190. package/src/config/keybindings.ts +64 -20
  191. package/src/config/model-auth.ts +9 -0
  192. package/src/config/model-bindings-applier.ts +139 -0
  193. package/src/config/model-discovery-manager.ts +224 -0
  194. package/src/config/model-equivalence.ts +66 -0
  195. package/src/config/model-registry.ts +169 -302
  196. package/src/config/model-resolver.ts +361 -369
  197. package/src/config/models-config-schema.ts +5 -4
  198. package/src/config/settings-schema.ts +159 -2
  199. package/src/config/settings.ts +458 -482
  200. package/src/coordinator-mcp/policy.ts +76 -11
  201. package/src/coordinator-mcp/question-gate-codec.ts +274 -0
  202. package/src/coordinator-mcp/question-state.ts +778 -0
  203. package/src/coordinator-mcp/server.ts +1702 -238
  204. package/src/debug/index.ts +1 -1
  205. package/src/defaults/gjc/skills/deep-interview/SKILL.md +13 -1
  206. package/src/defaults/gjc/skills/team/SKILL.md +16 -0
  207. package/src/discovery/helpers.ts +1 -50
  208. package/src/edit/index.ts +64 -0
  209. package/src/eval/py/env.ts +26 -0
  210. package/src/eval/py/kernel.ts +5 -3
  211. package/src/extensibility/extensions/loader.ts +9 -1
  212. package/src/extensibility/extensions/runner.ts +12 -3
  213. package/src/extensibility/extensions/types.ts +39 -1
  214. package/src/extensibility/gjc-plugins/installer.ts +16 -16
  215. package/src/extensibility/hooks/runner.ts +2 -2
  216. package/src/extensibility/runtime-skill-discovery.ts +33 -13
  217. package/src/extensibility/shared-events.ts +2 -0
  218. package/src/gjc-runtime/deep-interview-recorder.ts +63 -3
  219. package/src/gjc-runtime/deep-interview-runtime.ts +76 -27
  220. package/src/gjc-runtime/deep-interview-state.ts +317 -5
  221. package/src/gjc-runtime/goal-mode-request.ts +55 -8
  222. package/src/gjc-runtime/launch-tmux.ts +2 -5
  223. package/src/gjc-runtime/launch-worktree.ts +5 -5
  224. package/src/gjc-runtime/linux-proc.ts +71 -0
  225. package/src/gjc-runtime/ralplan-runtime.ts +74 -90
  226. package/src/gjc-runtime/session-resolution.ts +18 -3
  227. package/src/gjc-runtime/session-state-sidecar.ts +6 -107
  228. package/src/gjc-runtime/state-migrations.ts +1 -1
  229. package/src/gjc-runtime/state-runtime.ts +320 -249
  230. package/src/gjc-runtime/state-writer.ts +36 -40
  231. package/src/gjc-runtime/team-launch.ts +319 -0
  232. package/src/gjc-runtime/team-notify.ts +326 -0
  233. package/src/gjc-runtime/team-runtime.ts +1099 -1482
  234. package/src/gjc-runtime/team-store.ts +828 -0
  235. package/src/gjc-runtime/team-workers.ts +962 -0
  236. package/src/gjc-runtime/tmux-owner-isolation-cli.ts +2 -11
  237. package/src/gjc-runtime/tmux-owner-isolation.ts +14 -9
  238. package/src/gjc-runtime/tmux-sessions.ts +4 -21
  239. package/src/gjc-runtime/ultragoal-change-set.ts +172 -0
  240. package/src/gjc-runtime/ultragoal-evidence.ts +874 -0
  241. package/src/gjc-runtime/ultragoal-guard.ts +83 -12
  242. package/src/gjc-runtime/ultragoal-pipeline.ts +306 -0
  243. package/src/gjc-runtime/ultragoal-receipt-freshness.ts +102 -1
  244. package/src/gjc-runtime/ultragoal-runtime.ts +156 -1319
  245. package/src/gjc-runtime/workflow-cli-common.ts +30 -0
  246. package/src/gjc-runtime/workflow-manifest.generated.json +58 -0
  247. package/src/gjc-runtime/workflow-manifest.ts +18 -0
  248. package/src/goals/continuation-timeout-guard.ts +79 -0
  249. package/src/goals/runtime.ts +7 -5
  250. package/src/goals/state.ts +18 -0
  251. package/src/harness-control-plane/lifecycle-reconciliation.ts +64 -0
  252. package/src/harness-control-plane/phase-rollup.ts +4 -7
  253. package/src/harness-control-plane/receipt-ingest.ts +5 -0
  254. package/src/harness-control-plane/receipt-spool.ts +51 -7
  255. package/src/harness-control-plane/session-lease.ts +12 -130
  256. package/src/hindsight/backend.ts +26 -27
  257. package/src/hindsight/state.ts +101 -32
  258. package/src/hooks/skill-state.ts +17 -11
  259. package/src/internal-urls/docs-index.generated.ts +21 -18
  260. package/src/lsp/client.ts +1 -1
  261. package/src/lsp/config.ts +145 -26
  262. package/src/lsp/index.ts +1 -1
  263. package/src/lsp/lspmux.ts +39 -10
  264. package/src/lsp/path-trust.ts +81 -0
  265. package/src/main.ts +28 -8
  266. package/src/memories/index.ts +1 -0
  267. package/src/memories/storage.ts +6 -2
  268. package/src/modes/action-registry.ts +165 -0
  269. package/src/modes/components/chrome.ts +40 -0
  270. package/src/modes/components/command-palette.ts +168 -0
  271. package/src/modes/components/custom-editor.ts +1 -1
  272. package/src/modes/components/custom-provider-wizard.ts +51 -14
  273. package/src/modes/components/index.ts +2 -1
  274. package/src/modes/components/pet-selector.ts +11 -17
  275. package/src/modes/components/plan-preview-overlay.ts +295 -0
  276. package/src/modes/components/queue-mode-selector.ts +10 -27
  277. package/src/modes/components/queue-pane.ts +79 -0
  278. package/src/modes/components/read-tool-group.ts +13 -0
  279. package/src/modes/components/session-observer-overlay.ts +207 -772
  280. package/src/modes/components/sessions-dashboard.ts +181 -0
  281. package/src/modes/components/settings-selector.ts +1 -1
  282. package/src/modes/components/show-images-selector.ts +10 -24
  283. package/src/modes/components/status-line/types.ts +1 -1
  284. package/src/modes/components/status-line.ts +1 -969
  285. package/src/modes/components/tasks-pane.ts +73 -0
  286. package/src/modes/components/theme-selector.ts +11 -31
  287. package/src/modes/components/tool-execution.ts +22 -0
  288. package/src/modes/components/tool-status-header.ts +1056 -0
  289. package/src/modes/components/transcript-viewer-overlay.ts +384 -0
  290. package/src/modes/controllers/btw-controller.ts +1 -0
  291. package/src/modes/controllers/command-controller.ts +9 -15
  292. package/src/modes/controllers/event-controller.ts +3 -2
  293. package/src/modes/controllers/extension-ui-controller.ts +72 -25
  294. package/src/modes/controllers/goal-mode-controller.ts +474 -0
  295. package/src/modes/controllers/input-controller.ts +764 -229
  296. package/src/modes/controllers/mode-gate.ts +24 -0
  297. package/src/modes/controllers/plan-mode-controller.ts +517 -0
  298. package/src/modes/controllers/selector-controller.ts +225 -10
  299. package/src/modes/controllers/stt-controller.ts +125 -0
  300. package/src/modes/interactive-mode.ts +302 -1151
  301. package/src/modes/jobs-observer.ts +3 -0
  302. package/src/modes/runtime-init.ts +8 -0
  303. package/src/modes/shared/agent-wire/deep-interview-gate.ts +31 -106
  304. package/src/modes/shared/agent-wire/workflow-gate-broker.ts +78 -19
  305. package/src/modes/shared/agent-wire/workflow-gate-types.ts +177 -0
  306. package/src/modes/tasks-aggregator.ts +199 -0
  307. package/src/modes/transcript-item-registry.ts +229 -0
  308. package/src/modes/types.ts +47 -20
  309. package/src/modes/utils/ui-helpers.ts +17 -9
  310. package/src/prompts/agent-fragments/ralplan-persistence.md +6 -0
  311. package/src/prompts/agent-fragments/restricted-bash.md +1 -0
  312. package/src/prompts/agents/architect.md +2 -8
  313. package/src/prompts/agents/critic.md +2 -8
  314. package/src/prompts/agents/executor.md +3 -0
  315. package/src/prompts/agents/planner.md +4 -12
  316. package/src/prompts/system/custom-system-prompt.md +1 -23
  317. package/src/prompts/system/plan-mode-approved.md +8 -0
  318. package/src/prompts/system/system-prompt.md +17 -96
  319. package/src/prompts/tools/bash.md +4 -4
  320. package/src/prompts/tools/browser.md +15 -52
  321. package/src/prompts/tools/find.md +2 -2
  322. package/src/prompts/tools/hashline.md +13 -55
  323. package/src/prompts/tools/read.md +3 -6
  324. package/src/prompts/tools/search-tool-bm25.md +0 -2
  325. package/src/prompts/tools/search.md +2 -4
  326. package/src/prompts/tools/skill-discovery.md +1 -2
  327. package/src/prompts/tools/task.md +1 -1
  328. package/src/runtime-mcp/manager.ts +1 -1
  329. package/src/sdk/broker/broker.ts +206 -78
  330. package/src/sdk/broker/discovery.ts +21 -2
  331. package/src/sdk/broker/ensure.ts +85 -25
  332. package/src/sdk/broker/lifecycle-codec.ts +11 -0
  333. package/src/sdk/broker/lifecycle-ledger.ts +371 -74
  334. package/src/sdk/broker/lifecycle.ts +1399 -142
  335. package/src/sdk/broker/process-incarnation.ts +5 -13
  336. package/src/sdk/broker/session-index.ts +145 -56
  337. package/src/sdk/broker/state-version.ts +21 -0
  338. package/src/sdk/broker/transport.ts +1 -1
  339. package/src/sdk/bus/chat-daemon-cli.ts +2 -0
  340. package/src/sdk/bus/chat-daemon-control.ts +8 -28
  341. package/src/sdk/bus/chat-effect-journal.ts +14 -4
  342. package/src/sdk/bus/config-commands.ts +5 -4
  343. package/src/sdk/bus/config.ts +98 -0
  344. package/src/sdk/bus/conversation-store.ts +5 -29
  345. package/src/sdk/bus/daemon-paths.ts +2 -0
  346. package/src/sdk/bus/discord-daemon.ts +25 -8
  347. package/src/sdk/bus/html-format.ts +20 -3
  348. package/src/sdk/bus/index.ts +834 -113
  349. package/src/sdk/bus/lifecycle-control-runtime.ts +91 -33
  350. package/src/sdk/bus/native-runtime-compatibility.ts +1 -1
  351. package/src/sdk/bus/natives-augment.d.ts +26 -1
  352. package/src/sdk/bus/notification-service.ts +168 -20
  353. package/src/sdk/bus/rate-limit-pool.ts +58 -14
  354. package/src/sdk/bus/recent-activity.ts +188 -74
  355. package/src/sdk/bus/rich-document.ts +258 -0
  356. package/src/sdk/bus/rich-render.ts +62 -70
  357. package/src/sdk/bus/telegram-daemon-cli.ts +15 -59
  358. package/src/sdk/bus/telegram-daemon-contract.ts +9 -4
  359. package/src/sdk/bus/telegram-daemon.ts +1491 -247
  360. package/src/sdk/bus/threaded-inbound.ts +8 -3
  361. package/src/sdk/bus/threaded-render.ts +57 -1
  362. package/src/sdk/bus/topic-registry.ts +120 -13
  363. package/src/sdk/host/control/dispatch.ts +14 -2
  364. package/src/sdk/host/control/operations.ts +6 -1
  365. package/src/sdk/host/host.ts +31 -1
  366. package/src/sdk/host/query/handlers.ts +20 -22
  367. package/src/sdk/host/query/revision-store.ts +80 -57
  368. package/src/sdk/index.ts +1 -0
  369. package/src/sdk/protocol/operation-inventory.generated.json +943 -1907
  370. package/src/sdk/session-directory.ts +141 -0
  371. package/src/sdk/session.ts +458 -479
  372. package/src/session/agent-session.ts +1901 -637
  373. package/src/session/agent-storage.ts +18 -0
  374. package/src/session/cache-economics.ts +25 -8
  375. package/src/session/fallback-chain-controller.ts +53 -3
  376. package/src/session/internal/managed-session-scope.ts +2226 -0
  377. package/src/session/internal/managed-session-storage.ts +453 -0
  378. package/src/session/messages.ts +91 -2
  379. package/src/session/session-manager-internal.ts +33 -0
  380. package/src/session/session-manager.ts +1112 -333
  381. package/src/session/session-storage.ts +444 -39
  382. package/src/session/volatile-context-pruning.ts +78 -0
  383. package/src/setup/credential-auto-import.ts +2 -1
  384. package/src/setup/hermes/templates/operator-instructions.v1.md +1 -1
  385. package/src/setup/provider-onboarding.ts +36 -61
  386. package/src/setup/provider-presets.json +5 -0
  387. package/src/skill-state/active-state.ts +3 -13
  388. package/src/skill-state/{deep-interview-mutation-guard.ts → workflow-mutation-guard.ts} +47 -29
  389. package/src/skill-state/workflow-state-contract.ts +6 -41
  390. package/src/slash-commands/builtin-registry.ts +46 -11
  391. package/src/system-prompt.ts +37 -44
  392. package/src/task/agents.ts +19 -1
  393. package/src/task/executor.ts +90 -6
  394. package/src/task/index.ts +62 -37
  395. package/src/thinking.ts +21 -6
  396. package/src/tool-discovery/tool-index.ts +2 -134
  397. package/src/tools/ask.ts +157 -21
  398. package/src/tools/ast-edit.ts +1 -1
  399. package/src/tools/bash.ts +38 -0
  400. package/src/tools/browser/dead-tab-recovery.ts +78 -0
  401. package/src/tools/browser/tab-supervisor.ts +282 -36
  402. package/src/tools/computer.ts +10 -3
  403. package/src/tools/cron.ts +30 -16
  404. package/src/tools/eval.ts +1 -2
  405. package/src/tools/fetch.ts +11 -4
  406. package/src/tools/index.ts +76 -24
  407. package/src/tools/output-meta.ts +13 -5
  408. package/src/tools/read.ts +37 -1
  409. package/src/tools/resource-gc.ts +2 -2
  410. package/src/tools/search-tool-bm25.ts +11 -74
  411. package/src/tools/subagent-render.ts +19 -8
  412. package/src/tools/subagent.ts +84 -32
  413. package/src/utils/event-bus.ts +9 -4
  414. package/src/web/search/index.ts +3 -3
  415. package/dist/types/discovery/plugin-dir-roots.d.ts +0 -15
  416. package/dist/types/runtime-mcp/discoverable-tool-metadata.d.ts +0 -7
  417. package/src/discovery/plugin-dir-roots.ts +0 -28
  418. package/src/runtime-mcp/discoverable-tool-metadata.ts +0 -25
@@ -1,4 +1,4 @@
1
- import { type Goal } from "../goals/state";
1
+ import { type Goal, type GoalProvenance } from "../goals/state";
2
2
  export declare const GJC_SESSION_FILE_ENV = "GJC_SESSION_FILE";
3
3
  export declare const GJC_SESSION_ID_ENV = "GJC_SESSION_ID";
4
4
  export declare const GJC_SESSION_CWD_ENV = "GJC_SESSION_CWD";
@@ -11,6 +11,9 @@ export interface PendingGoalModeRequest {
11
11
  objective: string;
12
12
  createdAt: string;
13
13
  goalsPath?: string;
14
+ provenance: Extract<GoalProvenance, {
15
+ source: "ultragoal";
16
+ }>;
14
17
  /**
15
18
  * Session id that produced this request (from GJC_SESSION_ID). When present,
16
19
  * only the originating session may consume it, so concurrent sessions sharing
@@ -33,16 +36,23 @@ export declare function isUltragoalCreateGoalsInvocation(args: readonly string[]
33
36
  export declare function readUltragoalGjcObjective(cwd: string, sessionId?: string | null): Promise<{
34
37
  objective: string;
35
38
  goalsPath: string;
39
+ provenance: Extract<GoalProvenance, {
40
+ source: "ultragoal";
41
+ }>;
36
42
  }>;
37
43
  export declare function writePendingGoalModeRequest(input: {
38
44
  cwd: string;
39
45
  objective: string;
40
46
  goalsPath?: string;
41
47
  sessionId?: string | null;
48
+ provenance?: Extract<GoalProvenance, {
49
+ source: "ultragoal";
50
+ }>;
42
51
  }): Promise<PendingGoalModeRequest>;
43
52
  export declare function writeCurrentSessionGoalModeState(input: {
44
53
  sessionFile?: string | null;
45
54
  objective: string;
55
+ provenance?: Goal["provenance"];
46
56
  }): Promise<CurrentSessionGoalModeWriteResult>;
47
57
  export declare function consumePendingGoalModeRequest(cwd: string, currentSessionId?: string | null): Promise<PendingGoalModeRequest | null>;
48
58
  export declare function buildGjcRuntimeSessionEnv(input: {
@@ -37,10 +37,12 @@ export declare function ensureLaunchWorktree(plan: GjcLaunchWorktreePlan | {
37
37
  enabled: false;
38
38
  };
39
39
  export declare function ensureReusableNodeModules(sourceRoot: string, worktreePath: string): "symlink" | "present" | "missing";
40
- export declare function prepareLaunchWorktree(cwd: string, args: string[]): {
40
+ /** Result of {@link prepareLaunchWorktree}: the effective working directory, remaining args, and resolved worktree plan. */
41
+ export interface PreparedLaunchWorktree {
41
42
  cwd: string;
42
43
  args: string[];
43
44
  worktree: GjcLaunchWorktreeResult | {
44
45
  enabled: false;
45
46
  };
46
- };
47
+ }
48
+ export declare function prepareLaunchWorktree(cwd: string, args: string[]): PreparedLaunchWorktree;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Shared helpers for reading Linux `/proc/<pid>/stat` process start time.
3
+ *
4
+ * The `comm` field (field 2, wrapped in parentheses) may itself contain spaces
5
+ * and parentheses, so the only robust anchor is the *last* `)` in the stat
6
+ * string. Field 22 (the process start time in clock ticks since boot) is the
7
+ * 20th whitespace-separated token after that closing paren (index 19).
8
+ *
9
+ * Every caller previously parsed this format independently, with subtly
10
+ * different failure handling. This module fails closed: any malformed input
11
+ * (missing `)`, non-numeric field 22, unreadable `/proc` file, non-Linux
12
+ * platform) yields `null` rather than an inconsistent sentinel.
13
+ */
14
+ /**
15
+ * Parse field 22 (process start time, in clock ticks since boot) from one
16
+ * `/proc/<pid>/stat` record. Returns the raw numeric token, or `null` when the
17
+ * record shape is malformed or field 22 is absent/non-numeric.
18
+ */
19
+ export declare function parseLinuxProcStartTime(stat: string | null | undefined): string | null;
20
+ /**
21
+ * Read `/proc/<pid>/stat` synchronously and return the parsed start time.
22
+ * Returns `null` on non-Linux platforms, unreadable files, or malformed input.
23
+ */
24
+ export declare function readLinuxProcStartTimeSync(pid: number): string | null;
25
+ /**
26
+ * Read `/proc/<pid>/stat` asynchronously and return the parsed start time.
27
+ * Returns `null` on non-Linux platforms, unreadable files, or malformed input.
28
+ */
29
+ export declare function readLinuxProcStartTime(pid: number): Promise<string | null>;
@@ -8,8 +8,8 @@ export interface SessionIdSources {
8
8
  envSessionId?: string | undefined;
9
9
  }
10
10
  export declare class SessionResolutionError extends Error {
11
- readonly code: "blank_flag" | "no_session" | "ambiguous" | "missing_for_write";
12
- constructor(message: string, code: "blank_flag" | "no_session" | "ambiguous" | "missing_for_write");
11
+ readonly code: "blank_flag" | "unsafe_session" | "no_session" | "ambiguous" | "missing_for_write";
12
+ constructor(message: string, code: "blank_flag" | "unsafe_session" | "no_session" | "ambiguous" | "missing_for_write");
13
13
  }
14
14
  interface ResolvedFromSources {
15
15
  gjcSessionId: string;
@@ -7,7 +7,7 @@ export interface MigrateAndPersistLegacyStateArgs {
7
7
  cwd: string;
8
8
  skill: string;
9
9
  statePath: string;
10
- sessionId?: string;
10
+ sessionId: string;
11
11
  }
12
12
  export interface MigrateAndPersistLegacyStateResult {
13
13
  migrated: boolean;
@@ -21,7 +21,7 @@ export interface StateWriterReceiptContext {
21
21
  skill: CanonicalGjcWorkflowSkill;
22
22
  owner: WorkflowStateMutationOwner;
23
23
  command: string;
24
- sessionId?: string;
24
+ sessionId: string;
25
25
  mutationId?: string;
26
26
  nowIso?: string;
27
27
  verb?: string;
@@ -62,6 +62,7 @@ export interface GuardedStateWriterOptions extends StateWriterOptions {
62
62
  policy: StateWritePolicy;
63
63
  expectedRevision?: number;
64
64
  sourceRevision?: number;
65
+ lockHeld?: boolean;
65
66
  }
66
67
  export type GuardedWriteResult = {
67
68
  path: string;
@@ -0,0 +1,59 @@
1
+ import type { GjcTeamConfig, GjcTeamSnapshot, GjcTeamStartOptions, GjcTeamTask, GjcTeamWorker, GjcTeamWorkerCli, GjcTeamWorkerLifecycle, GjcTeamWorktreeMode } from "./team-runtime";
2
+ /** Launch-specific option wiring kept separate from runtime dispatch. */
3
+ export declare function withTeamLaunchTransport(options: GjcTeamStartOptions, mailboxDeliveryTransport: GjcTeamStartOptions["mailboxDeliveryTransport"]): GjcTeamStartOptions;
4
+ /** @internal Exported for unit tests. */
5
+ export declare function buildWorkerCommand(config: GjcTeamConfig, worker: GjcTeamWorker, platform?: NodeJS.Platform): string;
6
+ interface GjcTmuxBinary {
7
+ command: string;
8
+ isPsmux: boolean;
9
+ }
10
+ interface GjcTmuxLeaderContext {
11
+ sessionName: string;
12
+ windowIndex: string;
13
+ leaderPaneId: string;
14
+ target: string;
15
+ }
16
+ export interface GjcTeamLaunchRuntime {
17
+ maxWorkers: number;
18
+ resolveWorkerCliPlan(workerCount: number, env: NodeJS.ProcessEnv): GjcTeamWorkerCli[];
19
+ resolveStateRoot(cwd: string, env: NodeJS.ProcessEnv): string;
20
+ sanitizeName(value: string): string;
21
+ makeTeamName(task: string, env: NodeJS.ProcessEnv): string;
22
+ teamDir(stateRoot: string, teamName: string): string;
23
+ resolveDefaultWorktreeMode(mode?: GjcTeamWorktreeMode): GjcTeamWorktreeMode;
24
+ resolveTmuxBinary(input: {
25
+ env: NodeJS.ProcessEnv;
26
+ platform: NodeJS.Platform;
27
+ }): GjcTmuxBinary;
28
+ readTmuxLeaderContext(tmuxCommand: string, env: NodeJS.ProcessEnv): GjcTmuxLeaderContext;
29
+ buildWorkers(workerCount: number, agentType: string, stateRoot: string): GjcTeamWorker[];
30
+ buildInitialTasks(task: string, workers: GjcTeamWorker[]): GjcTeamTask[];
31
+ ensureWorkerWorktree(cwd: string, dir: string, teamName: string, worker: GjcTeamWorker, mode: GjcTeamWorktreeMode, platform: NodeJS.Platform, isPsmux: boolean): Promise<GjcTeamWorker>;
32
+ rollbackCreatedWorktrees(workers: GjcTeamWorker[]): Promise<void>;
33
+ resolveWorkerCommand(cwd: string, env: NodeJS.ProcessEnv): string;
34
+ mailboxDirPath(dir: string, worker: string): string;
35
+ mailboxPath(dir: string, worker: string): string;
36
+ workerDir(dir: string, worker: string): string;
37
+ workerLifecyclePath(dir: string, worker: string): string;
38
+ writeJson(filePath: string, value: unknown): Promise<void>;
39
+ now(): string;
40
+ writePhase(dir: string, phase: "starting" | "running" | "failed"): Promise<void>;
41
+ writeTask(dir: string, task: GjcTeamTask): Promise<void>;
42
+ appendEvent(dir: string, event: {
43
+ type: string;
44
+ message: string;
45
+ data?: Record<string, unknown>;
46
+ }): Promise<unknown>;
47
+ appendTelemetry(dir: string, event: {
48
+ type: string;
49
+ message: string;
50
+ data?: Record<string, unknown>;
51
+ }): Promise<unknown>;
52
+ startTmuxSession(config: GjcTeamConfig, dir: string, dryRun: boolean, env: NodeJS.ProcessEnv): Promise<GjcTeamWorker[]>;
53
+ killWorkerPanes(config: GjcTeamConfig): void;
54
+ writeWorkerLifecycleForConfig(dir: string, config: GjcTeamConfig, state: "starting", updates: (worker: GjcTeamWorker) => Partial<GjcTeamWorkerLifecycle>): Promise<unknown>;
55
+ readSnapshot(teamName: string, cwd: string, env: NodeJS.ProcessEnv): Promise<GjcTeamSnapshot>;
56
+ }
57
+ /** Creates persistent team state, worktrees, and tmux worker panes. */
58
+ export declare function startGjcTeamLaunch(runtime: GjcTeamLaunchRuntime, options: GjcTeamStartOptions): Promise<GjcTeamSnapshot>;
59
+ export {};
@@ -0,0 +1,45 @@
1
+ import type { GjcTeamConfig, GjcTeamMailboxMessage } from "./team-runtime";
2
+ import type { GjcTeamMailboxDeliveryInput, GjcTeamMailboxDeliveryResult, GjcTeamMailboxDeliveryTransport, GjcTeamNotification, GjcTeamNotificationDeliveryState, GjcTeamNotificationSummary } from "./team-store";
3
+ /** Runtime-owned filesystem and participant operations used by notification delivery. */
4
+ export interface TeamNotificationRuntime {
5
+ findTeamDir(teamName: string, cwd: string, env: NodeJS.ProcessEnv): Promise<string>;
6
+ readConfig(dir: string): Promise<GjcTeamConfig>;
7
+ assertKnownParticipant(config: GjcTeamConfig, participant: string): void;
8
+ messageId(input: {
9
+ teamName: string;
10
+ fromWorker: string;
11
+ toWorker: string;
12
+ body: string;
13
+ idempotencyKey?: string;
14
+ createdKey: string;
15
+ }): string;
16
+ messageNotificationId(teamName: string, recipient: string, messageId: string): string;
17
+ now(): string;
18
+ randomId(): string;
19
+ appendEvent(dir: string, event: {
20
+ type: string;
21
+ worker?: string;
22
+ message?: string;
23
+ data?: Record<string, unknown>;
24
+ }): Promise<void>;
25
+ readMailbox(dir: string, worker: string): Promise<{
26
+ messages: GjcTeamMailboxMessage[];
27
+ }>;
28
+ writeMailboxMessage(dir: string, worker: string, message: GjcTeamMailboxMessage): Promise<GjcTeamMailboxMessage>;
29
+ listNotifications(dir: string): Promise<GjcTeamNotification[]>;
30
+ readNotification(dir: string, id: string): Promise<GjcTeamNotification>;
31
+ writeNotification(dir: string, notification: GjcTeamNotification): Promise<GjcTeamNotification>;
32
+ }
33
+ export declare function deliverTeamMailboxMessage(transport: GjcTeamMailboxDeliveryTransport | undefined, input: GjcTeamMailboxDeliveryInput): Promise<GjcTeamMailboxDeliveryResult | null>;
34
+ export declare function emptyTeamNotificationSummary(): GjcTeamNotificationSummary;
35
+ export declare function isReplayEligibleTeamNotification(state: GjcTeamNotificationDeliveryState): boolean;
36
+ export declare function summarizeTeamNotifications(notifications: GjcTeamNotification[]): GjcTeamNotificationSummary;
37
+ export declare function createTeamMessageNotification(runtime: TeamNotificationRuntime, dir: string, teamName: string, message: GjcTeamMailboxMessage, state?: GjcTeamNotificationDeliveryState): Promise<GjcTeamNotification>;
38
+ export declare function reconcileTeamNotifications(runtime: TeamNotificationRuntime, dir: string, config: GjcTeamConfig): Promise<GjcTeamNotificationSummary>;
39
+ export declare function replayTeamNotifications(runtime: TeamNotificationRuntime, teamName: string, cwd: string, env: NodeJS.ProcessEnv, transport?: GjcTeamMailboxDeliveryTransport): Promise<{
40
+ notifications: GjcTeamNotification[];
41
+ summary: GjcTeamNotificationSummary;
42
+ }>;
43
+ export declare function sendTeamMessage(runtime: TeamNotificationRuntime, teamName: string, fromWorker: string, toWorker: string, body: string, cwd: string, env: NodeJS.ProcessEnv, idempotencyKey?: string, transport?: GjcTeamMailboxDeliveryTransport): Promise<GjcTeamMailboxMessage>;
44
+ export declare function listTeamMailbox(runtime: TeamNotificationRuntime, teamName: string, worker: string, cwd: string, env: NodeJS.ProcessEnv): Promise<GjcTeamMailboxMessage[]>;
45
+ export declare function markTeamMailboxMessage(runtime: TeamNotificationRuntime, teamName: string, worker: string, messageId: string, field: "delivered_at" | "notified_at", cwd: string, env: NodeJS.ProcessEnv): Promise<GjcTeamMailboxMessage>;
@@ -1,10 +1,7 @@
1
1
  import type { WorkflowHudSummary } from "../skill-state/active-state";
2
2
  import type { GcPidProbe, GcRecord } from "./gc-runtime";
3
- export type GjcTeamPhase = "starting" | "running" | "awaiting_integration" | "complete" | "failed" | "cancelled";
4
- export type GjcTeamTaskStatus = "pending" | "blocked" | "in_progress" | "completed" | "failed";
5
- export type GjcWorkerStatusState = "idle" | "working" | "blocked" | "done" | "failed" | "draining" | "unknown";
6
- export type GjcTeamWorkerLifecycleState = "starting" | "ready" | "working" | "draining" | "stopped" | "failed" | "unknown";
7
- export type GjcTeamShutdownMode = "graceful" | "force" | "abort";
3
+ import type { GjcTeamApiClaimResult, GjcTeamMailboxDeliveryTransport, GjcTeamNotification, GjcTeamNotificationSummary, GjcTeamTask, GjcTeamTaskMetadataInput, GjcTeamTaskStatus } from "./team-store";
4
+ export type { GjcTeamApiClaimResult, GjcTeamMailboxDeliveryInput, GjcTeamMailboxDeliveryResult, GjcTeamMailboxDeliveryTransport, GjcTeamMailboxDeliveryTransportKind, GjcTeamNotification, GjcTeamNotificationDeliveryState, GjcTeamNotificationSummary, GjcTeamPaneAttemptResult, GjcTeamTask, GjcTeamTaskClaim, GjcTeamTaskMetadataInput, GjcTeamTaskStatus, } from "./team-store";
8
5
  export declare const GJC_TEAM_DEFAULT_WORKERS = 3;
9
6
  export declare const GJC_TEAM_MAX_WORKERS = 20;
10
7
  export type GjcTeamWorkerCli = "gjc";
@@ -31,53 +28,10 @@ export interface GjcTeamWorker {
31
28
  worktree_base_ref?: string;
32
29
  team_state_root?: string;
33
30
  }
34
- export interface GjcTeamTaskClaim {
35
- owner: string;
36
- token: string;
37
- leased_until: string;
38
- }
39
- export type GjcTeamTaskCompletionEvidenceKind = "command" | "inspection" | "artifact";
40
- export type GjcTeamTaskCompletionEvidenceStatus = "passed" | "failed" | "not_run" | "verified" | "rejected";
41
- export interface GjcTeamTaskCompletionEvidenceItem {
42
- kind: GjcTeamTaskCompletionEvidenceKind;
43
- status: GjcTeamTaskCompletionEvidenceStatus;
44
- summary: string;
45
- command?: string;
46
- artifact?: string;
47
- location?: string;
48
- output?: string;
49
- }
50
- export interface GjcTeamTaskCompletionEvidence {
51
- summary: string;
52
- items: GjcTeamTaskCompletionEvidenceItem[];
53
- files?: string[];
54
- notes?: string;
55
- recorded_by: string;
56
- recorded_at: string;
57
- }
58
- export interface GjcTeamTask {
59
- id: string;
60
- subject: string;
61
- description: string;
62
- title: string;
63
- objective: string;
64
- status: GjcTeamTaskStatus;
65
- assignee?: string;
66
- owner?: string;
67
- result?: string;
68
- completion_evidence?: GjcTeamTaskCompletionEvidence;
69
- error?: string;
70
- blocked_by?: string[];
71
- depends_on?: string[];
72
- lane?: string;
73
- required_role?: string;
74
- allowed_roles?: string[];
75
- version: number;
76
- claim?: GjcTeamTaskClaim;
77
- created_at: string;
78
- updated_at: string;
79
- completed_at?: string;
80
- }
31
+ export type GjcTeamPhase = "starting" | "running" | "awaiting_integration" | "complete" | "failed" | "cancelled";
32
+ export type GjcWorkerStatusState = "idle" | "working" | "blocked" | "done" | "failed" | "draining" | "unknown";
33
+ export type GjcTeamWorkerLifecycleState = "starting" | "ready" | "working" | "draining" | "stopped" | "failed" | "unknown";
34
+ export type GjcTeamShutdownMode = "graceful" | "force" | "abort";
81
35
  export type GjcTeamWorktreeMode = {
82
36
  enabled: false;
83
37
  } | {
@@ -98,6 +52,7 @@ export interface GjcTeamConfig {
98
52
  worker_count: number;
99
53
  max_workers: number;
100
54
  state_root: string;
55
+ gjc_session_id?: string;
101
56
  worker_command: string;
102
57
  worker_cli_plan: GjcTeamWorkerCli[];
103
58
  tmux_command: string;
@@ -144,55 +99,6 @@ export interface GjcTeamWorkerLifecycle {
144
99
  shutdown_ack_status?: string;
145
100
  shutdown_mode?: GjcTeamShutdownMode;
146
101
  }
147
- export type GjcTeamNotificationDeliveryState = "pending" | "sent" | "queued" | "deferred" | "failed" | "delivered" | "acknowledged";
148
- export type GjcTeamPaneAttemptResult = "sent" | "queued" | "deferred" | "failed";
149
- export type GjcTeamMailboxDeliveryTransportKind = "sdk" | "pane";
150
- export interface GjcTeamNotification {
151
- id: string;
152
- kind: "mailbox_message" | "worker_lifecycle" | "invalid_attempt";
153
- team_name: string;
154
- recipient: string;
155
- source: {
156
- type: "message" | "task" | "worker" | "event";
157
- id: string;
158
- };
159
- idempotency_key?: string;
160
- delivery_state: GjcTeamNotificationDeliveryState;
161
- pane_attempt_result?: GjcTeamPaneAttemptResult;
162
- pane_attempt_reason?: string;
163
- pane_attempt_at?: string;
164
- created_at: string;
165
- updated_at: string;
166
- replay_count: number;
167
- }
168
- export interface GjcTeamMailboxDeliveryInput {
169
- team_name: string;
170
- state_dir: string;
171
- config: GjcTeamConfig;
172
- notification: GjcTeamNotification;
173
- message: GjcTeamMailboxMessage;
174
- cwd: string;
175
- env: NodeJS.ProcessEnv;
176
- }
177
- export type GjcTeamMailboxDeliveryResult = {
178
- transport: "sdk";
179
- state: GjcTeamNotificationDeliveryState;
180
- reason?: string;
181
- } | {
182
- transport: "pane";
183
- state: GjcTeamPaneAttemptResult;
184
- reason?: string;
185
- };
186
- export interface GjcTeamMailboxDeliveryTransport {
187
- deliverMailboxMessage(input: GjcTeamMailboxDeliveryInput): Promise<GjcTeamMailboxDeliveryResult | null>;
188
- }
189
- export declare function setGjcTeamMailboxDeliveryTransport(transport: GjcTeamMailboxDeliveryTransport | undefined): () => void;
190
- export declare function setGjcTeamMailboxDeliveryTransportForTest(transport: GjcTeamMailboxDeliveryTransport | undefined): () => void;
191
- export interface GjcTeamNotificationSummary {
192
- total: number;
193
- replay_eligible: number;
194
- by_state: Record<GjcTeamNotificationDeliveryState, number>;
195
- }
196
102
  export interface GjcTeamSnapshot {
197
103
  team_name: string;
198
104
  display_name: string;
@@ -224,13 +130,6 @@ export interface GjcTeamStartOptions {
224
130
  platform?: NodeJS.Platform;
225
131
  mailboxDeliveryTransport?: GjcTeamMailboxDeliveryTransport;
226
132
  }
227
- export interface GjcTeamApiClaimResult {
228
- ok: boolean;
229
- task?: GjcTeamTask;
230
- worker_id?: string;
231
- claim_token?: string;
232
- reason?: string;
233
- }
234
133
  export type GjcTeamLivenessRecoveryReason = "claim_expired" | "stale_heartbeat" | "missing_pane" | "worker_lifecycle_failed" | "worker_lifecycle_stopped";
235
134
  export interface GjcTeamRecoveredClaim {
236
135
  task_id: string;
@@ -276,13 +175,13 @@ export interface GjcTeamTraceEvent {
276
175
  evidence_refs?: string[];
277
176
  data?: Record<string, unknown>;
278
177
  }
279
- interface WorkerStatusFile {
178
+ export interface WorkerStatusFile {
280
179
  state: GjcWorkerStatusState;
281
180
  current_task_id?: string;
282
181
  reason?: string;
283
182
  updated_at: string;
284
183
  }
285
- interface WorkerHeartbeatFile {
184
+ export interface WorkerHeartbeatFile {
286
185
  pid: number;
287
186
  last_turn_at: string;
288
187
  turn_count: number;
@@ -297,7 +196,19 @@ export interface GjcWorkerIntegrationAttemptRequestResult {
297
196
  head?: string | null;
298
197
  status?: GjcWorkerCheckpointClassification["kind"];
299
198
  }
199
+ export interface GjcWorkerIntegrationAttemptOptions {
200
+ signal?: AbortSignal;
201
+ }
300
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 interface GjcTeamRuntimeTestSeams {
204
+ nowMs?: () => number;
205
+ continuationTmuxDispatch?: (command: string, args: readonly string[]) => {
206
+ exitCode?: number;
207
+ };
208
+ continuationBeforeDispatch?: () => Promise<void>;
209
+ }
210
+ /** @internal Test-only seam; production code leaves the real clock and tmux dispatch intact. */
211
+ export declare function __setGjcTeamRuntimeTestSeamsForTests(seams: GjcTeamRuntimeTestSeams | undefined): void;
301
212
  export declare function resolveGjcTeamStateRoot(cwd?: string, env?: NodeJS.ProcessEnv): string;
302
213
  /** @internal */
303
214
  export declare function listTeamWorkerGcRecords(teamRoot: string, probe: GcPidProbe): Promise<GcRecord[]>;
@@ -305,7 +216,6 @@ export declare function listTeamWorkerGcRecords(teamRoot: string, probe: GcPidPr
305
216
  export declare function pruneTeamWorkerGcRecord(record: GcRecord, probe: GcPidProbe): Promise<boolean>;
306
217
  export declare function persistGjcTeamModeStateSummary(snapshot: GjcTeamSnapshot, cwd?: string): Promise<void>;
307
218
  export declare function recoverGjcTeamStaleClaims(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamLivenessRecoveryResult>;
308
- type GjcTeamTaskMetadataInput = Partial<Pick<GjcTeamTask, "owner" | "lane" | "required_role" | "allowed_roles" | "depends_on" | "blocked_by">>;
309
219
  export declare function resolveWorkerWorktreePath(input: {
310
220
  repoRoot: string;
311
221
  stateDir: string;
@@ -315,8 +225,7 @@ export declare function resolveWorkerWorktreePath(input: {
315
225
  isPsmux: boolean;
316
226
  }): string;
317
227
  export declare function resolveGjcWorkerCommand(cwd?: string, env?: NodeJS.ProcessEnv, platform?: NodeJS.Platform, argv?: string[], execPath?: string): string;
318
- /** @internal Exported for unit tests. */
319
- export declare function buildWorkerCommand(config: GjcTeamConfig, worker: GjcTeamWorker, platform?: NodeJS.Platform): string;
228
+ export { buildWorkerCommand } from "./team-launch";
320
229
  export type GjcWorkerCheckpointClassification = {
321
230
  kind: "clean";
322
231
  files: string[];
@@ -339,11 +248,11 @@ export declare function classifyGjcTeamCheckpointFiles(files: string[]): {
339
248
  protected: string[];
340
249
  };
341
250
  export declare function classifyWorkerCheckpointStatus(cwd: string): GjcWorkerCheckpointClassification;
342
- export declare function classifyWorkerCheckpointStatusAsync(cwd: string): Promise<GjcWorkerCheckpointClassification>;
251
+ export declare function classifyWorkerCheckpointStatusAsync(cwd: string, signal?: AbortSignal): Promise<GjcWorkerCheckpointClassification>;
343
252
  export declare function startGjcTeam(options: GjcTeamStartOptions): Promise<GjcTeamSnapshot>;
344
253
  export declare function readGjcTeamSnapshot(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv, options?: GjcTeamSnapshotOptions): Promise<GjcTeamSnapshot>;
345
254
  export declare function monitorGjcTeamSnapshot(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamSnapshot>;
346
- export declare function requestGjcWorkerIntegrationAttempt(cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcWorkerIntegrationAttemptRequestResult>;
255
+ export declare function requestGjcWorkerIntegrationAttempt(cwd?: string, env?: NodeJS.ProcessEnv, options?: GjcWorkerIntegrationAttemptOptions): Promise<GjcWorkerIntegrationAttemptRequestResult>;
347
256
  export declare function buildTeamHudSummary(snapshot: GjcTeamSnapshot, latestEvent?: GjcTeamEvent, latestMessage?: GjcTeamMailboxMessage): Promise<WorkflowHudSummary>;
348
257
  export declare function monitorGjcTeam(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamSnapshot>;
349
258
  export declare function listGjcTeams(cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamSnapshot[]>;
@@ -356,17 +265,17 @@ export declare function claimGjcTeamTask(teamName: string, workerId: string, cwd
356
265
  export declare function transitionGjcTeamTaskStatus(teamName: string, taskId: string, status: GjcTeamTaskStatus, cwd?: string, env?: NodeJS.ProcessEnv, claimToken?: string, workerId?: string, completionEvidenceInput?: unknown): Promise<GjcTeamTask>;
357
266
  export declare function transitionGjcTeamTask(teamName: string, taskId: string, status: GjcTeamTaskStatus | "complete", cwd?: string, env?: NodeJS.ProcessEnv, claimToken?: string, completionEvidenceInput?: unknown): Promise<GjcTeamTask>;
358
267
  export declare function releaseGjcTeamTaskClaim(teamName: string, taskId: string, claimToken: string, workerId: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamTask>;
359
- export declare function replayGjcTeamNotifications(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<{
268
+ export declare function replayGjcTeamNotifications(teamName: string, cwd?: string, env?: NodeJS.ProcessEnv, transport?: GjcTeamMailboxDeliveryTransport): Promise<{
360
269
  notifications: GjcTeamNotification[];
361
270
  summary: GjcTeamNotificationSummary;
362
271
  }>;
363
- export declare function sendGjcTeamMessage(teamName: string, fromWorker: string, toWorker: string, body: string, cwd?: string, env?: NodeJS.ProcessEnv, idempotencyKey?: string): Promise<GjcTeamMailboxMessage>;
272
+ export declare function sendGjcTeamMessage(teamName: string, fromWorker: string, toWorker: string, body: string, cwd?: string, env?: NodeJS.ProcessEnv, idempotencyKey?: string, transport?: GjcTeamMailboxDeliveryTransport): Promise<GjcTeamMailboxMessage>;
364
273
  export declare function broadcastGjcTeamMessage(teamName: string, fromWorker: string, body: string, cwd?: string, env?: NodeJS.ProcessEnv, idempotencyKey?: string): Promise<GjcTeamMailboxMessage[]>;
365
274
  export declare function listGjcTeamMailbox(teamName: string, worker: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamMailboxMessage[]>;
366
275
  export declare function markGjcTeamMailboxMessage(teamName: string, worker: string, messageId: string, field: "delivered_at" | "notified_at", cwd?: string, env?: NodeJS.ProcessEnv): Promise<GjcTeamMailboxMessage>;
367
- export declare function readGjcWorkerStatus(teamName: string, worker: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<WorkerStatusFile>;
276
+ export declare const readGjcWorkerStatus: (teamName: string, worker: string, cwd?: string, env?: NodeJS.ProcessEnv) => Promise<WorkerStatusFile>;
368
277
  export declare function updateGjcWorkerStatus(teamName: string, worker: string, status: GjcWorkerStatusState, cwd?: string, env?: NodeJS.ProcessEnv, currentTaskId?: string, reason?: string): Promise<WorkerStatusFile>;
369
- export declare function readGjcWorkerHeartbeat(teamName: string, worker: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<WorkerHeartbeatFile | null>;
278
+ export declare const readGjcWorkerHeartbeat: (teamName: string, worker: string, cwd?: string, env?: NodeJS.ProcessEnv) => Promise<WorkerHeartbeatFile | null>;
370
279
  export declare function updateGjcWorkerHeartbeat(teamName: string, worker: string, heartbeat: WorkerHeartbeatFile, cwd?: string, env?: NodeJS.ProcessEnv): Promise<WorkerHeartbeatFile>;
371
280
  export declare function writeGjcWorkerInbox(teamName: string, worker: string, content: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<{
372
281
  path: string;
@@ -384,7 +293,6 @@ export declare function readGjcMonitorSnapshot(teamName: string, cwd?: string, e
384
293
  export declare function writeGjcTaskApproval(teamName: string, taskId: string, approval: Record<string, unknown>, cwd?: string, env?: NodeJS.ProcessEnv): Promise<Record<string, unknown>>;
385
294
  export declare function readGjcTaskApproval(teamName: string, taskId: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<Record<string, unknown> | null>;
386
295
  export declare function writeGjcShutdownRequest(teamName: string, worker: string, requestedBy: string, cwd?: string, env?: NodeJS.ProcessEnv, requestId?: string, mode?: GjcTeamShutdownMode, requestedAt?: string): Promise<Record<string, unknown>>;
387
- export declare function readGjcShutdownAck(teamName: string, worker: string, cwd?: string, env?: NodeJS.ProcessEnv): Promise<Record<string, unknown> | null>;
296
+ export declare const readGjcShutdownAck: (teamName: string, worker: string, cwd?: string, env?: NodeJS.ProcessEnv) => Promise<Record<string, unknown> | null>;
388
297
  export declare function executeGjcTeamApiOperation(operation: string, input: Record<string, unknown>, cwd?: string, env?: NodeJS.ProcessEnv): Promise<unknown>;
389
298
  export declare function parseTeamLaunchArgs(argv: string[]): GjcTeamStartOptions;
390
- export {};
@@ -0,0 +1,160 @@
1
+ import type { GjcTeamConfig, GjcTeamMailboxMessage } from "./team-runtime";
2
+ export type GjcTeamNotificationDeliveryState = "pending" | "sent" | "queued" | "deferred" | "failed" | "delivered" | "acknowledged";
3
+ export type GjcTeamPaneAttemptResult = "sent" | "queued" | "deferred" | "failed";
4
+ export type GjcTeamMailboxDeliveryTransportKind = "sdk" | "pane";
5
+ export interface GjcTeamNotification {
6
+ id: string;
7
+ kind: "mailbox_message" | "worker_lifecycle" | "invalid_attempt";
8
+ team_name: string;
9
+ recipient: string;
10
+ source: {
11
+ type: "message" | "task" | "worker" | "event";
12
+ id: string;
13
+ };
14
+ idempotency_key?: string;
15
+ delivery_state: GjcTeamNotificationDeliveryState;
16
+ pane_attempt_result?: GjcTeamPaneAttemptResult;
17
+ pane_attempt_reason?: string;
18
+ pane_attempt_at?: string;
19
+ created_at: string;
20
+ updated_at: string;
21
+ replay_count: number;
22
+ }
23
+ export interface GjcTeamNotificationSummary {
24
+ total: number;
25
+ replay_eligible: number;
26
+ by_state: Record<GjcTeamNotificationDeliveryState, number>;
27
+ }
28
+ export interface GjcTeamMailboxDeliveryInput {
29
+ team_name: string;
30
+ state_dir: string;
31
+ config: GjcTeamConfig;
32
+ notification: GjcTeamNotification;
33
+ message: GjcTeamMailboxMessage;
34
+ cwd: string;
35
+ env: NodeJS.ProcessEnv;
36
+ }
37
+ export type GjcTeamMailboxDeliveryResult = {
38
+ transport: "sdk";
39
+ state: GjcTeamNotificationDeliveryState;
40
+ reason?: string;
41
+ } | {
42
+ transport: "pane";
43
+ state: GjcTeamPaneAttemptResult;
44
+ reason?: string;
45
+ };
46
+ export interface GjcTeamMailboxDeliveryTransport {
47
+ deliverMailboxMessage(input: GjcTeamMailboxDeliveryInput): Promise<GjcTeamMailboxDeliveryResult | null>;
48
+ }
49
+ export type GjcTeamTaskStatus = "pending" | "blocked" | "in_progress" | "completed" | "failed";
50
+ export interface GjcTeamTaskClaim {
51
+ owner: string;
52
+ token: string;
53
+ leased_until: string;
54
+ }
55
+ export type GjcTeamTaskCompletionEvidenceKind = "command" | "inspection" | "artifact";
56
+ export type GjcTeamTaskCompletionEvidenceStatus = "passed" | "failed" | "not_run" | "verified" | "rejected";
57
+ export interface GjcTeamTaskCompletionEvidenceItem {
58
+ kind: GjcTeamTaskCompletionEvidenceKind;
59
+ status: GjcTeamTaskCompletionEvidenceStatus;
60
+ summary: string;
61
+ command?: string;
62
+ artifact?: string;
63
+ location?: string;
64
+ output?: string;
65
+ }
66
+ export interface GjcTeamTaskCompletionEvidence {
67
+ summary: string;
68
+ items: GjcTeamTaskCompletionEvidenceItem[];
69
+ files?: string[];
70
+ notes?: string;
71
+ recorded_by: string;
72
+ recorded_at: string;
73
+ }
74
+ export interface GjcTeamTask {
75
+ id: string;
76
+ subject: string;
77
+ description: string;
78
+ title: string;
79
+ objective: string;
80
+ status: GjcTeamTaskStatus;
81
+ assignee?: string;
82
+ owner?: string;
83
+ result?: string;
84
+ completion_evidence?: GjcTeamTaskCompletionEvidence;
85
+ error?: string;
86
+ blocked_by?: string[];
87
+ depends_on?: string[];
88
+ lane?: string;
89
+ required_role?: string;
90
+ allowed_roles?: string[];
91
+ version: number;
92
+ claim?: GjcTeamTaskClaim;
93
+ created_at: string;
94
+ updated_at: string;
95
+ completed_at?: string;
96
+ }
97
+ export type GjcTeamTaskMetadataInput = Partial<Pick<GjcTeamTask, "owner" | "lane" | "required_role" | "allowed_roles" | "depends_on" | "blocked_by">>;
98
+ export interface GjcTeamTaskWorker {
99
+ id: string;
100
+ role: string;
101
+ agent_type: string;
102
+ }
103
+ export interface GjcTeamApiClaimResult {
104
+ ok: boolean;
105
+ task?: GjcTeamTask;
106
+ worker_id?: string;
107
+ claim_token?: string;
108
+ reason?: string;
109
+ }
110
+ type EventAppender = (event: {
111
+ type: string;
112
+ task_id?: string;
113
+ worker?: string;
114
+ message: string;
115
+ data?: Record<string, unknown>;
116
+ }) => Promise<void>;
117
+ /** The sole strict schema gate for persisted task and claim authority records. */
118
+ export declare function isCanonicalPersistedGjcTeamTaskClaim(value: unknown): value is GjcTeamTaskClaim;
119
+ export declare function isCanonicalPersistedGjcTeamTask(value: unknown, fileId?: string): value is GjcTeamTask;
120
+ /**
121
+ * Serializes mutable team facts across processes. Callers must not re-enter this
122
+ * fence; use unlocked helpers when composing operations under one transaction.
123
+ */
124
+ export declare function withGjcTeamMutationFence<T>(dir: string, fn: () => Promise<T>): Promise<T>;
125
+ export declare function taskMetadataFromInput(input: Record<string, unknown>, includeOwner?: boolean): GjcTeamTaskMetadataInput;
126
+ export declare function normalizeGjcTeamTask(raw: GjcTeamTask): GjcTeamTask;
127
+ export declare function normalizeGjcTeamTaskCompletionEvidence(id: string, owner: string, input: unknown, recordedAt?: string): GjcTeamTaskCompletionEvidence;
128
+ export declare function getGjcTeamTaskCompletionEvidenceFailure(task: GjcTeamTask): string | null;
129
+ export declare const isGjcTeamTaskCompletionVerified: (task: GjcTeamTask) => boolean;
130
+ export declare function readGjcTeamTasksFromDir(dir: string): Promise<GjcTeamTask[]>;
131
+ declare const teamTaskMutationCapability: unique symbol;
132
+ /**
133
+ * This is intentionally structural only: callers can invoke methods supplied by
134
+ * `withGjcTeamTaskMutation`, but cannot create an active capability. Each method
135
+ * closes over a private brand and is revoked when that callback settles.
136
+ */
137
+ export interface GjcTeamTaskMutationCapability {
138
+ create(subject: string, description: string, options: GjcTeamTaskMetadataInput): Promise<GjcTeamTask>;
139
+ update(id: string, updates: Partial<Pick<GjcTeamTask, "subject" | "description" | "blocked_by" | "depends_on" | "lane" | "required_role" | "allowed_roles">>): Promise<GjcTeamTask>;
140
+ claim(worker: GjcTeamTaskWorker, id?: string): Promise<GjcTeamApiClaimResult>;
141
+ transition(id: string, status: GjcTeamTaskStatus, token?: string, workerId?: string, evidenceInput?: unknown): Promise<GjcTeamTask>;
142
+ release(id: string, token: string, workerId: string): Promise<GjcTeamTask>;
143
+ writeRecovered(task: GjcTeamTask): Promise<void>;
144
+ }
145
+ export declare function withGjcTeamTaskMutation<T>(store: GjcTeamTaskStore, fn: (capability: GjcTeamTaskMutationCapability) => Promise<T>): Promise<T>;
146
+ export declare class GjcTeamTaskStore {
147
+ #private;
148
+ readonly dir: string;
149
+ readonly appendEvent: EventAppender;
150
+ constructor(dir: string, appendEvent: EventAppender);
151
+ withMutationCapability<T>(capabilityBrand: typeof teamTaskMutationCapability, fn: (capability: GjcTeamTaskMutationCapability) => Promise<T>): Promise<T>;
152
+ list(): Promise<GjcTeamTask[]>;
153
+ read(id: string): Promise<GjcTeamTask>;
154
+ create(subject: string, description: string, options: GjcTeamTaskMetadataInput): Promise<GjcTeamTask>;
155
+ update(id: string, updates: Partial<Pick<GjcTeamTask, "subject" | "description" | "blocked_by" | "depends_on" | "lane" | "required_role" | "allowed_roles">>): Promise<GjcTeamTask>;
156
+ claim(worker: GjcTeamTaskWorker, id?: string): Promise<GjcTeamApiClaimResult>;
157
+ transition(id: string, status: GjcTeamTaskStatus, token?: string, workerId?: string, evidenceInput?: unknown): Promise<GjcTeamTask>;
158
+ release(id: string, token: string, workerId: string): Promise<GjcTeamTask>;
159
+ }
160
+ export {};