@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.
- package/dist/adapters/agent-client-agent-port.d.ts +4 -3
- package/dist/adapters/agent-client-agent-port.js +55 -4
- package/dist/adapters/server-types.d.ts +9 -1
- package/dist/adapters/step-definition-mapper.js +7 -2
- package/dist/errors.d.ts +10 -0
- package/dist/errors.js +33 -2
- package/dist/executors/agent-with-log.d.ts +2 -1
- package/dist/executors/agent-with-log.js +6 -1
- package/dist/executors/load-related-record-step-executor.d.ts +0 -1
- package/dist/executors/load-related-record-step-executor.js +8 -27
- package/dist/executors/record-step-executor.d.ts +1 -0
- package/dist/executors/record-step-executor.js +28 -1
- package/dist/executors/summary/step-execution-formatters.d.ts +1 -0
- package/dist/executors/summary/step-execution-formatters.js +31 -1
- package/dist/executors/trigger-record-action-step-executor.d.ts +8 -1
- package/dist/executors/trigger-record-action-step-executor.js +209 -26
- package/dist/http/pending-data-validators.d.ts +5 -0
- package/dist/http/pending-data-validators.js +7 -1
- package/dist/ports/agent-port.d.ts +22 -0
- package/dist/types/step-execution-data.d.ts +18 -2
- package/dist/types/validated/execution.d.ts +18 -15
- package/dist/types/validated/step-definition.d.ts +20 -15
- package/dist/types/validated/step-definition.js +25 -9
- package/package.json +2 -2
|
@@ -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
|
|
36
|
-
//
|
|
37
|
-
|
|
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,
|
|
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
|
-
|
|
56
|
-
|
|
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
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
//
|
|
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: {
|
|
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
|
-
/**
|
|
117
|
-
|
|
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: {
|
|
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,
|
|
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
|
|
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?:
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
70
|
+
selectedRecordStepId: z.ZodOptional<z.ZodString>;
|
|
70
71
|
relationName: z.ZodOptional<z.ZodString>;
|
|
71
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
204
|
+
selectedRecordStepId: z.ZodOptional<z.ZodString>;
|
|
203
205
|
relationName: z.ZodOptional<z.ZodString>;
|
|
204
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
284
|
+
selectedRecordStepId: z.ZodOptional<z.ZodString>;
|
|
282
285
|
relationName: z.ZodOptional<z.ZodString>;
|
|
283
|
-
|
|
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>;
|