@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
@@ -0,0 +1,65 @@
1
+ import type { CompactionOutcome } from "@gajae-code/agent-core/compaction";
2
+ import { Container, type KeyId } from "@gajae-code/tui";
3
+ import { type PlanApprovalDetails } from "../../plan-mode/approved-plan";
4
+ import type { AgentSession } from "../../session/agent-session";
5
+ import type { SessionContext, SessionManager } from "../../session/session-manager";
6
+ import { type PlanPreviewOptions, type PlanPreviewResult } from "../components/plan-preview-overlay";
7
+ import type { SubmittedUserInput } from "../types";
8
+ import type { ModeGate } from "./mode-gate";
9
+ type PlanModeControllerContext = {
10
+ readonly session: AgentSession;
11
+ readonly sessionManager: SessionManager;
12
+ readonly modeGate: ModeGate;
13
+ readonly chatContainer: Container;
14
+ readonly inputCallback: ((input: SubmittedUserInput) => void) | undefined;
15
+ readonly externalEditorKey: string | undefined;
16
+ readonly externalEditorKeys: readonly KeyId[];
17
+ startPendingSubmission(input: {
18
+ text: string;
19
+ }): SubmittedUserInput;
20
+ addChatChild(child: Container): void;
21
+ requestRender(full?: boolean): void;
22
+ stopUi(): void;
23
+ startUi(): void;
24
+ showStatus(message: string): void;
25
+ showWarning(message: string): void;
26
+ showError(message: string): void;
27
+ showHookConfirm(title: string, message: string): Promise<boolean>;
28
+ showPlanPreview(content: string | null, options?: PlanPreviewOptions): Promise<PlanPreviewResult>;
29
+ flushCompactionQueue(options?: {
30
+ willRetry?: boolean;
31
+ }): Promise<void>;
32
+ updatePlanModeStatus(status: {
33
+ enabled: boolean;
34
+ paused: boolean;
35
+ } | undefined): void;
36
+ handleClearCommand(): Promise<boolean>;
37
+ handleCompactCommand(instructions?: string): Promise<CompactionOutcome>;
38
+ updateEditorChrome(): void;
39
+ };
40
+ /** Owns plan-mode state, model scope, plan review, approval, and restoration. */
41
+ export declare class PlanModeController {
42
+ #private;
43
+ private readonly ctx;
44
+ constructor(ctx: PlanModeControllerContext);
45
+ get enabled(): boolean;
46
+ get paused(): boolean;
47
+ get planFilePath(): string | undefined;
48
+ setEnabledForCompatibility(enabled: boolean): void;
49
+ setPausedForCompatibility(paused: boolean): void;
50
+ setPlanFilePathForCompatibility(planFilePath: string | undefined): void;
51
+ clearReview(): void;
52
+ restoreFromSession(sessionContext: SessionContext): Promise<void>;
53
+ enter(options?: {
54
+ planFilePath?: string;
55
+ workflow?: "parallel" | "iterative";
56
+ }): Promise<void>;
57
+ exit(options?: {
58
+ silent?: boolean;
59
+ paused?: boolean;
60
+ }): Promise<void>;
61
+ flushPendingModelSwitch(): Promise<void>;
62
+ handleCommand(initialPrompt?: string): Promise<void>;
63
+ handleApproval(details: PlanApprovalDetails): Promise<void>;
64
+ }
65
+ export {};
@@ -1,4 +1,4 @@
1
- import type { Component } from "@gajae-code/tui";
1
+ import type { Component, SlashCommand } from "@gajae-code/tui";
2
2
  import type { ModelProfileConfig } from "../../config/models-config-schema";
3
3
  import { type Settings } from "../../config/settings";
4
4
  import type { InteractiveModeContext, OAuthSelectorOptions } from "../../modes/types";
