@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,356 @@
1
+ import { resolveWorkflowAdapter } from "../registry/index.js";
2
+ import { validateNodeOutput, validateWorkflowEdgeAdapterOutput, validateWorkflowPortValue, } from "../validation/index.js";
3
+ import { createWorkflowRunWithoutLocalState } from "./state.js";
4
+ import { createWorkflowRuntimeId as createId } from "./ids.js";
5
+ import { emitWorkflowRuntimeEvent, persistWorkflowEdgeTransfer, persistWorkflowRun, } from "./persistence.js";
6
+ import { createTimestampFactory } from "./time.js";
7
+ export function transferWorkflowEdgeData(definition, run, edgeId, sourceNodeAttempt, options = {}) {
8
+ const timestamp = createTimestampFactory(options.now);
9
+ const edge = definition.edges[edgeId];
10
+ if (!edge) {
11
+ return edgeTransferFailure([
12
+ {
13
+ code: "WorkflowRuntimeError.unknownEdge",
14
+ message: `Workflow edge '${edgeId}' does not exist, so no payload can be transferred.`,
15
+ severity: "error",
16
+ edgeId,
17
+ path: `$.edges.${edgeId}`,
18
+ hint: "Evaluate and transfer only edges declared in the workflow definition.",
19
+ },
20
+ ], {
21
+ code: "WorkflowRuntimeError.unknownEdge",
22
+ message: "Workflow edge data transfer failed because the edge is not declared.",
23
+ });
24
+ }
25
+ const diagnostics = [];
26
+ const sourceNode = definition.nodes[edge.from.nodeId];
27
+ const targetNode = definition.nodes[edge.to.nodeId];
28
+ if (!sourceNode) {
29
+ diagnostics.push({
30
+ code: "WorkflowGraphError.unknownSourceNode",
31
+ message: `Workflow edge '${edgeId}' references missing source node '${edge.from.nodeId}'.`,
32
+ severity: "error",
33
+ edgeId,
34
+ nodeId: edge.from.nodeId,
35
+ path: `$.edges.${edgeId}.from.nodeId`,
36
+ });
37
+ }
38
+ if (!targetNode) {
39
+ diagnostics.push({
40
+ code: "WorkflowGraphError.unknownTargetNode",
41
+ message: `Workflow edge '${edgeId}' references missing target node '${edge.to.nodeId}'.`,
42
+ severity: "error",
43
+ edgeId,
44
+ nodeId: edge.to.nodeId,
45
+ path: `$.edges.${edgeId}.to.nodeId`,
46
+ });
47
+ }
48
+ if ((edge.kind ?? "data") !== "data") {
49
+ diagnostics.push({
50
+ code: "WorkflowRuntimeError.nonDataEdgeTransferUnsupported",
51
+ message: `Workflow edge '${edgeId}' is not a data edge and cannot transfer a direct payload.`,
52
+ severity: "error",
53
+ edgeId,
54
+ path: `$.edges.${edgeId}.kind`,
55
+ hint: "Use data edges for payload transfer; control, error, and resume routing are handled by later runtime paths.",
56
+ });
57
+ }
58
+ if (edge.adapter) {
59
+ diagnostics.push({
60
+ code: "WorkflowRuntimeError.edgeAdapterTransferUnsupported",
61
+ message: `Workflow edge '${edgeId}' uses an edge adapter, which is not available in direct edge data transfer yet.`,
62
+ severity: "error",
63
+ edgeId,
64
+ path: `$.edges.${edgeId}.adapter`,
65
+ hint: "Use direct compatible ports until registered adapter resolution is implemented.",
66
+ });
67
+ }
68
+ if (sourceNodeAttempt.workflowRunId !== run.id) {
69
+ diagnostics.push({
70
+ code: "WorkflowRuntimeError.sourceAttemptRunMismatch",
71
+ message: `Source node attempt '${sourceNodeAttempt.id}' belongs to a different workflow run.`,
72
+ severity: "error",
73
+ edgeId,
74
+ nodeId: sourceNodeAttempt.nodeId,
75
+ path: "$.sourceNodeAttempt.workflowRunId",
76
+ hint: "Transfer edge payloads only from attempts created for the same workflow run.",
77
+ });
78
+ }
79
+ if (sourceNodeAttempt.nodeId !== edge.from.nodeId) {
80
+ diagnostics.push({
81
+ code: "WorkflowRuntimeError.sourceAttemptNodeMismatch",
82
+ message: `Source node attempt '${sourceNodeAttempt.id}' does not match edge source node '${edge.from.nodeId}'.`,
83
+ severity: "error",
84
+ edgeId,
85
+ nodeId: sourceNodeAttempt.nodeId,
86
+ path: "$.sourceNodeAttempt.nodeId",
87
+ hint: "Use the completed attempt for the edge source node when transferring data.",
88
+ });
89
+ }
90
+ if (sourceNodeAttempt.status !== "completed") {
91
+ diagnostics.push({
92
+ code: "WorkflowRuntimeError.sourceAttemptIncomplete",
93
+ message: `Source node attempt '${sourceNodeAttempt.id}' must be completed before edge data can transfer.`,
94
+ severity: "error",
95
+ edgeId,
96
+ nodeId: sourceNodeAttempt.nodeId,
97
+ path: "$.sourceNodeAttempt.status",
98
+ hint: "Transfer edge payloads only after a source node attempt completes successfully.",
99
+ });
100
+ }
101
+ if (!Object.hasOwn(sourceNodeAttempt, "output")) {
102
+ diagnostics.push({
103
+ code: "WorkflowRuntimeError.sourceOutputMissing",
104
+ message: `Source node attempt '${sourceNodeAttempt.id}' has no output to transfer.`,
105
+ severity: "error",
106
+ edgeId,
107
+ nodeId: sourceNodeAttempt.nodeId,
108
+ path: "$.sourceNodeAttempt.output",
109
+ hint: "Persist or pass the source node output before evaluating outgoing data edges.",
110
+ });
111
+ }
112
+ if (diagnostics.some((diagnostic) => diagnostic.severity === "error")) {
113
+ return edgeTransferFailure(diagnostics, {
114
+ code: "WorkflowRuntimeError.edgeTransferFailed",
115
+ message: "Workflow edge data transfer failed before payload validation.",
116
+ });
117
+ }
118
+ const payload = sourceNodeAttempt.output;
119
+ const sourceOutputResult = validateNodeOutput(definition, edge.from.nodeId, payload, {
120
+ path: `$.edges.${edgeId}.payload`,
121
+ });
122
+ diagnostics.push(...sourceOutputResult.diagnostics.map((diagnostic) => ({
123
+ ...diagnostic,
124
+ edgeId,
125
+ })));
126
+ if (targetNode?.input) {
127
+ diagnostics.push(...validateWorkflowPortValue(targetNode.input, payload, {
128
+ path: `$.edges.${edgeId}.targetInput`,
129
+ }).diagnostics.map((diagnostic) => ({
130
+ ...diagnostic,
131
+ edgeId,
132
+ nodeId: edge.to.nodeId,
133
+ })));
134
+ }
135
+ if (diagnostics.some((diagnostic) => diagnostic.severity === "error")) {
136
+ return edgeTransferFailure(diagnostics, {
137
+ code: "WorkflowRuntimeError.invalidEdgePayload",
138
+ message: "Workflow edge payload failed source output or target input validation.",
139
+ });
140
+ }
141
+ const transfer = {
142
+ id: options.createEdgeTransferId?.() ?? createId("wet"),
143
+ workflowRunId: run.id,
144
+ edgeId,
145
+ sourceNodeAttemptId: sourceNodeAttempt.id,
146
+ targetNodeId: edge.to.nodeId,
147
+ status: "transferred",
148
+ payload,
149
+ createdAt: timestamp(),
150
+ };
151
+ return { ok: true, transfer, targetInput: payload, diagnostics };
152
+ }
153
+ export async function transferWorkflowEdgeAdapterData(definition, run, edgeId, sourceNodeAttempt, options) {
154
+ const timestamp = createTimestampFactory(options.now);
155
+ const edge = definition.edges[edgeId];
156
+ if (!edge) {
157
+ return edgeTransferFailure([
158
+ {
159
+ code: "WorkflowRuntimeError.unknownEdge",
160
+ message: `Workflow edge '${edgeId}' does not exist, so no adapted payload can be transferred.`,
161
+ severity: "error",
162
+ edgeId,
163
+ path: `$.edges.${edgeId}`,
164
+ hint: "Evaluate and transfer only edges declared in the workflow definition.",
165
+ },
166
+ ], {
167
+ code: "WorkflowRuntimeError.unknownEdge",
168
+ message: "Workflow edge adapter transfer failed because the edge is not declared.",
169
+ });
170
+ }
171
+ const diagnostics = [];
172
+ const sourceNode = definition.nodes[edge.from.nodeId];
173
+ const targetNode = definition.nodes[edge.to.nodeId];
174
+ if (!sourceNode) {
175
+ diagnostics.push({
176
+ code: "WorkflowGraphError.unknownSourceNode",
177
+ message: `Workflow edge '${edgeId}' references missing source node '${edge.from.nodeId}'.`,
178
+ severity: "error",
179
+ edgeId,
180
+ nodeId: edge.from.nodeId,
181
+ path: `$.edges.${edgeId}.from.nodeId`,
182
+ });
183
+ }
184
+ if (!targetNode) {
185
+ diagnostics.push({
186
+ code: "WorkflowGraphError.unknownTargetNode",
187
+ message: `Workflow edge '${edgeId}' references missing target node '${edge.to.nodeId}'.`,
188
+ severity: "error",
189
+ edgeId,
190
+ nodeId: edge.to.nodeId,
191
+ path: `$.edges.${edgeId}.to.nodeId`,
192
+ });
193
+ }
194
+ if ((edge.kind ?? "data") !== "data") {
195
+ diagnostics.push({
196
+ code: "WorkflowRuntimeError.nonDataEdgeTransferUnsupported",
197
+ message: `Workflow edge '${edgeId}' is not a data edge and cannot transfer an adapted payload.`,
198
+ severity: "error",
199
+ edgeId,
200
+ path: `$.edges.${edgeId}.kind`,
201
+ hint: "Use data edges for adapter payload transfer; control, error, and resume routing are handled by later runtime paths.",
202
+ });
203
+ }
204
+ if (!edge.adapter) {
205
+ diagnostics.push({
206
+ code: "WorkflowRuntimeError.edgeAdapterRequired",
207
+ message: `Workflow edge '${edgeId}' does not declare an edge adapter for adapted transfer.`,
208
+ severity: "error",
209
+ edgeId,
210
+ path: `$.edges.${edgeId}.adapter`,
211
+ hint: "Use transferWorkflowEdgeData for direct compatible edges, or declare edgeAdapter(adapterRef(...), outputPort).",
212
+ });
213
+ }
214
+ if (sourceNodeAttempt.workflowRunId !== run.id) {
215
+ diagnostics.push({
216
+ code: "WorkflowRuntimeError.sourceAttemptRunMismatch",
217
+ message: `Source node attempt '${sourceNodeAttempt.id}' belongs to a different workflow run.`,
218
+ severity: "error",
219
+ edgeId,
220
+ nodeId: sourceNodeAttempt.nodeId,
221
+ path: "$.sourceNodeAttempt.workflowRunId",
222
+ hint: "Transfer edge payloads only from attempts created for the same workflow run.",
223
+ });
224
+ }
225
+ if (sourceNodeAttempt.nodeId !== edge.from.nodeId) {
226
+ diagnostics.push({
227
+ code: "WorkflowRuntimeError.sourceAttemptNodeMismatch",
228
+ message: `Source node attempt '${sourceNodeAttempt.id}' does not match edge source node '${edge.from.nodeId}'.`,
229
+ severity: "error",
230
+ edgeId,
231
+ nodeId: sourceNodeAttempt.nodeId,
232
+ path: "$.sourceNodeAttempt.nodeId",
233
+ hint: "Use the completed attempt for the edge source node when transferring data.",
234
+ });
235
+ }
236
+ if (sourceNodeAttempt.status !== "completed") {
237
+ diagnostics.push({
238
+ code: "WorkflowRuntimeError.sourceAttemptIncomplete",
239
+ message: `Source node attempt '${sourceNodeAttempt.id}' must be completed before edge adapter data can transfer.`,
240
+ severity: "error",
241
+ edgeId,
242
+ nodeId: sourceNodeAttempt.nodeId,
243
+ path: "$.sourceNodeAttempt.status",
244
+ hint: "Transfer edge payloads only after a source node attempt completes successfully.",
245
+ });
246
+ }
247
+ if (!Object.hasOwn(sourceNodeAttempt, "output")) {
248
+ diagnostics.push({
249
+ code: "WorkflowRuntimeError.sourceOutputMissing",
250
+ message: `Source node attempt '${sourceNodeAttempt.id}' has no output to adapt.`,
251
+ severity: "error",
252
+ edgeId,
253
+ nodeId: sourceNodeAttempt.nodeId,
254
+ path: "$.sourceNodeAttempt.output",
255
+ hint: "Persist or pass the source node output before evaluating outgoing adapter edges.",
256
+ });
257
+ }
258
+ const adapter = edge.adapter
259
+ ? resolveWorkflowAdapter(options.registry, edge.adapter.transform)
260
+ : undefined;
261
+ if (edge.adapter && !adapter) {
262
+ diagnostics.push({
263
+ code: "WorkflowGraphError.unknownAdapterRef",
264
+ message: `Workflow edge '${edgeId}' references adapter '${edge.adapter.transform.id}', but it is not registered in the Workflow Registry.`,
265
+ severity: "error",
266
+ edgeId,
267
+ path: `$.edges.${edgeId}.adapter.transform.id`,
268
+ hint: "Register the adapter before executing adapted edge transfers.",
269
+ });
270
+ }
271
+ if (diagnostics.some((diagnostic) => diagnostic.severity === "error")) {
272
+ return edgeTransferFailure(diagnostics, {
273
+ code: "WorkflowRuntimeError.edgeAdapterTransferFailed",
274
+ message: "Workflow edge adapter transfer failed before adapter execution.",
275
+ });
276
+ }
277
+ const payload = sourceNodeAttempt.output;
278
+ const sourceOutputResult = validateNodeOutput(definition, edge.from.nodeId, payload, {
279
+ path: `$.edges.${edgeId}.payload`,
280
+ });
281
+ diagnostics.push(...sourceOutputResult.diagnostics.map((diagnostic) => ({
282
+ ...diagnostic,
283
+ edgeId,
284
+ })));
285
+ if (diagnostics.some((diagnostic) => diagnostic.severity === "error")) {
286
+ return edgeTransferFailure(diagnostics, {
287
+ code: "WorkflowRuntimeError.invalidEdgePayload",
288
+ message: "Workflow edge adapter input failed source output validation.",
289
+ });
290
+ }
291
+ let adaptedOutput;
292
+ try {
293
+ const adapterResult = await adapter.value({
294
+ input: payload,
295
+ edge,
296
+ run: createWorkflowRunWithoutLocalState(run),
297
+ });
298
+ adaptedOutput = adapterResult.output;
299
+ }
300
+ catch (caught) {
301
+ return edgeTransferFailure(diagnostics, adapterErrorSummaryFromCaught(caught));
302
+ }
303
+ const adapterOutputResult = validateWorkflowEdgeAdapterOutput(definition, edgeId, adaptedOutput);
304
+ diagnostics.push(...adapterOutputResult.diagnostics);
305
+ if (diagnostics.some((diagnostic) => diagnostic.severity === "error")) {
306
+ return edgeTransferFailure(diagnostics, {
307
+ code: "WorkflowRuntimeError.invalidAdapterOutput",
308
+ message: "Workflow edge adapter output failed validation before target node execution.",
309
+ });
310
+ }
311
+ const transfer = {
312
+ id: options.createEdgeTransferId?.() ?? createId("wet"),
313
+ workflowRunId: run.id,
314
+ edgeId,
315
+ sourceNodeAttemptId: sourceNodeAttempt.id,
316
+ targetNodeId: edge.to.nodeId,
317
+ status: "transferred",
318
+ payload: adaptedOutput,
319
+ createdAt: timestamp(),
320
+ };
321
+ return { ok: true, transfer, targetInput: adaptedOutput, diagnostics };
322
+ }
323
+ export async function recordWorkflowEdgeTransfer(definition, run, edgeId, sourceNodeAttempt, options = {}) {
324
+ const events = options.events ?? [];
325
+ const result = transferWorkflowEdgeData(definition, run, edgeId, sourceNodeAttempt, options);
326
+ if (!result.ok) {
327
+ return { ...result, run, events };
328
+ }
329
+ run.current = { edgeId, status: run.status };
330
+ run.updatedAt = result.transfer.createdAt;
331
+ await persistWorkflowEdgeTransfer(options.store, result.transfer);
332
+ await emitWorkflowRuntimeEvent(events, options.store, options.emitEvent, {
333
+ type: "edge.transferred",
334
+ runId: run.id,
335
+ edgeTransferId: result.transfer.id,
336
+ edgeId,
337
+ });
338
+ await persistWorkflowRun(options.store, run);
339
+ return { ...result, run, events };
340
+ }
341
+ function edgeTransferFailure(diagnostics, error) {
342
+ return { ok: false, diagnostics, error };
343
+ }
344
+ function adapterErrorSummaryFromCaught(caught) {
345
+ if (caught instanceof Error) {
346
+ return {
347
+ code: "WorkflowRuntimeError.adapterFailed",
348
+ message: caught.message,
349
+ };
350
+ }
351
+ return {
352
+ code: "WorkflowRuntimeError.adapterFailed",
353
+ message: "Workflow adapter failed with a non-Error value.",
354
+ };
355
+ }
356
+ //# sourceMappingURL=edge-transfer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge-transfer.js","sourceRoot":"","sources":["../../src/runtime/edge-transfer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { JsonObject, NodeAttempt, RegistryRefId, WorkflowDefinition, WorkflowDiagnostic, WorkflowErrorSummary, WorkflowEventEmitter, WorkflowHumanActionId, WorkflowHumanActionKind, WorkflowHumanActionRecord, WorkflowRegistry, WorkflowRun, WorkflowRuntimeEvent, WorkflowValue, WorkflowWaitToken, WorkflowWaitTokenId, WorkflowWakeup, WorkflowWakeupId } from "../types/index.js";
2
+ import type { WorkflowHumanActionStore, WorkflowRunStore, WorkflowWaitTokenStore } from "../store/index.js";
3
+ export type WorkflowHumanActionDecisionKind = "approved" | "rejected" | "submitted" | "cancelled";
4
+ export type WorkflowHumanActionApplyRequest = {
5
+ waitTokenId: WorkflowWaitTokenId;
6
+ actionId?: RegistryRefId;
7
+ kind?: WorkflowHumanActionKind;
8
+ actor?: JsonObject;
9
+ payload?: WorkflowValue;
10
+ };
11
+ export type WorkflowHumanActionApplyOptions = {
12
+ registry: Pick<WorkflowRegistry, "humanActions">;
13
+ store: WorkflowRunStore & WorkflowWaitTokenStore & WorkflowHumanActionStore;
14
+ now?: () => Date | string;
15
+ createHumanActionId?: () => WorkflowHumanActionId;
16
+ createWakeupId?: () => WorkflowWakeupId;
17
+ emitEvent?: WorkflowEventEmitter;
18
+ };
19
+ export type WorkflowHumanActionApplySuccess = {
20
+ ok: true;
21
+ run: WorkflowRun;
22
+ waitToken: WorkflowWaitToken;
23
+ humanAction: WorkflowHumanActionRecord;
24
+ events: WorkflowRuntimeEvent[];
25
+ decision: {
26
+ kind: WorkflowHumanActionDecisionKind;
27
+ actionId: RegistryRefId;
28
+ actionKind: WorkflowHumanActionKind;
29
+ };
30
+ wakeup?: WorkflowWakeup;
31
+ nodeAttempt?: NodeAttempt;
32
+ };
33
+ export type WorkflowHumanActionApplyFailure = {
34
+ ok: false;
35
+ run: WorkflowRun;
36
+ waitToken?: WorkflowWaitToken;
37
+ events: WorkflowRuntimeEvent[];
38
+ diagnostics: WorkflowDiagnostic[];
39
+ error: WorkflowErrorSummary;
40
+ };
41
+ export type WorkflowHumanActionApplyResult = WorkflowHumanActionApplySuccess | WorkflowHumanActionApplyFailure;
42
+ export declare function applyWorkflowHumanAction(definition: WorkflowDefinition, run: WorkflowRun, request: WorkflowHumanActionApplyRequest, options: WorkflowHumanActionApplyOptions): Promise<WorkflowHumanActionApplyResult>;
43
+ //# sourceMappingURL=human-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"human-action.d.ts","sourceRoot":"","sources":["../../src/runtime/human-action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,yBAAyB,EACzB,gBAAgB,EAChB,WAAW,EACX,oBAAoB,EACpB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAiB3B,MAAM,MAAM,+BAA+B,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,CAAC;AAElG,MAAM,MAAM,+BAA+B,GAAG;IAC5C,WAAW,EAAE,mBAAmB,CAAC;IACjC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,IAAI,CAAC,EAAE,uBAAuB,CAAC;IAC/B,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;IACjD,KAAK,EAAE,gBAAgB,GAAG,sBAAsB,GAAG,wBAAwB,CAAC;IAC5E,GAAG,CAAC,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,qBAAqB,CAAC;IAClD,cAAc,CAAC,EAAE,MAAM,gBAAgB,CAAC;IACxC,SAAS,CAAC,EAAE,oBAAoB,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,EAAE,EAAE,IAAI,CAAC;IACT,GAAG,EAAE,WAAW,CAAC;IACjB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,WAAW,EAAE,yBAAyB,CAAC;IACvC,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,QAAQ,EAAE;QACR,IAAI,EAAE,+BAA+B,CAAC;QACtC,QAAQ,EAAE,aAAa,CAAC;QACxB,UAAU,EAAE,uBAAuB,CAAC;KACrC,CAAC;IACF,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,EAAE,EAAE,KAAK,CAAC;IACV,GAAG,EAAE,WAAW,CAAC;IACjB,SAAS,CAAC,EAAE,iBAAiB,CAAC;IAC9B,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAClC,KAAK,EAAE,oBAAoB,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG,+BAA+B,GAAG,+BAA+B,CAAC;AAE/G,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,kBAAkB,EAC9B,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,+BAA+B,EACxC,OAAO,EAAE,+BAA+B,GACvC,OAAO,CAAC,8BAA8B,CAAC,CAmOzC"}
@@ -0,0 +1,231 @@
1
+ import { resolveWorkflowHumanAction } from "../registry/index.js";
2
+ import { validateJsonValueAgainstSchema, validateNodeOutput, validateWorkflowPortValue, } from "../validation/index.js";
3
+ import { createWorkflowRuntimeId as createId } from "./ids.js";
4
+ import { emitWorkflowRuntimeEvent, hasWorkflowNodeAttemptReadStore, hasWorkflowWakeupStore, persistWorkflowNodeAttempt, persistWorkflowRun, } from "./persistence.js";
5
+ import { createTimestampFactory, timestampToMillis } from "./time.js";
6
+ export async function applyWorkflowHumanAction(definition, run, request, options) {
7
+ const events = [];
8
+ const timestamp = createTimestampFactory(options.now);
9
+ const actedAt = timestamp();
10
+ const diagnostics = [];
11
+ const waitToken = await options.store.getWaitToken(request.waitTokenId);
12
+ if (!waitToken) {
13
+ diagnostics.push({
14
+ code: "WorkflowRuntimeError.unknownWaitToken",
15
+ message: `Workflow wait token '${request.waitTokenId}' does not exist, so no human action can be applied.`,
16
+ severity: "error",
17
+ path: "$.waitTokenId",
18
+ hint: "Submit human actions only for pending wait tokens returned by workflow inspection.",
19
+ });
20
+ return humanActionApplyFailure(run, events, diagnostics, {
21
+ code: "WorkflowRuntimeError.unknownWaitToken",
22
+ message: "Human action failed because the wait token was not found.",
23
+ });
24
+ }
25
+ if (waitToken.workflowRunId !== run.id) {
26
+ diagnostics.push({
27
+ code: "WorkflowRuntimeError.waitTokenRunMismatch",
28
+ message: `Workflow wait token '${waitToken.id}' belongs to run '${waitToken.workflowRunId}', not run '${run.id}'.`,
29
+ severity: "error",
30
+ path: "$.waitTokenId",
31
+ hint: "Load and update the workflow run that owns the wait token.",
32
+ });
33
+ }
34
+ if (waitToken.status !== "pending") {
35
+ diagnostics.push({
36
+ code: "WorkflowRuntimeError.waitTokenNotPending",
37
+ message: `Workflow wait token '${waitToken.id}' is '${waitToken.status}' and cannot accept another human action.`,
38
+ severity: "error",
39
+ path: "$.waitToken.status",
40
+ hint: "Human wait tokens can only be resolved once while they are pending.",
41
+ });
42
+ }
43
+ if (waitToken.expiresAt && timestampToMillis(waitToken.expiresAt) <= timestampToMillis(actedAt)) {
44
+ waitToken.status = "expired";
45
+ waitToken.resumedAt = actedAt;
46
+ await options.store.saveWaitToken(waitToken);
47
+ diagnostics.push({
48
+ code: "WorkflowRuntimeError.waitTokenExpired",
49
+ message: `Workflow wait token '${waitToken.id}' expired at ${waitToken.expiresAt}.`,
50
+ severity: "error",
51
+ path: "$.waitToken.expiresAt",
52
+ hint: "Create a new human wait or route timeout handling before submitting an action.",
53
+ });
54
+ }
55
+ const actionRef = resolveRequestedHumanActionRef(waitToken, request);
56
+ if (!actionRef) {
57
+ diagnostics.push({
58
+ code: "WorkflowRuntimeError.humanActionUnavailable",
59
+ message: request.actionId
60
+ ? `Workflow wait token '${waitToken.id}' does not offer human action '${request.actionId}'.`
61
+ : `Workflow wait token '${waitToken.id}' does not offer a human action of kind '${request.kind ?? "<missing>"}'.`,
62
+ severity: "error",
63
+ path: request.actionId ? "$.actionId" : "$.kind",
64
+ hint: "Use one of the wait token's available action refs.",
65
+ });
66
+ }
67
+ const actionDefinition = actionRef ? resolveWorkflowHumanAction(options.registry, actionRef.id) : undefined;
68
+ if (actionRef && !actionDefinition) {
69
+ diagnostics.push({
70
+ code: "WorkflowGraphError.unknownHumanActionRef",
71
+ message: `Workflow wait token '${waitToken.id}' references human action '${actionRef.id}', but it is not registered in the Workflow Registry.`,
72
+ severity: "error",
73
+ path: "$.waitToken.actions",
74
+ hint: "Register the action with registerWorkflowHumanAction/createWorkflowRegistry before accepting it.",
75
+ });
76
+ }
77
+ if (actionRef?.kind && actionDefinition && actionRef.kind !== actionDefinition.kind) {
78
+ diagnostics.push({
79
+ code: "WorkflowGraphError.humanActionKindMismatch",
80
+ message: `Workflow wait token '${waitToken.id}' action '${actionRef.id}' declares kind '${actionRef.kind}', but the registry defines kind '${actionDefinition.kind}'.`,
81
+ severity: "error",
82
+ path: "$.waitToken.actions",
83
+ hint: "Keep human action refs aligned with their registered action definitions.",
84
+ });
85
+ }
86
+ if (actionDefinition && request.payload !== undefined) {
87
+ const actionPort = actionDefinition.input ?? actionDefinition.output;
88
+ if (actionPort) {
89
+ diagnostics.push(...validateWorkflowPortValue(actionPort, request.payload, { path: "$.payload" }).diagnostics);
90
+ }
91
+ }
92
+ if (actionDefinition?.kind === "resume" && waitToken.schema) {
93
+ diagnostics.push(...validateJsonValueAgainstSchema(waitToken.schema, request.payload, { path: "$.payload" }));
94
+ }
95
+ if (waitToken.humanNodeId && request.payload !== undefined) {
96
+ const nodeOutputResult = validateNodeOutput(definition, waitToken.humanNodeId, request.payload, {
97
+ path: "$.payload",
98
+ });
99
+ diagnostics.push(...nodeOutputResult.diagnostics.map((diagnostic) => ({ ...diagnostic, nodeId: waitToken.humanNodeId })));
100
+ }
101
+ if (diagnostics.some((diagnostic) => diagnostic.severity === "error")) {
102
+ return humanActionApplyFailure(run, events, diagnostics, {
103
+ code: "WorkflowRuntimeError.humanActionRejected",
104
+ message: "Human action failed validation before resolving the wait token.",
105
+ }, waitToken);
106
+ }
107
+ const actionKind = actionDefinition.kind;
108
+ const humanAction = {
109
+ id: options.createHumanActionId?.() ?? createId("wha"),
110
+ workflowRunId: run.id,
111
+ waitTokenId: waitToken.id,
112
+ kind: actionKind,
113
+ ...(request.actor ? { actor: request.actor } : {}),
114
+ ...(request.payload !== undefined ? { payload: request.payload } : {}),
115
+ createdAt: actedAt,
116
+ };
117
+ await options.store.saveHumanAction(humanAction);
118
+ const nodeAttempt = waitToken.nodeAttemptId && hasWorkflowNodeAttemptReadStore(options.store)
119
+ ? await options.store.getNodeAttempt(waitToken.nodeAttemptId)
120
+ : undefined;
121
+ if (actionKind === "cancel") {
122
+ waitToken.status = "cancelled";
123
+ waitToken.resumedAt = actedAt;
124
+ run.status = "cancelled";
125
+ run.current = { ...(run.current.nodeId ? { nodeId: run.current.nodeId } : {}), status: "cancelled" };
126
+ run.cancelledAt = actedAt;
127
+ run.updatedAt = actedAt;
128
+ if (nodeAttempt) {
129
+ nodeAttempt.status = "cancelled";
130
+ nodeAttempt.completedAt = actedAt;
131
+ }
132
+ await options.store.saveWaitToken(waitToken);
133
+ if (nodeAttempt) {
134
+ await persistWorkflowNodeAttempt(options.store, nodeAttempt);
135
+ }
136
+ await emitWorkflowRuntimeEvent(events, options.store, options.emitEvent, {
137
+ type: "workflow.cancelled",
138
+ runId: run.id,
139
+ reason: "human action cancelled workflow",
140
+ });
141
+ await persistWorkflowRun(options.store, run);
142
+ return {
143
+ ok: true,
144
+ run,
145
+ waitToken,
146
+ humanAction,
147
+ events,
148
+ decision: { kind: "cancelled", actionId: actionDefinition.id, actionKind },
149
+ ...(nodeAttempt ? { nodeAttempt } : {}),
150
+ };
151
+ }
152
+ waitToken.status = "resumed";
153
+ if (request.payload !== undefined) {
154
+ waitToken.resumePayload = request.payload;
155
+ }
156
+ waitToken.resumedAt = actedAt;
157
+ run.status = "running";
158
+ run.current = { ...(waitToken.humanNodeId ? { nodeId: waitToken.humanNodeId } : {}), status: "running" };
159
+ run.updatedAt = actedAt;
160
+ if (nodeAttempt) {
161
+ nodeAttempt.status = "completed";
162
+ if (request.payload !== undefined) {
163
+ nodeAttempt.output = request.payload;
164
+ }
165
+ nodeAttempt.completedAt = actedAt;
166
+ }
167
+ const wakeup = hasWorkflowWakeupStore(options.store)
168
+ ? {
169
+ id: options.createWakeupId?.() ?? createId("wwu"),
170
+ workflowRunId: run.id,
171
+ ...(waitToken.nodeAttemptId ? { nodeAttemptId: waitToken.nodeAttemptId } : {}),
172
+ kind: "human",
173
+ availableAt: actedAt,
174
+ correlationId: humanAction.id,
175
+ ...(request.payload !== undefined ? { payload: request.payload } : {}),
176
+ createdAt: actedAt,
177
+ }
178
+ : undefined;
179
+ await options.store.saveWaitToken(waitToken);
180
+ if (wakeup && hasWorkflowWakeupStore(options.store)) {
181
+ await options.store.saveWakeup(wakeup);
182
+ }
183
+ await emitWorkflowRuntimeEvent(events, options.store, options.emitEvent, {
184
+ type: "wait.resumed",
185
+ runId: run.id,
186
+ waitTokenId: waitToken.id,
187
+ ...(request.payload !== undefined ? { payload: request.payload } : {}),
188
+ });
189
+ if (nodeAttempt) {
190
+ await emitWorkflowRuntimeEvent(events, options.store, options.emitEvent, {
191
+ type: "node.completed",
192
+ runId: run.id,
193
+ nodeAttemptId: nodeAttempt.id,
194
+ ...(request.payload !== undefined ? { output: request.payload } : {}),
195
+ });
196
+ await persistWorkflowNodeAttempt(options.store, nodeAttempt);
197
+ }
198
+ await persistWorkflowRun(options.store, run);
199
+ return {
200
+ ok: true,
201
+ run,
202
+ waitToken,
203
+ humanAction,
204
+ events,
205
+ decision: { kind: decisionKindForHumanAction(actionKind), actionId: actionDefinition.id, actionKind },
206
+ ...(wakeup ? { wakeup } : {}),
207
+ ...(nodeAttempt ? { nodeAttempt } : {}),
208
+ };
209
+ }
210
+ function humanActionApplyFailure(run, events, diagnostics, error, waitToken) {
211
+ return { ok: false, run, events, diagnostics, error, ...(waitToken ? { waitToken } : {}) };
212
+ }
213
+ function resolveRequestedHumanActionRef(waitToken, request) {
214
+ if (request.actionId) {
215
+ return waitToken.actions.find((action) => action.id === request.actionId);
216
+ }
217
+ if (request.kind) {
218
+ return waitToken.actions.find((action) => action.kind === request.kind);
219
+ }
220
+ return undefined;
221
+ }
222
+ function decisionKindForHumanAction(kind) {
223
+ if (kind === "approve")
224
+ return "approved";
225
+ if (kind === "reject")
226
+ return "rejected";
227
+ if (kind === "cancel")
228
+ return "cancelled";
229
+ return "submitted";
230
+ }
231
+ //# sourceMappingURL=human-action.js.map