@bastani/atomic 0.9.11-alpha.1 → 0.9.11-alpha.3

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 (507) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/dist/builtin/cursor/package.json +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 +6 -0
  6. package/dist/builtin/subagents/package.json +4 -4
  7. package/dist/builtin/subagents/src/runs/background/notify.ts +3 -1
  8. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-chain.ts +5 -2
  9. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-parallel.ts +2 -1
  10. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-single.ts +5 -2
  11. package/dist/builtin/subagents/src/runs/foreground/subagent-executor-status.ts +34 -0
  12. package/dist/builtin/web-access/package.json +2 -2
  13. package/dist/builtin/workflows/CHANGELOG.md +6 -0
  14. package/dist/builtin/workflows/package.json +2 -2
  15. package/dist/builtin/workflows/src/durable/child-primitive.ts +3 -0
  16. package/dist/builtin/workflows/src/durable/completed-catalog.ts +182 -33
  17. package/dist/builtin/workflows/src/durable/completed-inspection.ts +9 -4
  18. package/dist/builtin/workflows/src/durable/dbos-envelope.ts +31 -8
  19. package/dist/builtin/workflows/src/durable/resume-runtime.ts +6 -2
  20. package/dist/builtin/workflows/src/durable/stage-primitive.ts +48 -10
  21. package/dist/builtin/workflows/src/durable/types.ts +11 -0
  22. package/dist/builtin/workflows/src/engine/run-durable-stage-session.ts +9 -9
  23. package/dist/builtin/workflows/src/engine/run-durable-topology.ts +89 -0
  24. package/dist/builtin/workflows/src/engine/run.ts +18 -16
  25. package/dist/builtin/workflows/src/extension/runtime-durable-resume.ts +3 -0
  26. package/dist/builtin/workflows/src/extension/ui-surface.ts +4 -0
  27. package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +3 -0
  28. package/dist/builtin/workflows/src/runs/foreground/executor-stage-factory.ts +6 -3
  29. package/dist/builtin/workflows/src/runs/foreground/executor-stage-types.ts +2 -2
  30. package/dist/builtin/workflows/src/runs/foreground/executor-types.ts +4 -1
  31. package/dist/builtin/workflows/src/tui/host-input-form.ts +1 -1
  32. package/dist/builtin/workflows/src/tui/workflow-resume-selector.ts +2 -3
  33. package/dist/cli/args.d.ts.map +1 -1
  34. package/dist/cli/args.js +4 -2
  35. package/dist/cli/args.js.map +1 -1
  36. package/dist/cli/config-selector.d.ts +4 -2
  37. package/dist/cli/config-selector.d.ts.map +1 -1
  38. package/dist/cli/config-selector.js +1 -1
  39. package/dist/cli/config-selector.js.map +1 -1
  40. package/dist/cli/startup-ui.d.ts +3 -0
  41. package/dist/cli/startup-ui.d.ts.map +1 -1
  42. package/dist/cli/startup-ui.js +50 -1
  43. package/dist/cli/startup-ui.js.map +1 -1
  44. package/dist/config-command-parser.d.ts +9 -0
  45. package/dist/config-command-parser.d.ts.map +1 -0
  46. package/dist/config-command-parser.js +22 -0
  47. package/dist/config-command-parser.js.map +1 -0
  48. package/dist/config-self-update.d.ts +6 -2
  49. package/dist/config-self-update.d.ts.map +1 -1
  50. package/dist/config-self-update.js +17 -10
  51. package/dist/config-self-update.js.map +1 -1
  52. package/dist/config.d.ts +3 -3
  53. package/dist/config.d.ts.map +1 -1
  54. package/dist/config.js +4 -4
  55. package/dist/config.js.map +1 -1
  56. package/dist/core/agent-session-compaction.d.ts.map +1 -1
  57. package/dist/core/agent-session-compaction.js +7 -1
  58. package/dist/core/agent-session-compaction.js.map +1 -1
  59. package/dist/core/agent-session-export.d.ts.map +1 -1
  60. package/dist/core/agent-session-export.js +32 -25
  61. package/dist/core/agent-session-export.js.map +1 -1
  62. package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
  63. package/dist/core/agent-session-extension-bindings.js +9 -3
  64. package/dist/core/agent-session-extension-bindings.js.map +1 -1
  65. package/dist/core/agent-session-prompt.d.ts.map +1 -1
  66. package/dist/core/agent-session-prompt.js +5 -0
  67. package/dist/core/agent-session-prompt.js.map +1 -1
  68. package/dist/core/agent-session-services.d.ts +2 -0
  69. package/dist/core/agent-session-services.d.ts.map +1 -1
  70. package/dist/core/agent-session-services.js +11 -5
  71. package/dist/core/agent-session-services.js.map +1 -1
  72. package/dist/core/agent-session-tree.d.ts.map +1 -1
  73. package/dist/core/agent-session-tree.js +7 -2
  74. package/dist/core/agent-session-tree.js.map +1 -1
  75. package/dist/core/agent-session-types.d.ts +20 -0
  76. package/dist/core/agent-session-types.d.ts.map +1 -1
  77. package/dist/core/agent-session-types.js.map +1 -1
  78. package/dist/core/auth-storage.d.ts +6 -2
  79. package/dist/core/auth-storage.d.ts.map +1 -1
  80. package/dist/core/auth-storage.js +5 -1
  81. package/dist/core/auth-storage.js.map +1 -1
  82. package/dist/core/cache-stats.d.ts +25 -0
  83. package/dist/core/cache-stats.d.ts.map +1 -0
  84. package/dist/core/cache-stats.js +68 -0
  85. package/dist/core/cache-stats.js.map +1 -0
  86. package/dist/core/compaction/branch-summarization.d.ts +7 -2
  87. package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
  88. package/dist/core/compaction/branch-summarization.js +8 -8
  89. package/dist/core/compaction/branch-summarization.js.map +1 -1
  90. package/dist/core/compaction/compaction-runner.d.ts +3 -1
  91. package/dist/core/compaction/compaction-runner.d.ts.map +1 -1
  92. package/dist/core/compaction/compaction-runner.js +6 -1
  93. package/dist/core/compaction/compaction-runner.js.map +1 -1
  94. package/dist/core/compaction/range-planner.d.ts +3 -0
  95. package/dist/core/compaction/range-planner.d.ts.map +1 -1
  96. package/dist/core/compaction/range-planner.js +2 -1
  97. package/dist/core/compaction/range-planner.js.map +1 -1
  98. package/dist/core/extensions/agent-events.d.ts +10 -0
  99. package/dist/core/extensions/agent-events.d.ts.map +1 -1
  100. package/dist/core/extensions/agent-events.js.map +1 -1
  101. package/dist/core/extensions/api-types.d.ts +8 -2
  102. package/dist/core/extensions/api-types.d.ts.map +1 -1
  103. package/dist/core/extensions/api-types.js.map +1 -1
  104. package/dist/core/extensions/event-types.d.ts +2 -2
  105. package/dist/core/extensions/event-types.d.ts.map +1 -1
  106. package/dist/core/extensions/event-types.js.map +1 -1
  107. package/dist/core/extensions/index.d.ts +1 -1
  108. package/dist/core/extensions/index.d.ts.map +1 -1
  109. package/dist/core/extensions/index.js.map +1 -1
  110. package/dist/core/extensions/loader-api.d.ts.map +1 -1
  111. package/dist/core/extensions/loader-api.js +13 -2
  112. package/dist/core/extensions/loader-api.js.map +1 -1
  113. package/dist/core/extensions/loader-core.d.ts.map +1 -1
  114. package/dist/core/extensions/loader-core.js +1 -0
  115. package/dist/core/extensions/loader-core.js.map +1 -1
  116. package/dist/core/extensions/loader-runtime.d.ts.map +1 -1
  117. package/dist/core/extensions/loader-runtime.js +15 -7
  118. package/dist/core/extensions/loader-runtime.js.map +1 -1
  119. package/dist/core/extensions/message-types.d.ts +5 -0
  120. package/dist/core/extensions/message-types.d.ts.map +1 -1
  121. package/dist/core/extensions/message-types.js.map +1 -1
  122. package/dist/core/extensions/provider-types.d.ts +46 -0
  123. package/dist/core/extensions/provider-types.d.ts.map +1 -1
  124. package/dist/core/extensions/provider-types.js.map +1 -1
  125. package/dist/core/extensions/runner-registries.d.ts +2 -1
  126. package/dist/core/extensions/runner-registries.d.ts.map +1 -1
  127. package/dist/core/extensions/runner-registries.js +8 -0
  128. package/dist/core/extensions/runner-registries.js.map +1 -1
  129. package/dist/core/extensions/runner.d.ts +5 -2
  130. package/dist/core/extensions/runner.d.ts.map +1 -1
  131. package/dist/core/extensions/runner.js +35 -13
  132. package/dist/core/extensions/runner.js.map +1 -1
  133. package/dist/core/extensions/runtime-types.d.ts +8 -2
  134. package/dist/core/extensions/runtime-types.d.ts.map +1 -1
  135. package/dist/core/extensions/runtime-types.js.map +1 -1
  136. package/dist/core/extensions/ui-types.d.ts +4 -0
  137. package/dist/core/extensions/ui-types.d.ts.map +1 -1
  138. package/dist/core/extensions/ui-types.js.map +1 -1
  139. package/dist/core/http-dispatcher.d.ts +1 -0
  140. package/dist/core/http-dispatcher.d.ts.map +1 -1
  141. package/dist/core/http-dispatcher.js +16 -2
  142. package/dist/core/http-dispatcher.js.map +1 -1
  143. package/dist/core/keybindings.d.ts +6 -1
  144. package/dist/core/keybindings.d.ts.map +1 -1
  145. package/dist/core/keybindings.js +3 -1
  146. package/dist/core/keybindings.js.map +1 -1
  147. package/dist/core/model-registry-auth.d.ts +2 -0
  148. package/dist/core/model-registry-auth.d.ts.map +1 -1
  149. package/dist/core/model-registry-auth.js +18 -1
  150. package/dist/core/model-registry-auth.js.map +1 -1
  151. package/dist/core/model-registry-custom-loader.d.ts.map +1 -1
  152. package/dist/core/model-registry-custom-loader.js +14 -2
  153. package/dist/core/model-registry-custom-loader.js.map +1 -1
  154. package/dist/core/model-registry-dynamic.js +2 -2
  155. package/dist/core/model-registry-dynamic.js.map +1 -1
  156. package/dist/core/model-registry-loader.d.ts.map +1 -1
  157. package/dist/core/model-registry-loader.js +2 -1
  158. package/dist/core/model-registry-loader.js.map +1 -1
  159. package/dist/core/model-registry-schemas.d.ts +17 -0
  160. package/dist/core/model-registry-schemas.d.ts.map +1 -1
  161. package/dist/core/model-registry-schemas.js +2 -0
  162. package/dist/core/model-registry-schemas.js.map +1 -1
  163. package/dist/core/model-registry-types.d.ts +10 -1
  164. package/dist/core/model-registry-types.d.ts.map +1 -1
  165. package/dist/core/model-registry-types.js.map +1 -1
  166. package/dist/core/model-registry.d.ts +26 -36
  167. package/dist/core/model-registry.d.ts.map +1 -1
  168. package/dist/core/model-registry.js +73 -68
  169. package/dist/core/model-registry.js.map +1 -1
  170. package/dist/core/model-resolver-defaults.d.ts.map +1 -1
  171. package/dist/core/model-resolver-defaults.js +5 -0
  172. package/dist/core/model-resolver-defaults.js.map +1 -1
  173. package/dist/core/model-runtime.d.ts +52 -0
  174. package/dist/core/model-runtime.d.ts.map +1 -0
  175. package/dist/core/model-runtime.js +120 -0
  176. package/dist/core/model-runtime.js.map +1 -0
  177. package/dist/core/oauth-provider-bridge.d.ts +3 -1
  178. package/dist/core/oauth-provider-bridge.d.ts.map +1 -1
  179. package/dist/core/oauth-provider-bridge.js +6 -4
  180. package/dist/core/oauth-provider-bridge.js.map +1 -1
  181. package/dist/core/package-manager-resolver.js +22 -11
  182. package/dist/core/package-manager-resolver.js.map +1 -1
  183. package/dist/core/package-manager-resource-collector.d.ts.map +1 -1
  184. package/dist/core/package-manager-resource-collector.js +8 -2
  185. package/dist/core/package-manager-resource-collector.js.map +1 -1
  186. package/dist/core/package-manager-resource-patterns.d.ts +1 -0
  187. package/dist/core/package-manager-resource-patterns.d.ts.map +1 -1
  188. package/dist/core/package-manager-resource-patterns.js +15 -0
  189. package/dist/core/package-manager-resource-patterns.js.map +1 -1
  190. package/dist/core/package-manager-source.d.ts.map +1 -1
  191. package/dist/core/package-manager-source.js +15 -8
  192. package/dist/core/package-manager-source.js.map +1 -1
  193. package/dist/core/package-manager-types.d.ts +1 -0
  194. package/dist/core/package-manager-types.d.ts.map +1 -1
  195. package/dist/core/package-manager-types.js.map +1 -1
  196. package/dist/core/prompt-templates.d.ts +1 -0
  197. package/dist/core/prompt-templates.d.ts.map +1 -1
  198. package/dist/core/prompt-templates.js +6 -4
  199. package/dist/core/prompt-templates.js.map +1 -1
  200. package/dist/core/provider-display-names.d.ts.map +1 -1
  201. package/dist/core/provider-display-names.js +4 -0
  202. package/dist/core/provider-display-names.js.map +1 -1
  203. package/dist/core/remote-catalog-provider.d.ts +1 -1
  204. package/dist/core/remote-catalog-provider.d.ts.map +1 -1
  205. package/dist/core/remote-catalog-provider.js +25 -6
  206. package/dist/core/remote-catalog-provider.js.map +1 -1
  207. package/dist/core/resource-loader-core.d.ts.map +1 -1
  208. package/dist/core/resource-loader-core.js.map +1 -1
  209. package/dist/core/resource-loader-extensions.d.ts.map +1 -1
  210. package/dist/core/resource-loader-extensions.js +5 -2
  211. package/dist/core/resource-loader-extensions.js.map +1 -1
  212. package/dist/core/resource-loader-helpers.d.ts.map +1 -1
  213. package/dist/core/resource-loader-helpers.js +1 -0
  214. package/dist/core/resource-loader-helpers.js.map +1 -1
  215. package/dist/core/resource-loader-internals.d.ts +2 -2
  216. package/dist/core/resource-loader-internals.d.ts.map +1 -1
  217. package/dist/core/resource-loader-internals.js.map +1 -1
  218. package/dist/core/resource-loader-types.d.ts +3 -3
  219. package/dist/core/resource-loader-types.d.ts.map +1 -1
  220. package/dist/core/resource-loader-types.js.map +1 -1
  221. package/dist/core/sdk-exports.d.ts +1 -1
  222. package/dist/core/sdk-exports.d.ts.map +1 -1
  223. package/dist/core/sdk-exports.js.map +1 -1
  224. package/dist/core/sdk-types.d.ts +3 -0
  225. package/dist/core/sdk-types.d.ts.map +1 -1
  226. package/dist/core/sdk-types.js.map +1 -1
  227. package/dist/core/sdk.d.ts.map +1 -1
  228. package/dist/core/sdk.js +10 -3
  229. package/dist/core/sdk.js.map +1 -1
  230. package/dist/core/session-manager-core.d.ts +2 -1
  231. package/dist/core/session-manager-core.d.ts.map +1 -1
  232. package/dist/core/session-manager-core.js +9 -6
  233. package/dist/core/session-manager-core.js.map +1 -1
  234. package/dist/core/session-manager-entries.d.ts +2 -2
  235. package/dist/core/session-manager-entries.d.ts.map +1 -1
  236. package/dist/core/session-manager-entries.js +2 -1
  237. package/dist/core/session-manager-entries.js.map +1 -1
  238. package/dist/core/session-manager-history.d.ts +5 -0
  239. package/dist/core/session-manager-history.d.ts.map +1 -1
  240. package/dist/core/session-manager-history.js +33 -0
  241. package/dist/core/session-manager-history.js.map +1 -1
  242. package/dist/core/session-manager-types.d.ts +4 -2
  243. package/dist/core/session-manager-types.d.ts.map +1 -1
  244. package/dist/core/session-manager-types.js.map +1 -1
  245. package/dist/core/session-manager-validation.d.ts.map +1 -1
  246. package/dist/core/session-manager-validation.js +3 -16
  247. package/dist/core/session-manager-validation.js.map +1 -1
  248. package/dist/core/session-manager.d.ts +1 -1
  249. package/dist/core/session-manager.d.ts.map +1 -1
  250. package/dist/core/session-manager.js +1 -1
  251. package/dist/core/session-manager.js.map +1 -1
  252. package/dist/core/settings-manager-basic-accessors.d.ts +7 -0
  253. package/dist/core/settings-manager-basic-accessors.d.ts.map +1 -1
  254. package/dist/core/settings-manager-basic-accessors.js +35 -0
  255. package/dist/core/settings-manager-basic-accessors.js.map +1 -1
  256. package/dist/core/settings-manager-resource-accessors.d.ts +3 -0
  257. package/dist/core/settings-manager-resource-accessors.d.ts.map +1 -1
  258. package/dist/core/settings-manager-resource-accessors.js +16 -0
  259. package/dist/core/settings-manager-resource-accessors.js.map +1 -1
  260. package/dist/core/settings-types.d.ts +8 -2
  261. package/dist/core/settings-types.d.ts.map +1 -1
  262. package/dist/core/settings-types.js.map +1 -1
  263. package/dist/core/slash-commands.d.ts +1 -0
  264. package/dist/core/slash-commands.d.ts.map +1 -1
  265. package/dist/core/slash-commands.js +1 -1
  266. package/dist/core/slash-commands.js.map +1 -1
  267. package/dist/core/summarization-retry.d.ts +11 -0
  268. package/dist/core/summarization-retry.d.ts.map +1 -0
  269. package/dist/core/summarization-retry.js +21 -0
  270. package/dist/core/summarization-retry.js.map +1 -0
  271. package/dist/core/tools/read.js +1 -1
  272. package/dist/core/tools/read.js.map +1 -1
  273. package/dist/core/usage-totals.d.ts +18 -0
  274. package/dist/core/usage-totals.d.ts.map +1 -0
  275. package/dist/core/usage-totals.js +40 -0
  276. package/dist/core/usage-totals.js.map +1 -0
  277. package/dist/extensions/index.d.ts +3 -0
  278. package/dist/extensions/index.d.ts.map +1 -0
  279. package/dist/extensions/index.js +5 -0
  280. package/dist/extensions/index.js.map +1 -0
  281. package/dist/extensions/llama/client.d.ts +61 -0
  282. package/dist/extensions/llama/client.d.ts.map +1 -0
  283. package/dist/extensions/llama/client.js +300 -0
  284. package/dist/extensions/llama/client.js.map +1 -0
  285. package/dist/extensions/llama/huggingface-ui.d.ts +33 -0
  286. package/dist/extensions/llama/huggingface-ui.d.ts.map +1 -0
  287. package/dist/extensions/llama/huggingface-ui.js +166 -0
  288. package/dist/extensions/llama/huggingface-ui.js.map +1 -0
  289. package/dist/extensions/llama/huggingface.d.ts +23 -0
  290. package/dist/extensions/llama/huggingface.d.ts.map +1 -0
  291. package/dist/extensions/llama/huggingface.js +139 -0
  292. package/dist/extensions/llama/huggingface.js.map +1 -0
  293. package/dist/extensions/llama/index.d.ts +3 -0
  294. package/dist/extensions/llama/index.d.ts.map +1 -0
  295. package/dist/extensions/llama/index.js +208 -0
  296. package/dist/extensions/llama/index.js.map +1 -0
  297. package/dist/extensions/llama/provider.d.ts +11 -0
  298. package/dist/extensions/llama/provider.d.ts.map +1 -0
  299. package/dist/extensions/llama/provider.js +93 -0
  300. package/dist/extensions/llama/provider.js.map +1 -0
  301. package/dist/extensions/llama/ui.d.ts +42 -0
  302. package/dist/extensions/llama/ui.d.ts.map +1 -0
  303. package/dist/extensions/llama/ui.js +237 -0
  304. package/dist/extensions/llama/ui.js.map +1 -0
  305. package/dist/index-extensions.d.ts +1 -1
  306. package/dist/index-extensions.d.ts.map +1 -1
  307. package/dist/index-extensions.js.map +1 -1
  308. package/dist/index.d.ts +5 -4
  309. package/dist/index.d.ts.map +1 -1
  310. package/dist/index.js +4 -3
  311. package/dist/index.js.map +1 -1
  312. package/dist/main-first-time-setup.d.ts +6 -0
  313. package/dist/main-first-time-setup.d.ts.map +1 -0
  314. package/dist/main-first-time-setup.js +10 -0
  315. package/dist/main-first-time-setup.js.map +1 -0
  316. package/dist/main-types.d.ts +2 -2
  317. package/dist/main-types.d.ts.map +1 -1
  318. package/dist/main-types.js.map +1 -1
  319. package/dist/main.d.ts.map +1 -1
  320. package/dist/main.js +19 -7
  321. package/dist/main.js.map +1 -1
  322. package/dist/modes/interactive/chat-input-actions.d.ts.map +1 -1
  323. package/dist/modes/interactive/chat-input-actions.js +14 -2
  324. package/dist/modes/interactive/chat-input-actions.js.map +1 -1
  325. package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
  326. package/dist/modes/interactive/components/chat-session-host-events.js +16 -0
  327. package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
  328. package/dist/modes/interactive/components/config-selector-list.d.ts +6 -6
  329. package/dist/modes/interactive/components/config-selector-list.d.ts.map +1 -1
  330. package/dist/modes/interactive/components/config-selector-list.js +64 -125
  331. package/dist/modes/interactive/components/config-selector-list.js.map +1 -1
  332. package/dist/modes/interactive/components/config-selector-project-scope.d.ts +4 -0
  333. package/dist/modes/interactive/components/config-selector-project-scope.d.ts.map +1 -0
  334. package/dist/modes/interactive/components/config-selector-project-scope.js +61 -0
  335. package/dist/modes/interactive/components/config-selector-project-scope.js.map +1 -0
  336. package/dist/modes/interactive/components/config-selector.d.ts +8 -5
  337. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  338. package/dist/modes/interactive/components/config-selector.js +46 -22
  339. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  340. package/dist/modes/interactive/components/custom-entry.d.ts +16 -0
  341. package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -0
  342. package/dist/modes/interactive/components/custom-entry.js +45 -0
  343. package/dist/modes/interactive/components/custom-entry.js.map +1 -0
  344. package/dist/modes/interactive/components/first-time-setup.d.ts +24 -0
  345. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -0
  346. package/dist/modes/interactive/components/first-time-setup.js +69 -0
  347. package/dist/modes/interactive/components/first-time-setup.js.map +1 -0
  348. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  349. package/dist/modes/interactive/components/footer.js +48 -26
  350. package/dist/modes/interactive/components/footer.js.map +1 -1
  351. package/dist/modes/interactive/components/host-input-form.d.ts +2 -0
  352. package/dist/modes/interactive/components/host-input-form.d.ts.map +1 -1
  353. package/dist/modes/interactive/components/host-input-form.js +6 -3
  354. package/dist/modes/interactive/components/host-input-form.js.map +1 -1
  355. package/dist/modes/interactive/components/idle-status.d.ts +8 -0
  356. package/dist/modes/interactive/components/idle-status.d.ts.map +1 -0
  357. package/dist/modes/interactive/components/idle-status.js +13 -0
  358. package/dist/modes/interactive/components/idle-status.js.map +1 -0
  359. package/dist/modes/interactive/components/index.d.ts +3 -0
  360. package/dist/modes/interactive/components/index.d.ts.map +1 -1
  361. package/dist/modes/interactive/components/index.js +3 -0
  362. package/dist/modes/interactive/components/index.js.map +1 -1
  363. package/dist/modes/interactive/components/login-dialog.d.ts +5 -5
  364. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  365. package/dist/modes/interactive/components/login-dialog.js +14 -6
  366. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  367. package/dist/modes/interactive/components/oauth-selector.d.ts +1 -1
  368. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  369. package/dist/modes/interactive/components/oauth-selector.js +10 -6
  370. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  371. package/dist/modes/interactive/components/settings-selector-handlers.d.ts.map +1 -1
  372. package/dist/modes/interactive/components/settings-selector-handlers.js +6 -0
  373. package/dist/modes/interactive/components/settings-selector-handlers.js.map +1 -1
  374. package/dist/modes/interactive/components/settings-selector-items.d.ts.map +1 -1
  375. package/dist/modes/interactive/components/settings-selector-items.js +14 -0
  376. package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
  377. package/dist/modes/interactive/components/settings-selector-types.d.ts +4 -0
  378. package/dist/modes/interactive/components/settings-selector-types.d.ts.map +1 -1
  379. package/dist/modes/interactive/components/settings-selector-types.js.map +1 -1
  380. package/dist/modes/interactive/interactive-agent-events.js +27 -0
  381. package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
  382. package/dist/modes/interactive/interactive-auth-login.js +17 -8
  383. package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
  384. package/dist/modes/interactive/interactive-auth-routing.d.ts +2 -0
  385. package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
  386. package/dist/modes/interactive/interactive-auth-routing.js +88 -40
  387. package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
  388. package/dist/modes/interactive/interactive-autocomplete.js +6 -0
  389. package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
  390. package/dist/modes/interactive/interactive-extension-runtime.js +4 -0
  391. package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
  392. package/dist/modes/interactive/interactive-global-clear.d.ts +10 -2
  393. package/dist/modes/interactive/interactive-global-clear.d.ts.map +1 -1
  394. package/dist/modes/interactive/interactive-global-clear.js +3 -1
  395. package/dist/modes/interactive/interactive-global-clear.js.map +1 -1
  396. package/dist/modes/interactive/interactive-input-handling.js +6 -4
  397. package/dist/modes/interactive/interactive-input-handling.js.map +1 -1
  398. package/dist/modes/interactive/interactive-mode-helpers.d.ts +2 -1
  399. package/dist/modes/interactive/interactive-mode-helpers.d.ts.map +1 -1
  400. package/dist/modes/interactive/interactive-mode-helpers.js +6 -10
  401. package/dist/modes/interactive/interactive-mode-helpers.js.map +1 -1
  402. package/dist/modes/interactive/interactive-mode-surface.d.ts +11 -2
  403. package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
  404. package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
  405. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts +13 -0
  406. package/dist/modes/interactive/interactive-model-catalog-startup.d.ts.map +1 -0
  407. package/dist/modes/interactive/interactive-model-catalog-startup.js +24 -0
  408. package/dist/modes/interactive/interactive-model-catalog-startup.js.map +1 -0
  409. package/dist/modes/interactive/interactive-model-routing.js +4 -3
  410. package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
  411. package/dist/modes/interactive/interactive-queueing.js +3 -2
  412. package/dist/modes/interactive/interactive-queueing.js.map +1 -1
  413. package/dist/modes/interactive/interactive-render-chat.js +69 -12
  414. package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
  415. package/dist/modes/interactive/interactive-resource-rendering.js +1 -1
  416. package/dist/modes/interactive/interactive-resource-rendering.js.map +1 -1
  417. package/dist/modes/interactive/interactive-selectors.js +10 -0
  418. package/dist/modes/interactive/interactive-selectors.js.map +1 -1
  419. package/dist/modes/interactive/interactive-session-routing.js +3 -0
  420. package/dist/modes/interactive/interactive-session-routing.js.map +1 -1
  421. package/dist/modes/interactive/interactive-slash-commands.js +14 -0
  422. package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
  423. package/dist/modes/interactive/interactive-startup.d.ts.map +1 -1
  424. package/dist/modes/interactive/interactive-startup.js +4 -7
  425. package/dist/modes/interactive/interactive-startup.js.map +1 -1
  426. package/dist/modes/interactive/interactive-summarization-retry-events.d.ts +8 -0
  427. package/dist/modes/interactive/interactive-summarization-retry-events.d.ts.map +1 -0
  428. package/dist/modes/interactive/interactive-summarization-retry-events.js +40 -0
  429. package/dist/modes/interactive/interactive-summarization-retry-events.js.map +1 -0
  430. package/dist/modes/interactive/login-provider-options.d.ts +21 -0
  431. package/dist/modes/interactive/login-provider-options.d.ts.map +1 -0
  432. package/dist/modes/interactive/login-provider-options.js +51 -0
  433. package/dist/modes/interactive/login-provider-options.js.map +1 -0
  434. package/dist/modes/interactive-engine/engine-input-form.d.ts +1 -1
  435. package/dist/modes/interactive-engine/engine-input-form.d.ts.map +1 -1
  436. package/dist/modes/interactive-engine/engine-input-form.js +10 -2
  437. package/dist/modes/interactive-engine/engine-input-form.js.map +1 -1
  438. package/dist/modes/interactive-engine/input-form-host.d.ts.map +1 -1
  439. package/dist/modes/interactive-engine/input-form-host.js +7 -2
  440. package/dist/modes/interactive-engine/input-form-host.js.map +1 -1
  441. package/dist/modes/interactive-engine/isolated-runtime.js +1 -1
  442. package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
  443. package/dist/modes/interactive-engine/protocol.d.ts +5 -0
  444. package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
  445. package/dist/modes/interactive-engine/protocol.js +9 -1
  446. package/dist/modes/interactive-engine/protocol.js.map +1 -1
  447. package/dist/modes/interactive-engine/remote-model-catalog.d.ts +2 -0
  448. package/dist/modes/interactive-engine/remote-model-catalog.d.ts.map +1 -1
  449. package/dist/modes/interactive-engine/remote-model-catalog.js +33 -0
  450. package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
  451. package/dist/modes/rpc/rpc-client-api.d.ts +4 -1
  452. package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
  453. package/dist/modes/rpc/rpc-client-api.js +18 -0
  454. package/dist/modes/rpc/rpc-client-api.js.map +1 -1
  455. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  456. package/dist/modes/rpc/rpc-client.js +1 -0
  457. package/dist/modes/rpc/rpc-client.js.map +1 -1
  458. package/dist/modes/rpc/rpc-command-handler.d.ts +5 -1
  459. package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
  460. package/dist/modes/rpc/rpc-command-handler.js +67 -2
  461. package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
  462. package/dist/modes/rpc/rpc-input-scheduler.d.ts.map +1 -1
  463. package/dist/modes/rpc/rpc-input-scheduler.js +1 -0
  464. package/dist/modes/rpc/rpc-input-scheduler.js.map +1 -1
  465. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  466. package/dist/modes/rpc/rpc-mode.js +1 -0
  467. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  468. package/dist/modes/rpc/rpc-types.d.ts +42 -0
  469. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  470. package/dist/modes/rpc/rpc-types.js.map +1 -1
  471. package/dist/package-manager-cli.d.ts +3 -3
  472. package/dist/package-manager-cli.d.ts.map +1 -1
  473. package/dist/package-manager-cli.js +55 -51
  474. package/dist/package-manager-cli.js.map +1 -1
  475. package/dist/self-update-plan.d.ts +12 -0
  476. package/dist/self-update-plan.d.ts.map +1 -0
  477. package/dist/self-update-plan.js +42 -0
  478. package/dist/self-update-plan.js.map +1 -0
  479. package/dist/utils/clipboard-native.d.ts +1 -0
  480. package/dist/utils/clipboard-native.d.ts.map +1 -1
  481. package/dist/utils/clipboard-native.js.map +1 -1
  482. package/dist/utils/clipboard.d.ts +3 -0
  483. package/dist/utils/clipboard.d.ts.map +1 -1
  484. package/dist/utils/clipboard.js +10 -0
  485. package/dist/utils/clipboard.js.map +1 -1
  486. package/dist/utils/version-check.d.ts +1 -0
  487. package/dist/utils/version-check.d.ts.map +1 -1
  488. package/dist/utils/version-check.js +3 -3
  489. package/dist/utils/version-check.js.map +1 -1
  490. package/docs/docs.json +2 -1
  491. package/docs/extensions.md +59 -7
  492. package/docs/json.md +7 -1
  493. package/docs/keybindings.md +3 -0
  494. package/docs/llama-cpp.md +70 -0
  495. package/docs/models.md +8 -3
  496. package/docs/packages.md +4 -2
  497. package/docs/prompt-templates.md +1 -0
  498. package/docs/providers.md +41 -3
  499. package/docs/rpc.md +49 -0
  500. package/docs/sdk.md +21 -0
  501. package/docs/settings.md +19 -3
  502. package/docs/tui.md +2 -2
  503. package/docs/workflows.md +6 -6
  504. package/examples/extensions/README.md +1 -1
  505. package/examples/extensions/sandbox/package-lock.json +3 -3
  506. package/npm-shrinkwrap.json +36 -36
  507. package/package.json +5 -5
