@gajae-code/coding-agent 0.11.1 → 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 (404) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/dist/types/cli/config-cli.d.ts +11 -1
  3. package/dist/types/cli/notify-cli.d.ts +1 -0
  4. package/dist/types/cli/session-picker.d.ts +2 -1
  5. package/dist/types/cli/setup-cli.d.ts +1 -1
  6. package/dist/types/commands/mcp-serve.d.ts +33 -0
  7. package/dist/types/commands/mcp.d.ts +1 -1
  8. package/dist/types/commands/notify.d.ts +0 -2
  9. package/dist/types/commands/sdk.d.ts +1 -1
  10. package/dist/types/config/atomic-yaml-patch.d.ts +18 -0
  11. package/dist/types/config/file-lock.d.ts +14 -4
  12. package/dist/types/config/keybindings.d.ts +42 -1
  13. package/dist/types/config/model-auth.d.ts +3 -0
  14. package/dist/types/config/model-bindings-applier.d.ts +13 -0
  15. package/dist/types/config/model-discovery-manager.d.ts +49 -0
  16. package/dist/types/config/model-equivalence.d.ts +20 -0
  17. package/dist/types/config/model-registry.d.ts +16 -15
  18. package/dist/types/config/model-resolver.d.ts +28 -18
  19. package/dist/types/config/models-config-schema.d.ts +11 -0
  20. package/dist/types/config/settings-schema.d.ts +56 -1
  21. package/dist/types/config/settings.d.ts +14 -11
  22. package/dist/types/coordinator-mcp/policy.d.ts +5 -0
  23. package/dist/types/coordinator-mcp/question-gate-codec.d.ts +129 -0
  24. package/dist/types/coordinator-mcp/question-state.d.ts +356 -0
  25. package/dist/types/coordinator-mcp/server.d.ts +4 -0
  26. package/dist/types/discovery/helpers.d.ts +0 -6
  27. package/dist/types/edit/index.d.ts +3 -0
  28. package/dist/types/eval/py/env.d.ts +9 -0
  29. package/dist/types/extensibility/extensions/loader.d.ts +2 -1
  30. package/dist/types/extensibility/extensions/runner.d.ts +2 -2
  31. package/dist/types/extensibility/extensions/types.d.ts +34 -3
  32. package/dist/types/extensibility/hooks/runner.d.ts +1 -1
  33. package/dist/types/extensibility/shared-events.d.ts +2 -0
  34. package/dist/types/gjc-runtime/deep-interview-recorder.d.ts +10 -1
  35. package/dist/types/gjc-runtime/deep-interview-state.d.ts +44 -0
  36. package/dist/types/gjc-runtime/goal-mode-request.d.ts +11 -1
  37. package/dist/types/gjc-runtime/launch-worktree.d.ts +4 -2
  38. package/dist/types/gjc-runtime/linux-proc.d.ts +29 -0
  39. package/dist/types/gjc-runtime/session-resolution.d.ts +2 -2
  40. package/dist/types/gjc-runtime/state-migrations.d.ts +1 -1
  41. package/dist/types/gjc-runtime/state-writer.d.ts +2 -1
  42. package/dist/types/gjc-runtime/team-launch.d.ts +59 -0
  43. package/dist/types/gjc-runtime/team-notify.d.ts +45 -0
  44. package/dist/types/gjc-runtime/team-runtime.d.ts +29 -121
  45. package/dist/types/gjc-runtime/team-store.d.ts +160 -0
  46. package/dist/types/gjc-runtime/team-workers.d.ts +78 -0
  47. package/dist/types/gjc-runtime/tmux-owner-isolation.d.ts +8 -0
  48. package/dist/types/gjc-runtime/ultragoal-change-set.d.ts +13 -0
  49. package/dist/types/gjc-runtime/ultragoal-evidence.d.ts +38 -0
  50. package/dist/types/gjc-runtime/ultragoal-guard.d.ts +7 -0
  51. package/dist/types/gjc-runtime/ultragoal-pipeline.d.ts +23 -0
  52. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +55 -33
  53. package/dist/types/gjc-runtime/workflow-cli-common.d.ts +8 -0
  54. package/dist/types/gjc-runtime/workflow-manifest.d.ts +3 -0
  55. package/dist/types/goals/continuation-timeout-guard.d.ts +22 -0
  56. package/dist/types/goals/runtime.d.ts +1 -0
  57. package/dist/types/goals/state.d.ts +8 -0
  58. package/dist/types/harness-control-plane/lifecycle-reconciliation.d.ts +17 -0
  59. package/dist/types/harness-control-plane/phase-rollup.d.ts +4 -7
  60. package/dist/types/harness-control-plane/receipt-ingest.d.ts +5 -0
  61. package/dist/types/harness-control-plane/receipt-spool.d.ts +4 -0
  62. package/dist/types/hindsight/state.d.ts +11 -4
  63. package/dist/types/lsp/lspmux.d.ts +5 -3
  64. package/dist/types/lsp/path-trust.d.ts +1 -0
  65. package/dist/types/main.d.ts +3 -2
  66. package/dist/types/memories/storage.d.ts +1 -0
  67. package/dist/types/modes/action-registry.d.ts +29 -0
  68. package/dist/types/modes/components/chrome.d.ts +14 -0
  69. package/dist/types/modes/components/command-palette.d.ts +27 -0
  70. package/dist/types/modes/components/custom-provider-wizard.d.ts +1 -0
  71. package/dist/types/modes/components/index.d.ts +2 -1
  72. package/dist/types/modes/components/pet-selector.d.ts +1 -1
  73. package/dist/types/modes/components/plan-preview-overlay.d.ts +43 -0
  74. package/dist/types/modes/components/queue-mode-selector.d.ts +1 -1
  75. package/dist/types/modes/components/queue-pane.d.ts +12 -0
  76. package/dist/types/modes/components/read-tool-group.d.ts +6 -0
  77. package/dist/types/modes/components/session-observer-overlay.d.ts +3 -4
  78. package/dist/types/modes/components/sessions-dashboard.d.ts +32 -0
  79. package/dist/types/modes/components/settings-selector.d.ts +1 -1
  80. package/dist/types/modes/components/show-images-selector.d.ts +1 -1
  81. package/dist/types/modes/components/status-line/types.d.ts +1 -1
  82. package/dist/types/modes/components/status-line.d.ts +1 -94
  83. package/dist/types/modes/components/tasks-pane.d.ts +15 -0
  84. package/dist/types/modes/components/theme-selector.d.ts +1 -1
  85. package/dist/types/modes/components/tool-execution.d.ts +15 -0
  86. package/dist/types/modes/components/tool-status-header.d.ts +111 -0
  87. package/dist/types/modes/components/transcript-viewer-overlay.d.ts +42 -0
  88. package/dist/types/modes/controllers/goal-mode-controller.d.ts +62 -0
  89. package/dist/types/modes/controllers/input-controller.d.ts +8 -1
  90. package/dist/types/modes/controllers/mode-gate.d.ts +8 -0
  91. package/dist/types/modes/controllers/plan-mode-controller.d.ts +65 -0
  92. package/dist/types/modes/controllers/selector-controller.d.ts +15 -3
  93. package/dist/types/modes/controllers/stt-controller.d.ts +26 -0
  94. package/dist/types/modes/interactive-mode.d.ts +19 -17
  95. package/dist/types/modes/jobs-observer.d.ts +2 -0
  96. package/dist/types/modes/shared/agent-wire/deep-interview-gate.d.ts +4 -11
  97. package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +20 -2
  98. package/dist/types/modes/shared/agent-wire/workflow-gate-types.d.ts +31 -0
  99. package/dist/types/modes/tasks-aggregator.d.ts +39 -0
  100. package/dist/types/modes/transcript-item-registry.d.ts +60 -0
  101. package/dist/types/modes/types.d.ts +20 -13
  102. package/dist/types/modes/utils/ui-helpers.d.ts +2 -2
  103. package/dist/types/runtime-mcp/manager.d.ts +1 -1
  104. package/dist/types/sdk/broker/broker.d.ts +78 -12
  105. package/dist/types/sdk/broker/lifecycle-codec.d.ts +4 -0
  106. package/dist/types/sdk/broker/lifecycle-ledger.d.ts +15 -1
  107. package/dist/types/sdk/broker/lifecycle.d.ts +6 -2
  108. package/dist/types/sdk/broker/process-incarnation.d.ts +2 -0
  109. package/dist/types/sdk/broker/session-index.d.ts +0 -1
  110. package/dist/types/sdk/broker/state-version.d.ts +2 -0
  111. package/dist/types/sdk/bus/chat-effect-journal.d.ts +1 -0
  112. package/dist/types/sdk/bus/config-commands.d.ts +1 -1
  113. package/dist/types/sdk/bus/config.d.ts +11 -0
  114. package/dist/types/sdk/bus/daemon-paths.d.ts +1 -0
  115. package/dist/types/sdk/bus/html-format.d.ts +3 -2
  116. package/dist/types/sdk/bus/index.d.ts +27 -0
  117. package/dist/types/sdk/bus/lifecycle-control-runtime.d.ts +4 -0
  118. package/dist/types/sdk/bus/notification-service.d.ts +20 -0
  119. package/dist/types/sdk/bus/rate-limit-pool.d.ts +13 -2
  120. package/dist/types/sdk/bus/recent-activity.d.ts +21 -12
  121. package/dist/types/sdk/bus/rich-document.d.ts +7 -0
  122. package/dist/types/sdk/bus/rich-render.d.ts +18 -41
  123. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +9 -4
  124. package/dist/types/sdk/bus/telegram-daemon.d.ts +46 -3
  125. package/dist/types/sdk/bus/threaded-inbound.d.ts +1 -1
  126. package/dist/types/sdk/bus/threaded-render.d.ts +13 -0
  127. package/dist/types/sdk/bus/topic-registry.d.ts +24 -2
  128. package/dist/types/sdk/host/control/operations.d.ts +1 -1
  129. package/dist/types/sdk/host/host.d.ts +2 -0
  130. package/dist/types/sdk/index.d.ts +1 -0
  131. package/dist/types/sdk/session-directory.d.ts +56 -0
  132. package/dist/types/session/agent-session.d.ts +82 -47
  133. package/dist/types/session/agent-storage.d.ts +7 -0
  134. package/dist/types/session/fallback-chain-controller.d.ts +10 -2
  135. package/dist/types/session/internal/managed-session-scope.d.ts +102 -0
  136. package/dist/types/session/internal/managed-session-storage.d.ts +38 -0
  137. package/dist/types/session/messages.d.ts +16 -0
  138. package/dist/types/session/session-manager-internal.d.ts +14 -0
  139. package/dist/types/session/session-manager.d.ts +82 -12
  140. package/dist/types/session/session-storage.d.ts +43 -3
  141. package/dist/types/session/volatile-context-pruning.d.ts +15 -0
  142. package/dist/types/skill-state/{deep-interview-mutation-guard.d.ts → workflow-mutation-guard.d.ts} +24 -8
  143. package/dist/types/skill-state/workflow-state-contract.d.ts +1 -3
  144. package/dist/types/slash-commands/builtin-registry.d.ts +4 -1
  145. package/dist/types/system-prompt.d.ts +2 -11
  146. package/dist/types/task/executor.d.ts +3 -1
  147. package/dist/types/thinking.d.ts +7 -0
  148. package/dist/types/tool-discovery/tool-index.d.ts +1 -50
  149. package/dist/types/tools/ask.d.ts +64 -2
  150. package/dist/types/tools/bash.d.ts +3 -0
  151. package/dist/types/tools/browser/dead-tab-recovery.d.ts +24 -0
  152. package/dist/types/tools/browser/tab-supervisor.d.ts +21 -0
  153. package/dist/types/tools/cron.d.ts +2 -0
  154. package/dist/types/tools/fetch.d.ts +1 -0
  155. package/dist/types/tools/index.d.ts +30 -15
  156. package/dist/types/tools/output-meta.d.ts +1 -0
  157. package/dist/types/tools/read.d.ts +3 -0
  158. package/dist/types/tools/search-tool-bm25.d.ts +3 -4
  159. package/dist/types/utils/event-bus.d.ts +1 -1
  160. package/dist/types/web/search/index.d.ts +3 -1
  161. package/package.json +21 -9
  162. package/scripts/build-sdk-package-smoke.ts +34 -1
  163. package/scripts/generate-hotkeys-docs.ts +74 -0
  164. package/scripts/generate-sdk-operation-inventory.ts +64 -20
  165. package/scripts/verify-gjc-sdk-canonicalization.ts +182 -2
  166. package/src/async/job-manager.ts +49 -6
  167. package/src/cli/config-cli.ts +75 -2
  168. package/src/cli/notify-cli.ts +92 -26
  169. package/src/cli/session-picker.ts +20 -3
  170. package/src/cli/setup-cli.ts +1 -1
  171. package/src/cli.ts +1 -1
  172. package/src/commands/config.ts +1 -1
  173. package/src/commands/harness.ts +34 -106
  174. package/src/commands/launch.ts +6 -4
  175. package/src/commands/mcp-serve.ts +85 -8
  176. package/src/commands/mcp.ts +2 -2
  177. package/src/commands/notify.ts +8 -4
  178. package/src/commands/sdk.ts +61 -40
  179. package/src/commands/ultragoal.ts +4 -1
  180. package/src/config/atomic-yaml-patch.ts +80 -13
  181. package/src/config/file-lock.ts +105 -43
  182. package/src/config/keybindings.ts +64 -20
  183. package/src/config/model-auth.ts +9 -0
  184. package/src/config/model-bindings-applier.ts +139 -0
  185. package/src/config/model-discovery-manager.ts +224 -0
  186. package/src/config/model-equivalence.ts +66 -0
  187. package/src/config/model-registry.ts +169 -302
  188. package/src/config/model-resolver.ts +361 -369
  189. package/src/config/models-config-schema.ts +5 -4
  190. package/src/config/settings-schema.ts +159 -2
  191. package/src/config/settings.ts +458 -482
  192. package/src/coordinator-mcp/policy.ts +76 -11
  193. package/src/coordinator-mcp/question-gate-codec.ts +274 -0
  194. package/src/coordinator-mcp/question-state.ts +778 -0
  195. package/src/coordinator-mcp/server.ts +1702 -238
  196. package/src/debug/index.ts +1 -1
  197. package/src/defaults/gjc/skills/deep-interview/SKILL.md +13 -1
  198. package/src/defaults/gjc/skills/team/SKILL.md +16 -0
  199. package/src/discovery/helpers.ts +1 -50
  200. package/src/edit/index.ts +64 -0
  201. package/src/eval/py/env.ts +26 -0
  202. package/src/eval/py/kernel.ts +5 -3
  203. package/src/extensibility/extensions/loader.ts +9 -1
  204. package/src/extensibility/extensions/runner.ts +12 -3
  205. package/src/extensibility/extensions/types.ts +39 -1
  206. package/src/extensibility/gjc-plugins/installer.ts +16 -16
  207. package/src/extensibility/hooks/runner.ts +2 -2
  208. package/src/extensibility/runtime-skill-discovery.ts +33 -13
  209. package/src/extensibility/shared-events.ts +2 -0
  210. package/src/gjc-runtime/deep-interview-recorder.ts +63 -3
  211. package/src/gjc-runtime/deep-interview-runtime.ts +76 -27
  212. package/src/gjc-runtime/deep-interview-state.ts +317 -5
  213. package/src/gjc-runtime/goal-mode-request.ts +55 -8
  214. package/src/gjc-runtime/launch-tmux.ts +2 -5
  215. package/src/gjc-runtime/launch-worktree.ts +5 -5
  216. package/src/gjc-runtime/linux-proc.ts +71 -0
  217. package/src/gjc-runtime/ralplan-runtime.ts +74 -90
  218. package/src/gjc-runtime/session-resolution.ts +18 -3
  219. package/src/gjc-runtime/session-state-sidecar.ts +6 -107
  220. package/src/gjc-runtime/state-migrations.ts +1 -1
  221. package/src/gjc-runtime/state-runtime.ts +320 -249
  222. package/src/gjc-runtime/state-writer.ts +36 -40
  223. package/src/gjc-runtime/team-launch.ts +319 -0
  224. package/src/gjc-runtime/team-notify.ts +326 -0
  225. package/src/gjc-runtime/team-runtime.ts +1099 -1482
  226. package/src/gjc-runtime/team-store.ts +828 -0
  227. package/src/gjc-runtime/team-workers.ts +962 -0
  228. package/src/gjc-runtime/tmux-owner-isolation-cli.ts +2 -11
  229. package/src/gjc-runtime/tmux-owner-isolation.ts +14 -9
  230. package/src/gjc-runtime/tmux-sessions.ts +4 -21
  231. package/src/gjc-runtime/ultragoal-change-set.ts +172 -0
  232. package/src/gjc-runtime/ultragoal-evidence.ts +874 -0
  233. package/src/gjc-runtime/ultragoal-guard.ts +29 -5
  234. package/src/gjc-runtime/ultragoal-pipeline.ts +306 -0
  235. package/src/gjc-runtime/ultragoal-runtime.ts +84 -1311
  236. package/src/gjc-runtime/workflow-cli-common.ts +30 -0
  237. package/src/gjc-runtime/workflow-manifest.generated.json +58 -0
  238. package/src/gjc-runtime/workflow-manifest.ts +18 -0
  239. package/src/goals/continuation-timeout-guard.ts +79 -0
  240. package/src/goals/runtime.ts +7 -5
  241. package/src/goals/state.ts +18 -0
  242. package/src/harness-control-plane/lifecycle-reconciliation.ts +64 -0
  243. package/src/harness-control-plane/phase-rollup.ts +4 -7
  244. package/src/harness-control-plane/receipt-ingest.ts +5 -0
  245. package/src/harness-control-plane/receipt-spool.ts +51 -7
  246. package/src/harness-control-plane/session-lease.ts +12 -130
  247. package/src/hindsight/backend.ts +26 -27
  248. package/src/hindsight/state.ts +101 -32
  249. package/src/hooks/skill-state.ts +17 -11
  250. package/src/internal-urls/docs-index.generated.ts +21 -18
  251. package/src/lsp/client.ts +1 -1
  252. package/src/lsp/config.ts +145 -26
  253. package/src/lsp/index.ts +1 -1
  254. package/src/lsp/lspmux.ts +39 -10
  255. package/src/lsp/path-trust.ts +81 -0
  256. package/src/main.ts +28 -8
  257. package/src/memories/index.ts +1 -0
  258. package/src/memories/storage.ts +6 -2
  259. package/src/modes/action-registry.ts +165 -0
  260. package/src/modes/components/chrome.ts +40 -0
  261. package/src/modes/components/command-palette.ts +168 -0
  262. package/src/modes/components/custom-editor.ts +1 -1
  263. package/src/modes/components/custom-provider-wizard.ts +51 -14
  264. package/src/modes/components/index.ts +2 -1
  265. package/src/modes/components/pet-selector.ts +11 -17
  266. package/src/modes/components/plan-preview-overlay.ts +295 -0
  267. package/src/modes/components/queue-mode-selector.ts +10 -27
  268. package/src/modes/components/queue-pane.ts +79 -0
  269. package/src/modes/components/read-tool-group.ts +13 -0
  270. package/src/modes/components/session-observer-overlay.ts +207 -772
  271. package/src/modes/components/sessions-dashboard.ts +181 -0
  272. package/src/modes/components/settings-selector.ts +1 -1
  273. package/src/modes/components/show-images-selector.ts +10 -24
  274. package/src/modes/components/status-line/types.ts +1 -1
  275. package/src/modes/components/status-line.ts +1 -969
  276. package/src/modes/components/tasks-pane.ts +73 -0
  277. package/src/modes/components/theme-selector.ts +11 -31
  278. package/src/modes/components/tool-execution.ts +22 -0
  279. package/src/modes/components/tool-status-header.ts +1056 -0
  280. package/src/modes/components/transcript-viewer-overlay.ts +384 -0
  281. package/src/modes/controllers/btw-controller.ts +1 -0
  282. package/src/modes/controllers/event-controller.ts +3 -2
  283. package/src/modes/controllers/extension-ui-controller.ts +24 -1
  284. package/src/modes/controllers/goal-mode-controller.ts +474 -0
  285. package/src/modes/controllers/input-controller.ts +764 -229
  286. package/src/modes/controllers/mode-gate.ts +24 -0
  287. package/src/modes/controllers/plan-mode-controller.ts +517 -0
  288. package/src/modes/controllers/selector-controller.ts +225 -10
  289. package/src/modes/controllers/stt-controller.ts +125 -0
  290. package/src/modes/interactive-mode.ts +289 -1150
  291. package/src/modes/jobs-observer.ts +3 -0
  292. package/src/modes/runtime-init.ts +8 -0
  293. package/src/modes/shared/agent-wire/deep-interview-gate.ts +31 -106
  294. package/src/modes/shared/agent-wire/workflow-gate-broker.ts +71 -16
  295. package/src/modes/shared/agent-wire/workflow-gate-types.ts +177 -0
  296. package/src/modes/tasks-aggregator.ts +199 -0
  297. package/src/modes/transcript-item-registry.ts +229 -0
  298. package/src/modes/types.ts +45 -18
  299. package/src/modes/utils/ui-helpers.ts +17 -9
  300. package/src/prompts/agent-fragments/ralplan-persistence.md +6 -0
  301. package/src/prompts/agent-fragments/restricted-bash.md +1 -0
  302. package/src/prompts/agents/architect.md +2 -8
  303. package/src/prompts/agents/critic.md +2 -8
  304. package/src/prompts/agents/executor.md +3 -0
  305. package/src/prompts/agents/planner.md +4 -12
  306. package/src/prompts/system/custom-system-prompt.md +1 -23
  307. package/src/prompts/system/plan-mode-approved.md +8 -0
  308. package/src/prompts/system/system-prompt.md +17 -96
  309. package/src/prompts/tools/bash.md +4 -4
  310. package/src/prompts/tools/browser.md +15 -52
  311. package/src/prompts/tools/find.md +2 -2
  312. package/src/prompts/tools/hashline.md +13 -55
  313. package/src/prompts/tools/read.md +3 -6
  314. package/src/prompts/tools/search-tool-bm25.md +0 -2
  315. package/src/prompts/tools/search.md +2 -4
  316. package/src/prompts/tools/skill-discovery.md +1 -2
  317. package/src/prompts/tools/task.md +1 -1
  318. package/src/runtime-mcp/manager.ts +1 -1
  319. package/src/sdk/broker/broker.ts +206 -78
  320. package/src/sdk/broker/discovery.ts +1 -1
  321. package/src/sdk/broker/ensure.ts +3 -1
  322. package/src/sdk/broker/lifecycle-codec.ts +11 -0
  323. package/src/sdk/broker/lifecycle-ledger.ts +371 -74
  324. package/src/sdk/broker/lifecycle.ts +1399 -142
  325. package/src/sdk/broker/process-incarnation.ts +5 -13
  326. package/src/sdk/broker/session-index.ts +145 -56
  327. package/src/sdk/broker/state-version.ts +21 -0
  328. package/src/sdk/broker/transport.ts +1 -1
  329. package/src/sdk/bus/chat-daemon-cli.ts +2 -0
  330. package/src/sdk/bus/chat-daemon-control.ts +8 -28
  331. package/src/sdk/bus/chat-effect-journal.ts +10 -2
  332. package/src/sdk/bus/config-commands.ts +5 -4
  333. package/src/sdk/bus/config.ts +98 -0
  334. package/src/sdk/bus/conversation-store.ts +5 -29
  335. package/src/sdk/bus/daemon-paths.ts +2 -0
  336. package/src/sdk/bus/html-format.ts +20 -3
  337. package/src/sdk/bus/index.ts +778 -93
  338. package/src/sdk/bus/lifecycle-control-runtime.ts +91 -33
  339. package/src/sdk/bus/natives-augment.d.ts +26 -1
  340. package/src/sdk/bus/notification-service.ts +168 -20
  341. package/src/sdk/bus/rate-limit-pool.ts +58 -14
  342. package/src/sdk/bus/recent-activity.ts +188 -74
  343. package/src/sdk/bus/rich-document.ts +258 -0
  344. package/src/sdk/bus/rich-render.ts +62 -70
  345. package/src/sdk/bus/telegram-daemon-cli.ts +15 -59
  346. package/src/sdk/bus/telegram-daemon-contract.ts +9 -4
  347. package/src/sdk/bus/telegram-daemon.ts +1389 -237
  348. package/src/sdk/bus/threaded-inbound.ts +8 -3
  349. package/src/sdk/bus/threaded-render.ts +57 -1
  350. package/src/sdk/bus/topic-registry.ts +120 -13
  351. package/src/sdk/host/control/dispatch.ts +14 -2
  352. package/src/sdk/host/control/operations.ts +6 -1
  353. package/src/sdk/host/host.ts +31 -1
  354. package/src/sdk/host/query/handlers.ts +20 -22
  355. package/src/sdk/host/query/revision-store.ts +80 -57
  356. package/src/sdk/index.ts +1 -0
  357. package/src/sdk/protocol/operation-inventory.generated.json +943 -1907
  358. package/src/sdk/session-directory.ts +141 -0
  359. package/src/sdk/session.ts +458 -479
  360. package/src/session/agent-session.ts +1700 -583
  361. package/src/session/agent-storage.ts +18 -0
  362. package/src/session/cache-economics.ts +25 -8
  363. package/src/session/fallback-chain-controller.ts +53 -3
  364. package/src/session/internal/managed-session-scope.ts +2226 -0
  365. package/src/session/internal/managed-session-storage.ts +453 -0
  366. package/src/session/messages.ts +91 -2
  367. package/src/session/session-manager-internal.ts +33 -0
  368. package/src/session/session-manager.ts +1112 -333
  369. package/src/session/session-storage.ts +444 -39
  370. package/src/session/volatile-context-pruning.ts +78 -0
  371. package/src/setup/credential-auto-import.ts +2 -1
  372. package/src/setup/hermes/templates/operator-instructions.v1.md +1 -1
  373. package/src/setup/provider-onboarding.ts +36 -61
  374. package/src/setup/provider-presets.json +5 -0
  375. package/src/skill-state/active-state.ts +3 -13
  376. package/src/skill-state/{deep-interview-mutation-guard.ts → workflow-mutation-guard.ts} +47 -29
  377. package/src/skill-state/workflow-state-contract.ts +6 -41
  378. package/src/slash-commands/builtin-registry.ts +46 -11
  379. package/src/system-prompt.ts +37 -44
  380. package/src/task/agents.ts +19 -1
  381. package/src/task/executor.ts +90 -6
  382. package/src/task/index.ts +36 -21
  383. package/src/thinking.ts +21 -6
  384. package/src/tool-discovery/tool-index.ts +2 -134
  385. package/src/tools/ask.ts +157 -21
  386. package/src/tools/ast-edit.ts +1 -1
  387. package/src/tools/bash.ts +38 -0
  388. package/src/tools/browser/dead-tab-recovery.ts +78 -0
  389. package/src/tools/browser/tab-supervisor.ts +282 -36
  390. package/src/tools/computer.ts +10 -3
  391. package/src/tools/cron.ts +30 -16
  392. package/src/tools/eval.ts +1 -2
  393. package/src/tools/fetch.ts +11 -4
  394. package/src/tools/index.ts +76 -24
  395. package/src/tools/output-meta.ts +13 -5
  396. package/src/tools/read.ts +37 -1
  397. package/src/tools/resource-gc.ts +2 -2
  398. package/src/tools/search-tool-bm25.ts +11 -74
  399. package/src/utils/event-bus.ts +9 -4
  400. package/src/web/search/index.ts +3 -3
  401. package/dist/types/discovery/plugin-dir-roots.d.ts +0 -15
  402. package/dist/types/runtime-mcp/discoverable-tool-metadata.d.ts +0 -7
  403. package/src/discovery/plugin-dir-roots.ts +0 -28
  404. 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>;
