@forestadmin/workflow-executor 1.35.8 → 1.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/dist/adapters/forest-server-workflow-port.d.ts +6 -2
  2. package/dist/adapters/forest-server-workflow-port.js +36 -3
  3. package/dist/adapters/run-to-available-step-mapper.js +6 -1
  4. package/dist/adapters/server-types.d.ts +10 -6
  5. package/dist/adapters/server-types.js +1 -1
  6. package/dist/adapters/step-outcome-to-update-step-mapper.d.ts +3 -1
  7. package/dist/adapters/step-outcome-to-update-step-mapper.js +9 -2
  8. package/dist/errors.d.ts +20 -0
  9. package/dist/errors.js +51 -2
  10. package/dist/executors/base-step-executor.d.ts +1 -0
  11. package/dist/executors/base-step-executor.js +20 -18
  12. package/dist/executors/condition-step-executor.d.ts +5 -0
  13. package/dist/executors/condition-step-executor.js +170 -15
  14. package/dist/executors/iteration-run-store.d.ts +24 -0
  15. package/dist/executors/iteration-run-store.js +98 -0
  16. package/dist/executors/load-related-record-step-executor.d.ts +7 -3
  17. package/dist/executors/load-related-record-step-executor.js +158 -138
  18. package/dist/executors/per-record-step-executor.d.ts +27 -0
  19. package/dist/executors/per-record-step-executor.js +369 -0
  20. package/dist/executors/record-step-executor.d.ts +4 -0
  21. package/dist/executors/record-step-executor.js +44 -22
  22. package/dist/executors/related-record-picker.d.ts +21 -0
  23. package/dist/executors/related-record-picker.js +180 -0
  24. package/dist/executors/step-executor-factory.d.ts +3 -1
  25. package/dist/executors/step-executor-factory.js +49 -1
  26. package/dist/executors/summary/step-execution-formatters.js +5 -4
  27. package/dist/executors/summary/step-summary-builder.js +23 -1
  28. package/dist/http/mcp-oauth-credentials.d.ts +1 -1
  29. package/dist/http/pending-data-validators.d.ts +2 -0
  30. package/dist/http/pending-data-validators.js +21 -6
  31. package/dist/http/step-serializer.js +54 -27
  32. package/dist/ports/workflow-port.d.ts +12 -1
  33. package/dist/runner.d.ts +1 -0
  34. package/dist/runner.js +52 -12
  35. package/dist/types/execution-context.d.ts +6 -0
  36. package/dist/types/step-execution-data.d.ts +65 -12
  37. package/dist/types/step-execution-data.js +5 -1
  38. package/dist/types/validated/execution.d.ts +7 -117
  39. package/dist/types/validated/execution.js +3 -1
  40. package/dist/types/validated/step-definition.d.ts +23 -117
  41. package/dist/types/validated/step-definition.js +21 -4
  42. package/package.json +1 -1
@@ -3,10 +3,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.findStepExecution = findStepExecution;
6
7
  const ai_proxy_1 = require("@forestadmin/ai-proxy");
7
8
  const errors_1 = require("../errors");
8
9
  const pending_data_validators_1 = __importDefault(require("../http/pending-data-validators"));
9
10
  const step_summary_builder_1 = __importDefault(require("./summary/step-summary-builder"));
