@relayflows/sdk 2.0.55 → 2.0.56

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 (179) hide show
  1. package/dist/authored-broker.d.ts +13 -0
  2. package/dist/authored-broker.d.ts.map +1 -0
  3. package/dist/authored-broker.js +75 -0
  4. package/dist/authored-broker.js.map +1 -0
  5. package/dist/authored-budget.d.ts +1 -1
  6. package/dist/authored-budget.d.ts.map +1 -1
  7. package/dist/authored-budget.js +8 -2
  8. package/dist/authored-budget.js.map +1 -1
  9. package/dist/authored-flow-error.d.ts +6 -0
  10. package/dist/authored-flow-error.d.ts.map +1 -1
  11. package/dist/authored-flow-error.js.map +1 -1
  12. package/dist/authored-flow-executor.d.ts +11 -0
  13. package/dist/authored-flow-executor.d.ts.map +1 -1
  14. package/dist/authored-flow-executor.js +104 -20
  15. package/dist/authored-flow-executor.js.map +1 -1
  16. package/dist/authored-flow-loader.d.ts.map +1 -1
  17. package/dist/authored-flow-loader.js +42 -3
  18. package/dist/authored-flow-loader.js.map +1 -1
  19. package/dist/authored-helper-effect.d.ts.map +1 -1
  20. package/dist/authored-helper-effect.js +1 -1
  21. package/dist/authored-helper-effect.js.map +1 -1
  22. package/dist/authored-hooks.d.ts +2 -1
  23. package/dist/authored-hooks.d.ts.map +1 -1
  24. package/dist/authored-hooks.js +2 -2
  25. package/dist/authored-hooks.js.map +1 -1
  26. package/dist/authored-human.d.ts +18 -0
  27. package/dist/authored-human.d.ts.map +1 -1
  28. package/dist/authored-human.js +32 -4
  29. package/dist/authored-human.js.map +1 -1
  30. package/dist/authored-mcp.d.ts.map +1 -1
  31. package/dist/authored-mcp.js +3 -2
  32. package/dist/authored-mcp.js.map +1 -1
  33. package/dist/authored-node-entry.js +4 -0
  34. package/dist/authored-node-entry.js.map +1 -1
  35. package/dist/authored-node-runner.d.ts.map +1 -1
  36. package/dist/authored-node-runner.js +1 -0
  37. package/dist/authored-node-runner.js.map +1 -1
  38. package/dist/authored-plugin-effect.d.ts.map +1 -1
  39. package/dist/authored-plugin-effect.js +3 -2
  40. package/dist/authored-plugin-effect.js.map +1 -1
  41. package/dist/authored-preflight.d.ts.map +1 -1
  42. package/dist/authored-preflight.js +2 -1
  43. package/dist/authored-preflight.js.map +1 -1
  44. package/dist/authored-root.d.ts.map +1 -1
  45. package/dist/authored-root.js +13 -3
  46. package/dist/authored-root.js.map +1 -1
  47. package/dist/authored-serial-ordinals.d.ts +41 -0
  48. package/dist/authored-serial-ordinals.d.ts.map +1 -0
  49. package/dist/authored-serial-ordinals.js +45 -0
  50. package/dist/authored-serial-ordinals.js.map +1 -0
  51. package/dist/authored-worker-step.d.ts +5 -1
  52. package/dist/authored-worker-step.d.ts.map +1 -1
  53. package/dist/authored-worker-step.js +19 -2
  54. package/dist/authored-worker-step.js.map +1 -1
  55. package/dist/budget-preflight.d.ts.map +1 -1
  56. package/dist/budget-preflight.js +11 -2
  57. package/dist/budget-preflight.js.map +1 -1
  58. package/dist/bundle-transport.d.ts +2 -0
  59. package/dist/bundle-transport.d.ts.map +1 -1
  60. package/dist/bundle-transport.js +4 -0
  61. package/dist/bundle-transport.js.map +1 -1
  62. package/dist/cached-flow-runtime.d.ts +3 -0
  63. package/dist/cached-flow-runtime.d.ts.map +1 -0
  64. package/dist/cached-flow-runtime.js +37 -0
  65. package/dist/cached-flow-runtime.js.map +1 -0
  66. package/dist/cli/check.d.ts.map +1 -1
  67. package/dist/cli/check.js +13 -1
  68. package/dist/cli/check.js.map +1 -1
  69. package/dist/cli/cloud-deploy.js +6 -5
  70. package/dist/cli/cloud-deploy.js.map +1 -1
  71. package/dist/cli/cloud-mirror-session.d.ts +8 -2
  72. package/dist/cli/cloud-mirror-session.d.ts.map +1 -1
  73. package/dist/cli/cloud-mirror-session.js +20 -27
  74. package/dist/cli/cloud-mirror-session.js.map +1 -1
  75. package/dist/cli/direct-run.d.ts.map +1 -1
  76. package/dist/cli/direct-run.js +2 -1
  77. package/dist/cli/direct-run.js.map +1 -1
  78. package/dist/cli/run.d.ts.map +1 -1
  79. package/dist/cli/run.js +19 -4
  80. package/dist/cli/run.js.map +1 -1
  81. package/dist/cli.d.ts.map +1 -1
  82. package/dist/cli.js +39 -18
  83. package/dist/cli.js.map +1 -1
  84. package/dist/cloud-deploy.d.ts +3 -3
  85. package/dist/cloud-deploy.d.ts.map +1 -1
  86. package/dist/cloud-deploy.js +15 -9
  87. package/dist/cloud-deploy.js.map +1 -1
  88. package/dist/cloud-flow-source.d.ts +13 -0
  89. package/dist/cloud-flow-source.d.ts.map +1 -0
  90. package/dist/cloud-flow-source.js +55 -0
  91. package/dist/cloud-flow-source.js.map +1 -0
  92. package/dist/cloud-mirror-transport.d.ts +2 -0
  93. package/dist/cloud-mirror-transport.d.ts.map +1 -1
  94. package/dist/cloud-mirror-transport.js +2 -0
  95. package/dist/cloud-mirror-transport.js.map +1 -1
  96. package/dist/cloud-mirror.d.ts.map +1 -1
  97. package/dist/cloud-mirror.js +10 -1
  98. package/dist/cloud-mirror.js.map +1 -1
  99. package/dist/communication/broker-preflight.d.ts +3 -0
  100. package/dist/communication/broker-preflight.d.ts.map +1 -0
  101. package/dist/communication/broker-preflight.js +22 -0
  102. package/dist/communication/broker-preflight.js.map +1 -0
  103. package/dist/communication/broker-spec.d.ts +20 -0
  104. package/dist/communication/broker-spec.d.ts.map +1 -0
  105. package/dist/communication/broker-spec.js +46 -0
  106. package/dist/communication/broker-spec.js.map +1 -0
  107. package/dist/communication/broker-worker.d.ts +17 -0
  108. package/dist/communication/broker-worker.d.ts.map +1 -0
  109. package/dist/communication/broker-worker.js +214 -0
  110. package/dist/communication/broker-worker.js.map +1 -0
  111. package/dist/communication/pty.d.ts +29 -0
  112. package/dist/communication/pty.d.ts.map +1 -0
  113. package/dist/communication/pty.js +40 -0
  114. package/dist/communication/pty.js.map +1 -0
  115. package/dist/communication/relay.d.ts +18 -0
  116. package/dist/communication/relay.d.ts.map +1 -1
  117. package/dist/communication/relay.js +4 -0
  118. package/dist/communication/relay.js.map +1 -1
  119. package/dist/communication/skills.d.ts +3 -0
  120. package/dist/communication/skills.d.ts.map +1 -0
  121. package/dist/communication/skills.js +17 -0
  122. package/dist/communication/skills.js.map +1 -0
  123. package/dist/communication/worker.d.ts.map +1 -1
  124. package/dist/communication/worker.js +9 -26
  125. package/dist/communication/worker.js.map +1 -1
  126. package/dist/failure-kinds.d.ts +1 -1
  127. package/dist/failure-kinds.d.ts.map +1 -1
  128. package/dist/failure-kinds.js +2 -0
  129. package/dist/failure-kinds.js.map +1 -1
  130. package/dist/plugin-manifest.js +1 -1
  131. package/dist/plugin-manifest.js.map +1 -1
  132. package/dist/preflight.d.ts.map +1 -1
  133. package/dist/preflight.js +2 -1
  134. package/dist/preflight.js.map +1 -1
  135. package/dist/worker.d.ts +1 -0
  136. package/dist/worker.d.ts.map +1 -1
  137. package/dist/worker.js +12 -0
  138. package/dist/worker.js.map +1 -1
  139. package/package.json +2 -2
  140. package/src/authored-broker.ts +73 -0
  141. package/src/authored-budget.ts +6 -2
  142. package/src/authored-flow-error.ts +6 -0
  143. package/src/authored-flow-executor.ts +115 -20
  144. package/src/authored-flow-loader.ts +43 -3
  145. package/src/authored-helper-effect.ts +2 -1
  146. package/src/authored-hooks.ts +4 -3
  147. package/src/authored-human.ts +35 -4
  148. package/src/authored-mcp.ts +7 -2
  149. package/src/authored-node-entry.ts +4 -1
  150. package/src/authored-node-runner.ts +1 -0
  151. package/src/authored-plugin-effect.ts +7 -2
  152. package/src/authored-preflight.ts +2 -1
  153. package/src/authored-root.ts +13 -3
  154. package/src/authored-serial-ordinals.ts +76 -0
  155. package/src/authored-worker-step.ts +17 -2
  156. package/src/budget-preflight.ts +9 -1
  157. package/src/bundle-transport.ts +4 -0
  158. package/src/cached-flow-runtime.ts +32 -0
  159. package/src/cli/check.ts +11 -1
  160. package/src/cli/cloud-deploy.ts +5 -5
  161. package/src/cli/cloud-mirror-session.ts +23 -29
  162. package/src/cli/direct-run.ts +2 -1
  163. package/src/cli/run.ts +18 -3
  164. package/src/cli.ts +31 -13
  165. package/src/cloud-deploy.ts +19 -14
  166. package/src/cloud-flow-source.ts +58 -0
  167. package/src/cloud-mirror-transport.ts +4 -0
  168. package/src/cloud-mirror.ts +9 -1
  169. package/src/communication/broker-preflight.ts +22 -0
  170. package/src/communication/broker-spec.ts +48 -0
  171. package/src/communication/broker-worker.ts +198 -0
  172. package/src/communication/pty.ts +47 -0
  173. package/src/communication/relay.ts +12 -1
  174. package/src/communication/skills.ts +16 -0
  175. package/src/communication/worker.ts +9 -26
  176. package/src/failure-kinds.ts +2 -0
  177. package/src/plugin-manifest.ts +1 -1
  178. package/src/preflight.ts +3 -1
  179. package/src/worker.ts +11 -0
