@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
@@ -1,6 +1,7 @@
1
1
  import { flattenTruncatedString } from "../shared/flat-string.js";
2
2
  import { isReopenableSessionTranscript } from "../shared/session-transcript.js";
3
3
  import type { RunSnapshot, StageSnapshot, ToolNodeSnapshot } from "../shared/store-types.js";
4
+ import { boundedToolPayload, boundedToolPayloadRecord, boundedToolText } from "../shared/tool-payload-bounds.js";
4
5
  import type { WorkflowInputValues, WorkflowSerializableValue } from "../shared/types.js";
5
6
  import type { DurableWorkflowBackend } from "./backend.js";
6
7
  import {
@@ -266,6 +267,11 @@ function completedToolNodes(
266
267
  kind: "tool" as const,
267
268
  id: topology?.nodeId ?? checkpoint.checkpointId,
268
269
  name: checkpoint.name,
270
+ // Restored nodes are recorded into the live store, which session and
271
+ // status surfaces clone and re-serialize, so these inspection copies
272
+ // are bounded. `checkpoint.output` itself stays exact for replay.
273
+ ...(checkpoint.args !== undefined ? { args: boundedToolPayloadRecord(checkpoint.args) } : {}),
274
+ ...(checkpoint.source !== undefined ? { source: boundedToolText(checkpoint.source) } : {}),
269
275
  argsHash: checkpoint.argsHash,
270
276
  ordinal: topology?.ordinal ?? index + 1,
271
277
  parentIds: Object.freeze(
@@ -277,6 +283,10 @@ function completedToolNodes(
277
283
  executionOrder: topology?.order ?? firstSequenceByHash.get(checkpoint.argsHash)!,
278
284
  ...(topology?.startedAt !== undefined ? { startedAt: topology.startedAt } : {}),
279
285
  endedAt: topology?.endedAt ?? checkpoint.completedAt,
286
+ ...(topology?.startedAt !== undefined
287
+ ? { durationMs: Math.max(0, (topology?.endedAt ?? checkpoint.completedAt) - topology.startedAt) }
288
+ : {}),
289
+ ...(checkpoint.throwingFailureError === undefined ? { result: boundedToolPayload(checkpoint.output) } : {}),
280
290
  ...(failed
281
291
  ? { error: failureError ?? "Invalid durable ctx.tool failure outcome" }
282
292
  : { resultSummary: summarizeCompletedToolResult(checkpoint.output) }),
@@ -81,6 +81,7 @@ export interface DbosStepRecord {
81
81
  readonly completedAt?: number;
82
82
  }
83
83
 
84
+ import { getDbosProcessOwner } from "./dbos-process-owner.js";
84
85
  import { createRealDbosHandle, type DbosLogger, type DbosStatic, getAtomicExecutorId } from "./dbos-sdk-handle.js";
85
86
  // ---------------------------------------------------------------------------
86
87
  // Real SDK handle factory (lazy import, no top-level dependency)
@@ -118,23 +119,35 @@ export async function configureDbosDurableBackend(config?: {
118
119
  readonly systemDatabaseUrl?: string;
119
120
  }): Promise<ConfiguredDbosDurability> {
120
121
  const sdk = await importDbosSdk();
121
- const url = effectiveSystemDatabaseUrl(config?.systemDatabaseUrl);
122
- sdk.setConfig({
123
- name: "atomic-workflows",
124
- ...(url === undefined ? {} : { systemDatabaseUrl: url }),
125
- runAdminServer: false,
126
- // Unique per process: concurrent Atomic sessions share one database, and
127
- // DBOS-level pending-workflow recovery must stay scoped to the owner.
128
- executorID: getAtomicExecutorId(),
129
- logger: SILENT_DBOS_LOGGER,
130
- });
131
- const mainWorkflow = sdk.registerWorkflow(async (_name: string, inputs: DurableInputs) => inputs, {
132
- name: "atomicWorkflowHandle",
133
- });
134
- const checkpointWorkflow = sdk.registerWorkflow(
135
- async (_workflowId: string, _stepName: string, output: WorkflowSerializableValue) => output,
136
- { name: "atomicWorkflowCheckpoint" },
137
- );
122
+ const owner = getDbosProcessOwner();
123
+ const existing = owner.wrappers;
124
+ // The SDK forbids setConfig after launch. Recover original wrappers first.
125
+ if (existing === undefined) {
126
+ const url = effectiveSystemDatabaseUrl(config?.systemDatabaseUrl);
127
+ sdk.setConfig({
128
+ name: "atomic-workflows",
129
+ ...(url === undefined ? {} : { systemDatabaseUrl: url }),
130
+ runAdminServer: false,
131
+ // Unique per process: concurrent Atomic sessions share one database, and
132
+ // DBOS-level pending-workflow recovery must stay scoped to the owner.
133
+ executorID: getAtomicExecutorId(),
134
+ logger: SILENT_DBOS_LOGGER,
135
+ });
136
+ }
137
+ const mainWorkflow =
138
+ existing?.mainWorkflow ??
139
+ sdk.registerWorkflow(async (_name: string, inputs: DurableInputs) => inputs, {
140
+ name: "atomicWorkflowHandle",
141
+ });
142
+ const checkpointWorkflow =
143
+ existing?.checkpointWorkflow ??
144
+ sdk.registerWorkflow(
145
+ async (_workflowId: string, _stepName: string, output: WorkflowSerializableValue) => output,
146
+ { name: "atomicWorkflowCheckpoint" },
147
+ );
148
+ if (existing === undefined) {
149
+ owner.wrappers = { mainWorkflow, checkpointWorkflow };
150
+ }
138
151
  return {
139
152
  backend: new DbosDurableBackend(createRealDbosHandle(sdk, mainWorkflow, checkpointWorkflow)),
140
153
  launch: () => sdk.launch(),
@@ -47,6 +47,8 @@ export interface DbosCheckpointEnvelope extends WorkflowSerializableObject {
47
47
  readonly kind: DurableCheckpointKind;
48
48
  readonly checkpointId: string;
49
49
  readonly name?: string;
50
+ readonly args?: WorkflowSerializableValue;
51
+ readonly source?: string;
50
52
  readonly argsHash?: string;
51
53
  readonly promptKind?: UiPromptKind;
52
54
  readonly outcomeKind?: "return_success" | "return_failure";
@@ -99,6 +101,8 @@ export function encodeCheckpoint(checkpoint: DurableCheckpoint): DbosCheckpointE
99
101
  return {
100
102
  ...base,
101
103
  name: t.name,
104
+ ...(t.args !== undefined ? { args: t.args } : {}),
105
+ ...(t.source !== undefined ? { source: t.source } : {}),
102
106
  argsHash: t.argsHash,
103
107
  ...(t.outcomeKind !== undefined ? { outcomeKind: t.outcomeKind } : {}),
104
108
  ...(t.throwingFailureError !== undefined ? { throwingFailureError: t.throwingFailureError } : {}),
@@ -218,6 +222,10 @@ function decodeEnvelope(workflowId: string, env: DbosCheckpointEnvelope): Durabl
218
222
  return undefined;
219
223
  const common = { workflowId, checkpointId: env.checkpointId, completedAt: env.completedAt };
220
224
  if (env.kind === "tool") {
225
+ // An inspection-only field must never invalidate durable state: one
226
+ // rejected checkpoint suppresses the whole workflow and re-runs completed
227
+ // side effects. `args` and `source` are therefore ignored when they are
228
+ // not the expected shape, while the replayable fields stay strict.
221
229
  if (
222
230
  typeof env.argsHash !== "string" ||
223
231
  env.output === undefined ||
@@ -227,6 +235,10 @@ function decodeEnvelope(workflowId: string, env: DbosCheckpointEnvelope): Durabl
227
235
  (env.throwingFailureError !== undefined && typeof env.throwingFailureError !== "string")
228
236
  )
229
237
  return undefined;
238
+ const inspectionArgs =
239
+ typeof env.args === "object" && env.args !== null && !Array.isArray(env.args)
240
+ ? (env.args as Readonly<Record<string, WorkflowSerializableValue>>)
241
+ : undefined;
230
242
  const outcome = env.outcomeKind === undefined ? undefined : workflowToolOutcomeFromValue(env.output);
231
243
  if (
232
244
  (env.outcomeKind === "return_success" && outcome?.ok !== true) ||
@@ -239,6 +251,8 @@ function decodeEnvelope(workflowId: string, env: DbosCheckpointEnvelope): Durabl
239
251
  kind: "tool",
240
252
  ...common,
241
253
  name: env.name ?? "tool",
254
+ ...(inspectionArgs !== undefined ? { args: inspectionArgs } : {}),
255
+ ...(typeof env.source === "string" ? { source: env.source } : {}),
242
256
  argsHash: env.argsHash,
243
257
  output: env.output,
244
258
  ...(env.outcomeKind !== undefined ? { outcomeKind: env.outcomeKind } : {}),
@@ -4,6 +4,8 @@ import {
4
4
  resolveDbosSystemDatabaseUrl,
5
5
  shouldProvisionLocalDbos,
6
6
  } from "./dbos-local-postgres.js";
7
+ import { getDbosProcessOwner, resetDbosProcessOwner } from "./dbos-process-owner.js";
8
+ import { classifyDbosDurabilityFailure, readDbosFailureDetail } from "./dbos-registration-diagnostics.js";
7
9
 
8
10
  export type DbosLifecycleState =
9
11
  | "uninitialized"
@@ -52,49 +54,51 @@ const defaultConfigurator: DbosConfigurator = async () => {
52
54
  let configureDurability: DbosConfigurator = defaultConfigurator;
53
55
  let provisionLocalDbos: LocalDbosProvisioner = provisionResolvedLocalDbos;
54
56
 
55
- let state: DbosLifecycleState = "uninitialized";
56
- let configured: Promise<ConfiguredDbosDurability> | undefined;
57
- let active: ConfiguredDbosDurability | undefined;
58
- let launchPromise: Promise<void> | undefined;
59
- let shutdownPromise: Promise<void> | undefined;
60
- let failure: DbosDurabilityError | undefined;
61
-
62
- function durabilityFailure(action: string, error: unknown): DbosDurabilityError {
63
- const detail = error instanceof Error ? error.message : String(error);
64
- return new DbosDurabilityError(
65
- `DBOS workflow durability ${action} failed: ${detail}. Set DBOS_SYSTEM_DATABASE_URL to an existing Postgres when local provisioning is unavailable.`,
66
- error instanceof Error ? { cause: error } : undefined,
67
- );
57
+ function owner(): ReturnType<typeof getDbosProcessOwner> {
58
+ return getDbosProcessOwner();
59
+ }
60
+
61
+ async function durabilityFailure(action: string, error: unknown): Promise<DbosDurabilityError> {
62
+ const detail = readDbosFailureDetail(error);
63
+ const kind = await classifyDbosDurabilityFailure(error);
64
+ const guidance =
65
+ kind === "duplicate_registration"
66
+ ? "A duplicate DBOS operation registration caused this failure; changing the database URL will not resolve it."
67
+ : "Set DBOS_SYSTEM_DATABASE_URL to an existing Postgres when local provisioning is unavailable.";
68
+ const cause = error instanceof Error ? { cause: error } : undefined;
69
+ return new DbosDurabilityError(`DBOS workflow durability ${action} failed: ${detail}. ${guidance}`, cause);
68
70
  }
69
71
 
70
72
  export async function configureDbosOnce(): Promise<ConfiguredDbosDurability> {
71
- if (failure !== undefined) throw failure;
72
- configured ??= configureDurability()
73
+ const slot = owner();
74
+ if (slot.failure !== undefined) throw slot.failure;
75
+ slot.configured ??= configureDurability()
73
76
  .then((value) => {
74
- active = value;
75
- state = "configured";
77
+ slot.active = value;
78
+ slot.state = "configured";
76
79
  return value;
77
80
  })
78
- .catch((error: unknown) => {
79
- failure = durabilityFailure("configuration", error);
80
- state = "failed";
81
- throw failure;
81
+ .catch(async (error: unknown) => {
82
+ slot.failure = await durabilityFailure("configuration", error);
83
+ slot.state = "failed";
84
+ throw slot.failure;
82
85
  });
83
- return await configured;
86
+ return await slot.configured;
84
87
  }
85
88
 
86
89
  export async function launchDbosOnce(): Promise<void> {
87
- if (failure !== undefined) throw failure;
90
+ const slot = owner();
91
+ if (slot.failure !== undefined) throw slot.failure;
88
92
  // The executor is process-scoped and stops exactly once, at process exit.
89
93
  // Post-shutdown launches must fail loudly instead of returning a backend
90
94
  // whose SDK launched marker has been cleared.
91
- if (state === "shutting_down" || state === "shut_down") throw new DbosShutdownError();
95
+ if (slot.state === "shutting_down" || slot.state === "shut_down") throw new DbosShutdownError();
92
96
  const durability = await configureDbosOnce();
93
- launchPromise ??= (async () => {
94
- state = "launching";
97
+ slot.launchPromise ??= (async () => {
98
+ slot.state = "launching";
95
99
  try {
96
100
  await durability.launch();
97
- state = "ready";
101
+ slot.state = "ready";
98
102
  } catch (error) {
99
103
  if (shouldProvisionLocalDbos(error)) {
100
104
  try {
@@ -103,54 +107,57 @@ export async function launchDbosOnce(): Promise<void> {
103
107
  await durability.shutdown();
104
108
  await provisionLocalDbos();
105
109
  await durability.launch();
106
- state = "ready";
110
+ slot.state = "ready";
107
111
  return;
108
112
  } catch (provisionError) {
109
- failure = durabilityFailure("local Postgres startup", provisionError);
113
+ slot.failure = await durabilityFailure("local Postgres startup", provisionError);
110
114
  }
111
115
  } else {
112
- failure = durabilityFailure("launch", error);
116
+ slot.failure = await durabilityFailure("launch", error);
113
117
  }
114
- state = "failed";
115
- throw failure;
118
+ slot.state = "failed";
119
+ throw slot.failure;
116
120
  }
117
121
  })();
118
- await launchPromise;
122
+ await slot.launchPromise;
119
123
  }
120
124
 
121
125
  export async function getReadyDbosBackend(): Promise<DbosDurableBackend> {
122
126
  await launchDbosOnce();
123
- if (state !== "ready" || active === undefined) throw failure ?? new DbosNotReadyError();
124
- return active.backend;
127
+ const slot = owner();
128
+ if (slot.state !== "ready" || slot.active === undefined) throw slot.failure ?? new DbosNotReadyError();
129
+ return slot.active.backend;
125
130
  }
126
131
 
127
132
  export function getReadyDbosBackendSync(): DbosDurableBackend | undefined {
128
- return state === "ready" ? active?.backend : undefined;
133
+ const slot = owner();
134
+ return slot.state === "ready" ? slot.active?.backend : undefined;
129
135
  }
130
136
 
131
137
  export async function shutdownDbos(): Promise<void> {
132
- if (shutdownPromise !== undefined) return await shutdownPromise;
133
- const configuredPromise = configured;
138
+ const slot = owner();
139
+ if (slot.shutdownPromise !== undefined) return await slot.shutdownPromise;
140
+ const configuredPromise = slot.configured;
134
141
  if (configuredPromise === undefined) return;
135
- shutdownPromise = (async () => {
142
+ slot.shutdownPromise = (async () => {
136
143
  // A backend that never reached "ready" has nothing to flush or stop.
137
144
  // `configured`/`launchPromise` memoize rejections, so re-awaiting them
138
145
  // unguarded would rethrow the original provisioning failure out of every
139
146
  // session dispose — crashing otherwise-successful runs at process exit.
140
147
  const durability = await configuredPromise.catch(() => undefined);
141
148
  if (durability === undefined) return;
142
- if (launchPromise !== undefined) await launchPromise.catch(() => undefined);
143
- if (state !== "ready") return;
144
- state = "shutting_down";
149
+ if (slot.launchPromise !== undefined) await slot.launchPromise.catch(() => undefined);
150
+ if (slot.state !== "ready") return;
151
+ slot.state = "shutting_down";
145
152
  await durability.backend.flush();
146
153
  await durability.shutdown();
147
- state = "shut_down";
148
- })().catch((error: unknown) => {
149
- failure = durabilityFailure("shutdown", error);
150
- state = "failed";
151
- throw failure;
154
+ slot.state = "shut_down";
155
+ })().catch(async (error: unknown) => {
156
+ slot.failure = await durabilityFailure("shutdown", error);
157
+ slot.state = "failed";
158
+ throw slot.failure;
152
159
  });
153
- await shutdownPromise;
160
+ await slot.shutdownPromise;
154
161
  }
155
162
 
156
163
  /**
@@ -159,12 +166,13 @@ export async function shutdownDbos(): Promise<void> {
159
166
  * `/fork`, `/reload`) where the DBOS executor must stay launched.
160
167
  */
161
168
  export async function flushDbos(): Promise<void> {
162
- if (state !== "ready" || active === undefined) return;
163
- await active.backend.flush();
169
+ const slot = owner();
170
+ if (slot.state !== "ready" || slot.active === undefined) return;
171
+ await slot.active.backend.flush();
164
172
  }
165
173
 
166
174
  export function dbosLifecycleState(): DbosLifecycleState {
167
- return state;
175
+ return owner().state;
168
176
  }
169
177
 
170
178
  /** Reset the process singleton with an explicit configurator for unit tests. */
@@ -172,12 +180,7 @@ export function resetDbosLifecycleForTests(
172
180
  configurator: DbosConfigurator = defaultConfigurator,
173
181
  provisioner: LocalDbosProvisioner = provisionResolvedLocalDbos,
174
182
  ): void {
175
- state = "uninitialized";
176
- configured = undefined;
177
- active = undefined;
178
- launchPromise = undefined;
179
- shutdownPromise = undefined;
180
- failure = undefined;
183
+ resetDbosProcessOwner();
181
184
  configureDurability = configurator;
182
185
  provisionLocalDbos = provisioner;
183
186
  }
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Process-global owner for DBOS lifecycle state and registered wrappers.
3
+ *
4
+ * `@dbos-inc/dbos-sdk` keeps a process-global operation registry that #1958
5
+ * leaves alive across session replacement. The workflows bundle is re-evaluated
6
+ * on `/reload` and the other process-preserving boundaries, so module-local
7
+ * variables restart at `uninitialized` and `configureDbosDurableBackend` would
8
+ * register `atomicWorkflowHandle` / `atomicWorkflowCheckpoint` a second time.
9
+ * The second registration throws and the replacement session degrades to
10
+ * `InMemoryDurableBackend` (#2022).
11
+ *
12
+ * Session scope is the wrong lifetime: the SDK registry is process-global, so
13
+ * a session-scoped owner would re-register per session and reproduce the bug.
14
+ * This slot lives on `globalThis` under `Symbol.for` so every load generation
15
+ * of the bundle — and a second copy of the module reached through a different
16
+ * specifier — shares one owner.
17
+ *
18
+ * The `@1` suffix is the shape version. Bump it when these fields change so a
19
+ * new generation declines an incompatible predecessor instead of reading it.
20
+ */
21
+
22
+ import type { WorkflowSerializableValue } from "../shared/types.js";
23
+ import type { ConfiguredDbosDurability } from "./dbos-backend.js";
24
+ import type { DbosDurabilityError, DbosLifecycleState } from "./dbos-lifecycle.js";
25
+
26
+ export const DBOS_PROCESS_OWNER_KEY = Symbol.for("atomic-workflows/dbos-process-owner@1");
27
+
28
+ export interface DbosRegisteredWrappers {
29
+ readonly mainWorkflow: (
30
+ name: string,
31
+ inputs: Record<string, WorkflowSerializableValue>,
32
+ ) => Promise<WorkflowSerializableValue>;
33
+ readonly checkpointWorkflow: (
34
+ workflowId: string,
35
+ stepName: string,
36
+ output: WorkflowSerializableValue,
37
+ ) => Promise<WorkflowSerializableValue>;
38
+ }
39
+
40
+ export interface DbosProcessOwner {
41
+ readonly version: 1;
42
+ state: DbosLifecycleState;
43
+ configured: Promise<ConfiguredDbosDurability> | undefined;
44
+ active: ConfiguredDbosDurability | undefined;
45
+ launchPromise: Promise<void> | undefined;
46
+ shutdownPromise: Promise<void> | undefined;
47
+ failure: DbosDurabilityError | undefined;
48
+ wrappers: DbosRegisteredWrappers | undefined;
49
+ }
50
+
51
+ function emptyOwner(): DbosProcessOwner {
52
+ return {
53
+ version: 1,
54
+ state: "uninitialized",
55
+ configured: undefined,
56
+ active: undefined,
57
+ launchPromise: undefined,
58
+ shutdownPromise: undefined,
59
+ failure: undefined,
60
+ wrappers: undefined,
61
+ };
62
+ }
63
+
64
+ function ownerBag(): Record<symbol, DbosProcessOwner | undefined> {
65
+ return globalThis as typeof globalThis & Record<symbol, DbosProcessOwner | undefined>;
66
+ }
67
+
68
+ export function getDbosProcessOwner(): DbosProcessOwner {
69
+ const bag = ownerBag();
70
+ const existing = bag[DBOS_PROCESS_OWNER_KEY];
71
+ if (existing !== undefined && existing.version === 1) return existing;
72
+ const created = emptyOwner();
73
+ bag[DBOS_PROCESS_OWNER_KEY] = created;
74
+ return created;
75
+ }
76
+
77
+ /** Reset every field on the process-global slot. Used by durability tests. */
78
+ export function resetDbosProcessOwner(): void {
79
+ const owner = getDbosProcessOwner();
80
+ owner.state = "uninitialized";
81
+ owner.configured = undefined;
82
+ owner.active = undefined;
83
+ owner.launchPromise = undefined;
84
+ owner.shutdownPromise = undefined;
85
+ owner.failure = undefined;
86
+ owner.wrappers = undefined;
87
+ }
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Classify DBOS durability failures so a duplicate operation registration
3
+ * is not described as a Postgres provisioning problem (#2022 / #2462).
4
+ *
5
+ * Uses the SDK `Error` namespace (`DBOSConflictingRegistrationError` and
6
+ * `getDBOSErrorCode`). The SDK is loaded lazily so this module never
7
+ * statically imports `@dbos-inc/dbos-sdk`. `instanceof` is not used: two
8
+ * resolved copies of the SDK would make it fail.
9
+ */
10
+
11
+ export type DbosDurabilityFailureKind = "duplicate_registration" | "other";
12
+
13
+ interface DbosSdkErrorModule {
14
+ readonly DBOSConflictingRegistrationError?: new (msg: string) => object;
15
+ readonly getDBOSErrorCode?: (error: Error) => number | undefined;
16
+ }
17
+
18
+ let cachedErrorModule: DbosSdkErrorModule | undefined;
19
+ let errorModuleLoad: Promise<DbosSdkErrorModule | undefined> | undefined;
20
+
21
+ async function loadDbosErrorModule(): Promise<DbosSdkErrorModule | undefined> {
22
+ if (cachedErrorModule !== undefined) return cachedErrorModule;
23
+ errorModuleLoad ??= (async () => {
24
+ const spec = "@dbos-inc/dbos-sdk";
25
+ try {
26
+ const mod = (await import(spec)) as { readonly Error?: DbosSdkErrorModule };
27
+ cachedErrorModule = mod.Error;
28
+ return cachedErrorModule;
29
+ } catch {
30
+ return undefined;
31
+ }
32
+ })();
33
+ return await errorModuleLoad;
34
+ }
35
+
36
+ function conflictingRegistrationCode(errors: DbosSdkErrorModule | undefined): number | undefined {
37
+ const ctor = errors?.DBOSConflictingRegistrationError;
38
+ if (ctor === undefined) return undefined;
39
+ try {
40
+ const code = Reflect.get(new ctor(""), "dbosErrorCode");
41
+ return typeof code === "number" ? code : undefined;
42
+ } catch {
43
+ return undefined;
44
+ }
45
+ }
46
+
47
+ function isDuplicateRegistration(value: object, errors: DbosSdkErrorModule | undefined): boolean {
48
+ const expected = conflictingRegistrationCode(errors);
49
+ const code = readOwn(value, "dbosErrorCode");
50
+ if (typeof code === "number" && typeof expected === "number" && code === expected) return true;
51
+ if (errors?.getDBOSErrorCode !== undefined && value instanceof Error) {
52
+ try {
53
+ if (errors.getDBOSErrorCode(value) === expected) return true;
54
+ } catch {
55
+ /* keep walking */
56
+ }
57
+ }
58
+ const name = readOwn(value, "name");
59
+ const className = errors?.DBOSConflictingRegistrationError?.name;
60
+ return typeof name === "string" && typeof className === "string" && name === className;
61
+ }
62
+
63
+ function classifyWith(error: unknown, errors: DbosSdkErrorModule | undefined): DbosDurabilityFailureKind {
64
+ try {
65
+ const seen = new Set<object>();
66
+ let current: unknown = error;
67
+ while (current !== undefined && current !== null) {
68
+ if (typeof current !== "object") return "other";
69
+ if (seen.has(current)) return "other";
70
+ seen.add(current);
71
+ if (isDuplicateRegistration(current, errors)) return "duplicate_registration";
72
+ current = readOwn(current, "cause");
73
+ }
74
+ } catch {
75
+ return "other";
76
+ }
77
+ return "other";
78
+ }
79
+
80
+ /**
81
+ * Async classification used at the durability boundary so the first failure
82
+ * can load the SDK error classes before deciding. Subsequent sync callers
83
+ * reuse the cached module.
84
+ */
85
+ export async function classifyDbosDurabilityFailure(error: unknown): Promise<DbosDurabilityFailureKind> {
86
+ const errors = await loadDbosErrorModule();
87
+ return classifyWith(error, errors);
88
+ }
89
+
90
+ /**
91
+ * Read an error's display detail without letting a throwing `message` getter
92
+ * escape the durability wrapper. `String(error)` is the last-resort fallback
93
+ * and is itself guarded: some `toString` implementations also throw.
94
+ */
95
+ export function readDbosFailureDetail(error: unknown): string {
96
+ if (typeof error === "object" && error !== null) {
97
+ const message = readOwn(error, "message");
98
+ if (typeof message === "string" && message !== "") return message;
99
+ }
100
+ try {
101
+ return String(error);
102
+ } catch {
103
+ return "unknown error";
104
+ }
105
+ }
106
+
107
+ function readOwn(value: object, key: string): unknown {
108
+ try {
109
+ return Reflect.get(value, key);
110
+ } catch {
111
+ return undefined;
112
+ }
113
+ }
@@ -8,6 +8,7 @@ import {
8
8
  getReadyDbosBackend,
9
9
  getReadyDbosBackendSync,
10
10
  } from "./dbos-lifecycle.js";
11
+ import { classifyDbosDurabilityFailure, readDbosFailureDetail } from "./dbos-registration-diagnostics.js";
11
12
 
12
13
  let injectedBackend: DurableWorkflowBackend | undefined;
13
14
  let initializedBackend: DurableWorkflowBackend | undefined;
@@ -65,12 +66,9 @@ export async function initializeDurableBackend(): Promise<DurableWorkflowBackend
65
66
  initializing = undefined;
66
67
  }
67
68
  initializing ??= getReadyDbosBackend()
68
- .catch((error: unknown) => {
69
- // Post-shutdown initialization is a process-exit race, not a
70
- // provisioning failure: fail loudly instead of silently degrading to a
71
- // non-durable backend.
69
+ .catch(async (error: unknown) => {
72
70
  if (error instanceof DbosShutdownError) throw error;
73
- return degradeToNonDurableBackend(error);
71
+ return await degradeToNonDurableBackend(error);
74
72
  })
75
73
  .then((backend) => {
76
74
  initializedBackend = backend;
@@ -79,12 +77,17 @@ export async function initializeDurableBackend(): Promise<DurableWorkflowBackend
79
77
  return await initializing;
80
78
  }
81
79
 
82
- function degradeToNonDurableBackend(error: unknown): DurableWorkflowBackend {
83
- const detail = error instanceof Error ? error.message : String(error);
80
+ async function degradeToNonDurableBackend(error: unknown): Promise<DurableWorkflowBackend> {
81
+ const detail = readDbosFailureDetail(error);
82
+ const kind = await classifyDbosDurabilityFailure(error);
83
+ const restore =
84
+ kind === "duplicate_registration"
85
+ ? `Restore durability by resolving the duplicate DBOS operation registration: ${detail}`
86
+ : `Restore durability by fixing Postgres provisioning: ${detail}`;
84
87
  console.error(
85
88
  "atomic-workflows: durable backend unavailable — continuing NON-DURABLY with an in-memory backend. " +
86
89
  "Workflow runs will execute, but their state will not survive this process and `/workflow resume` " +
87
- `after exit will not work. Restore durability by fixing Postgres provisioning: ${detail}`,
90
+ `after exit will not work. ${restore}`,
88
91
  );
89
92
  return new InMemoryDurableBackend();
90
93
  }
@@ -1,4 +1,5 @@
1
1
  import type { ToolNodeSnapshot } from "../shared/store-types.js";
2
+ import type { WorkflowSerializableValue } from "../shared/types.js";
2
3
  import type { DurableWorkflowBackend } from "./backend.js";
3
4
  import { workflowToolFailure } from "./tool-outcome.js";
4
5
  import { DURABLE_TOOL_TOPOLOGY_VERSION, type DurableStageRunTopology } from "./types.js";
@@ -16,6 +17,8 @@ export async function recordThrowingToolFailure(
16
17
  node: ToolNodeSnapshot,
17
18
  identity: {
18
19
  readonly name: string;
20
+ readonly args?: Readonly<Record<string, WorkflowSerializableValue>>;
21
+ readonly source?: string;
19
22
  readonly argsHash: string;
20
23
  readonly ordinal: number;
21
24
  readonly startedAt: number;
@@ -30,6 +33,8 @@ export async function recordThrowingToolFailure(
30
33
  workflowId: input.workflowId,
31
34
  checkpointId: `tool-failure:${identity.argsHash}:${input.nextCheckpointId()}`,
32
35
  name: identity.name,
36
+ ...(identity.args !== undefined ? { args: identity.args } : {}),
37
+ ...(identity.source !== undefined ? { source: identity.source } : {}),
33
38
  argsHash: identity.argsHash,
34
39
  output: null,
35
40
  throwingFailureError: message,