@bastani/atomic 0.9.14-alpha.1 → 0.9.14-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 (702) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +3 -3
  3. package/dist/builtin/intercom/package.json +2 -2
  4. package/dist/builtin/mcp/package.json +3 -3
  5. package/dist/builtin/subagents/CHANGELOG.md +14 -0
  6. package/dist/builtin/subagents/README.md +6 -4
  7. package/dist/builtin/subagents/agents/code-simplifier.md +1 -1
  8. package/dist/builtin/subagents/agents/codebase-analyzer.md +1 -1
  9. package/dist/builtin/subagents/agents/codebase-locator.md +1 -1
  10. package/dist/builtin/subagents/agents/codebase-online-researcher.md +1 -1
  11. package/dist/builtin/subagents/agents/codebase-pattern-finder.md +1 -1
  12. package/dist/builtin/subagents/agents/codebase-research-analyzer.md +1 -1
  13. package/dist/builtin/subagents/agents/codebase-research-locator.md +1 -1
  14. package/dist/builtin/subagents/agents/debugger.md +1 -1
  15. package/dist/builtin/subagents/agents/worker.md +1 -1
  16. package/dist/builtin/subagents/package.json +6 -5
  17. package/dist/builtin/subagents/src/agents/agent-discovery.ts +17 -11
  18. package/dist/builtin/subagents/src/agents/agent-loaders.ts +115 -43
  19. package/dist/builtin/subagents/src/agents/agent-management-helpers.ts +10 -8
  20. package/dist/builtin/subagents/src/agents/agent-management.ts +8 -7
  21. package/dist/builtin/subagents/src/agents/agent-overrides.ts +2 -2
  22. package/dist/builtin/subagents/src/agents/agent-scope.ts +1 -1
  23. package/dist/builtin/subagents/src/agents/agent-selection.ts +1 -1
  24. package/dist/builtin/subagents/src/agents/agent-serializer.ts +24 -3
  25. package/dist/builtin/subagents/src/agents/agent-types.ts +3 -1
  26. package/dist/builtin/subagents/src/agents/agents.ts +7 -5
  27. package/dist/builtin/subagents/src/agents/frontmatter.ts +67 -22
  28. package/dist/builtin/subagents/src/agents/identity.ts +1 -1
  29. package/dist/builtin/subagents/src/agents/skills-paths.ts +1 -1
  30. package/dist/builtin/subagents/src/agents/skills.ts +64 -6
  31. package/dist/builtin/subagents/src/extension/config.ts +1 -1
  32. package/dist/builtin/subagents/src/extension/control-notices.ts +2 -2
  33. package/dist/builtin/subagents/src/extension/doctor.ts +15 -5
  34. package/dist/builtin/subagents/src/extension/fanout-child.ts +12 -12
  35. package/dist/builtin/subagents/src/extension/index.ts +23 -23
  36. package/dist/builtin/subagents/src/extension/notification-content.ts +1 -1
  37. package/dist/builtin/subagents/src/extension/schemas.ts +1 -1
  38. package/dist/builtin/subagents/src/extension/startup-maintenance.ts +3 -3
  39. package/dist/builtin/subagents/src/intercom/intercom-bridge.ts +3 -3
  40. package/dist/builtin/subagents/src/intercom/result-intercom.ts +1 -1
  41. package/dist/builtin/subagents/src/intercom/supervisor-authorization.ts +1 -1
  42. package/dist/builtin/subagents/src/runs/foreground/completion-notification.ts +2 -2
  43. package/dist/builtin/subagents/src/runs/foreground/execution-detach-reservations.ts +1 -1
  44. package/dist/builtin/subagents/src/runs/foreground/execution-intercom-detach.ts +3 -3
  45. package/dist/builtin/subagents/src/runs/foreground/execution-run-sync.ts +1 -1
  46. package/dist/builtin/subagents/src/runs/foreground/execution-updates.ts +2 -2
  47. package/dist/builtin/subagents/src/runs/foreground/execution-utils.ts +1 -1
  48. package/dist/builtin/subagents/src/runs/foreground/execution.ts +2 -2
  49. package/dist/builtin/subagents/src/runs/foreground/inprocess-run-sync.ts +27 -11
  50. package/dist/builtin/subagents/src/runs/foreground/notify.ts +3 -3
  51. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-context.ts +11 -11
  52. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-input.ts +3 -3
  53. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel-task.ts +15 -14
  54. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +19 -19
  55. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-runtime.ts +2 -2
  56. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +14 -13
  57. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +9 -9
  58. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-types.ts +7 -7
  59. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-worktree.ts +6 -6
  60. package/dist/builtin/subagents/src/runs/foreground/subagent-executor.ts +24 -23
  61. package/dist/builtin/subagents/src/runs/inprocess/control-registry.ts +1 -1
  62. package/dist/builtin/subagents/src/runs/inprocess/control-status.ts +3 -3
  63. package/dist/builtin/subagents/src/runs/inprocess/index.ts +3 -3
  64. package/dist/builtin/subagents/src/runs/inprocess/prompt-behavior.ts +17 -8
  65. package/dist/builtin/subagents/src/runs/inprocess/runner.ts +60 -12
  66. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-api.ts +8 -8
  67. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-control.ts +3 -3
  68. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-core.ts +4 -4
  69. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-projection.ts +4 -4
  70. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-registry.ts +5 -5
  71. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-rendering.ts +3 -3
  72. package/dist/builtin/subagents/src/runs/inprocess/runtime-support/nested-sanitize.ts +3 -3
  73. package/dist/builtin/subagents/src/runs/inprocess.ts +1 -1
  74. package/dist/builtin/subagents/src/runs/shared/long-running-guard.ts +1 -1
  75. package/dist/builtin/subagents/src/runs/shared/mcp-direct-tool-allowlist.ts +1 -1
  76. package/dist/builtin/subagents/src/runs/shared/model-candidate-filter.ts +3 -3
  77. package/dist/builtin/subagents/src/runs/shared/model-fallback.ts +2 -2
  78. package/dist/builtin/subagents/src/runs/shared/parallel-utils.ts +1 -1
  79. package/dist/builtin/subagents/src/runs/shared/single-output.ts +1 -1
  80. package/dist/builtin/subagents/src/runs/shared/subagent-control.ts +1 -1
  81. package/dist/builtin/subagents/src/shared/artifacts.ts +2 -2
  82. package/dist/builtin/subagents/src/shared/event-jsonl-writer.ts +1 -1
  83. package/dist/builtin/subagents/src/shared/fast-mode.ts +1 -1
  84. package/dist/builtin/subagents/src/shared/formatters.ts +2 -2
  85. package/dist/builtin/subagents/src/shared/jsonl-writer.ts +1 -1
  86. package/dist/builtin/subagents/src/shared/model-resolution.ts +1 -1
  87. package/dist/builtin/subagents/src/shared/session-tokens.ts +1 -1
  88. package/dist/builtin/subagents/src/shared/settings.ts +4 -4
  89. package/dist/builtin/subagents/src/shared/status-format.ts +1 -1
  90. package/dist/builtin/subagents/src/shared/types-config.ts +16 -4
  91. package/dist/builtin/subagents/src/shared/types-depth.ts +1 -1
  92. package/dist/builtin/subagents/src/shared/types-nested.ts +1 -1
  93. package/dist/builtin/subagents/src/shared/types-output.ts +1 -1
  94. package/dist/builtin/subagents/src/shared/types-results.ts +1 -1
  95. package/dist/builtin/subagents/src/shared/types-runtime.ts +1 -1
  96. package/dist/builtin/subagents/src/shared/types.ts +6 -6
  97. package/dist/builtin/subagents/src/shared/utils.ts +3 -3
  98. package/dist/builtin/subagents/src/slash/prompt-template-bridge.ts +1 -1
  99. package/dist/builtin/subagents/src/slash/slash-bridge.ts +3 -3
  100. package/dist/builtin/subagents/src/slash/slash-commands.ts +6 -6
  101. package/dist/builtin/subagents/src/slash/slash-live-state.ts +3 -3
  102. package/dist/builtin/subagents/src/tui/render-event-formatting.ts +2 -2
  103. package/dist/builtin/subagents/src/tui/render-layout.ts +1 -1
  104. package/dist/builtin/subagents/src/tui/render-progress.ts +2 -2
  105. package/dist/builtin/subagents/src/tui/render-result-compact.ts +7 -7
  106. package/dist/builtin/subagents/src/tui/render-result.ts +10 -10
  107. package/dist/builtin/subagents/src/tui/render-stable-output.ts +1 -1
  108. package/dist/builtin/subagents/src/tui/render-status-progress.ts +5 -5
  109. package/dist/builtin/subagents/src/tui/render.ts +4 -4
  110. package/dist/builtin/web-access/package.json +2 -2
  111. package/dist/builtin/workflows/CHANGELOG.md +45 -0
  112. package/dist/builtin/workflows/README.md +30 -8
  113. package/dist/builtin/workflows/builtin/adversarial-verification-runner.ts +16 -5
  114. package/dist/builtin/workflows/builtin/generate-and-filter-runner.ts +12 -4
  115. package/dist/builtin/workflows/builtin/goal-models.ts +8 -10
  116. package/dist/builtin/workflows/builtin/index.d.ts +0 -4
  117. package/dist/builtin/workflows/builtin/loop-until-done-runner.ts +4 -2
  118. package/dist/builtin/workflows/builtin/open-claude-design-live-protocol.ts +305 -0
  119. package/dist/builtin/workflows/builtin/open-claude-design-phases.ts +115 -171
  120. package/dist/builtin/workflows/builtin/open-claude-design-runner.ts +9 -25
  121. package/dist/builtin/workflows/builtin/open-claude-design-setup.ts +19 -86
  122. package/dist/builtin/workflows/builtin/open-claude-design-utils.ts +0 -6
  123. package/dist/builtin/workflows/builtin/open-claude-design.d.ts +0 -5
  124. package/dist/builtin/workflows/builtin/open-claude-design.ts +7 -15
  125. package/dist/builtin/workflows/builtin/ralph-models.ts +24 -29
  126. package/dist/builtin/workflows/builtin/tournament-runner.ts +6 -3
  127. package/dist/builtin/workflows/package.json +2 -2
  128. package/dist/builtin/workflows/skills/impeccable/SKILL.md +3 -3
  129. package/dist/builtin/workflows/skills/impeccable/agents/impeccable_asset_producer.toml +25 -31
  130. package/dist/builtin/workflows/skills/impeccable/agents/impeccable_documenter.toml +1 -0
  131. package/dist/builtin/workflows/skills/impeccable/agents/impeccable_finish_reviewer.toml +16 -10
  132. package/dist/builtin/workflows/skills/impeccable/agents/impeccable_manual_edit_applier.toml +2 -2
  133. package/dist/builtin/workflows/skills/impeccable/reference/android.md +6 -0
  134. package/dist/builtin/workflows/skills/impeccable/reference/animate.md +3 -0
  135. package/dist/builtin/workflows/skills/impeccable/reference/bolder.md +3 -1
  136. package/dist/builtin/workflows/skills/impeccable/reference/craft-floor.md +6 -1
  137. package/dist/builtin/workflows/skills/impeccable/reference/critique.md +18 -2
  138. package/dist/builtin/workflows/skills/impeccable/reference/degraded/asset-producer.md +24 -30
  139. package/dist/builtin/workflows/skills/impeccable/reference/degraded/documenter.md +1 -0
  140. package/dist/builtin/workflows/skills/impeccable/reference/degraded/finish-reviewer.md +16 -10
  141. package/dist/builtin/workflows/skills/impeccable/reference/degraded/manual-edit-applier.md +2 -2
  142. package/dist/builtin/workflows/skills/impeccable/reference/distill.md +1 -1
  143. package/dist/builtin/workflows/skills/impeccable/reference/doctor.md +1 -0
  144. package/dist/builtin/workflows/skills/impeccable/reference/document.md +1 -1
  145. package/dist/builtin/workflows/skills/impeccable/reference/extract.md +1 -1
  146. package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +12 -6
  147. package/dist/builtin/workflows/skills/impeccable/reference/init.md +12 -3
  148. package/dist/builtin/workflows/skills/impeccable/reference/ios.md +6 -0
  149. package/dist/builtin/workflows/skills/impeccable/reference/live-setup.md +102 -0
  150. package/dist/builtin/workflows/skills/impeccable/reference/live.md +113 -521
  151. package/dist/builtin/workflows/skills/impeccable/reference/new-work.md +39 -26
  152. package/dist/builtin/workflows/skills/impeccable/reference/overdrive.md +1 -1
  153. package/dist/builtin/workflows/skills/impeccable/reference/polish.md +3 -3
  154. package/dist/builtin/workflows/skills/impeccable/reference/quieter.md +1 -1
  155. package/dist/builtin/workflows/skills/impeccable/reference/visualize.md +25 -11
  156. package/dist/builtin/workflows/skills/impeccable/scripts/concept-seed.mjs +332 -221
  157. package/dist/builtin/workflows/skills/impeccable/scripts/context-signals.mjs +10 -19
  158. package/dist/builtin/workflows/skills/impeccable/scripts/context.mjs +91 -38
  159. package/dist/builtin/workflows/skills/impeccable/scripts/critique-storage.mjs +19 -10
  160. package/dist/builtin/workflows/skills/impeccable/scripts/detector/browser/injected/index.mjs +56 -6
  161. package/dist/builtin/workflows/skills/impeccable/scripts/detector/cli/main.mjs +10 -16
  162. package/dist/builtin/workflows/skills/impeccable/scripts/detector/design-system.mjs +140 -2
  163. package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +1174 -694
  164. package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns.mjs +1 -0
  165. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +5 -1
  166. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +431 -45
  167. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +10 -1
  168. package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +47 -6
  169. package/dist/builtin/workflows/skills/impeccable/scripts/detector/node/file-system.mjs +23 -22
  170. package/dist/builtin/workflows/skills/impeccable/scripts/detector/registry/antipatterns.mjs +0 -10
  171. package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +384 -384
  172. package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/color.mjs +466 -2
  173. package/dist/builtin/workflows/skills/impeccable/scripts/doctor.mjs +2 -0
  174. package/dist/builtin/workflows/skills/impeccable/scripts/embed-prompt.mjs +270 -0
  175. package/dist/builtin/workflows/skills/impeccable/scripts/generate-image.mjs +51 -6
  176. package/dist/builtin/workflows/skills/impeccable/scripts/hook-admin.mjs +70 -10
  177. package/dist/builtin/workflows/skills/impeccable/scripts/hook-lib.mjs +336 -90
  178. package/dist/builtin/workflows/skills/impeccable/scripts/lib/composition-catalog.mjs +38 -3
  179. package/dist/builtin/workflows/skills/impeccable/scripts/lib/concept-catalog.mjs +77 -11
  180. package/dist/builtin/workflows/skills/impeccable/scripts/lib/design-parser.mjs +102 -19
  181. package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-config.mjs +44 -59
  182. package/dist/builtin/workflows/skills/impeccable/scripts/lib/is-generated.mjs +3 -0
  183. package/dist/builtin/workflows/skills/impeccable/scripts/lib/open-system-browser.mjs +57 -0
  184. package/dist/builtin/workflows/skills/impeccable/scripts/lib/roll-selection.mjs +369 -0
  185. package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness-deep.mjs +31 -3
  186. package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness.mjs +73 -2
  187. package/dist/builtin/workflows/skills/impeccable/scripts/live/accept-css.mjs +617 -0
  188. package/dist/builtin/workflows/skills/impeccable/scripts/live/accept-verify.mjs +71 -0
  189. package/dist/builtin/workflows/skills/impeccable/scripts/live/browser-script-parts.mjs +29 -2
  190. package/dist/builtin/workflows/skills/impeccable/scripts/live/event-validation.mjs +54 -7
  191. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/astro.mjs +47 -0
  192. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/detect-utils.mjs +157 -0
  193. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/index.mjs +143 -0
  194. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/journal.mjs +205 -0
  195. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/nextjs.mjs +49 -0
  196. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/nuxt.mjs +170 -0
  197. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/script-src.mjs +26 -0
  198. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/static-html.mjs +26 -0
  199. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/sveltekit.mjs +71 -0
  200. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/tag-strategy.mjs +247 -0
  201. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/tanstack-start.mjs +70 -0
  202. package/dist/builtin/workflows/skills/impeccable/scripts/live/frameworks/vite-generic.mjs +42 -0
  203. package/dist/builtin/workflows/skills/impeccable/scripts/live/instructions.mjs +169 -0
  204. package/dist/builtin/workflows/skills/impeccable/scripts/live/roots.mjs +670 -0
  205. package/dist/builtin/workflows/skills/impeccable/scripts/live/session-store.mjs +232 -35
  206. package/dist/builtin/workflows/skills/impeccable/scripts/live/svelte-ast.mjs +969 -0
  207. package/dist/builtin/workflows/skills/impeccable/scripts/live/svelte-component.mjs +621 -74
  208. package/dist/builtin/workflows/skills/impeccable/scripts/live/sveltekit-adapter.mjs +66 -28
  209. package/dist/builtin/workflows/skills/impeccable/scripts/live/tanstack-adapter.mjs +12 -12
  210. package/dist/builtin/workflows/skills/impeccable/scripts/live/ui-surfaces.mjs +75 -0
  211. package/dist/builtin/workflows/skills/impeccable/scripts/live/vocabulary.mjs +135 -0
  212. package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +23 -37
  213. package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +945 -115
  214. package/dist/builtin/workflows/skills/impeccable/scripts/live-complete.mjs +33 -1
  215. package/dist/builtin/workflows/skills/impeccable/scripts/live-copy-edit-agent.mjs +132 -15
  216. package/dist/builtin/workflows/skills/impeccable/scripts/live-inject.mjs +173 -425
  217. package/dist/builtin/workflows/skills/impeccable/scripts/live-insert.mjs +2 -0
  218. package/dist/builtin/workflows/skills/impeccable/scripts/live-poll.mjs +16 -3
  219. package/dist/builtin/workflows/skills/impeccable/scripts/live-resume.mjs +39 -10
  220. package/dist/builtin/workflows/skills/impeccable/scripts/live-server.mjs +194 -27
  221. package/dist/builtin/workflows/skills/impeccable/scripts/live-status.mjs +10 -4
  222. package/dist/builtin/workflows/skills/impeccable/scripts/live-wrap.mjs +50 -31
  223. package/dist/builtin/workflows/skills/impeccable/scripts/live.mjs +91 -28
  224. package/dist/builtin/workflows/skills/impeccable/scripts/pin.mjs +8 -5
  225. package/dist/builtin/workflows/skills/impeccable/scripts/serve-question.mjs +759 -109
  226. package/dist/builtin/workflows/src/durable/completed-catalog.ts +10 -0
  227. package/dist/builtin/workflows/src/durable/dbos-backend.ts +30 -17
  228. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +14 -0
  229. package/dist/builtin/workflows/src/durable/dbos-lifecycle.ts +60 -57
  230. package/dist/builtin/workflows/src/durable/dbos-process-owner.ts +87 -0
  231. package/dist/builtin/workflows/src/durable/dbos-registration-diagnostics.ts +113 -0
  232. package/dist/builtin/workflows/src/durable/factory.ts +11 -8
  233. package/dist/builtin/workflows/src/durable/tool-failure-checkpoint.ts +5 -0
  234. package/dist/builtin/workflows/src/durable/tool-primitive.ts +186 -20
  235. package/dist/builtin/workflows/src/durable/types.ts +4 -0
  236. package/dist/builtin/workflows/src/engine/run-tool-control-registry.ts +9 -1
  237. package/dist/builtin/workflows/src/extension/adopt-session-run-state.ts +20 -0
  238. package/dist/builtin/workflows/src/extension/background-ui-adapter.ts +9 -30
  239. package/dist/builtin/workflows/src/extension/extension-factory.ts +3 -0
  240. package/dist/builtin/workflows/src/extension/extension-lifecycle.ts +28 -10
  241. package/dist/builtin/workflows/src/extension/index.bundle.mjs +2680 -1418
  242. package/dist/builtin/workflows/src/extension/workflow-prompts.ts +4 -1
  243. package/dist/builtin/workflows/src/extension/workflow-schema.ts +29 -5
  244. package/dist/builtin/workflows/src/extension/workflow-tool-send.ts +32 -1
  245. package/dist/builtin/workflows/src/runs/background/cancellation-registry.ts +10 -1
  246. package/dist/builtin/workflows/src/runs/background/job-tracker.ts +10 -1
  247. package/dist/builtin/workflows/src/runs/foreground/executor-prompt-nodes.ts +16 -11
  248. package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +31 -1
  249. package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +41 -10
  250. package/dist/builtin/workflows/src/runs/foreground/stage-runner-messages.ts +48 -0
  251. package/dist/builtin/workflows/src/runs/foreground/stage-runner-output.ts +4 -1
  252. package/dist/builtin/workflows/src/runs/foreground/stage-runner-structured-output.ts +45 -12
  253. package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +9 -0
  254. package/dist/builtin/workflows/src/shared/authoring-contract-ui.ts +9 -0
  255. package/dist/builtin/workflows/src/shared/graph-store-snapshot.ts +14 -2
  256. package/dist/builtin/workflows/src/shared/prompt-answer.ts +130 -0
  257. package/dist/builtin/workflows/src/shared/session-scoped-singleton.ts +98 -0
  258. package/dist/builtin/workflows/src/shared/stage-ui-broker.ts +9 -1
  259. package/dist/builtin/workflows/src/shared/store-factory.ts +9 -1
  260. package/dist/builtin/workflows/src/shared/store-public-types.ts +2 -1
  261. package/dist/builtin/workflows/src/shared/store-tool-node-methods.ts +7 -0
  262. package/dist/builtin/workflows/src/shared/store-types.ts +18 -1
  263. package/dist/builtin/workflows/src/shared/tool-payload-bounds.ts +576 -0
  264. package/dist/builtin/workflows/src/tui/graph-theme.ts +8 -1
  265. package/dist/builtin/workflows/src/tui/graph-view-constants.ts +11 -0
  266. package/dist/builtin/workflows/src/tui/graph-view-input.ts +100 -5
  267. package/dist/builtin/workflows/src/tui/graph-view-layout.ts +42 -11
  268. package/dist/builtin/workflows/src/tui/graph-view-render-helpers.ts +55 -6
  269. package/dist/builtin/workflows/src/tui/graph-view-render.ts +71 -6
  270. package/dist/builtin/workflows/src/tui/graph-view-state.ts +43 -0
  271. package/dist/builtin/workflows/src/tui/keybindings-adapter.ts +2 -0
  272. package/dist/builtin/workflows/src/tui/node-card.ts +5 -1
  273. package/dist/builtin/workflows/src/tui/stage-chat-view-archive-history.ts +11 -2
  274. package/dist/builtin/workflows/src/tui/stage-chat-view.ts +36 -10
  275. package/dist/builtin/workflows/src/tui/switcher.ts +11 -4
  276. package/dist/builtin/workflows/src/tui/tool-detail.ts +348 -0
  277. package/dist/builtin/workflows/src/tui/workflow-status.ts +5 -2
  278. package/dist/cli/args.d.ts +1 -0
  279. package/dist/cli/args.d.ts.map +1 -1
  280. package/dist/cli/args.js +11 -0
  281. package/dist/cli/args.js.map +1 -1
  282. package/dist/cli/auth-check.d.ts +1 -1
  283. package/dist/cli/auth-check.js.map +1 -1
  284. package/dist/cli/credential-print.d.ts +1 -1
  285. package/dist/cli/credential-print.js.map +1 -1
  286. package/dist/cli/list-models.d.ts +1 -1
  287. package/dist/cli/list-models.js.map +1 -1
  288. package/dist/cli/startup-ui.d.ts +9 -0
  289. package/dist/cli/startup-ui.d.ts.map +1 -1
  290. package/dist/cli/startup-ui.js +7 -1
  291. package/dist/cli/startup-ui.js.map +1 -1
  292. package/dist/core/agent-session-custom-message-commit.js +2 -2
  293. package/dist/core/agent-session-custom-message-commit.js.map +1 -1
  294. package/dist/core/agent-session-export.d.ts +6 -1
  295. package/dist/core/agent-session-export.d.ts.map +1 -1
  296. package/dist/core/agent-session-export.js +6 -3
  297. package/dist/core/agent-session-export.js.map +1 -1
  298. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  299. package/dist/core/agent-session-extension-bindings.js +6 -4
  300. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  301. package/dist/core/agent-session-methods.d.ts +5 -2
  302. package/dist/core/agent-session-methods.d.ts.map +1 -1
  303. package/dist/core/agent-session-methods.js.map +1 -1
  304. package/dist/core/agent-session-prompt.d.ts +12 -1
  305. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  306. package/dist/core/agent-session-prompt.js +31 -10
  307. package/dist/core/agent-session-prompt.js.map +1 -1
  308. package/dist/core/agent-session-runtime-auth.js.map +1 -1
  309. package/dist/core/agent-session-services.d.ts +1 -1
  310. package/dist/core/agent-session-services.js.map +1 -1
  311. package/dist/core/agent-session-skill-block.d.ts +1 -0
  312. package/dist/core/agent-session-skill-block.d.ts.map +1 -1
  313. package/dist/core/agent-session-skill-block.js +18 -2
  314. package/dist/core/agent-session-skill-block.js.map +1 -1
  315. package/dist/core/agent-session-state.d.ts.map +1 -1
  316. package/dist/core/agent-session-state.js +2 -1
  317. package/dist/core/agent-session-state.js.map +1 -1
  318. package/dist/core/agent-session-types.d.ts +2 -1
  319. package/dist/core/agent-session-types.d.ts.map +1 -1
  320. package/dist/core/agent-session-types.js.map +1 -1
  321. package/dist/core/agent-session.d.ts +1 -1
  322. package/dist/core/agent-session.js.map +1 -1
  323. package/dist/core/atomic-guide-command.js +2 -2
  324. package/dist/core/atomic-guide-command.js.map +1 -1
  325. package/dist/core/builtin-packages.d.ts.map +1 -1
  326. package/dist/core/builtin-packages.js +0 -6
  327. package/dist/core/builtin-packages.js.map +1 -1
  328. package/dist/core/cloudflare-gateway-binding.d.ts +11 -0
  329. package/dist/core/cloudflare-gateway-binding.d.ts.map +1 -0
  330. package/dist/core/cloudflare-gateway-binding.js +11 -0
  331. package/dist/core/cloudflare-gateway-binding.js.map +1 -0
  332. package/dist/core/codex-fast-mode-transport.d.ts +12 -0
  333. package/dist/core/codex-fast-mode-transport.d.ts.map +1 -0
  334. package/dist/core/codex-fast-mode-transport.js +130 -0
  335. package/dist/core/codex-fast-mode-transport.js.map +1 -0
  336. package/dist/core/codex-fast-mode.d.ts +20 -6
  337. package/dist/core/codex-fast-mode.d.ts.map +1 -1
  338. package/dist/core/codex-fast-mode.js +111 -3
  339. package/dist/core/codex-fast-mode.js.map +1 -1
  340. package/dist/core/diagnostics.d.ts +4 -0
  341. package/dist/core/diagnostics.d.ts.map +1 -1
  342. package/dist/core/diagnostics.js.map +1 -1
  343. package/dist/core/event-bus.d.ts +12 -0
  344. package/dist/core/event-bus.d.ts.map +1 -1
  345. package/dist/core/event-bus.js +22 -0
  346. package/dist/core/event-bus.js.map +1 -1
  347. package/dist/core/experimental.d.ts +25 -0
  348. package/dist/core/experimental.d.ts.map +1 -1
  349. package/dist/core/experimental.js +24 -0
  350. package/dist/core/experimental.js.map +1 -1
  351. package/dist/core/export-html/template-js/tree-filter-render.js +4 -3
  352. package/dist/core/export-html/template.js +4 -3
  353. package/dist/core/extension-session-state.d.ts +28 -0
  354. package/dist/core/extension-session-state.d.ts.map +1 -0
  355. package/dist/core/extension-session-state.js +55 -0
  356. package/dist/core/extension-session-state.js.map +1 -0
  357. package/dist/core/extensions/api-types.d.ts +6 -0
  358. package/dist/core/extensions/api-types.d.ts.map +1 -1
  359. package/dist/core/extensions/api-types.js.map +1 -1
  360. package/dist/core/extensions/context-types.d.ts +4 -0
  361. package/dist/core/extensions/context-types.d.ts.map +1 -1
  362. package/dist/core/extensions/context-types.js.map +1 -1
  363. package/dist/core/extensions/loader-api.d.ts +1 -1
  364. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  365. package/dist/core/extensions/loader-api.js +16 -10
  366. package/dist/core/extensions/loader-api.js.map +1 -1
  367. package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
  368. package/dist/core/extensions/loader-virtual-modules.js +12 -1
  369. package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
  370. package/dist/core/extensions/runner-context.d.ts +2 -0
  371. package/dist/core/extensions/runner-context.d.ts.map +1 -1
  372. package/dist/core/extensions/runner-context.js +8 -0
  373. package/dist/core/extensions/runner-context.js.map +1 -1
  374. package/dist/core/extensions/runner.d.ts +1 -0
  375. package/dist/core/extensions/runner.d.ts.map +1 -1
  376. package/dist/core/extensions/runner.js +3 -0
  377. package/dist/core/extensions/runner.js.map +1 -1
  378. package/dist/core/extensions/runtime-types.d.ts +3 -0
  379. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  380. package/dist/core/extensions/runtime-types.js.map +1 -1
  381. package/dist/core/http-dispatcher.d.ts.map +1 -1
  382. package/dist/core/http-dispatcher.js +5 -0
  383. package/dist/core/http-dispatcher.js.map +1 -1
  384. package/dist/core/keybindings.d.ts +24 -0
  385. package/dist/core/keybindings.d.ts.map +1 -1
  386. package/dist/core/keybindings.js +6 -0
  387. package/dist/core/keybindings.js.map +1 -1
  388. package/dist/core/model-config.d.ts +5 -0
  389. package/dist/core/model-config.d.ts.map +1 -1
  390. package/dist/core/model-config.js +1 -0
  391. package/dist/core/model-config.js.map +1 -1
  392. package/dist/core/model-registry.d.ts +1 -1
  393. package/dist/core/model-registry.js.map +1 -1
  394. package/dist/core/model-resolver-cli.d.ts +1 -1
  395. package/dist/core/model-resolver-cli.js.map +1 -1
  396. package/dist/core/model-resolver-defaults.js +3 -3
  397. package/dist/core/model-resolver-defaults.js.map +1 -1
  398. package/dist/core/model-resolver-initial.d.ts +1 -1
  399. package/dist/core/model-resolver-initial.js.map +1 -1
  400. package/dist/core/model-resolver-scope.d.ts +1 -1
  401. package/dist/core/model-resolver-scope.js.map +1 -1
  402. package/dist/core/model-runtime.d.ts +54 -0
  403. package/dist/core/model-runtime.d.ts.map +1 -1
  404. package/dist/core/model-runtime.js +96 -13
  405. package/dist/core/model-runtime.js.map +1 -1
  406. package/dist/core/oauth-login.js.map +1 -1
  407. package/dist/core/project-trust.d.ts +10 -0
  408. package/dist/core/project-trust.d.ts.map +1 -1
  409. package/dist/core/project-trust.js +12 -0
  410. package/dist/core/project-trust.js.map +1 -1
  411. package/dist/core/resource-loader-assets.d.ts.map +1 -1
  412. package/dist/core/resource-loader-assets.js +14 -5
  413. package/dist/core/resource-loader-assets.js.map +1 -1
  414. package/dist/core/resource-loader-core.d.ts +3 -0
  415. package/dist/core/resource-loader-core.d.ts.map +1 -1
  416. package/dist/core/resource-loader-core.js +5 -0
  417. package/dist/core/resource-loader-core.js.map +1 -1
  418. package/dist/core/resource-loader-internals.d.ts +2 -0
  419. package/dist/core/resource-loader-internals.d.ts.map +1 -1
  420. package/dist/core/resource-loader-internals.js.map +1 -1
  421. package/dist/core/resource-loader-reload.d.ts.map +1 -1
  422. package/dist/core/resource-loader-reload.js +2 -0
  423. package/dist/core/resource-loader-reload.js.map +1 -1
  424. package/dist/core/resource-loader-types.d.ts +2 -0
  425. package/dist/core/resource-loader-types.d.ts.map +1 -1
  426. package/dist/core/resource-loader-types.js.map +1 -1
  427. package/dist/core/resource-loader.d.ts +2 -0
  428. package/dist/core/resource-loader.d.ts.map +1 -1
  429. package/dist/core/resource-loader.js +1 -0
  430. package/dist/core/resource-loader.js.map +1 -1
  431. package/dist/core/sdk-types.d.ts +7 -6
  432. package/dist/core/sdk-types.d.ts.map +1 -1
  433. package/dist/core/sdk-types.js.map +1 -1
  434. package/dist/core/sdk.d.ts.map +1 -1
  435. package/dist/core/sdk.js +17 -6
  436. package/dist/core/sdk.js.map +1 -1
  437. package/dist/core/session-manager-core.d.ts +7 -1
  438. package/dist/core/session-manager-core.d.ts.map +1 -1
  439. package/dist/core/session-manager-core.js +11 -2
  440. package/dist/core/session-manager-core.js.map +1 -1
  441. package/dist/core/session-manager-entries.d.ts +2 -2
  442. package/dist/core/session-manager-entries.d.ts.map +1 -1
  443. package/dist/core/session-manager-entries.js +6 -4
  444. package/dist/core/session-manager-entries.js.map +1 -1
  445. package/dist/core/session-manager-list.d.ts.map +1 -1
  446. package/dist/core/session-manager-list.js +5 -1
  447. package/dist/core/session-manager-list.js.map +1 -1
  448. package/dist/core/session-manager-types.d.ts +25 -2
  449. package/dist/core/session-manager-types.d.ts.map +1 -1
  450. package/dist/core/session-manager-types.js.map +1 -1
  451. package/dist/core/session-manager.d.ts +1 -1
  452. package/dist/core/session-manager.d.ts.map +1 -1
  453. package/dist/core/session-manager.js.map +1 -1
  454. package/dist/core/settings-manager-basic-accessors.d.ts +1 -0
  455. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  456. package/dist/core/settings-manager-basic-accessors.js +8 -0
  457. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  458. package/dist/core/settings-manager-ui-accessors.d.ts +3 -1
  459. package/dist/core/settings-manager-ui-accessors.d.ts.map +1 -1
  460. package/dist/core/settings-manager-ui-accessors.js +9 -0
  461. package/dist/core/settings-manager-ui-accessors.js.map +1 -1
  462. package/dist/core/settings-manager.d.ts +1 -1
  463. package/dist/core/settings-manager.d.ts.map +1 -1
  464. package/dist/core/settings-manager.js.map +1 -1
  465. package/dist/core/settings-types.d.ts +4 -0
  466. package/dist/core/settings-types.d.ts.map +1 -1
  467. package/dist/core/settings-types.js.map +1 -1
  468. package/dist/core/skill-catalog.d.ts +35 -0
  469. package/dist/core/skill-catalog.d.ts.map +1 -0
  470. package/dist/core/skill-catalog.js +264 -0
  471. package/dist/core/skill-catalog.js.map +1 -0
  472. package/dist/core/skills-async.d.ts.map +1 -1
  473. package/dist/core/skills-async.js +12 -6
  474. package/dist/core/skills-async.js.map +1 -1
  475. package/dist/core/skills.d.ts +2 -0
  476. package/dist/core/skills.d.ts.map +1 -1
  477. package/dist/core/skills.js +8 -5
  478. package/dist/core/skills.js.map +1 -1
  479. package/dist/core/slash-commands.d.ts.map +1 -1
  480. package/dist/core/slash-commands.js +1 -5
  481. package/dist/core/slash-commands.js.map +1 -1
  482. package/dist/core/system-prompt.js +2 -2
  483. package/dist/core/system-prompt.js.map +1 -1
  484. package/dist/core/tools/ask-user-question/ask-user-question.d.ts +4 -2
  485. package/dist/core/tools/ask-user-question/ask-user-question.d.ts.map +1 -1
  486. package/dist/core/tools/ask-user-question/ask-user-question.js +13 -9
  487. package/dist/core/tools/ask-user-question/ask-user-question.js.map +1 -1
  488. package/dist/core/tools/bash.d.ts.map +1 -1
  489. package/dist/core/tools/bash.js +2 -0
  490. package/dist/core/tools/bash.js.map +1 -1
  491. package/dist/core/tools/edit.d.ts.map +1 -1
  492. package/dist/core/tools/edit.js +2 -0
  493. package/dist/core/tools/edit.js.map +1 -1
  494. package/dist/core/tools/find.d.ts.map +1 -1
  495. package/dist/core/tools/find.js +3 -1
  496. package/dist/core/tools/find.js.map +1 -1
  497. package/dist/core/tools/grep.js +1 -1
  498. package/dist/core/tools/grep.js.map +1 -1
  499. package/dist/core/tools/hashline-engine/format.d.ts +2 -0
  500. package/dist/core/tools/hashline-engine/format.d.ts.map +1 -1
  501. package/dist/core/tools/hashline-engine/format.js +4 -2
  502. package/dist/core/tools/hashline-engine/format.js.map +1 -1
  503. package/dist/core/tools/hashline-engine/messages.d.ts +2 -0
  504. package/dist/core/tools/hashline-engine/messages.d.ts.map +1 -1
  505. package/dist/core/tools/hashline-engine/messages.js +4 -2
  506. package/dist/core/tools/hashline-engine/messages.js.map +1 -1
  507. package/dist/core/tools/hashline-engine/parser.d.ts.map +1 -1
  508. package/dist/core/tools/hashline-engine/parser.js +16 -4
  509. package/dist/core/tools/hashline-engine/parser.js.map +1 -1
  510. package/dist/core/tools/hashline-engine/tokenizer.d.ts.map +1 -1
  511. package/dist/core/tools/hashline-engine/tokenizer.js +37 -27
  512. package/dist/core/tools/hashline-engine/tokenizer.js.map +1 -1
  513. package/dist/core/tools/hashline.d.ts.map +1 -1
  514. package/dist/core/tools/hashline.js +8 -2
  515. package/dist/core/tools/hashline.js.map +1 -1
  516. package/dist/core/tools/ls.d.ts.map +1 -1
  517. package/dist/core/tools/ls.js +2 -0
  518. package/dist/core/tools/ls.js.map +1 -1
  519. package/dist/core/tools/read.d.ts.map +1 -1
  520. package/dist/core/tools/read.js +8 -1
  521. package/dist/core/tools/read.js.map +1 -1
  522. package/dist/core/tools/search.d.ts.map +1 -1
  523. package/dist/core/tools/search.js +2 -0
  524. package/dist/core/tools/search.js.map +1 -1
  525. package/dist/core/tools/todos.d.ts +3 -12
  526. package/dist/core/tools/todos.d.ts.map +1 -1
  527. package/dist/core/tools/todos.js +19 -4
  528. package/dist/core/tools/todos.js.map +1 -1
  529. package/dist/core/tools/write.d.ts.map +1 -1
  530. package/dist/core/tools/write.js +2 -0
  531. package/dist/core/tools/write.js.map +1 -1
  532. package/dist/index.d.ts +8 -5
  533. package/dist/index.d.ts.map +1 -1
  534. package/dist/index.js +6 -2
  535. package/dist/index.js.map +1 -1
  536. package/dist/main-runtime-api-key.d.ts +1 -1
  537. package/dist/main-runtime-api-key.js.map +1 -1
  538. package/dist/main-session-options.d.ts +1 -1
  539. package/dist/main-session-options.js.map +1 -1
  540. package/dist/main.d.ts.map +1 -1
  541. package/dist/main.js +10 -2
  542. package/dist/main.js.map +1 -1
  543. package/dist/modes/interactive/components/chat-session-host-rendering.js +1 -1
  544. package/dist/modes/interactive/components/chat-session-host-rendering.js.map +1 -1
  545. package/dist/modes/interactive/components/chat-session-host-state.d.ts +8 -0
  546. package/dist/modes/interactive/components/chat-session-host-state.d.ts.map +1 -1
  547. package/dist/modes/interactive/components/chat-session-host-state.js +8 -0
  548. package/dist/modes/interactive/components/chat-session-host-state.js.map +1 -1
  549. package/dist/modes/interactive/components/chat-session-host.d.ts +26 -0
  550. package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
  551. package/dist/modes/interactive/components/chat-session-host.js +38 -0
  552. package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
  553. package/dist/modes/interactive/components/chat-transcript.d.ts +37 -0
  554. package/dist/modes/interactive/components/chat-transcript.d.ts.map +1 -1
  555. package/dist/modes/interactive/components/chat-transcript.js +54 -1
  556. package/dist/modes/interactive/components/chat-transcript.js.map +1 -1
  557. package/dist/modes/interactive/components/fast-mode-selector.js +1 -1
  558. package/dist/modes/interactive/components/fast-mode-selector.js.map +1 -1
  559. package/dist/modes/interactive/components/model-selector.d.ts +1 -1
  560. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  561. package/dist/modes/interactive/components/model-selector.js +2 -1
  562. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  563. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  564. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  565. package/dist/modes/interactive/components/session-selector-search.d.ts +4 -0
  566. package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
  567. package/dist/modes/interactive/components/session-selector-search.js +4 -0
  568. package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
  569. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  570. package/dist/modes/interactive/components/settings-selector-handlers.js +3 -0
  571. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  572. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  573. package/dist/modes/interactive/components/settings-selector-items.js +7 -0
  574. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  575. package/dist/modes/interactive/components/settings-selector-types.d.ts +3 -1
  576. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  577. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  578. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  579. package/dist/modes/interactive/components/tool-execution.js +12 -1
  580. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  581. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  582. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  583. package/dist/modes/interactive/interactive-autocomplete.js +5 -4
  584. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  585. package/dist/modes/interactive/interactive-bash-compact.d.ts.map +1 -1
  586. package/dist/modes/interactive/interactive-bash-compact.js +2 -2
  587. package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
  588. package/dist/modes/interactive/interactive-extension-custom-ui.js +2 -2
  589. package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
  590. package/dist/modes/interactive/interactive-mode-base.d.ts +38 -3
  591. package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
  592. package/dist/modes/interactive/interactive-mode-base.js +75 -10
  593. package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
  594. package/dist/modes/interactive/interactive-mode-surface.d.ts +7 -1
  595. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  596. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  597. package/dist/modes/interactive/interactive-mode-types.d.ts +2 -0
  598. package/dist/modes/interactive/interactive-mode-types.d.ts.map +1 -1
  599. package/dist/modes/interactive/interactive-mode-types.js.map +1 -1
  600. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts +8 -1
  601. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts.map +1 -1
  602. package/dist/modes/interactive/interactive-model-catalog-startup.js +13 -3
  603. package/dist/modes/interactive/interactive-model-catalog-startup.js.map +1 -1
  604. package/dist/modes/interactive/interactive-model-routing.js +3 -4
  605. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  606. package/dist/modes/interactive/interactive-render-chat.js +6 -0
  607. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  608. package/dist/modes/interactive/interactive-resource-disclosure.js +2 -2
  609. package/dist/modes/interactive/interactive-resource-disclosure.js.map +1 -1
  610. package/dist/modes/interactive/interactive-selectors.js +7 -3
  611. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  612. package/dist/modes/interactive/interactive-session-runtime.js +7 -1
  613. package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
  614. package/dist/modes/interactive/interactive-slash-commands.js +2 -2
  615. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  616. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  617. package/dist/modes/interactive/interactive-startup.js +34 -9
  618. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  619. package/dist/modes/interactive/interactive-tui.d.ts +18 -1
  620. package/dist/modes/interactive/interactive-tui.d.ts.map +1 -1
  621. package/dist/modes/interactive/interactive-tui.js +126 -38
  622. package/dist/modes/interactive/interactive-tui.js.map +1 -1
  623. package/dist/modes/interactive/model-catalog-refresh.d.ts +17 -0
  624. package/dist/modes/interactive/model-catalog-refresh.d.ts.map +1 -0
  625. package/dist/modes/interactive/model-catalog-refresh.js +84 -0
  626. package/dist/modes/interactive/model-catalog-refresh.js.map +1 -0
  627. package/dist/modes/interactive/theme/dark.json +2 -0
  628. package/dist/modes/interactive/theme/light.json +2 -0
  629. package/dist/modes/interactive/theme/theme-class.d.ts +12 -3
  630. package/dist/modes/interactive/theme/theme-class.d.ts.map +1 -1
  631. package/dist/modes/interactive/theme/theme-class.js +6 -1
  632. package/dist/modes/interactive/theme/theme-class.js.map +1 -1
  633. package/dist/modes/interactive/theme/theme-controller.d.ts +10 -2
  634. package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
  635. package/dist/modes/interactive/theme/theme-controller.js +23 -10
  636. package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
  637. package/dist/modes/interactive/theme/theme-loading.d.ts.map +1 -1
  638. package/dist/modes/interactive/theme/theme-loading.js +1 -0
  639. package/dist/modes/interactive/theme/theme-loading.js.map +1 -1
  640. package/dist/modes/interactive/theme/theme-schema.d.ts +8 -0
  641. package/dist/modes/interactive/theme/theme-schema.d.ts.map +1 -1
  642. package/dist/modes/interactive/theme/theme-schema.js +3 -1
  643. package/dist/modes/interactive/theme/theme-schema.js.map +1 -1
  644. package/dist/modes/interactive/theme/theme-schema.json +9 -1
  645. package/dist/modes/json-event.d.ts +6 -1
  646. package/dist/modes/json-event.d.ts.map +1 -1
  647. package/dist/modes/json-event.js +17 -2
  648. package/dist/modes/json-event.js.map +1 -1
  649. package/dist/modes/rpc/rpc-client.js.map +1 -1
  650. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  651. package/dist/modes/rpc/rpc-command-handler.js +5 -4
  652. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  653. package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
  654. package/dist/modes/rpc/rpc-responses.js.map +1 -1
  655. package/dist/modes/rpc/rpc-types.d.ts +1 -1
  656. package/dist/modes/rpc/rpc-types.js.map +1 -1
  657. package/dist/package-manager-cli.js.map +1 -1
  658. package/dist/server/create-harness.d.ts.map +1 -1
  659. package/dist/server/create-harness.js +11 -0
  660. package/dist/server/create-harness.js.map +1 -1
  661. package/dist/utils/abort.d.ts +9 -0
  662. package/dist/utils/abort.d.ts.map +1 -0
  663. package/dist/utils/abort.js +19 -0
  664. package/dist/utils/abort.js.map +1 -0
  665. package/dist/utils/tools-manager.d.ts +16 -1
  666. package/dist/utils/tools-manager.d.ts.map +1 -1
  667. package/dist/utils/tools-manager.js +19 -19
  668. package/dist/utils/tools-manager.js.map +1 -1
  669. package/docs/custom-provider.md +9 -8
  670. package/docs/development.md +0 -1
  671. package/docs/docs.json +0 -1
  672. package/docs/environment-variables.md +3 -0
  673. package/docs/extensions.md +73 -2
  674. package/docs/json.md +3 -1
  675. package/docs/keybindings.md +7 -3
  676. package/docs/models/artificial-analysis-index.md +2 -2
  677. package/docs/models/model-selection.md +32 -23
  678. package/docs/models/pareto-efficiency.md +25 -24
  679. package/docs/providers.md +95 -2
  680. package/docs/quickstart.md +4 -2
  681. package/docs/rpc.md +21 -7
  682. package/docs/sdk.md +26 -1
  683. package/docs/session-format.md +5 -2
  684. package/docs/settings.md +34 -3
  685. package/docs/skills.md +16 -1
  686. package/docs/terminal-setup.md +15 -2
  687. package/docs/themes.md +22 -4
  688. package/docs/tools.md +3 -1
  689. package/docs/tui.md +2 -0
  690. package/docs/usage.md +5 -4
  691. package/docs/workflows.md +62 -19
  692. package/npm-shrinkwrap.json +211 -232
  693. package/package.json +8 -8
  694. package/dist/builtin/i-have-adhd/CHANGELOG.md +0 -30
  695. package/dist/builtin/i-have-adhd/LICENSE +0 -21
  696. package/dist/builtin/i-have-adhd/README.md +0 -18
  697. package/dist/builtin/i-have-adhd/index.ts +0 -238
  698. package/dist/builtin/i-have-adhd/package.json +0 -56
  699. package/dist/builtin/i-have-adhd/skills/i-have-adhd/SKILL.md +0 -140
  700. package/dist/builtin/workflows/builtin/open-claude-design-feedback.ts +0 -359
  701. package/dist/builtin/workflows/skills/impeccable/scripts/live/ui-core.mjs +0 -180
  702. package/docs/i-have-adhd.md +0 -36