@@ -8,10 +8,14 @@ import { buildNotificationStatusReport, checkNotificationHealth, recoverNotifica
8
8
  import { ensureTelegramDaemonRunningDetailed, unregisterNotificationRoot } from "../../sdk/bus/telegram-daemon";
9
9
  import { runTelegramSetup } from "../../sdk/bus/telegram-setup";
10
10
  import { type CredentialAutoImportStateStore } from "../../setup/credential-auto-import";
11
+ import { type CommandPaletteAction } from "../components/command-palette";
11
12
  import type { NotificationsEditorOperations } from "../components/notifications-settings-editor";
12
- import type { StatusLineSettings } from "../components/status-line";
13
+ import { type PlanPreviewOptions, type PlanPreviewResult } from "../components/plan-preview-overlay";
14
+ import type { StatusLineSettings } from "../components/tool-status-header";
13
15
  import type { JobsObserver } from "../jobs-observer";
14
16
  import type { SessionObserverRegistry } from "../session-observer-registry";
17
+ import type { TasksAggregator } from "../tasks-aggregator";
18
+ import type { TranscriptItemRegistry } from "../transcript-item-registry";
15
19
  /**
16
20
  * Snapshot the persisted status-line settings that the status-line component
17
21
  * cares about. Preview, cancel-restore, and commit paths all share this so the
@@ -48,7 +52,10 @@ export declare function createNotificationsEditorOperations(ctx: NotificationsEd
48
52
  export declare class SelectorController {
49
53
  #private;
50
54
  private ctx;
51
- constructor(ctx: InteractiveModeContext, credentialAutoImportStateStore?: CredentialAutoImportStateStore);
55
+ private readonly clipboard;
56
+ constructor(ctx: InteractiveModeContext, credentialAutoImportStateStore?: CredentialAutoImportStateStore, clipboard?: (text: string) => void);
57
+ isTranscriptViewerOpen(): boolean;
58
+ refreshTranscriptViewer(identityMap?: ReadonlyMap<string, string>): void;
52
59
  /**
53
60
  * Shows a selector component in place of the editor.
54
61
  * @param create Factory that receives a `done` callback and returns the component and focus target
@@ -57,6 +64,7 @@ export declare class SelectorController {
57
64
  component: Component;
58
65
  focus: Component;
59
66
  }): void;
67
+ showCommandPalette(commands: SlashCommand[], actions: CommandPaletteAction[], executeSlashCommand: (name: string) => Promise<void>): void;
60
68
  showProviderOnboarding(): void;
61
69
  showCustomModelPresetWizard(snapshot: ModelProfileConfig): void;
62
70
  showCustomProviderWizard(): void;
@@ -92,6 +100,9 @@ export declare class SelectorController {
92
100
  showOAuthSelector(mode: "login" | "logout", providerId?: string, options?: OAuthSelectorOptions): Promise<void>;
93
101
  showDebugSelector(): void;
94
102
  showSessionObserver(registry: SessionObserverRegistry): void;
103
+ showSessionsDashboard(): Promise<void>;
104
+ showTranscriptViewer(registry: TranscriptItemRegistry): void;
105
+ showPlanPreview(content: string | null, options?: PlanPreviewOptions): Promise<PlanPreviewResult>;
95
106
  /**
96
107
  * Jobs overlay: navigate ongoing monitor + cron jobs (Monitors then Crons,
97
108
  * newest-first), drill into per-type detail, and cancel/delete with a y/N
@@ -99,4 +110,5 @@ export declare class SelectorController {
99
110
  * stays on the active SelectList.
100
111
  */
101
112
  showJobsOverlay(observer: JobsObserver): void;
113
+ showTasksPane(aggregator: TasksAggregator): void;
102
114
  }
@@ -0,0 +1,26 @@
1
+ interface SttEditor {
2
+ cursorOverride: string | undefined;
3
+ cursorOverrideWidth: number | undefined;
4
+ getUseTerminalCursor(): boolean;
5
+ insertText(text: string): void;
6
+ setUseTerminalCursor(enabled: boolean): void;
7
+ }
8
+ interface SttUi {
9
+ getShowHardwareCursor(): boolean;
10
+ requestRender(): void;
11
+ setShowHardwareCursor(enabled: boolean): void;
12
+ }
13
+ export interface SttModeContext {
14
+ editor: SttEditor;
15
+ showStatus(message: string): void;
16
+ showWarning(message: string): void;
17
+ ui: SttUi;
18
+ updateEditorChrome(): void;
19
+ }
20
+ /** Coordinates STT state with the interactive composer presentation. */
21
+ export declare class SttModeController {
22
+ #private;
23
+ toggle(ctx: SttModeContext): Promise<void>;
24
+ dispose(ctx: Pick<SttModeContext, "editor" | "ui">): void;
25
+ }
26
+ export {};
@@ -1,14 +1,13 @@
1
1
  import { type Agent, type AgentMessage } from "@gajae-code/agent-core";
