@osolmaz/pi-workflows 0.16.1 → 0.16.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 (327) hide show
  1. package/README.md +41 -41
  2. package/dist/builtins/monitor.workflow.d.ts +1 -1
  3. package/dist/builtins/monitor.workflow.js +8 -8
  4. package/dist/builtins/pi-agent-group.js +3 -3
  5. package/dist/builtins/pi-agent-group.js.map +1 -1
  6. package/dist/channels/adapter-entry.js +14 -14
  7. package/dist/channels/adapter-entry.js.map +1 -1
  8. package/dist/client/client.d.ts +6 -6
  9. package/dist/client/client.js +27 -27
  10. package/dist/client/client.js.map +1 -1
  11. package/dist/client/protocol.d.ts +4 -1
  12. package/dist/client/protocol.js +17 -11
  13. package/dist/client/protocol.js.map +1 -1
  14. package/dist/client/resolver.d.ts +4 -4
  15. package/dist/client/view.d.ts +7 -1
  16. package/dist/client/view.js +1 -0
  17. package/dist/client/view.js.map +1 -1
  18. package/dist/extension/index.d.ts +1 -1
  19. package/dist/extension/index.js +66 -47
  20. package/dist/extension/index.js.map +1 -1
  21. package/dist/extension/recorder.d.ts +1 -1
  22. package/dist/extension/recorder.js +1 -1
  23. package/dist/extension/recorder.js.map +1 -1
  24. package/dist/extension/remote-recorder-store.d.ts +1 -1
  25. package/dist/extension/remote-recorder-store.js +2 -2
  26. package/dist/extension/remote-recorder-store.js.map +1 -1
  27. package/dist/extension/{controller-command.d.ts → resource-manager-command.d.ts} +6 -6
  28. package/dist/extension/{controller-command.js → resource-manager-command.js} +7 -7
  29. package/dist/extension/resource-manager-command.js.map +1 -0
  30. package/dist/extension/session-delivery.d.ts +1 -1
  31. package/dist/extension/session-delivery.js +2 -2
  32. package/dist/extension/session-delivery.js.map +1 -1
  33. package/dist/extension/session-view.d.ts +1 -1
  34. package/dist/extension/session-view.js +1 -1
  35. package/dist/extension/session-view.js.map +1 -1
  36. package/dist/extension/workflow-message-coordinator.d.ts +4 -3
  37. package/dist/extension/workflow-message-coordinator.js +81 -29
  38. package/dist/extension/workflow-message-coordinator.js.map +1 -1
  39. package/dist/resource-managers/conditions.d.ts +6 -0
  40. package/dist/{controllers → resource-managers}/conditions.js +3 -3
  41. package/dist/resource-managers/conditions.js.map +1 -0
  42. package/dist/resource-managers/definition.d.ts +6 -0
  43. package/dist/resource-managers/definition.js +45 -0
  44. package/dist/resource-managers/definition.js.map +1 -0
  45. package/dist/resource-managers/effects.d.ts +15 -0
  46. package/dist/{controllers → resource-managers}/effects.js +2 -2
  47. package/dist/resource-managers/effects.js.map +1 -0
  48. package/dist/resource-managers/errors.d.ts +12 -0
  49. package/dist/resource-managers/errors.js +25 -0
  50. package/dist/resource-managers/errors.js.map +1 -0
  51. package/dist/resource-managers/index.d.ts +12 -0
  52. package/dist/resource-managers/index.js +12 -0
  53. package/dist/resource-managers/index.js.map +1 -0
  54. package/dist/resource-managers/json.js.map +1 -0
  55. package/dist/resource-managers/loader.d.ts +23 -0
  56. package/dist/resource-managers/loader.js +75 -0
  57. package/dist/resource-managers/loader.js.map +1 -0
  58. package/dist/resource-managers/results.d.ts +5 -0
  59. package/dist/resource-managers/results.js.map +1 -0
  60. package/dist/resource-managers/runtime.d.ts +59 -0
  61. package/dist/{controllers/manager.js → resource-managers/runtime.js} +57 -57
  62. package/dist/resource-managers/runtime.js.map +1 -0
  63. package/dist/{controllers → resource-managers}/sqlite.d.ts +51 -43
  64. package/dist/{controllers → resource-managers}/sqlite.js +187 -125
  65. package/dist/resource-managers/sqlite.js.map +1 -0
  66. package/dist/{controllers → resource-managers}/store.d.ts +33 -33
  67. package/dist/{controllers → resource-managers}/store.js.map +1 -1
  68. package/dist/{controllers → resource-managers}/types.d.ts +41 -41
  69. package/dist/{controllers → resource-managers}/types.js.map +1 -1
  70. package/dist/resource-managers/workflows.d.ts +34 -0
  71. package/dist/{controllers → resource-managers}/workflows.js +15 -15
  72. package/dist/resource-managers/workflows.js.map +1 -0
  73. package/dist/server/channel-effects.js.map +1 -0
  74. package/dist/{host → server}/channel-supervisor.d.ts +6 -6
  75. package/dist/{host → server}/channel-supervisor.js +3 -3
  76. package/dist/server/channel-supervisor.js.map +1 -0
  77. package/dist/{host/child-worker-supervisor.d.ts → server/child-runner-supervisor.d.ts} +15 -13
  78. package/dist/{host/child-worker-supervisor.js → server/child-runner-supervisor.js} +6 -5
  79. package/dist/server/child-runner-supervisor.js.map +1 -0
  80. package/dist/{host → server}/processes.d.ts +3 -3
  81. package/dist/{host → server}/processes.js +3 -3
  82. package/dist/server/processes.js.map +1 -0
  83. package/dist/{host → server}/resolver-entry.d.ts +6 -6
  84. package/dist/{host → server}/resolver-entry.js +14 -14
  85. package/dist/server/resolver-entry.js.map +1 -0
  86. package/dist/server/resource-runner-entry.d.ts +2 -0
  87. package/dist/{host/controller-worker-entry.js → server/resource-runner-entry.js} +33 -33
  88. package/dist/server/resource-runner-entry.js.map +1 -0
  89. package/dist/server/resource-runner-protocol.d.ts +36 -0
  90. package/dist/server/resource-runner-protocol.js +49 -0
  91. package/dist/server/resource-runner-protocol.js.map +1 -0
  92. package/dist/server/resource-runner-supervisor.d.ts +21 -0
  93. package/dist/{host/worker-supervisor.js → server/resource-runner-supervisor.js} +17 -17
  94. package/dist/server/resource-runner-supervisor.js.map +1 -0
  95. package/dist/{host → server}/rpc-bridge.d.ts +3 -3
  96. package/dist/{host → server}/rpc-bridge.js +3 -3
  97. package/dist/server/rpc-bridge.js.map +1 -0
  98. package/dist/{host → server}/rpc-executor.d.ts +1 -1
  99. package/dist/{host → server}/rpc-executor.js +3 -3
  100. package/dist/server/rpc-executor.js.map +1 -0
  101. package/dist/{host/host-entry.js → server/server-entry.js} +6 -6
  102. package/dist/server/server-entry.js.map +1 -0
  103. package/dist/{host/runner.d.ts → server/server.d.ts} +47 -39
  104. package/dist/{host/runner.js → server/server.js} +624 -535
  105. package/dist/server/server.js.map +1 -0
  106. package/dist/{host → server}/state.d.ts +25 -25
  107. package/dist/{host → server}/state.js +49 -49
  108. package/dist/server/state.js.map +1 -0
  109. package/dist/{host → server}/view.d.ts +7 -7
  110. package/dist/{host → server}/view.js +19 -15
  111. package/dist/server/view.js.map +1 -0
  112. package/dist/server/workflow-runner-content.d.ts +6 -0
  113. package/dist/server/workflow-runner-content.js +96 -0
  114. package/dist/server/workflow-runner-content.js.map +1 -0
  115. package/dist/server/workflow-runner-entry.d.ts +13 -0
  116. package/dist/{host/worker-entry.js → server/workflow-runner-entry.js} +89 -57
  117. package/dist/server/workflow-runner-entry.js.map +1 -0
  118. package/dist/server/workflow-runner-protocol.d.ts +69 -0
  119. package/dist/server/workflow-runner-protocol.js +176 -0
  120. package/dist/server/workflow-runner-protocol.js.map +1 -0
  121. package/dist/{host/worker-store.d.ts → server/workflow-runner-store.d.ts} +11 -11
  122. package/dist/{host/worker-store.js → server/workflow-runner-store.js} +8 -8
  123. package/dist/server/workflow-runner-store.js.map +1 -0
  124. package/dist/server/workflow-runner-supervisor.d.ts +22 -0
  125. package/dist/server/workflow-runner-supervisor.js +56 -0
  126. package/dist/server/workflow-runner-supervisor.js.map +1 -0
  127. package/dist/state/prune.d.ts +1 -1
  128. package/dist/state/prune.js +17 -10
  129. package/dist/state/prune.js.map +1 -1
  130. package/dist/state/schema.js +2 -2
  131. package/dist/state/workflow-messages.d.ts +3 -1
  132. package/dist/state/workflow-messages.js +32 -1
  133. package/dist/state/workflow-messages.js.map +1 -1
  134. package/dist/viewer/backup.js +1 -1
  135. package/dist/viewer/backup.js.map +1 -1
  136. package/dist/viewer/cli.d.ts +2 -2
  137. package/dist/viewer/cli.js +46 -32
  138. package/dist/viewer/cli.js.map +1 -1
  139. package/dist/viewer/tui.d.ts +1 -1
  140. package/dist/viewer/tui.js +1 -1
  141. package/dist/viewer/tui.js.map +1 -1
  142. package/dist/workflows/command-batch.js +2 -2
  143. package/dist/workflows/composition.js +0 -4
  144. package/dist/workflows/composition.js.map +1 -1
  145. package/dist/workflows/definition.js +0 -8
  146. package/dist/workflows/definition.js.map +1 -1
  147. package/dist/workflows/engine.js +18 -20
  148. package/dist/workflows/engine.js.map +1 -1
  149. package/dist/workflows/schema.js +0 -4
  150. package/dist/workflows/schema.js.map +1 -1
  151. package/dist/workflows/store.d.ts +27 -11
  152. package/dist/workflows/store.js +66 -18
  153. package/dist/workflows/store.js.map +1 -1
  154. package/dist/workflows/types.d.ts +3 -5
  155. package/docs/2026-08-20-durable-workflow-launch-plan.md +12 -12
  156. package/docs/2026-08-25-workflow-follow-ups.md +7 -7
  157. package/docs/2026-08-25-workflow-settings.md +3 -3
  158. package/docs/2026-08-30-out-of-process-workflow-host-plan.md +3 -3
  159. package/docs/2026-09-01-restore-session-delivery-controls-plan.md +5 -5
  160. package/docs/2026-09-01-unified-workflow-client-plan.md +6 -6
  161. package/docs/2026-09-02-installed-live-e2e-plan.md +3 -3
  162. package/docs/2026-09-02-unify-workflow-messages-plan.md +8 -8
  163. package/docs/2026-09-04-workflow-run-state-plan.md +363 -0
  164. package/docs/DEFERRED_TURNS.md +7 -7
  165. package/docs/DESIGN_PHILOSOPHY.md +1 -1
  166. package/docs/HUMAN_DECISIONS.md +11 -11
  167. package/docs/HUMAN_DECISION_PRESENTATIONS.md +4 -4
  168. package/docs/MONITOR.md +1 -1
  169. package/docs/RESOURCE_MANAGERS.md +221 -0
  170. package/docs/SQLITE_STATE.md +40 -34
  171. package/docs/WORKFLOW_COMPOSITION.md +1 -1
  172. package/docs/{WORKFLOW_HOST.md → WORKFLOW_SERVER.md} +131 -116
  173. package/docs/WORKFLOW_STEP_MESSAGES.md +18 -18
  174. package/docs/WORKFLOW_UPDATES.md +16 -16
  175. package/docs/development.md +15 -14
  176. package/docs/live-replay-protocol.md +20 -20
  177. package/docs/plans/2026-08-04-controller-runtime-plan.md +25 -25
  178. package/docs/plans/2026-08-05-always-on-workflows-plan.md +8 -8
  179. package/docs/plans/2026-08-10-agent-managed-monitor-workflows-plan.md +2 -2
  180. package/docs/plans/2026-08-13-session-addressed-workflow-notifications-plan.md +1 -1
  181. package/docs/plans/2026-08-16-workflow-updates-plan.md +5 -5
  182. package/docs/plans/2026-08-19-human-decision-gates-plan.md +1 -1
  183. package/docs/plans/2026-08-20-bounded-command-batches-plan.md +1 -1
  184. package/docs/plans/2026-08-21-deferred-turn-intents-plan.md +3 -3
  185. package/docs/plans/2026-08-21-sanity-check-plan.md +2 -2
  186. package/docs/plans/2026-08-23-assistant-agent-completion-plan.md +5 -5
  187. package/docs/plans/2026-08-23-sqlite-state-plan.md +25 -25
  188. package/docs/plans/2026-08-25-live-workflow-settings-plan.md +4 -4
  189. package/docs/plans/2026-08-27-workflow-terminal-restart-plan.md +3 -3
  190. package/docs/plans/2026-09-04-workflow-runner-resume-state-plan.md +318 -0
  191. package/docs/plans/piw-viewer-experience-implementation-plan.md +1 -1
  192. package/docs/tui-viewer.md +9 -9
  193. package/docs/workflows.md +78 -63
  194. package/examples/{controllers/pull-request.controller.ts → resource-managers/pull-request.resource-manager.ts} +12 -12
  195. package/herdr-plugin.toml +1 -1
  196. package/package.json +5 -5
  197. package/protocol/client.v1.schema.json +7 -7
  198. package/protocol/fixtures/client-v1.json +1 -1
  199. package/src/builtins/monitor.workflow.ts +9 -9
  200. package/src/builtins/pi-agent-group.ts +3 -3
  201. package/src/channels/adapter-entry.ts +14 -14
  202. package/src/client/client.ts +33 -32
  203. package/src/client/protocol.ts +16 -11
  204. package/src/client/resolver.ts +4 -4
  205. package/src/client/view.ts +9 -1
  206. package/src/extension/index.ts +81 -53
  207. package/src/extension/recorder.ts +1 -1
  208. package/src/extension/remote-recorder-store.ts +2 -2
  209. package/src/extension/resource-manager-command.ts +45 -0
  210. package/src/extension/session-delivery.ts +2 -2
  211. package/src/extension/session-view.ts +1 -1
  212. package/src/extension/workflow-message-coordinator.ts +94 -30
  213. package/src/{controllers → resource-managers}/conditions.ts +23 -23
  214. package/src/resource-managers/definition.ts +71 -0
  215. package/src/{controllers → resource-managers}/effects.ts +9 -9
  216. package/src/resource-managers/errors.ts +27 -0
  217. package/src/resource-managers/index.ts +88 -0
  218. package/src/resource-managers/loader.ts +111 -0
  219. package/src/{controllers → resource-managers}/results.ts +4 -4
  220. package/src/{controllers/manager.ts → resource-managers/runtime.ts} +95 -92
  221. package/src/{controllers → resource-managers}/sqlite.ts +275 -181
  222. package/src/{controllers → resource-managers}/store.ts +46 -38
  223. package/src/{controllers → resource-managers}/types.ts +50 -41
  224. package/src/{controllers → resource-managers}/workflows.ts +43 -41
  225. package/src/{host → server}/channel-supervisor.ts +8 -8
  226. package/src/{host/child-worker-supervisor.ts → server/child-runner-supervisor.ts} +22 -18
  227. package/src/{host → server}/processes.ts +3 -3
  228. package/src/{host → server}/resolver-entry.ts +28 -25
  229. package/src/{host/controller-worker-entry.ts → server/resource-runner-entry.ts} +67 -65
  230. package/src/server/resource-runner-protocol.ts +103 -0
  231. package/src/server/resource-runner-supervisor.ts +76 -0
  232. package/src/{host → server}/rpc-bridge.ts +3 -3
  233. package/src/{host → server}/rpc-executor.ts +4 -4
  234. package/src/{host/host-entry.ts → server/server-entry.ts} +5 -5
  235. package/src/{host/runner.ts → server/server.ts} +786 -672
  236. package/src/{host → server}/state.ts +78 -67
  237. package/src/{host → server}/view.ts +21 -17
  238. package/src/server/workflow-runner-content.ts +119 -0
  239. package/src/{host/worker-entry.ts → server/workflow-runner-entry.ts} +131 -82
  240. package/src/server/workflow-runner-protocol.ts +241 -0
  241. package/src/{host/worker-store.ts → server/workflow-runner-store.ts} +18 -20
  242. package/src/server/workflow-runner-supervisor.ts +79 -0
  243. package/src/state/prune.ts +27 -9
  244. package/src/state/schema.ts +2 -2
  245. package/src/state/workflow-messages.ts +52 -1
  246. package/src/viewer/backup.ts +1 -1
  247. package/src/viewer/cli.ts +50 -36
  248. package/src/viewer/tui.ts +1 -1
  249. package/src/workflows/command-batch.ts +2 -2
  250. package/src/workflows/composition.ts +0 -5
  251. package/src/workflows/definition.ts +0 -8
  252. package/src/workflows/engine.ts +18 -21
  253. package/src/workflows/schema.ts +0 -6
  254. package/src/workflows/store.ts +95 -28
  255. package/src/workflows/types.ts +3 -5
  256. package/dist/controllers/conditions.d.ts +0 -6
  257. package/dist/controllers/conditions.js.map +0 -1
  258. package/dist/controllers/definition.d.ts +0 -6
  259. package/dist/controllers/definition.js +0 -45
  260. package/dist/controllers/definition.js.map +0 -1
  261. package/dist/controllers/effects.d.ts +0 -15
  262. package/dist/controllers/effects.js.map +0 -1
  263. package/dist/controllers/errors.d.ts +0 -12
  264. package/dist/controllers/errors.js +0 -25
  265. package/dist/controllers/errors.js.map +0 -1
  266. package/dist/controllers/index.d.ts +0 -12
  267. package/dist/controllers/index.js +0 -12
  268. package/dist/controllers/index.js.map +0 -1
  269. package/dist/controllers/json.js.map +0 -1
  270. package/dist/controllers/loader.d.ts +0 -23
  271. package/dist/controllers/loader.js +0 -74
  272. package/dist/controllers/loader.js.map +0 -1
  273. package/dist/controllers/manager.d.ts +0 -59
  274. package/dist/controllers/manager.js.map +0 -1
  275. package/dist/controllers/results.d.ts +0 -5
  276. package/dist/controllers/results.js.map +0 -1
  277. package/dist/controllers/sqlite.js.map +0 -1
  278. package/dist/controllers/workflows.d.ts +0 -34
  279. package/dist/controllers/workflows.js.map +0 -1
  280. package/dist/extension/controller-command.js.map +0 -1
  281. package/dist/host/channel-effects.js.map +0 -1
  282. package/dist/host/channel-supervisor.js.map +0 -1
  283. package/dist/host/child-worker-supervisor.js.map +0 -1
  284. package/dist/host/controller-worker-entry.d.ts +0 -2
  285. package/dist/host/controller-worker-entry.js.map +0 -1
  286. package/dist/host/controller-worker-protocol.d.ts +0 -36
  287. package/dist/host/controller-worker-protocol.js +0 -49
  288. package/dist/host/controller-worker-protocol.js.map +0 -1
  289. package/dist/host/controller-worker-supervisor.d.ts +0 -21
  290. package/dist/host/controller-worker-supervisor.js +0 -54
  291. package/dist/host/controller-worker-supervisor.js.map +0 -1
  292. package/dist/host/host-entry.js.map +0 -1
  293. package/dist/host/processes.js.map +0 -1
  294. package/dist/host/resolver-entry.js.map +0 -1
  295. package/dist/host/rpc-bridge.js.map +0 -1
  296. package/dist/host/rpc-executor.js.map +0 -1
  297. package/dist/host/runner.js.map +0 -1
  298. package/dist/host/state.js.map +0 -1
  299. package/dist/host/view.js.map +0 -1
  300. package/dist/host/worker-entry.d.ts +0 -10
  301. package/dist/host/worker-entry.js.map +0 -1
  302. package/dist/host/worker-protocol.d.ts +0 -31
  303. package/dist/host/worker-protocol.js +0 -122
  304. package/dist/host/worker-protocol.js.map +0 -1
  305. package/dist/host/worker-store.js.map +0 -1
  306. package/dist/host/worker-supervisor.d.ts +0 -22
  307. package/dist/host/worker-supervisor.js.map +0 -1
  308. package/docs/CONTROLLERS.md +0 -217
  309. package/src/controllers/definition.ts +0 -65
  310. package/src/controllers/errors.ts +0 -27
  311. package/src/controllers/index.ts +0 -88
  312. package/src/controllers/loader.ts +0 -104
  313. package/src/extension/controller-command.ts +0 -45
  314. package/src/host/controller-worker-protocol.ts +0 -104
  315. package/src/host/controller-worker-supervisor.ts +0 -79
  316. package/src/host/worker-protocol.ts +0 -165
  317. package/src/host/worker-supervisor.ts +0 -74
  318. /package/dist/{controllers → resource-managers}/json.d.ts +0 -0
  319. /package/dist/{controllers → resource-managers}/json.js +0 -0
  320. /package/dist/{controllers → resource-managers}/results.js +0 -0
  321. /package/dist/{controllers → resource-managers}/store.js +0 -0
  322. /package/dist/{controllers → resource-managers}/types.js +0 -0
  323. /package/dist/{host → server}/channel-effects.d.ts +0 -0
  324. /package/dist/{host → server}/channel-effects.js +0 -0
  325. /package/dist/{host/host-entry.d.ts → server/server-entry.d.ts} +0 -0
  326. /package/src/{controllers → resource-managers}/json.ts +0 -0
  327. /package/src/{host → server}/channel-effects.ts +0 -0
