@uns-kit/assistant-workflow 2.0.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +37 -0
  3. package/dist/clarification-policy.d.ts +64 -0
  4. package/dist/clarification-policy.d.ts.map +1 -0
  5. package/dist/clarification-policy.js +174 -0
  6. package/dist/clarification-policy.js.map +1 -0
  7. package/dist/decision.d.ts +37 -0
  8. package/dist/decision.d.ts.map +1 -0
  9. package/dist/decision.js +100 -0
  10. package/dist/decision.js.map +1 -0
  11. package/dist/definition-catalog-replay.d.ts +25 -0
  12. package/dist/definition-catalog-replay.d.ts.map +1 -0
  13. package/dist/definition-catalog-replay.js +54 -0
  14. package/dist/definition-catalog-replay.js.map +1 -0
  15. package/dist/definition-catalog.d.ts +45 -0
  16. package/dist/definition-catalog.d.ts.map +1 -0
  17. package/dist/definition-catalog.js +97 -0
  18. package/dist/definition-catalog.js.map +1 -0
  19. package/dist/definition-diagnostics.d.ts +17 -0
  20. package/dist/definition-diagnostics.d.ts.map +1 -0
  21. package/dist/definition-diagnostics.js +353 -0
  22. package/dist/definition-diagnostics.js.map +1 -0
  23. package/dist/definition-diff.d.ts +51 -0
  24. package/dist/definition-diff.d.ts.map +1 -0
  25. package/dist/definition-diff.js +172 -0
  26. package/dist/definition-diff.js.map +1 -0
  27. package/dist/definition-json.d.ts +53 -0
  28. package/dist/definition-json.d.ts.map +1 -0
  29. package/dist/definition-json.js +186 -0
  30. package/dist/definition-json.js.map +1 -0
  31. package/dist/definition-manifest.d.ts +41 -0
  32. package/dist/definition-manifest.d.ts.map +1 -0
  33. package/dist/definition-manifest.js +119 -0
  34. package/dist/definition-manifest.js.map +1 -0
  35. package/dist/definition-package-execution-json.d.ts +64 -0
  36. package/dist/definition-package-execution-json.d.ts.map +1 -0
  37. package/dist/definition-package-execution-json.js +245 -0
  38. package/dist/definition-package-execution-json.js.map +1 -0
  39. package/dist/definition-package-execution-replay.d.ts +14 -0
  40. package/dist/definition-package-execution-replay.d.ts.map +1 -0
  41. package/dist/definition-package-execution-replay.js +47 -0
  42. package/dist/definition-package-execution-replay.js.map +1 -0
  43. package/dist/definition-package-executor.d.ts +52 -0
  44. package/dist/definition-package-executor.d.ts.map +1 -0
  45. package/dist/definition-package-executor.js +70 -0
  46. package/dist/definition-package-executor.js.map +1 -0
  47. package/dist/definition-package-loader.d.ts +36 -0
  48. package/dist/definition-package-loader.d.ts.map +1 -0
  49. package/dist/definition-package-loader.js +56 -0
  50. package/dist/definition-package-loader.js.map +1 -0
  51. package/dist/definition-package-replay.d.ts +28 -0
  52. package/dist/definition-package-replay.d.ts.map +1 -0
  53. package/dist/definition-package-replay.js +74 -0
  54. package/dist/definition-package-replay.js.map +1 -0
  55. package/dist/definition-package-resolver.d.ts +31 -0
  56. package/dist/definition-package-resolver.d.ts.map +1 -0
  57. package/dist/definition-package-resolver.js +60 -0
  58. package/dist/definition-package-resolver.js.map +1 -0
  59. package/dist/definition-package-review.d.ts +29 -0
  60. package/dist/definition-package-review.d.ts.map +1 -0
  61. package/dist/definition-package-review.js +74 -0
  62. package/dist/definition-package-review.js.map +1 -0
  63. package/dist/definition-package-run-report.d.ts +25 -0
  64. package/dist/definition-package-run-report.d.ts.map +1 -0
  65. package/dist/definition-package-run-report.js +37 -0
  66. package/dist/definition-package-run-report.js.map +1 -0
  67. package/dist/definition-package-run.d.ts +20 -0
  68. package/dist/definition-package-run.d.ts.map +1 -0
  69. package/dist/definition-package-run.js +41 -0
  70. package/dist/definition-package-run.js.map +1 -0
  71. package/dist/definition-package-selection.d.ts +29 -0
  72. package/dist/definition-package-selection.d.ts.map +1 -0
  73. package/dist/definition-package-selection.js +68 -0
  74. package/dist/definition-package-selection.js.map +1 -0
  75. package/dist/definition-package-smoke.d.ts +74 -0
  76. package/dist/definition-package-smoke.d.ts.map +1 -0
  77. package/dist/definition-package-smoke.js +184 -0
  78. package/dist/definition-package-smoke.js.map +1 -0
  79. package/dist/definition-package.d.ts +36 -0
  80. package/dist/definition-package.d.ts.map +1 -0
  81. package/dist/definition-package.js +114 -0
  82. package/dist/definition-package.js.map +1 -0
  83. package/dist/definition-tuning-approval.d.ts +39 -0
  84. package/dist/definition-tuning-approval.d.ts.map +1 -0
  85. package/dist/definition-tuning-approval.js +207 -0
  86. package/dist/definition-tuning-approval.js.map +1 -0
  87. package/dist/definition-tuning-json.d.ts +58 -0
  88. package/dist/definition-tuning-json.d.ts.map +1 -0
  89. package/dist/definition-tuning-json.js +276 -0
  90. package/dist/definition-tuning-json.js.map +1 -0
  91. package/dist/definition-tuning-promotion.d.ts +120 -0
  92. package/dist/definition-tuning-promotion.d.ts.map +1 -0
  93. package/dist/definition-tuning-promotion.js +460 -0
  94. package/dist/definition-tuning-promotion.js.map +1 -0
  95. package/dist/definition-tuning-replay.d.ts +14 -0
  96. package/dist/definition-tuning-replay.d.ts.map +1 -0
  97. package/dist/definition-tuning-replay.js +50 -0
  98. package/dist/definition-tuning-replay.js.map +1 -0
  99. package/dist/definition-tuning-review-artifact.d.ts +56 -0
  100. package/dist/definition-tuning-review-artifact.d.ts.map +1 -0
  101. package/dist/definition-tuning-review-artifact.js +302 -0
  102. package/dist/definition-tuning-review-artifact.js.map +1 -0
  103. package/dist/definition-tuning-review.d.ts +59 -0
  104. package/dist/definition-tuning-review.d.ts.map +1 -0
  105. package/dist/definition-tuning-review.js +213 -0
  106. package/dist/definition-tuning-review.js.map +1 -0
  107. package/dist/definition-tuning-source-patch.d.ts +43 -0
  108. package/dist/definition-tuning-source-patch.d.ts.map +1 -0
  109. package/dist/definition-tuning-source-patch.js +214 -0
  110. package/dist/definition-tuning-source-patch.js.map +1 -0
  111. package/dist/definition-tuning.d.ts +73 -0
  112. package/dist/definition-tuning.d.ts.map +1 -0
  113. package/dist/definition-tuning.js +426 -0
  114. package/dist/definition-tuning.js.map +1 -0
  115. package/dist/definition.d.ts +189 -0
  116. package/dist/definition.d.ts.map +1 -0
  117. package/dist/definition.js +494 -0
  118. package/dist/definition.js.map +1 -0
  119. package/dist/direct-route-invocation.d.ts +132 -0
  120. package/dist/direct-route-invocation.d.ts.map +1 -0
  121. package/dist/direct-route-invocation.js +325 -0
  122. package/dist/direct-route-invocation.js.map +1 -0
  123. package/dist/direct-route-policy.d.ts +25 -0
  124. package/dist/direct-route-policy.d.ts.map +1 -0
  125. package/dist/direct-route-policy.js +106 -0
  126. package/dist/direct-route-policy.js.map +1 -0
  127. package/dist/eval-case.d.ts +85 -0
  128. package/dist/eval-case.d.ts.map +1 -0
  129. package/dist/eval-case.js +366 -0
  130. package/dist/eval-case.js.map +1 -0
  131. package/dist/eval-replay.d.ts +18 -0
  132. package/dist/eval-replay.d.ts.map +1 -0
  133. package/dist/eval-replay.js +41 -0
  134. package/dist/eval-replay.js.map +1 -0
  135. package/dist/eval-result.d.ts +46 -0
  136. package/dist/eval-result.d.ts.map +1 -0
  137. package/dist/eval-result.js +183 -0
  138. package/dist/eval-result.js.map +1 -0
  139. package/dist/eval-runner.d.ts +30 -0
  140. package/dist/eval-runner.d.ts.map +1 -0
  141. package/dist/eval-runner.js +57 -0
  142. package/dist/eval-runner.js.map +1 -0
  143. package/dist/eval-suite.d.ts +43 -0
  144. package/dist/eval-suite.d.ts.map +1 -0
  145. package/dist/eval-suite.js +101 -0
  146. package/dist/eval-suite.js.map +1 -0
  147. package/dist/execution-plan.d.ts +43 -0
  148. package/dist/execution-plan.d.ts.map +1 -0
  149. package/dist/execution-plan.js +187 -0
  150. package/dist/execution-plan.js.map +1 -0
  151. package/dist/hosted-tool-policy.d.ts +70 -0
  152. package/dist/hosted-tool-policy.d.ts.map +1 -0
  153. package/dist/hosted-tool-policy.js +228 -0
  154. package/dist/hosted-tool-policy.js.map +1 -0
  155. package/dist/index.d.ts +73 -0
  156. package/dist/index.d.ts.map +1 -0
  157. package/dist/index.js +73 -0
  158. package/dist/index.js.map +1 -0
  159. package/dist/memory-policy.d.ts +55 -0
  160. package/dist/memory-policy.d.ts.map +1 -0
  161. package/dist/memory-policy.js +187 -0
  162. package/dist/memory-policy.js.map +1 -0
  163. package/dist/memory-updates.d.ts +39 -0
  164. package/dist/memory-updates.d.ts.map +1 -0
  165. package/dist/memory-updates.js +110 -0
  166. package/dist/memory-updates.js.map +1 -0
  167. package/dist/outcome-trace.d.ts +79 -0
  168. package/dist/outcome-trace.d.ts.map +1 -0
  169. package/dist/outcome-trace.js +117 -0
  170. package/dist/outcome-trace.js.map +1 -0
  171. package/dist/outcome.d.ts +97 -0
  172. package/dist/outcome.d.ts.map +1 -0
  173. package/dist/outcome.js +160 -0
  174. package/dist/outcome.js.map +1 -0
  175. package/dist/planner-compiler.d.ts +14 -0
  176. package/dist/planner-compiler.d.ts.map +1 -0
  177. package/dist/planner-compiler.js +26 -0
  178. package/dist/planner-compiler.js.map +1 -0
  179. package/dist/planning.d.ts +36 -0
  180. package/dist/planning.d.ts.map +1 -0
  181. package/dist/planning.js +141 -0
  182. package/dist/planning.js.map +1 -0
  183. package/dist/policy-resolution.d.ts +10 -0
  184. package/dist/policy-resolution.d.ts.map +1 -0
  185. package/dist/policy-resolution.js +30 -0
  186. package/dist/policy-resolution.js.map +1 -0
  187. package/dist/run-evaluation.d.ts +29 -0
  188. package/dist/run-evaluation.d.ts.map +1 -0
  189. package/dist/run-evaluation.js +128 -0
  190. package/dist/run-evaluation.js.map +1 -0
  191. package/dist/run-parity.d.ts +24 -0
  192. package/dist/run-parity.d.ts.map +1 -0
  193. package/dist/run-parity.js +36 -0
  194. package/dist/run-parity.js.map +1 -0
  195. package/dist/run-report-batch.d.ts +150 -0
  196. package/dist/run-report-batch.d.ts.map +1 -0
  197. package/dist/run-report-batch.js +391 -0
  198. package/dist/run-report-batch.js.map +1 -0
  199. package/dist/run-report-json.d.ts +76 -0
  200. package/dist/run-report-json.d.ts.map +1 -0
  201. package/dist/run-report-json.js +451 -0
  202. package/dist/run-report-json.js.map +1 -0
  203. package/dist/run-report.d.ts +22 -0
  204. package/dist/run-report.d.ts.map +1 -0
  205. package/dist/run-report.js +46 -0
  206. package/dist/run-report.js.map +1 -0
  207. package/dist/run.d.ts +20 -0
  208. package/dist/run.d.ts.map +1 -0
  209. package/dist/run.js +36 -0
  210. package/dist/run.js.map +1 -0
  211. package/dist/tool-bindings.d.ts +42 -0
  212. package/dist/tool-bindings.d.ts.map +1 -0
  213. package/dist/tool-bindings.js +124 -0
  214. package/dist/tool-bindings.js.map +1 -0
  215. package/dist/tool-capabilities.d.ts +37 -0
  216. package/dist/tool-capabilities.d.ts.map +1 -0
  217. package/dist/tool-capabilities.js +91 -0
  218. package/dist/tool-capabilities.js.map +1 -0
  219. package/dist/tool-executor.d.ts +63 -0
  220. package/dist/tool-executor.d.ts.map +1 -0
  221. package/dist/tool-executor.js +176 -0
  222. package/dist/tool-executor.js.map +1 -0
  223. package/dist/tool-fixtures.d.ts +18 -0
  224. package/dist/tool-fixtures.d.ts.map +1 -0
  225. package/dist/tool-fixtures.js +52 -0
  226. package/dist/tool-fixtures.js.map +1 -0
  227. package/dist/tool-invocations.d.ts +31 -0
  228. package/dist/tool-invocations.d.ts.map +1 -0
  229. package/dist/tool-invocations.js +79 -0
  230. package/dist/tool-invocations.js.map +1 -0
  231. package/dist/tool-provider-executors.d.ts +43 -0
  232. package/dist/tool-provider-executors.d.ts.map +1 -0
  233. package/dist/tool-provider-executors.js +59 -0
  234. package/dist/tool-provider-executors.js.map +1 -0
  235. package/dist/tool-result-cache.d.ts +37 -0
  236. package/dist/tool-result-cache.d.ts.map +1 -0
  237. package/dist/tool-result-cache.js +173 -0
  238. package/dist/tool-result-cache.js.map +1 -0
  239. package/dist/tool-results.d.ts +41 -0
  240. package/dist/tool-results.d.ts.map +1 -0
  241. package/dist/tool-results.js +137 -0
  242. package/dist/tool-results.js.map +1 -0
  243. package/dist/tool-runtime.d.ts +46 -0
  244. package/dist/tool-runtime.d.ts.map +1 -0
  245. package/dist/tool-runtime.js +163 -0
  246. package/dist/tool-runtime.js.map +1 -0
  247. package/dist/tool-selection-evaluation.d.ts +214 -0
  248. package/dist/tool-selection-evaluation.d.ts.map +1 -0
  249. package/dist/tool-selection-evaluation.js +773 -0
  250. package/dist/tool-selection-evaluation.js.map +1 -0
  251. package/dist/tool-selection-json.d.ts +71 -0
  252. package/dist/tool-selection-json.d.ts.map +1 -0
  253. package/dist/tool-selection-json.js +284 -0
  254. package/dist/tool-selection-json.js.map +1 -0
  255. package/dist/tool-selection-policy.d.ts +81 -0
  256. package/dist/tool-selection-policy.d.ts.map +1 -0
  257. package/dist/tool-selection-policy.js +376 -0
  258. package/dist/tool-selection-policy.js.map +1 -0
  259. package/dist/tool-selection-replay.d.ts +26 -0
  260. package/dist/tool-selection-replay.d.ts.map +1 -0
  261. package/dist/tool-selection-replay.js +88 -0
  262. package/dist/tool-selection-replay.js.map +1 -0
  263. package/dist/tool-selection-rules.d.ts +46 -0
  264. package/dist/tool-selection-rules.d.ts.map +1 -0
  265. package/dist/tool-selection-rules.js +183 -0
  266. package/dist/tool-selection-rules.js.map +1 -0
  267. package/dist/tool-selection-trace-export.d.ts +37 -0
  268. package/dist/tool-selection-trace-export.d.ts.map +1 -0
  269. package/dist/tool-selection-trace-export.js +324 -0
  270. package/dist/tool-selection-trace-export.js.map +1 -0
  271. package/dist/trace-events.d.ts +14 -0
  272. package/dist/trace-events.d.ts.map +1 -0
  273. package/dist/trace-events.js +65 -0
  274. package/dist/trace-events.js.map +1 -0
  275. package/dist/trace-payload.d.ts +24 -0
  276. package/dist/trace-payload.d.ts.map +1 -0
  277. package/dist/trace-payload.js +113 -0
  278. package/dist/trace-payload.js.map +1 -0
  279. package/dist/trace-replay.d.ts +276 -0
  280. package/dist/trace-replay.d.ts.map +1 -0
  281. package/dist/trace-replay.js +685 -0
  282. package/dist/trace-replay.js.map +1 -0
  283. package/dist/trace-report.d.ts +320 -0
  284. package/dist/trace-report.d.ts.map +1 -0
  285. package/dist/trace-report.js +1394 -0
  286. package/dist/trace-report.js.map +1 -0
  287. package/dist/trace-stages.d.ts +70 -0
  288. package/dist/trace-stages.d.ts.map +1 -0
  289. package/dist/trace-stages.js +103 -0
  290. package/dist/trace-stages.js.map +1 -0
  291. package/dist/value-readers.d.ts +20 -0
  292. package/dist/value-readers.d.ts.map +1 -0
  293. package/dist/value-readers.js +82 -0
  294. package/dist/value-readers.js.map +1 -0
  295. package/package.json +341 -0