@@ -19,6 +19,7 @@ import { runCallback } from "@bastani/atomic";
19
19
  import { sleepOrAbort } from "../runs/shared/retry.js";
20
20
  import { flattenTruncatedString } from "../shared/flat-string.js";
21
21
  import type { ToolNodeSnapshot } from "../shared/store-types.js";
22
+ import { boundedToolPayloadRecord, boundedToolText } from "../shared/tool-payload-bounds.js";
22
23
  import type {
23
24
  WorkflowSerializableValue,
24
25
  WorkflowToolContext,
@@ -109,12 +110,41 @@ export interface CreateToolPrimitiveInput {
109
110
  readonly onNodeRunning?: (nodeId: string, startedAt: number) => void;
110
111
  readonly onNodeEnd?: (
111
112
  nodeId: string,
112
- update: Pick<ToolNodeSnapshot, "status"> & Partial<Pick<ToolNodeSnapshot, "endedAt" | "resultSummary" | "error">>,
113
+ update: Pick<ToolNodeSnapshot, "status"> &
114
+ Partial<Pick<ToolNodeSnapshot, "endedAt" | "durationMs" | "result" | "resultSummary" | "error">>,
113
115
  ) => void;
114
116
  readonly onNodeSettle?: (nodeId: string) => void;
115
117
  readonly runTopology?: DurableStageRunTopology;
116
118
  }
117
119
 
120
+ function cloneToolArgs(
121
+ args: Readonly<Record<string, WorkflowSerializableValue>>,
122
+ ): Readonly<Record<string, WorkflowSerializableValue>> {
123
+ // Bounded, hostile-input safe, and always a plain object: author args may be
124
+ // cyclic, may throw on property access, may be arbitrarily large, and may
125
+ // carry a `toJSON` that would otherwise collapse the record to a scalar in a
126
+ // durable checkpoint. `argsHash` still hashes the raw args, so cache identity
127
+ // is unaffected by this inspection copy.
128
+ return boundedToolPayloadRecord(args);
129
+ }
130
+
131
+ /**
132
+ * Capture the callback's own source for read-only inspection.
133
+ *
134
+ * `Function.prototype.toString` reads text the runtime already holds: it never
135
+ * invokes the callback, never touches the filesystem, and never reaches any
136
+ * data beyond the function passed to this call. A host that refuses the read
137
+ * simply yields no source row.
138
+ */
139
+ function captureCallbackSource(fn: unknown): string | undefined {
140
+ if (typeof fn !== "function") return undefined;
141
+ try {
142
+ return boundedToolText(Function.prototype.toString.call(fn));
143
+ } catch {
144
+ return undefined;
145
+ }
146
+ }
147
+
118
148
  /**
119
149
  * Create the `ctx.tool` primitive wired to a durable backend.
120
150
  */
@@ -155,7 +185,7 @@ export function createToolPrimitive(input: CreateToolPrimitiveInput): WorkflowTo
155
185
  noteCancelled: () => admission?.noteCancelled?.(),
156
186
  releaseAdmission: () => lease?.release(),
157
187
  };
