@forestadmin/workflow-executor 1.7.0 → 1.8.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.
@@ -15,6 +15,15 @@ Important rules:
15
15
  - Be precise: only trigger the action directly relevant to the request.
16
16
  - Final answer is definitive, you won't receive any other input from the user.
17
17
  - Do not refer to yourself as "I" in the response, use a passive formulation instead.`;
18
+ const FILL_FORM_SYSTEM_PROMPT = `You are filling out an action form using the user's request and the data available in the workflow context.
19
+
20
+ Important rules:
21
+ - The request is an explicit instruction. When it states a value for a field (e.g. "set the price to 35"), use that exact value — following an explicit instruction is NOT guessing.
22
+ - Otherwise, fill a field only when the workflow context gives you the value with confidence.
23
+ - A field's "current" value is just its existing default; override it when the request asks you to.
24
+ - If neither the request nor the workflow context gives you a field's value, LEAVE IT OUT — never guess or assume.
25
+ - For Enum fields, use exactly one of the allowed values, otherwise leave the field out.
26
+ - Do not invent identifiers, dates, amounts, or file contents that are absent from both the request and the context.`;
18
27
  class TriggerRecordActionStepExecutor extends record_step_executor_1.default {
19
28
  async checkIdempotency() {
20
29
  const existing = await this.findPendingExecution('trigger-action');
@@ -32,9 +41,13 @@ class TriggerRecordActionStepExecutor extends record_step_executor_1.default {
32
41
  if (pending) {
33
42
  return this.handleConfirmationFlow(pending, async (exec) => {
34
43
  const { selectedRecordRef, pendingData, userConfirmation } = exec;
35
- // The frontend executes the action itself and posts the result back.
36
- // A confirmed step without actionResult is a broken frontend contract.
37
- if (!pendingData || !userConfirmation || !('actionResult' in userConfirmation)) {
44
+ // The frontend executes the action natively and posts the result back. A confirmed step
45
+ // must carry an actionResult UNLESS the submission only created an approval request
46
+ // (pending-approval), in which case no result exists yet.
47
+ const isPendingApproval = userConfirmation?.submissionOutcome === 'pending-approval';
48
+ if (!pendingData ||
49
+ !userConfirmation ||
50
+ (!('actionResult' in userConfirmation) && !isPendingApproval)) {
38
51
  throw new errors_1.StepStateError(`Frontend confirmed action but did not provide actionResult ` +
39
52
  `(run "${this.context.runId}", step ${this.context.stepIndex})`);
40
53
  }
@@ -43,7 +56,7 @@ class TriggerRecordActionStepExecutor extends record_step_executor_1.default {
43
56
  displayName: pendingData.displayName,
44
57
  name: pendingData.name,
45
58
  };
46
- return this.saveFrontendResult(target, userConfirmation.actionResult, exec);
59
+ return this.saveFrontendResult(target, exec);
47
60
  });
48
61
  }
49
62
  // Branches B & C -- First call
@@ -52,8 +65,11 @@ class TriggerRecordActionStepExecutor extends record_step_executor_1.default {
52
65
  async handleFirstCall() {
53
66
  const { stepDefinition: step } = this.context;
54
67
  const { preRecordedArgs } = step;
55
- const records = await this.getAvailableRecordRefs();
56
- const selectedRecordRef = await this.resolveRecordRef(records, step.prompt, preRecordedArgs?.selectedRecordStepIndex);
68
+ // "On record" pins the source by stable step id (revise-safe); legacy steps without it fall
69
+ // back to AI record selection among the available source records.
70
+ const selectedRecordRef = preRecordedArgs?.selectedRecordStepId
71
+ ? await this.resolveSourceRecordRef(preRecordedArgs.selectedRecordStepId)
72
+ : await this.resolveRecordRef(await this.getAvailableRecordRefs(), step.prompt);
57
73
  const schema = await this.getCollectionSchema(selectedRecordRef.collectionName);
58
74
  const recordedAction = preRecordedArgs?.actionName;
59
75
  const actionName = recordedAction ?? (await this.selectAction(schema, step.prompt)).actionName;
@@ -66,35 +82,176 @@ class TriggerRecordActionStepExecutor extends record_step_executor_1.default {
66
82
  displayName: action.displayName,
67
83
  name: action.name,
68
84
  };
69
- // Branch B -- fully automated: executor runs the action itself, so it cannot
70
- // handle forms (no UI to fill them). Reject form-bearing actions here. When the
71
- // frontend is in the loop (Branch C), it handles the form natively so no check.
72
- if (step.executionType === step_definition_1.StepExecutionMode.FullyAutomated) {
73
- const { hasForm } = await this.context.agent.getActionFormInfo({
74
- collection: selectedRecordRef.collectionName,
75
- action: target.name,
76
- id: selectedRecordRef.recordId,
77
- });
78
- if (hasForm)
79
- throw new errors_1.UnsupportedActionFormError(target.displayName);
80
- return this.executeOnExecutor(target);
85
+ const form = await this.context.agent.getActionForm({
86
+ collection: selectedRecordRef.collectionName,
87
+ action: target.name,
88
+ id: selectedRecordRef.recordId,
89
+ });
90
+ const hasForm = form.fields.length > 0;
91
+ // Formless: Full AI executes directly, else pause for the user.
92
+ if (!hasForm) {
93
+ return step.executionType === step_definition_1.StepExecutionMode.FullyAutomated
94
+ ? this.executeOnExecutor(target)
95
+ : this.pauseForConfirmation(target);
96
+ }
97
+ // Manual: pause with the native form, NO AI pre-fill.
98
+ if (step.executionType === step_definition_1.StepExecutionMode.Manual) {
99
+ return this.pauseForConfirmation(target, { fields: form.fields, aiFilledValues: [] });
81
100
  }
82
- // Branch C -- Awaiting confirmation (frontend executes the action, including forms)
101
+ // AI-assisted + Full AI share the same fill loop; only the exit differs.
102
+ const { aiFilledValues, form: filledForm } = await this.fillFormWithAi(selectedRecordRef, target.name, form);
103
+ const reviewState = { fields: filledForm.fields, aiFilledValues };
104
+ // AI-assisted: pause for the user to review/edit/submit natively.
105
+ if (step.executionType !== step_definition_1.StepExecutionMode.FullyAutomated) {
106
+ return this.pauseForConfirmation(target, reviewState);
107
+ }
108
+ // Full AI: submit if all required fields are filled, else fallback (pause) with what was filled.
109
+ if (!filledForm.canExecute) {
110
+ return this.pauseForConfirmation(target, reviewState);
111
+ }
112
+ const values = Object.fromEntries(aiFilledValues.map(v => [v.field, v.value]));
113
+ try {
114
+ return await this.executeOnExecutor(target, { values, aiFilledValues });
115
+ }
116
+ catch (error) {
117
+ // Validation rejection or an approval-gated action → not a hard failure: pause as
118
+ // AI-assisted so a human can finish/submit natively. Plain permission 403, infra errors,
119
+ // etc. propagate as a real step error (a reviewing human couldn't fix those).
120
+ if (error instanceof errors_1.ActionFormValidationError ||
121
+ error instanceof errors_1.ActionRequiresApprovalError) {
122
+ return this.pauseForConfirmation(target, reviewState);
123
+ }
124
+ throw error;
125
+ }
126
+ }
127
+ // Pause the step awaiting user confirmation. For form-bearing actions, `form` carries the native
128
+ // form fields + the ordered AI prefill the front replays sequentially.
129
+ async pauseForConfirmation(target, form) {
83
130
  await this.context.runStore.saveStepExecution(this.context.runId, {
84
131
  type: 'trigger-action',
85
132
  stepIndex: this.context.stepIndex,
86
- pendingData: { displayName: target.displayName, name: target.name },
133
+ pendingData: { displayName: target.displayName, name: target.name, ...(form && { form }) },
87
134
  selectedRecordRef: target.selectedRecordRef,
88
135
  });
89
136
  return this.buildOutcomeResult({ status: 'awaiting-input' });
90
137
  }
138
+ // Shared AI form-fill loop (reused by Full AI). Iteratively asks the AI to
139
+ // fill the fields it has context for (leave-empty-if-unsure), re-applying after each pass so
140
+ // change hooks reveal dependent fields. Bounded by max iterations + no-progress detection so an
141
+ // oscillating dynamic form can't loop forever. Returns the values in fill order + the final form.
142
+ async fillFormWithAi(recordRef, action, initialForm) {
143
+ const MAX_ITERATIONS = 3;
144
+ const accumulator = {};
145
+ const ordered = [];
146
+ let form = initialForm;
147
+ for (let i = 0; i < MAX_ITERATIONS; i += 1) {
148
+ // eslint-disable-next-line no-await-in-loop
149
+ const aiValues = await this.askAiToFillForm(form);
150
+ let progressed = false;
151
+ for (const [field, value] of Object.entries(aiValues)) {
152
+ const isEmpty = value === undefined || value === null || value === '';
153
+ const exists = form.fields.some(f => f.name === field);
154
+ const isNew = accumulator[field] !== value;
155
+ // Keep only non-empty values for fields that still exist and weren't already set.
156
+ if (!isEmpty && exists && isNew) {
157
+ accumulator[field] = value;
158
+ ordered.push({ field, value });
159
+ progressed = true;
160
+ }
161
+ }
162
+ // No-progress guard: the AI added nothing new this pass → it has no more context to offer.
163
+ if (!progressed)
164
+ break;
165
+ // Re-apply so change hooks reveal/adjust dependent fields for the next pass.
166
+ // eslint-disable-next-line no-await-in-loop
167
+ form = await this.context.agent.getActionForm({
168
+ collection: recordRef.collectionName,
169
+ action,
170
+ id: recordRef.recordId,
171
+ values: accumulator,
172
+ });
173
+ if (form.canExecute)
174
+ break;
175
+ }
176
+ // Drop any value whose field no longer exists after the hooks (state drift) — fail-safe.
177
+ const finalFieldNames = new Set(form.fields.map(f => f.name));
178
+ const aiFilledValues = ordered.filter(v => finalFieldNames.has(v.field));
179
+ // Debug: net retained values + whether the form can execute.
180
+ this.context.logger('Debug', 'AI form-fill: final values', {
181
+ ...this.logCtx,
182
+ aiFilledValues,
183
+ canExecute: form.canExecute,
184
+ });
185
+ return { aiFilledValues, form };
186
+ }
187
+ // One AI fill pass: present the current form fields and ask the AI for values it's confident
188
+ // about. The strict leave-empty rule (never guess) lives in the prompt + tool description.
189
+ async askAiToFillForm(form) {
190
+ const { stepDefinition: step } = this.context;
191
+ const fieldLines = form.fields
192
+ .map(field => {
193
+ const parts = [`- ${field.name} (${field.type}${field.isRequired ? ', required' : ''})`];
194
+ if (field.enumValues?.length)
195
+ parts.push(`allowed: ${field.enumValues.join(', ')}`);
196
+ if (field.value !== undefined && field.value !== null) {
197
+ parts.push(`current: ${JSON.stringify(field.value)}`);
198
+ }
199
+ return parts.join(' — ');
200
+ })
201
+ .join('\n');
202
+ const tool = new ai_proxy_1.DynamicStructuredTool({
203
+ name: 'fill_action_form',
204
+ description: 'Provide values for the action form fields you have enough context to fill. ' +
205
+ 'Return a `values` object keyed by field name. Leave a field OUT entirely if you are ' +
206
+ 'not sure — never guess or assume. For Enum fields use exactly one of the allowed values.',
207
+ schema: zod_1.z.object({
208
+ values: zod_1.z
209
+ .record(zod_1.z.string(), zod_1.z.unknown())
210
+ .optional()
211
+ .describe('Field name → value, only for fields you are confident about.'),
212
+ }),
213
+ func: undefined,
214
+ });
215
+ const contextMessage = this.buildContextMessage();
216
+ const previousStepsMessages = await this.buildPreviousStepsMessages();
217
+ const messages = [
218
+ contextMessage,
219
+ ...previousStepsMessages,
220
+ new ai_proxy_1.SystemMessage(FILL_FORM_SYSTEM_PROMPT),
221
+ new ai_proxy_1.SystemMessage(`Action form fields:\n${fieldLines}`),
222
+ new ai_proxy_1.HumanMessage(`**Request**: ${step.prompt ?? 'Fill the action form.'}`),
223
+ ];
224
+ // Debug: AI form inputs (request, fields, context); logged before the call to trace mis-fills.
225
+ this.context.logger('Debug', 'AI form-fill: context', {
226
+ ...this.logCtx,
227
+ request: step.prompt ?? null,
228
+ fields: form.fields.map(field => ({
229
+ name: field.name,
230
+ type: field.type,
231
+ required: field.isRequired,
232
+ current: field.value,
233
+ ...(field.enumValues?.length ? { allowed: field.enumValues } : {}),
234
+ })),
235
+ workflowContext: [contextMessage, ...previousStepsMessages].map(message => message.content),
236
+ });
237
+ const { values } = await this.invokeWithTool(messages, tool);
238
+ this.context.logger('Debug', 'AI form-fill: values returned by the AI', {
239
+ ...this.logCtx,
240
+ values: values ?? {},
241
+ });
242
+ return values ?? {};
243
+ }
91
244
  /** Branch B — executor runs the action via the audited agent, then persists the result. */
92
- async executeOnExecutor(target) {
245
+ async executeOnExecutor(target,
246
+ // Form submission (Full AI): the AI-filled values to submit + the ordered prefill for
247
+ // the audit trail. Omitted for a formless action (executor just triggers it).
248
+ form) {
93
249
  const { selectedRecordRef, displayName, name } = target;
94
250
  const actionResult = await this.context.agent.executeAction({
95
251
  collection: selectedRecordRef.collectionName,
96
252
  action: name,
97
253
  id: selectedRecordRef.recordId,
254
+ ...(form && { values: form.values }),
98
255
  }, {
99
256
  beforeCall: () => this.context.runStore.saveStepExecution(this.context.runId, {
100
257
  type: 'trigger-action',
@@ -107,21 +264,47 @@ class TriggerRecordActionStepExecutor extends record_step_executor_1.default {
107
264
  type: 'trigger-action',
108
265
  stepIndex: this.context.stepIndex,
109
266
  executionParams: { displayName, name },
110
- executionResult: { success: true, actionResult },
267
+ executionResult: {
268
+ success: true,
269
+ actionResult,
270
+ // Form-bearing Full AI: record what the executor submitted.
271
+ ...(form && {
272
+ submissionOutcome: 'executed',
273
+ submittedBy: 'ai',
274
+ submittedValues: form.values,
275
+ ...(form.aiFilledValues.length && { aiFilledValues: form.aiFilledValues }),
276
+ }),
277
+ },
111
278
  selectedRecordRef,
112
279
  idempotencyPhase: 'done',
113
280
  });
114
281
  return this.buildOutcomeResult({ status: 'success' });
115
282
  }
116
- /** Branch A — the frontend executed the action; executor only persists the result it sent. */
117
- async saveFrontendResult(target, actionResult, existingExecution) {
283
+ /**
284
+ * Branch A the frontend executed the action natively; the executor persists what it reported.
285
+ * Records the submission outcome (executed vs pending-approval), the submitted values, and the
286
+ * AI prefill (from the stored pending payload) for the audit trail / downstream-AI context.
287
+ */
288
+ async saveFrontendResult(target, existingExecution) {
118
289
  const { selectedRecordRef, displayName, name } = target;
290
+ const confirmation = existingExecution.userConfirmation;
291
+ const submissionOutcome = confirmation?.submissionOutcome ?? 'executed';
292
+ const aiFilledValues = existingExecution.pendingData?.form?.aiFilledValues;
119
293
  await this.context.runStore.saveStepExecution(this.context.runId, {
120
294
  ...existingExecution,
121
295
  type: 'trigger-action',
122
296
  stepIndex: this.context.stepIndex,
123
297
  executionParams: { displayName, name },
124
- executionResult: { success: true, actionResult },
298
+ executionResult: {
299
+ success: true,
300
+ // No action result exists yet when the submission only created an approval request.
301
+ ...(submissionOutcome === 'executed' && { actionResult: confirmation?.actionResult }),
302
+ submissionOutcome,
303
+ // AI-assisted = the human submitted natively (audit).
304
+ submittedBy: 'user',
305
+ ...(confirmation?.submittedValues && { submittedValues: confirmation.submittedValues }),
306
+ ...(aiFilledValues?.length && { aiFilledValues }),
307
+ },
125
308
  selectedRecordRef,
126
309
  });
127
310
  return this.buildOutcomeResult({ status: 'success' });
@@ -166,4 +349,4 @@ class TriggerRecordActionStepExecutor extends record_step_executor_1.default {
166
349
  }
167
350
  }
168
351
  exports.default = TriggerRecordActionStepExecutor;
169
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJpZ2dlci1yZWNvcmQtYWN0aW9uLXN0ZXAtZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXhlY3V0b3JzL3RyaWdnZXItcmVjb3JkLWFjdGlvbi1zdGVwLWV4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBS0Esb0RBQTJGO0FBQzNGLDZCQUF3QjtBQUV4QixzQ0FLbUI7QUFDbkIsa0ZBQXdEO0FBQ3hELHdFQUF1RTtBQUV2RSxNQUFNLDRCQUE0QixHQUFHOzs7Ozs7c0ZBTWlELENBQUM7QUFNdkYsTUFBcUIsK0JBQWdDLFNBQVEsOEJBQStDO0lBQ3ZGLEtBQUssQ0FBQyxnQkFBZ0I7UUFDdkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQzlDLGdCQUFnQixDQUNqQixDQUFDO1FBRUYsSUFBSSxRQUFRLEVBQUUsZ0JBQWdCLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDMUMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsSUFBSSxRQUFRLEVBQUUsZ0JBQWdCLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDL0MsTUFBTSxJQUFJLHVCQUFjLENBQUMsaUVBQWlFLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRVMsS0FBSyxDQUFDLFNBQVM7UUFDdkIsaUVBQWlFO1FBQ2pFLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUNqQyxDQUFDO1FBRUYsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUNoQyxPQUFPLEVBQ1AsS0FBSyxFQUFDLElBQUksRUFBQyxFQUFFO2dCQUNYLE1BQU0sRUFBRSxpQkFBaUIsRUFB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
352
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJpZ2dlci1yZWNvcmQtYWN0aW9uLXN0ZXAtZXhlY3V0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXhlY3V0b3JzL3RyaWdnZXItcmVjb3JkLWFjdGlvbi1zdGVwLWV4ZWN1dG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBVUEsb0RBQTJGO0FBQzNGLDZCQUF3QjtBQUV4QixzQ0FNbUI7QUFDbkIsa0ZBQXdEO0FBQ3hELHdFQUF1RTtBQUV2RSxNQUFNLDRCQUE0QixHQUFHOzs7Ozs7c0ZBTWlELENBQUM7QUFFdkYsTUFBTSx1QkFBdUIsR0FBRzs7Ozs7Ozs7cUhBUXFGLENBQUM7QUFNdEgsTUFBcUIsK0JBQWdDLFNBQVEsOEJBQStDO0lBQ3ZGLEtBQUssQ0FBQyxnQkFBZ0I7UUFDdkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQzlDLGdCQUFnQixDQUNqQixDQUFDO1FBRUYsSUFBSSxRQUFRLEVBQUUsZ0JBQWdCLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDMUMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsSUFBSSxRQUFRLEVBQUUsZ0JBQWdCLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDL0MsTUFBTSxJQUFJLHVCQUFjLENBQUMsaUVBQWlFLENBQUMsQ0FBQztRQUM5RixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRVMsS0FBSyxDQUFDLFNBQVM7UUFDdkIsaUVBQWlFO1FBQ2pFLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUNqQyxDQUFDO1FBRUYsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUNoQyxPQUFPLEVBQ1AsS0FBSyxFQUFD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
@@ -6,6 +6,11 @@ declare const updateRecordPatchSchema: z.ZodObject<{
6
6
  declare const triggerActionPatchSchema: z.ZodObject<{
7
7
  userConfirmed: z.ZodBoolean;
8
8
  actionResult: z.ZodOptional<z.ZodUnknown>;
9
+ submittedValues: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
10
+ submissionOutcome: z.ZodOptional<z.ZodEnum<{
11
+ executed: "executed";
12
+ "pending-approval": "pending-approval";
13
+ }>>;
9
14
  }, z.core.$strict>;
10
15
  declare const mcpPatchSchema: z.ZodObject<{
11
16
  userConfirmed: z.ZodBoolean;
@@ -18,6 +18,12 @@ const triggerActionPatchSchema = zod_1.z
18
18
  // presence check lives in the step-executor so a descriptive StepStateError can
19
19
  // name the runId/stepIndex — not achievable from inside a zod schema.
20
20
  actionResult: zod_1.z.unknown().optional(),
21
+ // The front executes the action natively, so it self-reports the final form
22
+ // values it submitted (lets the executor diff against the AI prefill for the audit trail).
23
+ submittedValues: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
24
+ // Whether the native submit actually executed the action, or only created an approval request
25
+ // (non-blocking): downstream AI steps must be told an awaiting-approval action did NOT run.
26
+ submissionOutcome: zod_1.z.enum(['executed', 'pending-approval']).optional(),
21
27
  })
22
28
  .strict();
23
29
  const mcpPatchSchema = zod_1.z.object({ userConfirmed: zod_1.z.boolean() }).strict();
@@ -76,4 +82,4 @@ const patchBodySchemas = {
76
82
  condition: conditionPatchSchema,
77
83
  };
78
84
  exports.default = patchBodySchemas;
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZy1kYXRhLXZhbGlkYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaHR0cC9wZW5kaW5nLWRhdGEtdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUF3QjtBQUV4QiwyRUFBdUU7QUFFdkUsK0VBQStFO0FBQy9FLGtGQUFrRjtBQUNsRiwwQ0FBMEM7QUFFMUMsTUFBTSx1QkFBdUIsR0FBRyxPQUFDO0tBQzlCLE1BQU0sQ0FBQztJQUNOLGFBQWEsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFO0lBQzFCLEtBQUssRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzlCLENBQUM7S0FDRCxNQUFNLEVBQUUsQ0FBQztBQUVaLE1BQU0sd0JBQXdCLEdBQUcsT0FBQztLQUMvQixNQUFNLENBQUM7SUFDTixhQUFhLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRTtJQUMxQixnRkFBZ0Y7SUFDaEYsZ0ZBQWdGO0lBQ2hGLHNFQUFzRTtJQUN0RSxZQUFZLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUNyQyxDQUFDO0tBQ0QsTUFBTSxFQUFFLENBQUM7QUFFWixNQUFNLGNBQWMsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsYUFBYSxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFFekUsc0JBQXNCO0FBQ3RCLHVGQUF1RjtBQUN2Riw2QkFBNkI7QUFDN0Isc0ZBQXNGO0FBQ3RGLGdGQUFnRjtBQUNoRixnRkFBZ0Y7QUFDaEYscUZBQXFGO0FBQ3JGLG1GQUFtRjtBQUNuRixNQUFNLDRCQUE0QixHQUFHLE9BQUM7S0FDbkMsTUFBTSxDQUFDO0lBQ04sYUFBYSxFQUFFLE9BQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDckMsc0ZBQXNGO0lBQ3RGLG9GQUFvRjtJQUNwRixrRkFBa0Y7SUFDbEYsb0RBQW9EO0lBQ3BELFNBQVMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTtJQUN2QyxvRkFBb0Y7SUFDcEYsbUZBQW1GO0lBQ25GLGlGQUFpRjtJQUNqRixxRUFBcUU7SUFDckUsZ0JBQWdCLEVBQUUsT0FBQztTQUNoQixNQUFNLEVBQUU7U0FDUixHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ04sU0FBUyxDQUFDLDBDQUFtQixDQUFDO1NBQzlCLElBQUksQ0FBQyxPQUFDLENBQUMsS0FBSyxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNoQyxRQUFRLEVBQUU7Q0FDZCxDQUFDO0tBQ0QsTUFBTSxFQUFFO0tBQ1IsTUFBTSxDQUNMLElBQUksQ0FBQyxFQUFFO0lBQ0wsNkRBQTZEO0lBQzdELElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTO1FBQUUsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQztJQUMxRSxtRUFBbUU7SUFDbkUsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVM7UUFBRSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLENBQUM7SUFFN0UsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLEVBQ0Q7SUFDRSxPQUFPLEVBQ0wseUVBQXlFO1FBQ3pFLHNFQUFzRTtDQUN6RSxDQUNGLENBQUM7QUFDSixNQUFNLG1CQUFtQixHQUFHLE9BQUM7S0FDMUIsTUFBTSxDQUFDO0lBQ04sU0FBUyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDakMsQ0FBQztLQUNELE1BQU0sRUFBRSxDQUFDO0FBRVosTUFBTSxvQkFBb0IsR0FBRyxPQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsY0FBYyxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7QUFpQi9FLE1BQU0sZ0JBQWdCLEdBQXFEO0lBQ3pFLGVBQWUsRUFBRSx1QkFBdUI7SUFDeEMsZ0JBQWdCLEVBQUUsd0JBQXdCO0lBQzFDLEdBQUcsRUFBRSxjQUFjO0lBQ25CLHFCQUFxQixFQUFFLDRCQUE0QjtJQUNuRCxRQUFRLEVBQUUsbUJBQW1CO0lBQzdCLFNBQVMsRUFBRSxvQkFBb0I7Q0FDaEMsQ0FBQztBQUVGLGtCQUFlLGdCQUFnQixDQUFDIn0=
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVuZGluZy1kYXRhLXZhbGlkYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaHR0cC9wZW5kaW5nLWRhdGEtdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZCQUF3QjtBQUV4QiwyRUFBdUU7QUFFdkUsK0VBQStFO0FBQy9FLGtGQUFrRjtBQUNsRiwwQ0FBMEM7QUFFMUMsTUFBTSx1QkFBdUIsR0FBRyxPQUFDO0tBQzlCLE1BQU0sQ0FBQztJQUNOLGFBQWEsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFO0lBQzFCLEtBQUssRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQzlCLENBQUM7S0FDRCxNQUFNLEVBQUUsQ0FBQztBQUVaLE1BQU0sd0JBQXdCLEdBQUcsT0FBQztLQUMvQixNQUFNLENBQUM7SUFDTixhQUFhLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRTtJQUMxQixnRkFBZ0Y7SUFDaEYsZ0ZBQWdGO0lBQ2hGLHNFQUFzRTtJQUN0RSxZQUFZLEVBQUUsT0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNwQyw0RUFBNEU7SUFDNUUsMkZBQTJGO0lBQzNGLGVBQWUsRUFBRSxPQUFDLENBQUMsTUFBTSxDQUFDLE9BQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDN0QsOEZBQThGO0lBQzlGLDRGQUE0RjtJQUM1RixpQkFBaUIsRUFBRSxPQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7Q0FDdkUsQ0FBQztLQUNELE1BQU0sRUFBRSxDQUFDO0FBRVosTUFBTSxjQUFjLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBRXpFLHNCQUFzQjtBQUN0Qix1RkFBdUY7QUFDdkYsNkJBQTZCO0FBQzdCLHNGQUFzRjtBQUN0RixnRkFBZ0Y7QUFDaEYsZ0ZBQWdGO0FBQ2hGLHFGQUFxRjtBQUNyRixtRkFBbUY7QUFDbkYsTUFBTSw0QkFBNEIsR0FBRyxPQUFDO0tBQ25DLE1BQU0sQ0FBQztJQUNOLGFBQWEsRUFBRSxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFO0lBQ3JDLHNGQUFzRjtJQUN0RixvRkFBb0Y7SUFDcEYsa0ZBQWtGO0lBQ2xGLG9EQUFvRDtJQUNwRCxTQUFTLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7SUFDdkMsb0ZBQW9GO0lBQ3BGLG1GQUFtRjtJQUNuRixpRkFBaUY7SUFDakYscUVBQXFFO0lBQ3JFLGdCQUFnQixFQUFFLE9BQUM7U0FDaEIsTUFBTSxFQUFFO1NBQ1IsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNOLFNBQVMsQ0FBQywwQ0FBbUIsQ0FBQztTQUM5QixJQUFJLENBQUMsT0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEMsUUFBUSxFQUFFO0NBQ2QsQ0FBQztLQUNELE1BQU0sRUFBRTtLQUNSLE1BQU0sQ0FDTCxJQUFJLENBQUMsRUFBRTtJQUNMLDZEQUE2RDtJQUM3RCxJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssU0FBUztRQUFFLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUM7SUFDMUUsbUVBQW1FO0lBQ25FLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTO1FBQUUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssU0FBUyxDQUFDO0lBRTdFLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxFQUNEO0lBQ0UsT0FBTyxFQUNMLHlFQUF5RTtRQUN6RSxzRUFBc0U7Q0FDekUsQ0FDRixDQUFDO0FBQ0osTUFBTSxtQkFBbUIsR0FBRyxPQUFDO0tBQzFCLE1BQU0sQ0FBQztJQUNOLFNBQVMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0NBQ2pDLENBQUM7S0FDRCxNQUFNLEVBQUUsQ0FBQztBQUVaLE1BQU0sb0JBQW9CLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLGNBQWMsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBaUIvRSxNQUFNLGdCQUFnQixHQUFxRDtJQUN6RSxlQUFlLEVBQUUsdUJBQXVCO0lBQ3hDLGdCQUFnQixFQUFFLHdCQUF3QjtJQUMxQyxHQUFHLEVBQUUsY0FBYztJQUNuQixxQkFBcUIsRUFBRSw0QkFBNEI7SUFDbkQsUUFBUSxFQUFFLG1CQUFtQjtJQUM3QixTQUFTLEVBQUUsb0JBQW9CO0NBQ2hDLENBQUM7QUFFRixrQkFBZSxnQkFBZ0IsQ0FBQyJ9
@@ -22,6 +22,7 @@ export type GetRelatedDataQuery = {
22
22
  relation: string;
23
23
  relatedSchema: CollectionSchema;
24
24
  fields?: string[];
25
+ filters?: unknown;
25
26
  } & Limit;
26
27
  export type GetSingleRelatedDataQuery = {
27
28
  collection: string;
@@ -34,6 +35,26 @@ export type ExecuteActionQuery = {
34
35
  collection: string;
35
36
  action: string;
36
37
  id?: Id[];
38
+ values?: Record<string, unknown>;
39
+ };
40
+ export type GetActionFormQuery = {
41
+ collection: string;
42
+ action: string;
43
+ id: Id[];
44
+ values?: Record<string, unknown>;
45
+ };
46
+ export type ActionFormField = {
47
+ name: string;
48
+ type: string;
49
+ value?: unknown;
50
+ isRequired: boolean;
51
+ enumValues?: string[];
52
+ };
53
+ export type ActionForm = {
54
+ fields: ActionFormField[];
55
+ canExecute: boolean;
56
+ requiredFields: string[];
57
+ skippedFields: string[];
37
58
  };
38
59
  export type GetActionFormInfoQuery = {
39
60
  collection: string;
@@ -58,6 +79,7 @@ export interface AgentPort {
58
79
  getActionFormInfo(query: GetActionFormInfoQuery, user: StepUser): Promise<{
59
80
  hasForm: boolean;
60
81
  }>;
82
+ getActionForm(query: GetActionFormQuery, user: StepUser): Promise<ActionForm>;
61
83
  probe(): Promise<void>;
62
84
  }
63
85
  //# sourceMappingURL=agent-port.d.ts.map
@@ -1,3 +1,4 @@
1
+ import type { ActionFormField } from '../ports/agent-port';
1
2
  import type { RecordId, RecordRef } from './validated/collection';
2
3
  import type { LoadRelatedRecordConfirmation, McpConfirmation, TriggerActionConfirmation, UpdateRecordConfirmation } from '../http/pending-data-validators';
3
4
  interface BaseStepExecutionData {
@@ -58,6 +59,17 @@ export interface ActionRef {
58
59
  name: string;
59
60
  displayName: string;
60
61
  }
62
+ export interface AiFilledFormValue {
63
+ field: string;
64
+ value: unknown;
65
+ }
66
+ export interface TriggerActionPendingData extends ActionRef {
67
+ form?: {
68
+ fields: ActionFormField[];
69
+ aiFilledValues: AiFilledFormValue[];
70
+ };
71
+ }
72
+ export type TriggerActionSubmissionOutcome = 'executed' | 'pending-approval';
61
73
  export interface RelationRef {
62
74
  name: string;
63
75
  displayName: string;
@@ -67,11 +79,15 @@ export interface TriggerRecordActionStepExecutionData extends MutatingStepExecut
67
79
  executionParams?: ActionRef;
68
80
  executionResult?: {
69
81
  success: true;
70
- actionResult: unknown;
82
+ actionResult?: unknown;
83
+ submissionOutcome?: TriggerActionSubmissionOutcome;
84
+ submittedValues?: Record<string, unknown>;
85
+ aiFilledValues?: AiFilledFormValue[];
86
+ submittedBy?: 'ai' | 'user';
71
87
  } | {
72
88
  skipped: true;
73
89
  };
74
- pendingData?: ActionRef;
90
+ pendingData?: TriggerActionPendingData;
75
91
  selectedRecordRef: RecordRef;
76
92
  }
77
93
  export interface McpToolRef {
@@ -48,12 +48,13 @@ export declare const StepSchema: z.ZodObject<{
48
48
  title: z.ZodOptional<z.ZodString>;
49
49
  }, z.core.$strip>, z.ZodObject<{
50
50
  type: z.ZodLiteral<import("./step-definition").StepType.TriggerAction>;
51
- executionType: z.ZodCatch<z.ZodDefault<z.ZodEnum<{
51
+ executionType: z.ZodDefault<z.ZodEnum<{
52
+ manual: import("./step-definition").StepExecutionMode.Manual;
52
53
  "automated-with-confirmation": import("./step-definition").StepExecutionMode.AutomatedWithConfirmation;
53
54
  "fully-automated": import("./step-definition").StepExecutionMode.FullyAutomated;
54
- }>>>;
55
+ }>>;
55
56
  preRecordedArgs: z.ZodOptional<z.ZodObject<{
56
- selectedRecordStepIndex: z.ZodOptional<z.ZodNumber>;
57
+ selectedRecordStepId: z.ZodOptional<z.ZodString>;
57
58
  actionName: z.ZodOptional<z.ZodString>;
58
59
  }, z.core.$strip>>;
59
60
  prompt: z.ZodOptional<z.ZodString>;
@@ -66,9 +67,9 @@ export declare const StepSchema: z.ZodObject<{
66
67
  "fully-automated": import("./step-definition").StepExecutionMode.FullyAutomated;
67
68
  }>>>;
68
69
  preRecordedArgs: z.ZodOptional<z.ZodObject<{
69
- selectedRecordStepIndex: z.ZodOptional<z.ZodNumber>;
70
+ selectedRecordStepId: z.ZodOptional<z.ZodString>;
70
71
  relationName: z.ZodOptional<z.ZodString>;
71
- selectedRecordIndex: z.ZodOptional<z.ZodNumber>;
72
+ filters: z.ZodOptional<z.ZodUnknown>;
72
73
  }, z.core.$strip>>;
73
74
  prompt: z.ZodOptional<z.ZodString>;
74
75
  aiConfigName: z.ZodOptional<z.ZodString>;
@@ -181,12 +182,13 @@ export declare const AvailableStepExecutionSchema: z.ZodObject<{
181
182
  title: z.ZodOptional<z.ZodString>;
182
183
  }, z.core.$strip>, z.ZodObject<{
183
184
  type: z.ZodLiteral<import("./step-definition").StepType.TriggerAction>;
184
- executionType: z.ZodCatch<z.ZodDefault<z.ZodEnum<{
185
+ executionType: z.ZodDefault<z.ZodEnum<{
186
+ manual: import("./step-definition").StepExecutionMode.Manual;
185
187
  "automated-with-confirmation": import("./step-definition").StepExecutionMode.AutomatedWithConfirmation;
186
188
  "fully-automated": import("./step-definition").StepExecutionMode.FullyAutomated;
187
- }>>>;
189
+ }>>;
188
190
  preRecordedArgs: z.ZodOptional<z.ZodObject<{
189
- selectedRecordStepIndex: z.ZodOptional<z.ZodNumber>;
191
+ selectedRecordStepId: z.ZodOptional<z.ZodString>;
190
192
  actionName: z.ZodOptional<z.ZodString>;
191
193
  }, z.core.$strip>>;
192
194
  prompt: z.ZodOptional<z.ZodString>;
@@ -199,9 +201,9 @@ export declare const AvailableStepExecutionSchema: z.ZodObject<{
199
201
  "fully-automated": import("./step-definition").StepExecutionMode.FullyAutomated;
200
202
  }>>>;
201
203
  preRecordedArgs: z.ZodOptional<z.ZodObject<{
202
- selectedRecordStepIndex: z.ZodOptional<z.ZodNumber>;
204
+ selectedRecordStepId: z.ZodOptional<z.ZodString>;
203
205
  relationName: z.ZodOptional<z.ZodString>;
204
- selectedRecordIndex: z.ZodOptional<z.ZodNumber>;
206
+ filters: z.ZodOptional<z.ZodUnknown>;
205
207
  }, z.core.$strip>>;
206
208
  prompt: z.ZodOptional<z.ZodString>;
207
209
  aiConfigName: z.ZodOptional<z.ZodString>;
@@ -260,12 +262,13 @@ export declare const AvailableStepExecutionSchema: z.ZodObject<{
260
262
  title: z.ZodOptional<z.ZodString>;
261
263
  }, z.core.$strip>, z.ZodObject<{
262
264
  type: z.ZodLiteral<import("./step-definition").StepType.TriggerAction>;
263
- executionType: z.ZodCatch<z.ZodDefault<z.ZodEnum<{
265
+ executionType: z.ZodDefault<z.ZodEnum<{
266
+ manual: import("./step-definition").StepExecutionMode.Manual;
264
267
  "automated-with-confirmation": import("./step-definition").StepExecutionMode.AutomatedWithConfirmation;
265
268
  "fully-automated": import("./step-definition").StepExecutionMode.FullyAutomated;
266
- }>>>;
269
+ }>>;
267
270
  preRecordedArgs: z.ZodOptional<z.ZodObject<{
268
- selectedRecordStepIndex: z.ZodOptional<z.ZodNumber>;
271
+ selectedRecordStepId: z.ZodOptional<z.ZodString>;
269
272
  actionName: z.ZodOptional<z.ZodString>;
270
273
  }, z.core.$strip>>;
271
274
  prompt: z.ZodOptional<z.ZodString>;
@@ -278,9 +281,9 @@ export declare const AvailableStepExecutionSchema: z.ZodObject<{
278
281
  "fully-automated": import("./step-definition").StepExecutionMode.FullyAutomated;
279
282
  }>>>;
280
283
  preRecordedArgs: z.ZodOptional<z.ZodObject<{
281
- selectedRecordStepIndex: z.ZodOptional<z.ZodNumber>;
284
+ selectedRecordStepId: z.ZodOptional<z.ZodString>;
282
285
  relationName: z.ZodOptional<z.ZodString>;
283
- selectedRecordIndex: z.ZodOptional<z.ZodNumber>;
286
+ filters: z.ZodOptional<z.ZodUnknown>;
284
287
  }, z.core.$strip>>;
285
288
  prompt: z.ZodOptional<z.ZodString>;
286
289
  aiConfigName: z.ZodOptional<z.ZodString>;