@uns-kit/assistant-workflow 3.0.1 → 3.0.3
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/API_STABILITY.md +38 -0
- package/README.md +40 -0
- package/dist/definition-diagnostics.d.ts +1 -1
- package/dist/definition-diagnostics.d.ts.map +1 -1
- package/dist/definition-diagnostics.js +62 -0
- package/dist/definition-diagnostics.js.map +1 -1
- package/dist/definition-diff.d.ts +9 -0
- package/dist/definition-diff.d.ts.map +1 -1
- package/dist/definition-diff.js +39 -1
- package/dist/definition-diff.js.map +1 -1
- package/dist/definition.d.ts +5 -0
- package/dist/definition.d.ts.map +1 -1
- package/dist/definition.js +38 -0
- package/dist/definition.js.map +1 -1
- package/dist/execution-budget.d.ts +38 -0
- package/dist/execution-budget.d.ts.map +1 -0
- package/dist/execution-budget.js +65 -0
- package/dist/execution-budget.js.map +1 -0
- package/dist/execution-plan.d.ts +8 -0
- package/dist/execution-plan.d.ts.map +1 -1
- package/dist/execution-plan.js +47 -1
- package/dist/execution-plan.js.map +1 -1
- package/dist/execution-policy.d.ts +9 -0
- package/dist/execution-policy.d.ts.map +1 -0
- package/dist/execution-policy.js +21 -0
- package/dist/execution-policy.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/planning.d.ts +1 -0
- package/dist/planning.d.ts.map +1 -1
- package/dist/planning.js +1 -0
- package/dist/planning.js.map +1 -1
- package/dist/tool-executor.d.ts +7 -0
- package/dist/tool-executor.d.ts.map +1 -1
- package/dist/tool-executor.js +180 -55
- package/dist/tool-executor.js.map +1 -1
- package/dist/tool-invocations.d.ts +7 -0
- package/dist/tool-invocations.d.ts.map +1 -1
- package/dist/tool-invocations.js +43 -2
- package/dist/tool-invocations.js.map +1 -1
- package/package.json +11 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-executor.d.ts","sourceRoot":"","sources":["../src/tool-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sCAAsC,EACtC,yCAAyC,EACzC,6BAA6B,EAC9B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EACV,+BAA+B,EAC/B,oCAAoC,EACrC,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-executor.d.ts","sourceRoot":"","sources":["../src/tool-executor.ts"],"names":[],"mappings":"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"}
|
package/dist/tool-executor.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { buildAssistantWorkflowExecutionBudgetAssessment, buildAssistantWorkflowExecutionBudgetTracePayload, formatAssistantWorkflowExecutionBudgetViolation, } from "./execution-budget.js";
|
|
2
|
+
import { resolveAssistantWorkflowExecutionPolicy } from "./execution-policy.js";
|
|
1
3
|
import { assistantWorkflowToolError, assistantWorkflowToolSkipped, assistantWorkflowToolSuccess, buildAssistantWorkflowToolResultsTracePayload, summarizeAssistantWorkflowToolResults, } from "./tool-results.js";
|
|
2
4
|
/**
|
|
3
5
|
* Adapts provider-specific integrations to the generic invocation executor.
|
|
@@ -19,75 +21,141 @@ export function createAssistantWorkflowToolProviderExecutor(executors, options =
|
|
|
19
21
|
}
|
|
20
22
|
export async function executeAssistantWorkflowToolInvocationQueue(queue, executor, options = {}) {
|
|
21
23
|
const results = [];
|
|
22
|
-
const continueOnError = options.continueOnError === true;
|
|
23
24
|
const now = options.now ?? (() => Date.now());
|
|
25
|
+
const executionPolicy = queue.executionPolicy ?? resolveAssistantWorkflowExecutionPolicy();
|
|
26
|
+
const continueIndependent = options.continueOnError !== undefined
|
|
27
|
+
? options.continueOnError
|
|
28
|
+
: executionPolicy.failureMode === "continue-independent";
|
|
29
|
+
const executionBudget = options.executionBudget ?? queue.executionBudget ?? null;
|
|
30
|
+
const preflightBudgetAssessment = executionBudget
|
|
31
|
+
? buildAssistantWorkflowExecutionBudgetAssessment(executionBudget, {
|
|
32
|
+
toolCallCount: queue.invocations.reduce((count, invocation) => count + normalizeMaxAttempts(invocation.maxAttempts), 0),
|
|
33
|
+
})
|
|
34
|
+
: null;
|
|
35
|
+
if (preflightBudgetAssessment?.status === "blocked") {
|
|
36
|
+
appendBudgetBlockedResults(results, queue.invocations, preflightBudgetAssessment, 0, queue.status, options.onEvent);
|
|
37
|
+
return buildExecutionReport(queue, results, preflightBudgetAssessment);
|
|
38
|
+
}
|
|
39
|
+
const executionStartedAt = executionBudget ? now() : null;
|
|
40
|
+
let startedToolCallCount = 0;
|
|
41
|
+
let elapsedMs = 0;
|
|
42
|
+
const failedStepIds = new Set();
|
|
24
43
|
for (const [invocationIndex, invocation] of queue.invocations.entries()) {
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
invocation,
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}));
|
|
32
|
-
try {
|
|
33
|
-
const output = await executor(invocation, {
|
|
34
|
-
invocationIndex,
|
|
35
|
-
queueStatus: queue.status,
|
|
36
|
-
args: readInvocationArgs(options.argsByInvocationId, invocation.id),
|
|
37
|
-
});
|
|
38
|
-
const durationMs = now() - startedAt;
|
|
39
|
-
results.push(assistantWorkflowToolSuccess({
|
|
40
|
-
invocationId: invocation.id,
|
|
41
|
-
toolName: invocation.toolName,
|
|
42
|
-
stepId: invocation.stepId,
|
|
43
|
-
provider: invocation.provider,
|
|
44
|
-
output,
|
|
45
|
-
durationMs,
|
|
46
|
-
}));
|
|
47
|
-
emitToolExecutionEvent(options.onEvent, createToolExecutionEvent({
|
|
48
|
-
phase: "succeeded",
|
|
49
|
-
invocation,
|
|
50
|
-
invocationIndex,
|
|
51
|
-
queueStatus: queue.status,
|
|
52
|
-
durationMs,
|
|
53
|
-
}));
|
|
44
|
+
const failedDependencyId = (invocation.dependsOnStepIds ?? []).find((stepId) => failedStepIds.has(stepId));
|
|
45
|
+
if (failedDependencyId) {
|
|
46
|
+
const errorMessage = `dependency step failed: ${failedDependencyId}`;
|
|
47
|
+
appendSkippedInvocation(results, invocation, errorMessage, invocationIndex, queue.status, options.onEvent);
|
|
48
|
+
failedStepIds.add(invocation.stepId);
|
|
49
|
+
continue;
|
|
54
50
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
51
|
+
const maxAttempts = normalizeMaxAttempts(invocation.maxAttempts);
|
|
52
|
+
const invocationStartedAt = now();
|
|
53
|
+
let invocationFailed = false;
|
|
54
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
|
|
55
|
+
const attemptStartedAt = attempt === 1 ? invocationStartedAt : now();
|
|
56
|
+
if (executionBudget && executionStartedAt !== null) {
|
|
57
|
+
elapsedMs = Math.max(0, attemptStartedAt - executionStartedAt);
|
|
58
|
+
const assessment = buildAssistantWorkflowExecutionBudgetAssessment(executionBudget, {
|
|
59
|
+
toolCallCount: startedToolCallCount,
|
|
60
|
+
elapsedMs,
|
|
61
|
+
});
|
|
62
|
+
if (assessment.status === "blocked") {
|
|
63
|
+
appendBudgetBlockedResults(results, queue.invocations.slice(invocationIndex), assessment, invocationIndex, queue.status, options.onEvent);
|
|
64
|
+
return buildExecutionReport(queue, results, assessment);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
startedToolCallCount += 1;
|
|
68
68
|
emitToolExecutionEvent(options.onEvent, createToolExecutionEvent({
|
|
69
|
-
phase: "
|
|
69
|
+
phase: "started",
|
|
70
70
|
invocation,
|
|
71
71
|
invocationIndex,
|
|
72
72
|
queueStatus: queue.status,
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
retryable,
|
|
73
|
+
attempt,
|
|
74
|
+
maxAttempts,
|
|
76
75
|
}));
|
|
77
|
-
|
|
78
|
-
|
|
76
|
+
try {
|
|
77
|
+
const output = await executor(invocation, {
|
|
78
|
+
invocationIndex,
|
|
79
|
+
queueStatus: queue.status,
|
|
80
|
+
args: readInvocationArgs(options.argsByInvocationId, invocation.id),
|
|
81
|
+
attempt,
|
|
82
|
+
maxAttempts,
|
|
83
|
+
});
|
|
84
|
+
const completedAt = now();
|
|
85
|
+
const durationMs = completedAt - invocationStartedAt;
|
|
86
|
+
if (executionStartedAt !== null)
|
|
87
|
+
elapsedMs = Math.max(0, completedAt - executionStartedAt);
|
|
88
|
+
results.push(assistantWorkflowToolSuccess({
|
|
89
|
+
invocationId: invocation.id,
|
|
90
|
+
toolName: invocation.toolName,
|
|
91
|
+
stepId: invocation.stepId,
|
|
92
|
+
provider: invocation.provider,
|
|
93
|
+
output,
|
|
94
|
+
durationMs,
|
|
95
|
+
}));
|
|
96
|
+
emitToolExecutionEvent(options.onEvent, createToolExecutionEvent({
|
|
97
|
+
phase: "succeeded",
|
|
98
|
+
invocation,
|
|
99
|
+
invocationIndex,
|
|
100
|
+
queueStatus: queue.status,
|
|
101
|
+
durationMs: completedAt - attemptStartedAt,
|
|
102
|
+
attempt,
|
|
103
|
+
maxAttempts,
|
|
104
|
+
}));
|
|
79
105
|
break;
|
|
80
106
|
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
const completedAt = now();
|
|
109
|
+
const errorMessage = getErrorMessage(error);
|
|
110
|
+
const retryable = attempt < maxAttempts || options.retryableOnError === true;
|
|
111
|
+
if (executionStartedAt !== null)
|
|
112
|
+
elapsedMs = Math.max(0, completedAt - executionStartedAt);
|
|
113
|
+
emitToolExecutionEvent(options.onEvent, createToolExecutionEvent({
|
|
114
|
+
phase: "failed",
|
|
115
|
+
invocation,
|
|
116
|
+
invocationIndex,
|
|
117
|
+
queueStatus: queue.status,
|
|
118
|
+
durationMs: completedAt - attemptStartedAt,
|
|
119
|
+
errorMessage,
|
|
120
|
+
retryable,
|
|
121
|
+
attempt,
|
|
122
|
+
maxAttempts,
|
|
123
|
+
}));
|
|
124
|
+
if (attempt < maxAttempts)
|
|
125
|
+
continue;
|
|
126
|
+
results.push(assistantWorkflowToolError({
|
|
127
|
+
invocationId: invocation.id,
|
|
128
|
+
toolName: invocation.toolName,
|
|
129
|
+
stepId: invocation.stepId,
|
|
130
|
+
provider: invocation.provider,
|
|
131
|
+
errorMessage,
|
|
132
|
+
retryable: options.retryableOnError === true,
|
|
133
|
+
durationMs: completedAt - invocationStartedAt,
|
|
134
|
+
}));
|
|
135
|
+
invocationFailed = true;
|
|
136
|
+
failedStepIds.add(invocation.stepId);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (invocationFailed && !continueIndependent) {
|
|
140
|
+
appendSkippedAfterFailure(results, queue.invocations.slice(invocationIndex + 1), invocation.id, invocationIndex + 1, queue.status, options.onEvent);
|
|
141
|
+
break;
|
|
81
142
|
}
|
|
82
143
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
144
|
+
const budgetAssessment = executionBudget
|
|
145
|
+
? buildAssistantWorkflowExecutionBudgetAssessment(executionBudget, {
|
|
146
|
+
toolCallCount: startedToolCallCount,
|
|
147
|
+
elapsedMs,
|
|
148
|
+
})
|
|
149
|
+
: null;
|
|
150
|
+
return buildExecutionReport(queue, results, budgetAssessment);
|
|
88
151
|
}
|
|
89
152
|
export function buildAssistantWorkflowToolExecutionTracePayload(report) {
|
|
90
|
-
return
|
|
153
|
+
return {
|
|
154
|
+
...buildAssistantWorkflowToolResultsTracePayload(report.queue, report.results),
|
|
155
|
+
budgetAssessment: report.budgetAssessment
|
|
156
|
+
? buildAssistantWorkflowExecutionBudgetTracePayload(report.budgetAssessment)
|
|
157
|
+
: null,
|
|
158
|
+
};
|
|
91
159
|
}
|
|
92
160
|
export function buildAssistantWorkflowToolExecutionEventTracePayload(event) {
|
|
93
161
|
return {
|
|
@@ -101,6 +169,8 @@ export function buildAssistantWorkflowToolExecutionEventTracePayload(event) {
|
|
|
101
169
|
durationMs: event.durationMs,
|
|
102
170
|
errorMessage: event.errorMessage,
|
|
103
171
|
retryable: event.retryable,
|
|
172
|
+
...(event.attempt !== undefined ? { attempt: event.attempt } : {}),
|
|
173
|
+
...(event.maxAttempts !== undefined ? { maxAttempts: event.maxAttempts } : {}),
|
|
104
174
|
};
|
|
105
175
|
}
|
|
106
176
|
function appendSkippedAfterFailure(results, invocations, failedInvocationId, invocationIndex, queueStatus, onEvent) {
|
|
@@ -122,6 +192,39 @@ function appendSkippedAfterFailure(results, invocations, failedInvocationId, inv
|
|
|
122
192
|
}));
|
|
123
193
|
}
|
|
124
194
|
}
|
|
195
|
+
function appendBudgetBlockedResults(results, invocations, assessment, invocationIndex, queueStatus, onEvent) {
|
|
196
|
+
const [blockedInvocation, ...remainingInvocations] = invocations;
|
|
197
|
+
if (!blockedInvocation)
|
|
198
|
+
return;
|
|
199
|
+
const errorMessage = formatAssistantWorkflowExecutionBudgetViolation(assessment.violations[0]);
|
|
200
|
+
results.push(assistantWorkflowToolError({
|
|
201
|
+
invocationId: blockedInvocation.id,
|
|
202
|
+
toolName: blockedInvocation.toolName,
|
|
203
|
+
stepId: blockedInvocation.stepId,
|
|
204
|
+
provider: blockedInvocation.provider,
|
|
205
|
+
errorMessage,
|
|
206
|
+
retryable: false,
|
|
207
|
+
durationMs: 0,
|
|
208
|
+
}));
|
|
209
|
+
emitToolExecutionEvent(onEvent, createToolExecutionEvent({
|
|
210
|
+
phase: "failed",
|
|
211
|
+
invocation: blockedInvocation,
|
|
212
|
+
invocationIndex,
|
|
213
|
+
queueStatus,
|
|
214
|
+
durationMs: 0,
|
|
215
|
+
errorMessage,
|
|
216
|
+
retryable: false,
|
|
217
|
+
}));
|
|
218
|
+
appendSkippedAfterFailure(results, remainingInvocations, blockedInvocation.id, invocationIndex + 1, queueStatus, onEvent);
|
|
219
|
+
}
|
|
220
|
+
function buildExecutionReport(queue, results, budgetAssessment) {
|
|
221
|
+
return {
|
|
222
|
+
queue,
|
|
223
|
+
results,
|
|
224
|
+
summary: summarizeAssistantWorkflowToolResults(queue, results),
|
|
225
|
+
budgetAssessment,
|
|
226
|
+
};
|
|
227
|
+
}
|
|
125
228
|
function createToolExecutionEvent(input) {
|
|
126
229
|
return {
|
|
127
230
|
phase: input.phase,
|
|
@@ -134,8 +237,30 @@ function createToolExecutionEvent(input) {
|
|
|
134
237
|
durationMs: input.durationMs ?? null,
|
|
135
238
|
errorMessage: input.errorMessage ?? null,
|
|
136
239
|
retryable: input.retryable ?? null,
|
|
240
|
+
...(input.maxAttempts !== undefined && input.maxAttempts > 1
|
|
241
|
+
? { attempt: input.attempt ?? 1, maxAttempts: input.maxAttempts }
|
|
242
|
+
: {}),
|
|
137
243
|
};
|
|
138
244
|
}
|
|
245
|
+
function appendSkippedInvocation(results, invocation, errorMessage, invocationIndex, queueStatus, onEvent) {
|
|
246
|
+
results.push(assistantWorkflowToolSkipped({
|
|
247
|
+
invocationId: invocation.id,
|
|
248
|
+
toolName: invocation.toolName,
|
|
249
|
+
stepId: invocation.stepId,
|
|
250
|
+
provider: invocation.provider,
|
|
251
|
+
errorMessage,
|
|
252
|
+
}));
|
|
253
|
+
emitToolExecutionEvent(onEvent, createToolExecutionEvent({
|
|
254
|
+
phase: "skipped",
|
|
255
|
+
invocation,
|
|
256
|
+
invocationIndex,
|
|
257
|
+
queueStatus,
|
|
258
|
+
errorMessage,
|
|
259
|
+
}));
|
|
260
|
+
}
|
|
261
|
+
function normalizeMaxAttempts(value) {
|
|
262
|
+
return value === 2 || value === 3 ? value : 1;
|
|
263
|
+
}
|
|
139
264
|
function emitToolExecutionEvent(observer, event) {
|
|
140
265
|
if (!observer)
|
|
141
266
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-executor.js","sourceRoot":"","sources":["../src/tool-executor.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AssistantWorkflowToolBindingDefinition,\n AssistantWorkflowToolCapabilityDefinition,\n AssistantWorkflowToolProvider,\n} from \"./definition.js\";\nimport type {\n AssistantWorkflowToolInvocation,\n AssistantWorkflowToolInvocationQueue,\n} from \"./tool-invocations.js\";\n\nexport type {\n AssistantWorkflowToolInvocation,\n AssistantWorkflowToolInvocationQueue,\n} from \"./tool-invocations.js\";\nimport {\n assistantWorkflowToolError,\n assistantWorkflowToolSkipped,\n assistantWorkflowToolSuccess,\n buildAssistantWorkflowToolResultsTracePayload,\n summarizeAssistantWorkflowToolResults,\n type AssistantWorkflowToolResult,\n type AssistantWorkflowToolResultSummary,\n} from \"./tool-results.js\";\n\nexport type AssistantWorkflowToolExecutorContext = {\n invocationIndex: number;\n queueStatus: AssistantWorkflowToolInvocationQueue[\"status\"];\n args: AssistantWorkflowToolInvocationArgs;\n};\n\nexport type AssistantWorkflowToolInvocationArgs = Readonly<Record<string, unknown>>;\n\nexport type AssistantWorkflowToolInvocationArgsById = Readonly<\n Record<string, AssistantWorkflowToolInvocationArgs>\n>;\n\nexport type AssistantWorkflowToolExecutor = (\n invocation: AssistantWorkflowToolInvocation,\n context: AssistantWorkflowToolExecutorContext,\n) => unknown | Promise<unknown>;\n\nexport type AssistantWorkflowToolInvocationForProvider<\n TProvider extends AssistantWorkflowToolProvider = AssistantWorkflowToolProvider,\n> = Omit<AssistantWorkflowToolInvocation, \"provider\" | \"capability\" | \"binding\"> & {\n provider: TProvider;\n capability: AssistantWorkflowToolCapabilityDefinition & { provider: TProvider };\n binding: Extract<AssistantWorkflowToolBindingDefinition, { provider: TProvider }>;\n};\n\nexport type AssistantWorkflowToolProviderExecutor<\n TProvider extends AssistantWorkflowToolProvider = AssistantWorkflowToolProvider,\n> = (\n invocation: AssistantWorkflowToolInvocationForProvider<TProvider>,\n context: AssistantWorkflowToolExecutorContext,\n) => unknown | Promise<unknown>;\n\nexport type AssistantWorkflowToolProviderExecutors = {\n [TProvider in AssistantWorkflowToolProvider]?: AssistantWorkflowToolProviderExecutor<TProvider>;\n};\n\nexport type AssistantWorkflowToolProviderExecutorOptions = {\n fallback?: AssistantWorkflowToolExecutor;\n};\n\nexport type AssistantWorkflowToolExecutionEventPhase =\n | \"started\"\n | \"succeeded\"\n | \"failed\"\n | \"skipped\";\n\nexport type AssistantWorkflowToolExecutionEvent = {\n phase: AssistantWorkflowToolExecutionEventPhase;\n invocationId: string;\n toolName: string;\n stepId: string;\n provider: AssistantWorkflowToolProvider;\n invocationIndex: number;\n queueStatus: AssistantWorkflowToolInvocationQueue[\"status\"];\n durationMs: number | null;\n errorMessage: string | null;\n retryable: boolean | null;\n};\n\nexport type AssistantWorkflowToolExecutionOptions = {\n continueOnError?: boolean;\n retryableOnError?: boolean;\n now?: () => number;\n argsByInvocationId?: AssistantWorkflowToolInvocationArgsById;\n onEvent?: (event: AssistantWorkflowToolExecutionEvent) => void;\n};\n\nexport type AssistantWorkflowToolExecutionReport = {\n queue: AssistantWorkflowToolInvocationQueue;\n results: AssistantWorkflowToolResult[];\n summary: AssistantWorkflowToolResultSummary;\n};\n\n/**\n * Adapts provider-specific integrations to the generic invocation executor.\n * Applications can add local, HTTP, hosted, MCP, or REPL executors without\n * making queue execution depend on their transport SDKs.\n */\nexport function createAssistantWorkflowToolProviderExecutor(\n executors: AssistantWorkflowToolProviderExecutors,\n options: AssistantWorkflowToolProviderExecutorOptions = {},\n): AssistantWorkflowToolExecutor {\n return async (invocation, context) => {\n const providerExecutor = executors[invocation.provider] as\n | AssistantWorkflowToolProviderExecutor\n | undefined;\n if (providerExecutor) {\n assertInvocationProviderConsistency(invocation);\n return await providerExecutor(\n invocation as AssistantWorkflowToolInvocationForProvider,\n context,\n );\n }\n if (options.fallback) {\n return await options.fallback(invocation, context);\n }\n throw new Error(`No executor configured for assistant workflow tool provider: ${invocation.provider}.`);\n };\n}\n\nexport async function executeAssistantWorkflowToolInvocationQueue(\n queue: AssistantWorkflowToolInvocationQueue,\n executor: AssistantWorkflowToolExecutor,\n options: AssistantWorkflowToolExecutionOptions = {},\n): Promise<AssistantWorkflowToolExecutionReport> {\n const results: AssistantWorkflowToolResult[] = [];\n const continueOnError = options.continueOnError === true;\n const now = options.now ?? (() => Date.now());\n\n for (const [invocationIndex, invocation] of queue.invocations.entries()) {\n const startedAt = now();\n emitToolExecutionEvent(options.onEvent, createToolExecutionEvent({\n phase: \"started\",\n invocation,\n invocationIndex,\n queueStatus: queue.status,\n }));\n try {\n const output = await executor(invocation, {\n invocationIndex,\n queueStatus: queue.status,\n args: readInvocationArgs(options.argsByInvocationId, invocation.id),\n });\n const durationMs = now() - startedAt;\n results.push(\n assistantWorkflowToolSuccess({\n invocationId: invocation.id,\n toolName: invocation.toolName,\n stepId: invocation.stepId,\n provider: invocation.provider,\n output,\n durationMs,\n }),\n );\n emitToolExecutionEvent(options.onEvent, createToolExecutionEvent({\n phase: \"succeeded\",\n invocation,\n invocationIndex,\n queueStatus: queue.status,\n durationMs,\n }));\n } catch (error) {\n const durationMs = now() - startedAt;\n const errorMessage = getErrorMessage(error);\n const retryable = options.retryableOnError === true;\n results.push(\n assistantWorkflowToolError({\n invocationId: invocation.id,\n toolName: invocation.toolName,\n stepId: invocation.stepId,\n provider: invocation.provider,\n errorMessage,\n retryable,\n durationMs,\n }),\n );\n emitToolExecutionEvent(options.onEvent, createToolExecutionEvent({\n phase: \"failed\",\n invocation,\n invocationIndex,\n queueStatus: queue.status,\n durationMs,\n errorMessage,\n retryable,\n }));\n if (!continueOnError) {\n appendSkippedAfterFailure(\n results,\n queue.invocations.slice(invocationIndex + 1),\n invocation.id,\n invocationIndex + 1,\n queue.status,\n options.onEvent,\n );\n break;\n }\n }\n }\n\n return {\n queue,\n results,\n summary: summarizeAssistantWorkflowToolResults(queue, results),\n };\n}\n\nexport function buildAssistantWorkflowToolExecutionTracePayload(\n report: AssistantWorkflowToolExecutionReport,\n): Record<string, unknown> {\n return buildAssistantWorkflowToolResultsTracePayload(report.queue, report.results);\n}\n\nexport function buildAssistantWorkflowToolExecutionEventTracePayload(\n event: AssistantWorkflowToolExecutionEvent,\n): Record<string, unknown> {\n return {\n phase: event.phase,\n invocationId: event.invocationId,\n toolName: event.toolName,\n stepId: event.stepId,\n provider: event.provider,\n invocationIndex: event.invocationIndex,\n queueStatus: event.queueStatus,\n durationMs: event.durationMs,\n errorMessage: event.errorMessage,\n retryable: event.retryable,\n };\n}\n\nfunction appendSkippedAfterFailure(\n results: AssistantWorkflowToolResult[],\n invocations: readonly AssistantWorkflowToolInvocation[],\n failedInvocationId: string,\n invocationIndex: number,\n queueStatus: AssistantWorkflowToolInvocationQueue[\"status\"],\n onEvent: AssistantWorkflowToolExecutionOptions[\"onEvent\"],\n): void {\n for (const [offset, invocation] of invocations.entries()) {\n const errorMessage = `previous invocation failed: ${failedInvocationId}`;\n results.push(\n assistantWorkflowToolSkipped({\n invocationId: invocation.id,\n toolName: invocation.toolName,\n stepId: invocation.stepId,\n provider: invocation.provider,\n errorMessage,\n }),\n );\n emitToolExecutionEvent(onEvent, createToolExecutionEvent({\n phase: \"skipped\",\n invocation,\n invocationIndex: invocationIndex + offset,\n queueStatus,\n errorMessage,\n }));\n }\n}\n\nfunction createToolExecutionEvent(input: {\n phase: AssistantWorkflowToolExecutionEventPhase;\n invocation: AssistantWorkflowToolInvocation;\n invocationIndex: number;\n queueStatus: AssistantWorkflowToolInvocationQueue[\"status\"];\n durationMs?: number;\n errorMessage?: string;\n retryable?: boolean;\n}): AssistantWorkflowToolExecutionEvent {\n return {\n phase: input.phase,\n invocationId: input.invocation.id,\n toolName: input.invocation.toolName,\n stepId: input.invocation.stepId,\n provider: input.invocation.provider,\n invocationIndex: input.invocationIndex,\n queueStatus: input.queueStatus,\n durationMs: input.durationMs ?? null,\n errorMessage: input.errorMessage ?? null,\n retryable: input.retryable ?? null,\n };\n}\n\nfunction emitToolExecutionEvent(\n observer: AssistantWorkflowToolExecutionOptions[\"onEvent\"],\n event: AssistantWorkflowToolExecutionEvent,\n): void {\n if (!observer) return;\n try {\n observer(Object.freeze(event));\n } catch {\n // Instrumentation must not alter the tool execution result.\n }\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error && error.message.trim().length) {\n return error.message.trim();\n }\n if (typeof error === \"string\" && error.trim().length) {\n return error.trim();\n }\n return \"tool invocation failed\";\n}\n\nfunction readInvocationArgs(\n argsByInvocationId: AssistantWorkflowToolInvocationArgsById | undefined,\n invocationId: string,\n): AssistantWorkflowToolInvocationArgs {\n const rawArgs = argsByInvocationId?.[invocationId];\n if (!isRecord(rawArgs)) return EMPTY_TOOL_INVOCATION_ARGS;\n return Object.freeze({ ...rawArgs });\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction assertInvocationProviderConsistency(invocation: AssistantWorkflowToolInvocation): void {\n if (invocation.provider !== invocation.binding.provider) {\n throw new Error(\n `Assistant workflow invocation provider ${invocation.provider} does not match binding provider ${invocation.binding.provider}.`,\n );\n }\n if (invocation.provider !== invocation.capability.provider) {\n throw new Error(\n `Assistant workflow invocation provider ${invocation.provider} does not match capability provider ${invocation.capability.provider}.`,\n );\n }\n}\n\nconst EMPTY_TOOL_INVOCATION_ARGS: AssistantWorkflowToolInvocationArgs = Object.freeze({});\n"]}
|
|
1
|
+
{"version":3,"file":"tool-executor.js","sourceRoot":"","sources":["../src/tool-executor.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AssistantWorkflowToolBindingDefinition,\n AssistantWorkflowToolCapabilityDefinition,\n AssistantWorkflowToolProvider,\n} from \"./definition.js\";\nimport type {\n AssistantWorkflowToolInvocation,\n AssistantWorkflowToolInvocationQueue,\n} from \"./tool-invocations.js\";\nimport {\n buildAssistantWorkflowExecutionBudgetAssessment,\n buildAssistantWorkflowExecutionBudgetTracePayload,\n formatAssistantWorkflowExecutionBudgetViolation,\n type AssistantWorkflowExecutionBudget,\n type AssistantWorkflowExecutionBudgetAssessment,\n} from \"./execution-budget.js\";\nimport { resolveAssistantWorkflowExecutionPolicy } from \"./execution-policy.js\";\n\nexport type {\n AssistantWorkflowToolInvocation,\n AssistantWorkflowToolInvocationQueue,\n} from \"./tool-invocations.js\";\nimport {\n assistantWorkflowToolError,\n assistantWorkflowToolSkipped,\n assistantWorkflowToolSuccess,\n buildAssistantWorkflowToolResultsTracePayload,\n summarizeAssistantWorkflowToolResults,\n type AssistantWorkflowToolResult,\n type AssistantWorkflowToolResultSummary,\n} from \"./tool-results.js\";\n\nexport type AssistantWorkflowToolExecutorContext = {\n invocationIndex: number;\n queueStatus: AssistantWorkflowToolInvocationQueue[\"status\"];\n args: AssistantWorkflowToolInvocationArgs;\n attempt?: number;\n maxAttempts?: number;\n};\n\nexport type AssistantWorkflowToolInvocationArgs = Readonly<Record<string, unknown>>;\n\nexport type AssistantWorkflowToolInvocationArgsById = Readonly<\n Record<string, AssistantWorkflowToolInvocationArgs>\n>;\n\nexport type AssistantWorkflowToolExecutor = (\n invocation: AssistantWorkflowToolInvocation,\n context: AssistantWorkflowToolExecutorContext,\n) => unknown | Promise<unknown>;\n\nexport type AssistantWorkflowToolInvocationForProvider<\n TProvider extends AssistantWorkflowToolProvider = AssistantWorkflowToolProvider,\n> = Omit<AssistantWorkflowToolInvocation, \"provider\" | \"capability\" | \"binding\"> & {\n provider: TProvider;\n capability: AssistantWorkflowToolCapabilityDefinition & { provider: TProvider };\n binding: Extract<AssistantWorkflowToolBindingDefinition, { provider: TProvider }>;\n};\n\nexport type AssistantWorkflowToolProviderExecutor<\n TProvider extends AssistantWorkflowToolProvider = AssistantWorkflowToolProvider,\n> = (\n invocation: AssistantWorkflowToolInvocationForProvider<TProvider>,\n context: AssistantWorkflowToolExecutorContext,\n) => unknown | Promise<unknown>;\n\nexport type AssistantWorkflowToolProviderExecutors = {\n [TProvider in AssistantWorkflowToolProvider]?: AssistantWorkflowToolProviderExecutor<TProvider>;\n};\n\nexport type AssistantWorkflowToolProviderExecutorOptions = {\n fallback?: AssistantWorkflowToolExecutor;\n};\n\nexport type AssistantWorkflowToolExecutionEventPhase =\n | \"started\"\n | \"succeeded\"\n | \"failed\"\n | \"skipped\";\n\nexport type AssistantWorkflowToolExecutionEvent = {\n phase: AssistantWorkflowToolExecutionEventPhase;\n invocationId: string;\n toolName: string;\n stepId: string;\n provider: AssistantWorkflowToolProvider;\n invocationIndex: number;\n queueStatus: AssistantWorkflowToolInvocationQueue[\"status\"];\n durationMs: number | null;\n errorMessage: string | null;\n retryable: boolean | null;\n attempt?: number;\n maxAttempts?: number;\n};\n\nexport type AssistantWorkflowToolExecutionOptions = {\n continueOnError?: boolean;\n retryableOnError?: boolean;\n now?: () => number;\n argsByInvocationId?: AssistantWorkflowToolInvocationArgsById;\n onEvent?: (event: AssistantWorkflowToolExecutionEvent) => void;\n executionBudget?: AssistantWorkflowExecutionBudget;\n};\n\nexport type AssistantWorkflowToolExecutionReport = {\n queue: AssistantWorkflowToolInvocationQueue;\n results: AssistantWorkflowToolResult[];\n summary: AssistantWorkflowToolResultSummary;\n budgetAssessment?: AssistantWorkflowExecutionBudgetAssessment | null;\n};\n\n/**\n * Adapts provider-specific integrations to the generic invocation executor.\n * Applications can add local, HTTP, hosted, MCP, or REPL executors without\n * making queue execution depend on their transport SDKs.\n */\nexport function createAssistantWorkflowToolProviderExecutor(\n executors: AssistantWorkflowToolProviderExecutors,\n options: AssistantWorkflowToolProviderExecutorOptions = {},\n): AssistantWorkflowToolExecutor {\n return async (invocation, context) => {\n const providerExecutor = executors[invocation.provider] as\n | AssistantWorkflowToolProviderExecutor\n | undefined;\n if (providerExecutor) {\n assertInvocationProviderConsistency(invocation);\n return await providerExecutor(\n invocation as AssistantWorkflowToolInvocationForProvider,\n context,\n );\n }\n if (options.fallback) {\n return await options.fallback(invocation, context);\n }\n throw new Error(`No executor configured for assistant workflow tool provider: ${invocation.provider}.`);\n };\n}\n\nexport async function executeAssistantWorkflowToolInvocationQueue(\n queue: AssistantWorkflowToolInvocationQueue,\n executor: AssistantWorkflowToolExecutor,\n options: AssistantWorkflowToolExecutionOptions = {},\n): Promise<AssistantWorkflowToolExecutionReport> {\n const results: AssistantWorkflowToolResult[] = [];\n const now = options.now ?? (() => Date.now());\n const executionPolicy = queue.executionPolicy ?? resolveAssistantWorkflowExecutionPolicy();\n const continueIndependent = options.continueOnError !== undefined\n ? options.continueOnError\n : executionPolicy.failureMode === \"continue-independent\";\n const executionBudget = options.executionBudget ?? queue.executionBudget ?? null;\n const preflightBudgetAssessment = executionBudget\n ? buildAssistantWorkflowExecutionBudgetAssessment(executionBudget, {\n toolCallCount: queue.invocations.reduce(\n (count, invocation) => count + normalizeMaxAttempts(invocation.maxAttempts),\n 0,\n ),\n })\n : null;\n if (preflightBudgetAssessment?.status === \"blocked\") {\n appendBudgetBlockedResults(\n results,\n queue.invocations,\n preflightBudgetAssessment,\n 0,\n queue.status,\n options.onEvent,\n );\n return buildExecutionReport(queue, results, preflightBudgetAssessment);\n }\n\n const executionStartedAt = executionBudget ? now() : null;\n let startedToolCallCount = 0;\n let elapsedMs = 0;\n const failedStepIds = new Set<string>();\n\n for (const [invocationIndex, invocation] of queue.invocations.entries()) {\n const failedDependencyId = (invocation.dependsOnStepIds ?? []).find((stepId) => failedStepIds.has(stepId));\n if (failedDependencyId) {\n const errorMessage = `dependency step failed: ${failedDependencyId}`;\n appendSkippedInvocation(results, invocation, errorMessage, invocationIndex, queue.status, options.onEvent);\n failedStepIds.add(invocation.stepId);\n continue;\n }\n\n const maxAttempts = normalizeMaxAttempts(invocation.maxAttempts);\n const invocationStartedAt = now();\n let invocationFailed = false;\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n const attemptStartedAt = attempt === 1 ? invocationStartedAt : now();\n if (executionBudget && executionStartedAt !== null) {\n elapsedMs = Math.max(0, attemptStartedAt - executionStartedAt);\n const assessment = buildAssistantWorkflowExecutionBudgetAssessment(executionBudget, {\n toolCallCount: startedToolCallCount,\n elapsedMs,\n });\n if (assessment.status === \"blocked\") {\n appendBudgetBlockedResults(\n results,\n queue.invocations.slice(invocationIndex),\n assessment,\n invocationIndex,\n queue.status,\n options.onEvent,\n );\n return buildExecutionReport(queue, results, assessment);\n }\n }\n startedToolCallCount += 1;\n emitToolExecutionEvent(options.onEvent, createToolExecutionEvent({\n phase: \"started\",\n invocation,\n invocationIndex,\n queueStatus: queue.status,\n attempt,\n maxAttempts,\n }));\n try {\n const output = await executor(invocation, {\n invocationIndex,\n queueStatus: queue.status,\n args: readInvocationArgs(options.argsByInvocationId, invocation.id),\n attempt,\n maxAttempts,\n });\n const completedAt = now();\n const durationMs = completedAt - invocationStartedAt;\n if (executionStartedAt !== null) elapsedMs = Math.max(0, completedAt - executionStartedAt);\n results.push(assistantWorkflowToolSuccess({\n invocationId: invocation.id,\n toolName: invocation.toolName,\n stepId: invocation.stepId,\n provider: invocation.provider,\n output,\n durationMs,\n }));\n emitToolExecutionEvent(options.onEvent, createToolExecutionEvent({\n phase: \"succeeded\",\n invocation,\n invocationIndex,\n queueStatus: queue.status,\n durationMs: completedAt - attemptStartedAt,\n attempt,\n maxAttempts,\n }));\n break;\n } catch (error) {\n const completedAt = now();\n const errorMessage = getErrorMessage(error);\n const retryable = attempt < maxAttempts || options.retryableOnError === true;\n if (executionStartedAt !== null) elapsedMs = Math.max(0, completedAt - executionStartedAt);\n emitToolExecutionEvent(options.onEvent, createToolExecutionEvent({\n phase: \"failed\",\n invocation,\n invocationIndex,\n queueStatus: queue.status,\n durationMs: completedAt - attemptStartedAt,\n errorMessage,\n retryable,\n attempt,\n maxAttempts,\n }));\n if (attempt < maxAttempts) continue;\n results.push(assistantWorkflowToolError({\n invocationId: invocation.id,\n toolName: invocation.toolName,\n stepId: invocation.stepId,\n provider: invocation.provider,\n errorMessage,\n retryable: options.retryableOnError === true,\n durationMs: completedAt - invocationStartedAt,\n }));\n invocationFailed = true;\n failedStepIds.add(invocation.stepId);\n }\n }\n if (invocationFailed && !continueIndependent) {\n appendSkippedAfterFailure(\n results,\n queue.invocations.slice(invocationIndex + 1),\n invocation.id,\n invocationIndex + 1,\n queue.status,\n options.onEvent,\n );\n break;\n }\n }\n\n const budgetAssessment = executionBudget\n ? buildAssistantWorkflowExecutionBudgetAssessment(executionBudget, {\n toolCallCount: startedToolCallCount,\n elapsedMs,\n })\n : null;\n return buildExecutionReport(queue, results, budgetAssessment);\n}\n\nexport function buildAssistantWorkflowToolExecutionTracePayload(\n report: AssistantWorkflowToolExecutionReport,\n): Record<string, unknown> {\n return {\n ...buildAssistantWorkflowToolResultsTracePayload(report.queue, report.results),\n budgetAssessment: report.budgetAssessment\n ? buildAssistantWorkflowExecutionBudgetTracePayload(report.budgetAssessment)\n : null,\n };\n}\n\nexport function buildAssistantWorkflowToolExecutionEventTracePayload(\n event: AssistantWorkflowToolExecutionEvent,\n): Record<string, unknown> {\n return {\n phase: event.phase,\n invocationId: event.invocationId,\n toolName: event.toolName,\n stepId: event.stepId,\n provider: event.provider,\n invocationIndex: event.invocationIndex,\n queueStatus: event.queueStatus,\n durationMs: event.durationMs,\n errorMessage: event.errorMessage,\n retryable: event.retryable,\n ...(event.attempt !== undefined ? { attempt: event.attempt } : {}),\n ...(event.maxAttempts !== undefined ? { maxAttempts: event.maxAttempts } : {}),\n };\n}\n\nfunction appendSkippedAfterFailure(\n results: AssistantWorkflowToolResult[],\n invocations: readonly AssistantWorkflowToolInvocation[],\n failedInvocationId: string,\n invocationIndex: number,\n queueStatus: AssistantWorkflowToolInvocationQueue[\"status\"],\n onEvent: AssistantWorkflowToolExecutionOptions[\"onEvent\"],\n): void {\n for (const [offset, invocation] of invocations.entries()) {\n const errorMessage = `previous invocation failed: ${failedInvocationId}`;\n results.push(\n assistantWorkflowToolSkipped({\n invocationId: invocation.id,\n toolName: invocation.toolName,\n stepId: invocation.stepId,\n provider: invocation.provider,\n errorMessage,\n }),\n );\n emitToolExecutionEvent(onEvent, createToolExecutionEvent({\n phase: \"skipped\",\n invocation,\n invocationIndex: invocationIndex + offset,\n queueStatus,\n errorMessage,\n }));\n }\n}\n\nfunction appendBudgetBlockedResults(\n results: AssistantWorkflowToolResult[],\n invocations: readonly AssistantWorkflowToolInvocation[],\n assessment: AssistantWorkflowExecutionBudgetAssessment,\n invocationIndex: number,\n queueStatus: AssistantWorkflowToolInvocationQueue[\"status\"],\n onEvent: AssistantWorkflowToolExecutionOptions[\"onEvent\"],\n): void {\n const [blockedInvocation, ...remainingInvocations] = invocations;\n if (!blockedInvocation) return;\n const errorMessage = formatAssistantWorkflowExecutionBudgetViolation(assessment.violations[0]!);\n results.push(assistantWorkflowToolError({\n invocationId: blockedInvocation.id,\n toolName: blockedInvocation.toolName,\n stepId: blockedInvocation.stepId,\n provider: blockedInvocation.provider,\n errorMessage,\n retryable: false,\n durationMs: 0,\n }));\n emitToolExecutionEvent(onEvent, createToolExecutionEvent({\n phase: \"failed\",\n invocation: blockedInvocation,\n invocationIndex,\n queueStatus,\n durationMs: 0,\n errorMessage,\n retryable: false,\n }));\n appendSkippedAfterFailure(\n results,\n remainingInvocations,\n blockedInvocation.id,\n invocationIndex + 1,\n queueStatus,\n onEvent,\n );\n}\n\nfunction buildExecutionReport(\n queue: AssistantWorkflowToolInvocationQueue,\n results: AssistantWorkflowToolResult[],\n budgetAssessment: AssistantWorkflowExecutionBudgetAssessment | null,\n): AssistantWorkflowToolExecutionReport {\n return {\n queue,\n results,\n summary: summarizeAssistantWorkflowToolResults(queue, results),\n budgetAssessment,\n };\n}\n\nfunction createToolExecutionEvent(input: {\n phase: AssistantWorkflowToolExecutionEventPhase;\n invocation: AssistantWorkflowToolInvocation;\n invocationIndex: number;\n queueStatus: AssistantWorkflowToolInvocationQueue[\"status\"];\n durationMs?: number;\n errorMessage?: string;\n retryable?: boolean;\n attempt?: number;\n maxAttempts?: number;\n}): AssistantWorkflowToolExecutionEvent {\n return {\n phase: input.phase,\n invocationId: input.invocation.id,\n toolName: input.invocation.toolName,\n stepId: input.invocation.stepId,\n provider: input.invocation.provider,\n invocationIndex: input.invocationIndex,\n queueStatus: input.queueStatus,\n durationMs: input.durationMs ?? null,\n errorMessage: input.errorMessage ?? null,\n retryable: input.retryable ?? null,\n ...(input.maxAttempts !== undefined && input.maxAttempts > 1\n ? { attempt: input.attempt ?? 1, maxAttempts: input.maxAttempts }\n : {}),\n };\n}\n\nfunction appendSkippedInvocation(\n results: AssistantWorkflowToolResult[],\n invocation: AssistantWorkflowToolInvocation,\n errorMessage: string,\n invocationIndex: number,\n queueStatus: AssistantWorkflowToolInvocationQueue[\"status\"],\n onEvent: AssistantWorkflowToolExecutionOptions[\"onEvent\"],\n): void {\n results.push(assistantWorkflowToolSkipped({\n invocationId: invocation.id,\n toolName: invocation.toolName,\n stepId: invocation.stepId,\n provider: invocation.provider,\n errorMessage,\n }));\n emitToolExecutionEvent(onEvent, createToolExecutionEvent({\n phase: \"skipped\",\n invocation,\n invocationIndex,\n queueStatus,\n errorMessage,\n }));\n}\n\nfunction normalizeMaxAttempts(value: number | undefined): number {\n return value === 2 || value === 3 ? value : 1;\n}\n\nfunction emitToolExecutionEvent(\n observer: AssistantWorkflowToolExecutionOptions[\"onEvent\"],\n event: AssistantWorkflowToolExecutionEvent,\n): void {\n if (!observer) return;\n try {\n observer(Object.freeze(event));\n } catch {\n // Instrumentation must not alter the tool execution result.\n }\n}\n\nfunction getErrorMessage(error: unknown): string {\n if (error instanceof Error && error.message.trim().length) {\n return error.message.trim();\n }\n if (typeof error === \"string\" && error.trim().length) {\n return error.trim();\n }\n return \"tool invocation failed\";\n}\n\nfunction readInvocationArgs(\n argsByInvocationId: AssistantWorkflowToolInvocationArgsById | undefined,\n invocationId: string,\n): AssistantWorkflowToolInvocationArgs {\n const rawArgs = argsByInvocationId?.[invocationId];\n if (!isRecord(rawArgs)) return EMPTY_TOOL_INVOCATION_ARGS;\n return Object.freeze({ ...rawArgs });\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction assertInvocationProviderConsistency(invocation: AssistantWorkflowToolInvocation): void {\n if (invocation.provider !== invocation.binding.provider) {\n throw new Error(\n `Assistant workflow invocation provider ${invocation.provider} does not match binding provider ${invocation.binding.provider}.`,\n );\n }\n if (invocation.provider !== invocation.capability.provider) {\n throw new Error(\n `Assistant workflow invocation provider ${invocation.provider} does not match capability provider ${invocation.capability.provider}.`,\n );\n }\n}\n\nconst EMPTY_TOOL_INVOCATION_ARGS: AssistantWorkflowToolInvocationArgs = Object.freeze({});\n"]}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import type { AssistantWorkflowDefinition, AssistantWorkflowPlanningStepKind, AssistantWorkflowToolBindingDefinition, AssistantWorkflowToolCapabilityDefinition, AssistantWorkflowToolProvider } from "./definition.js";
|
|
2
2
|
import type { AssistantWorkflowExecutionPlan, AssistantWorkflowExecutionPlanStatus } from "./execution-plan.js";
|
|
3
|
+
import { type AssistantWorkflowExecutionBudget, type AssistantWorkflowExecutionBudgetAssessment } from "./execution-budget.js";
|
|
4
|
+
import { type AssistantWorkflowExecutionPolicy } from "./execution-policy.js";
|
|
3
5
|
export type AssistantWorkflowToolInvocationQueueStatus = "ready" | "partial" | "blocked" | "empty";
|
|
4
6
|
export type AssistantWorkflowToolInvocation = {
|
|
5
7
|
id: string;
|
|
6
8
|
stepId: string;
|
|
7
9
|
stepKind: AssistantWorkflowPlanningStepKind;
|
|
10
|
+
dependsOnStepIds?: string[];
|
|
8
11
|
toolName: string;
|
|
9
12
|
required: boolean;
|
|
10
13
|
provider: AssistantWorkflowToolProvider;
|
|
11
14
|
capability: AssistantWorkflowToolCapabilityDefinition;
|
|
12
15
|
binding: AssistantWorkflowToolBindingDefinition;
|
|
16
|
+
maxAttempts?: number;
|
|
13
17
|
};
|
|
14
18
|
export type AssistantWorkflowToolInvocationQueue = {
|
|
15
19
|
status: AssistantWorkflowToolInvocationQueueStatus;
|
|
@@ -17,6 +21,9 @@ export type AssistantWorkflowToolInvocationQueue = {
|
|
|
17
21
|
skippedStepIds: string[];
|
|
18
22
|
blockingReasons: string[];
|
|
19
23
|
warnings: string[];
|
|
24
|
+
executionBudget?: AssistantWorkflowExecutionBudget | null;
|
|
25
|
+
budgetAssessment?: AssistantWorkflowExecutionBudgetAssessment | null;
|
|
26
|
+
executionPolicy?: AssistantWorkflowExecutionPolicy;
|
|
20
27
|
};
|
|
21
28
|
export type AssistantWorkflowToolInvocationQueueOptions = {
|
|
22
29
|
includeOptional?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-invocations.d.ts","sourceRoot":"","sources":["../src/tool-invocations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAC3B,iCAAiC,EACjC,sCAAsC,EACtC,yCAAyC,EACzC,6BAA6B,EAC9B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,8BAA8B,EAAE,oCAAoC,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-invocations.d.ts","sourceRoot":"","sources":["../src/tool-invocations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAC3B,iCAAiC,EACjC,sCAAsC,EACtC,yCAAyC,EACzC,6BAA6B,EAC9B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,8BAA8B,EAAE,oCAAoC,EAAE,MAAM,qBAAqB,CAAC;AAKhH,OAAO,EAIL,KAAK,gCAAgC,EACrC,KAAK,0CAA0C,EAChD,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,gCAAgC,EACtC,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,0CAA0C,GAClD,OAAO,GACP,SAAS,GACT,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,MAAM,+BAA+B,GAAG;IAC5C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,iCAAiC,CAAC;IAC5C,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,6BAA6B,CAAC;IACxC,UAAU,EAAE,yCAAyC,CAAC;IACtD,OAAO,EAAE,sCAAsC,CAAC;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oCAAoC,GAAG;IACjD,MAAM,EAAE,0CAA0C,CAAC;IACnD,WAAW,EAAE,+BAA+B,EAAE,CAAC;IAC/C,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,CAAC,EAAE,gCAAgC,GAAG,IAAI,CAAC;IAC1D,gBAAgB,CAAC,EAAE,0CAA0C,GAAG,IAAI,CAAC;IACrE,eAAe,CAAC,EAAE,gCAAgC,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,2CAA2C,GAAG;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,MAAM,EAAE,oCAAoC,CAAC;IAC7C,aAAa,EAAE,8BAA8B,CAAC;CAC/C,CAAC;AAEF,wBAAgB,yCAAyC,CACvD,QAAQ,EAAE,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACrE,GAAG,EAAE,kCAAkC,EACvC,OAAO,GAAE,2CAAgD,GACxD,oCAAoC,CAyEtC;AAED,wBAAgB,qDAAqD,CACnE,KAAK,EAAE,oCAAoC,GAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA0BzB"}
|
package/dist/tool-invocations.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { resolveAssistantWorkflowTools, } from "./tool-bindings.js";
|
|
2
|
+
import { buildAssistantWorkflowExecutionBudgetAssessment, buildAssistantWorkflowExecutionBudgetTracePayload, formatAssistantWorkflowExecutionBudgetViolation, } from "./execution-budget.js";
|
|
3
|
+
import { resolveAssistantWorkflowExecutionPolicy, } from "./execution-policy.js";
|
|
2
4
|
export function buildAssistantWorkflowToolInvocationQueue(workflow, run, options = {}) {
|
|
3
5
|
const includeOptional = options.includeOptional !== false;
|
|
4
6
|
const blocked = run.status === "blocked" || run.status === "needs-clarification";
|
|
@@ -9,9 +11,13 @@ export function buildAssistantWorkflowToolInvocationQueue(workflow, run, options
|
|
|
9
11
|
skippedStepIds: run.executionPlan.steps.map((step) => step.id),
|
|
10
12
|
blockingReasons: [...run.executionPlan.blockingReasons],
|
|
11
13
|
warnings: [...run.executionPlan.warnings],
|
|
14
|
+
executionBudget: run.executionPlan.executionBudget ?? null,
|
|
15
|
+
budgetAssessment: run.executionPlan.budgetAssessment ?? null,
|
|
16
|
+
executionPolicy: run.executionPlan.executionPolicy ?? resolveAssistantWorkflowExecutionPolicy(),
|
|
12
17
|
};
|
|
13
18
|
}
|
|
14
19
|
const invocations = [];
|
|
20
|
+
const executionPolicy = run.executionPlan.executionPolicy ?? resolveAssistantWorkflowExecutionPolicy(workflow.executionPolicy);
|
|
15
21
|
const skippedStepIds = [];
|
|
16
22
|
for (const step of run.executionPlan.steps) {
|
|
17
23
|
if (step.status === "blocked" || step.status === "optional-skipped") {
|
|
@@ -23,12 +29,33 @@ export function buildAssistantWorkflowToolInvocationQueue(workflow, run, options
|
|
|
23
29
|
: step.readyToolNames.filter((toolName) => step.requiredToolNames.includes(toolName));
|
|
24
30
|
const resolutions = resolveAssistantWorkflowTools(workflow, readyToolNames).resolutions;
|
|
25
31
|
for (const resolution of resolutions) {
|
|
26
|
-
const invocation = buildInvocation(step.id, step.kind, step.requiredToolNames.includes(resolution.toolName), resolution);
|
|
32
|
+
const invocation = buildInvocation(step.id, step.kind, step.dependsOnStepIds, step.requiredToolNames.includes(resolution.toolName), resolution, executionPolicy);
|
|
27
33
|
if (invocation) {
|
|
28
34
|
invocations.push(invocation);
|
|
29
35
|
}
|
|
30
36
|
}
|
|
31
37
|
}
|
|
38
|
+
const budgetAssessment = workflow.executionBudget
|
|
39
|
+
? buildAssistantWorkflowExecutionBudgetAssessment(workflow.executionBudget, {
|
|
40
|
+
planningStepCount: run.executionPlan.steps.length,
|
|
41
|
+
toolCallCount: invocations.reduce((count, invocation) => count + (invocation.maxAttempts ?? 1), 0),
|
|
42
|
+
})
|
|
43
|
+
: null;
|
|
44
|
+
if (budgetAssessment?.status === "blocked") {
|
|
45
|
+
return {
|
|
46
|
+
status: "blocked",
|
|
47
|
+
invocations: [],
|
|
48
|
+
skippedStepIds: run.executionPlan.steps.map((step) => step.id),
|
|
49
|
+
blockingReasons: [
|
|
50
|
+
...run.executionPlan.blockingReasons,
|
|
51
|
+
...budgetAssessment.violations.map(formatAssistantWorkflowExecutionBudgetViolation),
|
|
52
|
+
],
|
|
53
|
+
warnings: [...run.executionPlan.warnings],
|
|
54
|
+
executionBudget: { ...budgetAssessment.budget },
|
|
55
|
+
budgetAssessment,
|
|
56
|
+
executionPolicy,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
32
59
|
return {
|
|
33
60
|
status: invocations.length === 0
|
|
34
61
|
? "empty"
|
|
@@ -39,6 +66,9 @@ export function buildAssistantWorkflowToolInvocationQueue(workflow, run, options
|
|
|
39
66
|
skippedStepIds,
|
|
40
67
|
blockingReasons: [...run.executionPlan.blockingReasons],
|
|
41
68
|
warnings: [...run.executionPlan.warnings],
|
|
69
|
+
executionBudget: workflow.executionBudget ? { ...workflow.executionBudget } : null,
|
|
70
|
+
budgetAssessment,
|
|
71
|
+
executionPolicy,
|
|
42
72
|
};
|
|
43
73
|
}
|
|
44
74
|
export function buildAssistantWorkflowToolInvocationQueueTracePayload(queue) {
|
|
@@ -49,19 +79,26 @@ export function buildAssistantWorkflowToolInvocationQueueTracePayload(queue) {
|
|
|
49
79
|
id: invocation.id,
|
|
50
80
|
stepId: invocation.stepId,
|
|
51
81
|
stepKind: invocation.stepKind,
|
|
82
|
+
dependsOnStepIds: invocation.dependsOnStepIds ?? [],
|
|
52
83
|
toolName: invocation.toolName,
|
|
53
84
|
required: invocation.required,
|
|
54
85
|
provider: invocation.provider,
|
|
55
86
|
effect: invocation.capability.effect,
|
|
56
87
|
outputKinds: invocation.capability.outputKinds,
|
|
57
88
|
bindingProvider: invocation.binding.provider,
|
|
89
|
+
maxAttempts: invocation.maxAttempts ?? 1,
|
|
58
90
|
})),
|
|
59
91
|
skippedStepIds: queue.skippedStepIds,
|
|
60
92
|
blockingReasons: queue.blockingReasons,
|
|
61
93
|
warnings: queue.warnings,
|
|
94
|
+
executionBudget: queue.executionBudget ?? null,
|
|
95
|
+
budgetAssessment: queue.budgetAssessment
|
|
96
|
+
? buildAssistantWorkflowExecutionBudgetTracePayload(queue.budgetAssessment)
|
|
97
|
+
: null,
|
|
98
|
+
executionPolicy: queue.executionPolicy ?? resolveAssistantWorkflowExecutionPolicy(),
|
|
62
99
|
};
|
|
63
100
|
}
|
|
64
|
-
function buildInvocation(stepId, stepKind, required, resolution) {
|
|
101
|
+
function buildInvocation(stepId, stepKind, dependsOnStepIds, required, resolution, executionPolicy) {
|
|
65
102
|
if (resolution.status !== "ready" || !resolution.capability || !resolution.binding || !resolution.provider) {
|
|
66
103
|
return null;
|
|
67
104
|
}
|
|
@@ -69,11 +106,15 @@ function buildInvocation(stepId, stepKind, required, resolution) {
|
|
|
69
106
|
id: `${stepId}:${resolution.toolName}`,
|
|
70
107
|
stepId,
|
|
71
108
|
stepKind,
|
|
109
|
+
dependsOnStepIds: [...dependsOnStepIds],
|
|
72
110
|
toolName: resolution.toolName,
|
|
73
111
|
required,
|
|
74
112
|
provider: resolution.provider,
|
|
75
113
|
capability: resolution.capability,
|
|
76
114
|
binding: resolution.binding,
|
|
115
|
+
maxAttempts: resolution.capability.retryClass === "never"
|
|
116
|
+
? 1
|
|
117
|
+
: executionPolicy.maxAttemptsPerTool,
|
|
77
118
|
};
|
|
78
119
|
}
|
|
79
120
|
//# sourceMappingURL=tool-invocations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-invocations.js","sourceRoot":"","sources":["../src/tool-invocations.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AssistantWorkflowDefinition,\n AssistantWorkflowPlanningStepKind,\n AssistantWorkflowToolBindingDefinition,\n AssistantWorkflowToolCapabilityDefinition,\n AssistantWorkflowToolProvider,\n} from \"./definition.js\";\nimport type { AssistantWorkflowExecutionPlan, AssistantWorkflowExecutionPlanStatus } from \"./execution-plan.js\";\nimport {\n resolveAssistantWorkflowTools,\n type AssistantWorkflowToolResolution,\n} from \"./tool-bindings.js\";\n\nexport type AssistantWorkflowToolInvocationQueueStatus =\n | \"ready\"\n | \"partial\"\n | \"blocked\"\n | \"empty\";\n\nexport type AssistantWorkflowToolInvocation = {\n id: string;\n stepId: string;\n stepKind: AssistantWorkflowPlanningStepKind;\n toolName: string;\n required: boolean;\n provider: AssistantWorkflowToolProvider;\n capability: AssistantWorkflowToolCapabilityDefinition;\n binding: AssistantWorkflowToolBindingDefinition;\n};\n\nexport type AssistantWorkflowToolInvocationQueue = {\n status: AssistantWorkflowToolInvocationQueueStatus;\n invocations: AssistantWorkflowToolInvocation[];\n skippedStepIds: string[];\n blockingReasons: string[];\n warnings: string[];\n};\n\nexport type AssistantWorkflowToolInvocationQueueOptions = {\n includeOptional?: boolean;\n allowWhenBlocked?: boolean;\n};\n\nexport type AssistantWorkflowToolInvocationRun = {\n status: AssistantWorkflowExecutionPlanStatus;\n executionPlan: AssistantWorkflowExecutionPlan;\n};\n\nexport function buildAssistantWorkflowToolInvocationQueue(\n workflow: AssistantWorkflowDefinition<string, string, string, string>,\n run: AssistantWorkflowToolInvocationRun,\n options: AssistantWorkflowToolInvocationQueueOptions = {},\n): AssistantWorkflowToolInvocationQueue {\n const includeOptional = options.includeOptional !== false;\n const blocked = run.status === \"blocked\" || run.status === \"needs-clarification\";\n if (blocked && options.allowWhenBlocked !== true) {\n return {\n status: \"blocked\",\n invocations: [],\n skippedStepIds: run.executionPlan.steps.map((step) => step.id),\n blockingReasons: [...run.executionPlan.blockingReasons],\n warnings: [...run.executionPlan.warnings],\n };\n }\n\n const invocations: AssistantWorkflowToolInvocation[] = [];\n const skippedStepIds: string[] = [];\n for (const step of run.executionPlan.steps) {\n if (step.status === \"blocked\" || step.status === \"optional-skipped\") {\n skippedStepIds.push(step.id);\n continue;\n }\n const readyToolNames = includeOptional\n ? step.readyToolNames\n : step.readyToolNames.filter((toolName) => step.requiredToolNames.includes(toolName));\n const resolutions = resolveAssistantWorkflowTools(workflow, readyToolNames).resolutions;\n for (const resolution of resolutions) {\n const invocation = buildInvocation(step.id, step.kind, step.requiredToolNames.includes(resolution.toolName), resolution);\n if (invocation) {\n invocations.push(invocation);\n }\n }\n }\n\n return {\n status:\n invocations.length === 0\n ? \"empty\"\n : run.status === \"partial\"\n ? \"partial\"\n : \"ready\",\n invocations,\n skippedStepIds,\n blockingReasons: [...run.executionPlan.blockingReasons],\n warnings: [...run.executionPlan.warnings],\n };\n}\n\nexport function buildAssistantWorkflowToolInvocationQueueTracePayload(\n queue: AssistantWorkflowToolInvocationQueue,\n): Record<string, unknown> {\n return {\n status: queue.status,\n invocationCount: queue.invocations.length,\n invocations: queue.invocations.map((invocation) => ({\n id: invocation.id,\n stepId: invocation.stepId,\n stepKind: invocation.stepKind,\n toolName: invocation.toolName,\n required: invocation.required,\n provider: invocation.provider,\n effect: invocation.capability.effect,\n outputKinds: invocation.capability.outputKinds,\n bindingProvider: invocation.binding.provider,\n })),\n skippedStepIds: queue.skippedStepIds,\n blockingReasons: queue.blockingReasons,\n warnings: queue.warnings,\n };\n}\n\nfunction buildInvocation(\n stepId: string,\n stepKind: AssistantWorkflowPlanningStepKind,\n required: boolean,\n resolution: AssistantWorkflowToolResolution,\n): AssistantWorkflowToolInvocation | null {\n if (resolution.status !== \"ready\" || !resolution.capability || !resolution.binding || !resolution.provider) {\n return null;\n }\n return {\n id: `${stepId}:${resolution.toolName}`,\n stepId,\n stepKind,\n toolName: resolution.toolName,\n required,\n provider: resolution.provider,\n capability: resolution.capability,\n binding: resolution.binding,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"tool-invocations.js","sourceRoot":"","sources":["../src/tool-invocations.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AssistantWorkflowDefinition,\n AssistantWorkflowPlanningStepKind,\n AssistantWorkflowToolBindingDefinition,\n AssistantWorkflowToolCapabilityDefinition,\n AssistantWorkflowToolProvider,\n} from \"./definition.js\";\nimport type { AssistantWorkflowExecutionPlan, AssistantWorkflowExecutionPlanStatus } from \"./execution-plan.js\";\nimport {\n resolveAssistantWorkflowTools,\n type AssistantWorkflowToolResolution,\n} from \"./tool-bindings.js\";\nimport {\n buildAssistantWorkflowExecutionBudgetAssessment,\n buildAssistantWorkflowExecutionBudgetTracePayload,\n formatAssistantWorkflowExecutionBudgetViolation,\n type AssistantWorkflowExecutionBudget,\n type AssistantWorkflowExecutionBudgetAssessment,\n} from \"./execution-budget.js\";\nimport {\n resolveAssistantWorkflowExecutionPolicy,\n type AssistantWorkflowExecutionPolicy,\n} from \"./execution-policy.js\";\n\nexport type AssistantWorkflowToolInvocationQueueStatus =\n | \"ready\"\n | \"partial\"\n | \"blocked\"\n | \"empty\";\n\nexport type AssistantWorkflowToolInvocation = {\n id: string;\n stepId: string;\n stepKind: AssistantWorkflowPlanningStepKind;\n dependsOnStepIds?: string[];\n toolName: string;\n required: boolean;\n provider: AssistantWorkflowToolProvider;\n capability: AssistantWorkflowToolCapabilityDefinition;\n binding: AssistantWorkflowToolBindingDefinition;\n maxAttempts?: number;\n};\n\nexport type AssistantWorkflowToolInvocationQueue = {\n status: AssistantWorkflowToolInvocationQueueStatus;\n invocations: AssistantWorkflowToolInvocation[];\n skippedStepIds: string[];\n blockingReasons: string[];\n warnings: string[];\n executionBudget?: AssistantWorkflowExecutionBudget | null;\n budgetAssessment?: AssistantWorkflowExecutionBudgetAssessment | null;\n executionPolicy?: AssistantWorkflowExecutionPolicy;\n};\n\nexport type AssistantWorkflowToolInvocationQueueOptions = {\n includeOptional?: boolean;\n allowWhenBlocked?: boolean;\n};\n\nexport type AssistantWorkflowToolInvocationRun = {\n status: AssistantWorkflowExecutionPlanStatus;\n executionPlan: AssistantWorkflowExecutionPlan;\n};\n\nexport function buildAssistantWorkflowToolInvocationQueue(\n workflow: AssistantWorkflowDefinition<string, string, string, string>,\n run: AssistantWorkflowToolInvocationRun,\n options: AssistantWorkflowToolInvocationQueueOptions = {},\n): AssistantWorkflowToolInvocationQueue {\n const includeOptional = options.includeOptional !== false;\n const blocked = run.status === \"blocked\" || run.status === \"needs-clarification\";\n if (blocked && options.allowWhenBlocked !== true) {\n return {\n status: \"blocked\",\n invocations: [],\n skippedStepIds: run.executionPlan.steps.map((step) => step.id),\n blockingReasons: [...run.executionPlan.blockingReasons],\n warnings: [...run.executionPlan.warnings],\n executionBudget: run.executionPlan.executionBudget ?? null,\n budgetAssessment: run.executionPlan.budgetAssessment ?? null,\n executionPolicy: run.executionPlan.executionPolicy ?? resolveAssistantWorkflowExecutionPolicy(),\n };\n }\n\n const invocations: AssistantWorkflowToolInvocation[] = [];\n const executionPolicy = run.executionPlan.executionPolicy ?? resolveAssistantWorkflowExecutionPolicy(workflow.executionPolicy);\n const skippedStepIds: string[] = [];\n for (const step of run.executionPlan.steps) {\n if (step.status === \"blocked\" || step.status === \"optional-skipped\") {\n skippedStepIds.push(step.id);\n continue;\n }\n const readyToolNames = includeOptional\n ? step.readyToolNames\n : step.readyToolNames.filter((toolName) => step.requiredToolNames.includes(toolName));\n const resolutions = resolveAssistantWorkflowTools(workflow, readyToolNames).resolutions;\n for (const resolution of resolutions) {\n const invocation = buildInvocation(step.id, step.kind, step.dependsOnStepIds, step.requiredToolNames.includes(resolution.toolName), resolution, executionPolicy);\n if (invocation) {\n invocations.push(invocation);\n }\n }\n }\n\n const budgetAssessment = workflow.executionBudget\n ? buildAssistantWorkflowExecutionBudgetAssessment(workflow.executionBudget, {\n planningStepCount: run.executionPlan.steps.length,\n toolCallCount: invocations.reduce((count, invocation) => count + (invocation.maxAttempts ?? 1), 0),\n })\n : null;\n if (budgetAssessment?.status === \"blocked\") {\n return {\n status: \"blocked\",\n invocations: [],\n skippedStepIds: run.executionPlan.steps.map((step) => step.id),\n blockingReasons: [\n ...run.executionPlan.blockingReasons,\n ...budgetAssessment.violations.map(formatAssistantWorkflowExecutionBudgetViolation),\n ],\n warnings: [...run.executionPlan.warnings],\n executionBudget: { ...budgetAssessment.budget },\n budgetAssessment,\n executionPolicy,\n };\n }\n\n return {\n status:\n invocations.length === 0\n ? \"empty\"\n : run.status === \"partial\"\n ? \"partial\"\n : \"ready\",\n invocations,\n skippedStepIds,\n blockingReasons: [...run.executionPlan.blockingReasons],\n warnings: [...run.executionPlan.warnings],\n executionBudget: workflow.executionBudget ? { ...workflow.executionBudget } : null,\n budgetAssessment,\n executionPolicy,\n };\n}\n\nexport function buildAssistantWorkflowToolInvocationQueueTracePayload(\n queue: AssistantWorkflowToolInvocationQueue,\n): Record<string, unknown> {\n return {\n status: queue.status,\n invocationCount: queue.invocations.length,\n invocations: queue.invocations.map((invocation) => ({\n id: invocation.id,\n stepId: invocation.stepId,\n stepKind: invocation.stepKind,\n dependsOnStepIds: invocation.dependsOnStepIds ?? [],\n toolName: invocation.toolName,\n required: invocation.required,\n provider: invocation.provider,\n effect: invocation.capability.effect,\n outputKinds: invocation.capability.outputKinds,\n bindingProvider: invocation.binding.provider,\n maxAttempts: invocation.maxAttempts ?? 1,\n })),\n skippedStepIds: queue.skippedStepIds,\n blockingReasons: queue.blockingReasons,\n warnings: queue.warnings,\n executionBudget: queue.executionBudget ?? null,\n budgetAssessment: queue.budgetAssessment\n ? buildAssistantWorkflowExecutionBudgetTracePayload(queue.budgetAssessment)\n : null,\n executionPolicy: queue.executionPolicy ?? resolveAssistantWorkflowExecutionPolicy(),\n };\n}\n\nfunction buildInvocation(\n stepId: string,\n stepKind: AssistantWorkflowPlanningStepKind,\n dependsOnStepIds: readonly string[],\n required: boolean,\n resolution: AssistantWorkflowToolResolution,\n executionPolicy: AssistantWorkflowExecutionPolicy,\n): AssistantWorkflowToolInvocation | null {\n if (resolution.status !== \"ready\" || !resolution.capability || !resolution.binding || !resolution.provider) {\n return null;\n }\n return {\n id: `${stepId}:${resolution.toolName}`,\n stepId,\n stepKind,\n dependsOnStepIds: [...dependsOnStepIds],\n toolName: resolution.toolName,\n required,\n provider: resolution.provider,\n capability: resolution.capability,\n binding: resolution.binding,\n maxAttempts: resolution.capability.retryClass === \"never\"\n ? 1\n : executionPolicy.maxAttemptsPerTool,\n };\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uns-kit/assistant-workflow",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.3",
|
|
4
4
|
"description": "Typed, provider-neutral workflow definitions, policies, execution plans, and trace helpers for assistants.",
|
|
5
5
|
"author": "Aljosa Vister",
|
|
6
6
|
"license": "MIT",
|
|
@@ -177,6 +177,14 @@
|
|
|
177
177
|
"types": "./dist/execution-plan.d.ts",
|
|
178
178
|
"default": "./dist/execution-plan.js"
|
|
179
179
|
},
|
|
180
|
+
"./execution-budget": {
|
|
181
|
+
"types": "./dist/execution-budget.d.ts",
|
|
182
|
+
"default": "./dist/execution-budget.js"
|
|
183
|
+
},
|
|
184
|
+
"./execution-policy": {
|
|
185
|
+
"types": "./dist/execution-policy.d.ts",
|
|
186
|
+
"default": "./dist/execution-policy.js"
|
|
187
|
+
},
|
|
180
188
|
"./hosted-tool-policy": {
|
|
181
189
|
"types": "./dist/hosted-tool-policy.d.ts",
|
|
182
190
|
"default": "./dist/hosted-tool-policy.js"
|
|
@@ -328,7 +336,8 @@
|
|
|
328
336
|
},
|
|
329
337
|
"files": [
|
|
330
338
|
"dist",
|
|
331
|
-
"README.md"
|
|
339
|
+
"README.md",
|
|
340
|
+
"API_STABILITY.md"
|
|
332
341
|
],
|
|
333
342
|
"devDependencies": {
|
|
334
343
|
"@types/node": "^22.19.1",
|