@bastani/atomic 0.8.31-alpha.5 → 0.9.0-alpha.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 (1401) hide show
  1. package/CHANGELOG.md +28 -1
  2. package/dist/builtin/cursor/CHANGELOG.md +10 -1
  3. package/dist/builtin/cursor/package.json +2 -2
  4. package/dist/builtin/cursor/src/proto/protobuf-codec-json.ts +44 -0
  5. package/dist/builtin/cursor/src/proto/protobuf-codec-request.ts +271 -0
  6. package/dist/builtin/cursor/src/proto/protobuf-codec-wire.ts +231 -0
  7. package/dist/builtin/cursor/src/proto/protobuf-codec.ts +5 -523
  8. package/dist/builtin/cursor/src/stream.ts +6 -70
  9. package/dist/builtin/cursor/src/transport-errors.ts +74 -0
  10. package/dist/builtin/cursor/src/transport-frame.ts +56 -0
  11. package/dist/builtin/cursor/src/transport-http2.ts +122 -0
  12. package/dist/builtin/cursor/src/transport-native-client.ts +161 -0
  13. package/dist/builtin/cursor/src/transport-run-stream.ts +188 -0
  14. package/dist/builtin/cursor/src/transport-timeouts.ts +87 -0
  15. package/dist/builtin/cursor/src/transport-types.ts +140 -0
  16. package/dist/builtin/cursor/src/transport.ts +24 -790
  17. package/dist/builtin/intercom/CHANGELOG.md +9 -0
  18. package/dist/builtin/intercom/broker/client.ts +0 -35
  19. package/dist/builtin/intercom/contact-supervisor-tool.ts +289 -0
  20. package/dist/builtin/intercom/index-heavy.ts +77 -1336
  21. package/dist/builtin/intercom/intercom-tool.ts +409 -0
  22. package/dist/builtin/intercom/intercom-utils.ts +401 -0
  23. package/dist/builtin/intercom/lifecycle.ts +133 -0
  24. package/dist/builtin/intercom/overlay.ts +96 -0
  25. package/dist/builtin/intercom/package.json +2 -2
  26. package/dist/builtin/intercom/subagent-relay.ts +137 -0
  27. package/dist/builtin/mcp/CHANGELOG.md +9 -0
  28. package/dist/builtin/mcp/config-write-utils.ts +104 -0
  29. package/dist/builtin/mcp/config.ts +4 -180
  30. package/dist/builtin/mcp/mcp-panel-renderer.ts +243 -0
  31. package/dist/builtin/mcp/mcp-panel-state.ts +227 -0
  32. package/dist/builtin/mcp/mcp-panel-types.ts +86 -0
  33. package/dist/builtin/mcp/mcp-panel.ts +145 -579
  34. package/dist/builtin/mcp/mcp-setup-panel.ts +4 -81
  35. package/dist/builtin/mcp/package.json +3 -3
  36. package/dist/builtin/mcp/proxy-auth.ts +61 -0
  37. package/dist/builtin/mcp/proxy-call.ts +373 -0
  38. package/dist/builtin/mcp/proxy-connect.ts +58 -0
  39. package/dist/builtin/mcp/proxy-info-modes.ts +326 -0
  40. package/dist/builtin/mcp/proxy-modes.ts +3 -805
  41. package/dist/builtin/mcp/proxy-types.ts +3 -0
  42. package/dist/builtin/mcp/ui-server-http.ts +81 -0
  43. package/dist/builtin/mcp/ui-server.ts +2 -127
  44. package/dist/builtin/subagents/CHANGELOG.md +9 -0
  45. package/dist/builtin/subagents/package.json +4 -4
  46. package/dist/builtin/subagents/src/agents/agent-discovery.ts +127 -0
  47. package/dist/builtin/subagents/src/agents/agent-loaders.ts +175 -0
  48. package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +310 -0
  49. package/dist/builtin/subagents/src/agents/agent-management.ts +3 -309
  50. package/dist/builtin/subagents/src/agents/agent-overrides.ts +397 -0
  51. package/dist/builtin/subagents/src/agents/agent-paths.ts +88 -0
  52. package/dist/builtin/subagents/src/agents/agent-types.ts +136 -0
  53. package/dist/builtin/subagents/src/agents/agents.ts +22 -895
  54. package/dist/builtin/subagents/src/agents/skills-paths.ts +333 -0
  55. package/dist/builtin/subagents/src/agents/skills.ts +3 -326
  56. package/dist/builtin/subagents/src/extension/index.ts +4 -118
  57. package/dist/builtin/subagents/src/extension/prompt-guidance.ts +13 -0
  58. package/dist/builtin/subagents/src/runs/background/async-execution-chain.ts +401 -0
  59. package/dist/builtin/subagents/src/runs/background/async-execution-common.ts +131 -0
  60. package/dist/builtin/subagents/src/runs/background/async-execution-single.ts +213 -0
  61. package/dist/builtin/subagents/src/runs/background/async-execution-types.ts +84 -0
  62. package/dist/builtin/subagents/src/runs/background/async-execution.ts +13 -795
  63. package/dist/builtin/subagents/src/runs/background/subagent-runner-dynamic.ts +215 -0
  64. package/dist/builtin/subagents/src/runs/background/subagent-runner-finalize.ts +136 -0
  65. package/dist/builtin/subagents/src/runs/background/subagent-runner-output.ts +105 -0
  66. package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel-helpers.ts +112 -0
  67. package/dist/builtin/subagents/src/runs/background/subagent-runner-parallel.ts +159 -0
  68. package/dist/builtin/subagents/src/runs/background/subagent-runner-sequential.ts +127 -0
  69. package/dist/builtin/subagents/src/runs/background/subagent-runner-state.ts +427 -0
  70. package/dist/builtin/subagents/src/runs/background/subagent-runner-step.ts +273 -0
  71. package/dist/builtin/subagents/src/runs/background/subagent-runner-streaming.ts +269 -0
  72. package/dist/builtin/subagents/src/runs/background/subagent-runner-types.ts +196 -0
  73. package/dist/builtin/subagents/src/runs/background/subagent-runner-utils.ts +70 -0
  74. package/dist/builtin/subagents/src/runs/background/subagent-runner.ts +44 -2233
  75. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-behavior.ts +75 -0
  76. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-component.ts +202 -0
  77. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-edit.ts +97 -0
  78. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-editor.ts +160 -0
  79. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-frame.ts +72 -0
  80. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-modes.ts +161 -0
  81. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-render-selectors.ts +203 -0
  82. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-selectors.ts +234 -0
  83. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-state.ts +103 -0
  84. package/dist/builtin/subagents/src/runs/foreground/chain-clarify-types.ts +29 -0
  85. package/dist/builtin/subagents/src/runs/foreground/chain-clarify.ts +4 -1328
  86. package/dist/builtin/subagents/src/runs/foreground/chain-execution-clarify.ts +117 -0
  87. package/dist/builtin/subagents/src/runs/foreground/chain-execution-details.ts +35 -0
  88. package/dist/builtin/subagents/src/runs/foreground/chain-execution-dynamic-step.ts +194 -0
  89. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-runner.ts +183 -0
  90. package/dist/builtin/subagents/src/runs/foreground/chain-execution-parallel-step.ts +185 -0
  91. package/dist/builtin/subagents/src/runs/foreground/chain-execution-sequential-step.ts +229 -0
  92. package/dist/builtin/subagents/src/runs/foreground/chain-execution-types.ts +194 -0
  93. package/dist/builtin/subagents/src/runs/foreground/chain-execution.ts +94 -1043
  94. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-control.ts +135 -0
  95. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-finalize.ts +107 -0
  96. package/dist/builtin/subagents/src/runs/foreground/execution-attempt-types.ts +17 -0
  97. package/dist/builtin/subagents/src/runs/foreground/execution-attempt.ts +454 -0
  98. package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +219 -0
  99. package/dist/builtin/subagents/src/runs/foreground/execution-structured-retries.ts +77 -0
  100. package/dist/builtin/subagents/src/runs/foreground/execution-updates.ts +34 -0
  101. package/dist/builtin/subagents/src/runs/foreground/execution-utils.ts +56 -0
  102. package/dist/builtin/subagents/src/runs/foreground/execution.ts +6 -1082
  103. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-async.ts +207 -0
  104. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +140 -0
  105. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +266 -0
  106. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +270 -0
  107. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +157 -0
  108. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +375 -0
  109. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-resume.ts +463 -0
  110. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-runtime.ts +17 -0
  111. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +320 -0
  112. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +207 -0
  113. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +121 -0
  114. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-worktree.ts +113 -0
  115. package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +150 -2522
  116. package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +0 -16
  117. package/dist/builtin/subagents/src/runs/shared/nested-events-control.ts +167 -0
  118. package/dist/builtin/subagents/src/runs/shared/nested-events-core.ts +219 -0
  119. package/dist/builtin/subagents/src/runs/shared/nested-events-projection.ts +121 -0
  120. package/dist/builtin/subagents/src/runs/shared/nested-events-registry.ts +289 -0
  121. package/dist/builtin/subagents/src/runs/shared/nested-events-sanitize.ts +201 -0
  122. package/dist/builtin/subagents/src/runs/shared/nested-events.ts +50 -935
  123. package/dist/builtin/subagents/src/runs/shared/worktree.ts +0 -78
  124. package/dist/builtin/subagents/src/shared/types-async.ts +265 -0
  125. package/dist/builtin/subagents/src/shared/types-config.ts +125 -0
  126. package/dist/builtin/subagents/src/shared/types-depth.ts +121 -0
  127. package/dist/builtin/subagents/src/shared/types-output.ts +63 -0
  128. package/dist/builtin/subagents/src/shared/types-results.ts +318 -0
  129. package/dist/builtin/subagents/src/shared/types-runtime.ts +136 -0
  130. package/dist/builtin/subagents/src/shared/types.ts +10 -975
  131. package/dist/builtin/subagents/src/slash/slash-commands.ts +0 -12
  132. package/dist/builtin/subagents/src/tui/render-chain-graph.ts +247 -0
  133. package/dist/builtin/subagents/src/tui/render-event-formatting.ts +259 -0
  134. package/dist/builtin/subagents/src/tui/render-layout.ts +120 -0
  135. package/dist/builtin/subagents/src/tui/render-result-animation.ts +56 -0
  136. package/dist/builtin/subagents/src/tui/render-result-compact.ts +154 -0
  137. package/dist/builtin/subagents/src/tui/render-result.ts +390 -0
  138. package/dist/builtin/subagents/src/tui/render-stable-output.ts +83 -0
  139. package/dist/builtin/subagents/src/tui/render-status-progress.ts +133 -0
  140. package/dist/builtin/subagents/src/tui/render-widget-graph.ts +166 -0
  141. package/dist/builtin/subagents/src/tui/render-widget.ts +273 -0
  142. package/dist/builtin/subagents/src/tui/render.ts +14 -1801
  143. package/dist/builtin/web-access/CHANGELOG.md +9 -0
  144. package/dist/builtin/web-access/content-tools.ts +348 -0
  145. package/dist/builtin/web-access/curator-page-assets/script-1.ts +400 -0
  146. package/dist/builtin/web-access/curator-page-assets/script-2.ts +400 -0
  147. package/dist/builtin/web-access/curator-page-assets/script-3.ts +400 -0
  148. package/dist/builtin/web-access/curator-page-assets/script-4.ts +400 -0
  149. package/dist/builtin/web-access/curator-page-assets/script-5.ts +398 -0
  150. package/dist/builtin/web-access/curator-page-assets/styles-1.ts +394 -0
  151. package/dist/builtin/web-access/curator-page-assets/styles-2.ts +394 -0
  152. package/dist/builtin/web-access/curator-page-assets/styles-3.ts +393 -0
  153. package/dist/builtin/web-access/curator-page.ts +17 -3180
  154. package/dist/builtin/web-access/curator-server-helpers.ts +115 -0
  155. package/dist/builtin/web-access/curator-server.ts +2 -113
  156. package/dist/builtin/web-access/exa-mcp.ts +218 -0
  157. package/dist/builtin/web-access/exa.ts +2 -207
  158. package/dist/builtin/web-access/extract-frames.ts +228 -0
  159. package/dist/builtin/web-access/extract.ts +13 -214
  160. package/dist/builtin/web-access/github-config.ts +156 -0
  161. package/dist/builtin/web-access/github-extract.ts +3 -154
  162. package/dist/builtin/web-access/index-heavy.ts +8 -1904
  163. package/dist/builtin/web-access/package.json +3 -2
  164. package/dist/builtin/web-access/web-search-activity.ts +102 -0
  165. package/dist/builtin/web-access/web-search-browser.ts +116 -0
  166. package/dist/builtin/web-access/web-search-command.ts +242 -0
  167. package/dist/builtin/web-access/web-search-config.ts +163 -0
  168. package/dist/builtin/web-access/web-search-curator.ts +214 -0
  169. package/dist/builtin/web-access/web-search-features.ts +165 -0
  170. package/dist/builtin/web-access/web-search-formatting.ts +117 -0
  171. package/dist/builtin/web-access/web-search-return.ts +136 -0
  172. package/dist/builtin/web-access/web-search-summary.ts +170 -0
  173. package/dist/builtin/web-access/web-search-tool.ts +290 -0
  174. package/dist/builtin/web-access/web-search-types.ts +50 -0
  175. package/dist/builtin/workflows/CHANGELOG.md +16 -1
  176. package/dist/builtin/workflows/README.md +189 -122
  177. package/dist/builtin/workflows/builtin/deep-research-codebase-runner.ts +492 -0
  178. package/dist/builtin/workflows/builtin/deep-research-codebase-utils.ts +346 -0
  179. package/dist/builtin/workflows/builtin/deep-research-codebase.ts +36 -849
  180. package/dist/builtin/workflows/builtin/goal-artifacts.ts +43 -0
  181. package/dist/builtin/workflows/builtin/goal-ledger.ts +54 -0
  182. package/dist/builtin/workflows/builtin/goal-prompts.ts +360 -0
  183. package/dist/builtin/workflows/builtin/goal-reducer.ts +141 -0
  184. package/dist/builtin/workflows/builtin/goal-reports.ts +56 -0
  185. package/dist/builtin/workflows/builtin/goal-review.ts +84 -0
  186. package/dist/builtin/workflows/builtin/goal-runner.ts +336 -0
  187. package/dist/builtin/workflows/builtin/goal-schemas.ts +60 -0
  188. package/dist/builtin/workflows/builtin/goal-types.ts +132 -0
  189. package/dist/builtin/workflows/builtin/goal.ts +40 -1201
  190. package/dist/builtin/workflows/builtin/index.d.ts +1 -0
  191. package/dist/builtin/workflows/builtin/open-claude-design-phases.ts +432 -0
  192. package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +476 -0
  193. package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +312 -0
  194. package/dist/builtin/workflows/builtin/open-claude-design.d.ts +1 -0
  195. package/dist/builtin/workflows/builtin/open-claude-design.ts +47 -1131
  196. package/dist/builtin/workflows/builtin/ralph-core.ts +408 -0
  197. package/dist/builtin/workflows/builtin/ralph-models.ts +123 -0
  198. package/dist/builtin/workflows/builtin/ralph-runner.ts +499 -0
  199. package/dist/builtin/workflows/builtin/ralph.ts +50 -1019
  200. package/dist/builtin/workflows/package.json +2 -2
  201. package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +2 -2
  202. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +2 -2
  203. package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +2 -2
  204. package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/page.mjs +8 -1
  205. package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +13 -15
  206. package/dist/builtin/workflows/skills/impeccable/scripts/live-manual-edit-evidence.mjs +2 -2
  207. package/dist/builtin/workflows/skills/impeccable/scripts/live-server.mjs +9 -0
  208. package/dist/builtin/workflows/src/authoring/typebox-defaults.d.ts +41 -0
  209. package/dist/builtin/workflows/src/authoring/typebox-defaults.ts +217 -0
  210. package/dist/builtin/workflows/src/authoring/workflow.ts +184 -0
  211. package/dist/builtin/workflows/src/authoring.d.ts +14 -66
  212. package/dist/builtin/workflows/src/engine/graph-inference.ts +100 -0
  213. package/dist/builtin/workflows/src/engine/options.ts +40 -0
  214. package/dist/builtin/workflows/src/engine/primitives/chain.ts +29 -0
  215. package/dist/builtin/workflows/src/engine/primitives/exit.ts +2 -0
  216. package/dist/builtin/workflows/src/engine/primitives/parallel.ts +47 -0
  217. package/dist/builtin/workflows/src/engine/primitives/task.ts +108 -0
  218. package/dist/builtin/workflows/src/engine/primitives/ui.ts +41 -0
  219. package/dist/builtin/workflows/src/engine/primitives/workflow.ts +159 -0
  220. package/dist/builtin/workflows/src/engine/replay.ts +8 -0
  221. package/dist/builtin/workflows/src/engine/run.ts +356 -0
  222. package/dist/builtin/workflows/src/engine/runtime.ts +160 -0
  223. package/dist/builtin/workflows/src/extension/atomic-stage-session.ts +186 -0
  224. package/dist/builtin/workflows/src/extension/config-file-loader.ts +152 -0
  225. package/dist/builtin/workflows/src/extension/config-loader.ts +2 -167
  226. package/dist/builtin/workflows/src/extension/discovery-loaders.ts +115 -0
  227. package/dist/builtin/workflows/src/extension/discovery.ts +3 -117
  228. package/dist/builtin/workflows/src/extension/extension-factory.ts +120 -0
  229. package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +109 -0
  230. package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +270 -0
  231. package/dist/builtin/workflows/src/extension/index.ts +42 -4166
  232. package/dist/builtin/workflows/src/extension/public-types.ts +295 -0
  233. package/dist/builtin/workflows/src/extension/render-component.ts +14 -0
  234. package/dist/builtin/workflows/src/extension/runtime-direct.ts +96 -0
  235. package/dist/builtin/workflows/src/extension/runtime.ts +1 -92
  236. package/dist/builtin/workflows/src/extension/ui-surface.ts +286 -0
  237. package/dist/builtin/workflows/src/extension/wiring.ts +6 -475
  238. package/dist/builtin/workflows/src/extension/workflow-command-completions.ts +111 -0
  239. package/dist/builtin/workflows/src/extension/workflow-command-registration.ts +213 -0
  240. package/dist/builtin/workflows/src/extension/workflow-command-surfaces.ts +81 -0
  241. package/dist/builtin/workflows/src/extension/workflow-command-utils.ts +181 -0
  242. package/dist/builtin/workflows/src/extension/workflow-module-loader.ts +9 -3
  243. package/dist/builtin/workflows/src/extension/workflow-policy.ts +15 -0
  244. package/dist/builtin/workflows/src/extension/workflow-ports.ts +41 -0
  245. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +23 -0
  246. package/dist/builtin/workflows/src/extension/workflow-run-control-command.ts +286 -0
  247. package/dist/builtin/workflows/src/extension/workflow-schema.ts +1 -19
  248. package/dist/builtin/workflows/src/extension/workflow-stage-results.ts +264 -0
  249. package/dist/builtin/workflows/src/extension/workflow-targets.ts +181 -0
  250. package/dist/builtin/workflows/src/extension/workflow-tool-content.ts +175 -0
  251. package/dist/builtin/workflows/src/extension/workflow-tool-control.ts +205 -0
  252. package/dist/builtin/workflows/src/extension/workflow-tool-helpers.ts +66 -0
  253. package/dist/builtin/workflows/src/extension/workflow-tool-inspection.ts +164 -0
  254. package/dist/builtin/workflows/src/extension/workflow-tool-registration.ts +54 -0
  255. package/dist/builtin/workflows/src/extension/workflow-tool-send.ts +164 -0
  256. package/dist/builtin/workflows/src/extension/workflow-tool.ts +102 -0
  257. package/dist/builtin/workflows/src/index.ts +0 -2
  258. package/dist/builtin/workflows/src/runs/background/runner.ts +6 -3
  259. package/dist/builtin/workflows/src/runs/foreground/executor-abort.ts +431 -0
  260. package/dist/builtin/workflows/src/runs/foreground/executor-child-boundary.ts +232 -0
  261. package/dist/builtin/workflows/src/runs/foreground/executor-child-helpers.ts +74 -0
  262. package/dist/builtin/workflows/src/runs/foreground/executor-child-workflow.ts +1 -0
  263. package/dist/builtin/workflows/src/runs/foreground/executor-continuation.ts +167 -0
  264. package/dist/builtin/workflows/src/runs/foreground/executor-direct-helpers.ts +450 -0
  265. package/dist/builtin/workflows/src/runs/foreground/executor-direct.ts +233 -0
  266. package/dist/builtin/workflows/src/runs/foreground/executor-exit-manager.ts +195 -0
  267. package/dist/builtin/workflows/src/runs/foreground/executor-hil.ts +368 -0
  268. package/dist/builtin/workflows/src/runs/foreground/executor-inputs.ts +83 -0
  269. package/dist/builtin/workflows/src/runs/foreground/executor-lifecycle.ts +441 -0
  270. package/dist/builtin/workflows/src/runs/foreground/executor-outputs.ts +160 -0
  271. package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +274 -0
  272. package/dist/builtin/workflows/src/runs/foreground/executor-run-finalizers.ts +122 -0
  273. package/dist/builtin/workflows/src/runs/foreground/executor-run.ts +1 -0
  274. package/dist/builtin/workflows/src/runs/foreground/executor-scheduler.ts +204 -0
  275. package/dist/builtin/workflows/src/runs/foreground/executor-stage-call.ts +194 -0
  276. package/dist/builtin/workflows/src/runs/foreground/executor-stage-context.ts +120 -0
  277. package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +126 -0
  278. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +359 -0
  279. package/dist/builtin/workflows/src/runs/foreground/executor-stage-replay.ts +135 -0
  280. package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +61 -0
  281. package/dist/builtin/workflows/src/runs/foreground/executor-task-context.ts +2 -0
  282. package/dist/builtin/workflows/src/runs/foreground/executor-task-prompts.ts +293 -0
  283. package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +109 -0
  284. package/dist/builtin/workflows/src/runs/foreground/executor.ts +19 -5354
  285. package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +219 -0
  286. package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +500 -0
  287. package/dist/builtin/workflows/src/runs/foreground/stage-runner-messages.ts +129 -0
  288. package/dist/builtin/workflows/src/runs/foreground/stage-runner-options.ts +53 -0
  289. package/dist/builtin/workflows/src/runs/foreground/stage-runner-output.ts +146 -0
  290. package/dist/builtin/workflows/src/runs/foreground/stage-runner-session.ts +55 -0
  291. package/dist/builtin/workflows/src/runs/foreground/stage-runner-structured-output.ts +82 -0
  292. package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +141 -0
  293. package/dist/builtin/workflows/src/runs/foreground/stage-runner.ts +13 -1355
  294. package/dist/builtin/workflows/src/runs/shared/graph-inference.ts +2 -100
  295. package/dist/builtin/workflows/src/runs/shared/model-fallback-candidates.ts +453 -0
  296. package/dist/builtin/workflows/src/runs/shared/model-fallback-failures.ts +442 -0
  297. package/dist/builtin/workflows/src/runs/shared/model-fallback.ts +2 -836
  298. package/dist/builtin/workflows/src/runs/shared/worktree-diff.ts +165 -0
  299. package/dist/builtin/workflows/src/runs/shared/worktree-git.ts +220 -0
  300. package/dist/builtin/workflows/src/runs/shared/worktree-setup.ts +335 -0
  301. package/dist/builtin/workflows/src/runs/shared/worktree-types.ts +92 -0
  302. package/dist/builtin/workflows/src/runs/shared/worktree.ts +18 -791
  303. package/dist/builtin/workflows/src/sdk-surface.ts +6 -9
  304. package/dist/builtin/workflows/src/shared/authoring-contract-stage.d.ts +371 -0
  305. package/dist/builtin/workflows/src/shared/authoring-contract-stage.ts +439 -0
  306. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +206 -0
  307. package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +282 -0
  308. package/dist/builtin/workflows/src/shared/authoring-contract.d.ts +5 -598
  309. package/dist/builtin/workflows/src/shared/persistence-restore-helpers.ts +428 -0
  310. package/dist/builtin/workflows/src/shared/persistence-restore.ts +9 -431
  311. package/dist/builtin/workflows/src/shared/store-factory.ts +16 -0
  312. package/dist/builtin/workflows/src/shared/store-internal.ts +219 -0
  313. package/dist/builtin/workflows/src/shared/store-prompt-methods.ts +219 -0
  314. package/dist/builtin/workflows/src/shared/store-public-types.ts +215 -0
  315. package/dist/builtin/workflows/src/shared/store-run-methods.ts +223 -0
  316. package/dist/builtin/workflows/src/shared/store-stage-methods.ts +305 -0
  317. package/dist/builtin/workflows/src/shared/store.ts +11 -1138
  318. package/dist/builtin/workflows/src/shared/types.ts +25 -8
  319. package/dist/builtin/workflows/src/shared/workflow-authoring-types.d.ts +49 -0
  320. package/dist/builtin/workflows/src/shared/workflow-authoring-types.ts +84 -0
  321. package/dist/builtin/workflows/src/shared/workflow-failures-classifier.ts +266 -0
  322. package/dist/builtin/workflows/src/shared/workflow-failures-contract.ts +75 -0
  323. package/dist/builtin/workflows/src/shared/workflow-failures-decisions.ts +477 -0
  324. package/dist/builtin/workflows/src/shared/workflow-failures-signals.ts +248 -0
  325. package/dist/builtin/workflows/src/shared/workflow-failures.ts +13 -1001
  326. package/dist/builtin/workflows/src/tui/chat-surface.ts +0 -66
  327. package/dist/builtin/workflows/src/tui/graph-view-constants.ts +45 -0
  328. package/dist/builtin/workflows/src/tui/graph-view-graph-render.ts +161 -0
  329. package/dist/builtin/workflows/src/tui/graph-view-input.ts +333 -0
  330. package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +336 -0
  331. package/dist/builtin/workflows/src/tui/graph-view-render.ts +194 -0
  332. package/dist/builtin/workflows/src/tui/graph-view-state.ts +306 -0
  333. package/dist/builtin/workflows/src/tui/graph-view-types.ts +70 -0
  334. package/dist/builtin/workflows/src/tui/graph-view.ts +4 -1386
  335. package/dist/builtin/workflows/src/tui/inline-form-editor-text.ts +121 -0
  336. package/dist/builtin/workflows/src/tui/inline-form-editor.ts +11 -223
  337. package/dist/builtin/workflows/src/tui/inputs-picker-editing.ts +151 -0
  338. package/dist/builtin/workflows/src/tui/inputs-picker-input.ts +305 -0
  339. package/dist/builtin/workflows/src/tui/inputs-picker-render.ts +300 -0
  340. package/dist/builtin/workflows/src/tui/inputs-picker-types.ts +190 -0
  341. package/dist/builtin/workflows/src/tui/inputs-picker.ts +19 -997
  342. package/dist/builtin/workflows/src/tui/prompt-card-input.ts +226 -0
  343. package/dist/builtin/workflows/src/tui/prompt-card-render.ts +373 -0
  344. package/dist/builtin/workflows/src/tui/prompt-card-select.ts +116 -0
  345. package/dist/builtin/workflows/src/tui/prompt-card-state.ts +61 -0
  346. package/dist/builtin/workflows/src/tui/prompt-card-text.ts +129 -0
  347. package/dist/builtin/workflows/src/tui/prompt-card.ts +8 -910
  348. package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +315 -0
  349. package/dist/builtin/workflows/src/tui/stage-chat-view-custom-ui.ts +127 -0
  350. package/dist/builtin/workflows/src/tui/stage-chat-view-footer-status.ts +187 -0
  351. package/dist/builtin/workflows/src/tui/stage-chat-view-input.ts +222 -0
  352. package/dist/builtin/workflows/src/tui/stage-chat-view-render-helpers.ts +152 -0
  353. package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +464 -0
  354. package/dist/builtin/workflows/src/tui/stage-chat-view-transcript.ts +242 -0
  355. package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +151 -0
  356. package/dist/builtin/workflows/src/tui/stage-chat-view.ts +141 -1777
  357. package/dist/builtin/workflows/src/tui/workflow-attach-pane-types.ts +85 -0
  358. package/dist/builtin/workflows/src/tui/workflow-attach-pane.ts +1 -129
  359. package/dist/builtin/workflows/src/workflows/registry.ts +7 -3
  360. package/dist/config-self-update.d.ts +21 -0
  361. package/dist/config-self-update.d.ts.map +1 -0
  362. package/dist/config-self-update.js +265 -0
  363. package/dist/config-self-update.js.map +1 -0
  364. package/dist/config.d.ts +3 -12
  365. package/dist/config.d.ts.map +1 -1
  366. package/dist/config.js +15 -252
  367. package/dist/config.js.map +1 -1
  368. package/dist/core/agent-session-accessors.d.ts +3 -0
  369. package/dist/core/agent-session-accessors.d.ts.map +1 -0
  370. package/dist/core/agent-session-accessors.js +36 -0
  371. package/dist/core/agent-session-accessors.js.map +1 -0
  372. package/dist/core/agent-session-auto-compaction.d.ts +32 -0
  373. package/dist/core/agent-session-auto-compaction.d.ts.map +1 -0
  374. package/dist/core/agent-session-auto-compaction.js +219 -0
  375. package/dist/core/agent-session-auto-compaction.js.map +1 -0
  376. package/dist/core/agent-session-bash.d.ts +30 -0
  377. package/dist/core/agent-session-bash.d.ts.map +1 -0
  378. package/dist/core/agent-session-bash.js +79 -0
  379. package/dist/core/agent-session-bash.js.map +1 -0
  380. package/dist/core/agent-session-compaction.d.ts +44 -0
  381. package/dist/core/agent-session-compaction.d.ts.map +1 -0
  382. package/dist/core/agent-session-compaction.js +282 -0
  383. package/dist/core/agent-session-compaction.js.map +1 -0
  384. package/dist/core/agent-session-events.d.ts +65 -0
  385. package/dist/core/agent-session-events.d.ts.map +1 -0
  386. package/dist/core/agent-session-events.js +373 -0
  387. package/dist/core/agent-session-events.js.map +1 -0
  388. package/dist/core/agent-session-export.d.ts +42 -0
  389. package/dist/core/agent-session-export.d.ts.map +1 -0
  390. package/dist/core/agent-session-export.js +199 -0
  391. package/dist/core/agent-session-export.js.map +1 -0
  392. package/dist/core/agent-session-extension-bindings.d.ts +37 -0
  393. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -0
  394. package/dist/core/agent-session-extension-bindings.js +231 -0
  395. package/dist/core/agent-session-extension-bindings.js.map +1 -0
  396. package/dist/core/agent-session-message-queue.d.ts +85 -0
  397. package/dist/core/agent-session-message-queue.d.ts.map +1 -0
  398. package/dist/core/agent-session-message-queue.js +264 -0
  399. package/dist/core/agent-session-message-queue.js.map +1 -0
  400. package/dist/core/agent-session-methods.d.ts +300 -0
  401. package/dist/core/agent-session-methods.d.ts.map +1 -0
  402. package/dist/core/agent-session-methods.js +2 -0
  403. package/dist/core/agent-session-methods.js.map +1 -0
  404. package/dist/core/agent-session-models.d.ts +111 -0
  405. package/dist/core/agent-session-models.d.ts.map +1 -0
  406. package/dist/core/agent-session-models.js +368 -0
  407. package/dist/core/agent-session-models.js.map +1 -0
  408. package/dist/core/agent-session-prompt.d.ts +61 -0
  409. package/dist/core/agent-session-prompt.d.ts.map +1 -0
  410. package/dist/core/agent-session-prompt.js +330 -0
  411. package/dist/core/agent-session-prompt.js.map +1 -0
  412. package/dist/core/agent-session-retry.d.ts +62 -0
  413. package/dist/core/agent-session-retry.d.ts.map +1 -0
  414. package/dist/core/agent-session-retry.js +202 -0
  415. package/dist/core/agent-session-retry.js.map +1 -0
  416. package/dist/core/agent-session-services.d.ts +0 -1
  417. package/dist/core/agent-session-services.d.ts.map +1 -1
  418. package/dist/core/agent-session-services.js +0 -1
  419. package/dist/core/agent-session-services.js.map +1 -1
  420. package/dist/core/agent-session-skill-block.d.ts +13 -0
  421. package/dist/core/agent-session-skill-block.d.ts.map +1 -0
  422. package/dist/core/agent-session-skill-block.js +37 -0
  423. package/dist/core/agent-session-skill-block.js.map +1 -0
  424. package/dist/core/agent-session-state.d.ts +48 -0
  425. package/dist/core/agent-session-state.d.ts.map +1 -0
  426. package/dist/core/agent-session-state.js +129 -0
  427. package/dist/core/agent-session-state.js.map +1 -0
  428. package/dist/core/agent-session-tool-hooks.d.ts +7 -0
  429. package/dist/core/agent-session-tool-hooks.d.ts.map +1 -0
  430. package/dist/core/agent-session-tool-hooks.js +72 -0
  431. package/dist/core/agent-session-tool-hooks.js.map +1 -0
  432. package/dist/core/agent-session-tool-registry.d.ts +15 -0
  433. package/dist/core/agent-session-tool-registry.d.ts.map +1 -0
  434. package/dist/core/agent-session-tool-registry.js +149 -0
  435. package/dist/core/agent-session-tool-registry.js.map +1 -0
  436. package/dist/core/agent-session-tree.d.ts +46 -0
  437. package/dist/core/agent-session-tree.d.ts.map +1 -0
  438. package/dist/core/agent-session-tree.js +217 -0
  439. package/dist/core/agent-session-tree.js.map +1 -0
  440. package/dist/core/agent-session-types.d.ts +157 -0
  441. package/dist/core/agent-session-types.d.ts.map +1 -0
  442. package/dist/core/agent-session-types.js +41 -0
  443. package/dist/core/agent-session-types.js.map +1 -0
  444. package/dist/core/agent-session.d.ts +66 -688
  445. package/dist/core/agent-session.d.ts.map +1 -1
  446. package/dist/core/agent-session.js +26 -3153
  447. package/dist/core/agent-session.js.map +1 -1
  448. package/dist/core/atomic-guide-command.d.ts.map +1 -1
  449. package/dist/core/atomic-guide-command.js +1 -1
  450. package/dist/core/atomic-guide-command.js.map +1 -1
  451. package/dist/core/auth-storage-backends.d.ts +49 -0
  452. package/dist/core/auth-storage-backends.d.ts.map +1 -0
  453. package/dist/core/auth-storage-backends.js +185 -0
  454. package/dist/core/auth-storage-backends.js.map +1 -0
  455. package/dist/core/auth-storage.d.ts +2 -49
  456. package/dist/core/auth-storage.d.ts.map +1 -1
  457. package/dist/core/auth-storage.js +3 -183
  458. package/dist/core/auth-storage.js.map +1 -1
  459. package/dist/core/compaction/context-compaction-metrics.d.ts +16 -0
  460. package/dist/core/compaction/context-compaction-metrics.d.ts.map +1 -0
  461. package/dist/core/compaction/context-compaction-metrics.js +58 -0
  462. package/dist/core/compaction/context-compaction-metrics.js.map +1 -0
  463. package/dist/core/compaction/context-compaction-prompt.d.ts +9 -0
  464. package/dist/core/compaction/context-compaction-prompt.d.ts.map +1 -0
  465. package/dist/core/compaction/context-compaction-prompt.js +161 -0
  466. package/dist/core/compaction/context-compaction-prompt.js.map +1 -0
  467. package/dist/core/compaction/context-compaction-runner.d.ts +5 -0
  468. package/dist/core/compaction/context-compaction-runner.d.ts.map +1 -0
  469. package/dist/core/compaction/context-compaction-runner.js +181 -0
  470. package/dist/core/compaction/context-compaction-runner.js.map +1 -0
  471. package/dist/core/compaction/context-compaction-strategy.d.ts +5 -0
  472. package/dist/core/compaction/context-compaction-strategy.d.ts.map +1 -0
  473. package/dist/core/compaction/context-compaction-strategy.js +27 -0
  474. package/dist/core/compaction/context-compaction-strategy.js.map +1 -0
  475. package/dist/core/compaction/context-compaction-types.d.ts +73 -0
  476. package/dist/core/compaction/context-compaction-types.d.ts.map +1 -0
  477. package/dist/core/compaction/context-compaction-types.js +6 -0
  478. package/dist/core/compaction/context-compaction-types.js.map +1 -0
  479. package/dist/core/compaction/context-compaction.d.ts +9 -200
  480. package/dist/core/compaction/context-compaction.d.ts.map +1 -1
  481. package/dist/core/compaction/context-compaction.js +7 -1943
  482. package/dist/core/compaction/context-compaction.js.map +1 -1
  483. package/dist/core/compaction/context-deletion-application.d.ts +13 -0
  484. package/dist/core/compaction/context-deletion-application.d.ts.map +1 -0
  485. package/dist/core/compaction/context-deletion-application.js +259 -0
  486. package/dist/core/compaction/context-deletion-application.js.map +1 -0
  487. package/dist/core/compaction/context-deletion-store.d.ts +78 -0
  488. package/dist/core/compaction/context-deletion-store.d.ts.map +1 -0
  489. package/dist/core/compaction/context-deletion-store.js +162 -0
  490. package/dist/core/compaction/context-deletion-store.js.map +1 -0
  491. package/dist/core/compaction/context-deletion-targets.d.ts +40 -0
  492. package/dist/core/compaction/context-deletion-targets.d.ts.map +1 -0
  493. package/dist/core/compaction/context-deletion-targets.js +267 -0
  494. package/dist/core/compaction/context-deletion-targets.js.map +1 -0
  495. package/dist/core/compaction/context-deletion-tool-definitions.d.ts +187 -0
  496. package/dist/core/compaction/context-deletion-tool-definitions.d.ts.map +1 -0
  497. package/dist/core/compaction/context-deletion-tool-definitions.js +98 -0
  498. package/dist/core/compaction/context-deletion-tool-definitions.js.map +1 -0
  499. package/dist/core/compaction/context-deletion-tool-helpers.d.ts +19 -0
  500. package/dist/core/compaction/context-deletion-tool-helpers.d.ts.map +1 -0
  501. package/dist/core/compaction/context-deletion-tool-helpers.js +137 -0
  502. package/dist/core/compaction/context-deletion-tool-helpers.js.map +1 -0
  503. package/dist/core/compaction/context-deletion-tools.d.ts +4 -0
  504. package/dist/core/compaction/context-deletion-tools.d.ts.map +1 -0
  505. package/dist/core/compaction/context-deletion-tools.js +395 -0
  506. package/dist/core/compaction/context-deletion-tools.js.map +1 -0
  507. package/dist/core/compaction/context-transcript-analysis.d.ts +9 -0
  508. package/dist/core/compaction/context-transcript-analysis.d.ts.map +1 -0
  509. package/dist/core/compaction/context-transcript-analysis.js +234 -0
  510. package/dist/core/compaction/context-transcript-analysis.js.map +1 -0
  511. package/dist/core/export-html/index.d.ts.map +1 -1
  512. package/dist/core/export-html/index.js +2 -1
  513. package/dist/core/export-html/index.js.map +1 -1
  514. package/dist/core/export-html/template-js/data-tree.js +287 -0
  515. package/dist/core/export-html/template-js/entries-navigation.js +424 -0
  516. package/dist/core/export-html/template-js/initialization.js +312 -0
  517. package/dist/core/export-html/template-js/message-tools.js +415 -0
  518. package/dist/core/export-html/template-js/tree-filter-render.js +421 -0
  519. package/dist/core/export-html/template-script.d.ts +3 -0
  520. package/dist/core/export-html/template-script.d.ts.map +1 -0
  521. package/dist/core/export-html/template-script.js +13 -0
  522. package/dist/core/export-html/template-script.js.map +1 -0
  523. package/dist/core/export-html/template.js +3 -1
  524. package/dist/core/extensions/agent-events.d.ts +159 -0
  525. package/dist/core/extensions/agent-events.d.ts.map +1 -0
  526. package/dist/core/extensions/agent-events.js +2 -0
  527. package/dist/core/extensions/agent-events.js.map +1 -0
  528. package/dist/core/extensions/api-types.d.ts +189 -0
  529. package/dist/core/extensions/api-types.d.ts.map +1 -0
  530. package/dist/core/extensions/api-types.js +2 -0
  531. package/dist/core/extensions/api-types.js.map +1 -0
  532. package/dist/core/extensions/command-types.d.ts +14 -0
  533. package/dist/core/extensions/command-types.d.ts.map +1 -0
  534. package/dist/core/extensions/command-types.js +2 -0
  535. package/dist/core/extensions/command-types.js.map +1 -0
  536. package/dist/core/extensions/context-types.d.ts +130 -0
  537. package/dist/core/extensions/context-types.d.ts.map +1 -0
  538. package/dist/core/extensions/context-types.js +2 -0
  539. package/dist/core/extensions/context-types.js.map +1 -0
  540. package/dist/core/extensions/event-results.d.ts +61 -0
  541. package/dist/core/extensions/event-results.d.ts.map +1 -0
  542. package/dist/core/extensions/event-results.js +2 -0
  543. package/dist/core/extensions/event-results.js.map +1 -0
  544. package/dist/core/extensions/event-types.d.ts +6 -0
  545. package/dist/core/extensions/event-types.d.ts.map +1 -0
  546. package/dist/core/extensions/event-types.js +2 -0
  547. package/dist/core/extensions/event-types.js.map +1 -0
  548. package/dist/core/extensions/loader-api.d.ts +10 -0
  549. package/dist/core/extensions/loader-api.d.ts.map +1 -0
  550. package/dist/core/extensions/loader-api.js +143 -0
  551. package/dist/core/extensions/loader-api.js.map +1 -0
  552. package/dist/core/extensions/loader-core.d.ts +10 -0
  553. package/dist/core/extensions/loader-core.d.ts.map +1 -0
  554. package/dist/core/extensions/loader-core.js +98 -0
  555. package/dist/core/extensions/loader-core.js.map +1 -0
  556. package/dist/core/extensions/loader-discovery.d.ts +7 -0
  557. package/dist/core/extensions/loader-discovery.d.ts.map +1 -0
  558. package/dist/core/extensions/loader-discovery.js +139 -0
  559. package/dist/core/extensions/loader-discovery.js.map +1 -0
  560. package/dist/core/extensions/loader-resources.d.ts +11 -0
  561. package/dist/core/extensions/loader-resources.d.ts.map +1 -0
  562. package/dist/core/extensions/loader-resources.js +10 -0
  563. package/dist/core/extensions/loader-resources.js.map +1 -0
  564. package/dist/core/extensions/loader-runtime.d.ts +7 -0
  565. package/dist/core/extensions/loader-runtime.d.ts.map +1 -0
  566. package/dist/core/extensions/loader-runtime.js +51 -0
  567. package/dist/core/extensions/loader-runtime.js.map +1 -0
  568. package/dist/core/extensions/loader-virtual-modules.d.ts +9 -0
  569. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -0
  570. package/dist/core/extensions/loader-virtual-modules.js +124 -0
  571. package/dist/core/extensions/loader-virtual-modules.js.map +1 -0
  572. package/dist/core/extensions/loader.d.ts +5 -28
  573. package/dist/core/extensions/loader.d.ts.map +1 -1
  574. package/dist/core/extensions/loader.js +4 -542
  575. package/dist/core/extensions/loader.js.map +1 -1
  576. package/dist/core/extensions/message-types.d.ts +34 -0
  577. package/dist/core/extensions/message-types.d.ts.map +1 -0
  578. package/dist/core/extensions/message-types.js +2 -0
  579. package/dist/core/extensions/message-types.js.map +1 -0
  580. package/dist/core/extensions/provider-types.d.ts +71 -0
  581. package/dist/core/extensions/provider-types.d.ts.map +1 -0
  582. package/dist/core/extensions/provider-types.js +2 -0
  583. package/dist/core/extensions/provider-types.js.map +1 -0
  584. package/dist/core/extensions/runner-context.d.ts +42 -0
  585. package/dist/core/extensions/runner-context.d.ts.map +1 -0
  586. package/dist/core/extensions/runner-context.js +112 -0
  587. package/dist/core/extensions/runner-context.js.map +1 -0
  588. package/dist/core/extensions/runner-events.d.ts +47 -0
  589. package/dist/core/extensions/runner-events.d.ts.map +1 -0
  590. package/dist/core/extensions/runner-events.js +280 -0
  591. package/dist/core/extensions/runner-events.js.map +1 -0
  592. package/dist/core/extensions/runner-handlers.d.ts +32 -0
  593. package/dist/core/extensions/runner-handlers.d.ts.map +1 -0
  594. package/dist/core/extensions/runner-handlers.js +2 -0
  595. package/dist/core/extensions/runner-handlers.js.map +1 -0
  596. package/dist/core/extensions/runner-project-trust.d.ts +6 -0
  597. package/dist/core/extensions/runner-project-trust.d.ts.map +1 -0
  598. package/dist/core/extensions/runner-project-trust.js +27 -0
  599. package/dist/core/extensions/runner-project-trust.js.map +1 -0
  600. package/dist/core/extensions/runner-registries.d.ts +8 -0
  601. package/dist/core/extensions/runner-registries.d.ts.map +1 -0
  602. package/dist/core/extensions/runner-registries.js +76 -0
  603. package/dist/core/extensions/runner-registries.js.map +1 -0
  604. package/dist/core/extensions/runner-shortcuts.d.ts +10 -0
  605. package/dist/core/extensions/runner-shortcuts.d.ts.map +1 -0
  606. package/dist/core/extensions/runner-shortcuts.js +71 -0
  607. package/dist/core/extensions/runner-shortcuts.js.map +1 -0
  608. package/dist/core/extensions/runner-ui.d.ts +3 -0
  609. package/dist/core/extensions/runner-ui.d.ts.map +1 -0
  610. package/dist/core/extensions/runner-ui.js +50 -0
  611. package/dist/core/extensions/runner-ui.js.map +1 -0
  612. package/dist/core/extensions/runner.d.ts +7 -74
  613. package/dist/core/extensions/runner.d.ts.map +1 -1
  614. package/dist/core/extensions/runner.js +67 -673
  615. package/dist/core/extensions/runner.js.map +1 -1
  616. package/dist/core/extensions/runtime-types.d.ts +179 -0
  617. package/dist/core/extensions/runtime-types.d.ts.map +1 -0
  618. package/dist/core/extensions/runtime-types.js +2 -0
  619. package/dist/core/extensions/runtime-types.js.map +1 -0
  620. package/dist/core/extensions/session-events.d.ts +89 -0
  621. package/dist/core/extensions/session-events.d.ts.map +1 -0
  622. package/dist/core/extensions/session-events.js +2 -0
  623. package/dist/core/extensions/session-events.js.map +1 -0
  624. package/dist/core/extensions/tool-events.d.ts +127 -0
  625. package/dist/core/extensions/tool-events.d.ts.map +1 -0
  626. package/dist/core/extensions/tool-events.js +26 -0
  627. package/dist/core/extensions/tool-events.js.map +1 -0
  628. package/dist/core/extensions/tool-types.d.ts +100 -0
  629. package/dist/core/extensions/tool-types.d.ts.map +1 -0
  630. package/dist/core/extensions/tool-types.js +11 -0
  631. package/dist/core/extensions/tool-types.js.map +1 -0
  632. package/dist/core/extensions/types.d.ts +20 -1288
  633. package/dist/core/extensions/types.d.ts.map +1 -1
  634. package/dist/core/extensions/types.js +4 -34
  635. package/dist/core/extensions/types.js.map +1 -1
  636. package/dist/core/extensions/ui-types.d.ts +200 -0
  637. package/dist/core/extensions/ui-types.d.ts.map +1 -0
  638. package/dist/core/extensions/ui-types.js +2 -0
  639. package/dist/core/extensions/ui-types.js.map +1 -0
  640. package/dist/core/index.d.ts +0 -1
  641. package/dist/core/index.d.ts.map +1 -1
  642. package/dist/core/index.js +0 -1
  643. package/dist/core/index.js.map +1 -1
  644. package/dist/core/model-registry-auth.d.ts +7 -0
  645. package/dist/core/model-registry-auth.d.ts.map +1 -0
  646. package/dist/core/model-registry-auth.js +64 -0
  647. package/dist/core/model-registry-auth.js.map +1 -0
  648. package/dist/core/model-registry-builtins.d.ts +9 -0
  649. package/dist/core/model-registry-builtins.d.ts.map +1 -0
  650. package/dist/core/model-registry-builtins.js +126 -0
  651. package/dist/core/model-registry-builtins.js.map +1 -0
  652. package/dist/core/model-registry-custom-loader.d.ts +3 -0
  653. package/dist/core/model-registry-custom-loader.d.ts.map +1 -0
  654. package/dist/core/model-registry-custom-loader.js +213 -0
  655. package/dist/core/model-registry-custom-loader.js.map +1 -0
  656. package/dist/core/model-registry-dynamic.d.ts +6 -0
  657. package/dist/core/model-registry-dynamic.d.ts.map +1 -0
  658. package/dist/core/model-registry-dynamic.js +155 -0
  659. package/dist/core/model-registry-dynamic.js.map +1 -0
  660. package/dist/core/model-registry-loader.d.ts +4 -0
  661. package/dist/core/model-registry-loader.d.ts.map +1 -0
  662. package/dist/core/model-registry-loader.js +20 -0
  663. package/dist/core/model-registry-loader.js.map +1 -0
  664. package/dist/core/model-registry-schemas.d.ts +1136 -0
  665. package/dist/core/model-registry-schemas.d.ts.map +1 -0
  666. package/dist/core/model-registry-schemas.js +171 -0
  667. package/dist/core/model-registry-schemas.js.map +1 -0
  668. package/dist/core/model-registry-types.d.ts +74 -0
  669. package/dist/core/model-registry-types.d.ts.map +1 -0
  670. package/dist/core/model-registry-types.js +2 -0
  671. package/dist/core/model-registry-types.js.map +1 -0
  672. package/dist/core/model-registry.d.ts +3 -76
  673. package/dist/core/model-registry.d.ts.map +1 -1
  674. package/dist/core/model-registry.js +24 -733
  675. package/dist/core/model-registry.js.map +1 -1
  676. package/dist/core/model-resolver-cli.d.ts +19 -0
  677. package/dist/core/model-resolver-cli.d.ts.map +1 -0
  678. package/dist/core/model-resolver-cli.js +118 -0
  679. package/dist/core/model-resolver-cli.js.map +1 -0
  680. package/dist/core/model-resolver-defaults.d.ts +5 -0
  681. package/dist/core/model-resolver-defaults.d.ts.map +1 -0
  682. package/dist/core/model-resolver-defaults.js +47 -0
  683. package/dist/core/model-resolver-defaults.js.map +1 -0
  684. package/dist/core/model-resolver-initial.d.ts +31 -0
  685. package/dist/core/model-resolver-initial.d.ts.map +1 -0
  686. package/dist/core/model-resolver-initial.js +116 -0
  687. package/dist/core/model-resolver-initial.js.map +1 -0
  688. package/dist/core/model-resolver-patterns.d.ts +26 -0
  689. package/dist/core/model-resolver-patterns.d.ts.map +1 -0
  690. package/dist/core/model-resolver-patterns.js +139 -0
  691. package/dist/core/model-resolver-patterns.js.map +1 -0
  692. package/dist/core/model-resolver-scope.d.ts +15 -0
  693. package/dist/core/model-resolver-scope.d.ts.map +1 -0
  694. package/dist/core/model-resolver-scope.js +66 -0
  695. package/dist/core/model-resolver-scope.js.map +1 -0
  696. package/dist/core/model-resolver-types.d.ts +29 -0
  697. package/dist/core/model-resolver-types.d.ts.map +1 -0
  698. package/dist/core/model-resolver-types.js +2 -0
  699. package/dist/core/model-resolver-types.js.map +1 -0
  700. package/dist/core/model-resolver.d.ts +6 -107
  701. package/dist/core/model-resolver.d.ts.map +1 -1
  702. package/dist/core/model-resolver.js +5 -549
  703. package/dist/core/model-resolver.js.map +1 -1
  704. package/dist/core/package-manager-auto-resources.d.ts +5 -0
  705. package/dist/core/package-manager-auto-resources.d.ts.map +1 -0
  706. package/dist/core/package-manager-auto-resources.js +109 -0
  707. package/dist/core/package-manager-auto-resources.js.map +1 -0
  708. package/dist/core/package-manager-command.d.ts +11 -0
  709. package/dist/core/package-manager-command.d.ts.map +1 -0
  710. package/dist/core/package-manager-command.js +102 -0
  711. package/dist/core/package-manager-command.js.map +1 -0
  712. package/dist/core/package-manager-constants.d.ts +4 -0
  713. package/dist/core/package-manager-constants.d.ts.map +1 -0
  714. package/dist/core/package-manager-constants.js +4 -0
  715. package/dist/core/package-manager-constants.js.map +1 -0
  716. package/dist/core/package-manager-env.d.ts +4 -0
  717. package/dist/core/package-manager-env.d.ts.map +1 -0
  718. package/dist/core/package-manager-env.js +40 -0
  719. package/dist/core/package-manager-env.js.map +1 -0
  720. package/dist/core/package-manager-git.d.ts +10 -0
  721. package/dist/core/package-manager-git.d.ts.map +1 -0
  722. package/dist/core/package-manager-git.js +271 -0
  723. package/dist/core/package-manager-git.js.map +1 -0
  724. package/dist/core/package-manager-manifest.d.ts +7 -0
  725. package/dist/core/package-manager-manifest.d.ts.map +1 -0
  726. package/dist/core/package-manager-manifest.js +45 -0
  727. package/dist/core/package-manager-manifest.js.map +1 -0
  728. package/dist/core/package-manager-npm.d.ts +25 -0
  729. package/dist/core/package-manager-npm.d.ts.map +1 -0
  730. package/dist/core/package-manager-npm.js +252 -0
  731. package/dist/core/package-manager-npm.js.map +1 -0
  732. package/dist/core/package-manager-operations.d.ts +11 -0
  733. package/dist/core/package-manager-operations.d.ts.map +1 -0
  734. package/dist/core/package-manager-operations.js +196 -0
  735. package/dist/core/package-manager-operations.js.map +1 -0
  736. package/dist/core/package-manager-paths.d.ts +14 -0
  737. package/dist/core/package-manager-paths.d.ts.map +1 -0
  738. package/dist/core/package-manager-paths.js +61 -0
  739. package/dist/core/package-manager-paths.js.map +1 -0
  740. package/dist/core/package-manager-progress.d.ts +4 -0
  741. package/dist/core/package-manager-progress.d.ts.map +1 -0
  742. package/dist/core/package-manager-progress.js +16 -0
  743. package/dist/core/package-manager-progress.js.map +1 -0
  744. package/dist/core/package-manager-resolver.d.ts +5 -0
  745. package/dist/core/package-manager-resolver.d.ts.map +1 -0
  746. package/dist/core/package-manager-resolver.js +149 -0
  747. package/dist/core/package-manager-resolver.js.map +1 -0
  748. package/dist/core/package-manager-resource-accumulator.d.ts +6 -0
  749. package/dist/core/package-manager-resource-accumulator.d.ts.map +1 -0
  750. package/dist/core/package-manager-resource-accumulator.js +67 -0
  751. package/dist/core/package-manager-resource-accumulator.js.map +1 -0
  752. package/dist/core/package-manager-resource-collector.d.ts +5 -0
  753. package/dist/core/package-manager-resource-collector.d.ts.map +1 -0
  754. package/dist/core/package-manager-resource-collector.js +148 -0
  755. package/dist/core/package-manager-resource-collector.js.map +1 -0
  756. package/dist/core/package-manager-resource-files.d.ts +14 -0
  757. package/dist/core/package-manager-resource-files.d.ts.map +1 -0
  758. package/dist/core/package-manager-resource-files.js +265 -0
  759. package/dist/core/package-manager-resource-files.js.map +1 -0
  760. package/dist/core/package-manager-resource-patterns.d.ts +12 -0
  761. package/dist/core/package-manager-resource-patterns.d.ts.map +1 -0
  762. package/dist/core/package-manager-resource-patterns.js +136 -0
  763. package/dist/core/package-manager-resource-patterns.js.map +1 -0
  764. package/dist/core/package-manager-settings.d.ts +10 -0
  765. package/dist/core/package-manager-settings.d.ts.map +1 -0
  766. package/dist/core/package-manager-settings.js +91 -0
  767. package/dist/core/package-manager-settings.js.map +1 -0
  768. package/dist/core/package-manager-source.d.ts +21 -0
  769. package/dist/core/package-manager-source.d.ts.map +1 -0
  770. package/dist/core/package-manager-source.js +146 -0
  771. package/dist/core/package-manager-source.js.map +1 -0
  772. package/dist/core/package-manager-types.d.ts +169 -0
  773. package/dist/core/package-manager-types.d.ts.map +1 -0
  774. package/dist/core/package-manager-types.js +9 -0
  775. package/dist/core/package-manager-types.js.map +1 -0
  776. package/dist/core/package-manager.d.ts +9 -174
  777. package/dist/core/package-manager.d.ts.map +1 -1
  778. package/dist/core/package-manager.js +56 -2100
  779. package/dist/core/package-manager.js.map +1 -1
  780. package/dist/core/resource-loader-assets.d.ts +6 -0
  781. package/dist/core/resource-loader-assets.d.ts.map +1 -0
  782. package/dist/core/resource-loader-assets.js +209 -0
  783. package/dist/core/resource-loader-assets.js.map +1 -0
  784. package/dist/core/resource-loader-context-files.d.ts +10 -0
  785. package/dist/core/resource-loader-context-files.d.ts.map +1 -0
  786. package/dist/core/resource-loader-context-files.js +74 -0
  787. package/dist/core/resource-loader-context-files.js.map +1 -0
  788. package/dist/core/resource-loader-core.d.ts +83 -0
  789. package/dist/core/resource-loader-core.d.ts.map +1 -0
  790. package/dist/core/resource-loader-core.js +170 -0
  791. package/dist/core/resource-loader-core.js.map +1 -0
  792. package/dist/core/resource-loader-discovery.d.ts +4 -0
  793. package/dist/core/resource-loader-discovery.d.ts.map +1 -0
  794. package/dist/core/resource-loader-discovery.js +28 -0
  795. package/dist/core/resource-loader-discovery.js.map +1 -0
  796. package/dist/core/resource-loader-extensions.d.ts +13 -0
  797. package/dist/core/resource-loader-extensions.d.ts.map +1 -0
  798. package/dist/core/resource-loader-extensions.js +110 -0
  799. package/dist/core/resource-loader-extensions.js.map +1 -0
  800. package/dist/core/resource-loader-helpers.d.ts +4 -0
  801. package/dist/core/resource-loader-helpers.d.ts.map +1 -0
  802. package/dist/core/resource-loader-helpers.js +23 -0
  803. package/dist/core/resource-loader-helpers.js.map +1 -0
  804. package/dist/core/resource-loader-internals.d.ts +97 -0
  805. package/dist/core/resource-loader-internals.d.ts.map +1 -0
  806. package/dist/core/resource-loader-internals.js +4 -0
  807. package/dist/core/resource-loader-internals.js.map +1 -0
  808. package/dist/core/resource-loader-package-resources.d.ts +31 -0
  809. package/dist/core/resource-loader-package-resources.d.ts.map +1 -0
  810. package/dist/core/resource-loader-package-resources.js +112 -0
  811. package/dist/core/resource-loader-package-resources.js.map +1 -0
  812. package/dist/core/resource-loader-paths.d.ts +4 -0
  813. package/dist/core/resource-loader-paths.d.ts.map +1 -0
  814. package/dist/core/resource-loader-paths.js +22 -0
  815. package/dist/core/resource-loader-paths.js.map +1 -0
  816. package/dist/core/resource-loader-reload.d.ts +6 -0
  817. package/dist/core/resource-loader-reload.d.ts.map +1 -0
  818. package/dist/core/resource-loader-reload.js +230 -0
  819. package/dist/core/resource-loader-reload.js.map +1 -0
  820. package/dist/core/resource-loader-source-info.d.ts +9 -0
  821. package/dist/core/resource-loader-source-info.d.ts.map +1 -0
  822. package/dist/core/resource-loader-source-info.js +101 -0
  823. package/dist/core/resource-loader-source-info.js.map +1 -0
  824. package/dist/core/resource-loader-types.d.ts +130 -0
  825. package/dist/core/resource-loader-types.d.ts.map +1 -0
  826. package/dist/core/resource-loader-types.js +2 -0
  827. package/dist/core/resource-loader-types.js.map +1 -0
  828. package/dist/core/resource-loader.d.ts +3 -242
  829. package/dist/core/resource-loader.d.ts.map +1 -1
  830. package/dist/core/resource-loader.js +2 -976
  831. package/dist/core/resource-loader.js.map +1 -1
  832. package/dist/core/sdk-exports.d.ts +7 -0
  833. package/dist/core/sdk-exports.d.ts.map +1 -0
  834. package/dist/core/sdk-exports.js +5 -0
  835. package/dist/core/sdk-exports.js.map +1 -0
  836. package/dist/core/sdk-types.d.ts +83 -0
  837. package/dist/core/sdk-types.d.ts.map +1 -0
  838. package/dist/core/sdk-types.js +2 -0
  839. package/dist/core/sdk-types.js.map +1 -0
  840. package/dist/core/sdk.d.ts +3 -91
  841. package/dist/core/sdk.d.ts.map +1 -1
  842. package/dist/core/sdk.js +2 -7
  843. package/dist/core/sdk.js.map +1 -1
  844. package/dist/core/session-manager-archive.d.ts +27 -0
  845. package/dist/core/session-manager-archive.d.ts.map +1 -0
  846. package/dist/core/session-manager-archive.js +114 -0
  847. package/dist/core/session-manager-archive.js.map +1 -0
  848. package/dist/core/session-manager-core.d.ts +104 -0
  849. package/dist/core/session-manager-core.d.ts.map +1 -0
  850. package/dist/core/session-manager-core.js +346 -0
  851. package/dist/core/session-manager-core.js.map +1 -0
  852. package/dist/core/session-manager-entries.d.ts +38 -0
  853. package/dist/core/session-manager-entries.d.ts.map +1 -0
  854. package/dist/core/session-manager-entries.js +124 -0
  855. package/dist/core/session-manager-entries.js.map +1 -0
  856. package/dist/core/session-manager-history.d.ts +38 -0
  857. package/dist/core/session-manager-history.d.ts.map +1 -0
  858. package/dist/core/session-manager-history.js +379 -0
  859. package/dist/core/session-manager-history.js.map +1 -0
  860. package/dist/core/session-manager-list.d.ts +5 -0
  861. package/dist/core/session-manager-list.d.ts.map +1 -0
  862. package/dist/core/session-manager-list.js +196 -0
  863. package/dist/core/session-manager-list.js.map +1 -0
  864. package/dist/core/session-manager-migrations.d.ts +11 -0
  865. package/dist/core/session-manager-migrations.d.ts.map +1 -0
  866. package/dist/core/session-manager-migrations.js +80 -0
  867. package/dist/core/session-manager-migrations.js.map +1 -0
  868. package/dist/core/session-manager-paths.d.ts +7 -0
  869. package/dist/core/session-manager-paths.d.ts.map +1 -0
  870. package/dist/core/session-manager-paths.js +22 -0
  871. package/dist/core/session-manager-paths.js.map +1 -0
  872. package/dist/core/session-manager-storage.d.ts +15 -0
  873. package/dist/core/session-manager-storage.d.ts.map +1 -0
  874. package/dist/core/session-manager-storage.js +127 -0
  875. package/dist/core/session-manager-storage.js.map +1 -0
  876. package/dist/core/session-manager-types.d.ts +172 -0
  877. package/dist/core/session-manager-types.d.ts.map +1 -0
  878. package/dist/core/session-manager-types.js +2 -0
  879. package/dist/core/session-manager-types.js.map +1 -0
  880. package/dist/core/session-manager-validation.d.ts +7 -0
  881. package/dist/core/session-manager-validation.d.ts.map +1 -0
  882. package/dist/core/session-manager-validation.js +34 -0
  883. package/dist/core/session-manager-validation.js.map +1 -0
  884. package/dist/core/session-manager.d.ts +8 -390
  885. package/dist/core/session-manager.d.ts.map +1 -1
  886. package/dist/core/session-manager.js +7 -1418
  887. package/dist/core/session-manager.js.map +1 -1
  888. package/dist/core/settings-manager-basic-accessors.d.ts +65 -0
  889. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -0
  890. package/dist/core/settings-manager-basic-accessors.js +253 -0
  891. package/dist/core/settings-manager-basic-accessors.js.map +1 -0
  892. package/dist/core/settings-manager-core.d.ts +57 -0
  893. package/dist/core/settings-manager-core.d.ts.map +1 -0
  894. package/dist/core/settings-manager-core.js +387 -0
  895. package/dist/core/settings-manager-core.js.map +1 -0
  896. package/dist/core/settings-manager-internals.d.ts +13 -0
  897. package/dist/core/settings-manager-internals.d.ts.map +1 -0
  898. package/dist/core/settings-manager-internals.js +4 -0
  899. package/dist/core/settings-manager-internals.js.map +1 -0
  900. package/dist/core/settings-manager-resource-accessors.d.ts +43 -0
  901. package/dist/core/settings-manager-resource-accessors.d.ts.map +1 -0
  902. package/dist/core/settings-manager-resource-accessors.js +172 -0
  903. package/dist/core/settings-manager-resource-accessors.js.map +1 -0
  904. package/dist/core/settings-manager-ui-accessors.d.ts +44 -0
  905. package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -0
  906. package/dist/core/settings-manager-ui-accessors.js +208 -0
  907. package/dist/core/settings-manager-ui-accessors.js.map +1 -0
  908. package/dist/core/settings-manager.d.ts +6 -321
  909. package/dist/core/settings-manager.d.ts.map +1 -1
  910. package/dist/core/settings-manager.js +5 -1060
  911. package/dist/core/settings-manager.js.map +1 -1
  912. package/dist/core/settings-merge.d.ts +4 -0
  913. package/dist/core/settings-merge.d.ts.map +1 -0
  914. package/dist/core/settings-merge.js +26 -0
  915. package/dist/core/settings-merge.js.map +1 -0
  916. package/dist/core/settings-storage.d.ts +20 -0
  917. package/dist/core/settings-storage.d.ts.map +1 -0
  918. package/dist/core/settings-storage.js +100 -0
  919. package/dist/core/settings-storage.js.map +1 -0
  920. package/dist/core/settings-types.d.ts +123 -0
  921. package/dist/core/settings-types.d.ts.map +1 -0
  922. package/dist/core/settings-types.js +2 -0
  923. package/dist/core/settings-types.js.map +1 -0
  924. package/dist/core/system-prompt.d.ts.map +1 -1
  925. package/dist/core/system-prompt.js +7 -0
  926. package/dist/core/system-prompt.js.map +1 -1
  927. package/dist/core/tools/bash.d.ts +0 -5
  928. package/dist/core/tools/bash.d.ts.map +1 -1
  929. package/dist/core/tools/bash.js +10 -11
  930. package/dist/core/tools/bash.js.map +1 -1
  931. package/dist/core/tools/edit-diff-preserve.d.ts +18 -0
  932. package/dist/core/tools/edit-diff-preserve.d.ts.map +1 -0
  933. package/dist/core/tools/edit-diff-preserve.js +85 -0
  934. package/dist/core/tools/edit-diff-preserve.js.map +1 -0
  935. package/dist/core/tools/edit-diff.d.ts +3 -2
  936. package/dist/core/tools/edit-diff.d.ts.map +1 -1
  937. package/dist/core/tools/edit-diff.js +15 -18
  938. package/dist/core/tools/edit-diff.js.map +1 -1
  939. package/dist/core/tools/index.d.ts +0 -1
  940. package/dist/core/tools/index.d.ts.map +1 -1
  941. package/dist/core/tools/index.js +0 -1
  942. package/dist/core/tools/index.js.map +1 -1
  943. package/dist/core/tools/todos-execute.d.ts +5 -0
  944. package/dist/core/tools/todos-execute.d.ts.map +1 -0
  945. package/dist/core/tools/todos-execute.js +200 -0
  946. package/dist/core/tools/todos-execute.js.map +1 -0
  947. package/dist/core/tools/todos-locks.d.ts +4 -0
  948. package/dist/core/tools/todos-locks.d.ts.map +1 -0
  949. package/dist/core/tools/todos-locks.js +80 -0
  950. package/dist/core/tools/todos-locks.js.map +1 -0
  951. package/dist/core/tools/todos-model.d.ts +21 -0
  952. package/dist/core/tools/todos-model.d.ts.map +1 -0
  953. package/dist/core/tools/todos-model.js +71 -0
  954. package/dist/core/tools/todos-model.js.map +1 -0
  955. package/dist/core/tools/todos-mutations.d.ts +6 -0
  956. package/dist/core/tools/todos-mutations.d.ts.map +1 -0
  957. package/dist/core/tools/todos-mutations.js +85 -0
  958. package/dist/core/tools/todos-mutations.js.map +1 -0
  959. package/dist/core/tools/todos-paths.d.ts +5 -0
  960. package/dist/core/tools/todos-paths.d.ts.map +1 -0
  961. package/dist/core/tools/todos-paths.js +25 -0
  962. package/dist/core/tools/todos-paths.js.map +1 -0
  963. package/dist/core/tools/todos-render.d.ts +10 -0
  964. package/dist/core/tools/todos-render.d.ts.map +1 -0
  965. package/dist/core/tools/todos-render.js +159 -0
  966. package/dist/core/tools/todos-render.js.map +1 -0
  967. package/dist/core/tools/todos-storage.d.ts +9 -0
  968. package/dist/core/tools/todos-storage.d.ts.map +1 -0
  969. package/dist/core/tools/todos-storage.js +183 -0
  970. package/dist/core/tools/todos-storage.js.map +1 -0
  971. package/dist/core/tools/todos-types.d.ts +46 -0
  972. package/dist/core/tools/todos-types.d.ts.map +1 -0
  973. package/dist/core/tools/todos-types.js +27 -0
  974. package/dist/core/tools/todos-types.js.map +1 -0
  975. package/dist/core/tools/todos.d.ts +12 -32
  976. package/dist/core/tools/todos.d.ts.map +1 -1
  977. package/dist/core/tools/todos.js +7 -893
  978. package/dist/core/tools/todos.js.map +1 -1
  979. package/dist/index-extensions.d.ts +3 -0
  980. package/dist/index-extensions.d.ts.map +1 -0
  981. package/dist/index-extensions.js +2 -0
  982. package/dist/index-extensions.js.map +1 -0
  983. package/dist/index.d.ts +3 -4
  984. package/dist/index.d.ts.map +1 -1
  985. package/dist/index.js +2 -2
  986. package/dist/index.js.map +1 -1
  987. package/dist/main-app-mode.d.ts +15 -0
  988. package/dist/main-app-mode.d.ts.map +1 -0
  989. package/dist/main-app-mode.js +51 -0
  990. package/dist/main-app-mode.js.map +1 -0
  991. package/dist/main-session-options.d.ts +12 -0
  992. package/dist/main-session-options.d.ts.map +1 -0
  993. package/dist/main-session-options.js +87 -0
  994. package/dist/main-session-options.js.map +1 -0
  995. package/dist/main-session.d.ts +9 -0
  996. package/dist/main-session.d.ts.map +1 -0
  997. package/dist/main-session.js +188 -0
  998. package/dist/main-session.js.map +1 -0
  999. package/dist/main-stdio.d.ts +12 -0
  1000. package/dist/main-stdio.d.ts.map +1 -0
  1001. package/dist/main-stdio.js +68 -0
  1002. package/dist/main-stdio.js.map +1 -0
  1003. package/dist/main.d.ts +2 -3
  1004. package/dist/main.d.ts.map +1 -1
  1005. package/dist/main.js +11 -388
  1006. package/dist/main.js.map +1 -1
  1007. package/dist/migrations-config-values.d.ts +9 -0
  1008. package/dist/migrations-config-values.d.ts.map +1 -0
  1009. package/dist/migrations-config-values.js +298 -0
  1010. package/dist/migrations-config-values.js.map +1 -0
  1011. package/dist/migrations.d.ts.map +1 -1
  1012. package/dist/migrations.js +2 -296
  1013. package/dist/migrations.js.map +1 -1
  1014. package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
  1015. package/dist/modes/interactive/components/chat-message-renderer.js +0 -7
  1016. package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
  1017. package/dist/modes/interactive/components/chat-session-host-actions.d.ts +9 -0
  1018. package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -0
  1019. package/dist/modes/interactive/components/chat-session-host-actions.js +244 -0
  1020. package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -0
  1021. package/dist/modes/interactive/components/chat-session-host-editor.d.ts +18 -0
  1022. package/dist/modes/interactive/components/chat-session-host-editor.d.ts.map +1 -0
  1023. package/dist/modes/interactive/components/chat-session-host-editor.js +165 -0
  1024. package/dist/modes/interactive/components/chat-session-host-editor.js.map +1 -0
  1025. package/dist/modes/interactive/components/chat-session-host-events.d.ts +5 -0
  1026. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -0
  1027. package/dist/modes/interactive/components/chat-session-host-events.js +200 -0
  1028. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -0
  1029. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts +13 -0
  1030. package/dist/modes/interactive/components/chat-session-host-rendering.d.ts.map +1 -0
  1031. package/dist/modes/interactive/components/chat-session-host-rendering.js +185 -0
  1032. package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -0
  1033. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts +13 -0
  1034. package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -0
  1035. package/dist/modes/interactive/components/chat-session-host-runtime.js +101 -0
  1036. package/dist/modes/interactive/components/chat-session-host-runtime.js.map +1 -0
  1037. package/dist/modes/interactive/components/chat-session-host-state.d.ts +53 -0
  1038. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -0
  1039. package/dist/modes/interactive/components/chat-session-host-state.js +42 -0
  1040. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -0
  1041. package/dist/modes/interactive/components/chat-session-host-types.d.ts +63 -0
  1042. package/dist/modes/interactive/components/chat-session-host-types.d.ts.map +1 -0
  1043. package/dist/modes/interactive/components/chat-session-host-types.js +2 -0
  1044. package/dist/modes/interactive/components/chat-session-host-types.js.map +1 -0
  1045. package/dist/modes/interactive/components/chat-session-host-utils.d.ts +28 -0
  1046. package/dist/modes/interactive/components/chat-session-host-utils.d.ts.map +1 -0
  1047. package/dist/modes/interactive/components/chat-session-host-utils.js +103 -0
  1048. package/dist/modes/interactive/components/chat-session-host-utils.js.map +1 -0
  1049. package/dist/modes/interactive/components/chat-session-host.d.ts +6 -129
  1050. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  1051. package/dist/modes/interactive/components/chat-session-host.js +50 -1022
  1052. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  1053. package/dist/modes/interactive/components/config-selector-list.d.ts +65 -0
  1054. package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -0
  1055. package/dist/modes/interactive/components/config-selector-list.js +458 -0
  1056. package/dist/modes/interactive/components/config-selector-list.js.map +1 -0
  1057. package/dist/modes/interactive/components/config-selector.d.ts +3 -58
  1058. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  1059. package/dist/modes/interactive/components/config-selector.js +2 -457
  1060. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  1061. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  1062. package/dist/modes/interactive/components/model-selector.js +2 -2
  1063. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  1064. package/dist/modes/interactive/components/session-selector-delete.d.ts +10 -0
  1065. package/dist/modes/interactive/components/session-selector-delete.d.ts.map +1 -0
  1066. package/dist/modes/interactive/components/session-selector-delete.js +40 -0
  1067. package/dist/modes/interactive/components/session-selector-delete.js.map +1 -0
  1068. package/dist/modes/interactive/components/session-selector-header.d.ts +33 -0
  1069. package/dist/modes/interactive/components/session-selector-header.d.ts.map +1 -0
  1070. package/dist/modes/interactive/components/session-selector-header.js +117 -0
  1071. package/dist/modes/interactive/components/session-selector-header.js.map +1 -0
  1072. package/dist/modes/interactive/components/session-selector-list.d.ts +49 -0
  1073. package/dist/modes/interactive/components/session-selector-list.d.ts.map +1 -0
  1074. package/dist/modes/interactive/components/session-selector-list.js +307 -0
  1075. package/dist/modes/interactive/components/session-selector-list.js.map +1 -0
  1076. package/dist/modes/interactive/components/session-selector-tree.d.ts +25 -0
  1077. package/dist/modes/interactive/components/session-selector-tree.d.ts.map +1 -0
  1078. package/dist/modes/interactive/components/session-selector-tree.js +53 -0
  1079. package/dist/modes/interactive/components/session-selector-tree.js.map +1 -0
  1080. package/dist/modes/interactive/components/session-selector-types.d.ts +4 -0
  1081. package/dist/modes/interactive/components/session-selector-types.d.ts.map +1 -0
  1082. package/dist/modes/interactive/components/session-selector-types.js +2 -0
  1083. package/dist/modes/interactive/components/session-selector-types.js.map +1 -0
  1084. package/dist/modes/interactive/components/session-selector-utils.d.ts +4 -0
  1085. package/dist/modes/interactive/components/session-selector-utils.d.ts.map +1 -0
  1086. package/dist/modes/interactive/components/session-selector-utils.js +37 -0
  1087. package/dist/modes/interactive/components/session-selector-utils.js.map +1 -0
  1088. package/dist/modes/interactive/components/session-selector.d.ts +3 -49
  1089. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  1090. package/dist/modes/interactive/components/session-selector.js +5 -542
  1091. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  1092. package/dist/modes/interactive/components/settings-selector-handlers.d.ts +3 -0
  1093. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -0
  1094. package/dist/modes/interactive/components/settings-selector-handlers.js +84 -0
  1095. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -0
  1096. package/dist/modes/interactive/components/settings-selector-items.d.ts +4 -0
  1097. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -0
  1098. package/dist/modes/interactive/components/settings-selector-items.js +211 -0
  1099. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -0
  1100. package/dist/modes/interactive/components/settings-selector-options.d.ts +6 -0
  1101. package/dist/modes/interactive/components/settings-selector-options.d.ts.map +1 -0
  1102. package/dist/modes/interactive/components/settings-selector-options.js +14 -0
  1103. package/dist/modes/interactive/components/settings-selector-options.js.map +1 -0
  1104. package/dist/modes/interactive/components/settings-selector-submenus.d.ts +44 -0
  1105. package/dist/modes/interactive/components/settings-selector-submenus.d.ts.map +1 -0
  1106. package/dist/modes/interactive/components/settings-selector-submenus.js +228 -0
  1107. package/dist/modes/interactive/components/settings-selector-submenus.js.map +1 -0
  1108. package/dist/modes/interactive/components/settings-selector-types.d.ts +67 -0
  1109. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -0
  1110. package/dist/modes/interactive/components/settings-selector-types.js +2 -0
  1111. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -0
  1112. package/dist/modes/interactive/components/settings-selector.d.ts +2 -63
  1113. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  1114. package/dist/modes/interactive/components/settings-selector.js +5 -538
  1115. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  1116. package/dist/modes/interactive/components/tree-selector-component.d.ts +21 -0
  1117. package/dist/modes/interactive/components/tree-selector-component.d.ts.map +1 -0
  1118. package/dist/modes/interactive/components/tree-selector-component.js +80 -0
  1119. package/dist/modes/interactive/components/tree-selector-component.js.map +1 -0
  1120. package/dist/modes/interactive/components/tree-selector-content.d.ts +8 -0
  1121. package/dist/modes/interactive/components/tree-selector-content.d.ts.map +1 -0
  1122. package/dist/modes/interactive/components/tree-selector-content.js +263 -0
  1123. package/dist/modes/interactive/components/tree-selector-content.js.map +1 -0
  1124. package/dist/modes/interactive/components/tree-selector-help.d.ts +16 -0
  1125. package/dist/modes/interactive/components/tree-selector-help.d.ts.map +1 -0
  1126. package/dist/modes/interactive/components/tree-selector-help.js +103 -0
  1127. package/dist/modes/interactive/components/tree-selector-help.js.map +1 -0
  1128. package/dist/modes/interactive/components/tree-selector-label-input.d.ts +16 -0
  1129. package/dist/modes/interactive/components/tree-selector-label-input.d.ts.map +1 -0
  1130. package/dist/modes/interactive/components/tree-selector-label-input.js +46 -0
  1131. package/dist/modes/interactive/components/tree-selector-label-input.js.map +1 -0
  1132. package/dist/modes/interactive/components/tree-selector-list.d.ts +33 -0
  1133. package/dist/modes/interactive/components/tree-selector-list.d.ts.map +1 -0
  1134. package/dist/modes/interactive/components/tree-selector-list.js +336 -0
  1135. package/dist/modes/interactive/components/tree-selector-list.js.map +1 -0
  1136. package/dist/modes/interactive/components/tree-selector-model.d.ts +7 -0
  1137. package/dist/modes/interactive/components/tree-selector-model.d.ts.map +1 -0
  1138. package/dist/modes/interactive/components/tree-selector-model.js +358 -0
  1139. package/dist/modes/interactive/components/tree-selector-model.js.map +1 -0
  1140. package/dist/modes/interactive/components/tree-selector-types.d.ts +57 -0
  1141. package/dist/modes/interactive/components/tree-selector-types.d.ts.map +1 -0
  1142. package/dist/modes/interactive/components/tree-selector-types.js +6 -0
  1143. package/dist/modes/interactive/components/tree-selector-types.js.map +1 -0
  1144. package/dist/modes/interactive/components/tree-selector-viewport.d.ts +10 -0
  1145. package/dist/modes/interactive/components/tree-selector-viewport.d.ts.map +1 -0
  1146. package/dist/modes/interactive/components/tree-selector-viewport.js +32 -0
  1147. package/dist/modes/interactive/components/tree-selector-viewport.js.map +1 -0
  1148. package/dist/modes/interactive/components/tree-selector.d.ts +2 -88
  1149. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  1150. package/dist/modes/interactive/components/tree-selector.js +1 -1200
  1151. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  1152. package/dist/modes/interactive/interactive-agent-events.d.ts +2 -0
  1153. package/dist/modes/interactive/interactive-agent-events.d.ts.map +1 -0
  1154. package/dist/modes/interactive/interactive-agent-events.js +370 -0
  1155. package/dist/modes/interactive/interactive-agent-events.js.map +1 -0
  1156. package/dist/modes/interactive/interactive-auth-login.d.ts +2 -0
  1157. package/dist/modes/interactive/interactive-auth-login.d.ts.map +1 -0
  1158. package/dist/modes/interactive/interactive-auth-login.js +214 -0
  1159. package/dist/modes/interactive/interactive-auth-login.js.map +1 -0
  1160. package/dist/modes/interactive/interactive-auth-routing.d.ts +2 -0
  1161. package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -0
  1162. package/dist/modes/interactive/interactive-auth-routing.js +128 -0
  1163. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -0
  1164. package/dist/modes/interactive/interactive-autocomplete.d.ts +2 -0
  1165. package/dist/modes/interactive/interactive-autocomplete.d.ts.map +1 -0
  1166. package/dist/modes/interactive/interactive-autocomplete.js +140 -0
  1167. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -0
  1168. package/dist/modes/interactive/interactive-bash-compact.d.ts +2 -0
  1169. package/dist/modes/interactive/interactive-bash-compact.d.ts.map +1 -0
  1170. package/dist/modes/interactive/interactive-bash-compact.js +112 -0
  1171. package/dist/modes/interactive/interactive-bash-compact.js.map +1 -0
  1172. package/dist/modes/interactive/interactive-editor-actions.d.ts +2 -0
  1173. package/dist/modes/interactive/interactive-editor-actions.d.ts.map +1 -0
  1174. package/dist/modes/interactive/interactive-editor-actions.js +131 -0
  1175. package/dist/modes/interactive/interactive-editor-actions.js.map +1 -0
  1176. package/dist/modes/interactive/interactive-extension-context.d.ts +2 -0
  1177. package/dist/modes/interactive/interactive-extension-context.d.ts.map +1 -0
  1178. package/dist/modes/interactive/interactive-extension-context.js +159 -0
  1179. package/dist/modes/interactive/interactive-extension-context.js.map +1 -0
  1180. package/dist/modes/interactive/interactive-extension-custom-ui.d.ts +2 -0
  1181. package/dist/modes/interactive/interactive-extension-custom-ui.d.ts.map +1 -0
  1182. package/dist/modes/interactive/interactive-extension-custom-ui.js +208 -0
  1183. package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -0
  1184. package/dist/modes/interactive/interactive-extension-dialogs.d.ts +2 -0
  1185. package/dist/modes/interactive/interactive-extension-dialogs.d.ts.map +1 -0
  1186. package/dist/modes/interactive/interactive-extension-dialogs.js +162 -0
  1187. package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -0
  1188. package/dist/modes/interactive/interactive-extension-runtime.d.ts +2 -0
  1189. package/dist/modes/interactive/interactive-extension-runtime.d.ts.map +1 -0
  1190. package/dist/modes/interactive/interactive-extension-runtime.js +179 -0
  1191. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -0
  1192. package/dist/modes/interactive/interactive-extension-widgets.d.ts +2 -0
  1193. package/dist/modes/interactive/interactive-extension-widgets.d.ts.map +1 -0
  1194. package/dist/modes/interactive/interactive-extension-widgets.js +113 -0
  1195. package/dist/modes/interactive/interactive-extension-widgets.js.map +1 -0
  1196. package/dist/modes/interactive/interactive-hotkeys-debug.d.ts +2 -0
  1197. package/dist/modes/interactive/interactive-hotkeys-debug.d.ts.map +1 -0
  1198. package/dist/modes/interactive/interactive-hotkeys-debug.js +186 -0
  1199. package/dist/modes/interactive/interactive-hotkeys-debug.js.map +1 -0
  1200. package/dist/modes/interactive/interactive-input-handling.d.ts +2 -0
  1201. package/dist/modes/interactive/interactive-input-handling.d.ts.map +1 -0
  1202. package/dist/modes/interactive/interactive-input-handling.js +275 -0
  1203. package/dist/modes/interactive/interactive-input-handling.js.map +1 -0
  1204. package/dist/modes/interactive/interactive-mode-base.d.ts +103 -0
  1205. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -0
  1206. package/dist/modes/interactive/interactive-mode-base.js +130 -0
  1207. package/dist/modes/interactive/interactive-mode-base.js.map +1 -0
  1208. package/dist/modes/interactive/interactive-mode-deps.d.ts +81 -0
  1209. package/dist/modes/interactive/interactive-mode-deps.d.ts.map +1 -0
  1210. package/dist/modes/interactive/interactive-mode-deps.js +74 -0
  1211. package/dist/modes/interactive/interactive-mode-deps.js.map +1 -0
  1212. package/dist/modes/interactive/interactive-mode-helpers.d.ts +21 -0
  1213. package/dist/modes/interactive/interactive-mode-helpers.d.ts.map +1 -0
  1214. package/dist/modes/interactive/interactive-mode-helpers.js +77 -0
  1215. package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -0
  1216. package/dist/modes/interactive/interactive-mode-surface.d.ts +313 -0
  1217. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -0
  1218. package/dist/modes/interactive/interactive-mode-surface.js +2 -0
  1219. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -0
  1220. package/dist/modes/interactive/interactive-mode-types.d.ts +29 -0
  1221. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -0
  1222. package/dist/modes/interactive/interactive-mode-types.js +2 -0
  1223. package/dist/modes/interactive/interactive-mode-types.js.map +1 -0
  1224. package/dist/modes/interactive/interactive-mode.d.ts +30 -404
  1225. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  1226. package/dist/modes/interactive/interactive-mode.js +29 -5260
  1227. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  1228. package/dist/modes/interactive/interactive-model-routing.d.ts +2 -0
  1229. package/dist/modes/interactive/interactive-model-routing.d.ts.map +1 -0
  1230. package/dist/modes/interactive/interactive-model-routing.js +269 -0
  1231. package/dist/modes/interactive/interactive-model-routing.js.map +1 -0
  1232. package/dist/modes/interactive/interactive-process-lifecycle.d.ts +2 -0
  1233. package/dist/modes/interactive/interactive-process-lifecycle.d.ts.map +1 -0
  1234. package/dist/modes/interactive/interactive-process-lifecycle.js +189 -0
  1235. package/dist/modes/interactive/interactive-process-lifecycle.js.map +1 -0
  1236. package/dist/modes/interactive/interactive-queueing.d.ts +2 -0
  1237. package/dist/modes/interactive/interactive-queueing.d.ts.map +1 -0
  1238. package/dist/modes/interactive/interactive-queueing.js +163 -0
  1239. package/dist/modes/interactive/interactive-queueing.js.map +1 -0
  1240. package/dist/modes/interactive/interactive-render-chat.d.ts +2 -0
  1241. package/dist/modes/interactive/interactive-render-chat.d.ts.map +1 -0
  1242. package/dist/modes/interactive/interactive-render-chat.js +170 -0
  1243. package/dist/modes/interactive/interactive-render-chat.js.map +1 -0
  1244. package/dist/modes/interactive/interactive-resource-disclosure.d.ts +2 -0
  1245. package/dist/modes/interactive/interactive-resource-disclosure.d.ts.map +1 -0
  1246. package/dist/modes/interactive/interactive-resource-disclosure.js +101 -0
  1247. package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -0
  1248. package/dist/modes/interactive/interactive-resource-paths.d.ts +2 -0
  1249. package/dist/modes/interactive/interactive-resource-paths.d.ts.map +1 -0
  1250. package/dist/modes/interactive/interactive-resource-paths.js +228 -0
  1251. package/dist/modes/interactive/interactive-resource-paths.js.map +1 -0
  1252. package/dist/modes/interactive/interactive-resource-rendering.d.ts +2 -0
  1253. package/dist/modes/interactive/interactive-resource-rendering.d.ts.map +1 -0
  1254. package/dist/modes/interactive/interactive-resource-rendering.js +181 -0
  1255. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -0
  1256. package/dist/modes/interactive/interactive-selectors.d.ts +2 -0
  1257. package/dist/modes/interactive/interactive-selectors.d.ts.map +1 -0
  1258. package/dist/modes/interactive/interactive-selectors.js +198 -0
  1259. package/dist/modes/interactive/interactive-selectors.js.map +1 -0
  1260. package/dist/modes/interactive/interactive-session-routing.d.ts +2 -0
  1261. package/dist/modes/interactive/interactive-session-routing.d.ts.map +1 -0
  1262. package/dist/modes/interactive/interactive-session-routing.js +232 -0
  1263. package/dist/modes/interactive/interactive-session-routing.js.map +1 -0
  1264. package/dist/modes/interactive/interactive-session-runtime.d.ts +2 -0
  1265. package/dist/modes/interactive/interactive-session-runtime.d.ts.map +1 -0
  1266. package/dist/modes/interactive/interactive-session-runtime.js +131 -0
  1267. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -0
  1268. package/dist/modes/interactive/interactive-slash-commands.d.ts +2 -0
  1269. package/dist/modes/interactive/interactive-slash-commands.d.ts.map +1 -0
  1270. package/dist/modes/interactive/interactive-slash-commands.js +338 -0
  1271. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -0
  1272. package/dist/modes/interactive/interactive-startup.d.ts +2 -0
  1273. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -0
  1274. package/dist/modes/interactive/interactive-startup.js +348 -0
  1275. package/dist/modes/interactive/interactive-startup.js.map +1 -0
  1276. package/dist/modes/interactive/model-search.d.ts +5 -0
  1277. package/dist/modes/interactive/model-search.d.ts.map +1 -1
  1278. package/dist/modes/interactive/model-search.js +9 -0
  1279. package/dist/modes/interactive/model-search.js.map +1 -1
  1280. package/dist/modes/interactive/theme/color-utils.d.ts +20 -0
  1281. package/dist/modes/interactive/theme/color-utils.d.ts.map +1 -0
  1282. package/dist/modes/interactive/theme/color-utils.js +204 -0
  1283. package/dist/modes/interactive/theme/color-utils.js.map +1 -0
  1284. package/dist/modes/interactive/theme/export-colors.d.ts +19 -0
  1285. package/dist/modes/interactive/theme/export-colors.d.ts.map +1 -0
  1286. package/dist/modes/interactive/theme/export-colors.js +69 -0
  1287. package/dist/modes/interactive/theme/export-colors.js.map +1 -0
  1288. package/dist/modes/interactive/theme/global-theme.d.ts +12 -0
  1289. package/dist/modes/interactive/theme/global-theme.d.ts.map +1 -0
  1290. package/dist/modes/interactive/theme/global-theme.js +150 -0
  1291. package/dist/modes/interactive/theme/global-theme.js.map +1 -0
  1292. package/dist/modes/interactive/theme/terminal-detection.d.ts +30 -0
  1293. package/dist/modes/interactive/theme/terminal-detection.d.ts.map +1 -0
  1294. package/dist/modes/interactive/theme/terminal-detection.js +89 -0
  1295. package/dist/modes/interactive/theme/terminal-detection.js.map +1 -0
  1296. package/dist/modes/interactive/theme/theme-class.d.ts +30 -0
  1297. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -0
  1298. package/dist/modes/interactive/theme/theme-class.js +83 -0
  1299. package/dist/modes/interactive/theme/theme-class.js.map +1 -0
  1300. package/dist/modes/interactive/theme/theme-loading.d.ts +17 -0
  1301. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -0
  1302. package/dist/modes/interactive/theme/theme-loading.js +155 -0
  1303. package/dist/modes/interactive/theme/theme-loading.js.map +1 -0
  1304. package/dist/modes/interactive/theme/theme-parse.d.ts +5 -0
  1305. package/dist/modes/interactive/theme/theme-parse.d.ts.map +1 -0
  1306. package/dist/modes/interactive/theme/theme-parse.js +52 -0
  1307. package/dist/modes/interactive/theme/theme-parse.js.map +1 -0
  1308. package/dist/modes/interactive/theme/theme-schema.d.ts +255 -0
  1309. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -0
  1310. package/dist/modes/interactive/theme/theme-schema.js +78 -0
  1311. package/dist/modes/interactive/theme/theme-schema.js.map +1 -0
  1312. package/dist/modes/interactive/theme/theme.d.ts +6 -108
  1313. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  1314. package/dist/modes/interactive/theme/theme.js +6 -1065
  1315. package/dist/modes/interactive/theme/theme.js.map +1 -1
  1316. package/dist/modes/interactive/theme/tui-theme.d.ts +15 -0
  1317. package/dist/modes/interactive/theme/tui-theme.d.ts.map +1 -0
  1318. package/dist/modes/interactive/theme/tui-theme.js +199 -0
  1319. package/dist/modes/interactive/theme/tui-theme.js.map +1 -0
  1320. package/dist/modes/rpc/rpc-client.d.ts +1 -61
  1321. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  1322. package/dist/modes/rpc/rpc-client.js +1 -72
  1323. package/dist/modes/rpc/rpc-client.js.map +1 -1
  1324. package/dist/modes/rpc/rpc-command-handler.d.ts +14 -0
  1325. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -0
  1326. package/dist/modes/rpc/rpc-command-handler.js +226 -0
  1327. package/dist/modes/rpc/rpc-command-handler.js.map +1 -0
  1328. package/dist/modes/rpc/rpc-extension-ui.d.ts +15 -0
  1329. package/dist/modes/rpc/rpc-extension-ui.d.ts.map +1 -0
  1330. package/dist/modes/rpc/rpc-extension-ui.js +196 -0
  1331. package/dist/modes/rpc/rpc-extension-ui.js.map +1 -0
  1332. package/dist/modes/rpc/rpc-input.d.ts +12 -0
  1333. package/dist/modes/rpc/rpc-input.d.ts.map +1 -0
  1334. package/dist/modes/rpc/rpc-input.js +54 -0
  1335. package/dist/modes/rpc/rpc-input.js.map +1 -0
  1336. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  1337. package/dist/modes/rpc/rpc-mode.js +43 -607
  1338. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  1339. package/dist/modes/rpc/rpc-responses.d.ts +8 -0
  1340. package/dist/modes/rpc/rpc-responses.d.ts.map +1 -0
  1341. package/dist/modes/rpc/rpc-responses.js +27 -0
  1342. package/dist/modes/rpc/rpc-responses.js.map +1 -0
  1343. package/dist/modes/rpc/rpc-session-binding.d.ts +25 -0
  1344. package/dist/modes/rpc/rpc-session-binding.d.ts.map +1 -0
  1345. package/dist/modes/rpc/rpc-session-binding.js +70 -0
  1346. package/dist/modes/rpc/rpc-session-binding.js.map +1 -0
  1347. package/dist/package-manager-cli-parser.d.ts +28 -0
  1348. package/dist/package-manager-cli-parser.d.ts.map +1 -0
  1349. package/dist/package-manager-cli-parser.js +269 -0
  1350. package/dist/package-manager-cli-parser.js.map +1 -0
  1351. package/dist/package-manager-cli.d.ts +0 -1
  1352. package/dist/package-manager-cli.d.ts.map +1 -1
  1353. package/dist/package-manager-cli.js +2 -267
  1354. package/dist/package-manager-cli.js.map +1 -1
  1355. package/dist/utils/git.d.ts.map +1 -1
  1356. package/dist/utils/git.js +10 -0
  1357. package/dist/utils/git.js.map +1 -1
  1358. package/dist/utils/shell.d.ts +1 -0
  1359. package/dist/utils/shell.d.ts.map +1 -1
  1360. package/dist/utils/shell.js +12 -5
  1361. package/dist/utils/shell.js.map +1 -1
  1362. package/dist/utils/version-check.d.ts +1 -0
  1363. package/dist/utils/version-check.d.ts.map +1 -1
  1364. package/dist/utils/version-check.js +17 -0
  1365. package/dist/utils/version-check.js.map +1 -1
  1366. package/docs/custom-provider.md +4 -3
  1367. package/docs/development.md +4 -0
  1368. package/docs/models.md +3 -2
  1369. package/docs/packages.md +2 -2
  1370. package/docs/quickstart.md +1 -1
  1371. package/docs/sdk.md +2 -40
  1372. package/docs/security.md +1 -1
  1373. package/docs/workflows.md +246 -179
  1374. package/examples/extensions/custom-provider-anthropic/index.ts +1 -106
  1375. package/examples/extensions/gondolin/index.ts +0 -23
  1376. package/examples/extensions/overlay-qa-animation-components.ts +255 -0
  1377. package/examples/extensions/overlay-qa-focus-components.ts +222 -0
  1378. package/examples/extensions/overlay-qa-position-components.ts +433 -0
  1379. package/examples/extensions/overlay-qa-shared.ts +37 -0
  1380. package/examples/extensions/overlay-qa-streaming-input-components.ts +205 -0
  1381. package/examples/extensions/overlay-qa-tests.ts +17 -1156
  1382. package/examples/extensions/overlay-qa-toggle-passive-components.ts +169 -0
  1383. package/examples/extensions/space-invaders.ts +0 -60
  1384. package/examples/extensions/subagent/display.ts +148 -0
  1385. package/examples/extensions/subagent/index.ts +11 -858
  1386. package/examples/extensions/subagent/render.ts +383 -0
  1387. package/examples/extensions/subagent/runner.ts +252 -0
  1388. package/examples/extensions/subagent/schemas.ts +59 -0
  1389. package/examples/extensions/subagent/types.ts +36 -0
  1390. package/examples/extensions/tic-tac-toe-instructions.ts +65 -0
  1391. package/examples/extensions/tic-tac-toe-rendering.ts +414 -0
  1392. package/examples/extensions/tic-tac-toe-state.ts +158 -0
  1393. package/examples/extensions/tic-tac-toe.ts +92 -754
  1394. package/examples/rpc-extension-ui-components.ts +189 -0
  1395. package/examples/rpc-extension-ui.ts +2 -179
  1396. package/package.json +7 -7
  1397. package/dist/builtin/workflows/src/workflows/define-workflow.ts +0 -277
  1398. package/dist/core/tools/bash-policy.d.ts +0 -62
  1399. package/dist/core/tools/bash-policy.d.ts.map +0 -1
  1400. package/dist/core/tools/bash-policy.js +0 -1069
  1401. package/dist/core/tools/bash-policy.js.map +0 -1