@@ -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[];
@@ -235,10 +241,21 @@ export interface OpenGateInput {
235
241
  context?: WorkflowGateContext;
236
242
  /** Optional diagnostic gate replaced by this newly persisted gate. */
237
243
  supersedesGateId?: string;
244
+ /** Optional immutable runtime turn captured by the emitter before broker persistence. */
245
+ runtimeTurnId?: string;
238
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
+ };
239
256
  export declare class WorkflowGateBrokerError extends Error {
240
- readonly code: "unknown_gate" | "already_resolved" | "idempotency_conflict" | "invalid_workflow_stage";
241
- 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);
242
259
  }
243
260
  export declare class WorkflowGateBroker {
244
261
  #private;
@@ -254,6 +271,7 @@ export declare class WorkflowGateBroker {
254
271
  classifyDisposition(gateId: string, answer: unknown): PersistedSemanticDisposition;
255
272
  validationError(gateId: string, keyword: string, message: string): WorkflowGateValidationError;
256
273
  updateAckPolicy(gateId: string, ackPolicy: PersistedAckPolicy): void;
274
+ lookupCompletedResolution(response: WorkflowGateResponse): WorkflowGateCompletedResolutionLookup;
257
275
  private runShort;
258
276
  private hasLiveContinuation;
259
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
+ }
@@ -1,13 +1,12 @@
1
1
  import type { AgentMessage } from "@gajae-code/agent-core";
2
2
  import type { CompactionOutcome } from "@gajae-code/agent-core/compaction";
3
3
  import type { AssistantMessage, ImageContent, Message, UsageReport } from "@gajae-code/ai";
4
- import type { Component, Container, EditorTheme, Loader, Spacer, Text, TUI } from "@gajae-code/tui";
4
+ import type { Component, Container, EditorTheme, Loader, SlashCommand, Spacer, Text, TUI } from "@gajae-code/tui";
5
5
  import type { KeybindingsManager } from "../config/keybindings";
6
6
  import type { Settings } from "../config/settings";
7
7
  import type { ExtensionUIContext, ExtensionUIDialogOptions, ExtensionWidgetContent, ExtensionWidgetOptions } from "../extensibility/extensions";
8
8
  import type { CompactOptions } from "../extensibility/extensions/types";
9
9
  import type { Skill } from "../extensibility/skills";
10
- import type { PlanApprovalDetails } from "../plan-mode/approved-plan";
11
10
  import type { MCPManager } from "../runtime-mcp";
12
11
  import type { NotificationSessionReconcileResult, NotificationSessionStatus } from "../sdk/bus/session-control";
13
12
  import type { AgentSession, AgentSessionEvent } from "../session/agent-session";
@@ -17,14 +16,15 @@ import type { CredentialAutoImportOptions } from "../setup/credential-auto-impor
17
16
  import type { LspStartupServerInfo } from "../tools";
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 type { CustomEditor } from "./components/custom-editor";
21
21
  import type { EvalExecutionComponent } from "./components/eval-execution";
22
22
  import 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 type { StatusLineComponent } from "./components/status-line";
27
26
  import type { ToolExecutionHandle } from "./components/tool-execution";
27
+ import type { StatusLineComponent } from "./components/tool-status-header";
28
28
  import type { IrcObservationLedger } from "./irc-observation-ledger";
29
29
  import type { OAuthManualInputManager } from "./oauth-manual-input";
30
30
  import type { Theme } from "./theme/theme";
@@ -43,6 +43,11 @@ export type SubmittedUserInput = {
43
43
  cancelled: boolean;
44
44
  started: boolean;
45
45
  };
46
+ export type ComposerSubmissionOptions = Readonly<{
47
+ ownsComposer: boolean;
48
+ editor: CustomEditor;
49
+ }>;
50
+ export declare function canApplyComposerSubmission(options: ComposerSubmissionOptions | undefined, editor: CustomEditor): boolean;
46
51
  export type TodoStatus = "pending" | "in_progress" | "completed" | "abandoned";
47
52
  export type TodoItem = {
48
53
  content: string;
@@ -92,10 +97,6 @@ export interface InteractiveModeContext {
92
97
  isBashNoContext: boolean;
93
98
  toolOutputExpanded: boolean;
94
99
  todoExpanded: boolean;
95
- planModeEnabled: boolean;
96
- goalModeEnabled: boolean;
97
- goalModePaused: boolean;
98
- planModePlanFilePath?: string;
99
100
  hideThinkingBlock: boolean;
100
101
  pendingImages: ImageContent[];
101
102
  compactionQueuedMessages: CompactionQueuedMessage[];
@@ -149,12 +150,11 @@ export interface InteractiveModeContext {
149
150
  showNewVersionNotification(newVersion: string): void;
150
151
  clearEditor(): void;
151
152
  updatePendingMessagesDisplay(): void;
152
- queueCompactionMessage(text: string, mode: "steer" | "followUp"): void;
153
+ queueCompactionMessage(text: string, mode: "steer" | "followUp", options?: ComposerSubmissionOptions): void;
153
154
  flushCompactionQueue(options?: {
154
155
  willRetry?: boolean;
155
156
  }): Promise<void>;
156
157
  flushPendingBashComponents(): void;
157
- flushPendingModelSwitch(): Promise<void>;
158
158
  setWorkingMessage(message?: string): void;
159
159
  applyPendingWorkingMessage(): void;
160
160
  ensureLoadingAnimation(): void;
@@ -178,7 +178,7 @@ export interface InteractiveModeContext {
178
178
  images?: ImageContent[];
179
179
  customType?: string;
180
180
  display?: boolean;
181
- }): SubmittedUserInput;
181
+ }, options?: ComposerSubmissionOptions): SubmittedUserInput;
182
182
  cancelPendingSubmission(): boolean;
183
183
  markPendingSubmissionStarted(input: SubmittedUserInput): boolean;
184
184
  finishPendingSubmission(input: SubmittedUserInput): void;
@@ -256,7 +256,10 @@ export interface InteractiveModeContext {
256
256
  handleSTTToggle(): Promise<void>;
257
257
  executeCompaction(customInstructionsOrOptions?: string | CompactOptions, isAuto?: boolean): Promise<CompactionOutcome>;
258
258
  openInBrowser(urlOrPath: string): void;
259
+ /** Resolved source of truth for slash autocomplete and command palette entries. */
260
+ getSlashCommands?(): readonly SlashCommand[];
259
261
  refreshSlashCommandState(cwd?: string): Promise<void>;
262
+ showCommandPalette(commands: SlashCommand[], actions: CommandPaletteAction[], executeSlashCommand: (name: string) => Promise<void>): void;
260
263
  showSettingsSelector(): void;
261
264
  showThemeSelector(): void;
262
265
  showPetSelector(): void;
@@ -272,6 +275,7 @@ export interface InteractiveModeContext {
272
275
  showUserMessageSelector(): void;
273
276
  showTreeSelector(): void;
274
277
  showSessionSelector(): void;
278
+ showSessionsDashboard(): void;
275
279
  handleResumeSession(sessionPath: string): Promise<void>;
276
280
  handleSessionDeleteCommand(): Promise<void>;
277
281
  showOAuthSelector(mode: "login" | "logout", providerId?: string, options?: OAuthSelectorOptions): Promise<void>;
@@ -279,6 +283,10 @@ export interface InteractiveModeContext {
279
283
  showDebugSelector(): void;
280
284
  showSessionObserver(): void;
281
285
  showJobsOverlay(): void;
286
+ showTasksPane(): void;
287
+ showTranscriptViewer(): void;
288
+ isTranscriptViewerOpen(): boolean;
289
+ refreshTranscriptViewer(): void;
282
290
  resetObserverRegistry(): void;
283
291
  handleCtrlC(): void;
284
292
  handleCtrlD(): void;
@@ -298,11 +306,10 @@ export interface InteractiveModeContext {
298
306
  toggleThinkingBlockVisibility(): void;
299
307
  openExternalEditor(): void;
300
308
  registerExtensionShortcuts(): void;
301
- handlePlanModeCommand(initialPrompt?: string): Promise<void>;
302
- handleGoalModeCommand(rest?: string): Promise<void>;
303
- handlePlanApproval(details: PlanApprovalDetails): Promise<void>;
304
309
  initHooksAndCustomTools(): Promise<void>;
305
310
  emitCustomToolSessionEvent(reason: "start" | "switch" | "branch" | "tree" | "shutdown", previousSessionFile?: string): Promise<void>;
311
+ planModeController: Pick<import("./controllers/plan-mode-controller").PlanModeController, "enabled" | "paused" | "planFilePath" | "handleCommand" | "handleApproval" | "flushPendingModelSwitch">;
312
+ goalModeController: Pick<import("./controllers/goal-mode-controller").GoalModeController, "enabled" | "paused" | "handleCommand">;
306
313
  setHookWidget(key: string, content: ExtensionWidgetContent, options?: ExtensionWidgetOptions): void;
307
314
  setHookStatus(key: string, text: string | undefined): void;
308
315
  showHookSelector(title: string, options: string[], dialogOptions?: ExtensionUIDialogOptions): Promise<string | undefined>;
@@ -1,7 +1,7 @@
1
1
  import type { AgentMessage } from "@gajae-code/agent-core";
2
2
  import type { AssistantMessage, Message } from "@gajae-code/ai";
3
3
  import { type Component, type TUI } from "@gajae-code/tui";
4
- import type { InteractiveModeContext, IrcArrivalSnapshot, TranscriptRebuildPolicy } from "../../modes/types";
4
+ import { type ComposerSubmissionOptions, type InteractiveModeContext, type IrcArrivalSnapshot, type TranscriptRebuildPolicy } from "../../modes/types";
5
5
  import { type SessionContext } from "../../session/session-manager";
6
6
  import { type ParsedIrcMessage } from "./irc-message";
7
7
  export type { TranscriptRebuildPolicy } from "../../modes/types";
@@ -63,7 +63,7 @@ export declare class UiHelpers {
63
63
  showWarning(warningMessage: string): void;
64
64
  showNewVersionNotification(newVersion: string): void;
65
65
  updatePendingMessagesDisplay(): void;
66
- queueCompactionMessage(text: string, mode: "steer" | "followUp"): void;
66
+ queueCompactionMessage(text: string, mode: "steer" | "followUp", options?: ComposerSubmissionOptions): void;
67
67
  isKnownSlashCommand(text: string): boolean;
68
68
  flushCompactionQueue(options?: {
69
69
  willRetry?: boolean;