2
2
  import type { CompactionOutcome } from "@gajae-code/agent-core/compaction";
3
- import { type AssistantMessage, type ImageContent, type Message, type UsageReport } from "@gajae-code/ai";
4
- import type { Component, EditorTheme } from "@gajae-code/tui";
3
+ import type { AssistantMessage, ImageContent, Message, UsageReport } from "@gajae-code/ai";
4
+ import type { Component, EditorTheme, SlashCommand } from "@gajae-code/tui";
5
5
  import { Container, Loader, Spacer, Text, TUI } from "@gajae-code/tui";
6
6
  import { KeybindingsManager } from "../config/keybindings";
7
7
  import { type Settings } from "../config/settings";
8
8
  import type { ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetContent, ExtensionWidgetOptions } from "../extensibility/extensions";
9
9
  import type { CompactOptions } from "../extensibility/extensions/types";
10
10
  import { type Skill } from "../extensibility/skills";
11
- import { type PlanApprovalDetails } from "../plan-mode/approved-plan";
12
11
  import type { NotificationSessionReconcileResult, NotificationSessionStatus } from "../sdk/bus/session-control";
13
12
  import type { AgentSession, AgentSessionEvent } from "../session/agent-session";
14
13
  import { HistoryStorage } from "../session/history-storage";
@@ -17,19 +16,22 @@ import type { LspStartupServerInfo } from "../tools";
17
16
  import type { EventBus } from "../utils/event-bus";
18
17
  import type { AssistantMessageComponent } from "./components/assistant-message";
19
18
  import type { BashExecutionComponent } from "./components/bash-execution";
19
+ import type { CommandPaletteAction } from "./components/command-palette";
20
20
  import { CustomEditor } from "./components/custom-editor";
21
21
  import type { EvalExecutionComponent } from "./components/eval-execution";
22
22
  import { GajaePetWidget, type PetMode } from "./components/gajae-pet-widget";
23
23
  import type { HookEditorComponent } from "./components/hook-editor";
24
24
  import type { HookInputComponent } from "./components/hook-input";
25
25
  import type { HookSelectorComponent } from "./components/hook-selector";
26
- import { StatusLineComponent } from "./components/status-line";
27
26
  import type { ToolExecutionHandle } from "./components/tool-execution";
27
+ import { StatusLineComponent } from "./components/tool-status-header";
28
28
  import { type WelcomeLogoMode } from "./components/welcome";
29
+ import { GoalModeController } from "./controllers/goal-mode-controller";
30
+ import { PlanModeController } from "./controllers/plan-mode-controller";
29
31
  import { IrcObservationLedger } from "./irc-observation-ledger";
30
32
  import { OAuthManualInputManager } from "./oauth-manual-input";
31
33
  import type { Theme } from "./theme/theme";
32
- import type { CompactionQueuedMessage, InteractiveModeContext, IrcArrivalSnapshot, SubmittedUserInput, TodoItem, TodoPhase, TranscriptRebuildPolicy } from "./types";
34
+ import { type CompactionQueuedMessage, type ComposerSubmissionOptions, type InteractiveModeContext, type IrcArrivalSnapshot, type SubmittedUserInput, type TodoItem, type TodoPhase, type TranscriptRebuildPolicy } from "./types";
33
35
  import type { ParsedIrcMessage } from "./utils/irc-message";
34
36
  export declare const DEFAULT_COMPOSER_PLACEHOLDER: string;
35
37
  export declare function getWelcomeTranscriptReservedRows(chatContainer: Container, width: number): number;