@@ -332,12 +332,11 @@ export class WorkflowEngine {
332
332
  validateWorkflowDefinition(workflow);
333
333
  this.presentationRequired = workflow.presentationPrompt !== undefined;
334
334
  // Reset before any await: a park or cancel landing during preparation
335
- // must survive, or a host drain would hang while the run executes.
335
+ // must survive, or a server drain would hang while the run executes.
336
336
  this.cancelled = false;
337
337
  this.paused = false;
338
338
  this.parked = false;
339
- const loaded = await this.store.prepareRunResume(runId);
340
- const state = loaded.state;
339
+ const state = await this.store.prepareRunResume(runId);
341
340
  const sourceMismatch = workflowIdentityMismatch(state, workflow, options.workflowSource);
342
341
  if (sourceMismatch && options.force !== true) {
343
342
  throw new WorkflowSourceChangedError(runId);
@@ -456,21 +455,21 @@ export class WorkflowEngine {
456
455
  this.cancelled = false;
457
456
  this.paused = false;
458
457
  this.parked = false;
459
- const parent = await this.store.readRun(parentRunId);
460
- if (parent === null) {
458
+ const parentState = await this.store.readRunState(parentRunId);
459
+ if (parentState === null) {
461
460
  throw new Error(`Cannot continue from unreadable workflow run: ${parentRunId}`);
462
461
  }
463
- if (parent.state.status !== "waiting" || parent.state.waitingOn === undefined) {
462
+ if (parentState.status !== "waiting" || parentState.waitingOn === undefined) {
464
463
  throw new Error(
465
- `Cannot continue workflow run ${parentRunId} with status ${parent.state.status}`,
464
+ `Cannot continue workflow run ${parentRunId} with status ${parentState.status}`,
466
465
  );
467
466
  }
468
- const sourceMismatch = workflowIdentityMismatch(parent.state, workflow, options.workflowSource);
467
+ const sourceMismatch = workflowIdentityMismatch(parentState, workflow, options.workflowSource);
469
468
  if (sourceMismatch && options.force !== true) {
470
469
  throw new WorkflowSourceChangedError(parentRunId);
471
470
  }
472
471
 
473
- const waitingNodeId = parent.state.waitingOn;
472
+ const waitingNodeId = parentState.waitingOn;
474
473
  const waitingNode = workflow.nodes[waitingNodeId];
475
474
  const humanContract =
476
475
  waitingNode?.nodeType === "checkpoint" ? waitingNode.humanDecision : undefined;
@@ -481,7 +480,7 @@ export class WorkflowEngine {
481
480
  if (options.humanDecision === undefined) {
482
481
  throw new Error(`Checkpoint ${waitingNodeId} requires an accepted verified human decision`);
483
482
  }
484
- const request = parent.state.finalOutput as HumanDecisionRequest;
483
+ const request = parentState.finalOutput as HumanDecisionRequest;
485
484
  if (
486
485
  request?.schema !== "pi-workflows.human-decision-request.v1" ||
487
486
  request.decisionId !== options.humanDecision.decisionId ||
@@ -495,7 +494,7 @@ export class WorkflowEngine {
495
494
  }
496
495
  acceptedResponse = validateHumanDecisionResponse(request, durableDecision.response);
497
496
  acceptedNodeId = request.nodeId;
498
- normalizedInput = structuredClone(parent.state.input);
497
+ normalizedInput = structuredClone(parentState.input);
499
498
  } else {
500
499
  const suppliedInput = input === undefined ? null : input;
501
500
  normalizedInput = workflow.input ? await workflow.input(suppliedInput) : suppliedInput;
@@ -512,9 +511,9 @@ export class WorkflowEngine {
512
511
  options.runId,
513
512
  );
514
513
  state.parentRunId = parentRunId;
515
- state.outputs = structuredClone(parent.state.outputs);
516
- state.results = structuredClone(parent.state.results);
517
- state.steps = structuredClone(parent.state.steps);
514
+ state.outputs = structuredClone(parentState.outputs);
515
+ state.results = structuredClone(parentState.results);
516
+ state.steps = structuredClone(parentState.steps);
518
517
  if (humanContract !== undefined && options.humanDecision !== undefined) {
519
518
  const receipt = {
520
519
  decisionId: options.humanDecision.decisionId,
@@ -557,7 +556,7 @@ export class WorkflowEngine {
557
556
  ...(state.runTitle ? { runTitle: state.runTitle } : {}),
558
557
  input: state.input,
559
558
  continuedFrom: parentRunId,
560
- checkpoint: parent.state.waitingOn,
559
+ checkpoint: parentState.waitingOn,
561
560
  carriedSteps: state.steps.length,
562
561
  },
563
562
  });
@@ -1563,17 +1562,15 @@ export class WorkflowEngine {
1563
1562
  );
1564
1563
  }
1565
1564
  const effectType = node.effect.type.trim();
1566
- const idempotencyKey =
1567
- typeof node.effect.idempotencyKey === "function"
1568
- ? await node.effect.idempotencyKey(context)
1569
- : node.effect.idempotencyKey;
1565
+ const invocation = context.state.steps.filter((step) => step.nodeId === nodeId).length + 1;
1566
+ const idempotencyKey = `${context.state.runId}:${effectType}:${nodeId}:${invocation}`;
1570
1567
  const request =
1571
1568
  typeof node.effect.request === "function"
1572
1569
  ? await node.effect.request(context)
1573
1570
  : node.effect.request;
1574
1571
  /* istanbul ignore if -- definition validation and effect helpers reject empty fields */
1575
- if (effectType.length === 0 || idempotencyKey.trim().length === 0) {
1576
- throw new Error("Managed effect type and idempotency key must be nonempty text");
1572
+ if (effectType.length === 0) {
1573
+ throw new Error("Managed effect type must be nonempty text");
1577
1574
  }
1578
1575
  canonicalJson(request);
1579
1576
  const reservation = await this.store.reserveEffect({
@@ -113,12 +113,6 @@ export function assertValidActionNode(node: ActionNodeDefinition, nodeId = "acti
113
113
  if (node.effect.recovery !== "idempotent" && node.effect.recovery !== "manual") {
114
114
  fail(`node ${nodeId} effect recovery must be idempotent or manual`);
115
115
  }
116
- if (
117
- typeof node.effect.idempotencyKey !== "string" &&
118
- typeof node.effect.idempotencyKey !== "function"
119
- ) {
120
- fail(`node ${nodeId} effect idempotencyKey must be text or a function`);
121
- }
122
116
  if (!("request" in node.effect)) {
123
117
  fail(`node ${nodeId} effect requires request data or a request function`);
124
118
  }
@@ -143,9 +143,20 @@ export type WorkflowRunDisplayState = {
143
143
  error: string | null;
144
144
  };
145
145
 
146
+ export type WorkflowRunTerminalData = {
147
+ runId: string;
148
+ status: "completed" | "failed" | "timed_out" | "cancelled";
149
+ statusDetail: string | null;
150
+ input: JsonValue;
151
+ finalOutput: JsonValue | null;
152
+ error: string | null;
153
+ presentationInstructions: string;
154
+ restartNumber: number;
155
+ };
156
+
146
157
  export type WorkflowRunStoreOptions = {
147
158
  authorityProvider?: (runId: string) => RunWriteAuthority | undefined;
148
- /** Host-owned projection updates that must commit with each run snapshot. */
159
+ /** Server-owned projection updates that must commit with each run snapshot. */
149
160
  snapshotLifecycle?: (context: {
150
161
  runId: string;
151
162
  state: WorkflowRunState;
@@ -153,13 +164,13 @@ export type WorkflowRunStoreOptions = {
153
164
  database: StateDatabase;
154
165
  now: number;
155
166
  }) => void;
156
- /** The global host may record an attested Pi session after the worker lease ends. */
157
- allowHostSessionRecording?: boolean;
167
+ /** The global server may record an attested Pi session after the runner lease ends. */
168
+ allowServerSessionRecording?: boolean;
158
169
  state?: StateDatabase;
159
170
  readOnly?: boolean;
160
171
  };
161
172
 
162
- /** The state boundary used by workflow code, including out-of-process workers. */
173
+ /** The state boundary used by workflow code, including out-of-process runners. */
163
174
  export interface WorkflowExecutionStore {
164
175
  readonly databasePath: string;
165
176
  initializeRun(
@@ -167,11 +178,8 @@ export interface WorkflowExecutionStore {
167
178
  state: WorkflowRunState,
168
179
  options?: InitializeWorkflowRunOptions,
169
180
  ): Promise<string>;
170
- prepareRunResume(runId: string): Promise<LoadedWorkflowRun>;
171
- readRun(
172
- runId: string,
173
- options?: ReadWorkflowRunOptions,
174
- ): LoadedWorkflowRun | null | Promise<LoadedWorkflowRun | null>;
181
+ prepareRunResume(runId: string): Promise<WorkflowRunState>;
182
+ readRunState(runId: string): WorkflowRunState | null | Promise<WorkflowRunState | null>;
175
183
  writeSnapshot(
176
184
  runId: string,
177
185
  state: WorkflowRunState,
@@ -488,7 +496,7 @@ export class WorkflowRunStore {
488
496
  | ((runId: string) => RunWriteAuthority | undefined)
489
497
  | undefined;
490
498
  private readonly snapshotLifecycle: WorkflowRunStoreOptions["snapshotLifecycle"];
491
- private readonly allowHostSessionRecording: boolean;
499
+ private readonly allowServerSessionRecording: boolean;
492
500
  private readonly contexts = new Map<string, RunContext>();
493
501
  private readonly ownsState: boolean;
494
502
  private readonly mutations: StateMutationStore;
@@ -497,7 +505,7 @@ export class WorkflowRunStore {
497
505
  constructor(databasePath: string = workflowStatePath(), options: WorkflowRunStoreOptions = {}) {
498
506
  this.authorityProvider = options.authorityProvider;
499
507
  this.snapshotLifecycle = options.snapshotLifecycle;
500
- this.allowHostSessionRecording = options.allowHostSessionRecording === true;
508
+ this.allowServerSessionRecording = options.allowServerSessionRecording === true;
501
509
  this.ownsState = options.state === undefined;
502
510
  this.state =
503
511
  options.state ??
@@ -515,7 +523,7 @@ export class WorkflowRunStore {
515
523
  if (this.ownsState) this.state.close();
516
524
  }
517
525
 
518
- /** Host-only synchronization after a queue lifecycle mutation on the run resource. */
526
+ /** Server-only synchronization after a queue lifecycle mutation on the run resource. */
519
527
  synchronizeRevision(runId: string): number {
520
528
  const revision = this.resourceRevision(runId);
521
529
  const context = this.contexts.get(runId);
@@ -1455,11 +1463,11 @@ export class WorkflowRunStore {
1455
1463
  return { runId, originSessionId, followUps };
1456
1464
  }
1457
1465
 
1458
- async prepareRunResume(runId: string): Promise<LoadedWorkflowRun> {
1459
- const loaded = this.readRun(runId, { includeTrace: true });
1460
- if (loaded === null) throw new Error(`Cannot resume unreadable workflow run: ${runId}`);
1461
- if (loaded.state.status !== "running") {
1462
- throw new Error(`Cannot resume workflow run ${runId} with status ${loaded.state.status}`);
1466
+ async prepareRunResume(runId: string): Promise<WorkflowRunState> {
1467
+ const state = this.readRunState(runId);
1468
+ if (state === null) throw new Error(`Cannot resume unreadable workflow run: ${runId}`);
1469
+ if (state.status !== "running") {
1470
+ throw new Error(`Cannot resume workflow run ${runId} with status ${state.status}`);
1463
1471
  }
1464
1472
  this.verifySettingsProjections(runId);
1465
1473
  const revision = this.resourceRevision(runId);
@@ -1487,20 +1495,20 @@ export class WorkflowRunStore {
1487
1495
  payload: {},
1488
1496
  };
1489
1497
  insertRunEvent(this.state, row.resourceId, nextRevision, at, traceEvent);
1490
- loaded.state.traceSeq = nextRevision;
1491
- loaded.state.updatedAt = at;
1492
- this.persistRunState(row, loaded.state, nextRevision, now);
1493
- recordViewerDeltas(this.state, runId, runViewerTargets(loaded.state, traceEvent), now);
1498
+ state.traceSeq = nextRevision;
1499
+ state.updatedAt = at;
1500
+ this.persistRunState(row, state, nextRevision, now);
1501
+ recordViewerDeltas(this.state, runId, runViewerTargets(state, traceEvent), now);
1494
1502
  context.revision = nextRevision;
1495
1503
  });
1496
- const prepared = this.readRun(runId, { includeTrace: true });
1504
+ const prepared = this.readRunState(runId);
1497
1505
  if (prepared === null) throw new Error(`Workflow run became unreadable: ${runId}`);
1498
1506
  return prepared;
1499
1507
  }
1500
1508
 
1501
1509
  async markRunInterrupted(
1502
1510
  runId: string,
1503
- reason = "Workflow host stopped before the run finished",
1511
+ reason = "Workflow server stopped before the run finished",
1504
1512
  ): Promise<LoadedWorkflowRun | null> {
1505
1513
  const loaded = this.readRun(runId);
1506
1514
  if (loaded === null || loaded.state.status !== "running") return loaded;
@@ -1538,7 +1546,7 @@ export class WorkflowRunStore {
1538
1546
  );
1539
1547
  }
1540
1548
 
1541
- /** Host-only synchronous form for an already serialized command transaction. */
1549
+ /** Server-only synchronous form for an already serialized command transaction. */
1542
1550
  publishUpdateSynchronous(
1543
1551
  runId: string,
1544
1552
  state: WorkflowRunState,
@@ -1754,7 +1762,7 @@ export class WorkflowRunStore {
1754
1762
  },
1755
1763
  };
1756
1764
  insertRunEvent(this.state, run.resourceId, revision, at, traceEvent);
1757
- const current = this.readRunState(run, this.readDefinition(run.definitionHash));
1765
+ const current = this.materializeRunState(run, this.readDefinition(run.definitionHash));
1758
1766
  current.traceSeq = revision;
1759
1767
  current.updatedAt = at;
1760
1768
  this.persistRunState(run, current, revision, now);
@@ -2182,11 +2190,70 @@ export class WorkflowRunStore {
2182
2190
  };
2183
2191
  }
2184
2192
 
2193
+ readRunInput(runId: string): JsonValue | null {
2194
+ const row = this.readRunRow(runId);
2195
+ return row === undefined ? null : this.state.readJson(row.inputHash);
2196
+ }
2197
+
2198
+ readRunFinalOutput(runId: string): JsonValue | null {
2199
+ const row = this.readRunRow(runId);
2200
+ return row?.finalOutputHash == null ? null : this.state.readJson(row.finalOutputHash);
2201
+ }
2202
+
2203
+ readRunError(runId: string): string | null {
2204
+ const row = this.readRunRow(runId);
2205
+ return row?.errorHash == null ? null : this.readText(row.errorHash);
2206
+ }
2207
+
2208
+ readPresentationInstructions(runId: string): string {
2209
+ const row = this.state.connection
2210
+ .prepare("SELECT presentation_prompt_hash AS hash FROM runs WHERE run_id = ?")
2211
+ .get(runId) as { hash?: Buffer | null } | undefined;
2212
+ if (row?.hash == null) {
2213
+ return "Explain the final workflow result to the user in a normal response.";
2214
+ }
2215
+ return this.readText(row.hash);
2216
+ }
2217
+
2218
+ readTerminalData(runId: string): WorkflowRunTerminalData | null {
2219
+ const row = this.state.connection
2220
+ .prepare(
2221
+ `SELECT status, status_detail AS statusDetail, restart_number AS restartNumber
2222
+ FROM runs WHERE run_id = ?`,
2223
+ )
2224
+ .get(runId) as
2225
+ | { status?: unknown; statusDetail?: unknown; restartNumber?: unknown }
2226
+ | undefined;
2227
+ if (
2228
+ row === undefined ||
2229
+ !["completed", "failed", "timed_out", "cancelled"].includes(String(row.status)) ||
2230
+ typeof row.restartNumber !== "number"
2231
+ ) {
2232
+ return null;
2233
+ }
2234
+ return {
2235
+ runId,
2236
+ status: row.status as WorkflowRunTerminalData["status"],
2237
+ statusDetail: typeof row.statusDetail === "string" ? row.statusDetail : null,
2238
+ input: this.readRunInput(runId) as JsonValue,
2239
+ finalOutput: this.readRunFinalOutput(runId),
2240
+ error: this.readRunError(runId),
2241
+ presentationInstructions: this.readPresentationInstructions(runId),
2242
+ restartNumber: row.restartNumber,
2243
+ };
2244
+ }
2245
+
2246
+ readRunState(runId: string): WorkflowRunState | null {
2247
+ const row = this.readRunRow(runId);
2248
+ if (row === undefined) return null;
2249
+ return this.materializeRunState(row, this.readDefinition(row.definitionHash));
2250
+ }
2251
+
2185
2252
  readRun(runId: string, options: ReadWorkflowRunOptions = {}): LoadedWorkflowRun | null {
2186
2253
  const row = this.readRunRow(runId);
2187
2254
  if (row === undefined) return null;
2188
2255
  const snapshot = this.readDefinition(row.definitionHash);
2189
- const state = this.readRunState(row, snapshot);
2256
+ const state = this.materializeRunState(row, snapshot);
2190
2257
  const segments = this.segmentRows(runId).map((segment) => this.loadSegment(segment, state));
2191
2258
  const flat = segments.find((segment) => segment.attemptId === "") ?? emptySegment();
2192
2259
  return {
@@ -2465,7 +2532,7 @@ export class WorkflowRunStore {
2465
2532
 
2466
2533
  private assertSessionWriteAuthority(runId: string): void {
2467
2534
  const run = this.requireRunRow(runId);
2468
- if (this.allowHostSessionRecording) return;
2535
+ if (this.allowServerSessionRecording) return;
2469
2536
  this.assertWriteAuthority(run, this.contextFor(runId).revision);
2470
2537
  }
2471
2538
 
@@ -3458,7 +3525,7 @@ export class WorkflowRunStore {
3458
3525
  return row;
3459
3526
  }
3460
3527
 
3461
- private readRunState(row: RunRow, snapshot: WorkflowDefinitionSnapshot): WorkflowRunState {
3528
+ private materializeRunState(row: RunRow, snapshot: WorkflowDefinitionSnapshot): WorkflowRunState {
3462
3529
  const steps = this.readSteps(row.runId);
3463
3530
  return this.buildRunState(
3464
3531
  row,
@@ -53,9 +53,7 @@ export type WorkflowEffectRecovery = "idempotent" | "manual";
53
53
  export type WorkflowManagedEffect = {
54
54
  /** Stable external effect category, for example `github.comment`. */
55
55
  type: string;
56
- /** Stable key. Idempotent adapters must pass this key to the external system. */
57
- idempotencyKey: string | ((context: WorkflowNodeContext) => MaybePromise<string>);
58
- /** Canonical request data used to reject key reuse with another operation. */
56
+ /** Canonical request data used to reject engine-owned key reuse with another operation. */
59
57
  request: unknown | ((context: WorkflowNodeContext) => MaybePromise<unknown>);
60
58
  /** `manual` never retries after an uncertain child exit. */
61
59
  recovery: WorkflowEffectRecovery;
@@ -98,7 +96,7 @@ export type WorkflowProgressData = {
98
96
  export type WorkflowNodeCommon = {
99
97
  /**
100
98
  * Per-node active-execution timeout or a callback that derives it from the run context.
101
- * Waiting, paused, disconnected, and host-down origin-session time does not count.
99
+ * Waiting, paused, disconnected, and server-down origin-session time does not count.
102
100
  * Null disables the deadline. Omission falls back to the engine default (15 minutes).
103
101
  */
104
102
  timeoutMs?: number | null | ((context: WorkflowNodeContext) => MaybePromise<number | null>);
@@ -964,7 +962,7 @@ export type WorkflowEngineOptions = {
964
962
  notificationSink?: WorkflowNotificationSink;
965
963
  /** Canonical SQLite database. Defaults to `~/.pi/agent/workflows/state.sqlite`. */
966
964
  databasePath?: string;
967
- /** Durable execution store. Workers use a host-backed implementation. */
965
+ /** Durable execution store. Runners use a server-backed implementation. */
968
966
  store?: import("./store.js").WorkflowExecutionStore;
969
967
  /**
970
968
  * Awaited after `run_started` is persisted, before any node executes.
@@ -1,6 +0,0 @@
1
- import type { ControllerCondition, ControllerConditionInput, ControllerResourceStatus, ControllerStatusPatch } from "./types.js";
2
- export declare function conditionTrue(type: string, reason: string, message?: string): ControllerConditionInput;
3
- export declare function conditionFalse(type: string, reason: string, message?: string): ControllerConditionInput;
4
- export declare function conditionUnknown(type: string, reason: string, message?: string): ControllerConditionInput;
5
- export declare function applyStatusPatch<TStatus>(current: ControllerResourceStatus<TStatus>, patch: ControllerStatusPatch<TStatus> | undefined, generation: number, now: string): ControllerResourceStatus<TStatus>;
6
- export declare function mergeConditions(current: ControllerCondition[], updates: ControllerConditionInput[], generation: number, now: string): ControllerCondition[];
@@ -1 +0,0 @@
1
- {"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../src/controllers/conditions.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import type { AnyControllerDefinition, ControllerDefinition, ControllerResource } from "./types.js";
2
- export declare function defineController<TSpec, TStatus>(definition: ControllerDefinition<TSpec, TStatus>): ControllerDefinition<TSpec, TStatus>;
3
- export declare function isControllerDefinition(value: unknown): value is AnyControllerDefinition;
4
- export declare function assertValidControllerDefinition<TSpec, TStatus>(definition: ControllerDefinition<TSpec, TStatus>): void;
5
- export declare function asAnyControllerDefinition<TSpec, TStatus>(definition: ControllerDefinition<TSpec, TStatus>): AnyControllerDefinition;
6
- export declare function asTypedResource<TSpec, TStatus>(resource: ControllerResource): ControllerResource<TSpec, TStatus>;
@@ -1,45 +0,0 @@
1
- const CONTROLLER_DEFINITION_BRAND = Symbol.for("pi-workflows.controller-definition");
2
- const CONTROLLER_NAME_PATTERN = /^[a-z][a-z0-9-]*$/;
3
- export function defineController(definition) {
4
- assertValidControllerDefinition(definition);
5
- if (isControllerDefinition(definition)) {
6
- return definition;
7
- }
8
- Object.defineProperty(definition, CONTROLLER_DEFINITION_BRAND, {
9
- value: true,
10
- enumerable: false,
11
- configurable: false,
12
- writable: false,
13
- });
14
- return definition;
15
- }
16
- export function isControllerDefinition(value) {
17
- return (value !== null &&
18
- typeof value === "object" &&
19
- value[CONTROLLER_DEFINITION_BRAND] === true);
20
- }
21
- export function assertValidControllerDefinition(definition) {
22
- if (definition === null || typeof definition !== "object") {
23
- throw new Error("Invalid controller definition: expected an object");
24
- }
25
- if (!CONTROLLER_NAME_PATTERN.test(definition.name)) {
26
- throw new Error(`Invalid controller definition: name ${JSON.stringify(definition.name)} must match ${CONTROLLER_NAME_PATTERN.source}`);
27
- }
28
- if (typeof definition.initialStatus !== "function") {
29
- throw new Error("Invalid controller definition: initialStatus must be a function");
30
- }
31
- if (typeof definition.reconcile !== "function") {
32
- throw new Error("Invalid controller definition: reconcile must be a function");
33
- }
34
- if (definition.timeoutMs !== undefined &&
35
- (!Number.isSafeInteger(definition.timeoutMs) || definition.timeoutMs <= 0)) {
36
- throw new Error("Invalid controller definition: timeoutMs must be a positive safe integer");
37
- }
38
- }
39
- export function asAnyControllerDefinition(definition) {
40
- return definition;
41
- }
42
- export function asTypedResource(resource) {
43
- return resource;
44
- }
45
- //# sourceMappingURL=definition.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/controllers/definition.ts"],"names":[],"mappings":"AAEA,MAAM,2BAA2B,GAAG,MAAM,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;AACrF,MAAM,uBAAuB,GAAG,mBAAmB,CAAC;AAEpD,MAAM,UAAU,gBAAgB,CAC9B,UAAgD;IAEhD,+BAA+B,CAAC,UAAU,CAAC,CAAC;IAC5C,IAAI,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC;QACvC,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,2BAA2B,EAAE;QAC7D,KAAK,EAAE,IAAI;QACX,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;QACnB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IACH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,CACL,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACxB,KAAsC,CAAC,2BAA2B,CAAC,KAAK,IAAI,CAC9E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,UAAgD;IAEhD,IAAI,UAAU,KAAK,IAAI,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CACb,uCAAuC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,uBAAuB,CAAC,MAAM,EAAE,CACtH,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,UAAU,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,OAAO,UAAU,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IACD,IACE,UAAU,CAAC,SAAS,KAAK,SAAS;QAClC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,SAAS,IAAI,CAAC,CAAC,EAC1E,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;IAC9F,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,UAAgD;IAEhD,OAAO,UAA+D,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,QAA4B;IAE5B,OAAO,QAA8C,CAAC;AACxD,CAAC"}
@@ -1,15 +0,0 @@
1
- import type { ControllerStore } from "./store.js";
2
- import type { ControllerEffects, ControllerQueueClaim, ControllerResource, EffectDefinition, EffectRecord } from "./types.js";
3
- export declare class ControllerEffectService implements ControllerEffects {
4
- private readonly store;
5
- private readonly resource;
6
- private readonly claim;
7
- private readonly signal;
8
- private used;
9
- constructor(store: ControllerStore, resource: ControllerResource, claim: ControllerQueueClaim, signal: AbortSignal);
10
- ensure<TRequest>(definition: EffectDefinition<TRequest>): Promise<EffectRecord>;
11
- private observe;
12
- private applyObservation;
13
- private apply;
14
- private recordEvent;
15
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"effects.js","sourceRoot":"","sources":["../../src/controllers/effects.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- export declare class ResourceConflictError extends Error {
2
- constructor(controller: string, key: string);
3
- }
4
- export declare class ResourceNotFoundError extends Error {
5
- constructor(controller: string, key: string);
6
- }
7
- export declare class EffectRequestConflictError extends Error {
8
- constructor(key: string);
9
- }
10
- export declare class WorkflowRequestConflictError extends Error {
11
- constructor(key: string);
12
- }
@@ -1,25 +0,0 @@
1
- export class ResourceConflictError extends Error {
2
- constructor(controller, key) {
3
- super(`Controller resource ${controller}/${key} changed during reconciliation`);
4
- this.name = "ResourceConflictError";
5
- }
6
- }
7
- export class ResourceNotFoundError extends Error {
8
- constructor(controller, key) {
9
- super(`Controller resource not found: ${controller}/${key}`);
10
- this.name = "ResourceNotFoundError";
11
- }
12
- }
13
- export class EffectRequestConflictError extends Error {
14
- constructor(key) {
15
- super(`Effect key ${JSON.stringify(key)} was reused with a different request`);
16
- this.name = "EffectRequestConflictError";
17
- }
18
- }
19
- export class WorkflowRequestConflictError extends Error {
20
- constructor(key) {
21
- super(`Workflow request key ${JSON.stringify(key)} was reused with different input`);
22
- this.name = "WorkflowRequestConflictError";
23
- }
24
- }
25
- //# sourceMappingURL=errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/controllers/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,UAAkB,EAAE,GAAW;QACzC,KAAK,CAAC,uBAAuB,UAAU,IAAI,GAAG,gCAAgC,CAAC,CAAC;QAChF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,UAAkB,EAAE,GAAW;QACzC,KAAK,CAAC,kCAAkC,UAAU,IAAI,GAAG,EAAE,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACnD,YAAY,GAAW;QACrB,KAAK,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QAC/E,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAED,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACrD,YAAY,GAAW;QACrB,KAAK,CAAC,wBAAwB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QACrF,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF"}
@@ -1,12 +0,0 @@
1
- export { assertValidControllerDefinition, defineController, isControllerDefinition, } from "./definition.js";
2
- export { applyStatusPatch, conditionFalse, conditionTrue, conditionUnknown, mergeConditions, } from "./conditions.js";
3
- export { EffectRequestConflictError, ResourceConflictError, ResourceNotFoundError, WorkflowRequestConflictError, } from "./errors.js";
4
- export { ControllerEffectService } from "./effects.js";
5
- export { canonicalJson, jsonFingerprint } from "./json.js";
6
- export { ControllerManager, type ControllerManagerOptions } from "./manager.js";
7
- export { createResultHelpers, requeue, requeueAfter, settled } from "./results.js";
8
- export { SqliteControllerStore, type RunEventRecord, type WorkflowRunClaimOptions, type WorkflowRunPreparationResult, type WorkflowRunQueueRecord, type WorkflowRunReservationOptions, } from "./sqlite.js";
9
- export { type ControllerStore, type EffectReservation, type QueueItem, type QueueRequeueOptions, type WorkflowRecordUpdate, type WorkflowReservation, } from "./store.js";
10
- export { controllerFileStem, controllerSearchDirs, discoverControllers, loadControllerFile, loadDiscoveredControllers, type DiscoveredController, } from "./loader.js";
11
- export { ControllerWorkflowCoordinator, type ControllerWorkflowControlRequest, type ControllerWorkflowScheduler, type WorkflowSchedulerRequest, type WorkflowSchedulerResult, } from "./workflows.js";
12
- export type { AnyControllerDefinition, ChildWorkflowRecord, ChildWorkflowReference, ChildWorkflowRequest, ChildWorkflowState, ControllerCondition, ControllerConditionInput, ControllerConditionStatus, ControllerDefinition, ControllerEffects, ControllerFollowUpResult, ControllerQueueFollowUpRequest, ControllerRemoveFollowUpRequest, ControllerSettingsChangeRequest, ControllerSettingsChangeResult, ControllerEvent, ControllerQueueClaim, ControllerResource, ControllerResourceRef, ControllerResourceStatus, ControllerStatusPatch, ControllerWorkflows, EffectApplication, EffectDefinition, EffectObservation, EffectRecord, EffectState, JsonObject, JsonPrimitive, JsonValue, MaybePromise, ReconcileContext, ReconcileResult, } from "./types.js";
@@ -1,12 +0,0 @@
1
- export { assertValidControllerDefinition, defineController, isControllerDefinition, } from "./definition.js";
2
- export { applyStatusPatch, conditionFalse, conditionTrue, conditionUnknown, mergeConditions, } from "./conditions.js";
3
- export { EffectRequestConflictError, ResourceConflictError, ResourceNotFoundError, WorkflowRequestConflictError, } from "./errors.js";
4
- export { ControllerEffectService } from "./effects.js";
5
- export { canonicalJson, jsonFingerprint } from "./json.js";
6
- export { ControllerManager } from "./manager.js";
7
- export { createResultHelpers, requeue, requeueAfter, settled } from "./results.js";
8
- export { SqliteControllerStore, } from "./sqlite.js";
9
- export {} from "./store.js";
10
- export { controllerFileStem, controllerSearchDirs, discoverControllers, loadControllerFile, loadDiscoveredControllers, } from "./loader.js";
11
- export { ControllerWorkflowCoordinator, } from "./workflows.js";
12
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/controllers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,+BAA+B,EAC/B,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAiC,MAAM,cAAc,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EACL,qBAAqB,GAMtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAON,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,GAE1B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,6BAA6B,GAK9B,MAAM,gBAAgB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/controllers/json.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- import type { AnyControllerDefinition } from "./types.js";
2
- export type DiscoveredController = {
3
- name: string;
4
- path: string;
5
- source: "project" | "global";
6
- };
7
- export declare function controllerSearchDirs(options: {
8
- cwd: string;
9
- homeDir?: string;
10
- }): {
11
- dir: string;
12
- source: DiscoveredController["source"];
13
- }[];
14
- export declare function controllerFileStem(filePath: string): string;
15
- export declare function loadControllerFile(filePath: string): Promise<AnyControllerDefinition>;
16
- export declare function discoverControllers(options: {
17
- cwd: string;
18
- homeDir?: string;
19
- }): Promise<DiscoveredController[]>;
20
- export declare function loadDiscoveredControllers(options: {
21
- cwd: string;
22
- homeDir?: string;
23
- }): Promise<AnyControllerDefinition[]>;