@@ -0,0 +1,176 @@
1
+ import { assistantWorkflowToolError, assistantWorkflowToolSkipped, assistantWorkflowToolSuccess, buildAssistantWorkflowToolResultsTracePayload, summarizeAssistantWorkflowToolResults, } from "./tool-results.js";
2
+ /**
3
+ * Adapts provider-specific integrations to the generic invocation executor.
4
+ * Applications can add local, HTTP, hosted, MCP, or REPL executors without
5
+ * making queue execution depend on their transport SDKs.
6
+ */
7
+ export function createAssistantWorkflowToolProviderExecutor(executors, options = {}) {
8
+ return async (invocation, context) => {
9
+ const providerExecutor = executors[invocation.provider];
10
+ if (providerExecutor) {
11
+ assertInvocationProviderConsistency(invocation);
12
+ return await providerExecutor(invocation, context);
13
+ }
14
+ if (options.fallback) {
15
+ return await options.fallback(invocation, context);
16
+ }
17
+ throw new Error(`No executor configured for assistant workflow tool provider: ${invocation.provider}.`);
18
+ };
19
+ }
20
+ export async function executeAssistantWorkflowToolInvocationQueue(queue, executor, options = {}) {
21
+ const results = [];
22
+ const continueOnError = options.continueOnError === true;
23
+ const now = options.now ?? (() => Date.now());
24
+ for (const [invocationIndex, invocation] of queue.invocations.entries()) {
25
+ const startedAt = now();
26
+ emitToolExecutionEvent(options.onEvent, createToolExecutionEvent({
27
+ phase: "started",
28
+ invocation,
29
+ invocationIndex,
30
+ queueStatus: queue.status,
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
+ }));
54
+ }
55
+ catch (error) {
56
+ const durationMs = now() - startedAt;
57
+ const errorMessage = getErrorMessage(error);
58
+ const retryable = options.retryableOnError === true;
59
+ results.push(assistantWorkflowToolError({
60
+ invocationId: invocation.id,
61
+ toolName: invocation.toolName,
62
+ stepId: invocation.stepId,
63
+ provider: invocation.provider,
64
+ errorMessage,
65
+ retryable,
66
+ durationMs,
67
+ }));
68
+ emitToolExecutionEvent(options.onEvent, createToolExecutionEvent({
69
+ phase: "failed",
70
+ invocation,
71
+ invocationIndex,
72
+ queueStatus: queue.status,
73
+ durationMs,
74
+ errorMessage,
75
+ retryable,
76
+ }));
77
+ if (!continueOnError) {
78
+ appendSkippedAfterFailure(results, queue.invocations.slice(invocationIndex + 1), invocation.id, invocationIndex + 1, queue.status, options.onEvent);
79
+ break;
80
+ }
81
+ }
82
+ }
83
+ return {
84
+ queue,
85
+ results,
86
+ summary: summarizeAssistantWorkflowToolResults(queue, results),
87
+ };
88
+ }
89
+ export function buildAssistantWorkflowToolExecutionTracePayload(report) {
90
+ return buildAssistantWorkflowToolResultsTracePayload(report.queue, report.results);
91
+ }
92
+ export function buildAssistantWorkflowToolExecutionEventTracePayload(event) {
93
+ return {
94
+ phase: event.phase,
95
+ invocationId: event.invocationId,
96
+ toolName: event.toolName,
97
+ stepId: event.stepId,
98
+ provider: event.provider,
99
+ invocationIndex: event.invocationIndex,
100
+ queueStatus: event.queueStatus,
101
+ durationMs: event.durationMs,
102
+ errorMessage: event.errorMessage,
103
+ retryable: event.retryable,
104
+ };
105
+ }
106
+ function appendSkippedAfterFailure(results, invocations, failedInvocationId, invocationIndex, queueStatus, onEvent) {
107
+ for (const [offset, invocation] of invocations.entries()) {
108
+ const errorMessage = `previous invocation failed: ${failedInvocationId}`;
109
+ results.push(assistantWorkflowToolSkipped({
110
+ invocationId: invocation.id,
111
+ toolName: invocation.toolName,
112
+ stepId: invocation.stepId,
113
+ provider: invocation.provider,
114
+ errorMessage,
115
+ }));
116
+ emitToolExecutionEvent(onEvent, createToolExecutionEvent({
117
+ phase: "skipped",
118
+ invocation,
119
+ invocationIndex: invocationIndex + offset,
120
+ queueStatus,
121
+ errorMessage,
122
+ }));
123
+ }
124
+ }
125
+ function createToolExecutionEvent(input) {
126
+ return {
127
+ phase: input.phase,
128
+ invocationId: input.invocation.id,
129
+ toolName: input.invocation.toolName,
130
+ stepId: input.invocation.stepId,
131
+ provider: input.invocation.provider,
132
+ invocationIndex: input.invocationIndex,
133
+ queueStatus: input.queueStatus,
134
+ durationMs: input.durationMs ?? null,
135
+ errorMessage: input.errorMessage ?? null,
136
+ retryable: input.retryable ?? null,
137
+ };
138
+ }
139
+ function emitToolExecutionEvent(observer, event) {
140
+ if (!observer)
141
+ return;
142
+ try {
143
+ observer(Object.freeze(event));
144
+ }
145
+ catch {
146
+ // Instrumentation must not alter the tool execution result.
147
+ }
148
+ }
149
+ function getErrorMessage(error) {
150
+ if (error instanceof Error && error.message.trim().length) {
151
+ return error.message.trim();
152
+ }
153
+ if (typeof error === "string" && error.trim().length) {
154
+ return error.trim();
155
+ }
156
+ return "tool invocation failed";
157
+ }
158
+ function readInvocationArgs(argsByInvocationId, invocationId) {
159
+ const rawArgs = argsByInvocationId?.[invocationId];
160
+ if (!isRecord(rawArgs))
161
+ return EMPTY_TOOL_INVOCATION_ARGS;
162
+ return Object.freeze({ ...rawArgs });
163
+ }
164
+ function isRecord(value) {
165
+ return typeof value === "object" && value !== null && !Array.isArray(value);
166
+ }
167
+ function assertInvocationProviderConsistency(invocation) {
168
+ if (invocation.provider !== invocation.binding.provider) {
169
+ throw new Error(`Assistant workflow invocation provider ${invocation.provider} does not match binding provider ${invocation.binding.provider}.`);
170
+ }
171
+ if (invocation.provider !== invocation.capability.provider) {
172
+ throw new Error(`Assistant workflow invocation provider ${invocation.provider} does not match capability provider ${invocation.capability.provider}.`);
173
+ }
174
+ }
175
+ const EMPTY_TOOL_INVOCATION_ARGS = Object.freeze({});
176
+ //# sourceMappingURL=tool-executor.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,18 @@
1
+ import type { AssistantWorkflowToolExecutor, AssistantWorkflowToolExecutorContext } from "./tool-executor.js";
2
+ import type { AssistantWorkflowToolInvocation } from "./tool-invocations.js";
3
+ export type AssistantWorkflowToolFixture = {
4
+ status: "success";
5
+ output?: unknown;
6
+ } | {
7
+ status: "error";
8
+ errorMessage: string;
9
+ };
10
+ export type AssistantWorkflowToolFixtureInput = AssistantWorkflowToolFixture | unknown;
11
+ export type AssistantWorkflowToolFixtureMap = Record<string, AssistantWorkflowToolFixtureInput>;
12
+ export type AssistantWorkflowFixtureToolExecutorOptions = {
13
+ defaultOutput?: unknown;
14
+ missingFixture?: "error" | "default-output";
15
+ };
16
+ export declare function buildAssistantWorkflowFixtureToolExecutor(fixtures: AssistantWorkflowToolFixtureMap, options?: AssistantWorkflowFixtureToolExecutorOptions): AssistantWorkflowToolExecutor;
17
+ export declare function executeAssistantWorkflowFixtureToolInvocation(fixtures: AssistantWorkflowToolFixtureMap, invocation: AssistantWorkflowToolInvocation, context: AssistantWorkflowToolExecutorContext, options?: AssistantWorkflowFixtureToolExecutorOptions): unknown;
18
+ //# sourceMappingURL=tool-fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-fixtures.d.ts","sourceRoot":"","sources":["../src/tool-fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,6BAA6B,EAC7B,oCAAoC,EACrC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AAE7E,MAAM,MAAM,4BAA4B,GACpC;IACA,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GACC;IACA,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEJ,MAAM,MAAM,iCAAiC,GAAG,4BAA4B,GAAG,OAAO,CAAC;AAEvF,MAAM,MAAM,+BAA+B,GAAG,MAAM,CAAC,MAAM,EAAE,iCAAiC,CAAC,CAAC;AAEhG,MAAM,MAAM,2CAA2C,GAAG;IACxD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;CAC7C,CAAC;AAEF,wBAAgB,yCAAyC,CACvD,QAAQ,EAAE,+BAA+B,EACzC,OAAO,GAAE,2CAAgD,GACxD,6BAA6B,CAO/B;AAED,wBAAgB,6CAA6C,CAC3D,QAAQ,EAAE,+BAA+B,EACzC,UAAU,EAAE,+BAA+B,EAC3C,OAAO,EAAE,oCAAoC,EAC7C,OAAO,GAAE,2CAAgD,GACxD,OAAO,CAiBT"}
@@ -0,0 +1,52 @@
1
+ export function buildAssistantWorkflowFixtureToolExecutor(fixtures, options = {}) {
2
+ return (invocation, context) => executeAssistantWorkflowFixtureToolInvocation(fixtures, invocation, context, options);
3
+ }
4
+ export function executeAssistantWorkflowFixtureToolInvocation(fixtures, invocation, context, options = {}) {
5
+ const fixture = findFixture(fixtures, invocation, context);
6
+ if (fixture === undefined) {
7
+ if (options.missingFixture === "default-output") {
8
+ return options.defaultOutput ?? {
9
+ invocationId: invocation.id,
10
+ toolName: invocation.toolName,
11
+ };
12
+ }
13
+ throw new Error(`No fixture output configured for ${invocation.id}.`);
14
+ }
15
+ const normalized = normalizeFixture(fixture);
16
+ if (normalized.status === "error") {
17
+ throw new Error(normalized.errorMessage);
18
+ }
19
+ return normalized.output;
20
+ }
21
+ function findFixture(fixtures, invocation, context) {
22
+ const indexKey = String(context.invocationIndex);
23
+ return fixtures[invocation.id]
24
+ ?? fixtures[invocation.toolName]
25
+ ?? fixtures[indexKey];
26
+ }
27
+ function normalizeFixture(value) {
28
+ if (isFixtureRecord(value)) {
29
+ if (value["status"] === "error") {
30
+ return {
31
+ status: "error",
32
+ errorMessage: typeof value["errorMessage"] === "string" && value["errorMessage"].trim().length
33
+ ? value["errorMessage"].trim()
34
+ : "fixture tool invocation failed",
35
+ };
36
+ }
37
+ if (value["status"] === "success") {
38
+ return {
39
+ status: "success",
40
+ ...("output" in value ? { output: value["output"] } : {}),
41
+ };
42
+ }
43
+ }
44
+ return {
45
+ status: "success",
46
+ output: value,
47
+ };
48
+ }
49
+ function isFixtureRecord(value) {
50
+ return typeof value === "object" && value !== null && !Array.isArray(value);
51
+ }
52
+ //# sourceMappingURL=tool-fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-fixtures.js","sourceRoot":"","sources":["../src/tool-fixtures.ts"],"names":[],"mappings":"AAyBA,MAAM,UAAU,yCAAyC,CACvD,QAAyC,EACzC,UAAuD,EAAE;IAEzD,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC,6CAA6C,CAC3E,QAAQ,EACR,UAAU,EACV,OAAO,EACP,OAAO,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6CAA6C,CAC3D,QAAyC,EACzC,UAA2C,EAC3C,OAA6C,EAC7C,UAAuD,EAAE;IAEzD,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IAC3D,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,OAAO,CAAC,cAAc,KAAK,gBAAgB,EAAE,CAAC;YAChD,OAAO,OAAO,CAAC,aAAa,IAAI;gBAC9B,YAAY,EAAE,UAAU,CAAC,EAAE;gBAC3B,QAAQ,EAAE,UAAU,CAAC,QAAQ;aAC9B,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,UAAU,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,CAAC;AAED,SAAS,WAAW,CAClB,QAAyC,EACzC,UAA2C,EAC3C,OAA6C;IAE7C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IACjD,OAAO,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;WACzB,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;WAC7B,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAwC;IAChE,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,OAAO,EAAE,CAAC;YAChC,OAAO;gBACL,MAAM,EAAE,OAAO;gBACf,YAAY,EAAE,OAAO,KAAK,CAAC,cAAc,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM;oBAC5F,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE;oBAC9B,CAAC,CAAC,gCAAgC;aACrC,CAAC;QACJ,CAAC;QACD,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,SAAS,EAAE,CAAC;YAClC,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,GAAG,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1D,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,KAAK;KACd,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC","sourcesContent":["import type {\n AssistantWorkflowToolExecutor,\n AssistantWorkflowToolExecutorContext,\n} from \"./tool-executor.js\";\nimport type { AssistantWorkflowToolInvocation } from \"./tool-invocations.js\";\n\nexport type AssistantWorkflowToolFixture =\n | {\n status: \"success\";\n output?: unknown;\n }\n | {\n status: \"error\";\n errorMessage: string;\n };\n\nexport type AssistantWorkflowToolFixtureInput = AssistantWorkflowToolFixture | unknown;\n\nexport type AssistantWorkflowToolFixtureMap = Record<string, AssistantWorkflowToolFixtureInput>;\n\nexport type AssistantWorkflowFixtureToolExecutorOptions = {\n defaultOutput?: unknown;\n missingFixture?: \"error\" | \"default-output\";\n};\n\nexport function buildAssistantWorkflowFixtureToolExecutor(\n fixtures: AssistantWorkflowToolFixtureMap,\n options: AssistantWorkflowFixtureToolExecutorOptions = {},\n): AssistantWorkflowToolExecutor {\n return (invocation, context) => executeAssistantWorkflowFixtureToolInvocation(\n fixtures,\n invocation,\n context,\n options,\n );\n}\n\nexport function executeAssistantWorkflowFixtureToolInvocation(\n fixtures: AssistantWorkflowToolFixtureMap,\n invocation: AssistantWorkflowToolInvocation,\n context: AssistantWorkflowToolExecutorContext,\n options: AssistantWorkflowFixtureToolExecutorOptions = {},\n): unknown {\n const fixture = findFixture(fixtures, invocation, context);\n if (fixture === undefined) {\n if (options.missingFixture === \"default-output\") {\n return options.defaultOutput ?? {\n invocationId: invocation.id,\n toolName: invocation.toolName,\n };\n }\n throw new Error(`No fixture output configured for ${invocation.id}.`);\n }\n\n const normalized = normalizeFixture(fixture);\n if (normalized.status === \"error\") {\n throw new Error(normalized.errorMessage);\n }\n return normalized.output;\n}\n\nfunction findFixture(\n fixtures: AssistantWorkflowToolFixtureMap,\n invocation: AssistantWorkflowToolInvocation,\n context: AssistantWorkflowToolExecutorContext,\n): AssistantWorkflowToolFixtureInput | undefined {\n const indexKey = String(context.invocationIndex);\n return fixtures[invocation.id]\n ?? fixtures[invocation.toolName]\n ?? fixtures[indexKey];\n}\n\nfunction normalizeFixture(value: AssistantWorkflowToolFixtureInput): AssistantWorkflowToolFixture {\n if (isFixtureRecord(value)) {\n if (value[\"status\"] === \"error\") {\n return {\n status: \"error\",\n errorMessage: typeof value[\"errorMessage\"] === \"string\" && value[\"errorMessage\"].trim().length\n ? value[\"errorMessage\"].trim()\n : \"fixture tool invocation failed\",\n };\n }\n if (value[\"status\"] === \"success\") {\n return {\n status: \"success\",\n ...(\"output\" in value ? { output: value[\"output\"] } : {}),\n };\n }\n }\n return {\n status: \"success\",\n output: value,\n };\n}\n\nfunction isFixtureRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"]}
@@ -0,0 +1,31 @@
1
+ import type { AssistantWorkflowDefinition, AssistantWorkflowPlanningStepKind, AssistantWorkflowToolBindingDefinition, AssistantWorkflowToolCapabilityDefinition, AssistantWorkflowToolProvider } from "./definition.js";
2
+ import type { AssistantWorkflowExecutionPlan, AssistantWorkflowExecutionPlanStatus } from "./execution-plan.js";
3
+ export type AssistantWorkflowToolInvocationQueueStatus = "ready" | "partial" | "blocked" | "empty";
4
+ export type AssistantWorkflowToolInvocation = {
5
+ id: string;
6
+ stepId: string;
7
+ stepKind: AssistantWorkflowPlanningStepKind;
8
+ toolName: string;
9
+ required: boolean;
10
+ provider: AssistantWorkflowToolProvider;
11
+ capability: AssistantWorkflowToolCapabilityDefinition;
12
+ binding: AssistantWorkflowToolBindingDefinition;
13
+ };
14
+ export type AssistantWorkflowToolInvocationQueue = {
15
+ status: AssistantWorkflowToolInvocationQueueStatus;
16
+ invocations: AssistantWorkflowToolInvocation[];
17
+ skippedStepIds: string[];
18
+ blockingReasons: string[];
19
+ warnings: string[];
20
+ };
21
+ export type AssistantWorkflowToolInvocationQueueOptions = {
22
+ includeOptional?: boolean;
23
+ allowWhenBlocked?: boolean;
24
+ };
25
+ export type AssistantWorkflowToolInvocationRun = {
26
+ status: AssistantWorkflowExecutionPlanStatus;
27
+ executionPlan: AssistantWorkflowExecutionPlan;
28
+ };
29
+ export declare function buildAssistantWorkflowToolInvocationQueue(workflow: AssistantWorkflowDefinition<string, string, string, string>, run: AssistantWorkflowToolInvocationRun, options?: AssistantWorkflowToolInvocationQueueOptions): AssistantWorkflowToolInvocationQueue;
30
+ export declare function buildAssistantWorkflowToolInvocationQueueTracePayload(queue: AssistantWorkflowToolInvocationQueue): Record<string, unknown>;
31
+ //# sourceMappingURL=tool-invocations.d.ts.map
@@ -0,0 +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;AAMhH,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,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,6BAA6B,CAAC;IACxC,UAAU,EAAE,yCAAyC,CAAC;IACtD,OAAO,EAAE,sCAAsC,CAAC;CACjD,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;CACpB,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,CA4CtC;AAED,wBAAgB,qDAAqD,CACnE,KAAK,EAAE,oCAAoC,GAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmBzB"}
@@ -0,0 +1,79 @@
1
+ import { resolveAssistantWorkflowTools, } from "./tool-bindings.js";
2
+ export function buildAssistantWorkflowToolInvocationQueue(workflow, run, options = {}) {
3
+ const includeOptional = options.includeOptional !== false;
4
+ const blocked = run.status === "blocked" || run.status === "needs-clarification";
5
+ if (blocked && options.allowWhenBlocked !== true) {
6
+ return {
7
+ status: "blocked",
8
+ invocations: [],
9
+ skippedStepIds: run.executionPlan.steps.map((step) => step.id),
10
+ blockingReasons: [...run.executionPlan.blockingReasons],
11
+ warnings: [...run.executionPlan.warnings],
12
+ };
13
+ }
14
+ const invocations = [];
15
+ const skippedStepIds = [];
16
+ for (const step of run.executionPlan.steps) {
17
+ if (step.status === "blocked" || step.status === "optional-skipped") {
18
+ skippedStepIds.push(step.id);
19
+ continue;
20
+ }
21
+ const readyToolNames = includeOptional
22
+ ? step.readyToolNames
23
+ : step.readyToolNames.filter((toolName) => step.requiredToolNames.includes(toolName));
24
+ const resolutions = resolveAssistantWorkflowTools(workflow, readyToolNames).resolutions;
25
+ for (const resolution of resolutions) {
26
+ const invocation = buildInvocation(step.id, step.kind, step.requiredToolNames.includes(resolution.toolName), resolution);
27
+ if (invocation) {
28
+ invocations.push(invocation);
29
+ }
30
+ }
31
+ }
32
+ return {
33
+ status: invocations.length === 0
34
+ ? "empty"
35
+ : run.status === "partial"
36
+ ? "partial"
37
+ : "ready",
38
+ invocations,
39
+ skippedStepIds,
40
+ blockingReasons: [...run.executionPlan.blockingReasons],
41
+ warnings: [...run.executionPlan.warnings],
42
+ };
43
+ }
44
+ export function buildAssistantWorkflowToolInvocationQueueTracePayload(queue) {
45
+ return {
46
+ status: queue.status,
47
+ invocationCount: queue.invocations.length,
48
+ invocations: queue.invocations.map((invocation) => ({
49
+ id: invocation.id,
50
+ stepId: invocation.stepId,
51
+ stepKind: invocation.stepKind,
52
+ toolName: invocation.toolName,
53
+ required: invocation.required,
54
+ provider: invocation.provider,
55
+ effect: invocation.capability.effect,
56
+ outputKinds: invocation.capability.outputKinds,
57
+ bindingProvider: invocation.binding.provider,
58
+ })),
59
+ skippedStepIds: queue.skippedStepIds,
60
+ blockingReasons: queue.blockingReasons,
61
+ warnings: queue.warnings,
62
+ };
63
+ }
64
+ function buildInvocation(stepId, stepKind, required, resolution) {
65
+ if (resolution.status !== "ready" || !resolution.capability || !resolution.binding || !resolution.provider) {
66
+ return null;
67
+ }
68
+ return {
69
+ id: `${stepId}:${resolution.toolName}`,
70
+ stepId,
71
+ stepKind,
72
+ toolName: resolution.toolName,
73
+ required,
74
+ provider: resolution.provider,
75
+ capability: resolution.capability,
76
+ binding: resolution.binding,
77
+ };
78
+ }
79
+ //# sourceMappingURL=tool-invocations.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,43 @@
1
+ import type { AssistantWorkflowHttpMethod } from "./definition.js";
2
+ import type { AssistantWorkflowToolExecutorContext, AssistantWorkflowToolInvocationArgs, AssistantWorkflowToolInvocationForProvider, AssistantWorkflowToolProviderExecutor } from "./tool-executor.js";
3
+ export type AssistantWorkflowLocalFunctionToolExecutionRequest = {
4
+ invocation: AssistantWorkflowToolInvocationForProvider<"local-function">;
5
+ handlerId: string;
6
+ args: AssistantWorkflowToolInvocationArgs;
7
+ };
8
+ export type AssistantWorkflowHttpToolExecutionRequest = {
9
+ invocation: AssistantWorkflowToolInvocationForProvider<"http">;
10
+ method: AssistantWorkflowHttpMethod;
11
+ path: string;
12
+ baseUrlRef: string | null;
13
+ operationId: string | null;
14
+ args: AssistantWorkflowToolInvocationArgs;
15
+ };
16
+ export type AssistantWorkflowMcpToolExecutionRequest = {
17
+ invocation: AssistantWorkflowToolInvocationForProvider<"mcp">;
18
+ serverId: string;
19
+ toolName: string;
20
+ args: AssistantWorkflowToolInvocationArgs;
21
+ };
22
+ export type AssistantWorkflowHostedToolExecutionRequest = {
23
+ invocation: AssistantWorkflowToolInvocationForProvider<"openai-hosted">;
24
+ hostedToolType: string;
25
+ toolName: string | null;
26
+ args: AssistantWorkflowToolInvocationArgs;
27
+ };
28
+ export type AssistantWorkflowReplToolExecutionRequest = {
29
+ invocation: AssistantWorkflowToolInvocationForProvider<"repl">;
30
+ runtimeId: string;
31
+ functionName: string | null;
32
+ commandTemplate: string | null;
33
+ allowFilesystem: boolean;
34
+ allowNetwork: boolean;
35
+ args: AssistantWorkflowToolInvocationArgs;
36
+ };
37
+ export declare function createAssistantWorkflowLocalFunctionToolProviderExecutor(execute: (request: AssistantWorkflowLocalFunctionToolExecutionRequest) => unknown | Promise<unknown>): AssistantWorkflowToolProviderExecutor<"local-function">;
38
+ export declare function createAssistantWorkflowHttpToolProviderExecutor(execute: (request: AssistantWorkflowHttpToolExecutionRequest) => unknown | Promise<unknown>): AssistantWorkflowToolProviderExecutor<"http">;
39
+ export declare function createAssistantWorkflowMcpToolProviderExecutor(execute: (request: AssistantWorkflowMcpToolExecutionRequest) => unknown | Promise<unknown>): AssistantWorkflowToolProviderExecutor<"mcp">;
40
+ export declare function createAssistantWorkflowHostedToolProviderExecutor(execute: (request: AssistantWorkflowHostedToolExecutionRequest) => unknown | Promise<unknown>): AssistantWorkflowToolProviderExecutor<"openai-hosted">;
41
+ export declare function createAssistantWorkflowReplToolProviderExecutor(execute: (request: AssistantWorkflowReplToolExecutionRequest) => unknown | Promise<unknown>): AssistantWorkflowToolProviderExecutor<"repl">;
42
+ export declare function buildAssistantWorkflowToolProviderExecutionTracePayload(invocation: AssistantWorkflowToolInvocationForProvider, context: AssistantWorkflowToolExecutorContext): Record<string, unknown>;
43
+ //# sourceMappingURL=tool-provider-executors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-provider-executors.d.ts","sourceRoot":"","sources":["../src/tool-provider-executors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,2BAA2B,EAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EACV,oCAAoC,EACpC,mCAAmC,EACnC,0CAA0C,EAC1C,qCAAqC,EACtC,MAAM,oBAAoB,CAAC;AAE5B,MAAM,MAAM,kDAAkD,GAAG;IAC/D,UAAU,EAAE,0CAA0C,CAAC,gBAAgB,CAAC,CAAC;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,mCAAmC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,yCAAyC,GAAG;IACtD,UAAU,EAAE,0CAA0C,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,EAAE,2BAA2B,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,mCAAmC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,wCAAwC,GAAG;IACrD,UAAU,EAAE,0CAA0C,CAAC,KAAK,CAAC,CAAC;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,mCAAmC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,2CAA2C,GAAG;IACxD,UAAU,EAAE,0CAA0C,CAAC,eAAe,CAAC,CAAC;IACxE,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,mCAAmC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,yCAAyC,GAAG;IACtD,UAAU,EAAE,0CAA0C,CAAC,MAAM,CAAC,CAAC;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,mCAAmC,CAAC;CAC3C,CAAC;AAEF,wBAAgB,wDAAwD,CACtE,OAAO,EAAE,CAAC,OAAO,EAAE,kDAAkD,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GACnG,qCAAqC,CAAC,gBAAgB,CAAC,CAOzD;AAED,wBAAgB,+CAA+C,CAC7D,OAAO,EAAE,CAAC,OAAO,EAAE,yCAAyC,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAC1F,qCAAqC,CAAC,MAAM,CAAC,CAU/C;AAED,wBAAgB,8CAA8C,CAC5D,OAAO,EAAE,CAAC,OAAO,EAAE,wCAAwC,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GACzF,qCAAqC,CAAC,KAAK,CAAC,CAQ9C;AAED,wBAAgB,iDAAiD,CAC/D,OAAO,EAAE,CAAC,OAAO,EAAE,2CAA2C,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAC5F,qCAAqC,CAAC,eAAe,CAAC,CAQxD;AAED,wBAAgB,+CAA+C,CAC7D,OAAO,EAAE,CAAC,OAAO,EAAE,yCAAyC,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAC1F,qCAAqC,CAAC,MAAM,CAAC,CAW/C;AAED,wBAAgB,uDAAuD,CACrE,UAAU,EAAE,0CAA0C,EACtD,OAAO,EAAE,oCAAoC,GAC5C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUzB"}
@@ -0,0 +1,59 @@
1
+ export function createAssistantWorkflowLocalFunctionToolProviderExecutor(execute) {
2
+ return async (invocation, context) => await execute({
3
+ invocation,
4
+ handlerId: invocation.binding.handlerId,
5
+ args: context.args,
6
+ });
7
+ }
8
+ export function createAssistantWorkflowHttpToolProviderExecutor(execute) {
9
+ return async (invocation, context) => await execute({
10
+ invocation,
11
+ method: invocation.binding.method ?? "GET",
12
+ path: invocation.binding.path,
13
+ baseUrlRef: normalizeNullableString(invocation.binding.baseUrlRef),
14
+ operationId: normalizeNullableString(invocation.binding.operationId),
15
+ args: context.args,
16
+ });
17
+ }
18
+ export function createAssistantWorkflowMcpToolProviderExecutor(execute) {
19
+ return async (invocation, context) => await execute({
20
+ invocation,
21
+ serverId: invocation.binding.serverId,
22
+ toolName: invocation.binding.toolName,
23
+ args: context.args,
24
+ });
25
+ }
26
+ export function createAssistantWorkflowHostedToolProviderExecutor(execute) {
27
+ return async (invocation, context) => await execute({
28
+ invocation,
29
+ hostedToolType: invocation.binding.hostedToolType,
30
+ toolName: normalizeNullableString(invocation.binding.toolName),
31
+ args: context.args,
32
+ });
33
+ }
34
+ export function createAssistantWorkflowReplToolProviderExecutor(execute) {
35
+ return async (invocation, context) => await execute({
36
+ invocation,
37
+ runtimeId: invocation.binding.runtimeId,
38
+ functionName: normalizeNullableString(invocation.binding.functionName),
39
+ commandTemplate: normalizeNullableString(invocation.binding.commandTemplate),
40
+ allowFilesystem: invocation.binding.allowFilesystem === true,
41
+ allowNetwork: invocation.binding.allowNetwork === true,
42
+ args: context.args,
43
+ });
44
+ }
45
+ export function buildAssistantWorkflowToolProviderExecutionTracePayload(invocation, context) {
46
+ return {
47
+ invocationId: invocation.id,
48
+ toolName: invocation.toolName,
49
+ provider: invocation.provider,
50
+ stepId: invocation.stepId,
51
+ invocationIndex: context.invocationIndex,
52
+ queueStatus: context.queueStatus,
53
+ argumentCount: Object.keys(context.args).length,
54
+ };
55
+ }
56
+ function normalizeNullableString(value) {
57
+ return typeof value === "string" && value.trim().length ? value.trim() : null;
58
+ }
59
+ //# sourceMappingURL=tool-provider-executors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-provider-executors.js","sourceRoot":"","sources":["../src/tool-provider-executors.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n AssistantWorkflowHttpMethod,\n} from \"./definition.js\";\nimport type {\n AssistantWorkflowToolExecutorContext,\n AssistantWorkflowToolInvocationArgs,\n AssistantWorkflowToolInvocationForProvider,\n AssistantWorkflowToolProviderExecutor,\n} from \"./tool-executor.js\";\n\nexport type AssistantWorkflowLocalFunctionToolExecutionRequest = {\n invocation: AssistantWorkflowToolInvocationForProvider<\"local-function\">;\n handlerId: string;\n args: AssistantWorkflowToolInvocationArgs;\n};\n\nexport type AssistantWorkflowHttpToolExecutionRequest = {\n invocation: AssistantWorkflowToolInvocationForProvider<\"http\">;\n method: AssistantWorkflowHttpMethod;\n path: string;\n baseUrlRef: string | null;\n operationId: string | null;\n args: AssistantWorkflowToolInvocationArgs;\n};\n\nexport type AssistantWorkflowMcpToolExecutionRequest = {\n invocation: AssistantWorkflowToolInvocationForProvider<\"mcp\">;\n serverId: string;\n toolName: string;\n args: AssistantWorkflowToolInvocationArgs;\n};\n\nexport type AssistantWorkflowHostedToolExecutionRequest = {\n invocation: AssistantWorkflowToolInvocationForProvider<\"openai-hosted\">;\n hostedToolType: string;\n toolName: string | null;\n args: AssistantWorkflowToolInvocationArgs;\n};\n\nexport type AssistantWorkflowReplToolExecutionRequest = {\n invocation: AssistantWorkflowToolInvocationForProvider<\"repl\">;\n runtimeId: string;\n functionName: string | null;\n commandTemplate: string | null;\n allowFilesystem: boolean;\n allowNetwork: boolean;\n args: AssistantWorkflowToolInvocationArgs;\n};\n\nexport function createAssistantWorkflowLocalFunctionToolProviderExecutor(\n execute: (request: AssistantWorkflowLocalFunctionToolExecutionRequest) => unknown | Promise<unknown>,\n): AssistantWorkflowToolProviderExecutor<\"local-function\"> {\n return async (invocation, context) =>\n await execute({\n invocation,\n handlerId: invocation.binding.handlerId,\n args: context.args,\n });\n}\n\nexport function createAssistantWorkflowHttpToolProviderExecutor(\n execute: (request: AssistantWorkflowHttpToolExecutionRequest) => unknown | Promise<unknown>,\n): AssistantWorkflowToolProviderExecutor<\"http\"> {\n return async (invocation, context) =>\n await execute({\n invocation,\n method: invocation.binding.method ?? \"GET\",\n path: invocation.binding.path,\n baseUrlRef: normalizeNullableString(invocation.binding.baseUrlRef),\n operationId: normalizeNullableString(invocation.binding.operationId),\n args: context.args,\n });\n}\n\nexport function createAssistantWorkflowMcpToolProviderExecutor(\n execute: (request: AssistantWorkflowMcpToolExecutionRequest) => unknown | Promise<unknown>,\n): AssistantWorkflowToolProviderExecutor<\"mcp\"> {\n return async (invocation, context) =>\n await execute({\n invocation,\n serverId: invocation.binding.serverId,\n toolName: invocation.binding.toolName,\n args: context.args,\n });\n}\n\nexport function createAssistantWorkflowHostedToolProviderExecutor(\n execute: (request: AssistantWorkflowHostedToolExecutionRequest) => unknown | Promise<unknown>,\n): AssistantWorkflowToolProviderExecutor<\"openai-hosted\"> {\n return async (invocation, context) =>\n await execute({\n invocation,\n hostedToolType: invocation.binding.hostedToolType,\n toolName: normalizeNullableString(invocation.binding.toolName),\n args: context.args,\n });\n}\n\nexport function createAssistantWorkflowReplToolProviderExecutor(\n execute: (request: AssistantWorkflowReplToolExecutionRequest) => unknown | Promise<unknown>,\n): AssistantWorkflowToolProviderExecutor<\"repl\"> {\n return async (invocation, context) =>\n await execute({\n invocation,\n runtimeId: invocation.binding.runtimeId,\n functionName: normalizeNullableString(invocation.binding.functionName),\n commandTemplate: normalizeNullableString(invocation.binding.commandTemplate),\n allowFilesystem: invocation.binding.allowFilesystem === true,\n allowNetwork: invocation.binding.allowNetwork === true,\n args: context.args,\n });\n}\n\nexport function buildAssistantWorkflowToolProviderExecutionTracePayload(\n invocation: AssistantWorkflowToolInvocationForProvider,\n context: AssistantWorkflowToolExecutorContext,\n): Record<string, unknown> {\n return {\n invocationId: invocation.id,\n toolName: invocation.toolName,\n provider: invocation.provider,\n stepId: invocation.stepId,\n invocationIndex: context.invocationIndex,\n queueStatus: context.queueStatus,\n argumentCount: Object.keys(context.args).length,\n };\n}\n\nfunction normalizeNullableString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim().length ? value.trim() : null;\n}\n"]}
@@ -0,0 +1,37 @@
1
+ export type AssistantWorkflowToolResultCacheStats = {
2
+ hits: number;
3
+ misses: number;
4
+ evictions: number;
5
+ expirations: number;
6
+ size: number;
7
+ };
8
+ export type AssistantWorkflowToolResultCacheOptions = {
9
+ maxEntries?: number;
10
+ cacheableToolNames?: ReadonlySet<string> | readonly string[] | null;
11
+ isCacheableTool?: (toolName: string) => boolean;
12
+ sortArrayArgKeys?: readonly string[];
13
+ chooseTtlMs?: (args: Record<string, unknown>, nowMs: number) => number;
14
+ shouldCacheValue?: (value: string) => boolean;
15
+ };
16
+ export declare function chooseAssistantWorkflowToolResultCacheTtlMs(args: Record<string, unknown>, nowMs: number): number;
17
+ export declare function buildAssistantWorkflowToolResultCacheKey(scopeId: string, toolName: string, args: Record<string, unknown>, options?: Pick<AssistantWorkflowToolResultCacheOptions, "sortArrayArgKeys">): string;
18
+ export declare function normalizeToolResultCacheValue(value: unknown): unknown;
19
+ export declare class AssistantWorkflowToolResultCache {
20
+ private readonly cache;
21
+ private readonly maxEntries;
22
+ private readonly cacheableToolNames;
23
+ private readonly isCacheableToolFn;
24
+ private readonly sortArrayArgKeys;
25
+ private readonly chooseTtlMsFn;
26
+ private readonly shouldCacheValueFn;
27
+ private stats;
28
+ constructor(options?: AssistantWorkflowToolResultCacheOptions);
29
+ isCacheableTool(toolName: string): boolean;
30
+ get(scopeId: string, toolName: string, args: Record<string, unknown>, nowMs: number): string | null;
31
+ set(scopeId: string, toolName: string, args: Record<string, unknown>, value: string, nowMs: number): void;
32
+ clearScope(scopeId: string): void;
33
+ clear(): void;
34
+ getStats(): AssistantWorkflowToolResultCacheStats;
35
+ private buildKey;
36
+ }
37
+ //# sourceMappingURL=tool-result-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-result-cache.d.ts","sourceRoot":"","sources":["../src/tool-result-cache.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qCAAqC,GAAG;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,uCAAuC,GAAG;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IACpE,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC;IAChD,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACvE,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CAC/C,CAAC;AAcF,wBAAgB,2CAA2C,CACzD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,GACZ,MAAM,CAQR;AAED,wBAAgB,wCAAwC,CACtD,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,GAAE,IAAI,CAAC,uCAAuC,EAAE,kBAAkB,CAAM,GAC9E,MAAM,CAiBR;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAyBrE;AAED,qBAAa,gCAAgC;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA6B;IAChE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAyC;IAC3E,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IACrD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2D;IACzF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA6B;IAChE,OAAO,CAAC,KAAK,CAMX;gBAEU,OAAO,GAAE,uCAA4C;IAWjE,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAM1C,GAAG,CACD,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,GACZ,MAAM,GAAG,IAAI;IAqBhB,GAAG,CACD,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,IAAI;IAmBP,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAUjC,KAAK,IAAI,IAAI;IAKb,QAAQ,IAAI,qCAAqC;IAIjD,OAAO,CAAC,QAAQ;CASjB"}