@@ -76,11 +78,6 @@ export declare class InteractiveMode implements InteractiveModeContext {
76
78
  isBashNoContext: boolean;
77
79
  toolOutputExpanded: boolean;
78
80
  todoExpanded: boolean;
79
- planModeEnabled: boolean;
80
- planModePaused: boolean;
81
- goalModeEnabled: boolean;
82
- goalModePaused: boolean;
83
- planModePlanFilePath: string | undefined;
84
81
  todoPhases: TodoPhase[];
85
82
  hideThinkingBlock: boolean;
86
83
  pendingImages: ImageContent[];
@@ -119,10 +116,14 @@ export declare class InteractiveMode implements InteractiveModeContext {
119
116
  oauthManualInput: OAuthManualInputManager;
120
117
  readonly lspServers: LspStartupServerInfo[] | undefined;
121
118
  mcpManager?: import("../runtime-mcp").MCPManager;
119
+ /** Direct controller capabilities for consumers that coordinate mode transitions. */
120
+ get planModeController(): PlanModeController;
121
+ get goalModeController(): GoalModeController;
122
122
  constructor(session: AgentSession, version: string, changelogMarkdown?: string | undefined, setToolUIContext?: (uiContext: ExtensionUIContext, hasUI: boolean) => void, lspServers?: LspStartupServerInfo[] | undefined, mcpManager?: import("../runtime-mcp").MCPManager, eventBus?: EventBus);
123
123
  getCurrentSessionNotificationStatus(): NotificationSessionStatus | undefined;
124
124
  setCurrentSessionNotificationsEnabled(enabled: boolean): Promise<NotificationSessionReconcileResult | undefined>;
125
125
  init(): Promise<void>;
126
+ getSlashCommands(): readonly SlashCommand[];
126
127
  /** Reload slash commands and autocomplete for the provided working directory. */
127
128
  refreshSlashCommandState(cwd?: string): Promise<void>;
128
129
  getUserInput(): Promise<SubmittedUserInput>;
@@ -135,7 +136,7 @@ export declare class InteractiveMode implements InteractiveModeContext {
135
136
  images?: ImageContent[];
136
137
  customType?: string;
137
138
  display?: boolean;
138
- }): SubmittedUserInput;
139
+ }, options?: ComposerSubmissionOptions): SubmittedUserInput;
139
140
  cancelPendingSubmission(): boolean;
140
141
  markPendingSubmissionStarted(input: SubmittedUserInput): boolean;
141
142
  finishPendingSubmission(input: SubmittedUserInput): void;