@@ -1,34 +1,19 @@
1
1
  /**
2
2
  * StageChatView — attached workflow-stage chat surface.
3
3
  *
4
- * The overlay keeps workflow-specific chrome for stage metadata / controls, but
5
- * the chat body now delegates to packages/coding-agent's exported interactive
6
- * components instead of maintaining parallel workflow message widgets:
7
- * - user rows use `UserMessageComponent`
8
- * - assistant/thinking rows use `AssistantMessageComponent`
9
- * - tool rows use `ToolExecutionComponent` and built-in tool renderers
10
- * - input reuses the host's custom editor factory when one is installed,
11
- * otherwise `CustomEditor`; tests/headless fall back to the historical
12
- * one-line editor
13
- * - workflow notices render as compact workflow-specific cards because they
14
- * are not coding-agent chat messages
4
+ * This file is the compatibility facade for the historical
5
+ * `src/tui/stage-chat-view.js` import path. The implementation is split by
6
+ * responsibility into sibling `stage-chat-view-*` modules so each authored
7
+ * source file stays under the repository file-length gate while preserving the
8
+ * same public class, options, detach metadata, and test seams.
15
9
  *
16
10
  * Behaviour:
17
- * - **Idle** stage (empty transcript, not streaming, not settled): welcome
18
- * panel describing the attached stage. Enter sends `handle.prompt(text)`.
19
- * - **Running** stage with a live stream: Enter queues a Pi-style steering
20
- * message (interrupt mid-turn) without adding a premature transcript row.
21
- * Ctrl+F queues a follow-up the same way.
22
- * - **Escape** mirrors the main coding-agent chat interrupt path for active
23
- * live stages: it requests a controlled pause/abort while keeping the
24
- * composer active. While paused, Enter calls `handle.resume(text)`.
25
- * - **Ctrl+D** detaches (back to graph), including while paused;
26
- * **Escape** closes the popup when idle.
27
- * - **Blocked** stage: keystrokes absorbed; BLOCKED banner names the
28
- * upstream awaiter.
29
- * - **Settled** stage with a live handle remains a normal chat session:
30
- * Enter sends `handle.prompt(text)` and Escape interrupts any active
31
- * post-stage response without mutating workflow dependencies.
11
+ * - Idle stage (empty transcript, not streaming, not settled): Enter prompts.
12
+ * - Running live stages: Enter steers, Ctrl+F queues a follow-up, Escape uses
13
+ * the host chat interrupt path.
14
+ * - Paused stages: Enter resumes with composer text; Ctrl+D returns to graph.
15
+ * - Blocked and read-only archive stages absorb mutation keystrokes.
16
+ * - Workflow notices and prompt/custom UI panels keep workflow-specific chrome.
32
17
  *
33
18
  * cross-ref:
34
19
  * - ui/stage-chat-mockup.html (canonical visual)
@@ -36,682 +21,104 @@
36
21
  * - src/runs/foreground/stage-control-registry.ts (StageControlHandle)
37
22
  * - src/shared/store-types.ts (StageSnapshot.notices, StageNotice)
38
23
  * - https://pi.dev/docs/latest/tui (canonical Pi-tui component contract)
39
- * - node_modules/@earendil-works/pi-tui/src/components/{box,text,spacer}.ts
40
24
  */
