@osolmaz/pi-workflows 0.16.2 → 0.16.4

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 (315) 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 +1 -1
  16. package/dist/extension/index.d.ts +1 -1
  17. package/dist/extension/index.js +32 -32
  18. package/dist/extension/index.js.map +1 -1
  19. package/dist/extension/recorder.d.ts +1 -1
  20. package/dist/extension/recorder.js +1 -1
  21. package/dist/extension/recorder.js.map +1 -1
  22. package/dist/extension/remote-recorder-store.d.ts +1 -1
  23. package/dist/extension/remote-recorder-store.js +2 -2
  24. package/dist/extension/remote-recorder-store.js.map +1 -1
  25. package/dist/extension/{controller-command.d.ts → resource-manager-command.d.ts} +6 -6
  26. package/dist/extension/{controller-command.js → resource-manager-command.js} +7 -7
  27. package/dist/extension/resource-manager-command.js.map +1 -0
  28. package/dist/extension/session-delivery.d.ts +1 -1
  29. package/dist/extension/session-delivery.js +2 -2
  30. package/dist/extension/session-delivery.js.map +1 -1
  31. package/dist/extension/session-view.d.ts +1 -1
  32. package/dist/extension/session-view.js +1 -1
  33. package/dist/extension/session-view.js.map +1 -1
  34. package/dist/extension/workflow-message-coordinator.d.ts +1 -1
  35. package/dist/extension/workflow-message-coordinator.js +6 -6
  36. package/dist/extension/workflow-message-coordinator.js.map +1 -1
  37. package/dist/resource-managers/conditions.d.ts +6 -0
  38. package/dist/{controllers → resource-managers}/conditions.js +3 -3
  39. package/dist/resource-managers/conditions.js.map +1 -0
  40. package/dist/resource-managers/definition.d.ts +6 -0
  41. package/dist/resource-managers/definition.js +45 -0
  42. package/dist/resource-managers/definition.js.map +1 -0
  43. package/dist/resource-managers/effects.d.ts +15 -0
  44. package/dist/{controllers → resource-managers}/effects.js +2 -2
  45. package/dist/resource-managers/effects.js.map +1 -0
  46. package/dist/resource-managers/errors.d.ts +12 -0
  47. package/dist/resource-managers/errors.js +25 -0
  48. package/dist/resource-managers/errors.js.map +1 -0
  49. package/dist/resource-managers/index.d.ts +12 -0
  50. package/dist/resource-managers/index.js +12 -0
  51. package/dist/resource-managers/index.js.map +1 -0
  52. package/dist/resource-managers/json.js.map +1 -0
  53. package/dist/resource-managers/loader.d.ts +23 -0
  54. package/dist/resource-managers/loader.js +75 -0
  55. package/dist/resource-managers/loader.js.map +1 -0
  56. package/dist/resource-managers/results.d.ts +5 -0
  57. package/dist/resource-managers/results.js.map +1 -0
  58. package/dist/resource-managers/runtime.d.ts +59 -0
  59. package/dist/{controllers/manager.js → resource-managers/runtime.js} +57 -57
  60. package/dist/resource-managers/runtime.js.map +1 -0
  61. package/dist/{controllers → resource-managers}/sqlite.d.ts +44 -44
  62. package/dist/{controllers → resource-managers}/sqlite.js +139 -130
  63. package/dist/resource-managers/sqlite.js.map +1 -0
  64. package/dist/{controllers → resource-managers}/store.d.ts +33 -33
  65. package/dist/{controllers → resource-managers}/store.js.map +1 -1
  66. package/dist/{controllers → resource-managers}/types.d.ts +41 -41
  67. package/dist/{controllers → resource-managers}/types.js.map +1 -1
  68. package/dist/resource-managers/workflows.d.ts +34 -0
  69. package/dist/{controllers → resource-managers}/workflows.js +15 -15
  70. package/dist/resource-managers/workflows.js.map +1 -0
  71. package/dist/server/channel-effects.js.map +1 -0
  72. package/dist/{host → server}/channel-supervisor.d.ts +6 -6
  73. package/dist/{host → server}/channel-supervisor.js +3 -3
  74. package/dist/server/channel-supervisor.js.map +1 -0
  75. package/dist/{host/child-worker-supervisor.d.ts → server/child-runner-supervisor.d.ts} +15 -13
  76. package/dist/{host/child-worker-supervisor.js → server/child-runner-supervisor.js} +6 -5
  77. package/dist/server/child-runner-supervisor.js.map +1 -0
  78. package/dist/{host → server}/processes.d.ts +3 -3
  79. package/dist/{host → server}/processes.js +3 -3
  80. package/dist/server/processes.js.map +1 -0
  81. package/dist/{host → server}/resolver-entry.d.ts +6 -6
  82. package/dist/{host → server}/resolver-entry.js +14 -14
  83. package/dist/server/resolver-entry.js.map +1 -0
  84. package/dist/server/resource-runner-entry.d.ts +2 -0
  85. package/dist/{host/controller-worker-entry.js → server/resource-runner-entry.js} +33 -33
  86. package/dist/server/resource-runner-entry.js.map +1 -0
  87. package/dist/server/resource-runner-protocol.d.ts +36 -0
  88. package/dist/server/resource-runner-protocol.js +49 -0
  89. package/dist/server/resource-runner-protocol.js.map +1 -0
  90. package/dist/server/resource-runner-supervisor.d.ts +21 -0
  91. package/dist/{host/worker-supervisor.js → server/resource-runner-supervisor.js} +17 -17
  92. package/dist/server/resource-runner-supervisor.js.map +1 -0
  93. package/dist/{host → server}/rpc-bridge.d.ts +3 -3
  94. package/dist/{host → server}/rpc-bridge.js +3 -3
  95. package/dist/server/rpc-bridge.js.map +1 -0
  96. package/dist/{host → server}/rpc-executor.d.ts +1 -1
  97. package/dist/{host → server}/rpc-executor.js +3 -3
  98. package/dist/server/rpc-executor.js.map +1 -0
  99. package/dist/{host/host-entry.js → server/server-entry.js} +6 -6
  100. package/dist/server/server-entry.js.map +1 -0
  101. package/dist/{host/runner.d.ts → server/server.d.ts} +39 -38
  102. package/dist/{host/runner.js → server/server.js} +408 -374
  103. package/dist/server/server.js.map +1 -0
  104. package/dist/{host → server}/state.d.ts +25 -25
  105. package/dist/{host → server}/state.js +49 -49
  106. package/dist/server/state.js.map +1 -0
  107. package/dist/{host → server}/view.d.ts +7 -7
  108. package/dist/{host → server}/view.js +13 -13
  109. package/dist/server/view.js.map +1 -0
  110. package/dist/server/workflow-runner-content.d.ts +6 -0
  111. package/dist/server/workflow-runner-content.js +96 -0
  112. package/dist/server/workflow-runner-content.js.map +1 -0
  113. package/dist/{host/worker-entry.d.ts → server/workflow-runner-entry.d.ts} +3 -3
  114. package/dist/{host/worker-entry.js → server/workflow-runner-entry.js} +68 -35
  115. package/dist/server/workflow-runner-entry.js.map +1 -0
  116. package/dist/server/workflow-runner-protocol.d.ts +69 -0
  117. package/dist/server/workflow-runner-protocol.js +176 -0
  118. package/dist/server/workflow-runner-protocol.js.map +1 -0
  119. package/dist/{host/worker-store.d.ts → server/workflow-runner-store.d.ts} +11 -11
  120. package/dist/{host/worker-store.js → server/workflow-runner-store.js} +8 -8
  121. package/dist/server/workflow-runner-store.js.map +1 -0
  122. package/dist/server/workflow-runner-supervisor.d.ts +22 -0
  123. package/dist/server/workflow-runner-supervisor.js +56 -0
  124. package/dist/server/workflow-runner-supervisor.js.map +1 -0
  125. package/dist/state/prune.d.ts +1 -1
  126. package/dist/state/prune.js +17 -10
  127. package/dist/state/prune.js.map +1 -1
  128. package/dist/state/schema.js +2 -2
  129. package/dist/state/workflow-messages.d.ts +1 -1
  130. package/dist/state/workflow-messages.js +1 -1
  131. package/dist/state/workflow-messages.js.map +1 -1
  132. package/dist/viewer/backup.js +1 -1
  133. package/dist/viewer/backup.js.map +1 -1
  134. package/dist/viewer/cli.d.ts +2 -2
  135. package/dist/viewer/cli.js +46 -32
  136. package/dist/viewer/cli.js.map +1 -1
  137. package/dist/viewer/tui.d.ts +1 -1
  138. package/dist/viewer/tui.js +1 -1
  139. package/dist/viewer/tui.js.map +1 -1
  140. package/dist/workflows/command-batch.js +2 -2
  141. package/dist/workflows/engine.js +14 -15
  142. package/dist/workflows/engine.js.map +1 -1
  143. package/dist/workflows/store.d.ts +12 -11
  144. package/dist/workflows/store.js +24 -18
  145. package/dist/workflows/store.js.map +1 -1
  146. package/dist/workflows/types.d.ts +2 -2
  147. package/docs/2026-08-20-durable-workflow-launch-plan.md +12 -12
  148. package/docs/2026-08-25-workflow-follow-ups.md +7 -7
  149. package/docs/2026-08-25-workflow-settings.md +3 -3
  150. package/docs/2026-08-30-out-of-process-workflow-host-plan.md +3 -3
  151. package/docs/2026-09-01-restore-session-delivery-controls-plan.md +5 -5
  152. package/docs/2026-09-01-unified-workflow-client-plan.md +6 -6
  153. package/docs/2026-09-02-installed-live-e2e-plan.md +3 -3
  154. package/docs/2026-09-02-unify-workflow-messages-plan.md +8 -8
  155. package/docs/2026-09-04-workflow-run-state-plan.md +6 -6
  156. package/docs/DEFERRED_TURNS.md +7 -7
  157. package/docs/DESIGN_PHILOSOPHY.md +1 -1
  158. package/docs/HUMAN_DECISIONS.md +11 -11
  159. package/docs/HUMAN_DECISION_PRESENTATIONS.md +4 -4
  160. package/docs/MONITOR.md +1 -1
  161. package/docs/RESOURCE_MANAGERS.md +221 -0
  162. package/docs/SQLITE_STATE.md +35 -33
  163. package/docs/WORKFLOW_COMPOSITION.md +1 -1
  164. package/docs/{WORKFLOW_HOST.md → WORKFLOW_SERVER.md} +125 -119
  165. package/docs/WORKFLOW_STEP_MESSAGES.md +18 -18
  166. package/docs/WORKFLOW_UPDATES.md +16 -16
  167. package/docs/development.md +15 -14
  168. package/docs/live-replay-protocol.md +20 -20
  169. package/docs/plans/2026-08-04-controller-runtime-plan.md +25 -25
  170. package/docs/plans/2026-08-05-always-on-workflows-plan.md +8 -8
  171. package/docs/plans/2026-08-10-agent-managed-monitor-workflows-plan.md +2 -2
  172. package/docs/plans/2026-08-13-session-addressed-workflow-notifications-plan.md +1 -1
  173. package/docs/plans/2026-08-16-workflow-updates-plan.md +5 -5
  174. package/docs/plans/2026-08-19-human-decision-gates-plan.md +1 -1
  175. package/docs/plans/2026-08-20-bounded-command-batches-plan.md +1 -1
  176. package/docs/plans/2026-08-21-deferred-turn-intents-plan.md +3 -3
  177. package/docs/plans/2026-08-21-sanity-check-plan.md +2 -2
  178. package/docs/plans/2026-08-23-assistant-agent-completion-plan.md +5 -5
  179. package/docs/plans/2026-08-23-sqlite-state-plan.md +25 -25
  180. package/docs/plans/2026-08-25-live-workflow-settings-plan.md +4 -4
  181. package/docs/plans/2026-08-27-workflow-terminal-restart-plan.md +3 -3
  182. package/docs/plans/2026-09-04-workflow-runner-resume-state-plan.md +318 -0
  183. package/docs/plans/piw-viewer-experience-implementation-plan.md +1 -1
  184. package/docs/tui-viewer.md +9 -9
  185. package/docs/workflows.md +72 -66
  186. package/examples/{controllers/pull-request.controller.ts → resource-managers/pull-request.resource-manager.ts} +12 -12
  187. package/herdr-plugin.toml +1 -1
  188. package/package.json +12 -11
  189. package/protocol/client.v1.schema.json +7 -7
  190. package/protocol/fixtures/client-v1.json +1 -1
  191. package/src/builtins/monitor.workflow.ts +9 -9
  192. package/src/builtins/pi-agent-group.ts +3 -3
  193. package/src/channels/adapter-entry.ts +14 -14
  194. package/src/client/client.ts +33 -32
  195. package/src/client/protocol.ts +16 -11
  196. package/src/client/resolver.ts +4 -4
  197. package/src/client/view.ts +1 -1
  198. package/src/extension/index.ts +44 -34
  199. package/src/extension/recorder.ts +1 -1
  200. package/src/extension/remote-recorder-store.ts +2 -2
  201. package/src/extension/resource-manager-command.ts +45 -0
  202. package/src/extension/session-delivery.ts +2 -2
  203. package/src/extension/session-view.ts +1 -1
  204. package/src/extension/workflow-message-coordinator.ts +6 -6
  205. package/src/{controllers → resource-managers}/conditions.ts +23 -23
  206. package/src/resource-managers/definition.ts +71 -0
  207. package/src/{controllers → resource-managers}/effects.ts +9 -9
  208. package/src/resource-managers/errors.ts +27 -0
  209. package/src/resource-managers/index.ts +88 -0
  210. package/src/resource-managers/loader.ts +111 -0
  211. package/src/{controllers → resource-managers}/results.ts +4 -4
  212. package/src/{controllers/manager.ts → resource-managers/runtime.ts} +95 -92
  213. package/src/{controllers → resource-managers}/sqlite.ts +198 -186
  214. package/src/{controllers → resource-managers}/store.ts +46 -38
  215. package/src/{controllers → resource-managers}/types.ts +50 -41
  216. package/src/{controllers → resource-managers}/workflows.ts +43 -41
  217. package/src/{host → server}/channel-supervisor.ts +8 -8
  218. package/src/{host/child-worker-supervisor.ts → server/child-runner-supervisor.ts} +22 -18
  219. package/src/{host → server}/processes.ts +3 -3
  220. package/src/{host → server}/resolver-entry.ts +28 -25
  221. package/src/{host/controller-worker-entry.ts → server/resource-runner-entry.ts} +67 -65
  222. package/src/server/resource-runner-protocol.ts +103 -0
  223. package/src/server/resource-runner-supervisor.ts +76 -0
  224. package/src/{host → server}/rpc-bridge.ts +3 -3
  225. package/src/{host → server}/rpc-executor.ts +4 -4
  226. package/src/{host/host-entry.ts → server/server-entry.ts} +5 -5
  227. package/src/{host/runner.ts → server/server.ts} +526 -461
  228. package/src/{host → server}/state.ts +78 -67
  229. package/src/{host → server}/view.ts +15 -15
  230. package/src/server/workflow-runner-content.ts +119 -0
  231. package/src/{host/worker-entry.ts → server/workflow-runner-entry.ts} +98 -57
  232. package/src/server/workflow-runner-protocol.ts +241 -0
  233. package/src/{host/worker-store.ts → server/workflow-runner-store.ts} +18 -20
  234. package/src/server/workflow-runner-supervisor.ts +79 -0
  235. package/src/state/prune.ts +27 -9
  236. package/src/state/schema.ts +2 -2
  237. package/src/state/workflow-messages.ts +1 -1
  238. package/src/viewer/backup.ts +1 -1
  239. package/src/viewer/cli.ts +50 -36
  240. package/src/viewer/tui.ts +1 -1
  241. package/src/workflows/command-batch.ts +2 -2
  242. package/src/workflows/engine.ts +14 -15
  243. package/src/workflows/store.ts +31 -28
  244. package/src/workflows/types.ts +2 -2
  245. package/dist/controllers/conditions.d.ts +0 -6
  246. package/dist/controllers/conditions.js.map +0 -1
  247. package/dist/controllers/definition.d.ts +0 -6
  248. package/dist/controllers/definition.js +0 -45
  249. package/dist/controllers/definition.js.map +0 -1
  250. package/dist/controllers/effects.d.ts +0 -15
  251. package/dist/controllers/effects.js.map +0 -1
  252. package/dist/controllers/errors.d.ts +0 -12
  253. package/dist/controllers/errors.js +0 -25
  254. package/dist/controllers/errors.js.map +0 -1
  255. package/dist/controllers/index.d.ts +0 -12
  256. package/dist/controllers/index.js +0 -12
  257. package/dist/controllers/index.js.map +0 -1
  258. package/dist/controllers/json.js.map +0 -1
  259. package/dist/controllers/loader.d.ts +0 -23
  260. package/dist/controllers/loader.js +0 -74
  261. package/dist/controllers/loader.js.map +0 -1
  262. package/dist/controllers/manager.d.ts +0 -59
  263. package/dist/controllers/manager.js.map +0 -1
  264. package/dist/controllers/results.d.ts +0 -5
  265. package/dist/controllers/results.js.map +0 -1
  266. package/dist/controllers/sqlite.js.map +0 -1
  267. package/dist/controllers/workflows.d.ts +0 -34
  268. package/dist/controllers/workflows.js.map +0 -1
  269. package/dist/extension/controller-command.js.map +0 -1
  270. package/dist/host/channel-effects.js.map +0 -1
  271. package/dist/host/channel-supervisor.js.map +0 -1
  272. package/dist/host/child-worker-supervisor.js.map +0 -1
  273. package/dist/host/controller-worker-entry.d.ts +0 -2
  274. package/dist/host/controller-worker-entry.js.map +0 -1
  275. package/dist/host/controller-worker-protocol.d.ts +0 -36
  276. package/dist/host/controller-worker-protocol.js +0 -49
  277. package/dist/host/controller-worker-protocol.js.map +0 -1
  278. package/dist/host/controller-worker-supervisor.d.ts +0 -21
  279. package/dist/host/controller-worker-supervisor.js +0 -54
  280. package/dist/host/controller-worker-supervisor.js.map +0 -1
  281. package/dist/host/host-entry.js.map +0 -1
  282. package/dist/host/processes.js.map +0 -1
  283. package/dist/host/resolver-entry.js.map +0 -1
  284. package/dist/host/rpc-bridge.js.map +0 -1
  285. package/dist/host/rpc-executor.js.map +0 -1
  286. package/dist/host/runner.js.map +0 -1
  287. package/dist/host/state.js.map +0 -1
  288. package/dist/host/view.js.map +0 -1
  289. package/dist/host/worker-entry.js.map +0 -1
  290. package/dist/host/worker-protocol.d.ts +0 -46
  291. package/dist/host/worker-protocol.js +0 -122
  292. package/dist/host/worker-protocol.js.map +0 -1
  293. package/dist/host/worker-store.js.map +0 -1
  294. package/dist/host/worker-supervisor.d.ts +0 -22
  295. package/dist/host/worker-supervisor.js.map +0 -1
  296. package/docs/CONTROLLERS.md +0 -217
  297. package/src/controllers/definition.ts +0 -65
  298. package/src/controllers/errors.ts +0 -27
  299. package/src/controllers/index.ts +0 -88
  300. package/src/controllers/loader.ts +0 -104
  301. package/src/extension/controller-command.ts +0 -45
  302. package/src/host/controller-worker-protocol.ts +0 -104
  303. package/src/host/controller-worker-supervisor.ts +0 -79
  304. package/src/host/worker-protocol.ts +0 -176
  305. package/src/host/worker-supervisor.ts +0 -74
  306. /package/dist/{controllers → resource-managers}/json.d.ts +0 -0
  307. /package/dist/{controllers → resource-managers}/json.js +0 -0
  308. /package/dist/{controllers → resource-managers}/results.js +0 -0
  309. /package/dist/{controllers → resource-managers}/store.js +0 -0
  310. /package/dist/{controllers → resource-managers}/types.js +0 -0
  311. /package/dist/{host → server}/channel-effects.d.ts +0 -0
  312. /package/dist/{host → server}/channel-effects.js +0 -0
  313. /package/dist/{host/host-entry.d.ts → server/server-entry.d.ts} +0 -0
  314. /package/src/{controllers → resource-managers}/json.ts +0 -0
  315. /package/src/{host → server}/channel-effects.ts +0 -0