@@ -147,11 +148,6 @@ export declare class InteractiveMode implements InteractiveModeContext {
147
148
  commitPetPreviewMode(mode: PetMode): boolean;
148
149
  restoreComposer(): void;
149
150
  rebuildChatFromMessages(policy: TranscriptRebuildPolicy): void;
150
- /** Apply any deferred model switch after the current stream ends. */
151
- flushPendingModelSwitch(): Promise<void>;
152
- handlePlanModeCommand(initialPrompt?: string): Promise<void>;
153
- handleGoalModeCommand(rest?: string): Promise<void>;
154
- handlePlanApproval(details: PlanApprovalDetails): Promise<void>;
155
151
  stop(): void;
156
152
  shutdown(): Promise<void>;
157
153
  checkShutdownRequested(): Promise<void>;
@@ -171,7 +167,7 @@ export declare class InteractiveMode implements InteractiveModeContext {
171
167
  showNewVersionNotification(newVersion: string): void;
172
168
  clearEditor(): void;
173
169
  updatePendingMessagesDisplay(): void;
174
- queueCompactionMessage(text: string, mode: "steer" | "followUp"): void;
170
+ queueCompactionMessage(text: string, mode: "steer" | "followUp", options?: ComposerSubmissionOptions): void;
175
171
  flushCompactionQueue(options?: {
176
172
  willRetry?: boolean;
177
173
  }): Promise<void>;
@@ -211,9 +207,9 @@ export declare class InteractiveMode implements InteractiveModeContext {
211
207
  handleHelpCommand(): void;
212
208
  handleToolsCommand(): void;
213
209
  handleContextCommand(): void;
214
- handleClearCommand(): Promise<void>;
210
+ handleClearCommand(): Promise<boolean>;
215
211
  handleContextClearCommand(): Promise<void>;
216
- handleDropCommand(): Promise<void>;
212
+ handleDropCommand(): Promise<boolean>;
217
213
  handleForkCommand(): Promise<void>;
218
214
  handleMoveCommand(targetPath: string): Promise<void>;
219
215
  handleRenameCommand(title: string): Promise<void>;
@@ -221,7 +217,12 @@ export declare class InteractiveMode implements InteractiveModeContext {
221
217
  handleSTTToggle(): Promise<void>;
222
218
  showDebugSelector(): void;
223
219
  showSessionObserver(): void;
220
+ showSessionsDashboard(): void;
221
+ isTranscriptViewerOpen(): boolean;
222
+ refreshTranscriptViewer(): void;
223
+ showTranscriptViewer(): void;
224
224
  showJobsOverlay(): void;
225
+ showTasksPane(): void;
225
226
  resetObserverRegistry(): void;
226
227
  handleBashCommand(command: string, excludeFromContext?: boolean): Promise<void>;
227
228
  handlePythonCommand(code: string, excludeFromContext?: boolean): Promise<void>;
@@ -232,6 +233,7 @@ export declare class InteractiveMode implements InteractiveModeContext {
232
233
  handleContributionPrepCommand(customInstructions?: string): Promise<void>;
233
234
  executeCompaction(customInstructionsOrOptions?: string | CompactOptions, isAuto?: boolean): Promise<CompactionOutcome>;
234
235
  openInBrowser(urlOrPath: string): void;
236
+ showCommandPalette(commands: SlashCommand[], actions: CommandPaletteAction[], executeSlashCommand: (name: string) => Promise<void>): void;
235
237
  showSettingsSelector(): void;
236
238
  showThemeSelector(): void;
237
239
  showPetSelector(): void;
@@ -27,6 +27,8 @@ export interface CronJobView {
27
27
  prompt: string;
28
28
  recurring: boolean;
29
29
  nextFireAt?: number;
30
+ /** A cron firing whose spawned job is currently running. */
31
+ firing?: boolean;
30
32
  createdAt: number;
31
33
  }
32
34
  export interface JobsSnapshot {
@@ -10,17 +10,8 @@
10
10
  * This is the pure mapping primitive used by SDK-native workflow gate emitters.
11
11
  */
12
12
  import type { OpenGateInput } from "./workflow-gate-broker";
13
- import type { WorkflowGateKind, WorkflowStage } from "./workflow-gate-types";
14
- /** "Other (type your own)" sentinel, mirroring the interactive ask tool. */
15
- export declare const GATE_OTHER_OPTION = "Other (type your own)";
16
- /** Optional structured deep-interview round metadata supplied by the agent. */
17
- export interface AskGateDeepInterviewState {
18
- round_id?: string;
19
- round: number;
20
- component: string;
21
- dimension: string;
22
- ambiguity: number;
23
- }
13
+ import { type AskGateDeepInterviewState, type WorkflowGateKind, type WorkflowStage } from "./workflow-gate-types";
14
+ export { type AskGateDeepInterviewState, buildAskGateAnswerSchema, GATE_OTHER_OPTION, validateAskGateStageState, } from "./workflow-gate-types";
24
15
  export interface AskGateWorkflowGateMeta {
25
16
  stage: WorkflowStage;
26
17
  kind: WorkflowGateKind;
@@ -81,6 +72,8 @@ export declare class DeepInterviewGateError extends Error {
81
72
  readonly code: "invalid_answer_shape" | "unknown_option" | "multi_not_allowed" | "missing_custom" | "missing_clarification" | "empty_selection" | "duplicate_selection";
82
73
  constructor(code: "invalid_answer_shape" | "unknown_option" | "multi_not_allowed" | "missing_custom" | "missing_clarification" | "empty_selection" | "duplicate_selection", message: string);
83
74
  }
75
+ /** Build and validate exact producer-compatible `stage_state` metadata for one ask question. */
76
+ export declare function buildAskGateStageState(question: AskGateQuestion, labels: string[]): Record<string, unknown>;
84
77
  /** Build the `workflow_gate` open-input for one ask question. */
85
78
  export declare function questionToGate(question: AskGateQuestion): OpenGateInput;
86
79
  /**
@@ -73,6 +73,10 @@ export interface WorkflowGateEmitter {
73
73
  setAckRecoveryParticipant?(participant: AskSelectedAckRecoveryParticipant | null): void;
74
74
  /** Explicit host hook for same-process accepted-but-unadvanced recovery. */
75
75
  recoverAcceptedGates?(): Promise<string[]>;
76
+ /** Reads a durable completed resolution before any presentation claim. */
77
+ lookupCompletedResolution?(response: WorkflowGateResponse): WorkflowGateCompletedResolutionLookup;
78
+ /** Supplies the active runtime turn captured immediately before a gate is opened. */
79
+ setRuntimeTurnProvider?(provider: (() => string | undefined) | null): void;
76
80
  /** Permanently revoke all in-process continuation authority and reject their waiters. */
77
81
  fence?(): void;
78
82
  /** Temporarily make this emitter unavailable while a session transition is reversible. */
@@ -90,9 +94,11 @@ export declare class BrokerWorkflowGateEmitter implements WorkflowGateEmitter {
90
94
  #private;
91
95
  constructor(runId: string, store: GateStore, emitterHooks?: Pick<BrokerHooks, "advance">);
92
96
  isUnattended(): boolean;
97
+ setRuntimeTurnProvider(provider: (() => string | undefined) | null): void;
93
98
  emitGate(input: OpenGateInput): Promise<unknown>;
94
99
  onGateEmitted(listener: (gate: WorkflowGate) => void): () => void;
95
100
  resolveGate(response: WorkflowGateResponse): Promise<WorkflowGateResolution>;
101
+ lookupCompletedResolution(response: WorkflowGateResponse): WorkflowGateCompletedResolutionLookup;
96
102
  prepareTerminalization(gateId: string, proof: WorkflowGateTerminalProof): boolean;
97
103
  clearPreparedTerminalization(gateId: string): void;
98
104
  listPendingGates(): WorkflowGate[];
@@ -145,6 +151,7 @@ export declare class MemoryGateStore implements GateStore {
145
151
  beginRuntimeInstance(instanceId: string): void;
146
152
  list(): PersistedGate[];
147
153
  }
154
+ export declare function isUnsupportedWindowsDirectorySyncError(error: unknown, platform?: NodeJS.Platform): boolean;
148
155
  /** A write may have reached `rename` but not the directory fsync durability barrier. */
149
156
  export declare class GateStoreWriteError extends Error {
150
157
  readonly certainty: "not_committed" | "uncertain";
@@ -234,10 +241,21 @@ export interface OpenGateInput {
234
241
  context?: WorkflowGateContext;
235
242
  /** Optional diagnostic gate replaced by this newly persisted gate. */
236
243
  supersedesGateId?: string;
244
+ /** Optional immutable runtime turn captured by the emitter before broker persistence. */
245
+ runtimeTurnId?: string;
237
246
  }
247
+ /** Durable resolution state used to safely replay direct control after presentation retirement. */
248
+ export type WorkflowGateCompletedResolutionLookup = {
249
+ kind: "none";
250
+ } | {
251
+ kind: "completed";
252
+ resolution: WorkflowGateResolution;
253
+ } | {
254
+ kind: "accepted_incomplete";
255
+ };
238
256
  export declare class WorkflowGateBrokerError extends Error {
239
- readonly code: "unknown_gate" | "already_resolved" | "idempotency_conflict" | "invalid_workflow_stage";
240
- constructor(code: "unknown_gate" | "already_resolved" | "idempotency_conflict" | "invalid_workflow_stage", message: string);
257
+ readonly code: "unknown_gate" | "already_resolved" | "idempotency_conflict" | "invalid_workflow_stage" | "invalid_runtime_turn";
258
+ constructor(code: "unknown_gate" | "already_resolved" | "idempotency_conflict" | "invalid_workflow_stage" | "invalid_runtime_turn", message: string);
241
259
  }
242
260
  export declare class WorkflowGateBroker {
243
261
  #private;
@@ -253,6 +271,7 @@ export declare class WorkflowGateBroker {
253
271
  classifyDisposition(gateId: string, answer: unknown): PersistedSemanticDisposition;
254
272
  validationError(gateId: string, keyword: string, message: string): WorkflowGateValidationError;
255
273
  updateAckPolicy(gateId: string, ackPolicy: PersistedAckPolicy): void;
274
+ lookupCompletedResolution(response: WorkflowGateResponse): WorkflowGateCompletedResolutionLookup;
256
275
  private runShort;
257
276
  private hasLiveContinuation;
258
277
  hasRecoverableAcceptedGate(): boolean;
@@ -1,9 +1,38 @@
1
1
  /** Transport-neutral workflow gate contract used by SDK workflow coordination. */
2
2
  /** Lifecycle stages that emit machine-addressable SDK workflow gates. */
3
3
  export type WorkflowStage = "deep-interview" | "ralplan" | "ultragoal";
4
+ /** Lifecycle stages included in the v1 workflow-gate contract. */
5
+ export declare const WORKFLOW_GATE_V1_STAGES: readonly WorkflowStage[];
4
6
  /** Reserved stage names that are explicitly not part of the v1 contract. */
5
7
  export declare const RESERVED_WORKFLOW_STAGES: readonly string[];
6
8
  export type WorkflowGateKind = "question" | "approval" | "execution";
9
+ /** "Other (type your own)" sentinel, mirroring the interactive ask tool. */
10
+ export declare const GATE_OTHER_OPTION = "Other (type your own)";
11
+ export interface AskGateDeepInterviewState {
12
+ round_id?: string;
13
+ round: number;
14
+ component: string;
15
+ dimension: string;
16
+ ambiguity: number;
17
+ }
18
+ export interface AskGateStageStateInput {
19
+ id: string;
20
+ multi?: boolean;
21
+ allowEmpty?: boolean;
22
+ navigationLabel?: "Next" | "Done";
23
+ deepInterview?: AskGateDeepInterviewState;
24
+ fallbackState?: Record<string, unknown>;
25
+ }
26
+ export interface AskGateSchemaInput {
27
+ multi?: boolean;
28
+ allowEmpty?: boolean;
29
+ }
30
+ /** Rejects stage state that is not exactly compatible with the generic ask-gate producer. */
31
+ export declare function validateAskGateStageState(value: unknown): asserts value is Record<string, unknown>;
32
+ /** Builds the canonical generic ask answer schema. */
33
+ export declare function buildAskGateAnswerSchema(question: AskGateSchemaInput, labels: string[]): JsonSchema;
34
+ /** Builds and validates exact generic ask stage-state metadata. */
35
+ export declare function buildAskGateStageState(input: AskGateStageStateInput, labels: string[]): Record<string, unknown>;
7
36
  /** The documented JSON Schema 2020-12 subset supported by the gate validator. */
8
37
  export interface JsonSchema {
9
38
  type?: "string" | "number" | "integer" | "boolean" | "object" | "array" | "null";
@@ -57,6 +86,8 @@ export interface WorkflowGate {
57
86
  context: WorkflowGateContext;
58
87
  created_at: string;
59
88
  required: true;
89
+ /** Immutable runtime turn correlation captured before durable gate visibility. */
90
+ runtime_turn_id?: string;
60
91
  }
61
92
  /** Non-actionable durable-gate state retained for restart diagnostics. */
62
93
  export interface WorkflowGateLifecycle {
@@ -0,0 +1,39 @@
1
+ import type { AsyncJob, AsyncJobManager, SubagentRecord } from "../async/job-manager";
2
+ import type { CronJobView, JobsObserver } from "./jobs-observer";
3
+ import type { ObservableSession, SessionObserverRegistry } from "./session-observer-registry";
4
+ export type TaskStatus = "running" | "waiting" | "done" | "failed" | "cancelled";
5
+ export type TaskKind = "bash" | "subagent" | "cron";
6
+ export interface TaskRow {
7
+ id: string;
8
+ kind: TaskKind;
9
+ label: string;
10
+ status: TaskStatus;
11
+ startedAt: number;
12
+ resumable?: boolean;
13
+ monitorOutputLines?: number;
14
+ }
15
+ export interface TasksSnapshot {
16
+ rows: TaskRow[];
17
+ worstState: TaskStatus | "none";
18
+ failedUnacknowledged: boolean;
19
+ }
20
+ export declare const EMPTY_TASKS_SNAPSHOT: TasksSnapshot;
21
+ export declare function mapAsyncJobStatus(status: AsyncJob["status"]): TaskStatus;
22
+ export declare function mapSessionStatus(status: ObservableSession["status"]): TaskStatus;
23
+ export declare function mapSubagentStatus(status: SubagentRecord["status"]): TaskStatus;
24
+ export declare function mapCronStatus(cron: Pick<CronJobView, "firing">): TaskStatus;
25
+ /** Joins manager jobs, monitor/cron views, and live session metadata. Stable
26
+ * subagent records are canonical for lifecycle state; the registry contributes
27
+ * only the current display label and timestamp. */
28
+ export declare class TasksAggregator {
29
+ #private;
30
+ readonly manager: AsyncJobManager;
31
+ readonly jobsObserver: JobsObserver;
32
+ readonly sessions: SessionObserverRegistry;
33
+ readonly ownerId?: string | undefined;
34
+ constructor(manager: AsyncJobManager, jobsObserver: JobsObserver, sessions: SessionObserverRegistry, ownerId?: string | undefined);
35
+ onChange(cb: () => void): () => void;
36
+ getSnapshot(): TasksSnapshot;
37
+ acknowledgeFailures(): void;
38
+ dispose(): void;
39
+ }
@@ -0,0 +1,60 @@
1
+ export type TranscriptItemKind = "user" | "assistant-text" | "assistant-thinking" | "tool" | "read-group" | "custom";
2
+ export type TranscriptItemCapabilities = {
3
+ copyable: boolean;
4
+ foldable: boolean;
5
+ rawViewable: boolean;
6
+ };
7
+ export type TranscriptSourcePayload = {
8
+ text: string;
9
+ metadata: Readonly<Record<string, unknown>>;
10
+ source: unknown;
11
+ };
12
+ export type TranscriptItem = {
13
+ id: string;
14
+ kind: TranscriptItemKind;
15
+ source: unknown;
16
+ getPayload?: (source: unknown) => TranscriptSourcePayload;
17
+ capabilities?: Partial<TranscriptItemCapabilities>;
18
+ };
19
+ export type RegisterTranscriptItem = Omit<TranscriptItem, "id"> & {
20
+ id?: string;
21
+ };
22
+ export type StreamingItemOptions = Omit<RegisterTranscriptItem, "id" | "kind"> & {
23
+ promptGeneration: number | string;
24
+ messageOrdinal: number;
25
+ kind?: "assistant-text" | "assistant-thinking";
26
+ };
27
+ /** Stable transcript identities shared by the inline and overlay projections. */
28
+ export declare const transcriptItemId: {
29
+ entry: (entryId: string) => string;
30
+ assistantContent: (entryId: string, contentIndex: number) => string;
31
+ tool: (toolCallId: string) => string;
32
+ readGroup: (groupId: string) => string;
33
+ custom: (customId: string) => string;
34
+ stream: (promptGeneration: number | string, messageOrdinal: number) => string;
35
+ };
36
+ /**
37
+ * A session-local index of transcript projection items. It deliberately stores only
38
+ * structural sources, allowing interactive mode to supply live streaming objects
39
+ * and persisted session records without importing either implementation here.
40
+ */
41
+ export declare class TranscriptItemRegistry {
42
+ #private;
43
+ get sessionId(): string | undefined;
44
+ /** Ordered snapshot for read-only transcript projections. */
45
+ items(): readonly TranscriptItem[];
46
+ register(item: RegisterTranscriptItem): string;
47
+ replace(id: string, item: Omit<TranscriptItem, "id">): boolean;
48
+ startStream(options: StreamingItemOptions): string;
49
+ /** Reconciles one exact live stream with its persisted canonical item. */
50
+ endStream(streamId: string, item: RegisterTranscriptItem): string | undefined;
51
+ retireStream(id: string): boolean;
52
+ coalesceReadGroup(groupId: string, source: unknown, toolCallIds?: readonly string[]): string;
53
+ rebuild(items: readonly RegisterTranscriptItem[]): void;
54
+ evict(id: string): boolean;
55
+ switchSession(sessionId: string): void;
56
+ resolveSourcePayload(id: string): TranscriptSourcePayload | undefined;
57
+ capabilities(id: string): TranscriptItemCapabilities | undefined;
58
+ has(id: string): boolean;
59
+ canonicalId(id: string): string | undefined;
60
+ }