@pasko70/pibo 3.2.7 → 3.4.0

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 (254) hide show
  1. package/dist/agent-runtime/capabilities.js +5 -0
  2. package/dist/agent-runtime/contract.js +2 -0
  3. package/dist/agent-runtime/routed-session.js +68 -11
  4. package/dist/agent-runtimes/codex-native/adapter.js +4 -1
  5. package/dist/agent-runtimes/codex-native/process.js +1 -1
  6. package/dist/agent-runtimes/codex-native/protocol-version.js +6 -6
  7. package/dist/agent-runtimes/codex-native/thread.js +26 -4
  8. package/dist/agent-runtimes/omp/adapter.js +1 -0
  9. package/dist/agent-runtimes/omp/process.js +23 -3
  10. package/dist/agent-runtimes/omp/protocol-version.js +2 -0
  11. package/dist/agent-runtimes/pi/adapter.js +5 -1
  12. package/dist/agent-runtimes/pi/model-catalog.js +2 -2
  13. package/dist/agent-runtimes/pi/routed-session.js +53 -5
  14. package/dist/agent-runtimes/pi/runtime.js +6 -3
  15. package/dist/apps/chat/chat-api-routes.js +12 -38
  16. package/dist/apps/chat/chat-request-normalizers.js +15 -50
  17. package/dist/apps/chat/data/legacy-project-migration.js +492 -0
  18. package/dist/apps/chat/data/room-service.js +2 -2
  19. package/dist/apps/chat/data/workflow-session-model.js +1 -0
  20. package/dist/apps/chat/data/workflow-session-service.js +352 -0
  21. package/dist/apps/chat/rooms.js +1 -1
  22. package/dist/apps/chat/session-metadata.js +30 -0
  23. package/dist/apps/chat/trace.js +15 -2
  24. package/dist/apps/chat/types/rooms.js +30 -0
  25. package/dist/apps/chat/web-app.js +355 -651
  26. package/dist/apps/chat/workflow-catalog.js +18 -18
  27. package/dist/apps/chat/{project-workflow-human-actions.js → workflow-human-actions.js} +14 -14
  28. package/dist/apps/chat/workflow-manual-trigger-runtime.js +5 -1
  29. package/dist/apps/chat/workflow-persistence.js +20 -28
  30. package/dist/apps/chat/{project-workflow-sessions.js → workflow-sessions.js} +18 -17
  31. package/dist/apps/chat-ui/assets/{dist-ENXYFYda.js → dist-AhtdAETR.js} +1 -1
  32. package/dist/apps/chat-ui/assets/{dist-CGgUuVB6.js → dist-Bk_L1qbJ.js} +1 -1
  33. package/dist/apps/chat-ui/assets/{dist-DG6T1maU.js → dist-Dyp6sLQn.js} +1 -1
  34. package/dist/apps/chat-ui/assets/{dist-CFtZTGHa.js → dist-jVaiGXFD.js} +1 -1
  35. package/dist/apps/chat-ui/assets/{dist-BikaGikn.js → dist-t25moyJS.js} +1 -1
  36. package/dist/apps/chat-ui/assets/index-CZjNw-aK.js +228 -0
  37. package/dist/apps/chat-ui/assets/index-CcEjFITM.css +1 -0
  38. package/dist/apps/chat-ui/index.html +2 -2
  39. package/dist/apps/chat-vscode-web/assets/index-Spj6M0tn.js +43 -0
  40. package/dist/apps/chat-vscode-web/index.html +1 -1
  41. package/dist/compute/pool/cli.js +1 -1
  42. package/dist/compute/pool/seeds.js +2 -3
  43. package/dist/config/config.js +1 -1
  44. package/dist/core/session-router.js +19 -10
  45. package/dist/debug/agents.js +9 -3
  46. package/dist/plugins/builtin.js +2 -0
  47. package/dist/plugins/registry.js +1 -0
  48. package/dist/previews/cli.js +154 -79
  49. package/dist/previews/compute-worker.js +37 -0
  50. package/dist/previews/config.js +2 -1
  51. package/dist/previews/migrations/session-ownership.js +7 -0
  52. package/dist/previews/proxy.js +4 -2
  53. package/dist/previews/public-setup.js +108 -0
  54. package/dist/previews/store.js +20 -13
  55. package/dist/previews/web-app.js +12 -2
  56. package/dist/providers/openai-gpt56.js +41 -3
  57. package/dist/sessions/workflow-session-kind.js +0 -3
  58. package/dist/subagents/context.js +2 -2
  59. package/dist/subagents/observation-query.js +49 -6
  60. package/dist/subagents/observation-text-regex.js +124 -0
  61. package/dist/subagents/tool.js +3 -2
  62. package/dist/tools/hashline.js +64 -0
  63. package/npm-shrinkwrap.json +786 -284
  64. package/package.json +11 -6
  65. package/packages/workflows/README.md +21 -0
  66. package/packages/workflows/dist/api/index.d.ts +48 -0
  67. package/packages/workflows/dist/api/index.d.ts.map +1 -0
  68. package/packages/workflows/dist/api/index.js +96 -0
  69. package/packages/workflows/dist/api/index.js.map +1 -0
  70. package/packages/workflows/dist/definition-hash.d.ts +4 -0
  71. package/packages/workflows/dist/definition-hash.d.ts.map +1 -0
  72. package/packages/workflows/dist/definition-hash.js +27 -0
  73. package/packages/workflows/dist/definition-hash.js.map +1 -0
  74. package/packages/workflows/dist/fixtures/index.d.ts +39 -0
  75. package/packages/workflows/dist/fixtures/index.d.ts.map +1 -0
  76. package/packages/workflows/dist/fixtures/index.js +608 -0
  77. package/packages/workflows/dist/fixtures/index.js.map +1 -0
  78. package/packages/workflows/dist/index.d.ts +16 -0
  79. package/packages/workflows/dist/index.d.ts.map +1 -0
  80. package/packages/workflows/dist/index.js +10 -0
  81. package/packages/workflows/dist/index.js.map +1 -0
  82. package/packages/workflows/dist/inspection/index.d.ts +47 -0
  83. package/packages/workflows/dist/inspection/index.d.ts.map +1 -0
  84. package/packages/workflows/dist/inspection/index.js +131 -0
  85. package/packages/workflows/dist/inspection/index.js.map +1 -0
  86. package/packages/workflows/dist/registry/index.d.ts +30 -0
  87. package/packages/workflows/dist/registry/index.d.ts.map +1 -0
  88. package/packages/workflows/dist/registry/index.js +161 -0
  89. package/packages/workflows/dist/registry/index.js.map +1 -0
  90. package/packages/workflows/dist/runtime/adapter-node.d.ts +28 -0
  91. package/packages/workflows/dist/runtime/adapter-node.d.ts.map +1 -0
  92. package/packages/workflows/dist/runtime/adapter-node.js +172 -0
  93. package/packages/workflows/dist/runtime/adapter-node.js.map +1 -0
  94. package/packages/workflows/dist/runtime/agent-node.d.ts +32 -0
  95. package/packages/workflows/dist/runtime/agent-node.d.ts.map +1 -0
  96. package/packages/workflows/dist/runtime/agent-node.js +231 -0
  97. package/packages/workflows/dist/runtime/agent-node.js.map +1 -0
  98. package/packages/workflows/dist/runtime/agent-runtime.d.ts +25 -0
  99. package/packages/workflows/dist/runtime/agent-runtime.d.ts.map +1 -0
  100. package/packages/workflows/dist/runtime/agent-runtime.js +111 -0
  101. package/packages/workflows/dist/runtime/agent-runtime.js.map +1 -0
  102. package/packages/workflows/dist/runtime/code-node.d.ts +31 -0
  103. package/packages/workflows/dist/runtime/code-node.d.ts.map +1 -0
  104. package/packages/workflows/dist/runtime/code-node.js +223 -0
  105. package/packages/workflows/dist/runtime/code-node.js.map +1 -0
  106. package/packages/workflows/dist/runtime/dispatch-failures.d.ts +36 -0
  107. package/packages/workflows/dist/runtime/dispatch-failures.d.ts.map +1 -0
  108. package/packages/workflows/dist/runtime/dispatch-failures.js +80 -0
  109. package/packages/workflows/dist/runtime/dispatch-failures.js.map +1 -0
  110. package/packages/workflows/dist/runtime/edge-payloads.d.ts +3 -0
  111. package/packages/workflows/dist/runtime/edge-payloads.d.ts.map +1 -0
  112. package/packages/workflows/dist/runtime/edge-payloads.js +11 -0
  113. package/packages/workflows/dist/runtime/edge-payloads.js.map +1 -0
  114. package/packages/workflows/dist/runtime/edge-transfer.d.ts +39 -0
  115. package/packages/workflows/dist/runtime/edge-transfer.d.ts.map +1 -0
  116. package/packages/workflows/dist/runtime/edge-transfer.js +356 -0
  117. package/packages/workflows/dist/runtime/edge-transfer.js.map +1 -0
  118. package/packages/workflows/dist/runtime/human-action.d.ts +43 -0
  119. package/packages/workflows/dist/runtime/human-action.d.ts.map +1 -0
  120. package/packages/workflows/dist/runtime/human-action.js +231 -0
  121. package/packages/workflows/dist/runtime/human-action.js.map +1 -0
  122. package/packages/workflows/dist/runtime/human-node.d.ts +27 -0
  123. package/packages/workflows/dist/runtime/human-node.d.ts.map +1 -0
  124. package/packages/workflows/dist/runtime/human-node.js +126 -0
  125. package/packages/workflows/dist/runtime/human-node.js.map +1 -0
  126. package/packages/workflows/dist/runtime/ids.d.ts +2 -0
  127. package/packages/workflows/dist/runtime/ids.d.ts.map +1 -0
  128. package/packages/workflows/dist/runtime/ids.js +4 -0
  129. package/packages/workflows/dist/runtime/ids.js.map +1 -0
  130. package/packages/workflows/dist/runtime/index.d.ts +23 -0
  131. package/packages/workflows/dist/runtime/index.d.ts.map +1 -0
  132. package/packages/workflows/dist/runtime/index.js +12 -0
  133. package/packages/workflows/dist/runtime/index.js.map +1 -0
  134. package/packages/workflows/dist/runtime/manual-trigger.d.ts +51 -0
  135. package/packages/workflows/dist/runtime/manual-trigger.d.ts.map +1 -0
  136. package/packages/workflows/dist/runtime/manual-trigger.js +403 -0
  137. package/packages/workflows/dist/runtime/manual-trigger.js.map +1 -0
  138. package/packages/workflows/dist/runtime/nested-workflow-node.d.ts +48 -0
  139. package/packages/workflows/dist/runtime/nested-workflow-node.d.ts.map +1 -0
  140. package/packages/workflows/dist/runtime/nested-workflow-node.js +246 -0
  141. package/packages/workflows/dist/runtime/nested-workflow-node.js.map +1 -0
  142. package/packages/workflows/dist/runtime/one-node-agent.d.ts +34 -0
  143. package/packages/workflows/dist/runtime/one-node-agent.d.ts.map +1 -0
  144. package/packages/workflows/dist/runtime/one-node-agent.js +334 -0
  145. package/packages/workflows/dist/runtime/one-node-agent.js.map +1 -0
  146. package/packages/workflows/dist/runtime/persistence.d.ts +9 -0
  147. package/packages/workflows/dist/runtime/persistence.d.ts.map +1 -0
  148. package/packages/workflows/dist/runtime/persistence.js +67 -0
  149. package/packages/workflows/dist/runtime/persistence.js.map +1 -0
  150. package/packages/workflows/dist/runtime/pibo-routing.d.ts +126 -0
  151. package/packages/workflows/dist/runtime/pibo-routing.d.ts.map +1 -0
  152. package/packages/workflows/dist/runtime/pibo-routing.js +96 -0
  153. package/packages/workflows/dist/runtime/pibo-routing.js.map +1 -0
  154. package/packages/workflows/dist/runtime/prompts.d.ts +20 -0
  155. package/packages/workflows/dist/runtime/prompts.d.ts.map +1 -0
  156. package/packages/workflows/dist/runtime/prompts.js +235 -0
  157. package/packages/workflows/dist/runtime/prompts.js.map +1 -0
  158. package/packages/workflows/dist/runtime/retry.d.ts +35 -0
  159. package/packages/workflows/dist/runtime/retry.d.ts.map +1 -0
  160. package/packages/workflows/dist/runtime/retry.js +80 -0
  161. package/packages/workflows/dist/runtime/retry.js.map +1 -0
  162. package/packages/workflows/dist/runtime/state.d.ts +14 -0
  163. package/packages/workflows/dist/runtime/state.d.ts.map +1 -0
  164. package/packages/workflows/dist/runtime/state.js +139 -0
  165. package/packages/workflows/dist/runtime/state.js.map +1 -0
  166. package/packages/workflows/dist/runtime/time.d.ts +6 -0
  167. package/packages/workflows/dist/runtime/time.d.ts.map +1 -0
  168. package/packages/workflows/dist/runtime/time.js +42 -0
  169. package/packages/workflows/dist/runtime/time.js.map +1 -0
  170. package/packages/workflows/dist/store/catalog-records.d.ts +18 -0
  171. package/packages/workflows/dist/store/catalog-records.d.ts.map +1 -0
  172. package/packages/workflows/dist/store/catalog-records.js +59 -0
  173. package/packages/workflows/dist/store/catalog-records.js.map +1 -0
  174. package/packages/workflows/dist/store/contracts.d.ts +149 -0
  175. package/packages/workflows/dist/store/contracts.d.ts.map +1 -0
  176. package/packages/workflows/dist/store/contracts.js +2 -0
  177. package/packages/workflows/dist/store/contracts.js.map +1 -0
  178. package/packages/workflows/dist/store/draft-writes.d.ts +7 -0
  179. package/packages/workflows/dist/store/draft-writes.d.ts.map +1 -0
  180. package/packages/workflows/dist/store/draft-writes.js +18 -0
  181. package/packages/workflows/dist/store/draft-writes.js.map +1 -0
  182. package/packages/workflows/dist/store/index.d.ts +55 -0
  183. package/packages/workflows/dist/store/index.d.ts.map +1 -0
  184. package/packages/workflows/dist/store/index.js +650 -0
  185. package/packages/workflows/dist/store/index.js.map +1 -0
  186. package/packages/workflows/dist/store/list-query.d.ts +13 -0
  187. package/packages/workflows/dist/store/list-query.d.ts.map +1 -0
  188. package/packages/workflows/dist/store/list-query.js +20 -0
  189. package/packages/workflows/dist/store/list-query.js.map +1 -0
  190. package/packages/workflows/dist/store/row-mappers.d.ts +206 -0
  191. package/packages/workflows/dist/store/row-mappers.d.ts.map +1 -0
  192. package/packages/workflows/dist/store/row-mappers.js +262 -0
  193. package/packages/workflows/dist/store/row-mappers.js.map +1 -0
  194. package/packages/workflows/dist/store/schema.d.ts +13 -0
  195. package/packages/workflows/dist/store/schema.d.ts.map +1 -0
  196. package/packages/workflows/dist/store/schema.js +458 -0
  197. package/packages/workflows/dist/store/schema.js.map +1 -0
  198. package/packages/workflows/dist/store/write-values.d.ts +18 -0
  199. package/packages/workflows/dist/store/write-values.d.ts.map +1 -0
  200. package/packages/workflows/dist/store/write-values.js +227 -0
  201. package/packages/workflows/dist/store/write-values.js.map +1 -0
  202. package/packages/workflows/dist/types/index.d.ts +1202 -0
  203. package/packages/workflows/dist/types/index.d.ts.map +1 -0
  204. package/packages/workflows/dist/types/index.js +8 -0
  205. package/packages/workflows/dist/types/index.js.map +1 -0
  206. package/packages/workflows/dist/validation/diagnostics.d.ts +27 -0
  207. package/packages/workflows/dist/validation/diagnostics.d.ts.map +1 -0
  208. package/packages/workflows/dist/validation/diagnostics.js +104 -0
  209. package/packages/workflows/dist/validation/diagnostics.js.map +1 -0
  210. package/packages/workflows/dist/validation/graph-cycles.d.ts +4 -0
  211. package/packages/workflows/dist/validation/graph-cycles.d.ts.map +1 -0
  212. package/packages/workflows/dist/validation/graph-cycles.js +130 -0
  213. package/packages/workflows/dist/validation/graph-cycles.js.map +1 -0
  214. package/packages/workflows/dist/validation/graph-edges.d.ts +5 -0
  215. package/packages/workflows/dist/validation/graph-edges.d.ts.map +1 -0
  216. package/packages/workflows/dist/validation/graph-edges.js +48 -0
  217. package/packages/workflows/dist/validation/graph-edges.js.map +1 -0
  218. package/packages/workflows/dist/validation/graph-ports.d.ts +5 -0
  219. package/packages/workflows/dist/validation/graph-ports.d.ts.map +1 -0
  220. package/packages/workflows/dist/validation/graph-ports.js +55 -0
  221. package/packages/workflows/dist/validation/graph-ports.js.map +1 -0
  222. package/packages/workflows/dist/validation/index.d.ts +18 -0
  223. package/packages/workflows/dist/validation/index.d.ts.map +1 -0
  224. package/packages/workflows/dist/validation/index.js +175 -0
  225. package/packages/workflows/dist/validation/index.js.map +1 -0
  226. package/packages/workflows/dist/validation/json-schema.d.ts +12 -0
  227. package/packages/workflows/dist/validation/json-schema.d.ts.map +1 -0
  228. package/packages/workflows/dist/validation/json-schema.js +556 -0
  229. package/packages/workflows/dist/validation/json-schema.js.map +1 -0
  230. package/packages/workflows/dist/validation/registry-refs.d.ts +21 -0
  231. package/packages/workflows/dist/validation/registry-refs.d.ts.map +1 -0
  232. package/packages/workflows/dist/validation/registry-refs.js +283 -0
  233. package/packages/workflows/dist/validation/registry-refs.js.map +1 -0
  234. package/packages/workflows/dist/validation/retry-policy.d.ts +3 -0
  235. package/packages/workflows/dist/validation/retry-policy.d.ts.map +1 -0
  236. package/packages/workflows/dist/validation/retry-policy.js +114 -0
  237. package/packages/workflows/dist/validation/retry-policy.js.map +1 -0
  238. package/packages/workflows/dist/validation/schema-declarations.d.ts +5 -0
  239. package/packages/workflows/dist/validation/schema-declarations.d.ts.map +1 -0
  240. package/packages/workflows/dist/validation/schema-declarations.js +36 -0
  241. package/packages/workflows/dist/validation/schema-declarations.js.map +1 -0
  242. package/packages/workflows/dist/validation/state-access.d.ts +4 -0
  243. package/packages/workflows/dist/validation/state-access.d.ts.map +1 -0
  244. package/packages/workflows/dist/validation/state-access.js +121 -0
  245. package/packages/workflows/dist/validation/state-access.js.map +1 -0
  246. package/packages/workflows/dist/xstate/index.d.ts +73 -0
  247. package/packages/workflows/dist/xstate/index.d.ts.map +1 -0
  248. package/packages/workflows/dist/xstate/index.js +728 -0
  249. package/packages/workflows/dist/xstate/index.js.map +1 -0
  250. package/packages/workflows/package.json +23 -0
  251. package/dist/apps/chat/data/project-service.js +0 -1029
  252. package/dist/apps/chat-ui/assets/index-BwT5grLv.css +0 -1
  253. package/dist/apps/chat-ui/assets/index-PTJanD3E.js +0 -228
  254. package/dist/apps/chat-vscode-web/assets/index-D1bpAUkR.js +0 -43