@@ -0,0 +1,13 @@
1
+ import type { AgentOptions, AgentResult, NamedGate } from '@relayflows/surface';
2
+ import type { StepSpec } from './spec.js';
3
+ /** Broker options stay in a journaled instruction; the kernel only sees agent steps. */
4
+ export declare function authoredBroker(definition: {
5
+ name: string;
6
+ }, rootRunId: string | undefined, localStream: string | undefined, run: (step: StepSpec) => Promise<unknown>): {
7
+ agent(id: string, name: string, options: AgentOptions, verification?: NamedGate, secrets?: string[]): Promise<AgentResult>;
8
+ message(id: string, name: string, text: string, options?: {
9
+ timeout?: string | number;
10
+ }, verification?: NamedGate): Promise<AgentResult>;
11
+ release(id: string, name: string): Promise<void>;
12
+ };
13
+ //# sourceMappingURL=authored-broker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authored-broker.d.ts","sourceRoot":"","sources":["../src/authored-broker.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAM1C,wFAAwF;AACxF,wBAAgB,cAAc,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,EACxF,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC,OAAO,CAAC;cAoBxD,MAAM,QAAQ,MAAM,WAAW,YAAY,iBAAiB,SAAS,YACzE,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;gBAqBzB,MAAM,QAAQ,MAAM,QAAQ,MAAM,YAAY;QAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,iBAC5E,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC;gBAQ/B,MAAM,QAAQ,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;EAUzD"}
@@ -0,0 +1,75 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import { parseAgentStepTimeout } from './compile.js';
3
+ import { BROKER_TYPE, brokerAgentName, brokerOptionsError } from './communication/broker-spec.js';
4
+ import { AuthoredFlowExecutionError } from './authored-flow-error.js';
5
+ /** Broker options stay in a journaled instruction; the kernel only sees agent steps. */
6
+ export function authoredBroker(definition, rootRunId, localStream, run) {
7
+ const owner = rootRunId ?? randomUUID();
8
+ const declarations = new Map();
9
+ const invalid = (message) => { throw new AuthoredFlowExecutionError('agent_cli_unresolved', message); };
10
+ const execute = async (id, declaration, verification) => {
11
+ const { instruction, cli, model, secrets } = declaration;
12
+ const output = await run({ id, type: 'agent', instruction: JSON.stringify(instruction), cli, model,
13
+ timeoutMs: instruction.timeoutMs,
14
+ // Retained sessions must return to the same worker, including after a child completes.
15
+ surfaces: localStream === undefined ? undefined : { streams: [{ stream: localStream }] },
16
+ maxIterations: 1, transportRetries: 0,
17
+ ...(secrets?.length ? { secrets } : {}),
18
+ ...(verification === undefined ? {} : { verification }) });
19
+ if (!output || typeof output !== 'object' || !('completionReason' in output)) {
20
+ throw new AuthoredFlowExecutionError('journal_protocol_violation', 'Broker step produced an invalid result');
21
+ }
22
+ return output;
23
+ };
24
+ const lookup = (name) => declarations.get(name) ?? invalid(`No retained broker agent named ${name} in this flow`);
25
+ return {
26
+ async agent(id, name, options, verification, secrets) {
27
+ const problem = brokerOptionsError(options);
28
+ if (problem)
29
+ invalid(`f.agent options: ${problem}`);
30
+ if (options.keepAlive && localStream === undefined)
31
+ invalid('Retained broker agents require a local agent worker stream');
32
+ if (options.keepAlive && verification !== undefined)
33
+ invalid('Retained broker agents do not support gates; validate their result in a later step');
34
+ if (typeof options.task !== 'string' || !options.task.trim())
35
+ invalid('f.agent task must be nonempty');
36
+ if (options.workspace !== undefined || options.permissions !== undefined)
37
+ invalid('Broker agents use cwd; workspace and permissions are not supported');
38
+ if ((options.maxIterations ?? 1) !== 1 || (options.transportRetries ?? 0) !== 0
39
+ || options.recoveryMode !== undefined)
40
+ invalid('Broker sessions require maxIterations 1, transportRetries 0, and no recoveryMode');
41
+ if (typeof name !== 'string' || !name.trim())
42
+ invalid('Broker agent name must be nonempty');
43
+ const instruction = { type: BROKER_TYPE, operation: 'spawn', owner,
44
+ flow: definition.name, step: name, agentName: brokerAgentName(definition.name, name, owner, id),
45
+ task: options.task, cwd: options.cwd, skills: options.skills ?? [],
46
+ channel: options.channel ?? `flow-${owner}`, keepAlive: options.keepAlive ?? false,
47
+ timeoutMs: options.timeout === undefined ? 3_600_000 : parseAgentStepTimeout(options.timeout) };
48
+ const declaration = { instruction, cli: options.cli, model: options.model,
49
+ ...(secrets?.length ? { secrets } : {}) };
50
+ const result = await execute(id, declaration, verification);
51
+ if (instruction.keepAlive && result.completionReason === 'success')
52
+ declarations.set(instruction.agentName, declaration);
53
+ return result;
54
+ },
55
+ async message(id, name, text, options, verification) {
56
+ const declaration = lookup(name);
57
+ if (typeof text !== 'string' || !text.trim())
58
+ invalid('f.message text must be nonempty');
59
+ const result = await execute(id, { ...declaration, instruction: { ...declaration.instruction,
60
+ operation: 'message', task: text, timeoutMs: options?.timeout === undefined
61
+ ? declaration.instruction.timeoutMs : parseAgentStepTimeout(options.timeout) } }, verification);
62
+ return result;
63
+ },
64
+ async release(id, name) {
65
+ const declaration = lookup(name);
66
+ await run({ id, type: 'agent', cli: declaration.cli, model: declaration.model,
67
+ instruction: JSON.stringify({ ...declaration.instruction, operation: 'release' }),
68
+ surfaces: localStream === undefined ? undefined : { streams: [{ stream: localStream }] },
69
+ ...(declaration.secrets?.length ? { secrets: declaration.secrets } : {}),
70
+ maxIterations: 1, transportRetries: 0 });
71
+ // Keep the declaration so an explicit release remains idempotent.
72
+ },
73
+ };
74
+ }
75
+ //# sourceMappingURL=authored-broker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authored-broker.js","sourceRoot":"","sources":["../src/authored-broker.ts"],"names":[],"mappings":"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"}
@@ -32,7 +32,7 @@ export declare class AuthoredBudget {
32
32
  private tail;
33
33
  private charges;
34
34
  constructor(header: unknown);
35
- execute<T>(journal: JournalClient, spec: KernelRunSpec, consume: (outcome: RunOutcome) => Promise<T>, admissionKey?: string, isolatedStart?: boolean): Promise<T>;
35
+ execute<T>(journal: JournalClient, spec: KernelRunSpec, consume: (outcome: RunOutcome) => Promise<T>, admissionKey?: string, isolatedStart?: boolean, cleanup?: boolean): Promise<T>;
36
36
  }