@@ -0,0 +1,96 @@
1
+ import { createHash } from "node:crypto";
2
+ import { canonicalJson, parseJson } from "../state/json.js";
3
+ import { WORKFLOW_RUNNER_CONTENT_CHUNK_BYTES, WORKFLOW_RUNNER_CONTENT_CHUNK_SCHEMA, WORKFLOW_RUNNER_CONTENT_REFERENCE_SCHEMA, encodeRunnerLine, } from "./workflow-runner-protocol.js";
4
+ const CONTENT_MEDIA_TYPE = "application/json";
5
+ export function boundRunnerResponse(state, allowedDigests, response) {
6
+ try {
7
+ encodeRunnerLine(response);
8
+ return response;
9
+ }
10
+ catch {
11
+ if (response.result === undefined)
12
+ return responseTooLarge(response.messageId);
13
+ try {
14
+ const content = Buffer.from(canonicalJson(response.result), "utf8");
15
+ const sha256 = state.putBlob(content, CONTENT_MEDIA_TYPE).toString("hex");
16
+ allowedDigests.add(sha256);
17
+ const referenced = {
18
+ ...response,
19
+ result: {
20
+ schema: WORKFLOW_RUNNER_CONTENT_REFERENCE_SCHEMA,
21
+ sha256,
22
+ mediaType: CONTENT_MEDIA_TYPE,
23
+ bytes: content.byteLength,
24
+ },
25
+ };
26
+ encodeRunnerLine(referenced);
27
+ return referenced;
28
+ }
29
+ catch {
30
+ return responseTooLarge(response.messageId);
31
+ }
32
+ }
33
+ }
34
+ export function readRunnerContentChunk(state, allowedDigests, sha256, offset) {
35
+ if (!/^[0-9a-f]{64}$/u.test(sha256) || !allowedDigests.has(sha256)) {
36
+ throw new Error("Workflow runner content is unavailable");
37
+ }
38
+ if (!Number.isSafeInteger(offset) || offset < 0) {
39
+ throw new Error("Workflow runner content offset is invalid");
40
+ }
41
+ const stored = state.readBlob(Buffer.from(sha256, "hex"));
42
+ if (stored === undefined || stored.mediaType !== CONTENT_MEDIA_TYPE) {
43
+ throw new Error("Workflow runner content is unavailable");
44
+ }
45
+ if (offset > stored.byteLength)
46
+ throw new Error("Workflow runner content offset is invalid");
47
+ const nextOffset = Math.min(offset + WORKFLOW_RUNNER_CONTENT_CHUNK_BYTES, stored.byteLength);
48
+ return {
49
+ schema: WORKFLOW_RUNNER_CONTENT_CHUNK_SCHEMA,
50
+ sha256,
51
+ mediaType: CONTENT_MEDIA_TYPE,
52
+ bytes: stored.byteLength,
53
+ offset,
54
+ nextOffset,
55
+ complete: nextOffset === stored.byteLength,
56
+ data: stored.content.subarray(offset, nextOffset).toString("base64url"),
57
+ };
58
+ }
59
+ export async function materializeRunnerContent(reference, readChunk) {
60
+ const parts = [];
61
+ let offset = 0;
62
+ for (;;) {
63
+ const chunk = await readChunk(offset);
64
+ const bytes = Buffer.from(chunk.data, "base64url");
65
+ if (chunk.sha256 !== reference.sha256 ||
66
+ chunk.mediaType !== reference.mediaType ||
67
+ chunk.bytes !== reference.bytes ||
68
+ chunk.offset !== offset ||
69
+ chunk.nextOffset !== offset + bytes.byteLength ||
70
+ chunk.nextOffset > reference.bytes ||
71
+ chunk.complete !== (chunk.nextOffset === reference.bytes)) {
72
+ throw new Error("Workflow runner content chunk is invalid");
73
+ }
74
+ parts.push(bytes);
75
+ offset = chunk.nextOffset;
76
+ if (chunk.complete)
77
+ break;
78
+ if (bytes.byteLength === 0)
79
+ throw new Error("Workflow runner content read made no progress");
80
+ }
81
+ const content = Buffer.concat(parts);
82
+ if (content.byteLength !== reference.bytes ||
83
+ createHash("sha256").update(content).digest("hex") !== reference.sha256) {
84
+ throw new Error("Workflow runner content does not match its reference");
85
+ }
86
+ return parseJson(content.toString("utf8"));
87
+ }
88
+ function responseTooLarge(messageId) {
89
+ return {
90
+ schema: "pi-workflows.worker-response.v1",
91
+ messageId,
92
+ outcome: "rejected",
93
+ error: "Workflow runner response could not be transferred within the protocol limit",
94
+ };
95
+ }
96
+ //# sourceMappingURL=workflow-runner-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-runner-content.js","sourceRoot":"","sources":["../../src/server/workflow-runner-content.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { WorkflowEngine } from "../workflows/engine.js";
3
3
  import type { AgentStepContract, AgentStepSubmission, WorkflowDefinition, WorkflowSource } from "../workflows/types.js";