41
25
 
26
+ import type { Component, Focusable } from "@earendil-works/pi-tui";
27
+ import { fitStageChatFrame, planStageChatFrame } from "./stage-chat-layout.js";
42
28
  import {
43
- ChatSessionHost,
44
- type ChatSessionHostStyle,
45
- type AgentSession,
46
- type ChatMessageEntry,
47
- type ChatMessageRenderOptions,
48
- type ReadonlyFooterDataProvider,
49
- } from "@bastani/atomic";
50
- import { Box, Editor, Text } from "@earendil-works/pi-tui";
51
- import type {
52
- Component,
53
- EditorComponent,
54
- EditorTheme,
55
- Focusable,
56
- TUI,
57
- } from "@earendil-works/pi-tui";
58
- import type { Store } from "../shared/store.js";
29
+ renderBlockedBody,
30
+ renderPausedBody,
31
+ renderPromptBody,
32
+ renderReadOnlyArchiveBody,
33
+ } from "./stage-chat-view-archive-history.js";
34
+ import { renderCustomUi } from "./stage-chat-view-custom-ui.js";
59
35
  import {
60
- mountStageCustomUi,
61
- stageUiBroker,
62
- type MountedStageCustomUi,
63
- type StageCustomUiRequest,
64
- type StageUiBroker,
65
- } from "../shared/stage-ui-broker.js";
66
- import type { PendingPrompt, StageNotice, StageSnapshot, StageStatus } from "../shared/store-types.js";
67
- import type { GraphTheme } from "./graph-theme.js";
68
- import type { StageControlHandle } from "../runs/foreground/stage-control-registry.js";
69
- import { isKeybindingsLike, type KeybindingsLike } from "./keybindings-adapter.js";
70
- import { BOLD, RESET, hexBg, hexToAnsi, lerpColor } from "./color-utils.js";
71
- import { renderWorkflowNoticeCard, type WorkflowNoticeTone } from "./workflow-notice-card.js";
72
- import { Key, matchesKey, truncateToWidth, visibleWidth } from "./text-helpers.js";
36
+ renderFooterWithOrchestratorReturnHint,
37
+ renderHeader,
38
+ sepRule,
39
+ } from "./stage-chat-view-footer-status.js";
40
+ import { handleStageChatInput } from "./stage-chat-view-input.js";
41
+ import { blankLine, takeRows } from "./stage-chat-view-render-helpers.js";
73
42
  import {
74
- fitStageChatFrame,
75
- planStageChatFrame,
76
- resolveStageChatViewportRows,
77
- } from "./stage-chat-layout.js";
43
+ currentStage,
44
+ disposeStageChatView,
45
+ initializeStageChatView,
46
+ invalidateStageChatView,
47
+ isBlocked,
48
+ isPaused,
49
+ isReadOnlyArchive,
50
+ syncPromptState,
51
+ viewLineCount,
52
+ } from "./stage-chat-view-state.js";
53
+ import { transcriptDebugEntries } from "./stage-chat-view-transcript.js";
78
54
  import {
79
- createPromptCardState,
80
- defaultResponseFor,
81
- handlePromptCardInput,
82
- isPromptEscapeInput,
83
- renderPromptCard,
84
- type PromptCardState,
85
- } from "./prompt-card.js";
86
- import { renderRoundedBoxLines } from "./chat-surface.js";
87
-
88
- // ---------------------------------------------------------------------------
89
- // Options & types
90
- // ---------------------------------------------------------------------------
91
-
92
- function isReadOnlyArchiveStatus(status: StageStatus): boolean {
93
- return status === "completed" || status === "failed" || status === "skipped";
94
- }
95
-
96
- export interface StageChatViewOpts {
97
- store: Store;
98
- graphTheme: GraphTheme;
99
- runId: string;
100
- stageId: string;
101
- /** The workflow display name, used in the title chrome `<workflow> / <stage>`. */
102
- workflowName: string;
103
- /**
104
- * Live stage-control handle when available. When absent the chat is
105
- * inspect-only (settled stage with no live handle).
106
- */
107
- handle?: StageControlHandle;
108
- /** Called when the user presses Ctrl+D (back to graph). */
109
- onDetach: (reason?: StageChatDetachReason, metadata?: StageChatDetachMetadata) => void;
110
- /** Called when the user presses Escape (close the whole popup). */
111
- onClose: () => void;
112
- /** Request a host TUI repaint after SDK events mutate local chat state. */
113
- requestRender?: () => void;
114
- /**
115
- * Re-assert overlay keyboard focus. Showing a stage custom UI (e.g. the
116
- * readiness gate) must make the overlay the focused pi-tui component again,
117
- * otherwise key events keep going elsewhere and the UI looks frozen (#1120).
118
- */
119
- requestFocus?: () => void;
120
- /** Live pi-tui host objects. When present, stage input uses pi's editor UI. */
121
- piTui?: TUI;
122
- piTheme?: unknown;
123
- piKeybindings?: unknown;
124
- /** Currently installed host editor factory, inherited from extension `ctx.ui.setEditorComponent()`. */
125
- piEditorFactory?: (
126
- tui: TUI,
127
- theme: EditorTheme,
128
- keybindings: unknown,
129
- ) => EditorComponent;
130
- /** Parent chat rendering settings and extension renderers inherited from the host UI. */
131
- getChatRenderSettings?: () =>
132
- | Partial<Omit<ChatMessageRenderOptions, "ui" | "cwd">>
133
- | undefined;
134
- /** Parent footer data provider inherited from the host UI for core footer/usage rendering. */
135
- footerData?: ReadonlyFooterDataProvider;
136
- /**
137
- * Optional accessor returning the current terminal row count. The chat
138
- * surface expands its body band to roughly `viewportRows` minus the fixed
139
- * header / loader / editor / footer rows so the popup fills the
140
- * terminal under pi-tui's `width: "100%" / maxHeight: "100%"` geometry.
141
- * Returning `undefined` falls back to the constant 32-row frame.
142
- */
143
- getViewportRows?: () => number | undefined;
144
- /** Broker that routes stage-local custom UI, such as ask_user_question, into this node. */
145
- stageUiBroker?: StageUiBroker;
146
- /**
147
- * Ownership guard for prompt submission. The attach shell uses this to ensure
148
- * stale/hidden/non-active stage-chat instances cannot settle a prompt unless
149
- * the user is currently attached to this exact workflow node.
150
- */
151
- canSubmitPrompt?: (runId: string, stageId: string, promptId: string) => boolean;
152
- }
153
-
154
- /**
155
- * Transcript model. Every variant carries a flat `.text` summary so consumers
156
- * that read `_transcript` (tests, future serialisers) can recover the
157
- * canonical user-visible string without knowing about the Pi-box payload.
158
- */
159
- export type StageChatDetachReason = "user" | "prompt-resolved";
160
-
161
- export interface StageChatDetachMetadata {
162
- readonly suppressNextGraphSubmit?: boolean;
163
- }
164
-
165
- interface NoticeEntry {
166
- readonly role: "notice";
167
- readonly text: string;
168
- readonly noticeId: string;
169
- readonly kind: StageNotice["kind"];
170
- readonly value: string;
171
- readonly from?: string;
172
- readonly meta?: string;
173
- }
174
- type TranscriptEntry = NoticeEntry | ChatMessageEntry;
175
-
176
- // ---------------------------------------------------------------------------
177
- // Frame budget
178
- // ---------------------------------------------------------------------------
179
-
180
- /**
181
- * Default line budget used when the host doesn't surface terminal dimensions
182
- * (direct unit renders, lightweight test mocks). The mounted overlay
183
- * overrides this by passing `getViewportRows()`.
184
- */
185
- const VIEW_LINE_COUNT = 32;
186
- const PROMPT_SCROLL_STEP_ROWS = 4;
187
-
188
- /** Header strip — ` STAGE wf / stage <meta> ● status` without a leading marker glyph. */
189
- const HEADER_ROWS = 1;
190
- /** Single dim rule between header and body. */
191
- const SEP_ROWS = 1;
192
- const ITALIC = "\x1b[3m";
193
- const FG_RESET = "\x1b[39m";
194
- const WEIGHT_RESET = "\x1b[22m";
195
- const ITALIC_RESET = "\x1b[23m";
196
-
197
- // ---------------------------------------------------------------------------
198
- // StageChatView
199
- // ---------------------------------------------------------------------------
55
+ HEADER_ROWS,
56
+ SEP_ROWS,
57
+ type StageChatViewContext,
58
+ type StageChatViewOpts,
59
+ type TranscriptDebugEntry,
60
+ } from "./stage-chat-view-types.js";
61
+
62
+ export type {
63
+ StageChatDetachMetadata,
64
+ StageChatDetachReason,
65
+ StageChatViewOpts,
66
+ } from "./stage-chat-view-types.js";
200
67
 