37
37
  export {};
38
38
  //# sourceMappingURL=authored-budget.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"authored-budget.d.ts","sourceRoot":"","sources":["../src/authored-budget.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAoB,aAAa,EAAE,MAAM,WAAW,CAAC;AAEnF;;;;;;;GAOG;AACH,UAAU,MAAM;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,KAAK,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAqCjC;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAyBzG;AAED,kFAAkF;AAClF,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAuC;IACnD,OAAO,CAAC,OAAO,CAAgB;gBAEnB,MAAM,EAAE,OAAO;IASrB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAC1D,OAAO,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,EACnE,aAAa,UAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;CAyDrC"}
1
+ {"version":3,"file":"authored-budget.d.ts","sourceRoot":"","sources":["../src/authored-budget.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAoB,aAAa,EAAE,MAAM,WAAW,CAAC;AAEnF;;;;;;;GAOG;AACH,UAAU,MAAM;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,KAAK,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAqCjC;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,aAAa,GAAG,MAAM,CAyBzG;AAED,kFAAkF;AAClF,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA+B;IACrD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAuC;IACnD,OAAO,CAAC,OAAO,CAAgB;gBAEnB,MAAM,EAAE,OAAO;IASrB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAC1D,OAAO,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,EACnE,aAAa,UAAQ,EAAE,OAAO,UAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;CA6DtD"}
@@ -85,7 +85,7 @@ export class AuthoredBudget {
85
85
  throw error;
86
86
  }
87
87
  }