@@ -0,0 +1,728 @@
1
+ export const WORKFLOW_XSTATE_PROJECTION_KIND = "pibo.workflow.xstateProjection";
2
+ export const WORKFLOW_XSTATE_PROJECTION_VERSION = 1;
3
+ export const WORKFLOW_XSTATE_UI_MODEL_KIND = "pibo.workflow.xstateUiModel";
4
+ export const WORKFLOW_XSTATE_UI_MODEL_VERSION = 1;
5
+ export const WORKFLOW_XSTATE_SNAPSHOT_KINDS = ["kernel", "xstate", "ui"];
6
+ export const WORKFLOW_XSTATE_TERMINAL_STATE_IDS = {
7
+ completed: "workflow.completed",
8
+ failed: "workflow.failed",
9
+ cancelled: "workflow.cancelled",
10
+ };
11
+ export const WORKFLOW_XSTATE_NODE_DONE_EVENT = "WORKFLOW.NODE.DONE";
12
+ export const WORKFLOW_XSTATE_RESUME_EVENT = "WORKFLOW.RESUME";
13
+ export const WORKFLOW_XSTATE_CANCEL_EVENT = "WORKFLOW.CANCEL";
14
+ export const WORKFLOW_XSTATE_FAIL_EVENT = "WORKFLOW.FAIL";
15
+ export const WORKFLOW_XSTATE_ACTOR_SOURCES = {
16
+ adapter: "pibo.workflow.actor.adapter",
17
+ agent: "pibo.workflow.actor.agent",
18
+ code: "pibo.workflow.actor.code",
19
+ human: "pibo.workflow.actor.human",
20
+ trigger: "pibo.workflow.actor.trigger",
21
+ workflow: "pibo.workflow.actor.workflow",
22
+ };
23
+ export function createXStateProjectionContextShape(options = {}) {
24
+ return {
25
+ durableTruth: "kernel",
26
+ global: options.global ?? {},
27
+ local: options.local ?? {},
28
+ edge: options.edge ?? {},
29
+ exposesPrivatePayloads: false,
30
+ };
31
+ }
32
+ export function projectWorkflowNodesToXState(definition) {
33
+ const states = {};
34
+ const actors = {};
35
+ const actions = {};
36
+ const delays = {};
37
+ for (const [nodeId, node] of Object.entries(definition.nodes).sort(([left], [right]) => left.localeCompare(right))) {
38
+ const actor = createXStateProjectionActorForNode(nodeId, node);
39
+ const retryPolicy = node.retry ?? definition.retry;
40
+ const state = createXStateProjectionStateForNode(nodeId, node, actor, retryPolicy);
41
+ const failureAction = createXStateRecordFailureAction(nodeId);
42
+ actors[actor.id] = actor;
43
+ actions[failureAction.id] = failureAction;
44
+ states[state.id] = state;
45
+ if (node.kind === "human") {
46
+ const enterWaitAction = createXStateEnterWaitAction(nodeId);
47
+ const resumeWaitAction = createXStateResumeWaitAction(nodeId);
48
+ actions[enterWaitAction.id] = enterWaitAction;
49
+ actions[resumeWaitAction.id] = resumeWaitAction;
50
+ if (node.timeout !== undefined) {
51
+ const timeoutDelay = createXStateHumanTimeoutDelay(nodeId, node.timeout);
52
+ delays[timeoutDelay.id] = timeoutDelay;
53
+ }
54
+ }
55
+ if (retryPolicy !== undefined) {
56
+ const retryDelay = createXStateRetryDelay(nodeId, retryPolicy);
57
+ const scheduleRetryAction = createXStateScheduleRetryAction(nodeId);
58
+ delays[retryDelay.id] = retryDelay;
59
+ actions[scheduleRetryAction.id] = scheduleRetryAction;
60
+ states[xstateRetryDelayStateIdForNode(nodeId)] = createXStateRetryDelayStateForNode(nodeId, retryPolicy, retryDelay.id);
61
+ }
62
+ }
63
+ return {
64
+ initial: xstateInitialStateIdForWorkflow(definition),
65
+ states,
66
+ actors,
67
+ actions,
68
+ delays,
69
+ contextShape: createXStateProjectionContextShape({
70
+ global: definition.state?.global,
71
+ local: Object.fromEntries(Object.entries(definition.nodes)
72
+ .filter(([, node]) => node.state !== undefined)
73
+ .map(([nodeId, node]) => [nodeId, node.state])),
74
+ edge: Object.fromEntries(Object.entries(definition.edges)
75
+ .filter(([, edge]) => edge.state !== undefined)
76
+ .map(([edgeId, edge]) => [edgeId, edge.state])),
77
+ }),
78
+ };
79
+ }
80
+ export function projectWorkflowEdgesToXState(definition) {
81
+ const transitions = [];
82
+ const guards = {};
83
+ const actions = {};
84
+ const loopGuardsByEdgeId = new Map((definition.loops ?? [])
85
+ .filter((loop) => loop.guard?.handler !== undefined)
86
+ .map((loop) => [loop.edgeId, loop.guard]));
87
+ for (const [edgeId, edge] of Object.entries(definition.edges).sort(compareWorkflowEdgeEntriesForXState)) {
88
+ const actionId = xstateTransferEdgeActionId(edgeId);
89
+ const guard = edge.guard ?? loopGuardsByEdgeId.get(edgeId);
90
+ actions[actionId] = {
91
+ id: actionId,
92
+ kind: "transferEdge",
93
+ edgeId,
94
+ durableEffect: true,
95
+ };
96
+ const transition = {
97
+ id: xstateTransitionIdForEdge(edgeId),
98
+ event: xstateEventForEdge(edge),
99
+ source: xstateStateIdForNode(edge.from.nodeId),
100
+ target: xstateStateIdForNode(edge.to.nodeId),
101
+ edgeId,
102
+ actions: [actionId],
103
+ meta: createXStateTransitionMetaForEdge(edgeId, edge, guard),
104
+ };
105
+ if (guard?.handler !== undefined) {
106
+ transition.guard = guard.handler;
107
+ guards[guard.handler] ??= {
108
+ id: guard.handler,
109
+ ref: guard.handler,
110
+ edgeId,
111
+ };
112
+ }
113
+ transitions.push(transition);
114
+ }
115
+ return { transitions, guards, actions };
116
+ }
117
+ export function projectWorkflowToXStateProjection(definition) {
118
+ const nodeProjection = projectWorkflowNodesToXState(definition);
119
+ const edgeProjection = projectWorkflowEdgesToXState(definition);
120
+ const finalProjection = projectWorkflowFinalStatesToXState(definition);
121
+ return createXStateMachineProjection({
122
+ id: definition.id,
123
+ version: definition.version,
124
+ initial: nodeProjection.initial,
125
+ states: nodeProjection.states,
126
+ transitions: [...edgeProjection.transitions, ...finalProjection.transitions],
127
+ actors: nodeProjection.actors,
128
+ guards: edgeProjection.guards,
129
+ actions: { ...nodeProjection.actions, ...edgeProjection.actions, ...finalProjection.actions },
130
+ delays: nodeProjection.delays,
131
+ contextShape: nodeProjection.contextShape,
132
+ metadata: definition.metadata,
133
+ ui: definition.ui,
134
+ });
135
+ }
136
+ export function createXStateMachineProjection(options) {
137
+ const contextShape = options.contextShape ?? createXStateProjectionContextShape();
138
+ const states = options.states ?? {};
139
+ const transitions = options.transitions ?? [];
140
+ const actors = options.actors ?? {};
141
+ const guards = options.guards ?? {};
142
+ const actions = options.actions ?? {};
143
+ const delays = options.delays ?? {};
144
+ const config = createXStateMachineConfig({
145
+ id: options.id,
146
+ version: options.version,
147
+ initial: options.initial,
148
+ states,
149
+ transitions,
150
+ actors,
151
+ guards,
152
+ actions,
153
+ delays,
154
+ contextShape,
155
+ metadata: options.metadata,
156
+ ui: options.ui,
157
+ });
158
+ return {
159
+ kind: WORKFLOW_XSTATE_PROJECTION_KIND,
160
+ schemaVersion: WORKFLOW_XSTATE_PROJECTION_VERSION,
161
+ id: options.id,
162
+ version: options.version,
163
+ initial: options.initial,
164
+ config,
165
+ states,
166
+ transitions,
167
+ actors,
168
+ guards,
169
+ actions,
170
+ delays,
171
+ contextShape,
172
+ finalStates: WORKFLOW_XSTATE_TERMINAL_STATE_IDS,
173
+ metadata: options.metadata,
174
+ ui: options.ui,
175
+ };
176
+ }
177
+ export function createWorkflowXStateUiModel(projection, options = {}) {
178
+ const current = createWorkflowXStateUiCurrent(projection, options);
179
+ const activeStateIds = new Set(current?.stateIds ?? []);
180
+ return {
181
+ kind: WORKFLOW_XSTATE_UI_MODEL_KIND,
182
+ schemaVersion: WORKFLOW_XSTATE_UI_MODEL_VERSION,
183
+ projection: {
184
+ kind: projection.kind,
185
+ schemaVersion: projection.schemaVersion,
186
+ workflowId: projection.id,
187
+ workflowVersion: projection.version,
188
+ initialStateId: projection.initial,
189
+ durableTruth: projection.contextShape.durableTruth,
190
+ exposesPrivatePayloads: projection.contextShape.exposesPrivatePayloads,
191
+ snapshotKinds: [...WORKFLOW_XSTATE_SNAPSHOT_KINDS],
192
+ },
193
+ ...(current ? { current } : {}),
194
+ nodes: createWorkflowXStateUiNodes(projection, activeStateIds, current?.status),
195
+ edges: createWorkflowXStateUiEdges(projection),
196
+ actors: createWorkflowXStateUiActors(projection),
197
+ guards: Object.values(projection.guards).sort((left, right) => left.id.localeCompare(right.id)),
198
+ actions: Object.values(projection.actions).sort((left, right) => left.id.localeCompare(right.id)),
199
+ delays: Object.values(projection.delays).sort((left, right) => left.id.localeCompare(right.id)),
200
+ finalStates: projection.finalStates,
201
+ ui: projection.ui,
202
+ };
203
+ }
204
+ function createWorkflowXStateUiCurrent(projection, options) {
205
+ const snapshot = options.snapshot;
206
+ const stateIds = options.activeStateIds ?? (snapshot ? activeStateIdsFromWorkflowSnapshot(projection, snapshot) : []);
207
+ if (!snapshot && stateIds.length === 0) {
208
+ return undefined;
209
+ }
210
+ return {
211
+ ...(snapshot ? { snapshotKind: snapshot.kind, runId: snapshot.runId, status: snapshot.status } : {}),
212
+ stateIds,
213
+ ...(snapshot?.current.nodeId ? { nodeId: snapshot.current.nodeId } : {}),
214
+ ...(snapshot?.current.edgeId ? { edgeId: snapshot.current.edgeId } : {}),
215
+ };
216
+ }
217
+ function activeStateIdsFromWorkflowSnapshot(projection, snapshot) {
218
+ const terminalStateId = terminalStateIdForWorkflowStatus(projection, snapshot.status);
219
+ if (terminalStateId !== undefined) {
220
+ return [terminalStateId];
221
+ }
222
+ if (snapshot.current.nodeId !== undefined) {
223
+ return [xstateStateIdForNode(snapshot.current.nodeId)];
224
+ }
225
+ return [projection.initial];
226
+ }
227
+ function terminalStateIdForWorkflowStatus(projection, status) {
228
+ if (status === "completed") {
229
+ return projection.finalStates.completed;
230
+ }
231
+ if (status === "failed") {
232
+ return projection.finalStates.failed;
233
+ }
234
+ if (status === "cancelled") {
235
+ return projection.finalStates.cancelled;
236
+ }
237
+ return undefined;
238
+ }
239
+ function createWorkflowXStateUiNodes(projection, activeStateIds, workflowStatus) {
240
+ const projectedStates = Object.values(projection.states).sort((left, right) => left.id.localeCompare(right.id));
241
+ const terminalStates = Object.entries(projection.finalStates).map(([terminalKind, stateId]) => ({
242
+ id: stateId,
243
+ kind: "terminal",
244
+ type: "final",
245
+ tags: [terminalKind],
246
+ meta: {
247
+ pibo: {
248
+ kind: "terminal",
249
+ terminal: { status: terminalKind },
250
+ },
251
+ },
252
+ }));
253
+ return [...projectedStates, ...terminalStates]
254
+ .sort((left, right) => left.id.localeCompare(right.id))
255
+ .map((state) => {
256
+ const pibo = state.meta?.pibo;
257
+ const status = workflowXStateUiNodeStatus(state, activeStateIds, workflowStatus);
258
+ return {
259
+ id: state.id,
260
+ label: workflowXStateUiNodeLabel(state),
261
+ kind: state.kind,
262
+ type: state.type,
263
+ nodeId: state.nodeId,
264
+ nodeKind: pibo?.nodeKind,
265
+ actorId: state.actorId ?? pibo?.actorId,
266
+ status,
267
+ tags: [...(state.tags ?? pibo?.tags ?? [])],
268
+ description: pibo?.description,
269
+ position: pibo?.ui?.position,
270
+ collapsed: pibo?.ui?.collapsed,
271
+ color: pibo?.ui?.color,
272
+ icon: pibo?.ui?.icon,
273
+ wait: pibo?.wait,
274
+ retry: pibo?.retry,
275
+ terminal: pibo?.terminal,
276
+ };
277
+ });
278
+ }
279
+ function workflowXStateUiNodeLabel(state) {
280
+ if (state.kind === "terminal") {
281
+ return state.meta?.pibo.terminal?.status ?? state.id;
282
+ }
283
+ if (state.kind === "retryDelay") {
284
+ return state.nodeId ? `${state.nodeId} retry delay` : state.id;
285
+ }
286
+ return state.nodeId ?? state.id;
287
+ }
288
+ function workflowXStateUiNodeStatus(state, activeStateIds, workflowStatus) {
289
+ if (!activeStateIds.has(state.id)) {
290
+ return "idle";
291
+ }
292
+ if (state.kind === "terminal") {
293
+ if (workflowStatus === "completed" || workflowStatus === "failed" || workflowStatus === "cancelled") {
294
+ return workflowStatus;
295
+ }
296
+ return "active";
297
+ }
298
+ if (state.kind === "wait" || workflowStatus === "waiting") {
299
+ return "waiting";
300
+ }
301
+ if (state.kind === "retryDelay") {
302
+ return "retry_scheduled";
303
+ }
304
+ if (workflowStatus === "failed" || workflowStatus === "cancelled") {
305
+ return workflowStatus;
306
+ }
307
+ return "active";
308
+ }
309
+ function createWorkflowXStateUiEdges(projection) {
310
+ return projection.transitions.map((transition, index) => {
311
+ const edgeUi = transition.meta?.pibo.ui;
312
+ return {
313
+ id: transition.id ?? `workflow.transition.${index}`,
314
+ source: transition.source,
315
+ target: transition.target,
316
+ event: transition.event,
317
+ edgeId: transition.edgeId,
318
+ edgeKind: transition.meta?.pibo.edgeKind,
319
+ guardRef: transition.guard,
320
+ adapterRef: transition.meta?.pibo.adapterRef,
321
+ actions: [...(transition.actions ?? [])],
322
+ label: edgeUi?.label,
323
+ color: edgeUi?.color,
324
+ priority: transition.meta?.pibo.priority,
325
+ };
326
+ });
327
+ }
328
+ function createWorkflowXStateUiActors(projection) {
329
+ return Object.values(projection.actors)
330
+ .sort((left, right) => left.id.localeCompare(right.id))
331
+ .map((actor) => ({
332
+ id: actor.id,
333
+ nodeId: actor.nodeId,
334
+ kind: actor.kind,
335
+ src: actor.src,
336
+ childWorkflowId: actor.childWorkflowId,
337
+ childWorkflowVersion: actor.childWorkflowVersion,
338
+ }));
339
+ }
340
+ function createXStateMachineConfig(options) {
341
+ const configStates = {};
342
+ for (const state of Object.values(options.states).sort((a, b) => a.id.localeCompare(b.id))) {
343
+ configStates[state.id] = {
344
+ id: state.id,
345
+ type: state.type,
346
+ tags: state.tags,
347
+ entry: state.entry,
348
+ exit: state.exit,
349
+ invoke: state.invoke,
350
+ after: state.after,
351
+ meta: state.meta,
352
+ };
353
+ }
354
+ for (const [terminalKind, terminalStateId] of Object.entries(WORKFLOW_XSTATE_TERMINAL_STATE_IDS)) {
355
+ configStates[terminalStateId] ??= {
356
+ id: terminalStateId,
357
+ type: "final",
358
+ meta: createTerminalStateMeta(terminalKind),
359
+ };
360
+ }
361
+ for (const transition of options.transitions) {
362
+ const sourceState = configStates[transition.source];
363
+ if (!sourceState) {
364
+ continue;
365
+ }
366
+ sourceState.on ??= {};
367
+ const projectedTransition = {
368
+ target: transition.target,
369
+ };
370
+ if (transition.guard !== undefined) {
371
+ projectedTransition.guard = transition.guard;
372
+ }
373
+ if (transition.actions !== undefined) {
374
+ projectedTransition.actions = transition.actions;
375
+ }
376
+ if (transition.meta !== undefined) {
377
+ projectedTransition.meta = transition.meta;
378
+ }
379
+ const existingTransition = sourceState.on[transition.event];
380
+ if (existingTransition === undefined) {
381
+ sourceState.on[transition.event] = projectedTransition;
382
+ }
383
+ else if (Array.isArray(existingTransition)) {
384
+ existingTransition.push(projectedTransition);
385
+ }
386
+ else {
387
+ sourceState.on[transition.event] = [existingTransition, projectedTransition];
388
+ }
389
+ }
390
+ return {
391
+ id: options.id,
392
+ initial: options.initial,
393
+ states: configStates,
394
+ meta: {
395
+ pibo: {
396
+ schemaVersion: WORKFLOW_XSTATE_PROJECTION_VERSION,
397
+ workflowId: options.id,
398
+ workflowVersion: options.version,
399
+ snapshotKinds: [...WORKFLOW_XSTATE_SNAPSHOT_KINDS],
400
+ contextShape: options.contextShape,
401
+ actors: options.actors,
402
+ guards: options.guards,
403
+ actions: options.actions,
404
+ delays: options.delays,
405
+ finalStates: WORKFLOW_XSTATE_TERMINAL_STATE_IDS,
406
+ metadata: options.metadata,
407
+ ui: options.ui,
408
+ },
409
+ },
410
+ };
411
+ }
412
+ function createTerminalStateMeta(kind) {
413
+ return {
414
+ pibo: {
415
+ kind: "terminal",
416
+ terminal: {
417
+ status: kind,
418
+ },
419
+ },
420
+ };
421
+ }
422
+ export function createXStateProjectionActorForNode(nodeId, node) {
423
+ return {
424
+ id: xstateActorIdForNode(nodeId),
425
+ src: xstateActorSourceForNodeKind(node.kind),
426
+ nodeId,
427
+ kind: node.kind,
428
+ input: { kind: "nodeInput", nodeId },
429
+ childWorkflowId: node.kind === "workflow" ? node.workflowId : undefined,
430
+ childWorkflowVersion: node.kind === "workflow" ? node.workflowVersion : undefined,
431
+ metadata: node.metadata,
432
+ };
433
+ }
434
+ export function createXStateProjectionStateForNode(nodeId, node, actor = createXStateProjectionActorForNode(nodeId, node), retryPolicy = node.retry) {
435
+ const tags = [node.kind, ...(node.kind === "human" ? ["wait"] : []), ...(node.metadata?.tags ?? [])];
436
+ const stateKind = node.kind === "human" ? "wait" : "node";
437
+ const state = {
438
+ id: xstateStateIdForNode(nodeId),
439
+ kind: stateKind,
440
+ nodeId,
441
+ type: "atomic",
442
+ actorId: actor.id,
443
+ invoke: {
444
+ id: actor.id,
445
+ src: actor.src,
446
+ input: actor.input,
447
+ onError: {
448
+ target: xstateFailureTargetForNode(nodeId, retryPolicy),
449
+ actions: xstateFailureActionsForNode(nodeId, retryPolicy),
450
+ },
451
+ },
452
+ tags,
453
+ meta: {
454
+ pibo: {
455
+ kind: stateKind,
456
+ nodeId,
457
+ nodeKind: node.kind,
458
+ actorId: actor.id,
459
+ description: node.description,
460
+ tags,
461
+ ui: node.ui,
462
+ },
463
+ },
464
+ };
465
+ if (node.kind === "human") {
466
+ state.entry = [xstateEnterWaitActionId(nodeId)];
467
+ state.exit = [xstateResumeWaitActionId(nodeId)];
468
+ state.meta = {
469
+ pibo: {
470
+ kind: stateKind,
471
+ nodeId,
472
+ nodeKind: node.kind,
473
+ actorId: actor.id,
474
+ description: node.description,
475
+ tags,
476
+ ui: node.ui,
477
+ wait: {
478
+ durable: true,
479
+ resumeEvent: WORKFLOW_XSTATE_RESUME_EVENT,
480
+ actions: node.actions,
481
+ timeout: node.timeout,
482
+ },
483
+ },
484
+ };
485
+ if (node.timeout !== undefined) {
486
+ state.after = {
487
+ [xstateHumanTimeoutDelayId(nodeId)]: {
488
+ target: WORKFLOW_XSTATE_TERMINAL_STATE_IDS.failed,
489
+ actions: [xstateRecordFailureActionId(nodeId)],
490
+ },
491
+ };
492
+ }
493
+ }
494
+ return state;
495
+ }
496
+ export function xstateTransitionIdForEdge(edgeId) {
497
+ return `workflow.edge.${edgeId}.transition`;
498
+ }
499
+ export function xstateTransferEdgeActionId(edgeId) {
500
+ return `workflow.edge.${edgeId}.transfer`;
501
+ }
502
+ export function xstateRecordFailureActionId(nodeId) {
503
+ return `workflow.node.${nodeId}.recordFailure`;
504
+ }
505
+ export function xstateEnterWaitActionId(nodeId) {
506
+ return `workflow.node.${nodeId}.enterWait`;
507
+ }
508
+ export function xstateResumeWaitActionId(nodeId) {
509
+ return `workflow.node.${nodeId}.resumeWait`;
510
+ }
511
+ export function xstateScheduleRetryActionId(nodeId) {
512
+ return `workflow.node.${nodeId}.scheduleRetry`;
513
+ }
514
+ export function xstateCompleteNodeActionId(nodeId) {
515
+ return `workflow.node.${nodeId}.complete`;
516
+ }
517
+ export function xstateRetryDelayId(nodeId) {
518
+ return `workflow.node.${nodeId}.retryDelay`;
519
+ }
520
+ export function xstateHumanTimeoutDelayId(nodeId) {
521
+ return `workflow.node.${nodeId}.humanTimeout`;
522
+ }
523
+ export function xstateEventForEdge(edge) {
524
+ if (edge.event !== undefined) {
525
+ return edge.event;
526
+ }
527
+ const kind = xstateEdgeKind(edge);
528
+ if (kind === "error") {
529
+ return WORKFLOW_XSTATE_FAIL_EVENT;
530
+ }
531
+ if (kind === "resume") {
532
+ return WORKFLOW_XSTATE_RESUME_EVENT;
533
+ }
534
+ return WORKFLOW_XSTATE_NODE_DONE_EVENT;
535
+ }
536
+ export function createXStateTransitionMetaForEdge(edgeId, edge, guard = edge.guard) {
537
+ const pibo = {
538
+ edgeId,
539
+ edgeKind: xstateEdgeKind(edge),
540
+ };
541
+ if (guard?.handler !== undefined) {
542
+ pibo.guardRef = guard.handler;
543
+ }
544
+ if (edge.adapter?.transform.id !== undefined) {
545
+ pibo.adapterRef = edge.adapter.transform.id;
546
+ }
547
+ if (edge.join !== undefined) {
548
+ pibo.join = edge.join;
549
+ }
550
+ const priority = edge.priority ?? edge.guard?.priority;
551
+ if (priority !== undefined) {
552
+ pibo.priority = priority;
553
+ }
554
+ if (edge.ui !== undefined) {
555
+ pibo.ui = edge.ui;
556
+ }
557
+ return { pibo };
558
+ }
559
+ function compareWorkflowEdgeEntriesForXState([leftId, left], [rightId, right]) {
560
+ const sourceComparison = left.from.nodeId.localeCompare(right.from.nodeId);
561
+ if (sourceComparison !== 0) {
562
+ return sourceComparison;
563
+ }
564
+ const eventComparison = xstateEventForEdge(left).localeCompare(xstateEventForEdge(right));
565
+ if (eventComparison !== 0) {
566
+ return eventComparison;
567
+ }
568
+ const priorityComparison = xstateEdgePriority(left) - xstateEdgePriority(right);
569
+ if (priorityComparison !== 0) {
570
+ return priorityComparison;
571
+ }
572
+ return leftId.localeCompare(rightId);
573
+ }
574
+ function xstateEdgeKind(edge) {
575
+ return edge.kind ?? "data";
576
+ }
577
+ function xstateEdgePriority(edge) {
578
+ return edge.priority ?? edge.guard?.priority ?? Number.MAX_SAFE_INTEGER;
579
+ }
580
+ export function xstateActorIdForNode(nodeId) {
581
+ return `workflow.node.${nodeId}`;
582
+ }
583
+ export function xstateActorSourceForNodeKind(kind) {
584
+ return WORKFLOW_XSTATE_ACTOR_SOURCES[kind];
585
+ }
586
+ export function xstateInitialStateIdForWorkflow(definition) {
587
+ const initialNodeId = Array.isArray(definition.initial) ? definition.initial[0] : definition.initial;
588
+ return xstateStateIdForNode(initialNodeId);
589
+ }
590
+ export function xstateStateIdForNode(nodeId) {
591
+ return `node.${nodeId}`;
592
+ }
593
+ export function xstateRetryDelayStateIdForNode(nodeId) {
594
+ return `node.${nodeId}.retryDelay`;
595
+ }
596
+ function projectWorkflowFinalStatesToXState(definition) {
597
+ const transitions = [];
598
+ const actions = {};
599
+ const finalNodeIds = Array.isArray(definition.final)
600
+ ? definition.final
601
+ : definition.final === undefined
602
+ ? []
603
+ : [definition.final];
604
+ for (const nodeId of [...finalNodeIds].sort((left, right) => left.localeCompare(right))) {
605
+ if (definition.nodes[nodeId] === undefined) {
606
+ continue;
607
+ }
608
+ const action = createXStateCompleteNodeAction(nodeId);
609
+ actions[action.id] = action;
610
+ transitions.push({
611
+ id: xstateFinalTransitionIdForNode(nodeId),
612
+ event: WORKFLOW_XSTATE_NODE_DONE_EVENT,
613
+ source: xstateStateIdForNode(nodeId),
614
+ target: WORKFLOW_XSTATE_TERMINAL_STATE_IDS.completed,
615
+ actions: [action.id],
616
+ });
617
+ }
618
+ return { transitions, actions };
619
+ }
620
+ function createXStateRecordFailureAction(nodeId) {
621
+ return {
622
+ id: xstateRecordFailureActionId(nodeId),
623
+ kind: "recordFailure",
624
+ nodeId,
625
+ durableEffect: true,
626
+ };
627
+ }
628
+ function createXStateEnterWaitAction(nodeId) {
629
+ return {
630
+ id: xstateEnterWaitActionId(nodeId),
631
+ kind: "enterWait",
632
+ nodeId,
633
+ durableEffect: true,
634
+ };
635
+ }
636
+ function createXStateResumeWaitAction(nodeId) {
637
+ return {
638
+ id: xstateResumeWaitActionId(nodeId),
639
+ kind: "resumeWait",
640
+ nodeId,
641
+ durableEffect: true,
642
+ };
643
+ }
644
+ function createXStateScheduleRetryAction(nodeId) {
645
+ return {
646
+ id: xstateScheduleRetryActionId(nodeId),
647
+ kind: "scheduleRetry",
648
+ nodeId,
649
+ durableEffect: true,
650
+ };
651
+ }
652
+ function createXStateCompleteNodeAction(nodeId) {
653
+ return {
654
+ id: xstateCompleteNodeActionId(nodeId),
655
+ kind: "completeNode",
656
+ nodeId,
657
+ durableEffect: true,
658
+ };
659
+ }
660
+ function createXStateRetryDelay(nodeId, policy) {
661
+ return {
662
+ id: xstateRetryDelayId(nodeId),
663
+ kind: "retry",
664
+ nodeId,
665
+ duration: retryBackoffDuration(policy.backoff),
666
+ durableWakeup: true,
667
+ };
668
+ }
669
+ function createXStateHumanTimeoutDelay(nodeId, duration) {
670
+ return {
671
+ id: xstateHumanTimeoutDelayId(nodeId),
672
+ kind: "humanTimeout",
673
+ nodeId,
674
+ duration,
675
+ durableWakeup: true,
676
+ };
677
+ }
678
+ function createXStateRetryDelayStateForNode(nodeId, policy, delayId) {
679
+ return {
680
+ id: xstateRetryDelayStateIdForNode(nodeId),
681
+ kind: "retryDelay",
682
+ nodeId,
683
+ type: "atomic",
684
+ tags: ["retryDelay"],
685
+ after: {
686
+ [delayId]: {
687
+ target: xstateStateIdForNode(nodeId),
688
+ },
689
+ },
690
+ meta: {
691
+ pibo: {
692
+ kind: "retryDelay",
693
+ nodeId,
694
+ retry: {
695
+ durable: true,
696
+ delayId,
697
+ policy,
698
+ },
699
+ },
700
+ },
701
+ };
702
+ }
703
+ function xstateFailureTargetForNode(nodeId, retryPolicy) {
704
+ return retryPolicy === undefined
705
+ ? WORKFLOW_XSTATE_TERMINAL_STATE_IDS.failed
706
+ : xstateRetryDelayStateIdForNode(nodeId);
707
+ }
708
+ function xstateFailureActionsForNode(nodeId, retryPolicy) {
709
+ return retryPolicy === undefined
710
+ ? [xstateRecordFailureActionId(nodeId)]
711
+ : [xstateRecordFailureActionId(nodeId), xstateScheduleRetryActionId(nodeId)];
712
+ }
713
+ function retryBackoffDuration(policy) {
714
+ if (policy === undefined || policy.kind === "none") {
715
+ return undefined;
716
+ }
717
+ if (policy.kind === "fixed") {
718
+ return { kind: "milliseconds", value: policy.delayMs };
719
+ }
720
+ if (policy.kind === "linear") {
721
+ return { kind: "milliseconds", value: policy.initialMs };
722
+ }
723
+ return { kind: "milliseconds", value: policy.initialMs };
724
+ }
725
+ function xstateFinalTransitionIdForNode(nodeId) {
726
+ return `workflow.node.${nodeId}.complete.transition`;
727
+ }
728
+ //# sourceMappingURL=index.js.map