11
+ // A step the executor ran has its execution at its own stepIndex. A revision clone never ran, so
12
+ // it inherits the record of the step it copied (originalStepIndex).
13
+ function findStepExecution(step, executions) {
14
+ const own = executions.find(e => e.stepIndex === step.stepOutcome.stepIndex);
15
+ if (own)
16
+ return own;
17
+ // An errored clone persists nothing, so inheriting the copied record would resurface the
18
+ // superseded original's — only fall back when the clone didn't run-and-fail.
19
+ if (step.originalStepIndex !== undefined && step.stepOutcome.status !== 'error') {
20
+ return executions.find(e => e.stepIndex === step.originalStepIndex);
21
+ }
22
+ return undefined;
23
+ }
10
24
  class BaseStepExecutor {
11
25
  constructor(context) {
12
26
  this.context = context;
@@ -67,14 +81,7 @@ class BaseStepExecutor {
67
81
  // Both catch branches below route through here, so neither can drop the classification. The
68
82
  // factory's own catch (step-executor-factory.ts) builds its outcome separately and does not.
69
83
  buildErrorOutcome(error) {
70
- return this.buildOutcomeResult({
71
- status: 'error',
72
- error: error.userMessage,
73
- ...(error.errorKind !== undefined && { errorKind: error.errorKind }),
74
- ...(error.errorSourceStepIndex !== undefined && {
75
- errorSourceStepIndex: error.errorSourceStepIndex,
76
- }),
77
- });
84
+ return this.buildOutcomeResult({ status: 'error', ...(0, errors_1.toErrorOutcome)(error) });
78
85
  }
79
86
  checkIdempotency() {
80
87
  return Promise.resolve(null);
@@ -172,6 +179,9 @@ class BaseStepExecutor {
172
179
  if (!stepDefinition.prompt?.trim() && stepDefinition.title) {
173
180
  lines.push(`Step title: "${stepDefinition.title}"`);
174
181
  }
182
+ if (this.context.perRecordLabel) {
183
+ lines.push(`This step runs once per record. This run is for ${this.context.perRecordLabel}.`);
184
+ }
175
185
  return new ai_proxy_1.SystemMessage(lines.join('\n'));
176
186
  }
177
187
  async buildPreviousStepsMessages() {
@@ -191,15 +201,7 @@ class BaseStepExecutor {
191
201
  // stops a re-executed step (which has its own entry) from resurfacing the superseded
192
202
  // original's record.
193
203
  resolveStepExecution(step, executions) {
194
- const own = executions.find(e => e.stepIndex === step.stepOutcome.stepIndex);
195
- if (own)
196
- return own;
197
- // An errored clone persists nothing, so inheriting the copied record would resurface the
198
- // superseded original's — only fall back when the clone didn't run-and-fail.
199
- if (step.originalStepIndex !== undefined && step.stepOutcome.status !== 'error') {
200
- return executions.find(e => e.stepIndex === step.originalStepIndex);
201
- }
202
- return undefined;
204
+ return findStepExecution(step, executions);
203
205
  }
204
206
  static mergeLeadingSystemMessages(messages) {
205
207
  let i = 0;
@@ -306,4 +308,4 @@ class BaseStepExecutor {
306
308
  }
307
309
  }
308
310
  exports.default = BaseStepExecutor;
309
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zdGVwLWV4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4ZWN1dG9ycy9iYXNlLXN0ZXAtZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFlQSxvREFBc0Q7QUFFdEQsc0NBWW1CO0FBQ25CLDhGQUErRDtBQUMvRCwwRkFBZ0U7QUFFaEUsTUFBOEIsZ0JBQWdCO0lBSzVDLFlBQVksT0FBZ0M7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPO1FBQ1gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRTtZQUMzQyxHQUFHLElBQUksQ0FBQyxNQUFNO1lBQ2QsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYztTQUN2QyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRW5FLElBQUksQ0FBQztZQUNILHlGQUF5RjtZQUN6RixzRUFBc0U7WUFDdEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUU3QyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxnREFBZ0QsRUFBRTtvQkFDNUUsR0FBRyxJQUFJLENBQUMsTUFBTTtvQkFDZCxVQUFVLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNO2lCQUN0QyxDQUFDLENBQUM7Z0JBRUgsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRTNDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1B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
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1zdGVwLWV4ZWN1dG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4ZWN1dG9ycy9iYXNlLXN0ZXAtZXhlY3V0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFvQ0EsOENBY0M7QUFuQ0Qsb0RBQXNEO0FBRXRELHNDQWFtQjtBQUNuQiw4RkFBK0Q7QUFDL0QsMEZBQWdFO0FBRWhFLGlHQUFpRztBQUNqRyxvRUFBb0U7QUFDcEUsU0FBZ0IsaUJBQWlCLENBQy9CLElBQVUsRUFDVixVQUErQjtJQUUvQixNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdFLElBQUksR0FBRztRQUFFLE9BQU8sR0FBRyxDQUFDO0lBRXBCLHlGQUF5RjtJQUN6Riw2RUFBNkU7SUFDN0UsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQ2hGLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUE4QixnQkFBZ0I7SUFLNUMsWUFBWSxPQUFnQztRQUMxQyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU87UUFDWCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFO1lBQzNDLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDZCxTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxj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
@@ -11,8 +11,13 @@ export default class ConditionStepExecutor extends BaseStepExecutor<ConditionSte
11
11
  selectedOption?: string;
12
12
  }): StepExecutionResult;
13
13
  protected doExecute(): Promise<StepExecutionResult>;
14
+ private findOperatorChoice;
15
+ private findPausedDecision;
16
+ private completePausedDecision;
14
17
  private evaluateDeterministically;
18
+ private evaluateGroup;
15
19
  private evaluateCondition;
20
+ private evaluateOverRecords;
16
21
  private resolveConditionValue;
17
22
  private readUserChoice;
18
23
  private askAi;
@@ -9,7 +9,16 @@ const errors_1 = require("../errors");
9
9
  const base_step_executor_1 = __importDefault(require("./base-step-executor"));
10
10
  const deterministic_condition_evaluator_1 = __importDefault(require("./deterministic-condition-evaluator"));
11
11
  const pending_data_validators_1 = __importDefault(require("../http/pending-data-validators"));
12
+ const record_id_1 = require("../record-id");
13
+ const step_execution_data_1 = require("../types/step-execution-data");
12
14
  const step_definition_1 = require("../types/validated/step-definition");
15
+ // Three-valued: null is a condition a record without a value could still turn either way.
16
+ function combine(aggregator, verdicts) {
17
+ const settling = aggregator === 'or';
18
+ if (verdicts.includes(settling))
19
+ return settling;
20
+ return verdicts.includes(null) ? null : !settling;
21
+ }
13
22
  const GATEWAY_SYSTEM_PROMPT = `You are an AI agent selecting the correct option for a workflow gateway decision.
14
23
 
15
24
  **Task**: Analyze the question and available options, then select the option that DIRECTLY answers the question. Options must be literal answers, not interpretations.
@@ -45,12 +54,20 @@ class ConditionStepExecutor extends base_step_executor_1.default {
45
54
  async doExecute() {
46
55
  const { stepDefinition: step, incomingPendingData } = this.context;
47
56
  if ((0, step_definition_1.isDeterministicConditionStep)(step)) {
57
+ const stepExecutions = await this.context.runStore.getStepExecutions(this.context.runId);
58
+ const operatorChoice = this.findOperatorChoice(stepExecutions);
59
+ if (operatorChoice !== undefined) {
60
+ return this.buildOutcomeResult({ status: 'success', selectedOption: operatorChoice });
61
+ }
62
+ const paused = this.findPausedDecision(stepExecutions);
63
+ if (paused)
64
+ return this.completePausedDecision(step, paused, incomingPendingData);
48
65
  // The config wins over an explicit human action, so say so: a mixed-version fleet can pause
49
66
  // the step on an args-blind instance, and the user's click would otherwise vanish untraced.
50
67
  if (incomingPendingData !== undefined) {
51
68
  this.context.logger('Warn', 'Ignoring a submitted option: this decision is evaluated from its conditions', this.logCtx);
52
69
  }
53
- return this.evaluateDeterministically(step);
70
+ return this.evaluateDeterministically(step, stepExecutions);
54
71
  }
55
72
  // Manual mode: the user picks the option from the frontend. Wait for their input
56
73
  // without ever calling the AI.
@@ -75,31 +92,81 @@ class ConditionStepExecutor extends base_step_executor_1.default {
75
92
  }
76
93
  return this.buildOutcomeResult({ status: 'success', selectedOption });
77
94
  }
78
- async evaluateDeterministically(step) {
95
+ // The branch an operator picked stands: a dispatch repeating the step replays it.
96
+ findOperatorChoice(stepExecutions) {
97
+ const own = stepExecutions.find(e => e.stepIndex === this.context.stepIndex);
98
+ if (own?.type !== 'condition' || own.executionResult === undefined)
99
+ return undefined;
100
+ const params = own.executionParams;
101
+ return params.selectedBy === 'operator' ? own.executionResult.answer : undefined;
102
+ }
103
+ // A decision paused on records it could not check, waiting for the operator's branch.
104
+ findPausedDecision(stepExecutions) {
105
+ const own = stepExecutions.find(e => e.stepIndex === this.context.stepIndex);
106
+ if (own?.type !== 'condition' || own.executionResult !== undefined)
107
+ return undefined;
108
+ if (!('unchecked' in own.executionParams))
109
+ return undefined;
110
+ return own;
111
+ }
112
+ async completePausedDecision(step, paused, incomingPendingData) {
113
+ if (incomingPendingData === undefined) {
114
+ return this.buildOutcomeResult({ status: 'awaiting-input' });
115
+ }
116
+ const { selectedOption } = this.readUserChoice(step, incomingPendingData);
117
+ await this.context.runStore.saveStepExecution(this.context.runId, {
118
+ type: 'condition',
119
+ stepIndex: this.context.stepIndex,
120
+ executionParams: {
121
+ ...paused.executionParams,
122
+ selectedOption: selectedOption,
123
+ usedFallback: false,
124
+ selectedBy: 'operator',
125
+ },
126
+ executionResult: { answer: selectedOption },
127
+ });
128
+ return this.buildOutcomeResult({ status: 'success', selectedOption: selectedOption });
129
+ }
130
+ async evaluateDeterministically(step, stepExecutions) {
79
131
  const { optionConditions, fallbackOption } = step.preRecordedArgs;
80
- const stepExecutions = await this.context.runStore.getStepExecutions(this.context.runId);
81
132
  // One clock per step, so "today" cannot flip between the first and the last condition.
82
133
  const clock = { now: new Date(), timezone: this.context.timezone };
134
+ const unchecked = new Set();
83
135
  let matchedOption;
84
136
  const evaluations = optionConditions.map(({ option, aggregator, conditions }) => {
85
- if (matchedOption !== undefined) {
137
+ // Options are taken first match first, so none is taken past one left undecided.
138
+ if (matchedOption !== undefined || unchecked.size > 0) {
86
139
  return { option, outcome: 'not-evaluated' };
87
140
  }
88
- const results = conditions.map((condition, index) => {
89
- const { met, reason } = this.evaluateCondition(condition, stepExecutions, clock);
90
- return { index, met, ...(reason && { reason }) };
91
- });
92
- const matched = aggregator === 'or'
93
- ? results.some(result => result.met === true)
94
- : results.every(result => result.met === true);
141
+ const group = this.evaluateGroup(option, { aggregator, conditions }, stepExecutions, clock);
142
+ // Only a record without a value that could still change a quantified condition leaves the
143
+ // option undecided.
144
+ if (group.verdict === null)
145
+ group.unchecked.forEach(recordId => unchecked.add(recordId));
146
+ const matched = group.verdict === true;
95
147
  if (matched)
96
148
  matchedOption = option;
97
149
  return {
98
150
  option,
99
151
  outcome: matched ? 'matched' : 'not-matched',
100
- conditions: results,
152
+ conditions: group.conditions,
101
153
  };
102
154
  });
155
+ // A record without a value that could change the branch: the decision takes none, and the
156
+ // operator picks one, knowing which records went unchecked.
157
+ if (unchecked.size > 0) {
158
+ await this.context.runStore.saveStepExecution(this.context.runId, {
159
+ type: 'condition',
160
+ stepIndex: this.context.stepIndex,
161
+ executionParams: {
162
+ evaluations,
163
+ evaluatedAt: clock.now.toISOString(),
164
+ timezone: clock.timezone,
165
+ unchecked: [...unchecked],
166
+ },
167
+ });
168
+ return this.buildOutcomeResult({ status: 'awaiting-input' });
169
+ }
103
170
  const usedFallback = matchedOption === undefined;
104
171
  const selectedOption = matchedOption ?? fallbackOption;
105
172
  // optionConditions and options come from two different server-side derivations; an option the
@@ -122,8 +189,42 @@ class ConditionStepExecutor extends base_step_executor_1.default {
122
189
  });
123
190
  return this.buildOutcomeResult({ status: 'success', selectedOption });
124
191
  }
125
- evaluateCondition(condition, stepExecutions, clock) {
192
+ // A value that could not be read counts as not met, as on a single record. A group's verdict is
193
+ // three-valued like its conditions', and its trace `met` is false while undecided.
194
+ evaluateGroup(option, { aggregator, conditions }, stepExecutions, clock) {
195
+ const evaluated = conditions.map((node, index) => {
196
+ if ((0, step_definition_1.isDeterministicConditionGroup)(node)) {
197
+ const { verdict, unchecked, ...result } = this.evaluateGroup(option, node, stepExecutions, clock);
198
+ return { verdict, unchecked, result: { index, ...result } };
199
+ }
200
+ const result = this.evaluateCondition(option, node, stepExecutions, clock);
201
+ return {
202
+ verdict: result.unchecked ? null : result.met === true,
203
+ unchecked: result.unchecked ?? [],
204
+ result: {
205
+ index,
206
+ met: result.met,
207
+ ...(result.reason && { reason: result.reason }),
208
+ ...(result.records && { records: result.records }),
209
+ },
210
+ };
211
+ });
212
+ const verdict = combine(aggregator, evaluated.map(child => child.verdict));
213
+ return {
214
+ verdict,
215
+ unchecked: verdict === null ? evaluated.flatMap(child => child.unchecked) : [],
216
+ met: verdict === true,
217
+ conditions: evaluated.map(child => child.result),
218
+ };
219
+ }
220
+ evaluateCondition(option, condition, stepExecutions, clock) {
126
221
  const resolved = this.resolveConditionValue(condition, stepExecutions);
222
+ if (resolved.found === 'per-record') {
223
+ if (!condition.quantifier) {
224
+ throw new errors_1.MissingConditionQuantifierError(option, condition.fieldName);
225
+ }
226
+ return this.evaluateOverRecords(condition, resolved.values, clock);
227
+ }
127
228
  // The reason is what keeps the fallback from passing for a decision the data took: the run view
128
229
  // words it instead of showing a bare cross. Returning here also means "never read" is not
129
230
  // "read and empty", so present and blank get no answer out of it either.
@@ -136,7 +237,48 @@ class ConditionStepExecutor extends base_step_executor_1.default {
136
237
  });
137
238
  return { met: null, reason: resolved.reason };
138
239
  }
139
- return { met: (0, deterministic_condition_evaluator_1.default)(condition.operator, resolved.value, condition.value, clock) };
240
+ const met = (0, deterministic_condition_evaluator_1.default)(condition.operator, resolved.value, condition.value, clock);
241
+ if (!condition.quantifier)
242
+ return { met };
243
+ const records = { matched: met === true ? 1 : 0, evaluated: met === null ? 0 : 1 };
244
+ // "none" holds when the one record does not match; an undecided value stays undecided.
245
+ return { met: condition.quantifier === 'none' && met !== null ? !met : met, records };
246
+ }
247
+ // A record whose value decides nothing (not read, or read empty for a comparison) is unchecked.
248
+ evaluateOverRecords(condition, values, clock) {
249
+ const unchecked = [];
250
+ let matched = 0;
251
+ let evaluated = 0;
252
+ values.forEach(({ recordId, found, value }) => {
253
+ const met = found
254
+ ? (0, deterministic_condition_evaluator_1.default)(condition.operator, value, condition.value, clock)
255
+ : null;
256
+ if (met === null) {
257
+ unchecked.push(recordId);
258
+ }
259
+ else {
260
+ evaluated += 1;
261
+ if (met)
262
+ matched += 1;
263
+ }
264
+ });
265
+ const records = { matched, evaluated, ...(unchecked.length > 0 && { unchecked }) };
266
+ const quantifier = condition.quantifier;
267
+ // The records read can settle it whatever the others hold: one match answers any and none, one
268
+ // record that does not match answers every.
269
+ const settled = {
270
+ any: matched > 0 ? true : undefined,
271
+ every: matched < evaluated ? false : undefined,
272
+ none: matched > 0 ? false : undefined,
273
+ }[quantifier];
274
+ if (settled !== undefined)
275
+ return { met: settled, records };
276
+ if (unchecked.length > 0)
277
+ return { met: null, records, unchecked };
278
+ // Over no record at all, "every" and "none" would hold vacuously: nothing was checked.
279
+ if (evaluated === 0)
280
+ return { met: false, records };
281
+ return { met: quantifier !== 'any', records };
140
282
  }
141
283
  // Same live-path + most-recent-occurrence resolution as resolveSourceRecordRef: previousSteps
142
284
  // are already restricted to the live path, and in a loop the same step id repeats.
@@ -147,6 +289,19 @@ class ConditionStepExecutor extends base_step_executor_1.default {
147
289
  if (!sourceStep)
148
290
  return { found: false, reason: 'source-step-not-reached' };
149
291
  const execution = this.resolveStepExecution(sourceStep, stepExecutions);
292
+ if ((0, step_execution_data_1.isPerRecordExecution)(execution)) {
293
+ return {
294
+ found: 'per-record',
295
+ values: execution.iterations.map(iteration => {
296
+ const result = iteration.executionResult;
297
+ const field = result?.fields?.find(f => f.name === condition.fieldName);
298
+ const recordId = (0, record_id_1.serializeRecordId)(iteration.sourceRecordRef.recordId);
299
+ return field && 'value' in field
300
+ ? { recordId, found: true, value: field.value }
301
+ : { recordId, found: false };
302
+ }),
303
+ };
304
+ }
150
305
  if (execution?.type !== 'read-record')
151
306
  return { found: false, reason: 'field-not-loaded' };
152
307
  const field = execution.executionResult.fields.find(f => f.name === condition.fieldName);
@@ -197,4 +352,4 @@ class ConditionStepExecutor extends base_step_executor_1.default {
197
352
  }
198
353
  }
199
354
  exports.default = ConditionStepExecutor;
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLXN0ZXAtZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXhlY3V0b3JzL2NvbmRpdGlvbi1zdGVwLWV4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBYUEsb0RBQTJGO0FBQzNGLDZCQUF3QjtBQUV4QixzQ0FBK0Y7QUFDL0YsOEVBQW9EO0FBQ3BELDRHQUFtRjtBQUNuRiw4RkFBK0Q7QUFDL0Qsd0VBSTRDO0FBYTVDLE1BQU0scUJBQXFCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NGQW9Cd0QsQ0FBQztBQUV2RixNQUFxQixxQkFBc0IsU0FBUSw0QkFBeUM7SUFDaEYsa0JBQWtCLENBQUMsT0FNNUI7UUFDQyxPQUFPO1lBQ0wsV0FBVyxFQUFFO2dCQUNYLElBQUksRUFBRSxXQUFXO2dCQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2dCQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTO2dCQUNqQyxHQUFHLE9BQU87YUFDWDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRVMsS0FBSyxDQUFDLFNBQVM7UUFDdkIsTUFBTSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBRW5FLElBQUksSUFBQSw4Q0FBNEIsRUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLDRGQUE0RjtZQUM1Riw0RkFBNEY7WUFDNUYsSUFBSSxtQkFBbUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQ2pCLE1BQU0sRUFDTiw2RUFBNkUsRUFDN0UsSUFBSSxDQUFDLE1BQU0sQ0FDWixDQUFDO1lBQ0osQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxpRkFBaUY7UUFD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
355
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZGl0aW9uLXN0ZXAtZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXhlY3V0b3JzL2NvbmRpdGlvbi1zdGVwLWV4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBaUJBLG9EQUEyRjtBQUMzRiw2QkFBd0I7QUFFeEIsc0NBS21CO0FBQ25CLDhFQUFvRDtBQUNwRCw0R0FBbUY7QUFDbkYsOEZBQStEO0FBQy9ELDRDQUFpRDtBQUNqRCxzRUFBb0U7QUFDcEUsd0VBSzRDO0FBc0I1QywwRkFBMEY7QUFDMUYsU0FBUyxPQUFPLENBQUMsVUFBd0IsRUFBRSxRQUErQjtJQUN4RSxNQUFNLFFBQVEsR0FBRyxVQUFVLEtBQUssSUFBSSxDQUFDO0lBQ3JDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFBRSxPQUFPLFFBQVEsQ0FBQztJQUVqRCxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDcEQsQ0FBQztBQUVELE1BQU0scUJBQXFCLEdBQUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O3NGQW9Cd0QsQ0FBQztBQUV2RixNQUFxQixxQkFBc0IsU0FBUSw0QkFBeUM7SUFDaEYsa0JBQWtCLENBQUMsT0FNNUI7UUFDQyxPQUFPO1lBQ0wsV0FBVyxFQUFFO2dCQUNYLElBQUksRUFBRSxXQUFXO2dCQUNqQixNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2dCQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTO2dCQUNqQyxHQUFHLE9BQU87YUFDWDtTQUNGLENBQUM7SUFDSixDQUFDO0lBRVMsS0FBSyxDQUFDLFNBQVM7UUFDdkIsTUFBTSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFD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
@@ -0,0 +1,24 @@
1
+ import type { RunStore } from '../ports/run-store';
2
+ import type { StepExecutionData, StepIteration } from '../types/step-execution-data';
3
+ import type { RecordRef } from '../types/validated/collection';
4
+ export declare function isSameRecord(a: RecordRef, b: RecordRef): boolean;
5
+ export interface IterationHandle {
6
+ get(): StepIteration;
7
+ set(iteration: StepIteration): Promise<void>;
8
+ }
9
+ export default class IterationRunStore implements RunStore {
10
+ private readonly base;
11
+ private readonly stepIndex;
12
+ private readonly sourceRecordRef;
13
+ private readonly handle;
14
+ private abandoned;
15
+ constructor(base: RunStore, stepIndex: number, sourceRecordRef: RecordRef, handle: IterationHandle);
16
+ abandon(): void;
17
+ init(): Promise<void>;
18
+ close(): Promise<void>;
19
+ getStepExecutions(runId: string): Promise<StepExecutionData[]>;
20
+ saveStepExecution(runId: string, stepExecution: StepExecutionData): Promise<void>;
21
+ deleteStepExecution(runId: string, stepIndex: number): Promise<void>;
22
+ private project;
23
+ }
24
+ //# sourceMappingURL=iteration-run-store.d.ts.map
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSameRecord = isSameRecord;
4
+ const errors_1 = require("../errors");
5
+ const record_id_1 = require("../record-id");
6
+ const step_execution_data_1 = require("../types/step-execution-data");
7
+ // The fields a single-record execution and an iteration share.
8
+ const ITERATION_FIELDS = [
9
+ 'selectedRecordRef',
10
+ 'executionParams',
11
+ 'pendingData',
12
+ 'userConfirmation',
13
+ 'executionResult',
14
+ 'idempotencyPhase',
15
+ ];
16
+ function isSameRecord(a, b) {
17
+ return (a.collectionName === b.collectionName &&
18
+ (0, record_id_1.serializeRecordId)(a.recordId) === (0, record_id_1.serializeRecordId)(b.recordId));
19
+ }
20
+ function asExecution(row, iteration) {
21
+ const execution = { type: row.type, stepIndex: row.stepIndex };
22
+ ITERATION_FIELDS.forEach(field => {
23
+ if (iteration[field] !== undefined)
24
+ execution[field] = iteration[field];
25
+ });
26
+ return execution;
27
+ }
28
+ // What one record's run of a step running once per record sees of the run: its own iteration as
29
+ // the step's execution, and every earlier per-record step narrowed to the same record, so the
30
+ // single-record executor runs unchanged and never reads another record's results.
31
+ class IterationRunStore {
32
+ constructor(base, stepIndex, sourceRecordRef, handle) {
33
+ this.abandoned = false;
34
+ this.base = base;
35
+ this.stepIndex = stepIndex;
36
+ this.sourceRecordRef = sourceRecordRef;
37
+ this.handle = handle;
38
+ }
39
+ // A run past its timeout keeps going, since nothing aborts it. Its saves are refused, which also
40
+ // stops it at the write-ahead marker a mutating step saves before its side effect.
41
+ abandon() {
42
+ this.abandoned = true;
43
+ }
44
+ init() {
45
+ return Promise.resolve();
46
+ }
47
+ close() {
48
+ return Promise.resolve();
49
+ }
50
+ async getStepExecutions(runId) {
51
+ const rows = await this.base.getStepExecutions(runId);
52
+ return rows.flatMap(row => this.project(row));
53
+ }
54
+ async saveStepExecution(runId, stepExecution) {
55
+ if (this.abandoned) {
56
+ throw new errors_1.StepStateError(`Run of step ${this.stepIndex} for a record was abandoned at its timeout`);
57
+ }
58
+ if (stepExecution.stepIndex !== this.stepIndex) {
59
+ await this.base.saveStepExecution(runId, stepExecution);
60
+ return;
61
+ }
62
+ const iteration = { ...this.handle.get() };
63
+ ITERATION_FIELDS.forEach(field => {
64
+ const value = stepExecution[field];
65
+ if (value === undefined)
66
+ delete iteration[field];
67
+ else
68
+ iteration[field] = value;
69
+ });
70
+ await this.handle.set(iteration);
71
+ }
72
+ deleteStepExecution(runId, stepIndex) {
73
+ return this.base.deleteStepExecution(runId, stepIndex);
74
+ }
75
+ project(row) {
76
+ if (row.stepIndex === this.stepIndex) {
77
+ const own = this.handle.get();
78
+ return ITERATION_FIELDS.some(field => own[field] !== undefined)
79
+ ? [asExecution(row, own)]
80
+ : [];
81
+ }
82
+ if ((0, step_execution_data_1.isPerRecordExecution)(row)) {
83
+ const match = row.iterations.find(it => isSameRecord(it.sourceRecordRef, this.sourceRecordRef));
84
+ return match ? [asExecution(row, match)] : [];
85
+ }
86
+ if (row.type === 'load-related-record' &&
87
+ row.executionResult !== undefined &&
88
+ 'records' in row.executionResult) {
89
+ const record = row.executionResult.records.find(r => isSameRecord(r, this.sourceRecordRef));
90
+ if (!record)
91
+ return [];
92
+ return [{ ...row, executionResult: { relation: row.executionResult.relation, record } }];
93
+ }
94
+ return [row];
95
+ }
96
+ }
97
+ exports.default = IterationRunStore;
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlcmF0aW9uLXJ1bi1zdG9yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leGVjdXRvcnMvaXRlcmF0aW9uLXJ1bi1zdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWtCQSxvQ0FLQztBQW5CRCxzQ0FBMkM7QUFDM0MsNENBQWlEO0FBQ2pELHNFQUFvRTtBQUVwRSwrREFBK0Q7QUFDL0QsTUFBTSxnQkFBZ0IsR0FBRztJQUN2QixtQkFBbUI7SUFDbkIsaUJBQWlCO0lBQ2pCLGFBQWE7SUFDYixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLGtCQUFrQjtDQUNWLENBQUM7QUFFWCxTQUFnQixZQUFZLENBQUMsQ0FBWSxFQUFFLENBQVk7SUFDckQsT0FBTyxDQUNMLENBQUMsQ0FBQyxjQUFjLEtBQUssQ0FBQyxDQUFDLGNBQWM7UUFDckMsSUFBQSw2QkFBaUIsRUFBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBQSw2QkFBaUIsRUFBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQ2hFLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsR0FBc0IsRUFBRSxTQUF3QjtJQUNuRSxNQUFNLFNBQVMsR0FBNEIsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBRXhGLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUMvQixJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTO1lBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxRSxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sU0FBeUMsQ0FBQztBQUNuRCxDQUFDO0FBT0QsZ0dBQWdHO0FBQ2hHLDhGQUE4RjtBQUM5RixrRkFBa0Y7QUFDbEYsTUFBcUIsaUJBQWlCO0lBT3BDLFlBQ0UsSUFB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
@@ -17,16 +17,20 @@ export default class LoadRelatedRecordStepExecutor extends RecordStepExecutor<Lo
17
17
  private collectCandidateIds;
18
18
  private extractReferenceFieldValue;
19
19
  private resolveAndLoadAutomatic;
20
+ private get isMultiple();
21
+ private refuseRelationSwitch;
22
+ private multiplePendingFields;
23
+ private collectMultipleCandidates;
24
+ private resolveAndLoadRecordsAutomatic;
25
+ private resolveRecordsFromSelection;
20
26
  private fetchXToOneCandidate;
21
27
  private resolveFromSelection;
22
28
  private selectBestFromRelatedData;
23
29
  private fetchRelatedData;
24
30
  private persistSkip;
25
31
  private persistAndReturn;
32
+ private get pickerAi();
26
33
  private relationOptionLabel;
27
34
  private selectRelationToFollow;
28
- /** AI call 1 for HasMany: selects the most relevant fields to compare candidates. */
29
- private selectRelevantFields;
30
- private selectBestRecordIndex;
31
35
  }
32
36
  //# sourceMappingURL=load-related-record-step-executor.d.ts.map