88
- async execute(journal, spec, consume, admissionKey, isolatedStart = false) {
88
+ async execute(journal, spec, consume, admissionKey, isolatedStart = false, cleanup = false) {
89
89
  if (this.limit === undefined)
90
90
  return consume(await journal.runStart(spec, undefined, admissionKey, false, isolatedStart));
91
91
  const previous = this.tail;
@@ -93,6 +93,11 @@ export class AuthoredBudget {
93
93
  this.tail = new Promise(resolve => { release = resolve; });
94
94
  await previous;
95
95
  try {
96
+ // A broker release stays journaled after a failed gate or an exhausted
97
+ // header. It carries no budget, so the kernel cannot refuse it, and it
98
+ // does not latch another failure over the one that required cleanup.
99
+ if (cleanup)
100
+ return await consume(await journal.runStart(spec, undefined, admissionKey, false, isolatedStart));
96
101
  if (this.failed)
97
102
  throw new AuthoredFlowExecutionError('step_failed', 'A prior budgeted step did not finish successfully.');
98
103
  // Window selection follows journal timestamps, never the SDK host clock.
@@ -146,7 +151,8 @@ export class AuthoredBudget {
146
151
  }
147
152
  }
148
153
  catch (error) {
149
- this.failed = true;
154
+ if (!cleanup)
155
+ this.failed = true;
150
156
  throw error;
151
157
  }
152
158
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"authored-budget.js","sourceRoot":"","sources":["../src/authored-budget.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authored-budget.js","sourceRoot":"","sources":["../src/authored-budget.ts"],"names":[],"mappings":"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"}
@@ -26,6 +26,12 @@ export type AuthoredFlowExecutionErrorCode = 'helper_writeback_pending' | 'helpe
26
26
  | 'human_answer_invalid'
27
27
  /** `f.human`'s `to` is not one of the documented recipient forms (human-to.ts). */
28
28
  | 'human_to_invalid' | 'unsupported_header' | 'unsettled_derived_work' | 'unsupported_promise_lifecycle'
29
+ /**
30
+ * A resumed serial body reached a journaled step id with a different call:
31
+ * concurrent branches resolved in another order than the journaled run.
32
+ * Refused before the step is admitted (authored-serial-ordinals.ts).
33
+ */
34
+ | 'serial_replay_order_mismatch'
29
35
  /** A pinned parallel root cannot dispatch safely in this process environment. */
30
36
  | 'unsafe_parallel_runtime' | 'unsupported_workspace_permission' | 'unbounded_subscription' | 'activity_closed' | 'subscription_suspended' | 'unawaited_step' | 'unsupported_verb';
31
37
  export declare class AuthoredFlowExecutionError extends Error {
@@ -1 +1 @@
1
- {"version":3,"file":"authored-flow-error.d.ts","sourceRoot":"","sources":["../src/authored-flow-error.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authored-flow-error.d.ts","sourceRoot":"","sources":["../src/authored-flow-error.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"authored-flow-error.js","sourceRoot":"","sources":["../src/authored-flow-error.ts"],"names":[],"mappings":"AAqEA,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAgBxC;IAEA;IAMA;IASA;IACA;IAjCX,qFAAqF;IACrF,SAAS,CAAU;IACnB;;;;;;;;;;OAUG;IACH,SAAS,CAAa;IACtB,YACW,IAAoC,EAC7C,OAAe,EACN,gBAAyE;IAClF;;;;OAIG;IACM,KAAc;IACvB;;;;;;;OAOG;IACM,OAA2B,EAC3B,UAAmC;QAE5C,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QApBpB,SAAI,GAAJ,IAAI,CAAgC;QAEpC,qBAAgB,GAAhB,gBAAgB,CAAyD;QAMzE,UAAK,GAAL,KAAK,CAAS;QASd,YAAO,GAAP,OAAO,CAAoB;QAC3B,eAAU,GAAV,UAAU,CAAyB;QAG5C,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAoCD;;;;;GAKG;AACH,MAAM,OAAO,mBAAoB,SAAQ,0BAA0B;IAC5C;IAArB,YAAqB,IAAuB,EAAE,SAAiB;QAC7D,KAAK,CACH,cAAc,EACd,uBAAuB,IAAI,CAAC,EAAE,cAAc,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,EAC5F,SAAS,EACT,SAAS,CACV,CAAC;QANiB,SAAI,GAAJ,IAAI,CAAmB;QAO1C,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF"}
1
+ {"version":3,"file":"authored-flow-error.js","sourceRoot":"","sources":["../src/authored-flow-error.ts"],"names":[],"mappings":"AA2EA,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAgBxC;IAEA;IAMA;IASA;IACA;IAjCX,qFAAqF;IACrF,SAAS,CAAU;IACnB;;;;;;;;;;OAUG;IACH,SAAS,CAAa;IACtB,YACW,IAAoC,EAC7C,OAAe,EACN,gBAAyE;IAClF;;;;OAIG;IACM,KAAc;IACvB;;;;;;;OAOG;IACM,OAA2B,EAC3B,UAAmC;QAE5C,KAAK,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QApBpB,SAAI,GAAJ,IAAI,CAAgC;QAEpC,qBAAgB,GAAhB,gBAAgB,CAAyD;QAMzE,UAAK,GAAL,KAAK,CAAS;QASd,YAAO,GAAP,OAAO,CAAoB;QAC3B,eAAU,GAAV,UAAU,CAAyB;QAG5C,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF;AAoCD;;;;;GAKG;AACH,MAAM,OAAO,mBAAoB,SAAQ,0BAA0B;IAC5C;IAArB,YAAqB,IAAuB,EAAE,SAAiB;QAC7D,KAAK,CACH,cAAc,EACd,uBAAuB,IAAI,CAAC,EAAE,cAAc,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,EAC5F,SAAS,EACT,SAAS,CACV,CAAC;QANiB,SAAI,GAAJ,IAAI,CAAmB;QAO1C,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF"}
@@ -106,6 +106,17 @@ export interface ExecuteAuthoredFlowOptions {
106
106
  readonly flowGraph?: readonly LoadedAuthoredFlowNode[];
107
107
  /** Internal namespace for descendant step/admission identities. */
108
108
  readonly stepPrefix?: string;
109
+ /**
110
+ * The step ids the root's index held when this attempt began, read by the
111
+ * root driver on a re-dispatch and shared with dispatched children, so a
112
+ * serial body is checked against the journal it is replaying
113
+ * (authored-serial-ordinals.ts). Absent on a first attempt: nothing to replay.
114
+ */
115
+ readonly journaledSteps?: readonly string[];
116
+ /** Root-owned replay refusal, shared with dispatched children so one refusal stops the whole tree. */
117
+ readonly replayLatch?: {
118
+ violation?: AuthoredFlowExecutionError;
119
+ };
109
120
  /** Current child depth. Root is zero; dispatch is capped at three. */
110
121
  readonly dispatchDepth?: number;
111
122
  /** Parent predecessors inherited by the first operation in a child body. */
@@ -1 +1 @@
1
- {"version":3,"file":"authored-flow-executor.d.ts","sourceRoot":"","sources":["../src/authored-flow-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authored-flow-executor.d.ts","sourceRoot":"","sources":["../src/authored-flow-executor.ts"],"names":[],"mappings":"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"}
@@ -21,12 +21,13 @@ import { observeStep } from './progress.js';
21
21
  import { parseStepTimeout } from './compile.js';
22
22
  import { getAuthoredFlowDefinition } from './authored-flow.js';
23
23
  import { AuthoredFlowExecutionError, AuthoredHumanParked, } from './authored-flow-error.js';
24
- import { readHumanAnswer } from './authored-human.js';
24
+ import { readHumanWait } from './authored-human.js';
25
25
  import { parseHumanTo } from './human-to.js';
26
26
  import { AuthoredFlowOperation, stopAuthoredOperations, verifyAuthoredOperations, } from './authored-flow-operation.js';
27
27
  import { AuthoredFlowLifecycle, parallelPromiseIntrinsicsIntact } from './authored-flow-lifecycle.js';
28
28
  import { AuthoredActivities } from './authored-activity.js';
29
29
  import { displayLabel } from './authored-step-index.js';
30
+ import { assertSerialOrdinal, serialOrdinals, serialReplayOrderMismatch } from './authored-serial-ordinals.js';
30
31
  import { PluginError } from './plugin-manifest.js';
31
32
  import { createHookEvaluator } from './authored-hooks.js';
32
33
  import { extensionHandlerForHostedDispatch, probeFlowExtension, } from './flow-extension-loader.js';
@@ -131,12 +132,48 @@ export async function executeAuthoredFlow(handle, journal, input, options = {})
131
132
  if (options.executionMode === 'parallel')
132
133
  rejectParallel(`parallel f.run body attempted ${kind} before admission`);
133
134
  };
135
+ // Serial bodies only: parallel ids come from the causal frontier, not one
136
+ // shared counter. A refusal is latched, so an author `catch` around the
137
+ // call cannot let the body go on to admit anything else.
138
+ const journaledSteps = options.executionMode === 'parallel' || options.rootRunId === undefined
139
+ ? undefined : options.journaledSteps;
140
+ const ordinals = journaledSteps === undefined
141
+ ? undefined : serialOrdinals(journaledSteps, options.stepPrefix ?? '');
142
+ const replayLatch = options.replayLatch ?? {};
143
+ const refuseReplay = (error) => {
144
+ replayLatch.violation ??= error;
145
+ throw replayLatch.violation;
146
+ };
147
+ const assertNoReplayViolation = () => {
148
+ if (replayLatch.violation !== undefined)
149
+ throw replayLatch.violation;
150
+ };
151
+ // Every operation re-checks at start: a step declared before the refusal
152
+ // and awaited after it is refused too, not admitted.
153
+ const assertStartAllowed = (verb) => {
154
+ assertNoReplayViolation();
155
+ assertOperationAllowed(verb, definition.name, requestedCompletion);
156
+ };
157
+ const claimedOrdinals = new Set();
158
+ const serialId = (kind, sequence) => {
159
+ assertNoReplayViolation();
160
+ claimedOrdinals.add(sequence);
161
+ if (ordinals !== undefined) {
162
+ try {
163
+ assertSerialOrdinal(ordinals, kind, sequence);
164
+ }
165
+ catch (error) {
166
+ refuseReplay(error);
167
+ }
168
+ }
169
+ return qualify(`${kind}-${sequence}`);
170
+ };
134
171
  const nextId = (kind) => {
135
172
  if (parallelViolation !== undefined)
136
173
  throw parallelViolation;
137
- const sequence = nextStep++;
138
174
  if (options.executionMode !== 'parallel')
139
- return qualify(`${kind}-${sequence}`);
175
+ return serialId(kind, nextStep++);
176
+ const sequence = nextStep++;
140
177
  if (kind !== 'run')
141
178
  rejectParallel(`parallel f.run body attempted ${kind} before admission`);
142
179
  if (!lifecycle.combinatorsObserved())
@@ -276,7 +313,7 @@ export async function executeAuthoredFlow(handle, journal, input, options = {})
276
313
  // caller's `.gate(config)` at spec-build time. AuthoredFlowOperation
277
314
  // begins after construction returns, so `llmOp` is defined by then.
278
315
  let llmOp;
279
- llmOp = new AuthoredFlowOperation(id, 'llm', () => assertOperationAllowed('llm', definition.name, requestedCompletion), () => observeStep(id, 'llm', () => {
316
+ llmOp = new AuthoredFlowOperation(id, 'llm', () => assertStartAllowed('llm'), () => observeStep(id, 'llm', () => {
280
317
  if (typeof prompt === 'string') {
281
318
  if (values.length !== 1 || values[0] === undefined) {
282
319
  throw new AuthoredFlowExecutionError('llm_cli_unresolved', 'f.llm(prompt, options) requires an output JSON Schema.');
@@ -303,14 +340,14 @@ export async function executeAuthoredFlow(handle, journal, input, options = {})
303
340
  const id = nextId('run');
304
341
  if (policy === 'record') {
305
342
  let recordOp;
306
- recordOp = new AuthoredFlowOperation(id, 'run', () => assertOperationAllowed('run', definition.name, requestedCompletion), () => observeStep(id, 'deterministic', () => lowerDeterministic.recording(id, command, leaseMs, recordOp.namedGate, secrets), options.onProgress), lifecycle,
343
+ recordOp = new AuthoredFlowOperation(id, 'run', () => assertStartAllowed('run'), () => observeStep(id, 'deterministic', () => lowerDeterministic.recording(id, command, leaseMs, recordOp.namedGate, secrets), options.onProgress), lifecycle,
307
344
  // No label: a command is not a display name. It carries literal
308
345
  // tokens and URLs, and no prefix of it is safe to show (displayLabel).
309
346
  {});
310
347
  return trackStep(authoredSteps, recordOp);
311
348
  }
312
349
  let runOp;
313
- runOp = new AuthoredFlowOperation(id, 'run', () => assertOperationAllowed('run', definition.name, requestedCompletion), () => observeStep(id, 'deterministic', () => lowerDeterministic(id, command, false, leaseMs, runOp.namedGate, secrets), options.onProgress), lifecycle,
350
+ runOp = new AuthoredFlowOperation(id, 'run', () => assertStartAllowed('run'), () => observeStep(id, 'deterministic', () => lowerDeterministic(id, command, false, leaseMs, runOp.namedGate, secrets), options.onProgress), lifecycle,
314
351
  // No label: a command is not a display name. It carries literal
315
352
  // tokens and URLs, and no prefix of it is safe to show (displayLabel).
316
353
  {});
@@ -322,8 +359,8 @@ export async function executeAuthoredFlow(handle, journal, input, options = {})
322
359
  assertOperationAllowed(`slack.${call.verb}`, definition.name, requestedCompletion);
323
360
  assertHelperAllowed(call.provider);
324
361
  const snapshot = snapshotJsonValue(call, 'f.slack call');
325
- const id = qualify(`slack-${slackRun}-${nextStep++}`);
326
- return trackStep(authoredSteps, new AuthoredFlowOperation(id, `slack.${call.verb}`, () => assertOperationAllowed(`slack.${call.verb}`, definition.name, requestedCompletion), async () => {
362
+ const id = serialId(`slack-${slackRun}`, nextStep++);
363
+ return trackStep(authoredSteps, new AuthoredFlowOperation(id, `slack.${call.verb}`, () => assertStartAllowed(`slack.${call.verb}`), async () => {
327
364
  const receipt = await runHelperEffect(journal, definition.name, id, snapshot, options.dataDir ?? dirname(journal.socketPath), journalSteps, options.rootRunId);
328
365
  return (call.verb === 'react' ? undefined : receipt);
329
366
  }, lifecycle));
@@ -335,7 +372,21 @@ export async function executeAuthoredFlow(handle, journal, input, options = {})
335
372
  declared: definition.header?.hooks ?? [],
336
373
  extensions: options.extensions ?? [],
337
374
  peekStep: () => nextStep,
338
- restoreStep: (step) => { nextStep = step; },
375
+ restoreStep: (step, hook) => {
376
+ // A replayed verdict jumps the counter to the watermark it recorded,
377
+ // which also counts ordinals other branches took while the hook ran.
378
+ // Skipping one of those would hand that branch's completed step a fresh
379
+ // ordinal and run it again, so a jump over a journaled ordinal this
380
+ // attempt has not claimed is refused. (It also refuses skipping the
381
+ // hook's own steps; resuming past those already fails at the kernel.)
382
+ for (let ordinal = nextStep; ordinals !== undefined && ordinal < step; ordinal++) {
383
+ const journaled = ordinals.get(ordinal)?.[0];
384
+ if (journaled !== undefined && !claimedOrdinals.has(ordinal)) {
385
+ refuseReplay(serialReplayOrderMismatch(`hook step "${hook}" would skip ordinal ${ordinal}, journaled as step "${journaled.step}"`));
386
+ }
387
+ }
388
+ nextStep = step;
389
+ },
339
390
  ...(options.signal === undefined ? {} : { signal: options.signal }),
340
391
  });
341
392
  const context = {
@@ -345,8 +396,8 @@ export async function executeAuthoredFlow(handle, journal, input, options = {})
345
396
  assertOperationAllowed(verb, definition.name, requestedCompletion);
346
397
  assertHelperAllowed(call.provider);
347
398
  const snapshot = snapshotJsonValue(call, `f.${verb} call`);
348
- const id = qualify(`${call.provider}-${slackRun}-${nextStep++}`);
349
- return trackStep(authoredSteps, new AuthoredFlowOperation(id, verb, () => assertOperationAllowed(verb, definition.name, requestedCompletion), async () => await runHelperEffect(journal, definition.name, id, snapshot, options.dataDir ?? dirname(journal.socketPath), journalSteps, options.rootRunId), lifecycle));
399
+ const id = serialId(`${call.provider}-${slackRun}`, nextStep++);
400
+ return trackStep(authoredSteps, new AuthoredFlowOperation(id, verb, () => assertStartAllowed(verb), async () => await runHelperEffect(journal, definition.name, id, snapshot, options.dataDir ?? dirname(journal.socketPath), journalSteps, options.rootRunId), lifecycle));
350
401
  }),
351
402
  slack: {
352
403
  post: (channel, text, opts) => slackOperation({ type: 'effect', provider: 'slack', verb: 'post', params: { channel, text, ...(opts === undefined ? {} : { opts }) } }),
@@ -357,9 +408,9 @@ export async function executeAuthoredFlow(handle, journal, input, options = {})
357
408
  mcp: buildMcpProxy(checkedMcp.inventory, (server, tool, args, known) => {
358
409
  assertOperationAllowed('mcp', definition.name, requestedCompletion);
359
410
  const id = nextId('mcp');
360
- return trackStep(authoredSteps, new AuthoredFlowOperation(id, 'mcp', () => assertOperationAllowed('mcp', definition.name, requestedCompletion), () => runMcpEffect(journal, definition.name, id, server, tool, args, known, checkedMcp.servers[server], journalSteps, options.rootRunId), lifecycle));
411
+ return trackStep(authoredSteps, new AuthoredFlowOperation(id, 'mcp', () => assertStartAllowed('mcp'), () => runMcpEffect(journal, definition.name, id, server, tool, args, known, checkedMcp.servers[server], journalSteps, options.rootRunId), lifecycle));
361
412
  }),
362
- memory: authoredMemory(scriptMemoryScope(flowPath, definition.name), () => { assertParallelRunOnly('memory'); assertOperationAllowed('memory', definition.name, requestedCompletion); }, definition.header.memory?.script !== false, memoryWrites, options.rootRunId === undefined ? undefined : journalLearnLedger(journal, options.rootRunId)),
413
+ memory: authoredMemory(scriptMemoryScope(flowPath, definition.name), () => { assertParallelRunOnly('memory'); assertNoReplayViolation(); assertOperationAllowed('memory', definition.name, requestedCompletion); }, definition.header.memory?.script !== false, memoryWrites, options.rootRunId === undefined ? undefined : journalLearnLedger(journal, options.rootRunId)),
363
414
  run: runOperation,
364
415
  llm: llmOperation,
365
416
  agent(name, options) {
@@ -368,11 +419,30 @@ export async function executeAuthoredFlow(handle, journal, input, options = {})
368
419
  // identifies nothing to the kernel; it is the step's label in the DAG.
369
420
  const id = nextId('agent');
370
421
  let agentOp;
371
- agentOp = new AuthoredFlowOperation(id, 'agent', () => assertOperationAllowed('agent', definition.name, requestedCompletion), () => observeStep(id, 'agent', () => worker.agent(id, options, agentOp.namedGate), onProgress), lifecycle, displayLabel(typeof name === 'string' ? name : undefined));
422
+ agentOp = new AuthoredFlowOperation(id, 'agent', () => assertStartAllowed('agent'), () => observeStep(id, 'agent', () => {
423
+ if (options.transport === 'broker' && options.keepAlive
424
+ && (agentOp.namedGate !== undefined || agentOp.predicateGate !== undefined)) {
425
+ throw new AuthoredFlowExecutionError('agent_cli_unresolved', 'Retained broker agents do not support gates; validate their result in a later step');
426
+ }
427
+ return worker.agent(id, options, agentOp.namedGate, name);
428
+ }, onProgress), lifecycle, displayLabel(typeof name === 'string' ? name : undefined));
372
429
  return trackStep(authoredSteps, agentOp);
373
430
  },
431
+ message(agentName, text, messageOptions) {
432
+ assertOperationAllowed('message', definition.name, requestedCompletion);
433
+ const id = nextId('agent');
434
+ let messageOp;
435
+ messageOp = new AuthoredFlowOperation(id, 'message', () => assertStartAllowed('message'), () => observeStep(id, 'agent', () => worker.message(id, agentName, text, messageOptions, messageOp.namedGate), onProgress), lifecycle);
436
+ return trackStep(authoredSteps, messageOp);
437
+ },
438
+ release(agentName) {
439
+ assertOperationAllowed('release', definition.name, requestedCompletion);
440
+ const id = nextId('agent');
441
+ return trackStep(authoredSteps, new AuthoredFlowOperation(id, 'release', () => assertStartAllowed('release'), () => observeStep(id, 'agent', () => worker.release(id, agentName), onProgress), lifecycle));
442
+ },
374
443
  on(source, activityOptions) {
375
444
  assertParallelRunOnly('on');
445
+ assertNoReplayViolation();
376
446
  assertOperationAllowed('on', definition.name, requestedCompletion);
377
447
  // Activity ids are root-scoped (`activity-N`); a child's own counter would collide.
378
448
  if ((options.dispatchDepth ?? 0) > 0) {
@@ -419,12 +489,19 @@ export async function executeAuthoredFlow(handle, journal, input, options = {})
419
489
  // `.gate(config)` at spec-build time, so a named gate on the answer is
420
490
  // lowered into the `human-N` step's `verification` like any other step's.
421
491
  let humanOp;
422
- humanOp = new AuthoredFlowOperation(id, 'human', () => assertOperationAllowed('human', definition.name, requestedCompletion), () => observeStep(id, 'deterministic', async () => {
492
+ humanOp = new AuthoredFlowOperation(id, 'human', () => assertStartAllowed('human'), () => observeStep(id, 'deterministic', async () => {
423
493
  const rootRunId = options.rootRunId;
424
494
  if (rootRunId === undefined) {
425
495
  throw new AuthoredFlowExecutionError('unsupported_verb', `f.human needs a durable root to park in; "${id}" has no run to wait on. Run the flow with flows run.`);
426
496
  }
427
- const recorded = await readHumanAnswer(journal, rootRunId, id);
497
+ const { answer: recorded, asked } = await readHumanWait(journal, rootRunId, id);
498
+ // The answer is keyed by the wait id alone, and a reordered resume
499
+ // can hand that id to a different f.human: never apply an answer
500
+ // to a question nobody was asked.
501
+ if (asked.some(wait => wait.question !== question || wait.to !== to)) {
502
+ refuseReplay(serialReplayOrderMismatch(`ordinal ${id.slice(id.lastIndexOf('-') + 1)} is journaled as human step "${id}" asking a `
503
+ + 'different question or recipient, but this resume reached it with another f.human'));
504
+ }
428
505
  if (recorded === undefined)
429
506
  throw new AuthoredHumanParked({ waitId: id, question, to }, rootRunId);
430
507
  const record = { human: id, to, answer: recorded.answer,
@@ -448,13 +525,15 @@ export async function executeAuthoredFlow(handle, journal, input, options = {})
448
525
  const inputSnapshot = snapshotJsonValue(dispatchInput, `f.dispatch(${JSON.stringify(flowName)}) input`);
449
526
  const id = nextId('dispatch');
450
527
  let dispatchOp;
451
- dispatchOp = new AuthoredFlowOperation(id, 'dispatch', () => assertOperationAllowed('dispatch', definition.name, requestedCompletion), async () => {
528
+ dispatchOp = new AuthoredFlowOperation(id, 'dispatch', () => assertStartAllowed('dispatch'), async () => {
452
529
  const inheritedAfter = stepEdges(id)?.after ?? [];
453
530
  const currentHelperAuthority = helperAuthority(definition);
454
531
  const allowedHelperProviders = options.allowedHelperProviders === undefined
455
532
  ? currentHelperAuthority
456
533
  : new Set([...currentHelperAuthority].filter(provider => options.allowedHelperProviders.has(provider)));
457
534
  const childResult = await executeAuthoredFlow(child.handle, journal, inputSnapshot, {
535
+ ...(journaledSteps === undefined ? {} : { journaledSteps }),
536
+ replayLatch,
458
537
  getDefinition: child.getDefinition,
459
538
  dataDir: options.dataDir,
460
539
  flowPath: child.path,
@@ -500,7 +579,7 @@ export async function executeAuthoredFlow(handle, journal, input, options = {})
500
579
  assertOperationAllowed('hook', definition.name, requestedCompletion);
501
580
  const id = nextId('hook');
502
581
  const snapshot = snapshotJsonValue(input, 'f.hook input');
503
- return trackStep(authoredSteps, new AuthoredFlowOperation(id, 'hook', () => assertOperationAllowed('hook', definition.name, requestedCompletion), async () => {
582
+ return trackStep(authoredSteps, new AuthoredFlowOperation(id, 'hook', () => assertStartAllowed('hook'), async () => {
504
583
  const verdict = await evaluateHook(id, name, snapshot, context);
505
584
  const record = { hook: name, step: id, verdict: verdict ? 'pass' : 'fail' };
506
585
  const literal = `'${JSON.stringify(record).replaceAll("'", "'\\''")}'`;
@@ -545,7 +624,7 @@ export async function executeAuthoredFlow(handle, journal, input, options = {})
545
624
  const label = `${verb.namespace}.${verb.method}`;
546
625
  assertOperationAllowed(label, definition.name, requestedCompletion);
547
626
  const id = nextId('plugin');
548
- return trackStep(authoredSteps, new AuthoredFlowOperation(id, label, () => assertOperationAllowed(label, definition.name, requestedCompletion), () => runPluginEffect(journal, definition.name, id, plugin, verb, args, journalSteps, budget, options.rootRunId), lifecycle));
627
+ return trackStep(authoredSteps, new AuthoredFlowOperation(id, label, () => assertStartAllowed(label), () => runPluginEffect(journal, definition.name, id, plugin, verb, args, journalSteps, budget, options.rootRunId), lifecycle));
549
628
  }));
550
629
  let bodyFailed = false;
551
630
  let bodyFailure;
@@ -574,6 +653,10 @@ export async function executeAuthoredFlow(handle, journal, input, options = {})
574
653
  bodyFailed = true;
575
654
  bodyFailure = parallelViolation;
576
655
  }
656
+ if (replayLatch.violation !== undefined) {
657
+ bodyFailed = true;
658
+ bodyFailure = replayLatch.violation;
659
+ }
577
660
  if (bodyFailed) {
578
661
  // Refuse queued work immediately. A slow memory commit must not leave an
579
662
  // admission slot open after the body has already failed.
@@ -667,7 +750,8 @@ export async function executeAuthoredFlow(handle, journal, input, options = {})
667
750
  // explanation the root had already journaled to `run_admission_conflict`.
668
751
  // With no detail there is no environment in the command and nothing to
669
752
  // commit, so that path is untouched.
670
- const terminalId = qualify(`complete-${nextStep}`);
753
+ const terminalId = options.executionMode === 'parallel'
754
+ ? qualify(`complete-${nextStep}`) : serialId('complete', nextStep);
671
755
  const verdict = await commitAuthoredVerdict(journal, options.rootRunId, terminalId, {
672
756
  reason: requestedCompletion,
673
757
  ...(requestedDetail === undefined ? {} : { detail: requestedDetail }),