158
- void executeToolInvocation(input, ordinals, name, args, fn, options, control)
188
+ void executeToolInvocation(input, ordinals, name, args, fn, options, control, captureCallbackSource(fn))
159
189
  // Backstop for a throw before either explicit release point; the lease
160
190
  // release itself is idempotent.
161
191
  .finally(() => lease?.release())
@@ -172,6 +202,7 @@ async function executeToolInvocation<T extends WorkflowSerializableValue>(
172
202
  fn: (toolCtx: WorkflowToolContext) => Promise<T>,
173
203
  options: WorkflowToolOptions | undefined,
174
204
  control: ToolInvocationAdmissionControl,
205
+ source: string | undefined,
175
206
  ): Promise<WorkflowToolInvocationResult<T>> {
176
207
  input.throwIfCancelled();
177
208
  if (
@@ -181,6 +212,9 @@ async function executeToolInvocation<T extends WorkflowSerializableValue>(
181
212
  ) {
182
213
  throw new RangeError("atomic-workflows: ctx.tool maxAttempts must be a positive integer");
183
214
  }
215
+ if (options?.timeoutMs !== undefined && (!Number.isFinite(options.timeoutMs) || options.timeoutMs <= 0)) {
216
+ throw new RangeError("atomic-workflows: ctx.tool timeoutMs must be a positive finite number");
217
+ }
184
218
  const returnFailure = options?.failureMode === "return";
185
219
  const identityMode = returnFailure ? { failureMode: "return" as const } : {};
186
220
  const callKey = durableHash({ name, args, ...identityMode });
@@ -189,10 +223,13 @@ async function executeToolInvocation<T extends WorkflowSerializableValue>(
189
223
  const argsHash = durableHash({ name, args, ordinal, ...identityMode });
190
224
 
191
225
  const cached = input.backend.getToolCheckpoint(input.workflowId, argsHash);
226
+ const capturedSource = cached?.source ?? source;
192
227
  const node: ToolNodeSnapshot = {
193
228
  kind: "tool",
194
229
  id: cached?.topology?.nodeId ?? `tool:${argsHash}`,
195
230
  name,
231
+ args: cloneToolArgs(cached?.args ?? args),
232
+ ...(capturedSource !== undefined ? { source: capturedSource } : {}),
196
233
  argsHash,
197
234
  ordinal: cached?.topology?.ordinal ?? ordinal,
198
235
  parentIds: Object.freeze(cached?.topology?.parentIds ?? []),
@@ -223,6 +260,8 @@ async function executeToolInvocation<T extends WorkflowSerializableValue>(
223
260
  input.onNodeEnd?.(node.id, {
224
261
  status: failed ? "failed" : "cached",
225
262
  endedAt,
263
+ ...(node.startedAt !== undefined ? { durationMs: Math.max(0, endedAt - node.startedAt) } : {}),
264
+ result: output,
226
265
  ...(failed && returnedOutcome?.ok === false
227
266
  ? { error: returnedOutcome.error.message }
228
267
  : { resultSummary: summarizeToolResult(output) }),
@@ -233,9 +272,11 @@ async function executeToolInvocation<T extends WorkflowSerializableValue>(
233
272
  const cancelled = input.signal?.aborted === true;
234
273
  if (cancelled) control.noteCancelled();
235
274
  else input.onFailureObserved?.(error, node.id);
275
+ const endedAt = Date.now();
236
276
  input.onNodeEnd?.(node.id, {
237
277
  status: cancelled ? "cancelled" : "failed",
238
- endedAt: Date.now(),
278
+ endedAt,
279
+ ...(node.startedAt !== undefined ? { durationMs: Math.max(0, endedAt - node.startedAt) } : {}),
239
280
  error: error instanceof Error ? error.message : String(error),
240
281
  });
241
282
  input.onNodeSettle?.(node.id);
@@ -246,6 +287,8 @@ async function executeToolInvocation<T extends WorkflowSerializableValue>(
246
287
  input,
247
288
  node,
248
289
  name,
290
+ args: node.args ?? args,
291
+ ...(capturedSource !== undefined ? { source: capturedSource } : {}),
249
292
  argsHash,
250
293
  ordinal,
251
294
  fn,
@@ -259,6 +302,8 @@ interface LiveToolInvocation<T extends WorkflowSerializableValue> {
259
302
  readonly input: CreateToolPrimitiveInput;
260
303
  readonly node: ToolNodeSnapshot;
261
304
  readonly name: string;
305
+ readonly args: Readonly<Record<string, WorkflowSerializableValue>>;
306
+ readonly source?: string;
262
307
  readonly argsHash: string;
263
308
  readonly ordinal: number;
264
309
  readonly fn: (toolCtx: WorkflowToolContext) => Promise<T>;
@@ -266,6 +311,86 @@ interface LiveToolInvocation<T extends WorkflowSerializableValue> {
266
311
  readonly control: ToolInvocationAdmissionControl;
267
312
  readonly returnFailure: boolean;
268
313
  }
314
+ class WorkflowToolTimeoutError extends Error {
315
+ constructor(toolName: string, timeoutMs: number) {
316
+ super(`atomic-workflows: ctx.tool ${toolName} timed out after ${timeoutMs}ms`);
317
+ this.name = "TimeoutError";
318
+ }
319
+ }
320
+
321
+ const MAX_HOST_TIMER_MS = 2_147_483_647;
322
+
323
+ /** Schedule a finite deadline without triggering host timer overflow clamping. */
324
+ function scheduleDeadline(callback: () => void, timeoutMs: number): () => void {
325
+ let remainingMs = timeoutMs;
326
+ let timer: ReturnType<typeof setTimeout> | undefined;
327
+ const scheduleNextChunk = () => {
328
+ const chunkMs = Math.min(remainingMs, MAX_HOST_TIMER_MS);
329
+ timer = setTimeout(() => {
330
+ remainingMs -= chunkMs;
331
+ if (remainingMs > 0) scheduleNextChunk();
332
+ else callback();
333
+ }, chunkMs);
334
+ };
335
+ scheduleNextChunk();
336
+ return () => {
337
+ if (timer !== undefined) clearTimeout(timer);
338
+ };
339
+ }
340
+
341
+ type ToolCallbackAttemptResult<T> =
342
+ | { readonly kind: "value"; readonly value: T }
343
+ | { readonly kind: "error"; readonly error: unknown };
344
+
345
+ function abortReason(signal: AbortSignal): Error {
346
+ return signal.reason instanceof Error ? signal.reason : new Error("atomic-workflows: workflow cancelled");
347
+ }
348
+
349
+ /** Run one callback attempt with a fresh signal and deadline. */
350
+ async function executeTimedToolAttempt<T extends WorkflowSerializableValue>(
351
+ toolName: string,
352
+ runId: string,
353
+ fn: (toolCtx: WorkflowToolContext) => Promise<T>,
354
+ baseSignal: AbortSignal,
355
+ timeoutMs: number,
356
+ ): Promise<T> {
357
+ const timeoutController = new AbortController();
358
+ const attemptSignal = AbortSignal.any([baseSignal, timeoutController.signal]);
359
+ return runCallback({ kind: "workflow.ctx_tool", name: toolName, runId }, async () => {
360
+ const callbackResult: Promise<ToolCallbackAttemptResult<T>> = Promise.resolve()
361
+ .then(() => fn({ signal: attemptSignal }))
362
+ .then(
363
+ (value) => ({ kind: "value" as const, value }),
364
+ (error: unknown) => ({ kind: "error" as const, error }),
365
+ );
366
+ let cancelDeadline: (() => void) | undefined;
367
+ let onAbort: (() => void) | undefined;
368
+ let timeoutError: WorkflowToolTimeoutError | undefined;
369
+ const timeoutResult = new Promise<never>((_, reject) => {
370
+ cancelDeadline = scheduleDeadline(() => {
371
+ if (baseSignal.aborted) return;
372
+ timeoutError = new WorkflowToolTimeoutError(toolName, timeoutMs);
373
+ timeoutController.abort(timeoutError);
374
+ reject(timeoutError);
375
+ }, timeoutMs);
376
+ });
377
+ const cancellationResult = new Promise<never>((_, reject) => {
378
+ onAbort = () => {
379
+ if (timeoutError === undefined) reject(abortReason(baseSignal));
380
+ };
381
+ if (baseSignal.aborted) onAbort();
382
+ else baseSignal.addEventListener("abort", onAbort, { once: true });
383
+ });
384
+ try {
385
+ const result = await Promise.race([callbackResult, timeoutResult, cancellationResult]);
386
+ if (result.kind === "value") return result.value;
387
+ throw result.error;
388
+ } finally {
389
+ cancelDeadline?.();
390
+ if (onAbort !== undefined) baseSignal.removeEventListener("abort", onAbort);
391
+ }
392
+ });
393
+ }
269
394
 
270
395
  /**
271
396
  * Execute one uncached tool call under its own abort controller.
@@ -278,7 +403,7 @@ interface LiveToolInvocation<T extends WorkflowSerializableValue> {
278
403
  async function executeLiveToolInvocation<T extends WorkflowSerializableValue>(
279
404
  live: LiveToolInvocation<T>,
280
405
  ): Promise<WorkflowToolInvocationResult<T>> {
281
- const { input, node, name, argsHash, ordinal, fn, options, control, returnFailure } = live;
406
+ const { input, node, name, args, source, argsHash, ordinal, fn, options, control, returnFailure } = live;
282
407
  const nodeController = new AbortController();
283
408
  const toolSignal =
284
409
  input.signal === undefined ? nodeController.signal : AbortSignal.any([input.signal, nodeController.signal]);
@@ -302,9 +427,13 @@ async function executeLiveToolInvocation<T extends WorkflowSerializableValue>(
302
427
  const result = await executeWithRetries(
303
428
  () => {
304
429
  attempts += 1;
305
- return runCallback({ kind: "workflow.ctx_tool", name, runId: input.workflowId }, () =>
306
- fn({ signal: toolSignal }),
307
- ).catch((error: unknown) => {
430
+ const callback =
431
+ options?.timeoutMs === undefined
432
+ ? runCallback({ kind: "workflow.ctx_tool", name, runId: input.workflowId }, () =>
433
+ fn({ signal: toolSignal }),
434
+ )
435
+ : executeTimedToolAttempt(name, input.workflowId, fn, toolSignal, options.timeoutMs);
436
+ return callback.catch((error: unknown) => {
308
437
  callbackError = error;
309
438
  throw error;
310
439
  });
@@ -328,6 +457,8 @@ async function executeLiveToolInvocation<T extends WorkflowSerializableValue>(
328
457
  workflowId: input.workflowId,
329
458
  checkpointId: `tool:${argsHash}`,
330
459
  name,
460
+ args: cloneToolArgs(args),
461
+ ...(source !== undefined ? { source } : {}),
331
462
  argsHash,
332
463
  output,
333
464
  ...(returnFailure ? { outcomeKind: "return_success" as const } : {}),
@@ -347,12 +478,15 @@ async function executeLiveToolInvocation<T extends WorkflowSerializableValue>(
347
478
  input.onNodeEnd?.(node.id, {
348
479
  status: "completed",
349
480
  endedAt: completedAt,
481
+ durationMs: Math.max(0, completedAt - startedAt),
482
+ result: output,
350
483
  resultSummary: summarizeToolResult(output),
351
484
  });
352
485
  input.onNodeSettle?.(node.id);
353
486
  return output;
354
487
  } catch (error) {
355
- const cancellation = invocationCancellation(input, toolSignal);
488
+ const timeoutFailure = error instanceof WorkflowToolTimeoutError;
489
+ const cancellation = timeoutFailure ? undefined : invocationCancellation(input, toolSignal);
356
490
  if (cancellation !== undefined) {
357
491
  control.noteCancelled();
358
492
  // A cancelled call never writes a replayable `tool:` checkpoint and never
@@ -366,9 +500,11 @@ async function executeLiveToolInvocation<T extends WorkflowSerializableValue>(
366
500
  if (returnFailure) {
367
501
  await recordCancelledToolInspection(live, startedAt, cancellation, attempts);
368
502
  }
503
+ const endedAt = Date.now();
369
504
  input.onNodeEnd?.(node.id, {
370
505
  status: "cancelled",
371
- endedAt: Date.now(),
506
+ endedAt,
507
+ durationMs: Math.max(0, endedAt - startedAt),
372
508
  error: cancellation.message,
373
509
  });
374
510
  input.onNodeSettle?.(node.id);
@@ -380,11 +516,16 @@ async function executeLiveToolInvocation<T extends WorkflowSerializableValue>(
380
516
  const failure = await recordThrowingToolFailure(
381
517
  input,
382
518
  node,
383
- { name, argsHash, ordinal, startedAt },
519
+ { name, args, ...(source !== undefined ? { source } : {}), argsHash, ordinal, startedAt },
384
520
  callbackFailure,
385
521
  attempts,
386
522
  );
387
- input.onNodeEnd?.(node.id, { status: "failed", endedAt: failure.failedAt, error: failure.message });
523
+ input.onNodeEnd?.(node.id, {
524
+ status: "failed",
525
+ endedAt: failure.failedAt,
526
+ durationMs: Math.max(0, failure.failedAt - startedAt),
527
+ error: failure.message,
528
+ });
388
529
  input.onNodeSettle?.(node.id);
389
530
  throw callbackFailure;
390
531
  }
@@ -396,6 +537,8 @@ async function executeLiveToolInvocation<T extends WorkflowSerializableValue>(
396
537
  workflowId: input.workflowId,
397
538
  checkpointId: `tool:${argsHash}`,
398
539
  name,
540
+ args: cloneToolArgs(args),
541
+ ...(source !== undefined ? { source } : {}),
399
542
  argsHash,
400
543
  output: outcome,
401
544
  outcomeKind: "return_failure",
@@ -415,30 +558,44 @@ async function executeLiveToolInvocation<T extends WorkflowSerializableValue>(
415
558
  await recordCheckpointDurably(input.backend, checkpoint);
416
559
  } catch (persistenceError) {
417
560
  input.onFailureObserved?.(persistenceError, node.id);
561
+ const endedAt = Date.now();
418
562
  input.onNodeEnd?.(node.id, {
419
563
  status: "failed",
420
- endedAt: Date.now(),
564
+ endedAt,
565
+ durationMs: Math.max(0, endedAt - startedAt),
421
566
  error: persistenceError instanceof Error ? persistenceError.message : String(persistenceError),
422
567
  });
423
568
  input.onNodeSettle?.(node.id);
424
569
  throw persistenceError;
425
570
  }
426
- input.onNodeEnd?.(node.id, { status: "failed", endedAt: completedAt, error: outcome.error.message });
571
+ input.onNodeEnd?.(node.id, {
572
+ status: "failed",
573
+ endedAt: completedAt,
574
+ durationMs: Math.max(0, completedAt - startedAt),
575
+ result: outcome,
576
+ error: outcome.error.message,
577
+ });
427
578
  input.onNodeSettle?.(node.id);
428
- throwIfInvocationCancelled(input, toolSignal);
579
+ if (!timeoutFailure) throwIfInvocationCancelled(input, toolSignal);
429
580
  return outcome;
430
581
  }
431
- input.onFailureObserved?.(error, node.id);
582
+ const reportedFailure = timeoutFailure ? callbackError : error;
583
+ input.onFailureObserved?.(reportedFailure, node.id);
432
584
  const failure = await recordThrowingToolFailure(
433
585
  input,
434
586
  node,
435
- { name, argsHash, ordinal, startedAt },
436
- error,
587
+ { name, args, ...(source !== undefined ? { source } : {}), argsHash, ordinal, startedAt },
588
+ reportedFailure,
437
589
  attempts,
438
590
  );
439
- input.onNodeEnd?.(node.id, { status: "failed", endedAt: failure.failedAt, error: failure.message });
591
+ input.onNodeEnd?.(node.id, {
592
+ status: "failed",
593
+ endedAt: failure.failedAt,
594
+ durationMs: Math.max(0, failure.failedAt - startedAt),
595
+ error: failure.message,
596
+ });
440
597
  input.onNodeSettle?.(node.id);
441
- throw error;
598
+ throw reportedFailure;
442
599
  } finally {
443
600
  settlement.resolve();
444
601
  unregisterControl?.();
@@ -464,7 +621,14 @@ async function recordCancelledToolInspection<T extends WorkflowSerializableValue
464
621
  await recordThrowingToolFailure(
465
622
  live.input,
466
623
  live.node,
467
- { name: live.name, argsHash: live.argsHash, ordinal: live.ordinal, startedAt },
624
+ {
625
+ name: live.name,
626
+ args: live.args,
627
+ ...(live.source !== undefined ? { source: live.source } : {}),
628
+ argsHash: live.argsHash,
629
+ ordinal: live.ordinal,
630
+ startedAt,
631
+ },
468
632
  cancellation,
469
633
  attempts,
470
634
  );
@@ -606,6 +770,8 @@ async function recordReplayedToolTopology(
606
770
  workflowId: input.workflowId,
607
771
  checkpointId: `tool-replay-meta:${durableHash({ argsHash, topology })}`,
608
772
  name: node.name,
773
+ ...(cached.args !== undefined ? { args: cached.args } : {}),
774
+ ...(cached.source !== undefined ? { source: cached.source } : {}),
609
775
  argsHash,
610
776
  output: cached.output,
611
777
  ...(cached.outcomeKind !== undefined ? { outcomeKind: cached.outcomeKind } : {}),
@@ -112,6 +112,10 @@ export interface DurableToolCheckpoint {
112
112
  readonly checkpointId: string;
113
113
  /** Tool name for display/debugging. */
114
114
  readonly name: string;
115
+ /** Exact invocation arguments retained for read-only inspection. */
116
+ readonly args?: Readonly<Record<string, WorkflowSerializableValue>>;
117
+ /** Callback source captured at registration for read-only inspection. */
118
+ readonly source?: string;
115
119
  /** Deterministic hash of the tool arguments for idempotency. */
116
120
  readonly argsHash: string;
117
121
  /** Cached tool output (JSON-serializable). */
@@ -13,6 +13,7 @@
13
13
  * cross-ref: issue #2078; src/runs/foreground/stage-control-registry.ts
14
14
  */
15
15
 
16
+ import { createSessionScopedSingleton } from "../shared/session-scoped-singleton.js";
16
17
  import type { WorkflowToolNodeIdentity } from "../shared/types.js";
17
18
  import type { ToolAdmissionBoundary } from "./run-tool-admission-boundary.js";
18
19
  import { WorkflowToolAbortError, type WorkflowToolAbortScope } from "./workflow-tool-abort.js";
@@ -130,7 +131,14 @@ export function createToolControlRegistry(): ToolControlRegistry {
130
131
  * through `RunOpts.toolControlRegistry`; the singleton is the default consumer
131
132
  * surface used by the extension factory.
132
133
  */
133
- export const toolControlRegistry: ToolControlRegistry = createToolControlRegistry();
134
+ const SESSION_KEY = "workflows:tool-control:v1";
135
+ const singleton = createSessionScopedSingleton(SESSION_KEY, createToolControlRegistry);
136
+
137
+ export const toolControlRegistry: ToolControlRegistry = singleton.facade;
138
+
139
+ export function adoptToolControlRegistry(scope: object): ToolControlRegistry {
140
+ return singleton.adopt(scope);
141
+ }
134
142
 
135
143
  /**
136
144
  * Await settlement of aborted tool handles up to `timeoutMs` and report the
@@ -0,0 +1,20 @@
1
+ import { adoptToolControlRegistry } from "../engine/run-tool-control-registry.js";
2
+ import { adoptCancellationRegistry } from "../runs/background/cancellation-registry.js";
3
+ import { adoptJobTracker } from "../runs/background/job-tracker.js";
4
+ import { adoptStageControlRegistry } from "../runs/foreground/stage-control-registry.js";
5
+ import { adoptStageUiBroker } from "../shared/stage-ui-broker.js";
6
+ import { adoptStore } from "../shared/store-factory.js";
7
+
8
+ /**
9
+ * Re-bind every run-scoped singleton to host session state for `scope`.
10
+ * No-op when the host has not supplied a scope (unit tests, embedded SDK).
11
+ */
12
+ export function adoptWorkflowSessionRunState(scope: object | undefined): void {
13
+ if (scope === undefined) return;
14
+ adoptStore(scope);
15
+ adoptStageControlRegistry(scope);
16
+ adoptCancellationRegistry(scope);
17
+ adoptToolControlRegistry(scope);
18
+ adoptJobTracker(scope);
19
+ adoptStageUiBroker(scope);
20
+ }
@@ -29,6 +29,7 @@
29
29
  * src/tui/graph-view.ts pending-prompt rendering + key handling
30
30
  */
31
31
 
32
+ import { requirePrimitivePromptAnswer } from "../shared/prompt-answer.js";
32
33
  import type { Store } from "../shared/store.js";
33
34
  import type { PendingPrompt, PromptKind } from "../shared/store-types.js";
34
35
  import type { WorkflowUIAdapter } from "../shared/types.js";
@@ -128,48 +129,26 @@ function fallbackForKind(descriptor: PromptDescriptor): unknown {
128
129
  export function buildBackgroundUIAdapter(store: Store, runId: string, signal?: AbortSignal): WorkflowUIAdapter {
129
130
  return {
130
131
  async input(prompt: string): Promise<string> {
131
- const response = await ask(store, runId, { kind: "input", message: prompt }, signal);
132
- return typeof response === "string" ? response : String(response ?? "");
132
+ const descriptor = { kind: "input" as const, message: prompt };
133
+ return requirePrimitivePromptAnswer(descriptor, await ask(store, runId, descriptor, signal)) as string;
133
134
  },
134
135
 
135
136
  async confirm(message: string): Promise<boolean> {
136
- const response = await ask(store, runId, { kind: "confirm", message }, signal);
137
- return response === true;
137
+ const descriptor = { kind: "confirm" as const, message };
138
+ return requirePrimitivePromptAnswer(descriptor, await ask(store, runId, descriptor, signal)) as boolean;
138
139
  },
139
140
 
140
141
  async select<T extends string>(message: string, options: readonly T[]): Promise<T> {
141
142
  if (options.length === 0) {
142
143
  throw new Error("atomic-workflows: ctx.ui.select requires at least one option");
143
144
  }
144
- const response = await ask(
145
- store,
146
- runId,
147
- {
148
- kind: "select",
149
- message,
150
- choices: options,
151
- },
152
- signal,
153
- );
154
- if (typeof response === "string" && (options as readonly string[]).includes(response)) {
155
- return response as T;
156
- }
157
- return options[0]!;
145
+ const descriptor = { kind: "select" as const, message, choices: options };
146
+ return requirePrimitivePromptAnswer(descriptor, await ask(store, runId, descriptor, signal)) as T;
158
147
  },
159
148
 
160
149
  async editor(initial?: string): Promise<string> {
161
- const response = await ask(
162
- store,
163
- runId,
164
- {
165
- kind: "editor",
166
- message: "Edit and save to continue.",
167
- initial,
168
- },
169
- signal,
170
- );
171
- if (typeof response === "string") return response;
172
- return initial ?? "";
150
+ const descriptor = { kind: "editor" as const, message: "Edit and save to continue.", initial };
151
+ return requirePrimitivePromptAnswer(descriptor, await ask(store, runId, descriptor, signal)) as string;
173
152
  },
174
153
  };
175
154
  }
@@ -8,6 +8,7 @@ import type { GraphOverlayPort } from "../tui/overlay-adapter.js";
8
8
  import { buildGraphOverlayAdapter } from "../tui/overlay-adapter.js";
9
9
  import { installStoreWidget, installToolExecutionHooks } from "../tui/store-widget-installer.js";
10
10
  import type { PostMortemHandleResolution } from "../tui/workflow-attach-pane-types.js";
11
+ import { adoptWorkflowSessionRunState } from "./adopt-session-run-state.js";
11
12
  import { registerCompletedStageIntercomAskRouter } from "./completed-stage-intercom-ask.js";
12
13
  import { registerWorkflowLifecycleHandlers } from "./extension-lifecycle.js";
13
14
  import { createWorkflowExtensionRuntimeState } from "./extension-runtime-state.js";
@@ -68,6 +69,8 @@ function registerIntercomControl(pi: ExtensionAPI, intercomControlRef: { current
68
69
  }
69
70
 
70
71
  function factory(pi: ExtensionAPI): void {
72
+ adoptWorkflowSessionRunState(pi.events);
73
+
71
74
  const adapters = buildRuntimeAdapters(pi);
72
75
  const runtimeState = createWorkflowExtensionRuntimeState(pi, adapters);
73
76
  const postMortemResolverDeps = {
@@ -47,6 +47,17 @@ function installDbosProcessShutdown(): void {
47
47
  process.once("beforeExit", () => void shutdownDbosQuietly());
48
48
  }
49
49
 
50
+ /**
51
+ * `/reload`, `/fork`, `/new`, and `/resume` replace the host session inside
52
+ * one process that keeps running the workflows. Those reasons must not kill
53
+ * in-flight runs or drop live executor handles. `startup` and any reason
54
+ * this code does not recognise still clear: neither names a predecessor
55
+ * that handed anything over. `/reload` reuses the host bus; the others do not.
56
+ */
57
+ function replacementStopsWorkflows(reason: string | undefined): boolean {
58
+ return reason !== "reload" && reason !== "fork" && reason !== "new" && reason !== "resume";
59
+ }
60
+
50
61
  export interface WorkflowLifecycleRegistrationDeps {
51
62
  runtimeState: WorkflowExtensionRuntimeState;
52
63
  storeWidgetRef: { current: (() => void) | null };
@@ -72,28 +83,35 @@ export function registerWorkflowLifecycleHandlers(pi: ExtensionAPI, deps: Workfl
72
83
  const messageLabel = reason === "new" ? "Starting a new session" : "Resuming another session";
73
84
  try {
74
85
  const shouldSwitchSession = await confirmSessionSwitch(
75
- `${actionLabel} and stop ${inFlightWorkflowCount} in-flight ${workflowNoun}?`,
76
- `${messageLabel} will stop/kill ${inFlightWorkflowCount} in-flight ${workflowNoun} and clear workflow history tied to the current session.`,
86
+ `${actionLabel} with ${inFlightWorkflowCount} in-flight ${workflowNoun} still running?`,
87
+ `${messageLabel} keeps ${inFlightWorkflowCount} in-flight ${workflowNoun} running in this process. They stay on the session that started them.`,
77
88
  );
78
89
  if (shouldSwitchSession) return undefined;
79
90
  } catch {
80
91
  return undefined;
81
92
  }
82
93
  const cancelledLabel = reason === "new" ? "New session" : "Resume";
83
- ctx?.ui?.notify?.(`${cancelledLabel} cancelled; in-flight workflows were left unchanged.`, "info");
94
+ ctx?.ui?.notify?.(`${cancelledLabel} cancelled; in-flight workflows keep running.`, "info");
84
95
  return { cancel: true };
85
96
  });
86
97
 
87
- pi.on("session_start", async (_event, ctx) => {
98
+ pi.on("session_start", async (event, ctx) => {
99
+ const reason =
100
+ typeof event === "object" && event !== null && "reason" in event
101
+ ? (event as { readonly reason?: string }).reason
102
+ : undefined;
88
103
  runtimeState.resetWorkflowDiscoveryForSession();
89
104
  deAdvertiseAskUserQuestionWhenHeadless(pi, ctx?.hasUI);
90
105
  await runtimeState.ensureWorkflowConfigLoaded();
91
- killAllRuns({ store, cancellation: cancellationRegistry, persistence: runtimeState.persistenceRef.current });
92
- store.clear();
106
+ if (replacementStopsWorkflows(reason)) {
107
+ killAllRuns({ store, cancellation: cancellationRegistry, persistence: runtimeState.persistenceRef.current });
108
+ store.clear();
109
+ }
93
110
  clearForms();
94
111
  resetWorkflowLifecycleNotificationState(runtimeState.lifecycleNotificationState);
95
112
  resetWorkflowHilAnswerNotificationState(runtimeState.hilAnswerNotificationState);
96
- stageControlRegistry.clear();
113
+ if (replacementStopsWorkflows(reason)) stageControlRegistry.clear();
114
+ else stageControlRegistry.clearDetached();
97
115
  // Named workflows publish lifecycle notices through the normal notification path.
98
116
  runtimeState.setNotificationsActive(true);
99
117
  runtimeState.startWorkflowDiscoveryWarmup(() => {
@@ -141,10 +159,10 @@ export function registerWorkflowLifecycleHandlers(pi: ExtensionAPI, deps: Workfl
141
159
  } finally {
142
160
  stageControlRegistry.clear();
143
161
  }
144
- } else {
145
- // Every non-quit host-session boundary invalidates detached lazy handles
146
- // synchronously, before they can attach to the replacement session.
162
+ } else if (replacementStopsWorkflows(reason)) {
147
163
  stageControlRegistry.clear();
164
+ } else {
165
+ stageControlRegistry.clearDetached();
148
166
  }
149
167
  deps.storeWidgetRef.current?.();
150
168
  deps.storeWidgetRef.current = null;