@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,45 @@
1
+ import type { AssistantWorkflowDefinition } from "./definition.js";
2
+ import { type AssistantWorkflowSerializedDefinition } from "./definition-json.js";
3
+ import type { AssistantWorkflowJsonValue } from "./run-report-json.js";
4
+ export type AssistantWorkflowDefinitionCatalogDiagnosticCode = "duplicate_definition_version";
5
+ export type AssistantWorkflowDefinitionCatalogDiagnostic = {
6
+ severity: "error" | "warning";
7
+ code: AssistantWorkflowDefinitionCatalogDiagnosticCode;
8
+ workflowId: string;
9
+ workflowVersion: number;
10
+ message: string;
11
+ };
12
+ export type AssistantWorkflowDefinitionCatalogEntry = {
13
+ workflowId: string;
14
+ workflowVersion: number;
15
+ valid: boolean;
16
+ errorCount: number;
17
+ warningCount: number;
18
+ intentCount: number;
19
+ toolCapabilityCount: number;
20
+ toolBindingCount: number;
21
+ definition: AssistantWorkflowSerializedDefinition;
22
+ };
23
+ export type AssistantWorkflowDefinitionCatalog = {
24
+ generatedAt: string;
25
+ definitionCount: number;
26
+ workflowCount: number;
27
+ validDefinitionCount: number;
28
+ invalidDefinitionCount: number;
29
+ warningDefinitionCount: number;
30
+ duplicateVersionCount: number;
31
+ diagnostics: AssistantWorkflowDefinitionCatalogDiagnostic[];
32
+ entries: AssistantWorkflowDefinitionCatalogEntry[];
33
+ };
34
+ export type AssistantWorkflowDefinitionCatalogOptions = {
35
+ generatedAt?: string;
36
+ };
37
+ export type AssistantWorkflowDefinitionLookupOptions = {
38
+ includeInvalid?: boolean;
39
+ };
40
+ export declare function buildAssistantWorkflowDefinitionCatalog(definitions: readonly AssistantWorkflowDefinition<string, string, string, string>[], options?: AssistantWorkflowDefinitionCatalogOptions): AssistantWorkflowDefinitionCatalog;
41
+ export declare function buildAssistantWorkflowSerializedDefinitionCatalog(definitions: readonly AssistantWorkflowSerializedDefinition[], options?: AssistantWorkflowDefinitionCatalogOptions): AssistantWorkflowDefinitionCatalog;
42
+ export declare function findAssistantWorkflowCatalogDefinition(catalog: AssistantWorkflowDefinitionCatalog, workflowId: string, version?: number, options?: AssistantWorkflowDefinitionLookupOptions): AssistantWorkflowSerializedDefinition | null;
43
+ export declare function findLatestAssistantWorkflowCatalogDefinition(catalog: AssistantWorkflowDefinitionCatalog, workflowId: string, options?: AssistantWorkflowDefinitionLookupOptions): AssistantWorkflowSerializedDefinition | null;
44
+ export declare function buildAssistantWorkflowDefinitionCatalogTracePayload(catalog: AssistantWorkflowDefinitionCatalog): Record<string, AssistantWorkflowJsonValue>;
45
+ //# sourceMappingURL=definition-catalog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition-catalog.d.ts","sourceRoot":"","sources":["../src/definition-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAGL,KAAK,qCAAqC,EAC3C,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,MAAM,MAAM,gDAAgD,GACxD,8BAA8B,CAAC;AAEnC,MAAM,MAAM,4CAA4C,GAAG;IACzD,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,IAAI,EAAE,gDAAgD,CAAC;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,uCAAuC,GAAG;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,qCAAqC,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,4CAA4C,EAAE,CAAC;IAC5D,OAAO,EAAE,uCAAuC,EAAE,CAAC;CACpD,CAAC;AAEF,MAAM,MAAM,yCAAyC,GAAG;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,wCAAwC,GAAG;IACrD,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,wBAAgB,uCAAuC,CACrD,WAAW,EAAE,SAAS,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EACnF,OAAO,GAAE,yCAA8C,GACtD,kCAAkC,CAKpC;AAED,wBAAgB,iDAAiD,CAC/D,WAAW,EAAE,SAAS,qCAAqC,EAAE,EAC7D,OAAO,GAAE,yCAA8C,GACtD,kCAAkC,CAqBpC;AAED,wBAAgB,sCAAsC,CACpD,OAAO,EAAE,kCAAkC,EAC3C,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,GAAE,wCAA6C,GACrD,qCAAqC,GAAG,IAAI,CAO9C;AAED,wBAAgB,4CAA4C,CAC1D,OAAO,EAAE,kCAAkC,EAC3C,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,wCAA6C,GACrD,qCAAqC,GAAG,IAAI,CAE9C;AAED,wBAAgB,mDAAmD,CACjE,OAAO,EAAE,kCAAkC,GAC1C,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CA4B5C"}
@@ -0,0 +1,97 @@
1
+ import { buildAssistantWorkflowDefinitionTracePayload, serializeAssistantWorkflowDefinition, } from "./definition-json.js";
2
+ export function buildAssistantWorkflowDefinitionCatalog(definitions, options = {}) {
3
+ return buildAssistantWorkflowSerializedDefinitionCatalog(definitions.map(serializeAssistantWorkflowDefinition), options);
4
+ }
5
+ export function buildAssistantWorkflowSerializedDefinitionCatalog(definitions, options = {}) {
6
+ const entries = definitions
7
+ .map(toCatalogEntry)
8
+ .sort((left, right) => {
9
+ if (left.workflowId !== right.workflowId)
10
+ return left.workflowId.localeCompare(right.workflowId);
11
+ return right.workflowVersion - left.workflowVersion;
12
+ });
13
+ const diagnostics = collectCatalogDiagnostics(entries);
14
+ const workflowIds = new Set(entries.map((entry) => entry.workflowId));
15
+ return {
16
+ generatedAt: options.generatedAt ?? new Date().toISOString(),
17
+ definitionCount: entries.length,
18
+ workflowCount: workflowIds.size,
19
+ validDefinitionCount: entries.filter((entry) => entry.valid).length,
20
+ invalidDefinitionCount: entries.filter((entry) => !entry.valid).length,
21
+ warningDefinitionCount: entries.filter((entry) => entry.warningCount > 0).length,
22
+ duplicateVersionCount: diagnostics.filter((diagnostic) => diagnostic.code === "duplicate_definition_version").length,
23
+ diagnostics,
24
+ entries,
25
+ };
26
+ }
27
+ export function findAssistantWorkflowCatalogDefinition(catalog, workflowId, version, options = {}) {
28
+ const candidates = catalog.entries.filter((entry) => entry.workflowId === workflowId &&
29
+ (version === undefined || entry.workflowVersion === version) &&
30
+ (options.includeInvalid === true || entry.valid));
31
+ return candidates[0]?.definition ?? null;
32
+ }
33
+ export function findLatestAssistantWorkflowCatalogDefinition(catalog, workflowId, options = {}) {
34
+ return findAssistantWorkflowCatalogDefinition(catalog, workflowId, undefined, options);
35
+ }
36
+ export function buildAssistantWorkflowDefinitionCatalogTracePayload(catalog) {
37
+ return {
38
+ generatedAt: catalog.generatedAt,
39
+ definitionCount: catalog.definitionCount,
40
+ workflowCount: catalog.workflowCount,
41
+ validDefinitionCount: catalog.validDefinitionCount,
42
+ invalidDefinitionCount: catalog.invalidDefinitionCount,
43
+ warningDefinitionCount: catalog.warningDefinitionCount,
44
+ duplicateVersionCount: catalog.duplicateVersionCount,
45
+ diagnostics: catalog.diagnostics.map((diagnostic) => ({
46
+ severity: diagnostic.severity,
47
+ code: diagnostic.code,
48
+ workflowId: diagnostic.workflowId,
49
+ workflowVersion: diagnostic.workflowVersion,
50
+ message: diagnostic.message,
51
+ })),
52
+ entries: catalog.entries.map((entry) => ({
53
+ workflowId: entry.workflowId,
54
+ workflowVersion: entry.workflowVersion,
55
+ valid: entry.valid,
56
+ errorCount: entry.errorCount,
57
+ warningCount: entry.warningCount,
58
+ intentCount: entry.intentCount,
59
+ toolCapabilityCount: entry.toolCapabilityCount,
60
+ toolBindingCount: entry.toolBindingCount,
61
+ definition: buildAssistantWorkflowDefinitionTracePayload(entry.definition),
62
+ })),
63
+ };
64
+ }
65
+ function toCatalogEntry(definition) {
66
+ return {
67
+ workflowId: definition.workflowId,
68
+ workflowVersion: definition.workflowVersion,
69
+ valid: definition.summary.valid,
70
+ errorCount: definition.summary.errorCount,
71
+ warningCount: definition.summary.warningCount,
72
+ intentCount: definition.summary.intentCount,
73
+ toolCapabilityCount: definition.summary.toolCapabilityCount,
74
+ toolBindingCount: definition.summary.toolBindingCount,
75
+ definition,
76
+ };
77
+ }
78
+ function collectCatalogDiagnostics(entries) {
79
+ const counts = new Map();
80
+ for (const entry of entries) {
81
+ const key = `${entry.workflowId}@${entry.workflowVersion}`;
82
+ counts.set(key, [...(counts.get(key) ?? []), entry]);
83
+ }
84
+ return [...counts.values()]
85
+ .filter((group) => group.length > 1)
86
+ .map((group) => {
87
+ const first = group[0];
88
+ return {
89
+ severity: "error",
90
+ code: "duplicate_definition_version",
91
+ workflowId: first?.workflowId ?? "",
92
+ workflowVersion: first?.workflowVersion ?? 0,
93
+ message: `Duplicate assistant workflow definition version: ${first?.workflowId}@${first?.workflowVersion}.`,
94
+ };
95
+ });
96
+ }
97
+ //# sourceMappingURL=definition-catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition-catalog.js","sourceRoot":"","sources":["../src/definition-catalog.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantWorkflowDefinition } from \"./definition.js\";\nimport {\n buildAssistantWorkflowDefinitionTracePayload,\n serializeAssistantWorkflowDefinition,\n type AssistantWorkflowSerializedDefinition,\n} from \"./definition-json.js\";\nimport type { AssistantWorkflowJsonValue } from \"./run-report-json.js\";\n\nexport type AssistantWorkflowDefinitionCatalogDiagnosticCode =\n | \"duplicate_definition_version\";\n\nexport type AssistantWorkflowDefinitionCatalogDiagnostic = {\n severity: \"error\" | \"warning\";\n code: AssistantWorkflowDefinitionCatalogDiagnosticCode;\n workflowId: string;\n workflowVersion: number;\n message: string;\n};\n\nexport type AssistantWorkflowDefinitionCatalogEntry = {\n workflowId: string;\n workflowVersion: number;\n valid: boolean;\n errorCount: number;\n warningCount: number;\n intentCount: number;\n toolCapabilityCount: number;\n toolBindingCount: number;\n definition: AssistantWorkflowSerializedDefinition;\n};\n\nexport type AssistantWorkflowDefinitionCatalog = {\n generatedAt: string;\n definitionCount: number;\n workflowCount: number;\n validDefinitionCount: number;\n invalidDefinitionCount: number;\n warningDefinitionCount: number;\n duplicateVersionCount: number;\n diagnostics: AssistantWorkflowDefinitionCatalogDiagnostic[];\n entries: AssistantWorkflowDefinitionCatalogEntry[];\n};\n\nexport type AssistantWorkflowDefinitionCatalogOptions = {\n generatedAt?: string;\n};\n\nexport type AssistantWorkflowDefinitionLookupOptions = {\n includeInvalid?: boolean;\n};\n\nexport function buildAssistantWorkflowDefinitionCatalog(\n definitions: readonly AssistantWorkflowDefinition<string, string, string, string>[],\n options: AssistantWorkflowDefinitionCatalogOptions = {},\n): AssistantWorkflowDefinitionCatalog {\n return buildAssistantWorkflowSerializedDefinitionCatalog(\n definitions.map(serializeAssistantWorkflowDefinition),\n options,\n );\n}\n\nexport function buildAssistantWorkflowSerializedDefinitionCatalog(\n definitions: readonly AssistantWorkflowSerializedDefinition[],\n options: AssistantWorkflowDefinitionCatalogOptions = {},\n): AssistantWorkflowDefinitionCatalog {\n const entries = definitions\n .map(toCatalogEntry)\n .sort((left, right) => {\n if (left.workflowId !== right.workflowId) return left.workflowId.localeCompare(right.workflowId);\n return right.workflowVersion - left.workflowVersion;\n });\n const diagnostics = collectCatalogDiagnostics(entries);\n const workflowIds = new Set(entries.map((entry) => entry.workflowId));\n\n return {\n generatedAt: options.generatedAt ?? new Date().toISOString(),\n definitionCount: entries.length,\n workflowCount: workflowIds.size,\n validDefinitionCount: entries.filter((entry) => entry.valid).length,\n invalidDefinitionCount: entries.filter((entry) => !entry.valid).length,\n warningDefinitionCount: entries.filter((entry) => entry.warningCount > 0).length,\n duplicateVersionCount: diagnostics.filter((diagnostic) => diagnostic.code === \"duplicate_definition_version\").length,\n diagnostics,\n entries,\n };\n}\n\nexport function findAssistantWorkflowCatalogDefinition(\n catalog: AssistantWorkflowDefinitionCatalog,\n workflowId: string,\n version?: number,\n options: AssistantWorkflowDefinitionLookupOptions = {},\n): AssistantWorkflowSerializedDefinition | null {\n const candidates = catalog.entries.filter((entry) =>\n entry.workflowId === workflowId &&\n (version === undefined || entry.workflowVersion === version) &&\n (options.includeInvalid === true || entry.valid)\n );\n return candidates[0]?.definition ?? null;\n}\n\nexport function findLatestAssistantWorkflowCatalogDefinition(\n catalog: AssistantWorkflowDefinitionCatalog,\n workflowId: string,\n options: AssistantWorkflowDefinitionLookupOptions = {},\n): AssistantWorkflowSerializedDefinition | null {\n return findAssistantWorkflowCatalogDefinition(catalog, workflowId, undefined, options);\n}\n\nexport function buildAssistantWorkflowDefinitionCatalogTracePayload(\n catalog: AssistantWorkflowDefinitionCatalog,\n): Record<string, AssistantWorkflowJsonValue> {\n return {\n generatedAt: catalog.generatedAt,\n definitionCount: catalog.definitionCount,\n workflowCount: catalog.workflowCount,\n validDefinitionCount: catalog.validDefinitionCount,\n invalidDefinitionCount: catalog.invalidDefinitionCount,\n warningDefinitionCount: catalog.warningDefinitionCount,\n duplicateVersionCount: catalog.duplicateVersionCount,\n diagnostics: catalog.diagnostics.map((diagnostic) => ({\n severity: diagnostic.severity,\n code: diagnostic.code,\n workflowId: diagnostic.workflowId,\n workflowVersion: diagnostic.workflowVersion,\n message: diagnostic.message,\n })),\n entries: catalog.entries.map((entry) => ({\n workflowId: entry.workflowId,\n workflowVersion: entry.workflowVersion,\n valid: entry.valid,\n errorCount: entry.errorCount,\n warningCount: entry.warningCount,\n intentCount: entry.intentCount,\n toolCapabilityCount: entry.toolCapabilityCount,\n toolBindingCount: entry.toolBindingCount,\n definition: buildAssistantWorkflowDefinitionTracePayload(entry.definition),\n })),\n };\n}\n\nfunction toCatalogEntry(definition: AssistantWorkflowSerializedDefinition): AssistantWorkflowDefinitionCatalogEntry {\n return {\n workflowId: definition.workflowId,\n workflowVersion: definition.workflowVersion,\n valid: definition.summary.valid,\n errorCount: definition.summary.errorCount,\n warningCount: definition.summary.warningCount,\n intentCount: definition.summary.intentCount,\n toolCapabilityCount: definition.summary.toolCapabilityCount,\n toolBindingCount: definition.summary.toolBindingCount,\n definition,\n };\n}\n\nfunction collectCatalogDiagnostics(\n entries: readonly AssistantWorkflowDefinitionCatalogEntry[],\n): AssistantWorkflowDefinitionCatalogDiagnostic[] {\n const counts = new Map<string, AssistantWorkflowDefinitionCatalogEntry[]>();\n for (const entry of entries) {\n const key = `${entry.workflowId}@${entry.workflowVersion}`;\n counts.set(key, [...(counts.get(key) ?? []), entry]);\n }\n return [...counts.values()]\n .filter((group) => group.length > 1)\n .map((group) => {\n const first = group[0];\n return {\n severity: \"error\",\n code: \"duplicate_definition_version\",\n workflowId: first?.workflowId ?? \"\",\n workflowVersion: first?.workflowVersion ?? 0,\n message: `Duplicate assistant workflow definition version: ${first?.workflowId}@${first?.workflowVersion}.`,\n };\n });\n}\n"]}
@@ -0,0 +1,17 @@
1
+ import { type AssistantWorkflowDefinition } from "./definition.js";
2
+ export type AssistantWorkflowDefinitionDiagnosticSeverity = "error" | "warning";
3
+ export type AssistantWorkflowDefinitionDiagnosticCode = "missing_workflow_id" | "invalid_workflow_version" | "missing_intents" | "missing_id" | "unnormalized_id" | "duplicate_id" | "missing_description" | "missing_tool_hints" | "missing_tool_output_kinds" | "missing_binding_field" | "invalid_http_method" | "invalid_tool_selection_profile_condition" | "invalid_planning_step_profile_condition" | "missing_repl_target" | "unknown_tool_capability" | "tool_provider_mismatch" | "unknown_presentation" | "unknown_memory_slot" | "unknown_planning_step" | "unknown_clarification_rule" | "invalid_confidence_threshold" | "unbound_tool_capability" | "binding_without_capability";
4
+ export type AssistantWorkflowDefinitionDiagnostic = {
5
+ severity: AssistantWorkflowDefinitionDiagnosticSeverity;
6
+ code: AssistantWorkflowDefinitionDiagnosticCode;
7
+ path: string;
8
+ message: string;
9
+ };
10
+ export type AssistantWorkflowDefinitionValidationResult = {
11
+ valid: boolean;
12
+ errorCount: number;
13
+ warningCount: number;
14
+ diagnostics: AssistantWorkflowDefinitionDiagnostic[];
15
+ };
16
+ export declare function validateAssistantWorkflowDefinition(workflow: AssistantWorkflowDefinition<string, string, string, string>): AssistantWorkflowDefinitionValidationResult;
17
+ //# sourceMappingURL=definition-diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition-diagnostics.d.ts","sourceRoot":"","sources":["../src/definition-diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,2BAA2B,EAOjC,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,6CAA6C,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhF,MAAM,MAAM,yCAAyC,GACjD,qBAAqB,GACrB,0BAA0B,GAC1B,iBAAiB,GACjB,YAAY,GACZ,iBAAiB,GACjB,cAAc,GACd,qBAAqB,GACrB,oBAAoB,GACpB,2BAA2B,GAC3B,uBAAuB,GACvB,qBAAqB,GACrB,0CAA0C,GAC1C,yCAAyC,GACzC,qBAAqB,GACrB,yBAAyB,GACzB,wBAAwB,GACxB,sBAAsB,GACtB,qBAAqB,GACrB,uBAAuB,GACvB,4BAA4B,GAC5B,8BAA8B,GAC9B,yBAAyB,GACzB,4BAA4B,CAAC;AAEjC,MAAM,MAAM,qCAAqC,GAAG;IAClD,QAAQ,EAAE,6CAA6C,CAAC;IACxD,IAAI,EAAE,yCAAyC,CAAC;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,2CAA2C,GAAG;IACxD,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,qCAAqC,EAAE,CAAC;CACtD,CAAC;AAEF,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GACpE,2CAA2C,CAwB7C"}
@@ -0,0 +1,353 @@
1
+ import { normalizeAssistantWorkflowId, } from "./definition.js";
2
+ export function validateAssistantWorkflowDefinition(workflow) {
3
+ const diagnostics = [];
4
+ validateHeader(workflow, diagnostics);
5
+ validateVocabulary("intent", "intents", workflow.intents, diagnostics);
6
+ validateVocabulary("subintent", "subintents", workflow.subintents ?? [], diagnostics);
7
+ validateVocabulary("presentation", "presentations", workflow.presentations ?? [], diagnostics);
8
+ validateVocabulary("derived transform", "derivedTransforms", workflow.derivedTransforms ?? [], diagnostics);
9
+ validateToolCapabilities(workflow.tools ?? [], diagnostics);
10
+ validateToolBindings(workflow.toolBindings ?? [], diagnostics);
11
+ validateMemorySlots(workflow.memorySlots ?? [], diagnostics);
12
+ validatePlanningSteps(workflow.planningSteps ?? [], diagnostics);
13
+ validateClarificationRules(workflow.clarificationRules ?? [], diagnostics);
14
+ validateDirectRoutes(workflow.directRoutes ?? [], diagnostics);
15
+ validateReferences(workflow, diagnostics);
16
+ const errorCount = diagnostics.filter((diagnostic) => diagnostic.severity === "error").length;
17
+ const warningCount = diagnostics.filter((diagnostic) => diagnostic.severity === "warning").length;
18
+ return {
19
+ valid: errorCount === 0,
20
+ errorCount,
21
+ warningCount,
22
+ diagnostics,
23
+ };
24
+ }
25
+ function validateHeader(workflow, diagnostics) {
26
+ if (!workflow.id.trim().length) {
27
+ addDiagnostic(diagnostics, "error", "missing_workflow_id", "id", "Assistant workflow id is required.");
28
+ }
29
+ if (!Number.isInteger(workflow.version) || workflow.version < 1) {
30
+ addDiagnostic(diagnostics, "error", "invalid_workflow_version", "version", "Assistant workflow version must be a positive integer.");
31
+ }
32
+ if (!workflow.intents.length) {
33
+ addDiagnostic(diagnostics, "error", "missing_intents", "intents", "Assistant workflow must define at least one intent.");
34
+ }
35
+ }
36
+ function validateVocabulary(kind, path, items, diagnostics) {
37
+ const seen = new Map();
38
+ for (const [index, item] of items.entries()) {
39
+ const itemPath = `${path}[${index}]`;
40
+ const normalized = normalizeAssistantWorkflowId(item.id);
41
+ if (!normalized) {
42
+ addDiagnostic(diagnostics, "error", "missing_id", `${itemPath}.id`, `Assistant workflow ${kind} id is required.`);
43
+ continue;
44
+ }
45
+ if (normalized !== item.id) {
46
+ addDiagnostic(diagnostics, "error", "unnormalized_id", `${itemPath}.id`, `Assistant workflow ${kind} id must already be normalized: ${item.id}.`);
47
+ }
48
+ const firstIndex = seen.get(normalized);
49
+ if (firstIndex !== undefined) {
50
+ addDiagnostic(diagnostics, "error", "duplicate_id", `${itemPath}.id`, `Duplicate assistant workflow ${kind} id: ${normalized}; first seen at ${path}[${firstIndex}].`);
51
+ }
52
+ else {
53
+ seen.set(normalized, index);
54
+ }
55
+ if (!item.description.trim().length) {
56
+ addDiagnostic(diagnostics, "error", "missing_description", `${itemPath}.description`, `Assistant workflow ${kind} ${normalized} description is required.`);
57
+ }
58
+ }
59
+ }
60
+ function validateToolCapabilities(tools, diagnostics) {
61
+ const seen = new Map();
62
+ for (const [index, tool] of tools.entries()) {
63
+ const path = `tools[${index}]`;
64
+ const normalized = normalizeAssistantWorkflowId(tool.name);
65
+ if (!normalized) {
66
+ addDiagnostic(diagnostics, "error", "missing_id", `${path}.name`, "Assistant workflow tool capability name is required.");
67
+ continue;
68
+ }
69
+ if (normalized !== tool.name) {
70
+ addDiagnostic(diagnostics, "error", "unnormalized_id", `${path}.name`, `Assistant workflow tool capability name must already be normalized: ${tool.name}.`);
71
+ }
72
+ const firstIndex = seen.get(normalized);
73
+ if (firstIndex !== undefined) {
74
+ addDiagnostic(diagnostics, "error", "duplicate_id", `${path}.name`, `Duplicate assistant workflow tool capability: ${normalized}; first seen at tools[${firstIndex}].`);
75
+ }
76
+ else {
77
+ seen.set(normalized, index);
78
+ }
79
+ if (!tool.outputKinds.length) {
80
+ addDiagnostic(diagnostics, "error", "missing_tool_output_kinds", `${path}.outputKinds`, `Assistant workflow tool capability ${normalized} must define at least one output kind.`);
81
+ }
82
+ }
83
+ }
84
+ function validateToolBindings(bindings, diagnostics) {
85
+ const seen = new Map();
86
+ for (const [index, binding] of bindings.entries()) {
87
+ const path = `toolBindings[${index}]`;
88
+ const normalized = normalizeAssistantWorkflowId(binding.name);
89
+ if (!normalized) {
90
+ addDiagnostic(diagnostics, "error", "missing_id", `${path}.name`, "Assistant workflow tool binding name is required.");
91
+ continue;
92
+ }
93
+ if (normalized !== binding.name) {
94
+ addDiagnostic(diagnostics, "error", "unnormalized_id", `${path}.name`, `Assistant workflow tool binding name must already be normalized: ${binding.name}.`);
95
+ }
96
+ const firstIndex = seen.get(normalized);
97
+ if (firstIndex !== undefined) {
98
+ addDiagnostic(diagnostics, "error", "duplicate_id", `${path}.name`, `Duplicate assistant workflow tool binding: ${normalized}; first seen at toolBindings[${firstIndex}].`);
99
+ }
100
+ else {
101
+ seen.set(normalized, index);
102
+ }
103
+ validateToolBindingTarget(binding, path, diagnostics);
104
+ }
105
+ }
106
+ function validateToolBindingTarget(binding, path, diagnostics) {
107
+ switch (binding.provider) {
108
+ case "local-function":
109
+ validateRequiredField(binding.handlerId, `${path}.handlerId`, binding.name, "handlerId", diagnostics);
110
+ return;
111
+ case "http":
112
+ validateRequiredField(binding.path, `${path}.path`, binding.name, "path", diagnostics);
113
+ if (binding.method !== undefined && binding.method !== binding.method.toUpperCase()) {
114
+ addDiagnostic(diagnostics, "error", "invalid_http_method", `${path}.method`, `Assistant workflow tool binding ${binding.name} HTTP method must be uppercase.`);
115
+ }
116
+ return;
117
+ case "openai-hosted":
118
+ validateRequiredField(binding.hostedToolType, `${path}.hostedToolType`, binding.name, "hostedToolType", diagnostics);
119
+ return;
120
+ case "mcp":
121
+ validateRequiredField(binding.serverId, `${path}.serverId`, binding.name, "serverId", diagnostics);
122
+ validateRequiredField(binding.toolName, `${path}.toolName`, binding.name, "toolName", diagnostics);
123
+ return;
124
+ case "repl":
125
+ validateRequiredField(binding.runtimeId, `${path}.runtimeId`, binding.name, "runtimeId", diagnostics);
126
+ if (!binding.functionName?.trim().length && !binding.commandTemplate?.trim().length) {
127
+ addDiagnostic(diagnostics, "error", "missing_repl_target", path, `Assistant workflow tool binding ${binding.name} must define functionName or commandTemplate.`);
128
+ }
129
+ return;
130
+ }
131
+ }
132
+ function validateRequiredField(value, path, toolName, fieldName, diagnostics) {
133
+ if (!value.trim().length) {
134
+ addDiagnostic(diagnostics, "error", "missing_binding_field", path, `Assistant workflow tool binding ${toolName} ${fieldName} is required.`);
135
+ }
136
+ }
137
+ function validateMemorySlots(slots, diagnostics) {
138
+ validateVocabulary("memory slot", "memorySlots", slots, diagnostics);
139
+ }
140
+ function validatePlanningSteps(steps, diagnostics) {
141
+ validateVocabulary("planning step", "planningSteps", steps, diagnostics);
142
+ }
143
+ function validateClarificationRules(rules, diagnostics) {
144
+ validateVocabulary("clarification rule", "clarificationRules", rules, diagnostics);
145
+ for (const [index, rule] of rules.entries()) {
146
+ if (rule.condition === "low_confidence" &&
147
+ rule.confidenceBelow !== undefined &&
148
+ (!Number.isFinite(rule.confidenceBelow) || rule.confidenceBelow < 0 || rule.confidenceBelow > 1)) {
149
+ addDiagnostic(diagnostics, "error", "invalid_confidence_threshold", `clarificationRules[${index}].confidenceBelow`, `Assistant workflow clarification rule ${rule.id} confidenceBelow must be between 0 and 1.`);
150
+ }
151
+ }
152
+ }
153
+ function validateDirectRoutes(routes, diagnostics) {
154
+ validateVocabulary("direct route", "directRoutes", routes, diagnostics);
155
+ for (const [routeIndex, route] of routes.entries()) {
156
+ validateVocabulary(`direct route ${route.id} strategy`, `directRoutes[${routeIndex}].strategies`, route.strategies ?? [], diagnostics);
157
+ }
158
+ }
159
+ function validateReferences(workflow, diagnostics) {
160
+ const toolCapabilities = new Map((workflow.tools ?? []).map((tool) => [tool.name, tool]));
161
+ const toolBindings = new Map((workflow.toolBindings ?? []).map((binding) => [binding.name, binding]));
162
+ const toolNames = new Set(toolCapabilities.keys());
163
+ const presentationIds = new Set((workflow.presentations ?? []).map((presentation) => presentation.id));
164
+ const subintentIds = new Set((workflow.subintents ?? []).map((subintent) => subintent.id));
165
+ const memorySlotIds = new Set((workflow.memorySlots ?? []).map((slot) => slot.id));
166
+ const planningStepIds = new Set((workflow.planningSteps ?? []).map((step) => step.id));
167
+ const clarificationRuleIds = new Set((workflow.clarificationRules ?? []).map((rule) => rule.id));
168
+ for (const [index, binding] of (workflow.toolBindings ?? []).entries()) {
169
+ const capability = toolCapabilities.get(binding.name);
170
+ if (toolCapabilities.size > 0 && !capability) {
171
+ addDiagnostic(diagnostics, "error", "binding_without_capability", `toolBindings[${index}].name`, `Assistant workflow tool binding references unknown tool capability: ${binding.name}.`);
172
+ }
173
+ if (capability && capability.provider !== binding.provider) {
174
+ addDiagnostic(diagnostics, "error", "tool_provider_mismatch", `toolBindings[${index}].provider`, `Assistant workflow tool binding ${binding.name} provider ${binding.provider} does not match capability provider ${capability.provider}.`);
175
+ }
176
+ }
177
+ for (const [index, tool] of (workflow.tools ?? []).entries()) {
178
+ if (!toolBindings.has(tool.name)) {
179
+ addDiagnostic(diagnostics, "warning", "unbound_tool_capability", `tools[${index}].name`, `Assistant workflow tool capability ${tool.name} has no binding.`);
180
+ }
181
+ }
182
+ for (const [index, step] of (workflow.planningSteps ?? []).entries()) {
183
+ for (const toolName of [...(step.toolHints ?? []), ...(step.requiredToolHints ?? [])]) {
184
+ if (toolNames.size > 0 && !toolNames.has(toolName)) {
185
+ addDiagnostic(diagnostics, "error", "unknown_tool_capability", `planningSteps[${index}].toolHints`, `Assistant workflow planning step ${step.id} references unknown tool capability: ${toolName}.`);
186
+ }
187
+ }
188
+ for (const slotId of [...(step.readsMemory ?? []), ...(step.writesMemory ?? [])]) {
189
+ if (memorySlotIds.size > 0 && !memorySlotIds.has(slotId)) {
190
+ addDiagnostic(diagnostics, "error", "unknown_memory_slot", `planningSteps[${index}].readsMemory`, `Assistant workflow planning step ${step.id} references unknown memory slot: ${slotId}.`);
191
+ }
192
+ }
193
+ }
194
+ for (const [index, rule] of (workflow.clarificationRules ?? []).entries()) {
195
+ for (const slotId of [...(rule.readsMemory ?? []), ...(rule.writesMemory ?? [])]) {
196
+ if (memorySlotIds.size > 0 && !memorySlotIds.has(slotId)) {
197
+ addDiagnostic(diagnostics, "error", "unknown_memory_slot", `clarificationRules[${index}].readsMemory`, `Assistant workflow clarification rule ${rule.id} references unknown memory slot: ${slotId}.`);
198
+ }
199
+ }
200
+ }
201
+ for (const [index, intent] of workflow.intents.entries()) {
202
+ validateIntentToolSelectionProfiles(intent, index, toolNames, diagnostics);
203
+ validateIntentPlanningStepProfiles(intent, index, planningStepIds, toolNames, subintentIds, presentationIds, diagnostics);
204
+ if (intent.defaultPresentation && !presentationIds.has(intent.defaultPresentation)) {
205
+ addDiagnostic(diagnostics, "error", "unknown_presentation", `intents[${index}].defaultPresentation`, `Assistant workflow intent ${intent.id} references unknown presentation: ${intent.defaultPresentation}.`);
206
+ }
207
+ for (const toolName of [...(intent.toolHints ?? []), ...(intent.requiredToolHints ?? [])]) {
208
+ if (toolNames.size > 0 && !toolNames.has(toolName)) {
209
+ addDiagnostic(diagnostics, "error", "unknown_tool_capability", `intents[${index}].toolHints`, `Assistant workflow intent ${intent.id} references unknown tool capability: ${toolName}.`);
210
+ }
211
+ }
212
+ for (const slotId of [
213
+ ...(intent.memoryPolicy?.read ?? []),
214
+ ...(intent.memoryPolicy?.write ?? []),
215
+ ...(intent.memoryPolicy?.inject ?? []),
216
+ ]) {
217
+ if (memorySlotIds.size > 0 && !memorySlotIds.has(slotId)) {
218
+ addDiagnostic(diagnostics, "error", "unknown_memory_slot", `intents[${index}].memoryPolicy`, `Assistant workflow intent ${intent.id} references unknown memory slot: ${slotId}.`);
219
+ }
220
+ }
221
+ for (const stepId of intent.planningSteps ?? []) {
222
+ if (planningStepIds.size > 0 && !planningStepIds.has(stepId)) {
223
+ addDiagnostic(diagnostics, "error", "unknown_planning_step", `intents[${index}].planningSteps`, `Assistant workflow intent ${intent.id} references unknown planning step: ${stepId}.`);
224
+ }
225
+ }
226
+ for (const ruleId of intent.clarificationRules ?? []) {
227
+ if (clarificationRuleIds.size > 0 && !clarificationRuleIds.has(ruleId)) {
228
+ addDiagnostic(diagnostics, "error", "unknown_clarification_rule", `intents[${index}].clarificationRules`, `Assistant workflow intent ${intent.id} references unknown clarification rule: ${ruleId}.`);
229
+ }
230
+ }
231
+ }
232
+ }
233
+ function validateIntentPlanningStepProfiles(intent, intentIndex, planningStepIds, toolNames, subintentIds, presentationIds, diagnostics) {
234
+ const seen = new Map();
235
+ for (const [profileIndex, profile] of (intent.planningStepProfiles ?? []).entries()) {
236
+ const profilePath = `intents[${intentIndex}].planningStepProfiles[${profileIndex}]`;
237
+ const normalized = normalizeAssistantWorkflowId(profile.id);
238
+ if (!normalized) {
239
+ addDiagnostic(diagnostics, "error", "missing_id", `${profilePath}.id`, `Assistant workflow intent ${intent.id} planning step profile id is required.`);
240
+ continue;
241
+ }
242
+ if (normalized !== profile.id) {
243
+ addDiagnostic(diagnostics, "error", "unnormalized_id", `${profilePath}.id`, `Assistant workflow intent ${intent.id} planning step profile id must already be normalized: ${profile.id}.`);
244
+ }
245
+ const firstIndex = seen.get(normalized);
246
+ if (firstIndex !== undefined) {
247
+ addDiagnostic(diagnostics, "error", "duplicate_id", `${profilePath}.id`, `Duplicate assistant workflow intent ${intent.id} planning step profile: ${normalized}; first seen at intents[${intentIndex}].planningStepProfiles[${firstIndex}].`);
248
+ }
249
+ else {
250
+ seen.set(normalized, profileIndex);
251
+ }
252
+ if (!profile.description.trim().length) {
253
+ addDiagnostic(diagnostics, "error", "missing_description", `${profilePath}.description`, `Assistant workflow intent ${intent.id} planning step profile ${normalized} description is required.`);
254
+ }
255
+ if (!profile.planningSteps.length) {
256
+ addDiagnostic(diagnostics, "error", "unknown_planning_step", `${profilePath}.planningSteps`, `Assistant workflow intent ${intent.id} planning step profile ${normalized} must define at least one planning step.`);
257
+ }
258
+ for (const stepId of profile.planningSteps) {
259
+ if (planningStepIds.size > 0 && !planningStepIds.has(stepId)) {
260
+ addDiagnostic(diagnostics, "error", "unknown_planning_step", `${profilePath}.planningSteps`, `Assistant workflow intent ${intent.id} planning step profile ${normalized} references unknown planning step: ${stepId}.`);
261
+ }
262
+ }
263
+ for (const toolName of profile.condition?.requiredTools ?? []) {
264
+ if (toolNames.size > 0 && !toolNames.has(toolName)) {
265
+ addDiagnostic(diagnostics, "error", "unknown_tool_capability", `${profilePath}.condition.requiredTools`, `Assistant workflow intent ${intent.id} planning step profile ${normalized} references unknown required tool: ${toolName}.`);
266
+ }
267
+ }
268
+ const condition = profile.condition;
269
+ if (condition?.subintent && subintentIds.size > 0 && !subintentIds.has(condition.subintent)) {
270
+ addDiagnostic(diagnostics, "error", "missing_id", `${profilePath}.condition.subintent`, `Assistant workflow intent ${intent.id} planning step profile ${normalized} references unknown subintent: ${condition.subintent}.`);
271
+ }
272
+ if (condition?.presentation && presentationIds.size > 0 && !presentationIds.has(condition.presentation)) {
273
+ addDiagnostic(diagnostics, "error", "unknown_presentation", `${profilePath}.condition.presentation`, `Assistant workflow intent ${intent.id} planning step profile ${normalized} references unknown presentation: ${condition.presentation}.`);
274
+ }
275
+ validatePlanningStepProfileCondition(intent.id, profile, profilePath, diagnostics);
276
+ }
277
+ }
278
+ function validateIntentToolSelectionProfiles(intent, intentIndex, toolNames, diagnostics) {
279
+ const seen = new Map();
280
+ for (const [profileIndex, profile] of (intent.toolSelectionProfiles ?? []).entries()) {
281
+ const profilePath = `intents[${intentIndex}].toolSelectionProfiles[${profileIndex}]`;
282
+ const normalized = normalizeAssistantWorkflowId(profile.id);
283
+ if (!normalized) {
284
+ addDiagnostic(diagnostics, "error", "missing_id", `${profilePath}.id`, `Assistant workflow intent ${intent.id} tool selection profile id is required.`);
285
+ continue;
286
+ }
287
+ if (normalized !== profile.id) {
288
+ addDiagnostic(diagnostics, "error", "unnormalized_id", `${profilePath}.id`, `Assistant workflow intent ${intent.id} tool selection profile id must already be normalized: ${profile.id}.`);
289
+ }
290
+ const firstIndex = seen.get(normalized);
291
+ if (firstIndex !== undefined) {
292
+ addDiagnostic(diagnostics, "error", "duplicate_id", `${profilePath}.id`, `Duplicate assistant workflow intent ${intent.id} tool selection profile: ${normalized}; first seen at intents[${intentIndex}].toolSelectionProfiles[${firstIndex}].`);
293
+ }
294
+ else {
295
+ seen.set(normalized, profileIndex);
296
+ }
297
+ if (!profile.description.trim().length) {
298
+ addDiagnostic(diagnostics, "error", "missing_description", `${profilePath}.description`, `Assistant workflow intent ${intent.id} tool selection profile ${normalized} description is required.`);
299
+ }
300
+ if (!profile.toolHints.length) {
301
+ addDiagnostic(diagnostics, "error", "missing_tool_hints", `${profilePath}.toolHints`, `Assistant workflow intent ${intent.id} tool selection profile ${normalized} must define at least one tool hint.`);
302
+ }
303
+ for (const toolName of profile.toolHints) {
304
+ if (toolNames.size > 0 && !toolNames.has(toolName)) {
305
+ addDiagnostic(diagnostics, "error", "unknown_tool_capability", `${profilePath}.toolHints`, `Assistant workflow intent ${intent.id} tool selection profile ${normalized} references unknown tool capability: ${toolName}.`);
306
+ }
307
+ }
308
+ validateToolSelectionProfileCondition(intent.id, profile, profilePath, diagnostics);
309
+ }
310
+ }
311
+ function validatePlanningStepProfileCondition(intentId, profile, profilePath, diagnostics) {
312
+ const { minConfidence, maxConfidence, subintent, presentation, timeWindowHint, requiredTools } = profile.condition ?? {};
313
+ if (minConfidence !== undefined && (!Number.isFinite(minConfidence) || minConfidence < 0 || minConfidence > 1)) {
314
+ addDiagnostic(diagnostics, "error", "invalid_planning_step_profile_condition", `${profilePath}.condition.minConfidence`, `Assistant workflow intent ${intentId} planning step profile ${profile.id} minConfidence must be between 0 and 1.`);
315
+ }
316
+ if (maxConfidence !== undefined && (!Number.isFinite(maxConfidence) || maxConfidence < 0 || maxConfidence > 1)) {
317
+ addDiagnostic(diagnostics, "error", "invalid_planning_step_profile_condition", `${profilePath}.condition.maxConfidence`, `Assistant workflow intent ${intentId} planning step profile ${profile.id} maxConfidence must be between 0 and 1.`);
318
+ }
319
+ if (minConfidence !== undefined && maxConfidence !== undefined && minConfidence > maxConfidence) {
320
+ addDiagnostic(diagnostics, "error", "invalid_planning_step_profile_condition", `${profilePath}.condition`, `Assistant workflow intent ${intentId} planning step profile ${profile.id} minConfidence must not exceed maxConfidence.`);
321
+ }
322
+ if (subintent !== undefined && !subintent.trim().length) {
323
+ addDiagnostic(diagnostics, "error", "invalid_planning_step_profile_condition", `${profilePath}.condition.subintent`, `Assistant workflow intent ${intentId} planning step profile ${profile.id} subintent must not be empty.`);
324
+ }
325
+ if (presentation !== undefined && !presentation.trim().length) {
326
+ addDiagnostic(diagnostics, "error", "invalid_planning_step_profile_condition", `${profilePath}.condition.presentation`, `Assistant workflow intent ${intentId} planning step profile ${profile.id} presentation must not be empty.`);
327
+ }
328
+ if (timeWindowHint !== undefined && !timeWindowHint.trim().length) {
329
+ addDiagnostic(diagnostics, "error", "invalid_planning_step_profile_condition", `${profilePath}.condition.timeWindowHint`, `Assistant workflow intent ${intentId} planning step profile ${profile.id} timeWindowHint must not be empty.`);
330
+ }
331
+ if (requiredTools !== undefined && requiredTools.length === 0) {
332
+ addDiagnostic(diagnostics, "error", "invalid_planning_step_profile_condition", `${profilePath}.condition.requiredTools`, `Assistant workflow intent ${intentId} planning step profile ${profile.id} requiredTools must not be empty.`);
333
+ }
334
+ }
335
+ function validateToolSelectionProfileCondition(intentId, profile, profilePath, diagnostics) {
336
+ const { minHop, maxHop, selectedReason } = profile.condition ?? {};
337
+ if (minHop !== undefined && (!Number.isInteger(minHop) || minHop < 0)) {
338
+ addDiagnostic(diagnostics, "error", "invalid_tool_selection_profile_condition", `${profilePath}.condition.minHop`, `Assistant workflow intent ${intentId} tool selection profile ${profile.id} minHop must be a non-negative integer.`);
339
+ }
340
+ if (maxHop !== undefined && (!Number.isInteger(maxHop) || maxHop < 0)) {
341
+ addDiagnostic(diagnostics, "error", "invalid_tool_selection_profile_condition", `${profilePath}.condition.maxHop`, `Assistant workflow intent ${intentId} tool selection profile ${profile.id} maxHop must be a non-negative integer.`);
342
+ }
343
+ if (minHop !== undefined && maxHop !== undefined && minHop > maxHop) {
344
+ addDiagnostic(diagnostics, "error", "invalid_tool_selection_profile_condition", `${profilePath}.condition`, `Assistant workflow intent ${intentId} tool selection profile ${profile.id} minHop must not exceed maxHop.`);
345
+ }
346
+ if (selectedReason !== undefined && !selectedReason.trim().length) {
347
+ addDiagnostic(diagnostics, "error", "invalid_tool_selection_profile_condition", `${profilePath}.condition.selectedReason`, `Assistant workflow intent ${intentId} tool selection profile ${profile.id} selectedReason must not be empty.`);
348
+ }
349
+ }
350
+ function addDiagnostic(diagnostics, severity, code, path, message) {
351
+ diagnostics.push({ severity, code, path, message });
352
+ }
353
+ //# sourceMappingURL=definition-diagnostics.js.map