4
- import { type WorkerRunCommand } from "./worker-protocol.js";
4
+ import { type WorkflowRunnerCommand } from "./workflow-runner-protocol.js";
5
5
  export declare function validateAcceptedAssistantSubmission(submission: AgentStepSubmission, contract: AgentStepContract): {
6
6
  ok: true;
7
7
  value: AgentStepSubmission;
@@ -9,5 +9,5 @@ export declare function validateAcceptedAssistantSubmission(submission: AgentSte
9
9
  ok: false;
10
10
  error: string;
11
11
  };
12
- export declare function executeWorkerRunCommand(engine: Pick<WorkflowEngine, "run" | "resumeRun" | "continueRun">, workflow: WorkflowDefinition, runId: string, workflowSource: WorkflowSource, command: WorkerRunCommand): Promise<import("../workflows/types.js").WorkflowRunResult>;
13
- export declare function runWorkflowWorker(): Promise<number>;
12
+ export declare function executeRunnerRunCommand(engine: Pick<WorkflowEngine, "run" | "resumeRun" | "continueRun">, workflow: WorkflowDefinition, runId: string, workflowSource: WorkflowSource, command: WorkflowRunnerCommand): Promise<import("../workflows/types.js").WorkflowRunResult>;
13
+ export declare function runWorkflowRunner(): Promise<number>;
@@ -9,11 +9,12 @@ import { WorkflowEngine } from "../workflows/engine.js";
9
9
  import { ClaimLostError, RunParkedError, WorkflowSourceChangedError, errorMessage, } from "../workflows/errors.js";
10
10
  import { hashWorkflowSource, resolveWorkflowSource } from "../workflows/loader.js";
11
11
  import { RpcStepExecutor } from "./rpc-executor.js";
12
- import { encodeWorkerLine, parseWorkerResponse, } from "./worker-protocol.js";
13
- import { HostBackedWorkflowStore } from "./worker-store.js";
14
- const STARTUP_ENV = "PI_WORKFLOWS_WORKER_LAUNCH";
12
+ import { materializeRunnerContent } from "./workflow-runner-content.js";
13
+ import { MAX_WORKFLOW_RUNNER_PROTOCOL_MESSAGE_BYTES, encodeRunnerLine, isRunnerContentChunk, isRunnerContentReference, parseRunnerResponse, } from "./workflow-runner-protocol.js";
14
+ import { ServerBackedWorkflowStore, } from "./workflow-runner-store.js";
15
+ const STARTUP_ENV = "PI_WORKFLOWS_WORKFLOW_RUNNER_LAUNCH";
15
16
  const PRESENTATION_TIMEOUT_MS = 30_000;
16
- class StdioWorkerTransport {
17
+ class StdioRunnerTransport {
17
18
  launch;
18
19
  pending = new Map();
19
20
  buffered = Buffer.alloc(0);
@@ -32,17 +33,17 @@ class StdioWorkerTransport {
32
33
  operation: options.operation,
33
34
  runId: this.launch.runId,
34
35
  generation: this.launch.generation,
35
- workerEpoch: this.launch.workerEpoch,
36
+ runnerEpoch: this.launch.runnerEpoch,
36
37
  expectedRevision: options.expectedRevision,
37
38
  ...(options.attemptId === undefined ? {} : { attemptId: options.attemptId }),
38
39
  payload: options.payload,
39
40
  };
40
- const response = await this.send(message);
41
+ const response = await this.sendResolved(message);
41
42
  if (response.outcome === "claimLost") {
42
43
  throw new ClaimLostError(this.launch.runId, "ownerChanged");
43
44
  }
44
45
  if (response.outcome === "rejected") {
45
- throw new Error(response.error ?? "Workflow worker message was rejected");
46
+ throw new Error(response.error ?? "Workflow runner message was rejected");
46
47
  }
47
48
  return {
48
49
  ...(response.result === undefined ? {} : { result: response.result }),
@@ -50,7 +51,7 @@ class StdioWorkerTransport {
50
51
  };
51
52
  }
52
53
  async control(operation, payload) {
53
- return await this.send({
54
+ return await this.sendResolved({
54
55
  schema: "pi-workflows.worker-message.v1",
55
56
  launchSchema: this.launch.schema,
56
57
  messageId: randomUUID(),
@@ -58,7 +59,7 @@ class StdioWorkerTransport {
58
59
  operation,
59
60
  runId: this.launch.runId,
60
61
  generation: this.launch.generation,
61
- workerEpoch: this.launch.workerEpoch,
62
+ runnerEpoch: this.launch.runnerEpoch,
62
63
  expectedRevision: 0,
63
64
  payload,
64
65
  });
@@ -67,20 +68,52 @@ class StdioWorkerTransport {
67
68
  process.stdin.pause();
68
69
  process.stdin.removeAllListeners("data");
69
70
  process.stdin.removeAllListeners("error");
70
- this.failAll(new Error("Workflow worker transport closed"));
71
+ this.failAll(new Error("Workflow runner transport closed"));
72
+ }
73
+ async sendResolved(message) {
74
+ const response = await this.send(message);
75
+ if (!isRunnerContentReference(response.result))
76
+ return response;
77
+ const reference = response.result;
78
+ const expectedRevision = response.revision ?? message.expectedRevision;
79
+ return {
80
+ ...response,
81
+ result: await materializeRunnerContent(reference, async (offset) => {
82
+ const chunkResponse = await this.send({
83
+ schema: "pi-workflows.worker-message.v1",
84
+ launchSchema: this.launch.schema,
85
+ messageId: randomUUID(),
86
+ kind: "runner.progress",
87
+ operation: "content.read",
88
+ runId: this.launch.runId,
89
+ generation: this.launch.generation,
90
+ runnerEpoch: this.launch.runnerEpoch,
91
+ expectedRevision,
92
+ payload: { sha256: reference.sha256, offset },
93
+ });
94
+ if (chunkResponse.outcome === "claimLost") {
95
+ throw new ClaimLostError(this.launch.runId, "ownerChanged");
96
+ }
97
+ if (chunkResponse.outcome !== "accepted" || !isRunnerContentChunk(chunkResponse.result)) {
98
+ throw new Error(chunkResponse.error ?? "Workflow runner content read was rejected");
99
+ }
100
+ return chunkResponse.result;
101
+ }),
102
+ };
71
103
  }
72
104
  async send(message) {
73
105
  const response = new Promise((resolve, reject) => {
74
106
  this.pending.set(message.messageId, { resolve, reject });
75
107
  });
76
- if (!process.stdout.write(encodeWorkerLine(message)))
108
+ if (!process.stdout.write(encodeRunnerLine(message)))
77
109
  await once(process.stdout, "drain");
78
110
  return await response;
79
111
  }
80
112
  onData(chunk) {
81
113
  this.buffered = Buffer.concat([this.buffered, chunk]);
82
- if (this.buffered.byteLength > 1024 * 1024 && !this.buffered.includes(0x0a)) {
83
- this.failAll(new Error("Worker response exceeds 1 MiB"));
114
+ if (this.buffered.byteLength > MAX_WORKFLOW_RUNNER_PROTOCOL_MESSAGE_BYTES &&
115
+ !this.buffered.includes(0x0a)) {
116
+ this.failAll(new Error("Runner response exceeds 1 MiB"));
84
117
  return;
85
118
  }
86
119
  for (;;) {
@@ -92,10 +125,10 @@ class StdioWorkerTransport {
92
125
  if (frame.byteLength === 0)
93
126
  continue;
94
127
  try {
95
- const response = parseWorkerResponse(frame);
128
+ const response = parseRunnerResponse(frame);
96
129
  const pending = this.pending.get(response.messageId);
97
130
  if (pending === undefined)
98
- throw new Error("Worker response has no pending request");
131
+ throw new Error("Runner response has no pending request");
99
132
  this.pending.delete(response.messageId);
100
133
  pending.resolve(response);
101
134
  }
@@ -213,7 +246,7 @@ export function validateAcceptedAssistantSubmission(submission, contract) {
213
246
  },
214
247
  };
215
248
  }
216
- export async function executeWorkerRunCommand(engine, workflow, runId, workflowSource, command) {
249
+ export async function executeRunnerRunCommand(engine, workflow, runId, workflowSource, command) {
217
250
  switch (command.kind) {
218
251
  case "start":
219
252
  case "restart":
@@ -235,31 +268,31 @@ export async function executeWorkerRunCommand(engine, workflow, runId, workflowS
235
268
  });
236
269
  }
237
270
  }
238
- export async function runWorkflowWorker() {
271
+ export async function runWorkflowRunner() {
239
272
  const launch = readLaunchEnvelope();
240
- const transport = new StdioWorkerTransport(launch);
273
+ const transport = new StdioRunnerTransport(launch);
241
274
  try {
242
- const ready = await transport.control("worker.ready", {});
275
+ const ready = await transport.control("runner.ready", {});
243
276
  if (ready.outcome !== "accepted" || ready.result === undefined) {
244
- throw new Error(ready.error ?? "Workflow host rejected worker startup");
277
+ throw new Error(ready.error ?? "Workflow server rejected runner startup");
245
278
  }
246
279
  const bootstrap = ready.result;
247
- const workflowSource = parseWorkerWorkflowSources(launch.workflowSource);
280
+ const workflowSource = parseRunnerWorkflowSources(launch.workflowSource);
248
281
  let workflow;
249
282
  try {
250
283
  workflow = await resolveVerifiedWorkflow(launch.runId, workflowSource);
251
284
  }
252
285
  catch (error) {
253
- const response = await transport.control("worker.exiting", {
286
+ const response = await transport.control("runner.exiting", {
254
287
  status: "workflowLoadFailed",
255
288
  error: errorMessage(error),
256
289
  });
257
290
  if (response.outcome !== "accepted") {
258
- throw new Error(response.error ?? "Workflow host rejected the load-failure report");
291
+ throw new Error(response.error ?? "Workflow server rejected the load-failure report");
259
292
  }
260
293
  return 1;
261
294
  }
262
- const store = new HostBackedWorkflowStore(launch.runId, transport, ready.revision ?? 0);
295
+ const store = new ServerBackedWorkflowStore(launch.runId, transport, ready.revision ?? 0);
263
296
  let executor;
264
297
  let closeExecutor;
265
298
  if (bootstrap.originSessionId !== null) {
@@ -275,7 +308,7 @@ export async function runWorkflowWorker() {
275
308
  await transport.request({
276
309
  messageId: randomUUID(),
277
310
  operation: "process.register",
278
- kind: "worker.progress",
311
+ kind: "runner.progress",
279
312
  expectedRevision: 0,
280
313
  payload: { pid },
281
314
  });
@@ -284,7 +317,7 @@ export async function runWorkflowWorker() {
284
317
  await transport.request({
285
318
  messageId: randomUUID(),
286
319
  operation: "process.unregister",
287
- kind: "worker.progress",
320
+ kind: "runner.progress",
288
321
  expectedRevision: 0,
289
322
  payload: { pid },
290
323
  });
@@ -321,8 +354,8 @@ export async function runWorkflowWorker() {
321
354
  },
322
355
  });
323
356
  try {
324
- const result = await executeWorkerRunCommand(engine, workflow, launch.runId, workflowSource.root, bootstrap.command);
325
- await transport.control("worker.exiting", {
357
+ const result = await executeRunnerRunCommand(engine, workflow, launch.runId, workflowSource.root, bootstrap.command);
358
+ await transport.control("runner.exiting", {
326
359
  status: result.state.status,
327
360
  traceSeq: result.state.traceSeq,
328
361
  });
@@ -369,13 +402,13 @@ async function resolvePresentationInstructions(workflow, state) {
369
402
  clearTimeout(timer);
370
403
  }
371
404
  }
372
- function parseWorkerWorkflowSources(value) {
405
+ function parseRunnerWorkflowSources(value) {
373
406
  if (!isRecord(value) || !isWorkflowSource(value.root) || !Array.isArray(value.mounted)) {
374
- throw new Error("Workflow worker source identity is invalid");
407
+ throw new Error("Workflow runner source identity is invalid");
375
408
  }
376
409
  const mounted = value.mounted;
377
410
  if (!mounted.every(isMountedWorkflowSource)) {
378
- throw new Error("Workflow worker mounted source identity is invalid");
411
+ throw new Error("Workflow runner mounted source identity is invalid");
379
412
  }
380
413
  return { root: value.root, mounted };
381
414
  }
@@ -421,19 +454,19 @@ function isRecord(value) {
421
454
  function readLaunchEnvelope() {
422
455
  const encoded = process.env[STARTUP_ENV];
423
456
  if (encoded === undefined)
424
- throw new Error("Workflow worker launch envelope is missing");
457
+ throw new Error("Workflow runner launch envelope is missing");
425
458
  const value = parseJson(Buffer.from(encoded, "base64url").toString("utf8"));
426
459
  if (typeof value !== "object" ||
427
460
  value === null ||
428
461
  Array.isArray(value) ||
429
462
  value.schema !== "pi-workflows.worker-launch.v1") {
430
- throw new Error("Workflow worker launch envelope is invalid");
463
+ throw new Error("Workflow runner launch envelope is invalid");
431
464
  }
432
465
  return value;
433
466
  }
434
467
  async function main() {
435
468
  try {
436
- process.exitCode = await runWorkflowWorker();
469
+ process.exitCode = await runWorkflowRunner();
437
470
  }
438
471
  catch (error) {
439
472
  process.stderr.write(`${errorMessage(error)}\n`);
@@ -442,4 +475,4 @@ async function main() {
442
475
  }
443
476
  if (process.argv[1] === fileURLToPath(import.meta.url))
444
477
  void main();
445
- //# sourceMappingURL=worker-entry.js.map
478
+ //# sourceMappingURL=workflow-runner-entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-runner-entry.js","sourceRoot":"","sources":["../../src/server/workflow-runner-entry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import { type JsonValue } from "../state/json.js";
2
+ export declare const MAX_WORKFLOW_RUNNER_PROTOCOL_MESSAGE_BYTES: number;
3
+ export declare const WORKFLOW_RUNNER_CONTENT_CHUNK_BYTES: number;
4
+ export declare const WORKFLOW_RUNNER_MESSAGE_SCHEMA: "pi-workflows.worker-message.v1";
5
+ export declare const WORKFLOW_RUNNER_RESPONSE_SCHEMA: "pi-workflows.worker-response.v1";
6
+ export declare const WORKFLOW_RUNNER_CONTENT_REFERENCE_SCHEMA: "pi-workflows.worker-content-reference.v1";
7
+ export declare const WORKFLOW_RUNNER_CONTENT_CHUNK_SCHEMA: "pi-workflows.worker-content-chunk.v1";
8
+ export type WorkflowRunnerCommand = {
9
+ kind: "start";
10
+ input: JsonValue;
11
+ } | {
12
+ kind: "resume";
13
+ resumeInteractionAttemptId?: string;
14
+ } | {
15
+ kind: "continue";
16
+ parentRunId: string;
17
+ input: JsonValue;
18
+ humanDecision?: JsonValue;
19
+ } | {
20
+ kind: "restart";
21
+ input: JsonValue;
22
+ };
23
+ export declare const WORKFLOW_RUNNER_MESSAGE_KINDS: readonly ["runner.ready", "node.started", "node.update", "node.finished", "node.failed", "run.parked", "run.finished", "interaction.requested", "interaction.accepted", "interaction.rejected", "notification.requested", "presentation.requested", "effect.reserve", "effect.settle", "runner.progress", "runner.exiting"];
24
+ export type WorkflowRunnerMessageKind = (typeof WORKFLOW_RUNNER_MESSAGE_KINDS)[number];
25
+ export declare const WORKFLOW_RUNNER_STORE_OPERATIONS: readonly ["store.initializeRun", "store.prepareRunResume", "store.readRunState", "store.writeSnapshot", "store.publishUpdate", "store.findSettingsScope", "store.ensureSettingsScope", "store.getSettingsScopeAtChange", "store.createHumanDecisionRequest", "store.readResolvedHumanDecision", "store.reserveEffect", "store.settleEffect", "content.read", "process.register", "process.unregister", "interaction.request", "interaction.accept", "interaction.reject", "notification.request", "presentation.request"];
26
+ export type WorkflowRunnerStoreOperation = (typeof WORKFLOW_RUNNER_STORE_OPERATIONS)[number];
27
+ export type WorkflowRunnerMessage = {
28
+ schema: typeof WORKFLOW_RUNNER_MESSAGE_SCHEMA;
29
+ launchSchema: "pi-workflows.worker-launch.v1";
30
+ messageId: string;
31
+ kind: WorkflowRunnerMessageKind;
32
+ operation: WorkflowRunnerStoreOperation | "runner.ready" | "runner.exiting";
33
+ runId: string;
34
+ generation: number;
35
+ runnerEpoch: string;
36
+ expectedRevision: number;
37
+ attemptId?: string;
38
+ payload: JsonValue;
39
+ };
40
+ export type WorkflowRunnerResponse = {
41
+ schema: typeof WORKFLOW_RUNNER_RESPONSE_SCHEMA;
42
+ messageId: string;
43
+ outcome: "accepted" | "adopted" | "rejected" | "claimLost";
44
+ revision?: number;
45
+ result?: JsonValue;
46
+ error?: string;
47
+ };
48
+ export type WorkflowRunnerContentReference = {
49
+ schema: typeof WORKFLOW_RUNNER_CONTENT_REFERENCE_SCHEMA;
50
+ sha256: string;
51
+ mediaType: "application/json";
52
+ bytes: number;
53
+ };
54
+ export type WorkflowRunnerContentChunk = {
55
+ schema: typeof WORKFLOW_RUNNER_CONTENT_CHUNK_SCHEMA;
56
+ sha256: string;
57
+ mediaType: "application/json";
58
+ bytes: number;
59
+ offset: number;
60
+ nextOffset: number;
61
+ complete: boolean;
62
+ data: string;
63
+ };
64
+ export declare function isRunnerContentReference(value: unknown): value is WorkflowRunnerContentReference;
65
+ export declare function isRunnerContentChunk(value: unknown): value is WorkflowRunnerContentChunk;
66
+ export declare function runnerKindForOperation(operation: WorkflowRunnerStoreOperation, payload: Record<string, unknown>): WorkflowRunnerMessageKind;
67
+ export declare function encodeRunnerLine(message: WorkflowRunnerMessage | WorkflowRunnerResponse): Buffer;
68
+ export declare function parseRunnerMessage(line: Buffer | string): WorkflowRunnerMessage;
69
+ export declare function parseRunnerResponse(line: Buffer | string): WorkflowRunnerResponse;
@@ -0,0 +1,176 @@
1
+ import { canonicalJson, parseJson } from "../state/json.js";
2
+ export const MAX_WORKFLOW_RUNNER_PROTOCOL_MESSAGE_BYTES = 1024 * 1024;
3
+ export const WORKFLOW_RUNNER_CONTENT_CHUNK_BYTES = 512 * 1024;
4
+ export const WORKFLOW_RUNNER_MESSAGE_SCHEMA = "pi-workflows.worker-message.v1";
5
+ export const WORKFLOW_RUNNER_RESPONSE_SCHEMA = "pi-workflows.worker-response.v1";
6
+ export const WORKFLOW_RUNNER_CONTENT_REFERENCE_SCHEMA = "pi-workflows.worker-content-reference.v1";
7
+ export const WORKFLOW_RUNNER_CONTENT_CHUNK_SCHEMA = "pi-workflows.worker-content-chunk.v1";
8
+ export const WORKFLOW_RUNNER_MESSAGE_KINDS = [
9
+ "runner.ready",
10
+ "node.started",
11
+ "node.update",
12
+ "node.finished",
13
+ "node.failed",
14
+ "run.parked",
15
+ "run.finished",
16
+ "interaction.requested",
17
+ "interaction.accepted",
18
+ "interaction.rejected",
19
+ "notification.requested",
20
+ "presentation.requested",
21
+ "effect.reserve",
22
+ "effect.settle",
23
+ "runner.progress",
24
+ "runner.exiting",
25
+ ];
26
+ export const WORKFLOW_RUNNER_STORE_OPERATIONS = [
27
+ "store.initializeRun",
28
+ "store.prepareRunResume",
29
+ "store.readRunState",
30
+ "store.writeSnapshot",
31
+ "store.publishUpdate",
32
+ "store.findSettingsScope",
33
+ "store.ensureSettingsScope",
34
+ "store.getSettingsScopeAtChange",
35
+ "store.createHumanDecisionRequest",
36
+ "store.readResolvedHumanDecision",
37
+ "store.reserveEffect",
38
+ "store.settleEffect",
39
+ "content.read",
40
+ "process.register",
41
+ "process.unregister",
42
+ "interaction.request",
43
+ "interaction.accept",
44
+ "interaction.reject",
45
+ "notification.request",
46
+ "presentation.request",
47
+ ];
48
+ const WORKFLOW_RUNNER_CONTROL_OPERATIONS = ["runner.ready", "runner.exiting"];
49
+ export function isRunnerContentReference(value) {
50
+ return (isRecord(value) &&
51
+ value.schema === WORKFLOW_RUNNER_CONTENT_REFERENCE_SCHEMA &&
52
+ typeof value.sha256 === "string" &&
53
+ /^[0-9a-f]{64}$/u.test(value.sha256) &&
54
+ value.mediaType === "application/json" &&
55
+ Number.isSafeInteger(value.bytes) &&
56
+ value.bytes >= 0);
57
+ }
58
+ export function isRunnerContentChunk(value) {
59
+ return (isRecord(value) &&
60
+ value.schema === WORKFLOW_RUNNER_CONTENT_CHUNK_SCHEMA &&
61
+ typeof value.sha256 === "string" &&
62
+ /^[0-9a-f]{64}$/u.test(value.sha256) &&
63
+ value.mediaType === "application/json" &&
64
+ Number.isSafeInteger(value.bytes) &&
65
+ value.bytes >= 0 &&
66
+ Number.isSafeInteger(value.offset) &&
67
+ value.offset >= 0 &&
68
+ Number.isSafeInteger(value.nextOffset) &&
69
+ value.nextOffset >= value.offset &&
70
+ typeof value.complete === "boolean" &&
71
+ typeof value.data === "string");
72
+ }
73
+ export function runnerKindForOperation(operation, payload) {
74
+ if (operation === "store.publishUpdate")
75
+ return "node.update";
76
+ if (operation === "store.reserveEffect")
77
+ return "effect.reserve";
78
+ if (operation === "store.settleEffect")
79
+ return "effect.settle";
80
+ if (operation === "store.createHumanDecisionRequest" || operation === "interaction.request") {
81
+ return "interaction.requested";
82
+ }
83
+ if (operation === "interaction.accept")
84
+ return "interaction.accepted";
85
+ if (operation === "interaction.reject")
86
+ return "interaction.rejected";
87
+ if (operation === "notification.request")
88
+ return "notification.requested";
89
+ if (operation === "presentation.request")
90
+ return "presentation.requested";
91
+ if (operation === "store.writeSnapshot") {
92
+ const event = payload.event;
93
+ const eventType = isRecord(event) && typeof event.type === "string" ? event.type : "";
94
+ if (eventType === "node_started")
95
+ return "node.started";
96
+ if (eventType === "node_finished")
97
+ return "node.finished";
98
+ if (eventType === "node_failed" || eventType === "node_timed_out")
99
+ return "node.failed";
100
+ if (eventType === "run_waiting" || eventType.includes("park"))
101
+ return "run.parked";
102
+ if (eventType.startsWith("run_") && eventType !== "run_started")
103
+ return "run.finished";
104
+ }
105
+ return "runner.progress";
106
+ }
107
+ export function encodeRunnerLine(message) {
108
+ const encoded = Buffer.from(`${canonicalJson(message)}\n`, "utf8");
109
+ if (encoded.byteLength > MAX_WORKFLOW_RUNNER_PROTOCOL_MESSAGE_BYTES) {
110
+ throw new Error("Runner protocol message exceeds 1 MiB");
111
+ }
112
+ return encoded;
113
+ }
114
+ export function parseRunnerMessage(line) {
115
+ const value = parseRunnerValue(line);
116
+ if (value.schema !== WORKFLOW_RUNNER_MESSAGE_SCHEMA ||
117
+ value.launchSchema !== "pi-workflows.worker-launch.v1") {
118
+ throw new Error("Invalid workflow runner message schema");
119
+ }
120
+ requireText(value.messageId, "messageId");
121
+ requireText(value.runId, "runId");
122
+ requireText(value.runnerEpoch, "runnerEpoch");
123
+ if (!WORKFLOW_RUNNER_MESSAGE_KINDS.includes(value.kind)) {
124
+ throw new Error("Invalid workflow runner message kind");
125
+ }
126
+ if (!Number.isSafeInteger(value.generation) || value.generation <= 0) {
127
+ throw new Error("Runner generation must be positive");
128
+ }
129
+ if (!Number.isSafeInteger(value.expectedRevision) || value.expectedRevision < 0) {
130
+ throw new Error("Runner expectedRevision must be non-negative");
131
+ }
132
+ requireText(value.operation, "operation");
133
+ if (!WORKFLOW_RUNNER_STORE_OPERATIONS.includes(value.operation) &&
134
+ !WORKFLOW_RUNNER_CONTROL_OPERATIONS.includes(value.operation)) {
135
+ throw new Error("Invalid workflow runner operation");
136
+ }
137
+ if (value.attemptId !== undefined)
138
+ requireText(value.attemptId, "attemptId");
139
+ if (!Object.hasOwn(value, "payload"))
140
+ throw new Error("Runner payload is required");
141
+ return value;
142
+ }
143
+ export function parseRunnerResponse(line) {
144
+ const value = parseRunnerValue(line);
145
+ if (value.schema !== WORKFLOW_RUNNER_RESPONSE_SCHEMA)
146
+ throw new Error("Invalid workflow runner response schema");
147
+ requireText(value.messageId, "messageId");
148
+ if (!["accepted", "adopted", "rejected", "claimLost"].includes(value.outcome)) {
149
+ throw new Error("Invalid workflow runner response outcome");
150
+ }
151
+ if (value.error !== undefined && typeof value.error !== "string") {
152
+ throw new Error("Runner response error must be text");
153
+ }
154
+ return value;
155
+ }
156
+ function parseRunnerValue(line) {
157
+ const buffer = Buffer.isBuffer(line) ? line : Buffer.from(line, "utf8");
158
+ if (buffer.byteLength + 1 > MAX_WORKFLOW_RUNNER_PROTOCOL_MESSAGE_BYTES) {
159
+ throw new Error("Runner protocol message exceeds 1 MiB");
160
+ }
161
+ const text = buffer.toString("utf8");
162
+ const value = parseJson(text);
163
+ if (!isRecord(value) || canonicalJson(value) !== text) {
164
+ throw new Error("Runner protocol message must be a canonical JSON object");
165
+ }
166
+ return value;
167
+ }
168
+ function requireText(value, field) {
169
+ if (typeof value !== "string" || value.length === 0 || value.length > 256) {
170
+ throw new Error(`Runner ${field} must be nonempty bounded text`);
171
+ }
172
+ }
173
+ function isRecord(value) {
174
+ return typeof value === "object" && value !== null && !Array.isArray(value);
175
+ }
176
+ //# sourceMappingURL=workflow-runner-protocol.js.map