@@ -10,6 +10,7 @@ import {
10
10
  import type { DurableWorkflowBackend } from "./backend.js";
11
11
  import {
12
12
  listOpenableCompletedWorkflows,
13
+ completedWorkflowRunSnapshots,
13
14
  resolveCompletedWorkflow,
14
15
  } from "./completed-catalog.js";
15
16
  import type { ResumableWorkflowEntry } from "./types.js";
@@ -69,10 +70,14 @@ export function openCompletedDurableWorkflow(
69
70
  `Workflow ${resolved.snapshot.id.slice(0, 8)} is already active in this session; attach with /workflow connect ${resolved.snapshot.id.slice(0, 8)} instead.`,
70
71
  );
71
72
  }
72
- const snapshot = resolved.snapshot;
73
- if (existing !== undefined) deps.store.removeRun(existing.id);
74
- deps.store.recordRunStart(snapshot);
75
- registerCompletedChatHandles(snapshot, deps);
73
+ const snapshots = completedWorkflowRunSnapshots(deps.durableBackend, resolved.entry);
74
+ const snapshot = snapshots.find((run) => run.id === resolved.snapshot.id) ?? resolved.snapshot;
75
+ for (const restored of snapshots) {
76
+ const previous = deps.store.runs().find((run) => run.id === restored.id);
77
+ if (previous !== undefined) deps.store.removeRun(previous.id);
78
+ deps.store.recordRunStart(restored);
79
+ registerCompletedChatHandles(restored, deps);
80
+ }
76
81
  return {
77
82
  ok: true,
78
83
  runId: snapshot.id,
@@ -62,12 +62,7 @@ export interface DbosCheckpointEnvelope extends WorkflowSerializableObject {
62
62
  readonly topology?: WorkflowSerializableValue;
63
63
  }
64
64
 
65
- /**
66
- * Stage-kind checkpoints from older session-timing writers may omit
67
- * topology. The current format requires it, so default at every write
68
- * boundary — persisted records must match the normalized in-memory mirror or
69
- * a fresh process would reject them as foreign.
70
- */
65
+ /** Add a compatibility root topology when a legacy/output-only writer omits it. */
71
66
  export function withCurrentStageTopology(cp: DurableCheckpoint): DurableCheckpoint {
72
67
  if (cp.kind !== "stage" || cp.topology !== undefined) return cp;
73
68
  return {
@@ -104,7 +99,12 @@ export function encodeCheckpoint(checkpoint: DurableCheckpoint): DbosCheckpointE
104
99
  ...base,
105
100
  name: s.name,
106
101
  replayKey: s.replayKey,
107
- ...(s.topology !== undefined ? { topology: { version: s.topology.version, stageId: s.topology.stageId, parentIds: [...s.topology.parentIds] } } : {}),
102
+ ...(s.topology !== undefined ? { topology: {
103
+ version: s.topology.version,
104
+ stageId: s.topology.stageId,
105
+ parentIds: [...s.topology.parentIds],
106
+ ...(s.topology.run !== undefined ? { run: { ...s.topology.run } } : {}),
107
+ } } : {}),
108
108
  ...(s.sessionId !== undefined ? { sessionId: s.sessionId } : {}),
109
109
  ...(s.sessionFile !== undefined ? { sessionFile: s.sessionFile } : {}),
110
110
  ...(s.startedAt !== undefined ? { startedAt: s.startedAt } : {}),
@@ -227,7 +227,30 @@ function stageTopology(value: WorkflowSerializableValue | undefined): DurableSta
227
227
  const record = value as Record<string, WorkflowSerializableValue>;
228
228
  if (record["version"] !== DURABLE_STAGE_TOPOLOGY_VERSION
229
229
  || typeof record["stageId"] !== "string" || !isStringArray(record["parentIds"])) return undefined;
230
- return { version: DURABLE_STAGE_TOPOLOGY_VERSION, stageId: record["stageId"], parentIds: record["parentIds"] };
230
+ const run = stageRunTopology(record["run"]);
231
+ if (record["run"] !== undefined && run === undefined) return undefined;
232
+ return {
233
+ version: DURABLE_STAGE_TOPOLOGY_VERSION,
234
+ stageId: record["stageId"],
235
+ parentIds: record["parentIds"],
236
+ ...(run !== undefined ? { run } : {}),
237
+ };
238
+ }
239
+
240
+ function stageRunTopology(value: WorkflowSerializableValue | undefined): NonNullable<DurableStageTopology["run"]> | undefined {
241
+ if (typeof value !== "object" || value === null || Array.isArray(value)) return undefined;
242
+ const run = value as Record<string, WorkflowSerializableValue>;
243
+ if (typeof run["runId"] !== "string" || typeof run["runName"] !== "string") return undefined;
244
+ for (const key of ["parentRunId", "parentStageId", "rootRunId"] as const) {
245
+ if (run[key] !== undefined && typeof run[key] !== "string") return undefined;
246
+ }
247
+ return {
248
+ runId: run["runId"],
249
+ runName: run["runName"],
250
+ ...(typeof run["parentRunId"] === "string" ? { parentRunId: run["parentRunId"] } : {}),
251
+ ...(typeof run["parentStageId"] === "string" ? { parentStageId: run["parentStageId"] } : {}),
252
+ ...(typeof run["rootRunId"] === "string" ? { rootRunId: run["rootRunId"] } : {}),
253
+ };
231
254
  }
232
255
 
233
256
  function isModelAttempts(value: WorkflowSerializableValue | undefined): boolean {
@@ -18,7 +18,7 @@
18
18
  * top-level workflow id."
19
19
  */
20
20
 
21
- import type { WorkflowInputValues } from "../shared/types.js";
21
+ import type { WorkflowDefinition, WorkflowInputValues } from "../shared/types.js";
22
22
  import type { WorkflowRegistry } from "../workflows/registry.js";
23
23
  import type { RunOpts } from "../runs/foreground/executor-types.js";
24
24
  import { launchDetachedUntilStartup, workflowStartupFailureMessage } from "../runs/background/startup-admission.js";
@@ -44,6 +44,8 @@ export interface ResumeDurableDeps {
44
44
  readonly baseRunOpts: RunOpts;
45
45
  /** Durable backend override (defaults to the global singleton). */
46
46
  readonly durableBackend?: DurableWorkflowBackend;
47
+ /** Resolve a definition from its original invocation directory after restart. */
48
+ readonly resolveDefinition?: (name: string, cwd: string | undefined) => Promise<WorkflowDefinition | undefined>;
47
49
  /** Job tracker used by the detached resume launch. */
48
50
  readonly jobs?: JobTracker;
49
51
  }
@@ -146,7 +148,9 @@ export async function resumeDurableWorkflow(
146
148
  return { ok: false, reason: "not_resumable", message: `Workflow ${resolved.workflowId.slice(0, 8)} is ${handle.status}, not resumable.` };
147
149
  }
148
150
 
149
- const def = deps.registry.get(handle.name);
151
+ const def = handle.invocationCwd === undefined
152
+ ? deps.registry.get(handle.name)
153
+ : await deps.resolveDefinition?.(handle.name, handle.invocationCwd) ?? deps.registry.get(handle.name);
150
154
  if (def === undefined) {
151
155
  return { ok: false, reason: "workflow_not_found", message: `Workflow definition not found: ${handle.name}` };
152
156
  }
@@ -9,7 +9,7 @@ import { durableHash } from "./backend.js";
9
9
  import { recordCheckpointDurably } from "./tool-primitive.js";
10
10
  import { elapsedStageMs } from "../shared/timing.js";
11
11
  import { RESUME_CONTINUATION_PROMPT } from "../shared/resume-continuation.js";
12
- import { DURABLE_STAGE_TOPOLOGY_VERSION, type DurableStageCheckpoint } from "./types.js";
12
+ import { DURABLE_STAGE_TOPOLOGY_VERSION, type DurableStageCheckpoint, type DurableStageRunTopology } from "./types.js";
13
13
  export type DurableCompletedStageCheckpoint = DurableStageCheckpoint & { readonly output: WorkflowSerializableValue };
14
14
 
15
15
  export interface DurableStageDeps {
@@ -18,13 +18,14 @@ export interface DurableStageDeps {
18
18
  readonly nextCheckpointId: () => string;
19
19
  readonly nextReplayKey: (stageName: string) => string;
20
20
  readonly replayKeyForCompletedStage?: (stage: StageSnapshot) => string | undefined;
21
+ readonly runTopology?: DurableStageRunTopology;
21
22
  readonly now?: () => number;
22
23
  }
23
24
 
24
25
  export async function recordStageCheckpoint(deps: DurableStageDeps, stage: StageSnapshot): Promise<boolean> {
25
26
  if (stage.status !== "completed") return false;
26
27
  const replayKey = deps.replayKeyForCompletedStage?.(stage) ?? stage.replayKey ?? deps.nextReplayKey(stage.name);
27
- const metadata = checkpointMetadata(stage);
28
+ const metadata = durableStageCheckpointMetadata(stage, deps.runTopology);
28
29
  const hasExistingOutput = deps.backend.getStageOutput(deps.workflowId, replayKey) !== undefined;
29
30
  const checkpoint: DurableStageCheckpoint = hasExistingOutput
30
31
  ? {
@@ -62,13 +63,17 @@ function stageSessionDurationBucket(durationMs: number | undefined): number {
62
63
  return Math.floor((durationMs ?? 0) / STAGE_SESSION_DURATION_BUCKET_MS);
63
64
  }
64
65
 
65
- export async function recordStageSessionCheckpoint(deps: DurableStageDeps, stage: StageSnapshot): Promise<boolean> {
66
+ export async function recordStageSessionCheckpoint(
67
+ deps: DurableStageDeps,
68
+ stage: StageSnapshot,
69
+ options?: { readonly force?: boolean },
70
+ ): Promise<boolean> {
66
71
  const replayKey = deps.replayKeyForCompletedStage?.(stage) ?? stage.replayKey ?? deps.nextReplayKey(stage.name);
67
72
  if (stage.sessionFile === undefined) return false;
68
73
  const checkpointNow = deps.now?.() ?? Date.now();
69
74
  const durationMs = elapsedStageMs(stage, checkpointNow) ?? 0;
70
75
  const current = deps.backend.getStageSession(deps.workflowId, replayKey);
71
- if (current !== undefined
76
+ if (options?.force !== true && current !== undefined
72
77
  && current.sessionId === stage.sessionId
73
78
  && current.sessionFile === stage.sessionFile
74
79
  && current.startedAt === stage.startedAt
@@ -79,6 +84,7 @@ export async function recordStageSessionCheckpoint(deps: DurableStageDeps, stage
79
84
  checkpointId: stageSessionCheckpointId(replayKey, stage, durationMs),
80
85
  name: stage.name,
81
86
  replayKey,
87
+ ...durableStageCheckpointMetadata(stage, deps.runTopology),
82
88
  ...(stage.sessionId !== undefined ? { sessionId: stage.sessionId } : {}),
83
89
  sessionFile: stage.sessionFile,
84
90
  ...(stage.startedAt !== undefined ? { startedAt: stage.startedAt } : {}),
@@ -256,9 +262,17 @@ function stageOutput(stage: StageSnapshot): WorkflowSerializableValue {
256
262
  return { status: stage.status, stageId: stage.id };
257
263
  }
258
264
 
259
- function checkpointMetadata(stage: StageSnapshot): Partial<DurableStageCheckpoint> {
265
+ export function durableStageCheckpointMetadata(
266
+ stage: StageSnapshot,
267
+ run?: DurableStageRunTopology,
268
+ ): Partial<DurableStageCheckpoint> {
260
269
  return {
261
- topology: { version: DURABLE_STAGE_TOPOLOGY_VERSION, stageId: stage.id, parentIds: [...stage.parentIds] },
270
+ topology: {
271
+ version: DURABLE_STAGE_TOPOLOGY_VERSION,
272
+ stageId: stage.id,
273
+ parentIds: [...stage.parentIds],
274
+ ...(run !== undefined ? { run: { ...run } } : {}),
275
+ },
262
276
  ...(stage.startedAt !== undefined ? { startedAt: stage.startedAt } : {}),
263
277
  ...(stage.endedAt !== undefined ? { endedAt: stage.endedAt } : {}),
264
278
  ...(stage.durationMs !== undefined ? { durationMs: stage.durationMs } : {}),
@@ -311,6 +325,7 @@ function mergeCheckpointHydrationMetadata(
311
325
  if (checkpoints.length === 0) return replayValueCheckpoint;
312
326
  return {
313
327
  ...replayValueCheckpoint,
328
+ ...preferredHydrationTopology(replayValueCheckpoint, checkpoints),
314
329
  ...(replayValueCheckpoint.startedAt === undefined ? metadataValue(checkpoints, "startedAt") : {}),
315
330
  ...(replayValueCheckpoint.endedAt === undefined ? metadataValue(checkpoints, "endedAt") : {}),
316
331
  ...(replayValueCheckpoint.durationMs === undefined ? metadataValue(checkpoints, "durationMs") : {}),
@@ -323,6 +338,19 @@ function mergeCheckpointHydrationMetadata(
323
338
  ...(replayValueCheckpoint.modelAttempts === undefined ? metadataValue(checkpoints, "modelAttempts") : {}),
324
339
  };
325
340
  }
341
+ function preferredHydrationTopology(
342
+ replayValueCheckpoint: DurableCompletedStageCheckpoint,
343
+ checkpoints: readonly DurableStageCheckpoint[],
344
+ ): Pick<DurableStageCheckpoint, "topology"> | Record<string, never> {
345
+ for (let index = checkpoints.length - 1; index >= 0; index -= 1) {
346
+ const topology = checkpoints[index]?.topology;
347
+ if (topology?.run !== undefined) return { topology };
348
+ }
349
+ return replayValueCheckpoint.topology === undefined
350
+ ? metadataValue(checkpoints, "topology")
351
+ : {};
352
+ }
353
+
326
354
 
327
355
  function metadataValue<K extends keyof DurableStageCheckpoint>(
328
356
  checkpoints: readonly DurableStageCheckpoint[],
@@ -390,6 +418,7 @@ export function recordCachedStageIntoStore(
390
418
  id: stageId, name, status: "completed", parentIds: parentIds !== undefined ? Object.freeze([...parentIds]) : [],
391
419
  startedAt: checkpoint?.startedAt ?? endedAt, endedAt, durationMs: checkpoint?.durationMs ?? 0, result,
392
420
  replayKey, replayed: true, skippedReason: "durable checkpoint replay", toolEvents: [], attachable: false,
421
+ ...(checkpoint?.topology !== undefined ? { replayedFromStageId: checkpoint.topology.stageId } : {}),
393
422
  ...(workflowChild !== undefined ? { workflowChild } : {}),
394
423
  ...(checkpoint?.sessionId !== undefined ? { sessionId: checkpoint.sessionId } : {}),
395
424
  ...(checkpoint?.sessionFile !== undefined ? { sessionFile: checkpoint.sessionFile } : {}),
@@ -420,10 +449,19 @@ export function recordCachedStageWithTracker(
420
449
  ): void {
421
450
  const stageId = cachedStageId(runId, replayKey);
422
451
  let parentIds = tracker.onSpawn(stageId, name);
423
- const scopeParentIds = stageFailFastScope?.parentIds ?? [];
424
- if (stageFailFastScope !== undefined) {
425
- tracker.replaceParents(stageId, scopeParentIds);
426
- parentIds = [...scopeParentIds];
452
+ const sourceParents = checkpoint.topology?.run?.runId === runId
453
+ ? checkpoint.topology.parentIds
454
+ : undefined;
455
+ const run = store.runs().find((candidate) => candidate.id === runId);
456
+ const restored = sourceParents?.map((sourceId) =>
457
+ run?.stages.find((stage) => stage.replayedFromStageId === sourceId)?.id
458
+ );
459
+ if (restored !== undefined && restored.every((id): id is string => id !== undefined)) {
460
+ parentIds = restored;
461
+ tracker.replaceParents(stageId, parentIds);
462
+ } else if (stageFailFastScope !== undefined) {
463
+ parentIds = [...(stageFailFastScope.parentIds ?? [])];
464
+ tracker.replaceParents(stageId, parentIds);
427
465
  }
428
466
  recordCachedStageIntoStore(store, runId, name, replayKey, checkpoint.output, completedStageReplayKeys, parentIds, checkpoint);
429
467
  tracker.onSettle(stageId);
@@ -110,11 +110,22 @@ export interface DurableUiCheckpoint {
110
110
 
111
111
  export const DURABLE_STAGE_TOPOLOGY_VERSION = 1 as const;
112
112
 
113
+ /** Durable ownership metadata needed to rebuild nested workflow runs. */
114
+ export interface DurableStageRunTopology {
115
+ readonly runId: string;
116
+ readonly runName: string;
117
+ readonly parentRunId?: string;
118
+ readonly parentStageId?: string;
119
+ readonly rootRunId?: string;
120
+ }
121
+
113
122
  /** Versioned source-stage lineage used to reconstruct completed DAGs after restart. */
114
123
  export interface DurableStageTopology {
115
124
  readonly version: typeof DURABLE_STAGE_TOPOLOGY_VERSION;
116
125
  readonly stageId: string;
117
126
  readonly parentIds: readonly string[];
127
+ /** Owning run and boundary linkage for nested workflow graph reconstruction. */
128
+ readonly run?: DurableStageRunTopology;
118
129
  }
119
130
 
120
131
  /** A `ctx.stage(...)` / `ctx.task(...)` durable checkpoint or resumable session marker. */
@@ -1,11 +1,12 @@
1
1
  import type { RunSnapshot, StageSnapshot } from "../shared/store-types.js";
2
2
  import { recordStageSessionCheckpoint, type DurableStageDeps } from "../durable/stage-primitive.js";
3
+ import type { StageSessionCheckpointOptions } from "../runs/foreground/executor-types.js";
3
4
  import { recordRunTimingCheckpoint } from "../durable/run-timing.js";
4
5
 
5
6
  export interface DurableStageSessionRecorderInput {
6
7
  readonly runId: string;
7
8
  readonly deps: DurableStageDeps;
8
- readonly onStageSession?: (runId: string, snapshot: StageSnapshot) => unknown;
9
+ readonly onStageSession?: (runId: string, snapshot: StageSnapshot, options?: StageSessionCheckpointOptions) => unknown;
9
10
  /**
10
11
  * Live root-run snapshot. When present, stage-session checkpoints also
11
12
  * refresh the debounced run-level elapsed record so a durable resume can
@@ -17,15 +18,14 @@ export interface DurableStageSessionRecorderInput {
17
18
 
18
19
  export function createDurableStageSessionRecorder(
19
20
  input: DurableStageSessionRecorderInput,
20
- ): (stageRunId: string, snapshot: StageSnapshot) => void {
21
- return (stageRunId, snapshot) => {
21
+ ): (stageRunId: string, snapshot: StageSnapshot, options?: StageSessionCheckpointOptions) => Promise<void> {
22
+ return async (stageRunId, snapshot, options) => {
22
23
  if (stageRunId === input.runId) {
23
- void recordStageSessionCheckpoint(input.deps, snapshot).then(() => {
24
- if (input.runSnapshot !== undefined) {
25
- recordRunTimingCheckpoint(input.deps.backend, input.runSnapshot, { debounce: true });
26
- }
27
- }).catch(() => {});
24
+ await recordStageSessionCheckpoint(input.deps, snapshot, { force: options?.forceDurable === true });
25
+ if (input.runSnapshot !== undefined) {
26
+ recordRunTimingCheckpoint(input.deps.backend, input.runSnapshot, { debounce: options?.forceDurable !== true });
27
+ }
28
28
  }
29
- void input.onStageSession?.(stageRunId, snapshot);
29
+ await input.onStageSession?.(stageRunId, snapshot, options);
30
30
  };
31
31
  }
@@ -0,0 +1,89 @@
1
+ import { durableHash, type DurableWorkflowBackend } from "../durable/backend.js";
2
+ import { durableNestedRunSnapshots } from "../durable/completed-catalog.js";
3
+ import {
4
+ durableStageCheckpointMetadata,
5
+ recordCachedStageWithTracker,
6
+ type DurableCompletedStageCheckpoint,
7
+ type DurableStageDeps,
8
+ } from "../durable/stage-primitive.js";
9
+ import type { DurableStageRunTopology } from "../durable/types.js";
10
+ import type { GraphFrontierTracker } from "./graph-inference.js";
11
+ import type { RunSnapshot } from "../shared/store-types.js";
12
+ import type { Store } from "../shared/store.js";
13
+ import type { ParallelFailFastScope } from "../runs/foreground/executor-types.js";
14
+
15
+ export function durableRunTopology(run: RunSnapshot): DurableStageRunTopology {
16
+ return {
17
+ runId: run.id,
18
+ runName: run.name,
19
+ ...(run.parentRunId !== undefined ? { parentRunId: run.parentRunId } : {}),
20
+ ...(run.parentStageId !== undefined ? { parentStageId: run.parentStageId } : {}),
21
+ ...(run.rootRunId !== undefined ? { rootRunId: run.rootRunId } : {}),
22
+ };
23
+ }
24
+
25
+ export function createDurableStageDeps(input: {
26
+ readonly backend: DurableWorkflowBackend;
27
+ readonly run: RunSnapshot;
28
+ readonly nextCheckpointId: () => string;
29
+ readonly nextReplayKey: (stageName: string) => string;
30
+ readonly completedReplayKeys: Map<string, string>;
31
+ }): DurableStageDeps {
32
+ return {
33
+ workflowId: input.run.id,
34
+ backend: input.backend,
35
+ nextCheckpointId: input.nextCheckpointId,
36
+ nextReplayKey: input.nextReplayKey,
37
+ replayKeyForCompletedStage: (stage) => input.completedReplayKeys.get(stage.id),
38
+ runTopology: durableRunTopology(input.run),
39
+ };
40
+ }
41
+
42
+ export function createDurableCachedStageRecorder(input: {
43
+ readonly store: Store;
44
+ readonly tracker: GraphFrontierTracker;
45
+ readonly run: RunSnapshot;
46
+ readonly backend: DurableWorkflowBackend;
47
+ readonly rootBackend: DurableWorkflowBackend;
48
+ readonly completedStageReplayKeys: Map<string, string>;
49
+ }): {
50
+ readonly record: (name: string, replayKey: string, checkpoint: DurableCompletedStageCheckpoint, scope?: ParallelFailFastScope) => void;
51
+ readonly metadata: (replayKey: string) => Partial<DurableCompletedStageCheckpoint>;
52
+ } {
53
+ return {
54
+ record(name, replayKey, checkpoint, scope): void {
55
+ recordCachedStageWithTracker(
56
+ input.store, input.tracker, input.run.id, name, replayKey, checkpoint,
57
+ input.completedStageReplayKeys, scope,
58
+ );
59
+ const stage = input.store.runs().find((run) => run.id === input.run.id)?.stages
60
+ .find((candidate) => candidate.replayKey === replayKey);
61
+ if (stage !== undefined) {
62
+ input.backend.recordCheckpoint({
63
+ kind: "stage", workflowId: input.run.id,
64
+ checkpointId: `stage-replay-meta:${durableHash({ replayKey, stageId: stage.id, parentIds: stage.parentIds })}`,
65
+ name, replayKey, completedAt: Date.now(),
66
+ ...durableStageCheckpointMetadata(stage, durableRunTopology(input.run)),
67
+ });
68
+ }
69
+ if (workflowChildRunId(checkpoint) === undefined) return;
70
+ const durableRootId = input.run.rootRunId ?? input.run.id;
71
+ for (const childRun of durableNestedRunSnapshots(input.rootBackend, durableRootId)) {
72
+ if (!input.store.runs().some((candidate) => candidate.id === childRun.id)) input.store.recordRunStart(childRun);
73
+ }
74
+ },
75
+ metadata(replayKey) {
76
+ const stage = input.run.stages.find((candidate) => candidate.replayKey === replayKey);
77
+ return stage === undefined ? {} : durableStageCheckpointMetadata(stage, durableRunTopology(input.run));
78
+ },
79
+ };
80
+ }
81
+
82
+ function workflowChildRunId(checkpoint: DurableCompletedStageCheckpoint): string | undefined {
83
+ const output = checkpoint.output;
84
+ if (typeof output !== "object" || output === null || Array.isArray(output)) return undefined;
85
+ const record = output as Record<string, import("../shared/types.js").WorkflowSerializableValue>;
86
+ const runId = record["runId"];
87
+ const workflow = record["workflow"];
88
+ return typeof runId === "string" && typeof workflow === "string" ? runId : undefined;
89
+ }
@@ -39,14 +39,14 @@ import { isWorkflowDefinition, workflowDefinitionRequirementMessage } from "../r
39
39
  import { getDurableBackend } from "../durable/factory.js";
40
40
  import { classifyReturnedRunStatus } from "./run-returned-status.js";
41
41
  import { createToolPrimitive, createCheckpointIdGenerator } from "../durable/tool-primitive.js";
42
- import { createDurableStagePrimitive, createDurableTaskPrimitive, recordStageCheckpoint, createStageReplayKeyGenerator, recordCachedStageWithTracker } from "../durable/stage-primitive.js";
43
- import { inheritedRunElapsedMs } from "../durable/run-timing.js";
44
- import type { DurableCompletedStageCheckpoint } from "../durable/stage-primitive.js";
42
+ import { createDurableStagePrimitive, createDurableTaskPrimitive, recordStageCheckpoint, createStageReplayKeyGenerator } from "../durable/stage-primitive.js";
43
+ import { inheritedRunElapsedMs, recordRunTimingCheckpoint } from "../durable/run-timing.js";
45
44
  import { createDurableChildWorkflowPrimitive } from "../durable/child-primitive.js";
46
45
  import { ScopedDurableBackend, type DurableScope } from "../durable/scoped-backend.js";
47
46
  import { finalizeDurableTerminalStatus } from "./run-durable-finalize.js";
48
47
  import { createDurableStageSessionRecorder } from "./run-durable-stage-session.js";
49
48
  import type { DurableWorkflowBackend } from "../durable/backend.js";
49
+ import { createDurableCachedStageRecorder, createDurableStageDeps } from "./run-durable-topology.js";
50
50
 
51
51
  type WorkflowRunInputArgument = Parameters<typeof resolveAndValidateInputs>[1];
52
52
 
@@ -201,13 +201,11 @@ export async function run<
201
201
  const checkpointIdGenerator = createCheckpointIdGenerator();
202
202
  const stageReplayKeyGenerator = createStageReplayKeyGenerator(runId);
203
203
  const completedStageReplayKeys = new Map<string, string>();
204
- const durableStageDeps = {
205
- workflowId: runId,
206
- backend: durableBackend,
207
- nextCheckpointId: checkpointIdGenerator,
208
- nextReplayKey: stageReplayKeyGenerator,
209
- replayKeyForCompletedStage: (stage: StageSnapshot) => completedStageReplayKeys.get(stage.id),
210
- };
204
+ const durableStageDeps = createDurableStageDeps({
205
+ backend: durableBackend, run: runSnapshot,
206
+ nextCheckpointId: checkpointIdGenerator, nextReplayKey: stageReplayKeyGenerator,
207
+ completedReplayKeys: completedStageReplayKeys,
208
+ });
211
209
  const userOnStageEnd = opts.onStageEnd;
212
210
  const durableOnStageEnd = async (stageRunId: string, snapshot: StageSnapshot): Promise<void> => {
213
211
  if (stageRunId === runId && snapshot.status === "completed") {
@@ -340,18 +338,21 @@ export async function run<
340
338
 
341
339
  // Durable ctx.ui wrapper — caches completed user responses so a resumed workflow does not re-ask answered prompts.
342
340
  const durableUiDeps = { workflowId: runId, backend: durableBackend, nextCheckpointId: checkpointIdGenerator };
343
- const recordCachedStage = (name: string, replayKey: string, checkpoint: DurableCompletedStageCheckpoint): void =>
344
- recordCachedStageWithTracker(activeStore, tracker, runId, name, replayKey, checkpoint, completedStageReplayKeys);
341
+ const cachedStage = createDurableCachedStageRecorder({
342
+ store: activeStore, tracker, run: runSnapshot, backend: durableBackend,
343
+ rootBackend, completedStageReplayKeys,
344
+ });
345
345
  const durableTask = createDurableTaskPrimitive({
346
346
  workflowId: runId, backend: durableBackend,
347
347
  nextReplayKey: (stageName) => stageReplayKeyGenerator(stageName), task: taskRunners.task,
348
- recordCachedTask: (name, replayKey, checkpoint, scope) =>
349
- recordCachedStageWithTracker(activeStore, tracker, runId, name, replayKey, checkpoint, completedStageReplayKeys, scope),
348
+ recordCachedTask: cachedStage.record,
350
349
  });
351
350
  const durableWorkflow = createDurableChildWorkflowPrimitive({
352
351
  workflowId: runId, rootWorkflowId: opts.parentRun?.rootRunId ?? runId, backend: durableBackend,
353
352
  nextReplayKey: nextDurableChildReplayKey, setChildDurableScope: (scope) => { pendingChildDurableScope = scope; },
354
- recordCachedStage, workflow,
353
+ recordCachedStage: cachedStage.record,
354
+ checkpointMetadata: cachedStage.metadata,
355
+ workflow,
355
356
  });
356
357
  const ctx: WorkflowRunContext<TInputs> = {
357
358
  inputs: resolvedInputs as TInputs,
@@ -380,7 +381,7 @@ export async function run<
380
381
  workflowId: runId,
381
382
  backend: durableBackend,
382
383
  nextReplayKey: (stageName) => stageReplayKeyGenerator(stageName),
383
- recordCachedStage,
384
+ recordCachedStage: cachedStage.record,
384
385
  stage: (name, options, replayKey) => {
385
386
  const stage = runtime.stage(name, options);
386
387
  const stageId = activeStore.runs().find((r) => r.id === runId)?.stages.at(-1)?.id;
@@ -429,6 +430,7 @@ export async function run<
429
430
  const returned = classifyReturnedRunStatus(result, runSnapshot);
430
431
  const recorded = activeStore.recordRunEnd(runId, returned.status, result, returned.error, returned.metadata);
431
432
  appendRunEndWhenRecorded(opts.persistence, recorded, { runId, status: returned.status, result, ...(returned.error !== undefined ? { error: returned.error } : {}), ...(returned.metadata ?? {}), ...(runSnapshot.endedAt !== undefined ? { endedAt: runSnapshot.endedAt } : {}), ...(runSnapshot.durationMs !== undefined ? { durationMs: runSnapshot.durationMs } : {}), ts: Date.now() });
433
+ if (opts.parentRun === undefined) recordRunTimingCheckpoint(durableBackend, runSnapshot);
432
434
  durableBackend.setWorkflowStatus(runId, returned.status, undefined, returned.metadata?.resumable);
433
435
  await durableBackend.flush();
434
436
  return reconcileTerminalRunResult(runId, runSnapshot, activeStore, { status: returned.status, result, error: returned.error }, opts.onRunEnd);
@@ -20,6 +20,7 @@ import {
20
20
  } from "../durable/completed-inspection.js";
21
21
  import type { ResumableWorkflowEntry } from "../durable/types.js";
22
22
  import type { DurableWorkflowCatalogEntries } from "../durable/backend.js";
23
+ import { discoverWorkflows } from "./discovery.js";
23
24
 
24
25
  export interface DurableResumeRuntime {
25
26
  resumeDurableWorkflow(
@@ -76,6 +77,8 @@ export function createDurableResumeRuntime(
76
77
  registry: deps.registry,
77
78
  baseRunOpts: deps.baseRunOpts(options?.policy),
78
79
  durableBackend: backend,
80
+ resolveDefinition: async (name, cwd) =>
81
+ (await discoverWorkflows({ cwd: cwd ?? deps.runtimeCwd })).registry.get(name),
79
82
  ...(deps.jobs !== undefined ? { jobs: deps.jobs } : {}),
80
83
  };
81
84
  return await resumeDurableWorkflowAdapter(workflowIdOrPrefix, adapterDeps, preparedCatalog);
@@ -193,6 +193,10 @@ export interface PiHostInputFormField {
193
193
  export interface PiHostInputFormRequest {
194
194
  title: string;
195
195
  fields: PiHostInputFormField[];
196
+ /** Optional panel heading label rendered on the form border. */
197
+ heading?: string;
198
+ /** Optional submit button label. */
199
+ submitLabel?: string;
196
200
  }
197
201
 
198
202
  export type PiHostInputFormFunction = (
@@ -134,6 +134,9 @@ export function createStageControlHandle(runtime: LiveStageRuntime): StageContro
134
134
  ) ?? false;
135
135
  if (!stillActive) runtime.activeStore.recordRunPaused(runtime.runId);
136
136
  }
137
+ // Graceful pause/quit is an exact durability boundary. Force the latest
138
+ // pause-adjusted stage elapsed time even inside the normal 30s bucket.
139
+ await runtime.captureStageSessionMeta({ forceDurable: true });
137
140
  },
138
141
  async resume(message?: string) {
139
142
  runtime.throwIfStageMutationBlocked();
@@ -12,7 +12,7 @@ import type { GraphFrontierTracker } from "../../engine/graph-inference.js";
12
12
  import type { EngineStageRuntimeOptions } from "../../engine/options.js";
13
13
  import { createStageContext as createInnerStageContext, type InternalStageContext, type StageAdapters } from "./stage-runner.js";
14
14
  import type { StageControlRegistry } from "./stage-control-registry.js";
15
- import type { ParallelFailFastScope } from "./executor-types.js";
15
+ import type { ParallelFailFastScope, StageSessionCheckpointOptions } from "./executor-types.js";
16
16
  import type { WorkflowExitManager } from "./executor-exit-manager.js";
17
17
  import type { ContinuationReplayIndex } from "./executor-continuation.js";
18
18
  import { sameStringSet } from "./executor-continuation.js";
@@ -198,12 +198,15 @@ export function createWorkflowStageFactory(input: {
198
198
  };
199
199
 
200
200
  let runtime: LiveStageRuntime;
201
- const captureStageSessionMeta = (): void => {
201
+ const captureStageSessionMeta = (checkpointOptions?: StageSessionCheckpointOptions): unknown => {
202
202
  const meta = innerCtx.__sessionMeta();
203
203
  if (meta.sessionId !== undefined) stageSnapshot.sessionId = meta.sessionId;
204
204
  if (meta.sessionFile !== undefined) stageSnapshot.sessionFile = meta.sessionFile;
205
205
  if (meta.sessionId !== undefined || meta.sessionFile !== undefined) input.activeStore.recordStageSession(input.runId, stageId, meta);
206
- void input.opts.onStageSession?.(input.runId, stageSnapshot);
206
+ const pending = input.opts.onStageSession?.(input.runId, stageSnapshot, checkpointOptions);
207
+ if (checkpointOptions?.forceDurable === true) return pending;
208
+ void Promise.resolve(pending).catch(() => {});
209
+ return undefined;
207
210
  };
208
211
  const releaseLiveHandle = async (): Promise<void> => {
209
212
  if (state.liveHandleReleased) return;
@@ -3,7 +3,7 @@ import type { Store } from "../../shared/store.js";
3
3
  import type { StageContext } from "../../shared/types.js";
4
4
  import type { InternalStageContext } from "./stage-runner.js";
5
5
  import type { StageControlRegistry } from "./stage-control-registry.js";
6
- import type { ParallelFailFastScope } from "./executor-types.js";
6
+ import type { ParallelFailFastScope, StageSessionCheckpointOptions } from "./executor-types.js";
7
7
  import type { StageScheduler } from "./executor-scheduler.js";
8
8
  import type { WorkflowExitManager } from "./executor-exit-manager.js";
9
9
  import type { WorkflowFailure } from "../../shared/workflow-failures.js";
@@ -48,7 +48,7 @@ export interface LiveStageRuntime {
48
48
  unregisterStageHandle: () => void;
49
49
  dropStageControlHandle: () => void;
50
50
  unregisterWorkflowExitCleanup: () => void;
51
- readonly captureStageSessionMeta: () => void;
51
+ readonly captureStageSessionMeta: (options?: StageSessionCheckpointOptions) => unknown;
52
52
  readonly applyModelFallbackMeta: (meta: ReturnType<InternalStageContext["__modelFallbackMeta"]>) => void;
53
53
  readonly appendStageStartOnce: () => void;
54
54
  readonly finalizeStageSnapshot: () => Promise<boolean>;
@@ -24,6 +24,9 @@ export interface RunContinuationOpts {
24
24
  readonly resumeFromStageId: string;
25
25
  }
26
26
 
27
+ export interface StageSessionCheckpointOptions {
28
+ readonly forceDurable?: boolean;
29
+ }
27
30
  export interface RunOpts extends Omit<AuthoringContract.RunOpts, "adapters" | "store" | "cancellation" | "overlay" | "registry" | "stageControlRegistry" | "continuation" | "onRunStart" | "onStageStart" | "onStageEnd" | "onRunEnd" | "ui"> {
28
31
  adapters?: StageAdapters;
29
32
  /** Invocation working directory exposed to workflow definitions as ctx.cwd. */
@@ -104,7 +107,7 @@ export interface RunOpts extends Omit<AuthoringContract.RunOpts, "adapters" | "s
104
107
  onRunStart?: (snapshot: RunSnapshot) => void;
105
108
  onStageStart?: (runId: string, snapshot: StageSnapshot) => void;
106
109
  onStageEnd?: (runId: string, snapshot: StageSnapshot) => unknown;
107
- onStageSession?: (runId: string, snapshot: StageSnapshot) => unknown;
110
+ onStageSession?: (runId: string, snapshot: StageSnapshot, options?: StageSessionCheckpointOptions) => unknown;
108
111
  onRunEnd?: (runId: string, status: RunStatus, result?: WorkflowOutputValues, error?: string, exitReason?: string) => void;
109
112
  }
110
113
 
@@ -54,7 +54,7 @@ export async function openHostInputsForm(
54
54
  ...(field.placeholder !== undefined ? { placeholder: field.placeholder } : {}),
55
55
  }));
56
56
  try {
57
- const raw = await open.call(ui, { title: options.workflowName, fields });
57
+ const raw = await open.call(ui, { title: options.workflowName, fields, heading: "WORKFLOW INPUTS", submitLabel: "[ Run workflow ]" });
58
58
  return raw === undefined ? { kind: "cancel" } : { kind: "run", values: coerceValues(options.fields, raw) };
59
59
  } catch {
60
60
  return { kind: "unsupported" };
@@ -103,7 +103,6 @@ function durableWorkflowSession(
103
103
  kind: "durable" | "completed",
104
104
  ): WorkflowResumeSelectorItem {
105
105
  const checkpointText = `${entry.completedCheckpoints} checkpoints`;
106
- const promptText = `${entry.pendingPrompts} prompts`;
107
106
  const presentation = workflowStatusPresentation(entry.status, kind);
108
107
  return {
109
108
  result: { kind, workflowId: entry.workflowId },
@@ -114,8 +113,8 @@ function durableWorkflowSession(
114
113
  created: new Date(entry.createdAt),
115
114
  modified: new Date(entry.updatedAt),
116
115
  messageCount: entry.completedCheckpoints,
117
- firstMessage: `${entry.name} ${presentation.label} ${checkpointText} ${promptText}`,
118
- allMessagesText: `${entry.workflowId} ${entry.name} ${presentation.label} ${checkpointText} ${promptText}`,
116
+ firstMessage: `${entry.name} ${presentation.label} ${checkpointText}`,
117
+ allMessagesText: `${entry.workflowId} ${entry.name} ${presentation.label} ${checkpointText}`,
119
118
  ...(presentation.color !== undefined ? { messageColor: presentation.color } : {}),
120
119
  },
121
120
  };
@@ -1 +1 @@
1
- {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAanE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE3C,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8EAA8E;IAC9E,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IAC5C,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnE;AAID,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAE1E;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA+J9C;AAED,wBAAgB,SAAS,CAAC,cAAc,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,CAsLhE"}
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../../src/cli/args.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAanE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;AAE3C,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,8EAA8E;IAC9E,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;IAC5C,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnE;AAID,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAE1E;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,CA+J9C;AAED,wBAAgB,SAAS,CAAC,cAAc,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,CAwLhE"}