agentfootprint 2.14.4 → 3.0.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.
- package/dist/cache/CacheDecisionSubflow.js +3 -1
- package/dist/cache/CacheDecisionSubflow.js.map +1 -1
- package/dist/conventions.js +3 -2
- package/dist/conventions.js.map +1 -1
- package/dist/core/Agent.js +69 -23
- package/dist/core/Agent.js.map +1 -1
- package/dist/core/LLMCall.js +44 -5
- package/dist/core/LLMCall.js.map +1 -1
- package/dist/core/RunnerBase.js +173 -0
- package/dist/core/RunnerBase.js.map +1 -1
- package/dist/core/agent/buildAgentChart.js +12 -2
- package/dist/core/agent/buildAgentChart.js.map +1 -1
- package/dist/core/runner.js +4 -3
- package/dist/core/runner.js.map +1 -1
- package/dist/core/slots/buildMessagesSlot.js +1 -1
- package/dist/core/slots/buildMessagesSlot.js.map +1 -1
- package/dist/core/slots/buildSystemPromptSlot.js +1 -1
- package/dist/core/slots/buildSystemPromptSlot.js.map +1 -1
- package/dist/core/slots/buildThinkingSubflow.js +1 -1
- package/dist/core/slots/buildThinkingSubflow.js.map +1 -1
- package/dist/core/slots/buildToolsSlot.js +3 -1
- package/dist/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/core/translator.js +32 -0
- package/dist/core/translator.js.map +1 -0
- package/dist/core-flow/Conditional.js +73 -10
- package/dist/core-flow/Conditional.js.map +1 -1
- package/dist/core-flow/Loop.js +60 -16
- package/dist/core-flow/Loop.js.map +1 -1
- package/dist/core-flow/Parallel.js +241 -92
- package/dist/core-flow/Parallel.js.map +1 -1
- package/dist/core-flow/Sequence.js +51 -8
- package/dist/core-flow/Sequence.js.map +1 -1
- package/dist/esm/cache/CacheDecisionSubflow.js +3 -1
- package/dist/esm/cache/CacheDecisionSubflow.js.map +1 -1
- package/dist/esm/conventions.js +3 -2
- package/dist/esm/conventions.js.map +1 -1
- package/dist/esm/core/Agent.js +69 -23
- package/dist/esm/core/Agent.js.map +1 -1
- package/dist/esm/core/LLMCall.js +44 -5
- package/dist/esm/core/LLMCall.js.map +1 -1
- package/dist/esm/core/RunnerBase.js +173 -0
- package/dist/esm/core/RunnerBase.js.map +1 -1
- package/dist/esm/core/agent/buildAgentChart.js +12 -2
- package/dist/esm/core/agent/buildAgentChart.js.map +1 -1
- package/dist/esm/core/runner.js +4 -3
- package/dist/esm/core/runner.js.map +1 -1
- package/dist/esm/core/slots/buildMessagesSlot.js +1 -1
- package/dist/esm/core/slots/buildMessagesSlot.js.map +1 -1
- package/dist/esm/core/slots/buildSystemPromptSlot.js +1 -1
- package/dist/esm/core/slots/buildSystemPromptSlot.js.map +1 -1
- package/dist/esm/core/slots/buildThinkingSubflow.js +1 -1
- package/dist/esm/core/slots/buildThinkingSubflow.js.map +1 -1
- package/dist/esm/core/slots/buildToolsSlot.js +3 -1
- package/dist/esm/core/slots/buildToolsSlot.js.map +1 -1
- package/dist/esm/core/translator.js +31 -0
- package/dist/esm/core/translator.js.map +1 -0
- package/dist/esm/core-flow/Conditional.js +73 -10
- package/dist/esm/core-flow/Conditional.js.map +1 -1
- package/dist/esm/core-flow/Loop.js +60 -16
- package/dist/esm/core-flow/Loop.js.map +1 -1
- package/dist/esm/core-flow/Parallel.js +242 -93
- package/dist/esm/core-flow/Parallel.js.map +1 -1
- package/dist/esm/core-flow/Sequence.js +51 -8
- package/dist/esm/core-flow/Sequence.js.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/injection-engine/buildInjectionEngineSubflow.js +1 -1
- package/dist/esm/lib/injection-engine/buildInjectionEngineSubflow.js.map +1 -1
- package/dist/esm/memory/causal/snapshotPipeline.js +6 -2
- package/dist/esm/memory/causal/snapshotPipeline.js.map +1 -1
- package/dist/esm/memory/pipeline/auto.js +2 -2
- package/dist/esm/memory/pipeline/auto.js.map +1 -1
- package/dist/esm/memory/pipeline/default.js +4 -2
- package/dist/esm/memory/pipeline/default.js.map +1 -1
- package/dist/esm/memory/pipeline/ephemeral.js +3 -1
- package/dist/esm/memory/pipeline/ephemeral.js.map +1 -1
- package/dist/esm/memory/pipeline/fact.js +4 -2
- package/dist/esm/memory/pipeline/fact.js.map +1 -1
- package/dist/esm/memory/pipeline/narrative.js +4 -2
- package/dist/esm/memory/pipeline/narrative.js.map +1 -1
- package/dist/esm/memory/pipeline/semantic.js +2 -2
- package/dist/esm/memory/pipeline/semantic.js.map +1 -1
- package/dist/esm/observe.js +1 -1
- package/dist/esm/observe.js.map +1 -1
- package/dist/esm/patterns/MapReduce.js +5 -5
- package/dist/esm/patterns/MapReduce.js.map +1 -1
- package/dist/esm/patterns/Swarm.js +1 -1
- package/dist/esm/patterns/Swarm.js.map +1 -1
- package/dist/esm/recorders/observability/BoundaryRecorder.js +315 -36
- package/dist/esm/recorders/observability/BoundaryRecorder.js.map +1 -1
- package/dist/esm/recorders/observability/FlowchartRecorder.js +10 -0
- package/dist/esm/recorders/observability/FlowchartRecorder.js.map +1 -1
- package/dist/esm/recorders/observability/LiveStateRecorder.js +112 -21
- package/dist/esm/recorders/observability/LiveStateRecorder.js.map +1 -1
- package/dist/esm/recorders/observability/RunStepRecorder.js +652 -0
- package/dist/esm/recorders/observability/RunStepRecorder.js.map +1 -0
- package/dist/esm/recorders/observability/commentary/commentaryTemplates.js +3 -4
- package/dist/esm/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
- package/dist/esm/recorders/observability/internal/ActorArrowClassifier.js +34 -0
- package/dist/esm/recorders/observability/internal/ActorArrowClassifier.js.map +1 -0
- package/dist/esm/recorders/observability/internal/CandidateAnswerBuffer.js +32 -0
- package/dist/esm/recorders/observability/internal/CandidateAnswerBuffer.js.map +1 -0
- package/dist/esm/recorders/observability/internal/ForkTracker.js +84 -0
- package/dist/esm/recorders/observability/internal/ForkTracker.js.map +1 -0
- package/dist/esm/recorders/observability/internal/RootInferrer.js +114 -0
- package/dist/esm/recorders/observability/internal/RootInferrer.js.map +1 -0
- package/dist/esm/recorders/observability/internal/SequenceSiblingTracker.js +31 -0
- package/dist/esm/recorders/observability/internal/SequenceSiblingTracker.js.map +1 -0
- package/dist/esm/recorders/observability/observeRunId.js +21 -0
- package/dist/esm/recorders/observability/observeRunId.js.map +1 -0
- package/dist/esm/reliability/buildReliabilityGateChart.js +1 -1
- package/dist/esm/reliability/buildReliabilityGateChart.js.map +1 -1
- package/dist/index.js +7 -3
- package/dist/index.js.map +1 -1
- package/dist/lib/injection-engine/buildInjectionEngineSubflow.js +1 -1
- package/dist/lib/injection-engine/buildInjectionEngineSubflow.js.map +1 -1
- package/dist/memory/causal/snapshotPipeline.js +6 -2
- package/dist/memory/causal/snapshotPipeline.js.map +1 -1
- package/dist/memory/pipeline/auto.js +2 -2
- package/dist/memory/pipeline/auto.js.map +1 -1
- package/dist/memory/pipeline/default.js +4 -2
- package/dist/memory/pipeline/default.js.map +1 -1
- package/dist/memory/pipeline/ephemeral.js +3 -1
- package/dist/memory/pipeline/ephemeral.js.map +1 -1
- package/dist/memory/pipeline/fact.js +4 -2
- package/dist/memory/pipeline/fact.js.map +1 -1
- package/dist/memory/pipeline/narrative.js +4 -2
- package/dist/memory/pipeline/narrative.js.map +1 -1
- package/dist/memory/pipeline/semantic.js +2 -2
- package/dist/memory/pipeline/semantic.js.map +1 -1
- package/dist/observe.js +1 -1
- package/dist/observe.js.map +1 -1
- package/dist/patterns/MapReduce.js +5 -5
- package/dist/patterns/MapReduce.js.map +1 -1
- package/dist/patterns/Swarm.js +1 -1
- package/dist/patterns/Swarm.js.map +1 -1
- package/dist/recorders/observability/BoundaryRecorder.js +314 -35
- package/dist/recorders/observability/BoundaryRecorder.js.map +1 -1
- package/dist/recorders/observability/FlowchartRecorder.js +10 -0
- package/dist/recorders/observability/FlowchartRecorder.js.map +1 -1
- package/dist/recorders/observability/LiveStateRecorder.js +111 -20
- package/dist/recorders/observability/LiveStateRecorder.js.map +1 -1
- package/dist/recorders/observability/RunStepRecorder.js +658 -0
- package/dist/recorders/observability/RunStepRecorder.js.map +1 -0
- package/dist/recorders/observability/commentary/commentaryTemplates.js +3 -4
- package/dist/recorders/observability/commentary/commentaryTemplates.js.map +1 -1
- package/dist/recorders/observability/internal/ActorArrowClassifier.js +38 -0
- package/dist/recorders/observability/internal/ActorArrowClassifier.js.map +1 -0
- package/dist/recorders/observability/internal/CandidateAnswerBuffer.js +36 -0
- package/dist/recorders/observability/internal/CandidateAnswerBuffer.js.map +1 -0
- package/dist/recorders/observability/internal/ForkTracker.js +88 -0
- package/dist/recorders/observability/internal/ForkTracker.js.map +1 -0
- package/dist/recorders/observability/internal/RootInferrer.js +118 -0
- package/dist/recorders/observability/internal/RootInferrer.js.map +1 -0
- package/dist/recorders/observability/internal/SequenceSiblingTracker.js +35 -0
- package/dist/recorders/observability/internal/SequenceSiblingTracker.js.map +1 -0
- package/dist/recorders/observability/observeRunId.js +25 -0
- package/dist/recorders/observability/observeRunId.js.map +1 -0
- package/dist/reliability/buildReliabilityGateChart.js +1 -1
- package/dist/reliability/buildReliabilityGateChart.js.map +1 -1
- package/dist/types/cache/CacheDecisionSubflow.d.ts.map +1 -1
- package/dist/types/conventions.d.ts.map +1 -1
- package/dist/types/core/Agent.d.ts +20 -18
- package/dist/types/core/Agent.d.ts.map +1 -1
- package/dist/types/core/LLMCall.d.ts +28 -2
- package/dist/types/core/LLMCall.d.ts.map +1 -1
- package/dist/types/core/RunnerBase.d.ts +124 -4
- package/dist/types/core/RunnerBase.d.ts.map +1 -1
- package/dist/types/core/agent/buildAgentChart.d.ts +7 -1
- package/dist/types/core/agent/buildAgentChart.d.ts.map +1 -1
- package/dist/types/core/agent/types.d.ts +29 -0
- package/dist/types/core/agent/types.d.ts.map +1 -1
- package/dist/types/core/runner.d.ts +51 -5
- package/dist/types/core/runner.d.ts.map +1 -1
- package/dist/types/core/slots/buildMessagesSlot.d.ts.map +1 -1
- package/dist/types/core/slots/buildSystemPromptSlot.d.ts.map +1 -1
- package/dist/types/core/slots/buildThinkingSubflow.d.ts.map +1 -1
- package/dist/types/core/slots/buildToolsSlot.d.ts.map +1 -1
- package/dist/types/core/translator.d.ts +95 -0
- package/dist/types/core/translator.d.ts.map +1 -0
- package/dist/types/core-flow/Conditional.d.ts +48 -4
- package/dist/types/core-flow/Conditional.d.ts.map +1 -1
- package/dist/types/core-flow/Loop.d.ts +42 -3
- package/dist/types/core-flow/Loop.d.ts.map +1 -1
- package/dist/types/core-flow/Parallel.d.ts +99 -4
- package/dist/types/core-flow/Parallel.d.ts.map +1 -1
- package/dist/types/core-flow/Sequence.d.ts +49 -3
- package/dist/types/core-flow/Sequence.d.ts.map +1 -1
- package/dist/types/events/payloads.d.ts +22 -1
- package/dist/types/events/payloads.d.ts.map +1 -1
- package/dist/types/index.d.ts +4 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lib/injection-engine/buildInjectionEngineSubflow.d.ts.map +1 -1
- package/dist/types/memory/causal/snapshotPipeline.d.ts.map +1 -1
- package/dist/types/memory/pipeline/auto.d.ts.map +1 -1
- package/dist/types/memory/pipeline/default.d.ts.map +1 -1
- package/dist/types/memory/pipeline/ephemeral.d.ts.map +1 -1
- package/dist/types/memory/pipeline/fact.d.ts.map +1 -1
- package/dist/types/memory/pipeline/narrative.d.ts.map +1 -1
- package/dist/types/memory/pipeline/semantic.d.ts.map +1 -1
- package/dist/types/observe.d.ts +2 -2
- package/dist/types/observe.d.ts.map +1 -1
- package/dist/types/recorders/observability/BoundaryRecorder.d.ts +160 -6
- package/dist/types/recorders/observability/BoundaryRecorder.d.ts.map +1 -1
- package/dist/types/recorders/observability/FlowchartRecorder.d.ts.map +1 -1
- package/dist/types/recorders/observability/LiveStateRecorder.d.ts +42 -6
- package/dist/types/recorders/observability/LiveStateRecorder.d.ts.map +1 -1
- package/dist/types/recorders/observability/RunStepRecorder.d.ts +232 -0
- package/dist/types/recorders/observability/RunStepRecorder.d.ts.map +1 -0
- package/dist/types/recorders/observability/commentary/commentaryTemplates.d.ts.map +1 -1
- package/dist/types/recorders/observability/internal/ActorArrowClassifier.d.ts +26 -0
- package/dist/types/recorders/observability/internal/ActorArrowClassifier.d.ts.map +1 -0
- package/dist/types/recorders/observability/internal/CandidateAnswerBuffer.d.ts +29 -0
- package/dist/types/recorders/observability/internal/CandidateAnswerBuffer.d.ts.map +1 -0
- package/dist/types/recorders/observability/internal/ForkTracker.d.ts +61 -0
- package/dist/types/recorders/observability/internal/ForkTracker.d.ts.map +1 -0
- package/dist/types/recorders/observability/internal/RootInferrer.d.ts +52 -0
- package/dist/types/recorders/observability/internal/RootInferrer.d.ts.map +1 -0
- package/dist/types/recorders/observability/internal/SequenceSiblingTracker.d.ts +25 -0
- package/dist/types/recorders/observability/internal/SequenceSiblingTracker.d.ts.map +1 -0
- package/dist/types/recorders/observability/observeRunId.d.ts +37 -0
- package/dist/types/recorders/observability/observeRunId.d.ts.map +1 -0
- package/dist/types/reliability/buildReliabilityGateChart.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* composition.fork_start / branch_complete / merge_end
|
|
11
11
|
* (via compositionRecorder).
|
|
12
12
|
*/
|
|
13
|
-
import { FlowChartExecutor, flowChart, } from 'footprintjs';
|
|
13
|
+
import { FlowChartExecutor, flowChart, isFlowEvent, } from 'footprintjs';
|
|
14
14
|
import { RunnerBase, makeRunId } from '../core/RunnerBase.js';
|
|
15
15
|
import { ContextRecorder } from '../recorders/core/ContextRecorder.js';
|
|
16
16
|
import { streamRecorder } from '../recorders/core/StreamRecorder.js';
|
|
@@ -22,13 +22,29 @@ export class Parallel extends RunnerBase {
|
|
|
22
22
|
id;
|
|
23
23
|
branches;
|
|
24
24
|
merge;
|
|
25
|
+
opts;
|
|
25
26
|
currentRunContext = {
|
|
26
27
|
runStartMs: 0,
|
|
27
28
|
runId: 'pending',
|
|
28
29
|
compositionPath: [],
|
|
29
30
|
};
|
|
31
|
+
/**
|
|
32
|
+
* Per-branch first-error messages captured during the current run.
|
|
33
|
+
*
|
|
34
|
+
* Filled by an internal CombinedRecorder attached in `createExecutor()`
|
|
35
|
+
* that observes footprintjs `FlowErrorEvent`s. Errors are keyed by the
|
|
36
|
+
* branch id (the first segment of `traversalContext.subflowPath`); only
|
|
37
|
+
* the first error per branch is kept so the surface mirrors the wrapper
|
|
38
|
+
* `try/catch` semantics that preceded the v0.x architectural refactor.
|
|
39
|
+
*
|
|
40
|
+
* Read by the Merge stage to populate strict-mode error messages and
|
|
41
|
+
* tolerant-mode `BranchOutcome.error` strings. Cleared at the start of
|
|
42
|
+
* every `run()` / `resume()`.
|
|
43
|
+
*/
|
|
44
|
+
branchErrors = new Map();
|
|
30
45
|
constructor(opts, branches, merge) {
|
|
31
46
|
super();
|
|
47
|
+
this.opts = opts;
|
|
32
48
|
this.name = opts.name ?? 'Parallel';
|
|
33
49
|
this.id = opts.id ?? 'parallel';
|
|
34
50
|
if (branches.length < 2) {
|
|
@@ -36,15 +52,53 @@ export class Parallel extends RunnerBase {
|
|
|
36
52
|
}
|
|
37
53
|
this.branches = branches;
|
|
38
54
|
this.merge = merge;
|
|
55
|
+
// Eager chart construction — see `RunnerBase.initChart` JSDoc.
|
|
56
|
+
// Safe: the merge stage's closure captures `this.branchErrors`
|
|
57
|
+
// (an instance field initialized at declaration time, line 130),
|
|
58
|
+
// which is set BEFORE the constructor body runs.
|
|
59
|
+
this.initChart(() => this.buildChart());
|
|
39
60
|
}
|
|
40
61
|
static create(opts = {}) {
|
|
41
62
|
return new ParallelBuilder(opts);
|
|
42
63
|
}
|
|
43
|
-
|
|
44
|
-
|
|
64
|
+
// `getSpec()` inherited from RunnerBase — returns the cached chart.
|
|
65
|
+
// ─── UI group translation (L1b) ───────────────────────────────
|
|
66
|
+
getGroupTranslator() {
|
|
67
|
+
return this.opts.groupTranslator;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Build the Parallel's `GroupMetadata` — kind `'Parallel'`, with one
|
|
71
|
+
* `GroupMember` per branch. Each member exposes its `runner` plus
|
|
72
|
+
* the runner's own `getUIGroup()` output (when the consumer
|
|
73
|
+
* threaded the same translator through that branch's construction).
|
|
74
|
+
*/
|
|
75
|
+
buildUIGroupMetadata() {
|
|
76
|
+
const members = this.branches.map((b) => ({
|
|
77
|
+
memberId: b.id,
|
|
78
|
+
runner: b.runner,
|
|
79
|
+
// Per-method override (L1c) takes precedence over the branch
|
|
80
|
+
// runner's own constructor-level translator. When present, the
|
|
81
|
+
// override runs against the branch runner's own GroupMetadata
|
|
82
|
+
// and its output becomes `member.uiGroup`. When absent, fall
|
|
83
|
+
// back to `branch.runner.getUIGroup()` which applies the
|
|
84
|
+
// runner's own translator (if any).
|
|
85
|
+
uiGroup: b.groupTranslator !== undefined
|
|
86
|
+
? b.runner.getUIGroupWith(b.groupTranslator)
|
|
87
|
+
: b.runner.getUIGroup(),
|
|
88
|
+
}));
|
|
89
|
+
return {
|
|
90
|
+
kind: 'Parallel',
|
|
91
|
+
id: this.id,
|
|
92
|
+
name: this.name,
|
|
93
|
+
members,
|
|
94
|
+
extra: {
|
|
95
|
+
mergeStrategy: this.merge.kind,
|
|
96
|
+
},
|
|
97
|
+
};
|
|
45
98
|
}
|
|
46
99
|
async run(input, options) {
|
|
47
100
|
const executor = this.createExecutor();
|
|
101
|
+
this.lastExecutor = executor;
|
|
48
102
|
const result = await executor.run({
|
|
49
103
|
input: { message: input.message },
|
|
50
104
|
...(options ?? {}),
|
|
@@ -63,18 +117,71 @@ export class Parallel extends RunnerBase {
|
|
|
63
117
|
runId: makeRunId(),
|
|
64
118
|
compositionPath: [`Parallel:${this.id}`],
|
|
65
119
|
};
|
|
66
|
-
|
|
67
|
-
|
|
120
|
+
// Reset per-run branch-error capture. Fork children now mount the
|
|
121
|
+
// branch runner's own chart (no try/catch wrapper); errors are
|
|
122
|
+
// captured via FlowRecorder.onError correlation by subflow path.
|
|
123
|
+
this.branchErrors.clear();
|
|
124
|
+
// Reuse the cached chart built at constructor time.
|
|
125
|
+
const executor = new FlowChartExecutor(this.getSpec());
|
|
68
126
|
const dispatcher = this.getDispatcher();
|
|
69
127
|
const getRunCtx = () => this.currentRunContext;
|
|
70
128
|
executor.attachCombinedRecorder(new ContextRecorder({ dispatcher, getRunContext: getRunCtx }));
|
|
71
129
|
executor.attachCombinedRecorder(streamRecorder({ dispatcher, getRunContext: getRunCtx }));
|
|
72
130
|
executor.attachCombinedRecorder(agentRecorder({ dispatcher, getRunContext: getRunCtx }));
|
|
73
131
|
executor.attachCombinedRecorder(compositionRecorder({ dispatcher, getRunContext: getRunCtx }));
|
|
132
|
+
executor.attachCombinedRecorder(this.makeBranchErrorRecorder());
|
|
74
133
|
for (const r of this.attachedRecorders)
|
|
75
134
|
executor.attachCombinedRecorder(r);
|
|
76
135
|
return executor;
|
|
77
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Build the internal recorder that captures first-error-per-branch.
|
|
139
|
+
*
|
|
140
|
+
* footprintjs's `SubflowExecutor` swallows subflow errors into
|
|
141
|
+
* `parentContext.debug.addError(...)` and skips the `outputMapper`,
|
|
142
|
+
* so the failed branch's error message never lands in parent scope.
|
|
143
|
+
* To preserve the per-branch error surface the wrapper-based design
|
|
144
|
+
* provided, we observe `FlowRecorder.onError` and correlate by the
|
|
145
|
+
* first segment of `traversalContext.subflowPath`.
|
|
146
|
+
*
|
|
147
|
+
* Only the FIRST error per branch is kept. Errors fired outside any
|
|
148
|
+
* branch (e.g., a Merge-stage error) are ignored.
|
|
149
|
+
*/
|
|
150
|
+
makeBranchErrorRecorder() {
|
|
151
|
+
const branchIds = new Set(this.branches.map((b) => b.id));
|
|
152
|
+
return {
|
|
153
|
+
id: 'parallel-branch-errors',
|
|
154
|
+
onError: (event) => {
|
|
155
|
+
if (!isFlowEvent(event))
|
|
156
|
+
return;
|
|
157
|
+
const ctx = event.traversalContext;
|
|
158
|
+
if (!ctx)
|
|
159
|
+
return;
|
|
160
|
+
// The branch id is the first segment of the engine-prefixed
|
|
161
|
+
// `stageId` (e.g. `bad/call-llm` → branch `bad`). `subflowPath`
|
|
162
|
+
// is sometimes empty for first-level subflows, and `subflowId`
|
|
163
|
+
// can be deeper than the branch when LLMCall/Agent mount their
|
|
164
|
+
// own internal subflows. The stageId prefix is the canonical
|
|
165
|
+
// origin path.
|
|
166
|
+
const stageId = ctx.stageId ?? '';
|
|
167
|
+
const slash = stageId.indexOf('/');
|
|
168
|
+
const branchId = slash >= 0 ? stageId.slice(0, slash) : undefined;
|
|
169
|
+
if (branchId === undefined || !branchIds.has(branchId))
|
|
170
|
+
return;
|
|
171
|
+
if (!this.branchErrors.has(branchId)) {
|
|
172
|
+
// Strip the leading "Error: " that `error.toString()` adds
|
|
173
|
+
// for standard `Error` instances so the captured message
|
|
174
|
+
// matches the original `throw new Error(msg)` reason exactly
|
|
175
|
+
// (consumers expect the bare message). Non-Error throws
|
|
176
|
+
// never carry this prefix, so the strip is a no-op there.
|
|
177
|
+
const m = event.message.startsWith('Error: ')
|
|
178
|
+
? event.message.slice('Error: '.length)
|
|
179
|
+
: event.message;
|
|
180
|
+
this.branchErrors.set(branchId, m);
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
}
|
|
78
185
|
finalizeResult(executor, result) {
|
|
79
186
|
const paused = this.detectPause(executor, result);
|
|
80
187
|
if (paused)
|
|
@@ -107,74 +214,137 @@ export class Parallel extends RunnerBase {
|
|
|
107
214
|
};
|
|
108
215
|
// Root description prefix `Parallel:` is the taxonomy marker — see
|
|
109
216
|
// FlowchartRecorder.mapTopologyToSteps for the consumer side.
|
|
110
|
-
|
|
111
|
-
//
|
|
112
|
-
//
|
|
113
|
-
|
|
114
|
-
|
|
217
|
+
// The 4th arg threads the consumer's `structureRecorders` (when set)
|
|
218
|
+
// into footprintjs's builder so every node in this chart is observed
|
|
219
|
+
// by them at construction time.
|
|
220
|
+
let builder = flowChart('Seed', seed, 'seed', {
|
|
221
|
+
...(this.opts.structureRecorders !== undefined && {
|
|
222
|
+
structureRecorders: [...this.opts.structureRecorders],
|
|
223
|
+
}),
|
|
224
|
+
description: `Parallel: ${branches.length}-way fanout`,
|
|
225
|
+
});
|
|
226
|
+
// Fork children — each branch is mounted as a proper subflow via
|
|
227
|
+
// footprintjs's native fork mode. Multiple `addSubFlowChart` calls
|
|
228
|
+
// on the same builder cursor produce a fork node (`type: 'fork'`);
|
|
229
|
+
// `ChildrenExecutor` runs them concurrently via `Promise.allSettled`.
|
|
115
230
|
//
|
|
116
|
-
//
|
|
117
|
-
//
|
|
231
|
+
// The branch's OWN chart (its `getSpec()`) is mounted directly — no
|
|
232
|
+
// wrapper. This preserves the parent's `runtimeStageId` address
|
|
233
|
+
// space across branch internals: every LLM call, tool execution,
|
|
234
|
+
// and commit inside a branch appears in the parent executor's
|
|
235
|
+
// commitLog with a globally-unique id. Recorder events flow
|
|
236
|
+
// naturally — no `scope.$emit` forwarding needed.
|
|
237
|
+
//
|
|
238
|
+
// Error handling: a failing branch's `outputMapper` does NOT fire
|
|
239
|
+
// (footprintjs convention: `subflowError` skips output mapping).
|
|
240
|
+
// The branch id is absent from `branchResults`. The merge stage
|
|
241
|
+
// detects this via `branches.map(b => b.id) \ keys(branchResults)`
|
|
242
|
+
// and either throws (strict mode) or synthesizes `BranchOutcome`
|
|
243
|
+
// entries for the tolerant `outcomes-fn` merge.
|
|
118
244
|
for (const branch of branches) {
|
|
119
|
-
builder = builder.addSubFlowChart(branch.id,
|
|
245
|
+
builder = builder.addSubFlowChart(branch.id, branch.runner.getSpec(), branch.name, {
|
|
120
246
|
inputMapper: (parent) => ({ message: parent.userMessage ?? '' }),
|
|
121
|
-
// The wrapper's terminal stage returns a BranchOutcome. Stash it
|
|
122
|
-
// under the branch id; shallow-merge across siblings produces
|
|
123
|
-
// the full outcomes map.
|
|
124
247
|
outputMapper: (sfOutput) => ({
|
|
125
|
-
|
|
126
|
-
[branch.id]: sfOutput,
|
|
248
|
+
branchResults: {
|
|
249
|
+
[branch.id]: typeof sfOutput === 'string' ? sfOutput : '',
|
|
127
250
|
},
|
|
128
251
|
}),
|
|
129
252
|
});
|
|
130
253
|
}
|
|
131
254
|
// Merge stage — runs after all fork children complete (join point).
|
|
255
|
+
// Closes over `this.branchErrors` (populated by the internal
|
|
256
|
+
// `parallel-branch-errors` recorder) so per-branch error messages
|
|
257
|
+
// survive subflow boundary swallowing in footprintjs.
|
|
258
|
+
const branchErrors = this.branchErrors;
|
|
132
259
|
const mergeStage = async (scope) => {
|
|
133
|
-
const
|
|
134
|
-
|
|
260
|
+
const results = scope.branchResults ?? {};
|
|
261
|
+
// Detect failures by absence: any expected branch id missing
|
|
262
|
+
// from `branchResults` is a branch whose `outputMapper` didn't
|
|
263
|
+
// fire — i.e., one whose subflow errored. The specific error
|
|
264
|
+
// message comes from the recorder-captured `branchErrors` map.
|
|
265
|
+
//
|
|
266
|
+
// Caveat: footprintjs does NOT fire `FlowRecorder.onError` for
|
|
267
|
+
// errors thrown INSIDE `applyOutputMapping` (those are caught
|
|
268
|
+
// separately in `SubflowExecutor` and routed to
|
|
269
|
+
// `parentContext.addError('outputMapperError', ...)`). A branch
|
|
270
|
+
// whose subflow completed cleanly but whose outputMapper threw
|
|
271
|
+
// will therefore show up here as a missing id with no entry in
|
|
272
|
+
// `branchErrors` — strict-mode aggregation prints `unknown
|
|
273
|
+
// error` for it and tolerant-mode synthesizes the same string.
|
|
274
|
+
// This is a known gap; see `core-flow/README.md` Decision 8.
|
|
275
|
+
const failedIds = branches.map((b) => b.id).filter((id) => !(id in results));
|
|
135
276
|
const isTolerant = merge.kind === 'outcomes-fn';
|
|
136
|
-
if (
|
|
137
|
-
const details = failures
|
|
138
|
-
.map(([id, o]) => ` ${id}: ${o.error}`)
|
|
139
|
-
.join('\n');
|
|
277
|
+
if (failedIds.length > 0 && !isTolerant) {
|
|
140
278
|
typedEmit(scope, 'agentfootprint.composition.exit', {
|
|
141
279
|
kind: 'Parallel',
|
|
142
280
|
id: compositionId,
|
|
281
|
+
name: compositionName,
|
|
143
282
|
status: 'err',
|
|
144
283
|
durationMs: Date.now() - this.currentRunContext.runStartMs,
|
|
145
284
|
});
|
|
146
|
-
|
|
285
|
+
const details = failedIds
|
|
286
|
+
.map((id) => ` ${id}: ${branchErrors.get(id) ?? 'unknown error'}`)
|
|
287
|
+
.join('\n');
|
|
288
|
+
throw new Error(`Parallel '${compositionId}': ${failedIds.length} branch(es) failed:\n${details}\n` +
|
|
147
289
|
`(use .mergeOutcomesWithFn() for tolerant-mode partial-failure handling)`);
|
|
148
290
|
}
|
|
291
|
+
// Run the merge strategy. Wrap in try/catch so that a merge-stage
|
|
292
|
+
// failure (e.g., merge LLM throws) still produces a
|
|
293
|
+
// `composition.exit` event with `status: 'err'` — without this the
|
|
294
|
+
// event stream would have a `composition.enter` without a matching
|
|
295
|
+
// `composition.exit`, breaking dashboards that pair the two.
|
|
149
296
|
let merged;
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
if (o.ok)
|
|
154
|
-
results[id] = o.value;
|
|
297
|
+
try {
|
|
298
|
+
if (merge.kind === 'fn') {
|
|
299
|
+
merged = merge.fn(results);
|
|
155
300
|
}
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
301
|
+
else if (merge.kind === 'llm') {
|
|
302
|
+
merged = await mergeWithLLM(scope, merge.opts, results);
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
// Tolerant-mode: synthesize BranchOutcome map for the consumer.
|
|
306
|
+
const outcomes = {};
|
|
307
|
+
for (const b of branches) {
|
|
308
|
+
if (b.id in results) {
|
|
309
|
+
outcomes[b.id] = { ok: true, value: results[b.id] };
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
outcomes[b.id] = {
|
|
313
|
+
ok: false,
|
|
314
|
+
error: branchErrors.get(b.id) ?? 'unknown error',
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
merged = merge.fn(outcomes);
|
|
163
319
|
}
|
|
164
|
-
merged = await mergeWithLLM(scope, merge.opts, results);
|
|
165
320
|
}
|
|
166
|
-
|
|
167
|
-
|
|
321
|
+
catch (err) {
|
|
322
|
+
typedEmit(scope, 'agentfootprint.composition.exit', {
|
|
323
|
+
kind: 'Parallel',
|
|
324
|
+
id: compositionId,
|
|
325
|
+
name: compositionName,
|
|
326
|
+
status: 'err',
|
|
327
|
+
durationMs: Date.now() - this.currentRunContext.runStartMs,
|
|
328
|
+
});
|
|
329
|
+
throw err;
|
|
168
330
|
}
|
|
331
|
+
const succeededCount = Object.keys(results).length;
|
|
169
332
|
typedEmit(scope, 'agentfootprint.composition.merge_end', {
|
|
170
333
|
parentId: compositionId,
|
|
171
|
-
|
|
334
|
+
// Emit the merge.kind verbatim so consumers can distinguish
|
|
335
|
+
// tolerant (`outcomes-fn`) from strict (`fn` / `llm`).
|
|
336
|
+
strategy: merge.kind,
|
|
172
337
|
resultSummary: truncate(merged, 80),
|
|
173
|
-
|
|
338
|
+
// Number of branches that actually contributed a result to the
|
|
339
|
+
// merge. Equals `totalBranchCount` on full success; smaller in
|
|
340
|
+
// tolerant-mode runs where some branches failed.
|
|
341
|
+
mergedBranchCount: succeededCount,
|
|
342
|
+
totalBranchCount: branches.length,
|
|
174
343
|
});
|
|
175
344
|
typedEmit(scope, 'agentfootprint.composition.exit', {
|
|
176
345
|
kind: 'Parallel',
|
|
177
346
|
id: compositionId,
|
|
347
|
+
name: compositionName,
|
|
178
348
|
status: 'ok',
|
|
179
349
|
durationMs: Date.now() - this.currentRunContext.runStartMs,
|
|
180
350
|
});
|
|
@@ -184,54 +354,6 @@ export class Parallel extends RunnerBase {
|
|
|
184
354
|
return builder.build();
|
|
185
355
|
}
|
|
186
356
|
}
|
|
187
|
-
/**
|
|
188
|
-
* Build a wrapper chart that runs a branch Runner in a try/catch and
|
|
189
|
-
* emits its events to the Parallel's dispatcher. The chart's terminal
|
|
190
|
-
* stage returns a `BranchOutcome` — never throws up to the traverser.
|
|
191
|
-
*
|
|
192
|
-
* Event forwarding: the branch runner has its own EventDispatcher. We
|
|
193
|
-
* subscribe to the wildcard `'*'` during run() and re-dispatch each
|
|
194
|
-
* event on Parallel's dispatcher so consumers who attach listeners at
|
|
195
|
-
* the Parallel level see the branch's llm/context/agent events.
|
|
196
|
-
*/
|
|
197
|
-
function buildBranchWrapperChart(branch) {
|
|
198
|
-
const runBranch = async (scope) => {
|
|
199
|
-
const args = scope.$getArgs();
|
|
200
|
-
// Forward every branch-runner event via `scope.$emit` so it flows
|
|
201
|
-
// through footprintjs's emit channel. That channel reaches every
|
|
202
|
-
// EmitBridge attached to the CURRENT executor — including bridges
|
|
203
|
-
// belonging to outer compositions when this Parallel is nested
|
|
204
|
-
// (e.g., `Loop(Parallel(...))`). Forwarding directly to the
|
|
205
|
-
// Parallel's own dispatcher would be invisible to outer layers.
|
|
206
|
-
const unsubscribe = branch.runner.on('*', (e) => {
|
|
207
|
-
// `e.payload` is the typed payload union for the specific event;
|
|
208
|
-
// $emit accepts `unknown`, so no cast is needed — let it pass
|
|
209
|
-
// through structurally.
|
|
210
|
-
scope.$emit(e.type, e.payload);
|
|
211
|
-
});
|
|
212
|
-
try {
|
|
213
|
-
const result = await branch.runner.run({ message: args.message ?? '' });
|
|
214
|
-
if (typeof result === 'string') {
|
|
215
|
-
return { ok: true, value: result };
|
|
216
|
-
}
|
|
217
|
-
// Paused outcome: surface as "ok" with empty value — pauses from
|
|
218
|
-
// nested runners aren't failures, but Parallel doesn't yet propagate
|
|
219
|
-
// them through the merge. Consumers who need pause-inside-Parallel
|
|
220
|
-
// should set up nested pause handling at their own layer.
|
|
221
|
-
return { ok: true, value: '' };
|
|
222
|
-
}
|
|
223
|
-
catch (err) {
|
|
224
|
-
return {
|
|
225
|
-
ok: false,
|
|
226
|
-
error: err instanceof Error ? err.message : String(err),
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
finally {
|
|
230
|
-
unsubscribe();
|
|
231
|
-
}
|
|
232
|
-
};
|
|
233
|
-
return flowChart('RunBranch', runBranch, 'run-branch', undefined, `Parallel branch '${branch.id}' — catches failures`).build();
|
|
234
|
-
}
|
|
235
357
|
/** Fluent builder. Requires at least 2 branches + one merge strategy. */
|
|
236
358
|
export class ParallelBuilder {
|
|
237
359
|
opts;
|
|
@@ -241,13 +363,40 @@ export class ParallelBuilder {
|
|
|
241
363
|
constructor(opts) {
|
|
242
364
|
this.opts = opts;
|
|
243
365
|
}
|
|
244
|
-
/**
|
|
245
|
-
|
|
366
|
+
/**
|
|
367
|
+
* Add a branch. All branches run concurrently with the same input.
|
|
368
|
+
*
|
|
369
|
+
* Third arg accepts EITHER a legacy bare `name` string (back-compat
|
|
370
|
+
* with pre-L1c callers) OR a `ParallelBranchOptions` bag containing
|
|
371
|
+
* `name` and/or a per-method `groupTranslator` override. The
|
|
372
|
+
* override applies ONLY to this branch's `member.uiGroup` and does
|
|
373
|
+
* not affect any other branch or the runner's own translator.
|
|
374
|
+
*/
|
|
375
|
+
branch(id, runner, nameOrOpts) {
|
|
246
376
|
if (this.seenIds.has(id)) {
|
|
247
377
|
throw new Error(`Parallel.branch(): duplicate branch id '${id}'`);
|
|
248
378
|
}
|
|
379
|
+
// Branch errors are correlated back to the originating branch by the
|
|
380
|
+
// first `/`-separated segment of footprintjs's engine-prefixed
|
|
381
|
+
// `traversalContext.stageId` (e.g., `legal/call-llm` → branch
|
|
382
|
+
// `legal`). A branch id containing `/` would silently shadow that
|
|
383
|
+
// mapping and drop the error message into 'unknown error' fallback.
|
|
384
|
+
if (id.includes('/')) {
|
|
385
|
+
throw new Error(`Parallel.branch(): id '${id}' must not contain '/' — it collides with footprintjs's subflow-path separator used for per-branch error correlation`);
|
|
386
|
+
}
|
|
249
387
|
this.seenIds.add(id);
|
|
250
|
-
|
|
388
|
+
const opts = typeof nameOrOpts === 'string'
|
|
389
|
+
? ({ name: nameOrOpts })
|
|
390
|
+
: nameOrOpts ?? {};
|
|
391
|
+
const entry = {
|
|
392
|
+
id,
|
|
393
|
+
runner,
|
|
394
|
+
name: opts.name ?? id,
|
|
395
|
+
...(opts.groupTranslator !== undefined && {
|
|
396
|
+
groupTranslator: opts.groupTranslator,
|
|
397
|
+
}),
|
|
398
|
+
};
|
|
399
|
+
this.branches.push(entry);
|
|
251
400
|
return this;
|
|
252
401
|
}
|
|
253
402
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Parallel.js","sourceRoot":"","sources":["../../../src/core-flow/Parallel.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Parallel.js","sourceRoot":"","sources":["../../../src/core-flow/Parallel.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@ export class Sequence extends RunnerBase {
|
|
|
22
22
|
name;
|
|
23
23
|
id;
|
|
24
24
|
steps;
|
|
25
|
+
opts;
|
|
25
26
|
currentRunContext = {
|
|
26
27
|
runStartMs: 0,
|
|
27
28
|
runId: 'pending',
|
|
@@ -29,21 +30,46 @@ export class Sequence extends RunnerBase {
|
|
|
29
30
|
};
|
|
30
31
|
constructor(opts, steps) {
|
|
31
32
|
super();
|
|
33
|
+
this.opts = opts;
|
|
32
34
|
this.name = opts.name ?? 'Sequence';
|
|
33
35
|
this.id = opts.id ?? 'sequence';
|
|
34
36
|
if (steps.length === 0) {
|
|
35
37
|
throw new Error('Sequence: must have at least one .step()');
|
|
36
38
|
}
|
|
37
39
|
this.steps = steps;
|
|
40
|
+
// Eager chart construction — see `RunnerBase.initChart` JSDoc.
|
|
41
|
+
this.initChart(() => this.buildChart());
|
|
38
42
|
}
|
|
39
43
|
static create(opts = {}) {
|
|
40
44
|
return new SequenceBuilder(opts);
|
|
41
45
|
}
|
|
42
|
-
|
|
43
|
-
|
|
46
|
+
// `getSpec()` inherited from RunnerBase — returns the cached chart.
|
|
47
|
+
// ─── UI group translation (L1b) ───────────────────────────────
|
|
48
|
+
getGroupTranslator() {
|
|
49
|
+
return this.opts.groupTranslator;
|
|
50
|
+
}
|
|
51
|
+
/** Sequence is a flat ordered list of steps. One member per step,
|
|
52
|
+
* preserving definition order so the consumer can render them
|
|
53
|
+
* linearly (default Lens UX). Per-method overrides (L1c) take
|
|
54
|
+
* precedence over the step runner's own translator. */
|
|
55
|
+
buildUIGroupMetadata() {
|
|
56
|
+
const members = this.steps.map((s) => ({
|
|
57
|
+
memberId: s.id,
|
|
58
|
+
runner: s.runner,
|
|
59
|
+
uiGroup: s.groupTranslator !== undefined
|
|
60
|
+
? s.runner.getUIGroupWith(s.groupTranslator)
|
|
61
|
+
: s.runner.getUIGroup(),
|
|
62
|
+
}));
|
|
63
|
+
return {
|
|
64
|
+
kind: 'Sequence',
|
|
65
|
+
id: this.id,
|
|
66
|
+
name: this.name,
|
|
67
|
+
members,
|
|
68
|
+
};
|
|
44
69
|
}
|
|
45
70
|
async run(input, options) {
|
|
46
71
|
const executor = this.createExecutor();
|
|
72
|
+
this.lastExecutor = executor;
|
|
47
73
|
const result = await executor.run({
|
|
48
74
|
input: { message: input.message },
|
|
49
75
|
...(options ?? {}),
|
|
@@ -62,8 +88,8 @@ export class Sequence extends RunnerBase {
|
|
|
62
88
|
runId: makeRunId(),
|
|
63
89
|
compositionPath: [`Sequence:${this.id}`],
|
|
64
90
|
};
|
|
65
|
-
|
|
66
|
-
const executor = new FlowChartExecutor(
|
|
91
|
+
// Reuse the cached chart built at constructor time.
|
|
92
|
+
const executor = new FlowChartExecutor(this.getSpec());
|
|
67
93
|
const dispatcher = this.getDispatcher();
|
|
68
94
|
const getRunCtx = () => this.currentRunContext;
|
|
69
95
|
executor.attachCombinedRecorder(new ContextRecorder({ dispatcher, getRunContext: getRunCtx }));
|
|
@@ -102,12 +128,17 @@ export class Sequence extends RunnerBase {
|
|
|
102
128
|
// downstream consumers (Lens, FlowchartRecorder) detect composition
|
|
103
129
|
// primitives via the `<Kind>:` prefix convention. See
|
|
104
130
|
// FlowchartRecorder.mapTopologyToSteps for the consumer side.
|
|
105
|
-
let builder = flowChart('Seed', seed, 'seed',
|
|
131
|
+
let builder = flowChart('Seed', seed, 'seed', {
|
|
132
|
+
...(this.opts.structureRecorders !== undefined && {
|
|
133
|
+
structureRecorders: [...this.opts.structureRecorders],
|
|
134
|
+
}),
|
|
135
|
+
description: `Sequence: ${steps.length}-step pipeline`,
|
|
136
|
+
});
|
|
106
137
|
// Mount each step as a subflow via addSubFlowChartNext. The step's
|
|
107
138
|
// input comes from parent.current (mapped via mapFromPrev); the
|
|
108
139
|
// step's return becomes parent.current (via outputMapper).
|
|
109
140
|
for (const step of steps) {
|
|
110
|
-
builder = builder.addSubFlowChartNext(`step-${step.id}`, step.runner.
|
|
141
|
+
builder = builder.addSubFlowChartNext(`step-${step.id}`, step.runner.getSpec(), step.id, {
|
|
111
142
|
inputMapper: (parent) => step.mapFromPrev(parent.current ?? ''),
|
|
112
143
|
// `sfOutput` is the subflow's TraversalResult — for Runner-backed
|
|
113
144
|
// subflows whose last stage returns a string, sfOutput IS that
|
|
@@ -125,6 +156,7 @@ export class Sequence extends RunnerBase {
|
|
|
125
156
|
typedEmit(scope, 'agentfootprint.composition.exit', {
|
|
126
157
|
kind: 'Sequence',
|
|
127
158
|
id: compositionId,
|
|
159
|
+
name: compositionName,
|
|
128
160
|
status: 'ok',
|
|
129
161
|
durationMs: Date.now() - this.currentRunContext.runStartMs,
|
|
130
162
|
});
|
|
@@ -156,15 +188,26 @@ export class SequenceBuilder {
|
|
|
156
188
|
* First step receives the Sequence input; subsequent steps receive the
|
|
157
189
|
* previous step's output (via the default string-chain mapper, or via
|
|
158
190
|
* the transformer set by a preceding `.pipeVia(fn)` call).
|
|
191
|
+
*
|
|
192
|
+
* Optional third arg `opts.groupTranslator` overrides the runner's
|
|
193
|
+
* own constructor-level translator for THIS step only — only its
|
|
194
|
+
* `member.uiGroup` flips to the override's output.
|
|
159
195
|
*/
|
|
160
|
-
step(id, runner) {
|
|
196
|
+
step(id, runner, opts) {
|
|
161
197
|
if (this.seenIds.has(id)) {
|
|
162
198
|
throw new Error(`Sequence.step(): duplicate step id '${id}'`);
|
|
163
199
|
}
|
|
164
200
|
this.seenIds.add(id);
|
|
165
201
|
const mapFromPrev = this.pendingPipe ?? defaultMapBetween;
|
|
166
202
|
this.pendingPipe = undefined;
|
|
167
|
-
this.steps.push({
|
|
203
|
+
this.steps.push({
|
|
204
|
+
id,
|
|
205
|
+
runner,
|
|
206
|
+
mapFromPrev,
|
|
207
|
+
...(opts?.groupTranslator !== undefined && {
|
|
208
|
+
groupTranslator: opts.groupTranslator,
|
|
209
|
+
}),
|
|
210
|
+
});
|
|
168
211
|
return this;
|
|
169
212
|
}
|
|
170
213
|
/**
|