201
68
  export class StageChatView implements Component, Focusable {
202
69
  focused = true;
203
- private store: Store;
204
- private theme: GraphTheme;
205
- private runId: string;
206
- private stageId: string;
207
- private workflowName: string;
208
- private handle: StageControlHandle | undefined;
209
- private onDetach: (reason?: StageChatDetachReason, metadata?: StageChatDetachMetadata) => void;
210
- private onClose: () => void;
211
- private requestRender: (() => void) | undefined;
212
- private requestFocus: (() => void) | undefined;
213
- private focusHoldTimer: ReturnType<typeof setInterval> | undefined;
214
- private getViewportRows?: () => number | undefined;
215
- private piTui?: TUI;
216
- private piTheme?: unknown;
217
- private piKeybindings?: unknown;
218
- private piEditorFactory?: StageChatViewOpts["piEditorFactory"];
219
- private chatHost: ChatSessionHost<NoticeEntry>;
220
- private stageUiBroker: StageUiBroker;
221
- private canSubmitPrompt?: (runId: string, stageId: string, promptId: string) => boolean;
222
- private mountedCustomUi: MountedStageCustomUi | null = null;
223
- private mountingRequestId: string | null = null;
224
- private promptState: PromptCardState | null = null;
225
- private promptEditor: EditorComponent | null = null;
226
- private promptEditorPromptId: string | null = null;
227
- private promptEditorSubmitFromEnter = false;
228
- private promptScrollOffset = 0;
229
- private promptMaxScroll = 0;
230
-
231
- /** True while a pending pause request is in flight (between ctrl+p and resolve). */
232
- private localPaused = false;
233
- /** De-dup set so the store subscription doesn't re-append known notices. */
234
- private seenNoticeIds = new Set<string>();
235
-
236
- private _unsubscribeStore: (() => void) | null = null;
237
- private _unsubscribeHandle: (() => void) | null = null;
238
- private _unregisterStageUiHost: (() => void) | null = null;
70
+ private store!: StageChatViewContext["store"];
71
+ private theme!: StageChatViewContext["theme"];
72
+ private runId!: StageChatViewContext["runId"];
73
+ private stageId!: StageChatViewContext["stageId"];
74
+ private workflowName!: StageChatViewContext["workflowName"];
75
+ private handle!: StageChatViewContext["handle"];
76
+ private onDetach!: StageChatViewContext["onDetach"];
77
+ private onClose!: StageChatViewContext["onClose"];
78
+ private requestRender!: StageChatViewContext["requestRender"];
79
+ private requestFocus!: StageChatViewContext["requestFocus"];
80
+ private focusHoldTimer!: StageChatViewContext["focusHoldTimer"];
81
+ private getViewportRows!: StageChatViewContext["getViewportRows"];
82
+ private piTui!: StageChatViewContext["piTui"];
83
+ private piTheme!: StageChatViewContext["piTheme"];
84
+ private piKeybindings!: StageChatViewContext["piKeybindings"];
85
+ private piEditorFactory!: StageChatViewContext["piEditorFactory"];
86
+ private chatHost!: StageChatViewContext["chatHost"];
87
+ private stageUiBroker!: StageChatViewContext["stageUiBroker"];
88
+ private canSubmitPrompt!: StageChatViewContext["canSubmitPrompt"];
89
+ private mountedCustomUi!: StageChatViewContext["mountedCustomUi"];
90
+ private mountingRequestId!: StageChatViewContext["mountingRequestId"];
91
+ private promptState!: StageChatViewContext["promptState"];
92
+ private promptEditor!: StageChatViewContext["promptEditor"];
93
+ private promptEditorPromptId!: StageChatViewContext["promptEditorPromptId"];
94
+ private promptEditorSubmitFromEnter!: StageChatViewContext["promptEditorSubmitFromEnter"];
95
+ private promptScrollOffset!: StageChatViewContext["promptScrollOffset"];
96
+ private promptMaxScroll!: StageChatViewContext["promptMaxScroll"];
97
+ private localPaused!: StageChatViewContext["localPaused"];
98
+ private seenNoticeIds!: StageChatViewContext["seenNoticeIds"];
99
+ private _unsubscribeStore!: StageChatViewContext["_unsubscribeStore"];
100
+ private _unsubscribeHandle!: StageChatViewContext["_unsubscribeHandle"];
101
+ private _unregisterStageUiHost!: StageChatViewContext["_unregisterStageUiHost"];
239
102
 
240
103
  constructor(opts: StageChatViewOpts) {
241
- this.store = opts.store;
242
- this.theme = opts.graphTheme;
243
- this.runId = opts.runId;
244
- this.stageId = opts.stageId;
245
- this.workflowName = opts.workflowName;
246
- this.handle = opts.handle;
247
- this.onDetach = opts.onDetach;
248
- this.onClose = opts.onClose;
249
- this.requestRender = opts.requestRender;
250
- this.requestFocus = opts.requestFocus;
251
- // Hold overlay keyboard focus against host focus-steals. pi-tui overlays
252
- // capture focus on show, but any tui.setFocus() elsewhere (the host editor
253
- // during background workflow activity) steals it, leaving the gate/composer
254
- // input-dead. Re-claim it on a short interval — only while NOT streaming, so
255
- // a mid-turn ask_user_question never refocuses during the agent's
256
- // continuation (which would stall the stream).
257
- if (opts.requestFocus) {
258
- this.focusHoldTimer = setInterval(() => {
259
- // Hold focus on the overlay whenever there is something to interact
260
- // with: a mounted custom UI (ask_user_question / readiness gate) must
261
- // stay answerable even mid-turn, and an idle composer should keep focus.
262
- // During a pure streaming continuation (no custom UI mounted) we leave
263
- // focus alone so we never reclaim it out from under the agent's live
264
- // output. requestFocus is idempotent, so this is a no-op whenever the
265
- // overlay already owns focus.
266
- if (this.mountedCustomUi !== null || !this._isStreaming()) this.requestFocus?.();
267
- }, 150);
268
- }
269
- this.getViewportRows = opts.getViewportRows;
270
- this.piTui = opts.piTui;
271
- this.piTheme = opts.piTheme;
272
- this.piKeybindings = opts.piKeybindings;
273
- this.piEditorFactory = opts.piEditorFactory;
274
- this.stageUiBroker = opts.stageUiBroker ?? stageUiBroker;
275
- this.canSubmitPrompt = opts.canSubmitPrompt;
276
- this.chatHost = new ChatSessionHost<NoticeEntry>({
277
- style: this._chatHostStyle(),
278
- commands: {
279
- ensureAttached: async () => {
280
- await this._liveHandle()?.ensureAttached();
281
- },
282
- prompt: async (text) => {
283
- const handle = this._liveHandle();
284
- if (!handle) throw new Error("no live handle on this stage");
285
- await handle.prompt(text);
286
- },
287
- steer: async (text) => {
288
- const handle = this._liveHandle();
289
- if (!handle) throw new Error("no live handle on this stage");
290
- await handle.steer(text);
291
- },
292
- followUp: async (text) => {
293
- const handle = this._liveHandle();
294
- if (!handle) throw new Error("no live handle on this stage");
295
- await handle.followUp(text);
296
- },
297
- interrupt: async () => {
298
- const handle = this._liveHandle();
299
- if (!handle) return;
300
- const status = this._currentStage()?.status ?? handle.status;
301
- if (status === "pending" || status === "running" || status === "awaiting_input") {
302
- await handle.pause();
303
- return;
304
- }
305
- await handle.agentSession?.abort();
306
- },
307
- resume: async (message) => {
308
- const handle = this._liveHandle();
309
- if (!handle) throw new Error("no live handle on this stage");
310
- this.localPaused = true;
311
- await handle.resume(message);
312
- this.localPaused = false;
313
- },
314
- runBash: async (request) => {
315
- const handle = this._liveHandle();
316
- if (!handle) throw new Error("no live handle on this stage");
317
- await handle.ensureAttached();
318
- const agentSession = handle.agentSession;
319
- if (!agentSession) throw new Error("no live agent session on this stage");
320
- return agentSession.executeBash(request.command, request.onChunk, {
321
- excludeFromContext: request.excludeFromContext,
322
- });
323
- },
324
- abortBash: async () => {
325
- this._liveHandle()?.agentSession?.abortBash();
326
- },
327
- abortCompaction: async () => {
328
- this._liveHandle()?.agentSession?.abortCompaction();
329
- },
330
- handleSlashCommand: async (text) => this._handleSlashCommand(text),
331
- },
332
- isBashRunning: () => this._liveHandle()?.agentSession?.isBashRunning === true,
333
- requestRender: opts.requestRender,
334
- getAgentSession: () => this._liveHandle()?.agentSession,
335
- isStreaming: () => this._liveHandle()?.isStreaming === true,
336
- isPaused: () => this._isPaused(),
337
- isDisabled: () => this._isBlocked() || !this._liveHandle(),
338
- tui: opts.piTui,
339
- keybindings: opts.piKeybindings,
340
- editorFactory: opts.piEditorFactory,
341
- editorTheme: editorThemeFromGraphTheme(this.theme),
342
- getChatRenderSettings: opts.getChatRenderSettings,
343
- footerData: opts.footerData,
344
- renderExtraEntry: (entry) => this._noticeRow(entry),
345
- });
346
- this._unregisterStageUiHost = this.stageUiBroker.registerHost(this.runId, this.stageId, {
347
- showCustomUi: (request) => {
348
- void this._showCustomUi(request);
349
- },
350
- hideCustomUi: (request) => {
351
- this._hideMountedCustomUi(request);
352
- },
353
- });
354
-
355
- // Seed transcript from the live SDK session at attach time, plus any
356
- // stage notices the workflow body has already recorded.
357
- this._snapshotMessagesFromHandle();
358
- const initialStage = this._currentStage();
359
- this._snapshotMessagesFromSessionFile(initialStage);
360
- this._absorbStageNotices(initialStage);
361
- this._syncPromptState(initialStage?.pendingPrompt);
362
-
363
- this._unsubscribeStore = this.store.subscribe(() => {
364
- const stage = this._currentStage();
365
- let changed = false;
366
- if (stage && stage.status === "paused" && !this.localPaused) {
367
- this.localPaused = true;
368
- changed = true;
369
- } else if (stage && stage.status === "running" && this.localPaused) {
370
- this.localPaused = false;
371
- changed = true;
372
- }
373
- // Pick up notices recorded after attach (workflow body calling
374
- // `stage.setModel`, `stage.compact`, …) so they thread through the
375
- // transcript without a special render path.
376
- changed = this._absorbStageNotices(stage) || changed;
377
- const promptChanged = this._syncPromptState(stage?.pendingPrompt);
378
- changed = promptChanged || changed;
379
- if (promptChanged && this.promptState && this._canSubmitPrompt(this.promptState.prompt.id)) {
380
- this.requestFocus?.();
381
- }
382
- this.chatHost.syncAnimationTick();
383
- if (changed) this.requestRender?.();
384
- });
385
-
386
- if (this.handle) {
387
- this._unsubscribeHandle = this.handle.subscribe((event) => {
388
- this.chatHost.applyAgentEvent(event);
389
- });
390
- }
391
- this.chatHost.syncAnimationTick();
392
- }
393
-
394
- private _chatHostStyle(): ChatSessionHostStyle {
395
- return {
396
- dim: (text) => paint(text, this.theme.dim),
397
- text: (text) => paint(text, this.theme.text),
398
- textMuted: (text) => paint(text, this.theme.textMuted),
399
- accent: (text) => paint(text, this.theme.accent),
400
- accentBold: (text) => paint(text, this.theme.accent, { bold: true }),
401
- rule: (hex, text) => hexToAnsi(hex) + text + RESET,
402
- cursor: () => cursorBlock(),
403
- blank: (width) => this._blank(width),
404
- editorRuleColor: (disabled, agentSession, state) =>
405
- this._editorRuleColor(disabled, agentSession, state),
406
- };
407
- }
408
-
409
- private async _showCustomUi(request: StageCustomUiRequest): Promise<void> {
410
- this.mountedCustomUi?.component.dispose?.();
411
- this.mountedCustomUi = null;
412
- // Track the request currently being mounted. `mountStageCustomUi` is async,
413
- // so the broker can resolve/reject/abort the request (clearing it via
414
- // `_hideMountedCustomUi`) before we finish awaiting. Without this guard the
415
- // post-await assignment below would strand a settled gate as a permanent
416
- // `mountedCustomUi`, hiding the transcript and crashing on the next
417
- // keystroke routed into the dead component (readiness gate #1099).
418
- this.mountingRequestId = request.id;
419
- if (!this.piTui || this.piTheme === undefined || this.piKeybindings === undefined) {
420
- this.mountingRequestId = null;
421
- this.stageUiBroker.reject(
422
- request,
423
- new Error("atomic-workflows: stage custom UI cannot mount without attached TUI host"),
424
- );
425
- return;
426
- }
427
- if (request.options?.overlay === true) {
428
- this.mountingRequestId = null;
429
- this.stageUiBroker.reject(
430
- request,
431
- new Error("atomic-workflows: ctx.ui.custom overlay mode is unavailable in the workflow graph viewer"),
432
- );
433
- return;
434
- }
435
- try {
436
- const mounted = await mountStageCustomUi(
437
- request,
438
- this.piTui,
439
- this.piTheme,
440
- this.piKeybindings,
441
- this.stageUiBroker,
442
- () => {
443
- if (this.mountedCustomUi?.request.id !== request.id) return;
444
- this.mountedCustomUi.component.dispose?.();
445
- this.mountedCustomUi = null;
446
- this.chatHost.focused = this.focused;
447
- this.chatHost.scrollToBottom();
448
- this.requestRender?.();
449
- },
450
- () => this._canSubmitPrompt(request.id),
451
- );
452
- // Settled or superseded while mounting: drop the freshly-built component
453
- // instead of showing a gate the broker has already torn down.
454
- if (this.mountingRequestId !== request.id) {
455
- mounted.component.dispose?.();
456
- return;
457
- }
458
- this.mountingRequestId = null;
459
- this.mountedCustomUi = mounted;
460
- // A freshly-shown custom UI (ask_user_question / readiness gate) must own
461
- // keyboard focus to be answerable — including a question mounted mid-turn
462
- // while the agent is "streaming" (it is blocked on this very question, and
463
- // host focus may have drifted off the overlay during the turn, e.g. after a
464
- // stay-loop composer submit). requestFocus is idempotent (a no-op when the
465
- // overlay already owns focus), so this never re-runs a redundant focus
466
- // transition that would stall the stream (#1120).
467
- this.requestFocus?.();
468
- this.requestRender?.();
469
- } catch (error) {
470
- if (this.mountingRequestId === request.id) this.mountingRequestId = null;
471
- this.stageUiBroker.reject(request, error);
472
- }
473
- }
474
-
475
- // -------------------------------------------------------------------------
476
- // Event ingestion
477
- // -------------------------------------------------------------------------
478
-
479
- private _snapshotMessagesFromHandle(): void {
480
- const handle = this._liveHandle();
481
- if (!handle) return;
482
- this.chatHost.appendMessages(handle.messages);
483
- }
484
-
485
- private _snapshotMessagesFromSessionFile(
486
- stage: StageSnapshot | undefined,
487
- ): void {
488
- this.chatHost.loadSessionFile(this._liveHandle()?.sessionFile ?? stage?.sessionFile);
489
- }
490
-
491
- private _absorbStageNotices(stage: StageSnapshot | undefined): boolean {
492
- const notices = stage?.notices;
493
- if (!notices) return false;
494
- let changed = false;
495
- for (const n of notices) {
496
- if (this.seenNoticeIds.has(n.id)) continue;
497
- this.seenNoticeIds.add(n.id);
498
- changed = true;
499
- this.chatHost.appendExtraEntry({
500
- role: "notice",
501
- noticeId: n.id,
502
- kind: n.kind,
503
- value: n.to,
504
- from: n.from,
505
- meta: n.meta,
506
- text: noticeSummary(n),
507
- });
508
- }
509
- return changed;
510
- }
511
-
512
- private _currentStage(): StageSnapshot | undefined {
513
- const snap = this.store.snapshot();
514
- const run = snap.runs.find((r) => r.id === this.runId);
515
- return run?.stages.find((s) => s.id === this.stageId);
516
- }
517
-
518
- private _syncPromptState(prompt: PendingPrompt | undefined): boolean {
519
- if (!prompt) {
520
- const hadLivePrompt =
521
- this.promptState !== null ||
522
- this.promptEditor !== null ||
523
- this.promptEditorPromptId !== null;
524
- if (!hadLivePrompt) return false;
525
- this.promptState = null;
526
- this._disposePromptEditor();
527
- this._resetPromptScroll();
528
- return true;
529
- }
530
- if (!this.promptState || this.promptState.prompt.id !== prompt.id) {
531
- this.promptState = createPromptCardState(prompt);
532
- this._seedPromptTextState(prompt);
533
- this._resetPromptEditor(prompt);
534
- this._resetPromptScroll();
535
- return true;
536
- }
537
- return false;
538
- }
539
-
540
- private _resetPromptScroll(): void {
541
- this.promptScrollOffset = 0;
542
- this.promptMaxScroll = 0;
543
- }
544
-
545
- private _promptSeedText(prompt: PendingPrompt): string {
546
- const draft = this.store.getStagePromptDraft(this.runId, this.stageId, prompt.id);
547
- if (draft !== undefined) return draft;
548
- return typeof prompt.initial === "string" ? prompt.initial : "";
549
- }
550
-
551
- private _seedPromptTextState(prompt: PendingPrompt): void {
552
- if (prompt.kind !== "input" && prompt.kind !== "editor") return;
553
- if (!this.promptState || this.promptState.prompt.id !== prompt.id) return;
554
- const seed = this._promptSeedText(prompt);
555
- this.promptState.rawText = seed;
556
- this.promptState.caret = seed.length;
557
- }
558
-
559
- private _recordPromptDraft(promptId: string, text: string): void {
560
- this.store.recordStagePromptDraft(this.runId, this.stageId, promptId, text);
561
- }
562
-
563
- private _recordCurrentPromptDraft(): void {
564
- const state = this.promptState;
565
- if (!state) return;
566
- const prompt = state.prompt;
567
- if (prompt.kind !== "input" && prompt.kind !== "editor") return;
568
- const text = this.promptEditor && this.promptEditorPromptId === prompt.id
569
- ? this.promptEditor.getText()
570
- : state.rawText;
571
- this._recordPromptDraft(prompt.id, text);
572
- }
573
-
574
- private _resetPromptEditor(prompt: PendingPrompt): void {
575
- this._disposePromptEditor();
576
- if ((prompt.kind !== "input" && prompt.kind !== "editor") || !this.piTui) return;
577
- const editor = this.piEditorFactory
578
- ? this.piEditorFactory(this.piTui, editorThemeFromGraphTheme(this.theme), this.piKeybindings)
579
- : new Editor(this.piTui, editorThemeFromGraphTheme(this.theme), { paddingX: 0 });
580
- editor.setText(this.promptState?.prompt.id === prompt.id ? this.promptState.rawText : this._promptSeedText(prompt));
581
- setEditorPlaceholder(editor, "Type your response…");
582
- setEditorBorderColor(editor, (text) => hexToAnsi(this.theme.accent) + text + RESET);
583
- editor.onChange = (text: string) => {
584
- if (this.promptState?.prompt.id !== prompt.id) return;
585
- this.promptState.rawText = text;
586
- this.promptState.caret = text.length;
587
- this._recordPromptDraft(prompt.id, text);
588
- this.requestRender?.();
589
- };
590
- editor.onSubmit = (text: string) => {
591
- this._resolvePromptResponse(prompt.id, text, {
592
- suppressNextGraphSubmit: this.promptEditorSubmitFromEnter,
593
- });
594
- };
595
- this.promptEditor = editor;
596
- this.promptEditorPromptId = prompt.id;
597
- }
598
-
599
- private _disposePromptEditor(): void {
600
- const editor = this.promptEditor;
601
- this.promptEditor = null;
602
- this.promptEditorPromptId = null;
603
- const disposable = editor as (EditorComponent & { dispose?: () => void }) | null;
604
- disposable?.dispose?.();
605
- }
606
-
607
- private _resolvePromptResponse(
608
- promptId: string,
609
- response: unknown,
610
- metadata: StageChatDetachMetadata = {},
611
- ): void {
612
- const prompt = this.promptState?.prompt;
613
- if (!prompt || prompt.id !== promptId) return;
614
- if (!this._canSubmitPrompt(promptId)) {
615
- this.requestRender?.();
616
- return;
617
- }
618
- this.promptState = null;
619
- this._disposePromptEditor();
620
- this._resetPromptScroll();
621
- // A false return means the prompt was already resolved/removed (for
622
- // example by run abort). The local UI is already stale, so clearing it is
623
- // the least surprising recovery path, but it must not trigger graph-mode
624
- // transition side effects for a prompt this view did not actually settle.
625
- const resolved = this.store.resolveStagePendingPrompt(this.runId, this.stageId, prompt.id, response);
626
- this.requestRender?.();
627
- if (resolved) this.onDetach("prompt-resolved", metadata);
628
- }
629
-
630
- // -------------------------------------------------------------------------
631
- // Frame sizing
632
- // -------------------------------------------------------------------------
633
-
634
- /**
635
- * Number of rows the chat surface paints per frame. The mounted overlay
636
- * passes `terminal.rows` through `getViewportRows`; direct unit renders
637
- * fall back to the constant `VIEW_LINE_COUNT` so the legacy 32-row frame
638
- * still applies to lightweight test mocks.
639
- */
640
- private _viewLineCount(): number {
641
- const reported = this.getViewportRows?.();
642
- if (typeof reported !== "number" || !Number.isFinite(reported)) {
643
- return VIEW_LINE_COUNT;
644
- }
645
- return resolveStageChatViewportRows(reported, VIEW_LINE_COUNT);
646
- }
647
-
648
- private _liveHandle(): StageControlHandle | undefined {
649
- return this.handle?.isDisposed === true ? undefined : this.handle;
104
+ initializeStageChatView(this._ctx(), opts);
650
105
  }
651
106
 
652
- private _isStreaming(): boolean {
653
- return this.chatHost.isStreaming();
654
- }
655
-
656
- private _isBlocked(): boolean {
657
- return this._currentStage()?.status === "blocked";
658
- }
659
-
660
- private _isPaused(
661
- stage: StageSnapshot | undefined = this._currentStage(),
662
- ): boolean {
663
- return this.localPaused || stage?.status === "paused" || this._liveHandle()?.status === "paused";
664
- }
665
-
666
- private _isReadOnlyArchive(stage: StageSnapshot | undefined = this._currentStage()): boolean {
667
- if (this._liveHandle()) return false;
668
- if (!stage) return true;
669
- return isReadOnlyArchiveStatus(stage.status) || Boolean(stage.sessionFile);
670
- }
671
-
672
- private async _handleSlashCommand(text: string): Promise<boolean> {
673
- const [command, ...rest] = text.trim().split(/\s+/);
674
- switch (command) {
675
- case "/compact": {
676
- if (rest.length > 0) return true;
677
- const handle = this._liveHandle();
678
- if (!handle) return false;
679
- await handle.ensureAttached();
680
- if (!handle.agentSession) return false;
681
- await handle.agentSession.compact();
682
- return true;
683
- }
684
- case "/quit":
685
- this.onClose();
686
- return true;
687
- default:
688
- return false;
689
- }
690
- }
691
-
692
- // -------------------------------------------------------------------------
693
- // Top-level render — composes header / body / usage / editor / footer
694
- // -------------------------------------------------------------------------
695
-
696
107
  render(width: number): string[] {
108
+ const ctx = this._ctx();
697
109
  const w = Math.max(40, width);
698
- const stage = this._currentStage();
699
- const blocked = this._isBlocked();
110
+ const stage = currentStage(ctx);
111
+ const blocked = isBlocked(ctx);
700
112
 
701
113
  this.chatHost.focused = this.focused;
702
- const headerLines = this._renderHeader(w, stage);
703
- const sepLines = [this._sepRule(w)];
114
+ const headerLines = renderHeader(ctx, w, stage);
115
+ const sepLines = [sepRule(ctx, w)];
704
116
  const customUiActive = this.mountedCustomUi !== null;
705
- this._syncPromptState(stage?.pendingPrompt);
117
+ syncPromptState(ctx, stage?.pendingPrompt);
706
118
  const promptActive = !customUiActive && this.promptState !== null;
707
- const readOnlyArchive = this._isReadOnlyArchive(stage);
119
+ const readOnlyArchive = isReadOnlyArchive(ctx, stage);
708
120
 
709
- // ask_user_question / readiness-gate custom UI renders as a bottom panel
710
- // (in the high-priority composer slot) so the live transcript stays visible
711
- // and scrollable above it — matching the standalone ask_user_question tool.
712
- // Structured prompt nodes and read-only archives keep their full-body
713
- // treatment below.
714
- const customUiLines = customUiActive ? this._renderCustomUi(w) : [];
121
+ const customUiLines = customUiActive ? renderCustomUi(ctx, w) : [];
715
122
  const chatChromeHidden = customUiActive || promptActive || readOnlyArchive;
716
123
  const pendingLines = chatChromeHidden ? [] : this.chatHost.renderPendingMessages(w);
717
124
  const workingLines = chatChromeHidden ? [] : this.chatHost.renderWorkingStatus(w);
@@ -719,9 +126,9 @@ export class StageChatView implements Component, Focusable {
719
126
  const editorLines = chatChromeHidden ? [] : this.chatHost.renderEditor(w);
720
127
  const footerLines = chatChromeHidden
721
128
  ? []
722
- : this._renderFooterWithOrchestratorReturnHint(w, this.chatHost.renderFooter(w));
129
+ : renderFooterWithOrchestratorReturnHint(ctx, w, this.chatHost.renderFooter(w));
723
130
 
724
- const totalRows = this._viewLineCount();
131
+ const totalRows = viewLineCount(ctx);
725
132
  const plan = planStageChatFrame({
726
133
  viewportRows: totalRows,
727
134
  headerRows: HEADER_ROWS,
@@ -729,9 +136,6 @@ export class StageChatView implements Component, Focusable {
729
136
  pendingRows: pendingLines.length,
730
137
  workingRows: workingLines.length,
731
138
  usageRows: usageLines.length,
732
- // The custom UI question takes the reserved bottom (composer) slot so the
733
- // transcript above keeps as much room as possible and the question never
734
- // clips below the overlay boundary.
735
139
  editorRows: customUiActive ? customUiLines.length : editorLines.length,
736
140
  footerRows: footerLines.length,
737
141
  });
@@ -748,16 +152,14 @@ export class StageChatView implements Component, Focusable {
748
152
  if (bodyBudget <= 0) {
749
153
  bodyLines = [];
750
154
  } else if (promptActive) {
751
- bodyLines = this._renderPromptBody(w, bodyBudget);
155
+ bodyLines = renderPromptBody(ctx, w, bodyBudget);
752
156
  } else if (blocked) {
753
- bodyLines = this._renderBlockedBody(w, bodyBudget, stage);
754
- } else if (!readOnlyArchive && this._isPaused(stage)) {
755
- bodyLines = this._renderPausedBody(w, bodyBudget);
157
+ bodyLines = renderBlockedBody(ctx, w, bodyBudget, stage);
158
+ } else if (!readOnlyArchive && isPaused(ctx, stage)) {
159
+ bodyLines = renderPausedBody(ctx, w, bodyBudget);
756
160
  } else if (readOnlyArchive) {
757
- bodyLines = this._renderReadOnlyArchiveBody(w, bodyBudget, stage);
161
+ bodyLines = renderReadOnlyArchiveBody(ctx, w, bodyBudget, stage);
758
162
  } else {
759
- // Live transcript. When a custom UI question is active it renders in the
760
- // composer slot above; the transcript here stays visible and scrollable.
761
163
  bodyLines = this.chatHost.renderBody(w, bodyBudget);
762
164
  }
763
165
 
@@ -771,1123 +173,85 @@ export class StageChatView implements Component, Focusable {
771
173
  ...visibleEditorLines,
772
174
  ...visibleFooterLines,
773
175
  ];
774
- return fitStageChatFrame(lines, totalRows, this._blank(w));
775
- }
776
-
777
- // -------------------------------------------------------------------------
778
- // Header
779
- // -------------------------------------------------------------------------
780
-
781
- private _renderHeader(
782
- width: number,
783
- stage: StageSnapshot | undefined,
784
- ): string[] {
785
- const t = this.theme;
786
- const stageName = stage?.name ?? "stage";
787
-
788
- // Left side: ` STAGE <wf> / <stage>`
789
- const left =
790
- paint(" ", t.mauve, { bold: true }) +
791
- paint("STAGE", t.textMuted, { bold: true }) +
792
- " " +
793
- paint(this.workflowName, t.textMuted) +
794
- paint(" / ", t.dim) +
795
- paint(stageName, t.text, { bold: true });
796
-
797
- // Right side: stable session metadata only. Avoid workflow-status chrome
798
- // in the embedded chat so the surface does not change colour when the
799
- // workflow stage settles.
800
- const meta = this._headerMeta(stage);
801
- const right = meta ? paint(meta, t.dim) + " " : "";
802
-
803
- const leftW =
804
- visibleWidth(this.workflowName) +
805
- visibleWidth(stageName) +
806
- visibleWidth(" STAGE / ") +
807
- 1;
808
- const rightW = visibleWidth(meta) + (meta ? 1 : 0);
809
- const gap = Math.max(1, width - leftW - rightW);
810
- return [left + " ".repeat(gap) + right];
811
- }
812
-
813
- private _headerMeta(stage: StageSnapshot | undefined): string {
814
- const parts: string[] = [];
815
- const sid = this.handle?.sessionId ?? stage?.sessionId;
816
- if (sid) parts.push(`session ${shortenId(sid)}`);
817
- return parts.join(" · ");
818
- }
819
-
820
- private _sepRule(width: number): string {
821
- return hexToAnsi(this.theme.borderDim) + "─".repeat(width) + RESET;
822
- }
823
-
824
- private _renderFooterWithOrchestratorReturnHint(
825
- width: number,
826
- footerLines: readonly string[],
827
- ): string[] {
828
- if (footerLines.length === 0) {
829
- return [this._mergeOrchestratorReturnHintIntoLine("", width)];
830
- }
831
- const lines = [...footerLines];
832
- const lastIndex = lines.length - 1;
833
- lines[lastIndex] = this._mergeOrchestratorReturnHintIntoLine(
834
- lines[lastIndex] ?? "",
835
- width,
836
- );
837
- return lines;
838
- }
839
-
840
- private _embedOrchestratorReturnHintInWidget(
841
- widgetLines: readonly string[],
842
- width: number,
843
- ): string[] {
844
- if (widgetLines.length === 0) {
845
- return [this._mergeOrchestratorReturnHintIntoLine("", width)];
846
- }
847
- const lines = [...widgetLines];
848
- const targetIndex = widgetHintTargetLineIndex(lines);
849
- lines[targetIndex] = this._mergeOrchestratorReturnHintIntoLine(
850
- lines[targetIndex] ?? "",
851
- width,
852
- { preserveTrailingBorder: true, rightMargin: 2 },
853
- );
854
- return lines;
855
- }
856
-
857
- private _mergeOrchestratorReturnHintIntoLine(
858
- line: string,
859
- width: number,
860
- options: { preserveTrailingBorder?: boolean; rightMargin?: number } = {},
861
- ): string {
862
- const plain = "ctrl+d returns to orchestrator panel";
863
- const styled =
864
- paint("ctrl+d", this.theme.text, { bold: true }) +
865
- paint(" returns to orchestrator panel", this.theme.textMuted);
866
- const trailingBorder = options.preserveTrailingBorder === true
867
- ? trailingWidgetBorderChar(line)
868
- : "";
869
- const suffixWidth = visibleWidth(trailingBorder);
870
- const hintWidth = visibleWidth(plain);
871
- const requestedRightMargin = Math.max(
872
- 0,
873
- Math.floor(options.rightMargin ?? 0),
874
- );
875
- const rightMargin = Math.min(
876
- requestedRightMargin,
877
- Math.max(0, width - suffixWidth - hintWidth),
878
- );
879
- const hintStart = Math.max(0, width - suffixWidth - rightMargin - hintWidth);
880
- const prefix = truncateToWidth(line, hintStart, "", true);
881
- const gap = Math.max(0, hintStart - visibleWidth(prefix));
882
- return prefix + " ".repeat(gap) + styled + " ".repeat(rightMargin) + trailingBorder;
883
- }
884
-
885
- // -------------------------------------------------------------------------
886
- // Body — welcome panel / banner + transcript / blocked
887
- // -------------------------------------------------------------------------
888
-
889
- private _renderReadOnlyArchiveBody(
890
- width: number,
891
- budget: number,
892
- stage: StageSnapshot | undefined,
893
- ): string[] {
894
- if (stage?.promptFootprint) {
895
- return this._renderReadOnlyPromptArchiveBody(width, budget, stage);
896
- }
897
-
898
- const t = this.theme;
899
- const calloutRows = 6;
900
- const transcriptBudget = Math.max(1, budget - calloutRows);
901
- const lines = this.chatHost.renderBody(width, transcriptBudget);
902
- const callout: string[] = [];
903
- callout.push(this._blank(width));
904
- callout.push(
905
- ...this._bannerLines(
906
- width,
907
- "info",
908
- "◌",
909
- "READ-ONLY SESSION",
910
- stage?.sessionFile ? "archived transcript" : "no live chat session",
911
- ),
912
- );
913
- callout.push(
914
- ...new Text(
915
- paint("This node is no longer attached to a live chat session.", t.textMuted),
916
- 2,
917
- 0,
918
- ).render(width),
919
- );
920
- callout.push(
921
- ...new Text(
922
- paint("esc", t.accent, { bold: true }) +
923
- paint(" close", t.textMuted) +
924
- paint(" · ", t.dim) +
925
- paint("ctrl+d", t.accent, { bold: true }) +
926
- paint(" return to graph", t.textMuted),
927
- 2,
928
- 0,
929
- ).render(width),
930
- );
931
- lines.push(...callout);
932
- while (lines.length < budget) lines.push(this._blank(width));
933
- if (lines.length > budget) lines.length = budget;
934
- return lines;
935
- }
936
-
937
- private _renderReadOnlyPromptArchiveBody(
938
- width: number,
939
- budget: number,
940
- stage: StageSnapshot,
941
- ): string[] {
942
- const t = this.theme;
943
- const prompt = stage.promptFootprint;
944
- if (!prompt) return this._fitBodyLines([], width, budget);
945
-
946
- const innerWidth = Math.max(2, width - 2);
947
- const bodyLines: string[] = [];
948
- const messageBox = new Box(2, 1);
949
- messageBox.addChild(new Text(paint(prompt.message, t.text), 0, 0));
950
- bodyLines.push(...messageBox.render(innerWidth));
951
- bodyLines.push(...new Text(paint("prompt type", t.textMuted, { bold: true }) + paint(` ${prompt.kind}`, t.text), 2, 0).render(innerWidth));
952
-
953
- if (prompt.kind === "select" && prompt.choices && prompt.choices.length > 0) {
954
- bodyLines.push(...new Text(paint("choices", t.textMuted, { bold: true }), 2, 0).render(innerWidth));
955
- for (const choice of prompt.choices) {
956
- bodyLines.push(...new Text(paint("• ", t.dim) + paint(choice, t.text), 4, 0).render(innerWidth));
957
- }
958
- } else if (prompt.kind === "confirm") {
959
- bodyLines.push(...new Text(paint("choices", t.textMuted, { bold: true }) + paint(" yes / no", t.text), 2, 0).render(innerWidth));
960
- }
961
-
962
- if ((prompt.kind === "input" || prompt.kind === "editor") && prompt.initial && prompt.initial.length > 0) {
963
- bodyLines.push(...new Text(paint("initial value shown", t.textMuted, { bold: true }), 2, 0).render(innerWidth));
964
- bodyLines.push(...new Text(paint(prompt.initial, t.dim), 4, 0).render(innerWidth));
965
- }
966
-
967
- const answer = this._readOnlyPromptAnswer(stage, prompt);
968
- bodyLines.push("");
969
- bodyLines.push(...new Text(paint("your response", t.textMuted, { bold: true }), 2, 0).render(innerWidth));
970
- bodyLines.push(...new Text(paint(answer, answer.startsWith("(") ? t.dim : t.text), 4, 0).render(innerWidth));
971
- bodyLines.push("");
972
- bodyLines.push(...new Text(
973
- paint("esc", t.accent, { bold: true }) +
974
- paint(" close", t.textMuted) +
975
- paint(" · ", t.dim) +
976
- paint("ctrl+d", t.accent, { bold: true }) +
977
- paint(" return to graph", t.textMuted),
978
- 2,
979
- 0,
980
- ).render(innerWidth));
981
-
982
- const title = stage.status === "skipped" ? "QUESTION SKIPPED" : "QUESTION ASKED";
983
- const cardLines = renderRoundedBoxLines({
984
- title,
985
- bodyLines,
986
- width,
987
- theme: t,
988
- accent: t.border,
989
- });
990
- return this._fitPromptBodyLines(cardLines, width, budget);
991
- }
992
-
993
- private _readOnlyPromptAnswer(stage: StageSnapshot, prompt: PendingPrompt): string {
994
- const answer = this.store.getStagePromptAnswer(this.runId, stage.id);
995
- if (answer && answer.promptId === prompt.id) {
996
- return formatReadOnlyPromptAnswer(answer.value, prompt.kind);
997
- }
998
- switch (stage.promptAnswerState) {
999
- case "ambiguous":
1000
- return "(response replay is ambiguous)";
1001
- case "unavailable":
1002
- return "(response unavailable)";
1003
- case "available":
1004
- return "(response no longer in live memory)";
1005
- default:
1006
- return "(no response saved)";
1007
- }
1008
- }
1009
-
1010
- private _renderPausedBody(width: number, budget: number): string[] {
1011
- const t = this.theme;
1012
- const callout: string[] = [];
1013
- callout.push(this._blank(width));
1014
- callout.push(
1015
- ...this._bannerLines(
1016
- width,
1017
- "warning",
1018
- "❚❚",
1019
- "PAUSED",
1020
- "enter resumes · ctrl+d graph",
1021
- ),
1022
- );
1023
- callout.push(
1024
- ...new Text(
1025
- paint("This workflow stage is paused. Type a message below and press Enter to resume.", t.textMuted),
1026
- 2,
1027
- 0,
1028
- ).render(width),
1029
- );
1030
-
1031
- const calloutRows = Math.min(callout.length, Math.max(0, budget - 1));
1032
- const transcriptBudget = Math.max(1, budget - calloutRows);
1033
- const lines = this.chatHost.renderBody(width, transcriptBudget);
1034
- lines.push(...callout.slice(0, calloutRows));
1035
- while (lines.length < budget) lines.push(this._blank(width));
1036
- if (lines.length > budget) lines.length = budget;
1037
- return lines;
1038
- }
1039
-
1040
- private _renderBlockedBody(
1041
- width: number,
1042
- budget: number,
1043
- stage: StageSnapshot | undefined,
1044
- ): string[] {
1045
- const t = this.theme;
1046
- const upstream = stage?.blockedByStageId ?? "upstream stage";
1047
- const lines: string[] = [];
1048
- // Yellow banner — uses the same chrome vocabulary as paused/completed.
1049
- lines.push(
1050
- ...this._bannerLines(
1051
- width,
1052
- "warning",
1053
- "↑",
1054
- "BLOCKED",
1055
- `waiting on ${upstream}`,
1056
- ),
1057
- );
1058
- lines.push(this._blank(width));
1059
- lines.push(
1060
- ...new Text(
1061
- paint(
1062
- "This stage is waiting for the upstream stage to resume.",
1063
- t.textMuted,
1064
- ),
1065
- 2,
1066
- 0,
1067
- ).render(width),
1068
- );
1069
- lines.push(
1070
- ...new Text(
1071
- paint("ctrl+d", t.accent, { bold: true }) +
1072
- paint(" return to graph", t.textMuted),
1073
- 2,
1074
- 0,
1075
- ).render(width),
1076
- );
1077
- while (lines.length < budget) lines.push(this._blank(width));
1078
- if (lines.length > budget) lines.length = budget;
1079
- return lines;
1080
- }
1081
-
1082
- // Natural-height render of the mounted custom UI (no body padding): it is
1083
- // placed in the composer slot so the transcript stays scrollable above it.
1084
- private _renderCustomUi(width: number): string[] {
1085
- const component = this.mountedCustomUi?.component;
1086
- if (!component) return [];
1087
- setComponentFocused(component, this.focused);
1088
- return this._embedOrchestratorReturnHintInWidget(component.render(width), width);
1089
- }
1090
-
1091
- private _renderPromptBody(width: number, budget: number): string[] {
1092
- const primitiveLines = this._renderPrimitivePromptBody(width);
1093
- if (primitiveLines) {
1094
- return this._fitPromptBodyLines(
1095
- this._embedOrchestratorReturnHintInWidget(primitiveLines, width),
1096
- width,
1097
- budget,
1098
- );
1099
- }
1100
-
1101
- const state = this.promptState;
1102
- const lines = state
1103
- ? renderPromptCard({
1104
- state,
1105
- theme: this.theme,
1106
- width,
1107
- cursorOn: this.focused,
1108
- })
1109
- : [];
1110
- return this._fitPromptBodyLines(
1111
- this._embedOrchestratorReturnHintInWidget(lines, width),
1112
- width,
1113
- budget,
1114
- );
1115
- }
1116
-
1117
- private _renderPrimitivePromptBody(width: number): string[] | null {
1118
- const state = this.promptState;
1119
- const editor = this.promptEditor;
1120
- if (!state || !editor) return null;
1121
- setEditorFocused(editor, this.focused);
1122
- setEditorBorderColor(editor, (text) => hexToAnsi(this.theme.accent) + text + RESET);
1123
-
1124
- const innerWidth = Math.max(2, width - 2);
1125
- const bodyLines: string[] = [];
1126
- const messageBox = new Box(2, 1);
1127
- messageBox.addChild(new Text(paint(state.prompt.message, this.theme.text), 0, 0));
1128
- bodyLines.push(...messageBox.render(innerWidth));
1129
- bodyLines.push(...new Text(paint("response", this.theme.textMuted, { bold: true }), 2, 0).render(innerWidth));
1130
- for (const line of editor.render(Math.max(20, innerWidth - 4))) {
1131
- bodyLines.push(" " + line);
1132
- }
1133
- bodyLines.push("");
1134
- bodyLines.push(...new Text(renderHintsForPrompt(state.prompt.kind, this.theme), 2, 0).render(innerWidth));
1135
-
1136
- return renderRoundedBoxLines({
1137
- title: "AWAITING INPUT",
1138
- bodyLines,
1139
- width,
1140
- theme: this.theme,
1141
- accent: this.theme.border,
1142
- });
1143
- }
1144
-
1145
- private _fitPromptBodyLines(lines: readonly string[], width: number, budget: number): string[] {
1146
- this.promptMaxScroll = Math.max(0, lines.length - budget);
1147
- this.promptScrollOffset = Math.max(0, Math.min(this.promptScrollOffset, this.promptMaxScroll));
1148
- const framed = lines.slice(this.promptScrollOffset, this.promptScrollOffset + budget);
1149
- while (framed.length < budget) framed.push(this._blank(width));
1150
- return framed;
1151
- }
1152
-
1153
- private _fitBodyLines(lines: readonly string[], width: number, budget: number): string[] {
1154
- const framed = lines.slice(0, budget);
1155
- while (framed.length < budget) framed.push(this._blank(width));
1156
- return framed;
1157
- }
1158
-
1159
- private _noticeRow(entry: NoticeEntry): Component {
1160
- const theme = this.theme;
1161
- return {
1162
- render(width: number): string[] {
1163
- return renderWorkflowNoticeCard({
1164
- ...stageNoticeCard(entry),
1165
- fallbackText: entry.text,
1166
- width,
1167
- theme,
1168
- });
1169
- },
1170
- invalidate() {
1171
- /* notice entries are immutable */
1172
- },
1173
- };
1174
- }
1175
-
1176
- // -------------------------------------------------------------------------
1177
- // Banners (paused / completed / failed / blocked)
1178
- // -------------------------------------------------------------------------
1179
-
1180
- private _banner(
1181
- kind: "warning" | "success" | "error" | "info",
1182
- glyph: string,
1183
- label: string,
1184
- meta: string,
1185
- ): Component {
1186
- const t = this.theme;
1187
- const fg =
1188
- kind === "warning"
1189
- ? t.warning
1190
- : kind === "success"
1191
- ? t.success
1192
- : kind === "info"
1193
- ? t.info
1194
- : t.error;
1195
- const bg = blendBg(t.bg, fg, 0.1);
1196
- const head =
1197
- paintOnFill(glyph, fg, { bold: true }) +
1198
- " " +
1199
- paintOnFill(label, fg, { bold: true }) +
1200
- " " +
1201
- paintOnFill(stripAnsi(meta), t.dim);
1202
- const box = new Box(2, 0, bgFn(bg));
1203
- box.addChild(new Text(head, 0, 0));
1204
- return box;
1205
- }
1206
-
1207
- /**
1208
- * Banner rendered directly as string lines. Used by `_renderBlockedBody`
1209
- * which builds its body out of raw rows rather than a Component[] stack.
1210
- */
1211
- private _bannerLines(
1212
- width: number,
1213
- kind: "warning" | "success" | "error" | "info",
1214
- glyph: string,
1215
- label: string,
1216
- meta: string,
1217
- ): string[] {
1218
- return this._banner(kind, glyph, label, meta).render(width);
1219
- }
1220
-
1221
- private _editorRuleColor(
1222
- disabled: boolean,
1223
- agentSession: AgentSession | undefined,
1224
- state?: { isBashMode: boolean },
1225
- ): string {
1226
- if (disabled) return this.theme.borderDim;
1227
- if (state?.isBashMode) return this.theme.warning;
1228
- const level = agentSession?.state.thinkingLevel ?? "off";
1229
- switch (level) {
1230
- case "minimal":
1231
- return this.theme.borderDim;
1232
- case "low":
1233
- return this.theme.info;
1234
- case "medium":
1235
- return this.theme.accent;
1236
- case "high":
1237
- return this.theme.mauve;
1238
- case "xhigh":
1239
- return this.theme.error;
1240
- case "off":
1241
- default:
1242
- return this.theme.border;
1243
- }
1244
- }
1245
-
1246
- // -------------------------------------------------------------------------
1247
- // Small helpers
1248
- // -------------------------------------------------------------------------
1249
-
1250
- private _blank(width: number): string {
1251
- return " ".repeat(width);
176
+ return fitStageChatFrame(lines, totalRows, blankLine(w));
1252
177
  }
1253
178
 
1254
179
  wantsMouseScrollTracking(): boolean {
1255
180
  return true;
1256
181
  }
1257
182
 
1258
- private _promptKeybindings(): KeybindingsLike | undefined {
1259
- return isKeybindingsLike(this.piKeybindings) ? this.piKeybindings : undefined;
1260
- }
1261
-
1262
- private _canSubmitPrompt(promptId: string): boolean {
1263
- return this.canSubmitPrompt?.(this.runId, this.stageId, promptId) ?? true;
1264
- }
1265
-
1266
- private _handlePromptInput(data: string): void {
1267
- const state = this.promptState;
1268
- if (!state) return;
1269
- if (this.promptEditor && this.promptEditorPromptId === state.prompt.id) {
1270
- if (matchesKey(data, Key.ctrl("c"))) {
1271
- this._resolvePromptResponse(state.prompt.id, defaultResponseFor(state.prompt), {
1272
- suppressNextGraphSubmit: false,
1273
- });
1274
- return;
1275
- }
1276
- if (isPromptEscapeInput(data)) {
1277
- this.requestRender?.();
1278
- return;
1279
- }
1280
- setEditorFocused(this.promptEditor, this.focused);
1281
- this.promptEditorSubmitFromEnter = matchesKey(data, Key.enter);
1282
- try {
1283
- this.promptEditor.handleInput(data);
1284
- } finally {
1285
- this.promptEditorSubmitFromEnter = false;
1286
- }
1287
- this.requestRender?.();
1288
- return;
1289
- }
1290
- const action = handlePromptCardInput(data, state, this._promptKeybindings());
1291
- const prompt = state.prompt;
1292
- if (prompt.kind === "input" || prompt.kind === "editor") {
1293
- this._recordPromptDraft(prompt.id, state.rawText);
1294
- }
1295
- if (action.kind === "noop") {
1296
- this.requestRender?.();
1297
- return;
1298
- }
1299
- const response = action.kind === "submit"
1300
- ? action.response
1301
- : defaultResponseFor(prompt);
1302
- this._resolvePromptResponse(prompt.id, response, {
1303
- suppressNextGraphSubmit: action.kind === "submit" && matchesKey(data, Key.enter),
1304
- });
1305
- }
1306
-
1307
- // -------------------------------------------------------------------------
1308
- // Input
1309
- // -------------------------------------------------------------------------
1310
-
1311
183
  handleInput(data: string): boolean {
1312
- if (this.mountedCustomUi) {
1313
- if (!this._canSubmitPrompt(this.mountedCustomUi.request.id)) {
1314
- this.requestRender?.();
1315
- return true;
1316
- }
1317
- if (matchesKey(data, Key.ctrl("d"))) {
1318
- // Detach stops *viewing* the stage; it does not cancel a pending
1319
- // human-input request. Release the local display only — the request
1320
- // stays pending (the stage remains awaiting_input) and is re-displayed
1321
- // when the user re-attaches.
1322
- this._releaseMountedCustomUi();
1323
- this.onDetach();
1324
- return true;
1325
- }
1326
- if (matchesKey(data, Key.ctrl("c"))) {
1327
- // Close hides the overlay; the background run — and its pending
1328
- // human-input request — keep living. Release the local display only.
1329
- this._releaseMountedCustomUi();
1330
- this.onClose();
1331
- return true;
1332
- }
1333
- // Let scroll input (mouse wheel / pageUp / pageDown / home / end) reach
1334
- // the transcript so history stays scrollable while the question is shown,
1335
- // matching the standalone ask_user_question tool. Navigation keys
1336
- // (arrows / enter / typing) fall through to the question component.
1337
- if (this.chatHost.handleScrollInput(data)) {
1338
- this.requestRender?.();
1339
- return true;
1340
- }
1341
- setComponentFocused(this.mountedCustomUi.component, this.focused);
1342
- this.mountedCustomUi.component.handleInput?.(data);
1343
- this.requestRender?.();
1344
- return true;
1345
- }
1346
- const stage = this._currentStage();
1347
- this._syncPromptState(stage?.pendingPrompt);
1348
- const readOnlyArchive = this._isReadOnlyArchive(stage);
1349
- const readOnlyPromptArchive = readOnlyArchive && stage?.promptFootprint !== undefined;
1350
- if (matchesKey(data, Key.ctrl("d"))) {
1351
- if (!this.promptState && this.chatHost.hasInputText()) return this.chatHost.handleInput(data);
1352
- this._recordCurrentPromptDraft();
1353
- this.onDetach();
1354
- return true;
1355
- }
1356
- if (this.promptState) {
1357
- if (this._handlePromptScrollInput(data, this.promptEditor === null)) return true;
1358
- this._handlePromptInput(data);
1359
- return true;
1360
- }
1361
- if (readOnlyPromptArchive && this._handlePromptScrollInput(data, true)) {
1362
- return true;
1363
- }
1364
- if (this.chatHost.handleScrollInput(data)) {
1365
- return true;
1366
- }
1367
- if (matchesKey(data, Key.escape)) {
1368
- if (
1369
- this._isStreaming() ||
1370
- this.chatHost.isBashRunning() ||
1371
- this.chatHost.isEditingBashCommand()
1372
- ) {
1373
- return this.chatHost.handleInput(data);
1374
- }
1375
- this.onClose();
1376
- return true;
1377
- }
1378
- if (matchesKey(data, Key.ctrl("c"))) {
1379
- this.onClose();
1380
- return true;
1381
- }
1382
- if (readOnlyArchive) return true;
1383
- const blocked = this._isBlocked();
1384
- if (matchesKey(data, Key.ctrl("f"))) {
1385
- if (blocked) return true;
1386
- void this.chatHost.submit("followUp");
1387
- return true;
1388
- }
1389
- if (blocked) return true;
1390
- return this.chatHost.handleInput(data);
1391
- }
1392
-
1393
- private _handlePromptScrollInput(data: string, includeKeyboard = true): boolean {
1394
- const wheelDeltaRows = this._mouseWheelDeltaRows(data);
1395
- if (wheelDeltaRows !== 0) {
1396
- this._scrollPromptBy(wheelDeltaRows);
1397
- return true;
1398
- }
1399
- if (this._isMouseSequence(data)) return true;
1400
- if (!includeKeyboard) return false;
1401
- if (matchesKey(data, "pageUp")) {
1402
- this._scrollPromptBy(-this._promptPageSize());
1403
- return true;
1404
- }
1405
- if (matchesKey(data, "pageDown")) {
1406
- this._scrollPromptBy(this._promptPageSize());
1407
- return true;
1408
- }
1409
- if (!this.promptEditor && matchesKey(data, "home")) {
1410
- this.promptScrollOffset = 0;
1411
- this.requestRender?.();
1412
- return true;
1413
- }
1414
- if (!this.promptEditor && matchesKey(data, "end")) {
1415
- this.promptScrollOffset = this.promptMaxScroll;
1416
- this.requestRender?.();
1417
- return true;
1418
- }
1419
- return false;
1420
- }
1421
-
1422
- private _scrollPromptBy(deltaRows: number): void {
1423
- this.promptScrollOffset = Math.max(
1424
- 0,
1425
- Math.min(this.promptMaxScroll, this.promptScrollOffset + deltaRows),
1426
- );
1427
- this.requestRender?.();
1428
- }
1429
-
1430
- private _promptPageSize(): number {
1431
- return Math.max(4, this._viewLineCount() - HEADER_ROWS - SEP_ROWS - 2);
1432
- }
1433
-
1434
- private _mouseWheelDeltaRows(data: string): number {
1435
- const sgr = data.match(/^\x1b\[<(\d+);\d+;\d+M$/);
1436
- if (sgr) return this._wheelDeltaForButtonCode(Number.parseInt(sgr[1]!, 10));
1437
- if (data.startsWith("\x1b[M") && data.length >= 6) {
1438
- return this._wheelDeltaForButtonCode(data.charCodeAt(3) - 32);
1439
- }
1440
- return 0;
1441
- }
1442
-
1443
- private _wheelDeltaForButtonCode(code: number): number {
1444
- if ((code & 64) === 0) return 0;
1445
- const direction = code & 3;
1446
- if (direction === 0) return -PROMPT_SCROLL_STEP_ROWS;
1447
- if (direction === 1) return PROMPT_SCROLL_STEP_ROWS;
1448
- return 0;
1449
- }
1450
-
1451
- private _isMouseSequence(data: string): boolean {
1452
- return /^\x1b\[<\d+;\d+;\d+[mM]$/.test(data) || data.startsWith("\x1b[M");
184
+ return handleStageChatInput(this._ctx(), data);
1453
185
  }
1454
186
 
1455
187
  invalidate(): void {
1456
- this.chatHost.invalidate();
1457
- this._syncPromptState(this._currentStage()?.pendingPrompt);
188
+ invalidateStageChatView(this._ctx());
1458
189
  }
1459
190
 
1460
191
  dispose(): void {
1461
- if (this.focusHoldTimer !== undefined) {
1462
- clearInterval(this.focusHoldTimer);
1463
- this.focusHoldTimer = undefined;
1464
- }
1465
- this._unsubscribeStore?.();
1466
- this._unsubscribeStore = null;
1467
- this._unsubscribeHandle?.();
1468
- this._unsubscribeHandle = null;
1469
- this._releaseMountedCustomUi();
1470
- this._disposePromptEditor();
1471
- this._unregisterStageUiHost?.();
1472
- this._unregisterStageUiHost = null;
1473
- this.chatHost.dispose();
192
+ disposeStageChatView(this._ctx());
193
+ }
194
+
195
+ private _ctx(): StageChatViewContext {
196
+ // Helper modules operate on the same runtime object; these reads keep the
197
+ // private fields visible to noUnusedLocals while preserving the historical
198
+ // non-public TypeScript surface of StageChatView.
199
+ void this.store;
200
+ void this.theme;
201
+ void this.runId;
202
+ void this.stageId;
203
+ void this.workflowName;
204
+ void this.handle;
205
+ void this.onDetach;
206
+ void this.onClose;
207
+ void this.requestRender;
208
+ void this.requestFocus;
209
+ void this.focusHoldTimer;
210
+ void this.getViewportRows;
211
+ void this.piTui;
212
+ void this.piTheme;
213
+ void this.piKeybindings;
214
+ void this.piEditorFactory;
215
+ void this.stageUiBroker;
216
+ void this.canSubmitPrompt;
217
+ void this.mountingRequestId;
218
+ void this.promptEditor;
219
+ void this.promptEditorPromptId;
220
+ void this.promptEditorSubmitFromEnter;
221
+ void this.promptScrollOffset;
222
+ void this.promptMaxScroll;
223
+ void this.seenNoticeIds;
224
+ void this._unsubscribeStore;
225
+ void this._unsubscribeHandle;
226
+ void this._unregisterStageUiHost;
227
+ return this as unknown as StageChatViewContext;
1474
228
  }
1475
229
 
1476
- private _hideMountedCustomUi(request: StageCustomUiRequest): void {
1477
- // Signal any in-flight `_showCustomUi` mount for this request to drop its
1478
- // component when it finishes — the broker is already tearing it down.
1479
- if (this.mountingRequestId === request.id) this.mountingRequestId = null;
1480
- const mounted = this.mountedCustomUi;
1481
- if (!mounted || mounted.request.id !== request.id) return;
1482
- this.mountedCustomUi = null;
1483
- mounted.component.dispose?.();
1484
- this.chatHost.focused = this.focused;
1485
- this.chatHost.scrollToBottom();
1486
- // Returning to the composer after a custom UI resolves (e.g. the readiness
1487
- // gate -> "stay") must re-assert overlay focus so the composer accepts
1488
- // input. Guarded for streaming so an answered mid-turn ask_user_question
1489
- // does not refocus during the agent's continuation (would stall it).
1490
- if (!this._isStreaming()) this.requestFocus?.();
1491
- this.requestRender?.();
1492
- }
1493
-
1494
- /**
1495
- * Stop displaying the mounted stage custom UI locally, WITHOUT settling its
1496
- * broker request. Detaching / closing / disposing the attached chat stops
1497
- * viewing the stage; it never cancels a pending human-input request. The
1498
- * request stays pending (the stage remains awaiting_input) so re-attaching
1499
- * re-displays it. The request is settled only by the user answering (broker
1500
- * resolve) or the run aborting (its AbortSignal -> broker reject) — those are
1501
- * the single chokepoints for ending a human-input request.
1502
- */
1503
- private _releaseMountedCustomUi(): void {
1504
- this.mountingRequestId = null;
1505
- const mounted = this.mountedCustomUi;
1506
- if (!mounted) return;
1507
- this.mountedCustomUi = null;
1508
- mounted.component.dispose?.();
1509
- }
1510
-
1511
- // ---- Test seams ----
1512
230
  get _inputBuffer(): string {
1513
231
  return this.chatHost.inputText();
1514
232
  }
233
+
1515
234
  get _transcript(): ReadonlyArray<TranscriptDebugEntry> {
1516
235
  return this.chatHost.entries().flatMap((entry) => transcriptDebugEntries(entry));
1517
236
  }
237
+
1518
238
  get _statusMessage(): string {
1519
239
  return this.chatHost.statusText();
1520
240
  }
241
+
1521
242
  get _isLocalPaused(): boolean {
1522
243
  return this.localPaused;
1523
244
  }
245
+
1524
246
  get _hasAnimationTick(): boolean {
1525
247
  return this.chatHost.hasAnimationTick();
1526
248
  }
249
+
1527
250
  get _bodyScrollFromBottom(): number {
1528
251
  return this.chatHost.bodyScrollFromBottom();
1529
252
  }
253
+
1530
254
  get _lastBodyMaxScroll(): number {
1531
255
  return this.chatHost.bodyMaxScroll();
1532
256
  }
1533
257
  }
1534
-
1535
- // ---------------------------------------------------------------------------
1536
- // Module-private helpers
1537
- // ---------------------------------------------------------------------------
1538
-
1539
- interface TranscriptDebugEntry {
1540
- readonly role: string;
1541
- readonly text: string;
1542
- readonly toolCallId: string;
1543
- readonly state: string;
1544
- readonly output: string;
1545
- }
1546
-
1547
- function formatReadOnlyPromptAnswer(value: unknown, kind: PendingPrompt["kind"]): string {
1548
- if (kind === "confirm") return value === true ? "yes" : "no";
1549
- if (typeof value === "string") return value.length > 0 ? value : "(empty response)";
1550
- if (typeof value === "number" || typeof value === "boolean" || value === null) return String(value);
1551
- try {
1552
- const encoded = JSON.stringify(value);
1553
- return encoded ?? String(value);
1554
- } catch {
1555
- return String(value);
1556
- }
1557
- }
1558
-
1559
- function transcriptDebugEntries(entry: TranscriptEntry): TranscriptDebugEntry[] {
1560
- if (isChatMessageEntry(entry) && entry.kind === "assistant") {
1561
- const entries: TranscriptDebugEntry[] = [];
1562
- const thinking = extractThinkingText(entry.message.content);
1563
- const text = extractMessageText(entry.message.content);
1564
- if (thinking)
1565
- entries.push({
1566
- role: "thinking",
1567
- text: thinking,
1568
- toolCallId: "",
1569
- state: "",
1570
- output: "",
1571
- });
1572
- if (text || entries.length === 0)
1573
- entries.push({ ...entry, text, toolCallId: "", state: "", output: "" });
1574
- return entries;
1575
- }
1576
- return [
1577
- {
1578
- ...entry,
1579
- role: entry.role,
1580
- text: transcriptDebugText(entry),
1581
- toolCallId: transcriptDebugToolCallId(entry),
1582
- state: transcriptDebugToolState(entry),
1583
- output: transcriptDebugToolOutput(entry),
1584
- },
1585
- ];
1586
- }
1587
-
1588
- function transcriptDebugText(entry: TranscriptEntry): string {
1589
- if ("text" in entry && typeof entry.text === "string") return entry.text;
1590
- if (isChatMessageEntry(entry)) {
1591
- switch (entry.kind) {
1592
- case "assistant":
1593
- return extractMessageText(entry.message.content);
1594
- case "tool":
1595
- return entry.result
1596
- ? extractToolResultText(entry.result)
1597
- : `${entry.toolName} ${typeof entry.args === "string" ? entry.args : JSON.stringify(entry.args ?? {})}`;
1598
- case "bashExecution":
1599
- return entry.message.output || entry.message.command;
1600
- case "user":
1601
- case "system":
1602
- return entry.text;
1603
- case "custom":
1604
- return extractMessageText(entry.message.content);
1605
- case "branchSummary":
1606
- return entry.message.summary;
1607
- }
1608
- }
1609
- return "";
1610
- }
1611
-
1612
- function transcriptDebugToolCallId(entry: TranscriptEntry): string {
1613
- if (isChatMessageEntry(entry) && entry.kind === "tool")
1614
- return entry.toolCallId;
1615
- if ("toolCallId" in entry && typeof entry.toolCallId === "string")
1616
- return entry.toolCallId;
1617
- return "";
1618
- }
1619
-
1620
- function transcriptDebugToolState(entry: TranscriptEntry): string {
1621
- if (isChatMessageEntry(entry) && entry.kind === "tool") {
1622
- if (entry.result?.isError) return "error";
1623
- return entry.isPartial === false ? "success" : "pending";
1624
- }
1625
- if ("state" in entry && typeof entry.state === "string") return entry.state;
1626
- return "";
1627
- }
1628
-
1629
- function transcriptDebugToolOutput(entry: TranscriptEntry): string {
1630
- if (isChatMessageEntry(entry) && entry.kind === "tool")
1631
- return entry.result ? extractToolResultText(entry.result) : "";
1632
- if ("output" in entry && typeof entry.output === "string")
1633
- return entry.output;
1634
- return "";
1635
- }
1636
-
1637
- function cursorBlock(): string {
1638
- return "\x1b[7m \x1b[0m";
1639
- }
1640
-
1641
- function setComponentFocused(component: Component, focused: boolean): void {
1642
- const candidate = component as Component & Partial<Focusable>;
1643
- if ("focused" in candidate) candidate.focused = focused;
1644
- }
1645
-
1646
- function setEditorFocused(editor: EditorComponent, focused: boolean): void {
1647
- setComponentFocused(editor, focused);
1648
- }
1649
-
1650
- function setEditorPlaceholder(editor: EditorComponent, placeholder: string | undefined): void {
1651
- const candidate = editor as EditorComponent & {
1652
- setPlaceholder?: (value: string | undefined) => void;
1653
- };
1654
- candidate.setPlaceholder?.(placeholder);
1655
- }
1656
-
1657
- function setEditorBorderColor(
1658
- editor: EditorComponent,
1659
- borderColor: (text: string) => string,
1660
- ): void {
1661
- const candidate = editor as EditorComponent & {
1662
- borderColor?: (text: string) => string;
1663
- };
1664
- if ("borderColor" in candidate) candidate.borderColor = borderColor;
1665
- }
1666
-
1667
- function isChatMessageEntry(entry: TranscriptEntry): entry is ChatMessageEntry {
1668
- return "kind" in entry && entry.role !== "notice";
1669
- }
1670
-
1671
- function extractThinkingText(content: unknown): string {
1672
- if (!Array.isArray(content)) return "";
1673
- const parts: string[] = [];
1674
- for (const item of content) {
1675
- if (item == null || typeof item !== "object") continue;
1676
- const thinking = (item as { type?: unknown; thinking?: unknown }).thinking;
1677
- if (
1678
- (item as { type?: unknown }).type === "thinking" &&
1679
- typeof thinking === "string"
1680
- )
1681
- parts.push(thinking);
1682
- }
1683
- return parts.join("\n\n");
1684
- }
1685
-
1686
- function extractMessageText(content: unknown): string {
1687
- if (typeof content === "string") return content;
1688
- if (!Array.isArray(content)) return "";
1689
- const parts: string[] = [];
1690
- for (const item of content) {
1691
- if (item == null) continue;
1692
- if (typeof item === "string") {
1693
- parts.push(item);
1694
- continue;
1695
- }
1696
- const obj = item as { type?: unknown; text?: unknown };
1697
- if (typeof obj.text === "string") parts.push(obj.text);
1698
- else if (obj.type === "text" && typeof obj.text === "string")
1699
- parts.push(obj.text);
1700
- }
1701
- return parts.join("");
1702
- }
1703
-
1704
- function extractToolResultText(result: unknown): string {
1705
- if (typeof result === "string") return result;
1706
- if (result == null || typeof result !== "object") return "";
1707
- const content = (result as { content?: unknown }).content;
1708
- return extractMessageText(content);
1709
- }
1710
-
1711
- function noticeSummary(n: StageNotice): string {
1712
- const base = `~ ${n.kind} → ${n.to}`;
1713
- return n.from ? `${base} (was ${n.from})` : base;
1714
- }
1715
-
1716
- function stageNoticeCard(entry: NoticeEntry): {
1717
- title: string;
1718
- glyph: string;
1719
- headline: string;
1720
- tone: WorkflowNoticeTone;
1721
- fields: Array<{ label: string; value: string | undefined; tone?: WorkflowNoticeTone | "text" | "muted" }>;
1722
- } {
1723
- switch (entry.kind) {
1724
- case "abort":
1725
- return {
1726
- title: "STAGE ABORTED",
1727
- glyph: "✗",
1728
- headline: "Stage received an abort notice",
1729
- tone: "error",
1730
- fields: stageNoticeFields(entry, "error"),
1731
- };
1732
- case "compaction":
1733
- return {
1734
- title: "STAGE COMPACTION",
1735
- glyph: "✓",
1736
- headline: "Stage context was compacted",
1737
- tone: "success",
1738
- fields: stageNoticeFields(entry, "muted"),
1739
- };
1740
- case "model":
1741
- return {
1742
- title: "STAGE MODEL",
1743
- glyph: "→",
1744
- headline: "Stage model changed",
1745
- tone: "info",
1746
- fields: stageNoticeFields(entry),
1747
- };
1748
- case "thinking":
1749
- return {
1750
- title: "STAGE THINKING",
1751
- glyph: "→",
1752
- headline: "Stage thinking level changed",
1753
- tone: "mauve",
1754
- fields: stageNoticeFields(entry),
1755
- };
1756
- case "tree":
1757
- return {
1758
- title: "STAGE TREE",
1759
- glyph: "◆",
1760
- headline: "Stage branch tree changed",
1761
- tone: "info",
1762
- fields: stageNoticeFields(entry, "muted"),
1763
- };
1764
- case "mcp":
1765
- default:
1766
- return {
1767
- title: "STAGE NOTICE",
1768
- glyph: "◆",
1769
- headline: "Workflow stage notice",
1770
- tone: "info",
1771
- fields: stageNoticeFields(entry, "muted"),
1772
- };
1773
- }
1774
- }
1775
-
1776
- function stageNoticeFields(
1777
- entry: NoticeEntry,
1778
- valueTone: WorkflowNoticeTone | "text" | "muted" = "text",
1779
- ): Array<{ label: string; value: string | undefined; tone?: WorkflowNoticeTone | "text" | "muted" }> {
1780
- return [
1781
- { label: "kind", value: entry.kind, tone: "muted" },
1782
- { label: "value", value: entry.value, tone: valueTone },
1783
- { label: "from", value: entry.from, tone: "muted" },
1784
- { label: "meta", value: entry.meta, tone: "muted" },
1785
- ];
1786
- }
1787
-
1788
- function shortenId(id: string): string {
1789
- return id.length > 10 ? id.slice(0, 8) : id;
1790
- }
1791
-
1792
- function bgFn(hex: string): (text: string) => string {
1793
- const open = hexBg(hex);
1794
- return (text: string) => open + text + RESET;
1795
- }
1796
-
1797
- function editorThemeFromGraphTheme(t: GraphTheme): EditorTheme {
1798
- const selected = (text: string): string =>
1799
- hexBg(t.backgroundPanel) + hexToAnsi(t.text) + text + RESET;
1800
- const normal = (text: string): string => hexToAnsi(t.text) + text + RESET;
1801
- return {
1802
- borderColor: (text: string) => hexToAnsi(t.border) + text + RESET,
1803
- selectList: {
1804
- selectedPrefix: selected,
1805
- selectedText: selected,
1806
- description: (text: string) => hexToAnsi(t.dim) + text + RESET,
1807
- scrollInfo: (text: string) => hexToAnsi(t.dim) + text + RESET,
1808
- noMatch: (text: string) => hexToAnsi(t.warning) + text + RESET,
1809
- normal,
1810
- },
1811
- } as EditorTheme;
1812
- }
1813
-
1814
- function takeRows(lines: readonly string[], rows: number): string[] {
1815
- return lines.slice(0, rows);
1816
- }
1817
-
1818
- function widgetHintTargetLineIndex(lines: readonly string[]): number {
1819
- for (let index = lines.length - 1; index >= 0; index -= 1) {
1820
- if (!isWidgetBottomBorderLine(lines[index] ?? "")) return index;
1821
- }
1822
- return Math.max(0, lines.length - 1);
1823
- }
1824
-
1825
- function isWidgetBottomBorderLine(line: string): boolean {
1826
- const plain = stripAnsi(line).trim();
1827
- const chars = Array.from(plain);
1828
- if (chars.length < 2) return false;
1829
- const first = chars[0] ?? "";
1830
- const last = chars.at(-1) ?? "";
1831
- if (!"╰└+".includes(first) || !"╯┘+".includes(last)) return false;
1832
- return chars.slice(1, -1).every((char) => "─═- ".includes(char));
1833
- }
1834
-
1835
- function trailingWidgetBorderChar(line: string): string {
1836
- const plain = stripAnsi(line).trimEnd();
1837
- const last = Array.from(plain).at(-1) ?? "";
1838
- return "╯┘┤┴│|+".includes(last) ? last : "";
1839
- }
1840
-
1841
- interface PaintOpts {
1842
- bold?: boolean;
1843
- italic?: boolean;
1844
- bg?: string;
1845
- }
1846
-
1847
- function paint(text: string, fg: string, opts: PaintOpts = {}): string {
1848
- if (!text) return "";
1849
- let out = hexToAnsi(fg);
1850
- if (opts.bold) out += BOLD;
1851
- if (opts.italic) out += ITALIC;
1852
- if (opts.bg) out = hexBg(opts.bg) + out;
1853
- return out + text + RESET;
1854
- }
1855
-
1856
- function renderHintsForPrompt(kind: PendingPrompt["kind"], theme: GraphTheme): string {
1857
- if (kind === "input" || kind === "editor") {
1858
- return `${paint("enter", theme.textMuted, { bold: true })} Submit · ${paint("ctrl+c", theme.textMuted, { bold: true })} Skip`;
1859
- }
1860
- if (kind === "custom") {
1861
- return `${paint("ctrl+d", theme.textMuted, { bold: true })} Graph · ${paint("ctrl+c", theme.textMuted, { bold: true })} Close`;
1862
- }
1863
- return `${paint("enter", theme.textMuted, { bold: true })} Select · ${paint("ctrl+c", theme.textMuted, { bold: true })} Skip`;
1864
- }
1865
-
1866
- /**
1867
- * Foreground styling for text that will be wrapped by a `Box` background.
1868
- * A normal `RESET` would also clear the parent background, so close only the
1869
- * inline foreground/weight/italic state and let `bgFn()` reset the row at end.
1870
- */
1871
- function paintOnFill(text: string, fg: string, opts: PaintOpts = {}): string {
1872
- if (!text) return "";
1873
- let out = hexToAnsi(fg);
1874
- if (opts.bold) out += BOLD;
1875
- if (opts.italic) out += ITALIC;
1876
- let close = FG_RESET;
1877
- if (opts.bold) close += WEIGHT_RESET;
1878
- if (opts.italic) close += ITALIC_RESET;
1879
- return out + text + close;
1880
- }
1881
-
1882
- function stripAnsi(s: string): string {
1883
- return s.replace(/\x1B\[[0-?]*[ -/]*[@-~]/g, "");
1884
- }
1885
-
1886
- /**
1887
- * Approximate a tinted background by mixing the base canvas with a saturated
1888
- * hue at low alpha. Used for status pills and tool-bar tints. Returns a hex
1889
- * colour the renderer can feed to `hexBg`.
1890
- */
1891
- function blendBg(baseHex: string, tintHex: string, alpha: number): string {
1892
- return lerpColor(baseHex, tintHex, Math.max(0, Math.min(1, alpha)));
1893
- }