@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,59 @@
1
+ import type { AssistantWorkflowDefinitionPackageSmokeSuiteResult } from "./definition-package-smoke.js";
2
+ import type { AssistantWorkflowDefinitionTuningApplyResult } from "./definition-tuning.js";
3
+ import type { AssistantWorkflowJsonValue } from "./run-report-json.js";
4
+ export type AssistantWorkflowDefinitionTuningReviewStatus = "ready" | "warning" | "blocked";
5
+ export type AssistantWorkflowDefinitionTuningReviewReasonSeverity = "warning" | "blocked";
6
+ export type AssistantWorkflowDefinitionTuningReviewReasonCode = "no_change" | "smoke_required_failures" | "smoke_failures" | "smoke_not_run" | "too_many_applied_suggestions" | "too_many_changed_intents" | "too_many_changed_direct_routes" | "too_many_hints_for_intent" | "tool_output_presentation_mismatch";
7
+ export type AssistantWorkflowDefinitionTuningReviewReason = {
8
+ severity: AssistantWorkflowDefinitionTuningReviewReasonSeverity;
9
+ code: AssistantWorkflowDefinitionTuningReviewReasonCode;
10
+ message: string;
11
+ details: Record<string, AssistantWorkflowJsonValue>;
12
+ };
13
+ export type AssistantWorkflowDefinitionTuningReviewOptions = {
14
+ maxAppliedSuggestions?: number;
15
+ maxChangedIntents?: number;
16
+ maxChangedDirectRoutes?: number;
17
+ maxAddedToolHintsPerIntent?: number;
18
+ requireSmokePass?: boolean;
19
+ checkToolCompatibility?: boolean;
20
+ };
21
+ export type AssistantWorkflowDefinitionTuningReviewSummary = {
22
+ changed: boolean;
23
+ appliedCount: number;
24
+ skippedCount: number;
25
+ changedIntentCount: number;
26
+ changedDirectRouteCount: number;
27
+ addedToolHintCount: number;
28
+ addedDirectRouteStrategyCount: number;
29
+ maxAddedToolHintsPerIntent: number;
30
+ changedIntents: {
31
+ intentId: string;
32
+ addedToolHintCount: number;
33
+ addedToolHints: string[];
34
+ }[];
35
+ changedDirectRoutes: {
36
+ routeId: string;
37
+ addedStrategyCount: number;
38
+ addedStrategyIds: string[];
39
+ }[];
40
+ smoke: {
41
+ caseCount: number;
42
+ passCount: number;
43
+ failCount: number;
44
+ requiredFailCount: number;
45
+ failedCaseIds: string[];
46
+ requiredFailedCaseIds: string[];
47
+ } | null;
48
+ };
49
+ export type AssistantWorkflowDefinitionTuningReview = {
50
+ status: AssistantWorkflowDefinitionTuningReviewStatus;
51
+ workflowId: string;
52
+ workflowVersion: number;
53
+ summary: AssistantWorkflowDefinitionTuningReviewSummary;
54
+ thresholds: Required<AssistantWorkflowDefinitionTuningReviewOptions>;
55
+ reasons: AssistantWorkflowDefinitionTuningReviewReason[];
56
+ };
57
+ export declare function buildAssistantWorkflowDefinitionTuningReview(applyResult: AssistantWorkflowDefinitionTuningApplyResult, smoke?: AssistantWorkflowDefinitionPackageSmokeSuiteResult | null, options?: AssistantWorkflowDefinitionTuningReviewOptions): AssistantWorkflowDefinitionTuningReview;
58
+ export declare function buildAssistantWorkflowDefinitionTuningReviewTracePayload(review: AssistantWorkflowDefinitionTuningReview): Record<string, AssistantWorkflowJsonValue>;
59
+ //# sourceMappingURL=definition-tuning-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition-tuning-review.d.ts","sourceRoot":"","sources":["../src/definition-tuning-review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kDAAkD,EAAE,MAAM,+BAA+B,CAAC;AACxG,OAAO,KAAK,EAAE,4CAA4C,EAAE,MAAM,wBAAwB,CAAC;AAC3F,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,MAAM,MAAM,6CAA6C,GACrD,OAAO,GACP,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,MAAM,qDAAqD,GAC7D,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,MAAM,iDAAiD,GACzD,WAAW,GACX,yBAAyB,GACzB,gBAAgB,GAChB,eAAe,GACf,8BAA8B,GAC9B,0BAA0B,GAC1B,gCAAgC,GAChC,2BAA2B,GAC3B,mCAAmC,CAAC;AAExC,MAAM,MAAM,6CAA6C,GAAG;IAC1D,QAAQ,EAAE,qDAAqD,CAAC;IAChE,IAAI,EAAE,iDAAiD,CAAC;IACxD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;CACrD,CAAC;AAEF,MAAM,MAAM,8CAA8C,GAAG;IAC3D,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,8CAA8C,GAAG;IAC3D,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,uBAAuB,EAAE,MAAM,CAAC;IAChC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,6BAA6B,EAAE,MAAM,CAAC;IACtC,0BAA0B,EAAE,MAAM,CAAC;IACnC,cAAc,EAAE;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;KAC1B,EAAE,CAAC;IACJ,mBAAmB,EAAE;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,gBAAgB,EAAE,MAAM,EAAE,CAAC;KAC5B,EAAE,CAAC;IACJ,KAAK,EAAE;QACL,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,qBAAqB,EAAE,MAAM,EAAE,CAAC;KACjC,GAAG,IAAI,CAAC;CACV,CAAC;AAEF,MAAM,MAAM,uCAAuC,GAAG;IACpD,MAAM,EAAE,6CAA6C,CAAC;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,8CAA8C,CAAC;IACxD,UAAU,EAAE,QAAQ,CAAC,8CAA8C,CAAC,CAAC;IACrE,OAAO,EAAE,6CAA6C,EAAE,CAAC;CAC1D,CAAC;AAOF,wBAAgB,4CAA4C,CAC1D,WAAW,EAAE,4CAA4C,EACzD,KAAK,GAAE,kDAAkD,GAAG,IAAW,EACvE,OAAO,GAAE,8CAAmD,GAC3D,uCAAuC,CAmBzC;AAED,wBAAgB,wDAAwD,CACtE,MAAM,EAAE,uCAAuC,GAC9C,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAkC5C"}
@@ -0,0 +1,213 @@
1
+ const DEFAULT_MAX_APPLIED_SUGGESTIONS = 10;
2
+ const DEFAULT_MAX_CHANGED_INTENTS = 3;
3
+ const DEFAULT_MAX_CHANGED_DIRECT_ROUTES = 5;
4
+ const DEFAULT_MAX_ADDED_TOOL_HINTS_PER_INTENT = 5;
5
+ export function buildAssistantWorkflowDefinitionTuningReview(applyResult, smoke = null, options = {}) {
6
+ const thresholds = normalizeReviewOptions(options);
7
+ const summary = buildReviewSummary(applyResult, smoke);
8
+ const reasons = buildReviewReasons(summary, thresholds, applyResult);
9
+ const hasBlockedReason = reasons.some((reason) => reason.severity === "blocked");
10
+ const status = hasBlockedReason
11
+ ? "blocked"
12
+ : reasons.length > 0
13
+ ? "warning"
14
+ : "ready";
15
+ return {
16
+ status,
17
+ workflowId: applyResult.definition.id,
18
+ workflowVersion: applyResult.definition.version,
19
+ summary,
20
+ thresholds,
21
+ reasons,
22
+ };
23
+ }
24
+ export function buildAssistantWorkflowDefinitionTuningReviewTracePayload(review) {
25
+ return {
26
+ status: review.status,
27
+ workflowId: review.workflowId,
28
+ workflowVersion: review.workflowVersion,
29
+ summary: {
30
+ changed: review.summary.changed,
31
+ appliedCount: review.summary.appliedCount,
32
+ skippedCount: review.summary.skippedCount,
33
+ changedIntentCount: review.summary.changedIntentCount,
34
+ changedDirectRouteCount: review.summary.changedDirectRouteCount,
35
+ addedToolHintCount: review.summary.addedToolHintCount,
36
+ addedDirectRouteStrategyCount: review.summary.addedDirectRouteStrategyCount,
37
+ maxAddedToolHintsPerIntent: review.summary.maxAddedToolHintsPerIntent,
38
+ changedIntents: review.summary.changedIntents.map((intent) => ({
39
+ intentId: intent.intentId,
40
+ addedToolHintCount: intent.addedToolHintCount,
41
+ addedToolHints: intent.addedToolHints,
42
+ })),
43
+ changedDirectRoutes: review.summary.changedDirectRoutes.map((route) => ({
44
+ routeId: route.routeId,
45
+ addedStrategyCount: route.addedStrategyCount,
46
+ addedStrategyIds: route.addedStrategyIds,
47
+ })),
48
+ smoke: review.summary.smoke,
49
+ },
50
+ thresholds: review.thresholds,
51
+ reasons: review.reasons.map((reason) => ({
52
+ severity: reason.severity,
53
+ code: reason.code,
54
+ message: reason.message,
55
+ details: reason.details,
56
+ })),
57
+ };
58
+ }
59
+ function buildReviewSummary(applyResult, smoke) {
60
+ const changedIntents = applyResult.diff.intentDiffs
61
+ .filter((intentDiff) => intentDiff.addedToolHints.length > 0)
62
+ .map((intentDiff) => ({
63
+ intentId: intentDiff.intentId,
64
+ addedToolHintCount: intentDiff.addedToolHints.length,
65
+ addedToolHints: intentDiff.addedToolHints,
66
+ }));
67
+ const addedToolHintCount = changedIntents.reduce((total, intent) => total + intent.addedToolHintCount, 0);
68
+ const changedDirectRoutes = applyResult.diff.directRouteDiffs
69
+ .filter((routeDiff) => routeDiff.addedStrategyIds.length > 0)
70
+ .map((routeDiff) => ({
71
+ routeId: routeDiff.routeId,
72
+ addedStrategyCount: routeDiff.addedStrategyIds.length,
73
+ addedStrategyIds: routeDiff.addedStrategyIds,
74
+ }));
75
+ const addedDirectRouteStrategyCount = changedDirectRoutes.reduce((total, route) => total + route.addedStrategyCount, 0);
76
+ return {
77
+ changed: applyResult.changed,
78
+ appliedCount: applyResult.appliedCount,
79
+ skippedCount: applyResult.skippedCount,
80
+ changedIntentCount: changedIntents.length,
81
+ changedDirectRouteCount: changedDirectRoutes.length,
82
+ addedToolHintCount,
83
+ addedDirectRouteStrategyCount,
84
+ maxAddedToolHintsPerIntent: Math.max(0, ...changedIntents.map((intent) => intent.addedToolHintCount)),
85
+ changedIntents,
86
+ changedDirectRoutes,
87
+ smoke: smoke
88
+ ? {
89
+ caseCount: smoke.summary.caseCount,
90
+ passCount: smoke.summary.passCount,
91
+ failCount: smoke.summary.failCount,
92
+ requiredFailCount: smoke.summary.requiredFailCount,
93
+ failedCaseIds: smoke.summary.failedCaseIds,
94
+ requiredFailedCaseIds: smoke.summary.requiredFailedCaseIds,
95
+ }
96
+ : null,
97
+ };
98
+ }
99
+ function buildReviewReasons(summary, thresholds, applyResult) {
100
+ const reasons = [];
101
+ if (!summary.changed) {
102
+ reasons.push(reason("blocked", "no_change", "No definition changes were applied.", {}));
103
+ }
104
+ if (summary.appliedCount > thresholds.maxAppliedSuggestions) {
105
+ reasons.push(reason("warning", "too_many_applied_suggestions", `Applied ${summary.appliedCount} suggestions, above the review threshold ${thresholds.maxAppliedSuggestions}.`, {
106
+ appliedCount: summary.appliedCount,
107
+ maxAppliedSuggestions: thresholds.maxAppliedSuggestions,
108
+ }));
109
+ }
110
+ if (summary.changedIntentCount > thresholds.maxChangedIntents) {
111
+ reasons.push(reason("warning", "too_many_changed_intents", `Changed ${summary.changedIntentCount} intents, above the review threshold ${thresholds.maxChangedIntents}.`, {
112
+ changedIntentCount: summary.changedIntentCount,
113
+ maxChangedIntents: thresholds.maxChangedIntents,
114
+ }));
115
+ }
116
+ if (summary.changedDirectRouteCount > thresholds.maxChangedDirectRoutes) {
117
+ reasons.push(reason("warning", "too_many_changed_direct_routes", `Changed ${summary.changedDirectRouteCount} direct routes, above the review threshold ${thresholds.maxChangedDirectRoutes}.`, {
118
+ changedDirectRouteCount: summary.changedDirectRouteCount,
119
+ maxChangedDirectRoutes: thresholds.maxChangedDirectRoutes,
120
+ }));
121
+ }
122
+ for (const changedIntent of summary.changedIntents) {
123
+ if (changedIntent.addedToolHintCount <= thresholds.maxAddedToolHintsPerIntent)
124
+ continue;
125
+ reasons.push(reason("warning", "too_many_hints_for_intent", `Intent ${changedIntent.intentId} gained ${changedIntent.addedToolHintCount} tool hints, above the review threshold ${thresholds.maxAddedToolHintsPerIntent}.`, {
126
+ intentId: changedIntent.intentId,
127
+ addedToolHintCount: changedIntent.addedToolHintCount,
128
+ maxAddedToolHintsPerIntent: thresholds.maxAddedToolHintsPerIntent,
129
+ addedToolHints: changedIntent.addedToolHints,
130
+ }));
131
+ }
132
+ if (summary.smoke) {
133
+ if (summary.smoke.requiredFailCount > 0) {
134
+ reasons.push(reason("blocked", "smoke_required_failures", `${summary.smoke.requiredFailCount} required smoke cases failed.`, {
135
+ requiredFailCount: summary.smoke.requiredFailCount,
136
+ requiredFailedCaseIds: summary.smoke.requiredFailedCaseIds,
137
+ }));
138
+ }
139
+ else if (summary.smoke.failCount > 0) {
140
+ reasons.push(reason("warning", "smoke_failures", `${summary.smoke.failCount} optional smoke cases failed.`, {
141
+ failCount: summary.smoke.failCount,
142
+ failedCaseIds: summary.smoke.failedCaseIds,
143
+ }));
144
+ }
145
+ }
146
+ else if (thresholds.requireSmokePass) {
147
+ reasons.push(reason("warning", "smoke_not_run", "Smoke suite was not run for this tuning review.", {}));
148
+ }
149
+ if (thresholds.checkToolCompatibility) {
150
+ reasons.push(...buildToolCompatibilityReasons(applyResult));
151
+ }
152
+ return reasons;
153
+ }
154
+ function buildToolCompatibilityReasons(applyResult) {
155
+ const reasons = [];
156
+ const intentsById = new Map(applyResult.definition.intents.map((intent) => [intent.id, intent]));
157
+ const toolsByName = new Map((applyResult.definition.tools ?? []).map((tool) => [tool.name, tool]));
158
+ for (const intentDiff of applyResult.diff.intentDiffs) {
159
+ const intent = intentsById.get(intentDiff.intentId);
160
+ if (!intent?.defaultPresentation)
161
+ continue;
162
+ for (const toolName of intentDiff.addedToolHints) {
163
+ const tool = toolsByName.get(toolName);
164
+ if (!tool)
165
+ continue;
166
+ if (!hasToolOutputPresentationMismatch(intent.defaultPresentation, tool.outputKinds))
167
+ continue;
168
+ reasons.push(reason("warning", "tool_output_presentation_mismatch", `Tool ${toolName} only produces ${tool.outputKinds.join(", ")} output, which may not fit intent ${intent.id} default presentation ${intent.defaultPresentation}.`, {
169
+ intentId: intent.id,
170
+ toolName,
171
+ defaultPresentation: intent.defaultPresentation,
172
+ outputKinds: [...tool.outputKinds],
173
+ }));
174
+ }
175
+ }
176
+ return reasons;
177
+ }
178
+ function hasToolOutputPresentationMismatch(presentation, outputKinds) {
179
+ const normalizedPresentation = presentation.trim().toLowerCase();
180
+ const normalizedOutputKinds = outputKinds.map((outputKind) => outputKind.trim().toLowerCase());
181
+ if (normalizedPresentation === "text") {
182
+ return normalizedOutputKinds.length > 0 &&
183
+ normalizedOutputKinds.every((outputKind) => outputKind === "chart" || outputKind === "artifact");
184
+ }
185
+ if (normalizedPresentation === "table") {
186
+ return normalizedOutputKinds.length > 0 &&
187
+ normalizedOutputKinds.every((outputKind) => outputKind === "chart");
188
+ }
189
+ if (normalizedPresentation === "chart") {
190
+ return normalizedOutputKinds.length > 0 &&
191
+ normalizedOutputKinds.every((outputKind) => !["chart", "data", "table", "artifact"].includes(outputKind));
192
+ }
193
+ return false;
194
+ }
195
+ function reason(severity, code, message, details) {
196
+ return { severity, code, message, details };
197
+ }
198
+ function normalizeReviewOptions(options) {
199
+ return {
200
+ maxAppliedSuggestions: normalizeNonNegativeInteger(options.maxAppliedSuggestions, DEFAULT_MAX_APPLIED_SUGGESTIONS),
201
+ maxChangedIntents: normalizeNonNegativeInteger(options.maxChangedIntents, DEFAULT_MAX_CHANGED_INTENTS),
202
+ maxChangedDirectRoutes: normalizeNonNegativeInteger(options.maxChangedDirectRoutes, DEFAULT_MAX_CHANGED_DIRECT_ROUTES),
203
+ maxAddedToolHintsPerIntent: normalizeNonNegativeInteger(options.maxAddedToolHintsPerIntent, DEFAULT_MAX_ADDED_TOOL_HINTS_PER_INTENT),
204
+ requireSmokePass: options.requireSmokePass !== false,
205
+ checkToolCompatibility: options.checkToolCompatibility !== false,
206
+ };
207
+ }
208
+ function normalizeNonNegativeInteger(value, fallback) {
209
+ if (value === undefined || !Number.isFinite(value) || value < 0)
210
+ return fallback;
211
+ return Math.floor(value);
212
+ }
213
+ //# sourceMappingURL=definition-tuning-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition-tuning-review.js","sourceRoot":"","sources":["../src/definition-tuning-review.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantWorkflowDefinitionPackageSmokeSuiteResult } from \"./definition-package-smoke.js\";\nimport type { AssistantWorkflowDefinitionTuningApplyResult } from \"./definition-tuning.js\";\nimport type { AssistantWorkflowJsonValue } from \"./run-report-json.js\";\n\nexport type AssistantWorkflowDefinitionTuningReviewStatus =\n | \"ready\"\n | \"warning\"\n | \"blocked\";\n\nexport type AssistantWorkflowDefinitionTuningReviewReasonSeverity =\n | \"warning\"\n | \"blocked\";\n\nexport type AssistantWorkflowDefinitionTuningReviewReasonCode =\n | \"no_change\"\n | \"smoke_required_failures\"\n | \"smoke_failures\"\n | \"smoke_not_run\"\n | \"too_many_applied_suggestions\"\n | \"too_many_changed_intents\"\n | \"too_many_changed_direct_routes\"\n | \"too_many_hints_for_intent\"\n | \"tool_output_presentation_mismatch\";\n\nexport type AssistantWorkflowDefinitionTuningReviewReason = {\n severity: AssistantWorkflowDefinitionTuningReviewReasonSeverity;\n code: AssistantWorkflowDefinitionTuningReviewReasonCode;\n message: string;\n details: Record<string, AssistantWorkflowJsonValue>;\n};\n\nexport type AssistantWorkflowDefinitionTuningReviewOptions = {\n maxAppliedSuggestions?: number;\n maxChangedIntents?: number;\n maxChangedDirectRoutes?: number;\n maxAddedToolHintsPerIntent?: number;\n requireSmokePass?: boolean;\n checkToolCompatibility?: boolean;\n};\n\nexport type AssistantWorkflowDefinitionTuningReviewSummary = {\n changed: boolean;\n appliedCount: number;\n skippedCount: number;\n changedIntentCount: number;\n changedDirectRouteCount: number;\n addedToolHintCount: number;\n addedDirectRouteStrategyCount: number;\n maxAddedToolHintsPerIntent: number;\n changedIntents: {\n intentId: string;\n addedToolHintCount: number;\n addedToolHints: string[];\n }[];\n changedDirectRoutes: {\n routeId: string;\n addedStrategyCount: number;\n addedStrategyIds: string[];\n }[];\n smoke: {\n caseCount: number;\n passCount: number;\n failCount: number;\n requiredFailCount: number;\n failedCaseIds: string[];\n requiredFailedCaseIds: string[];\n } | null;\n};\n\nexport type AssistantWorkflowDefinitionTuningReview = {\n status: AssistantWorkflowDefinitionTuningReviewStatus;\n workflowId: string;\n workflowVersion: number;\n summary: AssistantWorkflowDefinitionTuningReviewSummary;\n thresholds: Required<AssistantWorkflowDefinitionTuningReviewOptions>;\n reasons: AssistantWorkflowDefinitionTuningReviewReason[];\n};\n\nconst DEFAULT_MAX_APPLIED_SUGGESTIONS = 10;\nconst DEFAULT_MAX_CHANGED_INTENTS = 3;\nconst DEFAULT_MAX_CHANGED_DIRECT_ROUTES = 5;\nconst DEFAULT_MAX_ADDED_TOOL_HINTS_PER_INTENT = 5;\n\nexport function buildAssistantWorkflowDefinitionTuningReview(\n applyResult: AssistantWorkflowDefinitionTuningApplyResult,\n smoke: AssistantWorkflowDefinitionPackageSmokeSuiteResult | null = null,\n options: AssistantWorkflowDefinitionTuningReviewOptions = {},\n): AssistantWorkflowDefinitionTuningReview {\n const thresholds = normalizeReviewOptions(options);\n const summary = buildReviewSummary(applyResult, smoke);\n const reasons = buildReviewReasons(summary, thresholds, applyResult);\n const hasBlockedReason = reasons.some((reason) => reason.severity === \"blocked\");\n const status: AssistantWorkflowDefinitionTuningReviewStatus = hasBlockedReason\n ? \"blocked\"\n : reasons.length > 0\n ? \"warning\"\n : \"ready\";\n\n return {\n status,\n workflowId: applyResult.definition.id,\n workflowVersion: applyResult.definition.version,\n summary,\n thresholds,\n reasons,\n };\n}\n\nexport function buildAssistantWorkflowDefinitionTuningReviewTracePayload(\n review: AssistantWorkflowDefinitionTuningReview,\n): Record<string, AssistantWorkflowJsonValue> {\n return {\n status: review.status,\n workflowId: review.workflowId,\n workflowVersion: review.workflowVersion,\n summary: {\n changed: review.summary.changed,\n appliedCount: review.summary.appliedCount,\n skippedCount: review.summary.skippedCount,\n changedIntentCount: review.summary.changedIntentCount,\n changedDirectRouteCount: review.summary.changedDirectRouteCount,\n addedToolHintCount: review.summary.addedToolHintCount,\n addedDirectRouteStrategyCount: review.summary.addedDirectRouteStrategyCount,\n maxAddedToolHintsPerIntent: review.summary.maxAddedToolHintsPerIntent,\n changedIntents: review.summary.changedIntents.map((intent) => ({\n intentId: intent.intentId,\n addedToolHintCount: intent.addedToolHintCount,\n addedToolHints: intent.addedToolHints,\n })),\n changedDirectRoutes: review.summary.changedDirectRoutes.map((route) => ({\n routeId: route.routeId,\n addedStrategyCount: route.addedStrategyCount,\n addedStrategyIds: route.addedStrategyIds,\n })),\n smoke: review.summary.smoke,\n },\n thresholds: review.thresholds,\n reasons: review.reasons.map((reason) => ({\n severity: reason.severity,\n code: reason.code,\n message: reason.message,\n details: reason.details,\n })),\n };\n}\n\nfunction buildReviewSummary(\n applyResult: AssistantWorkflowDefinitionTuningApplyResult,\n smoke: AssistantWorkflowDefinitionPackageSmokeSuiteResult | null,\n): AssistantWorkflowDefinitionTuningReviewSummary {\n const changedIntents = applyResult.diff.intentDiffs\n .filter((intentDiff) => intentDiff.addedToolHints.length > 0)\n .map((intentDiff) => ({\n intentId: intentDiff.intentId,\n addedToolHintCount: intentDiff.addedToolHints.length,\n addedToolHints: intentDiff.addedToolHints,\n }));\n const addedToolHintCount = changedIntents.reduce(\n (total, intent) => total + intent.addedToolHintCount,\n 0,\n );\n const changedDirectRoutes = applyResult.diff.directRouteDiffs\n .filter((routeDiff) => routeDiff.addedStrategyIds.length > 0)\n .map((routeDiff) => ({\n routeId: routeDiff.routeId,\n addedStrategyCount: routeDiff.addedStrategyIds.length,\n addedStrategyIds: routeDiff.addedStrategyIds,\n }));\n const addedDirectRouteStrategyCount = changedDirectRoutes.reduce(\n (total, route) => total + route.addedStrategyCount,\n 0,\n );\n\n return {\n changed: applyResult.changed,\n appliedCount: applyResult.appliedCount,\n skippedCount: applyResult.skippedCount,\n changedIntentCount: changedIntents.length,\n changedDirectRouteCount: changedDirectRoutes.length,\n addedToolHintCount,\n addedDirectRouteStrategyCount,\n maxAddedToolHintsPerIntent: Math.max(0, ...changedIntents.map((intent) => intent.addedToolHintCount)),\n changedIntents,\n changedDirectRoutes,\n smoke: smoke\n ? {\n caseCount: smoke.summary.caseCount,\n passCount: smoke.summary.passCount,\n failCount: smoke.summary.failCount,\n requiredFailCount: smoke.summary.requiredFailCount,\n failedCaseIds: smoke.summary.failedCaseIds,\n requiredFailedCaseIds: smoke.summary.requiredFailedCaseIds,\n }\n : null,\n };\n}\n\nfunction buildReviewReasons(\n summary: AssistantWorkflowDefinitionTuningReviewSummary,\n thresholds: Required<AssistantWorkflowDefinitionTuningReviewOptions>,\n applyResult: AssistantWorkflowDefinitionTuningApplyResult,\n): AssistantWorkflowDefinitionTuningReviewReason[] {\n const reasons: AssistantWorkflowDefinitionTuningReviewReason[] = [];\n\n if (!summary.changed) {\n reasons.push(reason(\n \"blocked\",\n \"no_change\",\n \"No definition changes were applied.\",\n {},\n ));\n }\n\n if (summary.appliedCount > thresholds.maxAppliedSuggestions) {\n reasons.push(reason(\n \"warning\",\n \"too_many_applied_suggestions\",\n `Applied ${summary.appliedCount} suggestions, above the review threshold ${thresholds.maxAppliedSuggestions}.`,\n {\n appliedCount: summary.appliedCount,\n maxAppliedSuggestions: thresholds.maxAppliedSuggestions,\n },\n ));\n }\n\n if (summary.changedIntentCount > thresholds.maxChangedIntents) {\n reasons.push(reason(\n \"warning\",\n \"too_many_changed_intents\",\n `Changed ${summary.changedIntentCount} intents, above the review threshold ${thresholds.maxChangedIntents}.`,\n {\n changedIntentCount: summary.changedIntentCount,\n maxChangedIntents: thresholds.maxChangedIntents,\n },\n ));\n }\n\n if (summary.changedDirectRouteCount > thresholds.maxChangedDirectRoutes) {\n reasons.push(reason(\n \"warning\",\n \"too_many_changed_direct_routes\",\n `Changed ${summary.changedDirectRouteCount} direct routes, above the review threshold ${thresholds.maxChangedDirectRoutes}.`,\n {\n changedDirectRouteCount: summary.changedDirectRouteCount,\n maxChangedDirectRoutes: thresholds.maxChangedDirectRoutes,\n },\n ));\n }\n\n for (const changedIntent of summary.changedIntents) {\n if (changedIntent.addedToolHintCount <= thresholds.maxAddedToolHintsPerIntent) continue;\n reasons.push(reason(\n \"warning\",\n \"too_many_hints_for_intent\",\n `Intent ${changedIntent.intentId} gained ${changedIntent.addedToolHintCount} tool hints, above the review threshold ${thresholds.maxAddedToolHintsPerIntent}.`,\n {\n intentId: changedIntent.intentId,\n addedToolHintCount: changedIntent.addedToolHintCount,\n maxAddedToolHintsPerIntent: thresholds.maxAddedToolHintsPerIntent,\n addedToolHints: changedIntent.addedToolHints,\n },\n ));\n }\n\n if (summary.smoke) {\n if (summary.smoke.requiredFailCount > 0) {\n reasons.push(reason(\n \"blocked\",\n \"smoke_required_failures\",\n `${summary.smoke.requiredFailCount} required smoke cases failed.`,\n {\n requiredFailCount: summary.smoke.requiredFailCount,\n requiredFailedCaseIds: summary.smoke.requiredFailedCaseIds,\n },\n ));\n } else if (summary.smoke.failCount > 0) {\n reasons.push(reason(\n \"warning\",\n \"smoke_failures\",\n `${summary.smoke.failCount} optional smoke cases failed.`,\n {\n failCount: summary.smoke.failCount,\n failedCaseIds: summary.smoke.failedCaseIds,\n },\n ));\n }\n } else if (thresholds.requireSmokePass) {\n reasons.push(reason(\n \"warning\",\n \"smoke_not_run\",\n \"Smoke suite was not run for this tuning review.\",\n {},\n ));\n }\n\n if (thresholds.checkToolCompatibility) {\n reasons.push(...buildToolCompatibilityReasons(applyResult));\n }\n\n return reasons;\n}\n\nfunction buildToolCompatibilityReasons(\n applyResult: AssistantWorkflowDefinitionTuningApplyResult,\n): AssistantWorkflowDefinitionTuningReviewReason[] {\n const reasons: AssistantWorkflowDefinitionTuningReviewReason[] = [];\n const intentsById = new Map(applyResult.definition.intents.map((intent) => [intent.id, intent]));\n const toolsByName = new Map((applyResult.definition.tools ?? []).map((tool) => [tool.name, tool]));\n\n for (const intentDiff of applyResult.diff.intentDiffs) {\n const intent = intentsById.get(intentDiff.intentId);\n if (!intent?.defaultPresentation) continue;\n for (const toolName of intentDiff.addedToolHints) {\n const tool = toolsByName.get(toolName);\n if (!tool) continue;\n if (!hasToolOutputPresentationMismatch(intent.defaultPresentation, tool.outputKinds)) continue;\n reasons.push(reason(\n \"warning\",\n \"tool_output_presentation_mismatch\",\n `Tool ${toolName} only produces ${tool.outputKinds.join(\", \")} output, which may not fit intent ${intent.id} default presentation ${intent.defaultPresentation}.`,\n {\n intentId: intent.id,\n toolName,\n defaultPresentation: intent.defaultPresentation,\n outputKinds: [...tool.outputKinds],\n },\n ));\n }\n }\n\n return reasons;\n}\n\nfunction hasToolOutputPresentationMismatch(\n presentation: string,\n outputKinds: readonly string[],\n): boolean {\n const normalizedPresentation = presentation.trim().toLowerCase();\n const normalizedOutputKinds = outputKinds.map((outputKind) => outputKind.trim().toLowerCase());\n if (normalizedPresentation === \"text\") {\n return normalizedOutputKinds.length > 0 &&\n normalizedOutputKinds.every((outputKind) => outputKind === \"chart\" || outputKind === \"artifact\");\n }\n if (normalizedPresentation === \"table\") {\n return normalizedOutputKinds.length > 0 &&\n normalizedOutputKinds.every((outputKind) => outputKind === \"chart\");\n }\n if (normalizedPresentation === \"chart\") {\n return normalizedOutputKinds.length > 0 &&\n normalizedOutputKinds.every((outputKind) =>\n ![\"chart\", \"data\", \"table\", \"artifact\"].includes(outputKind)\n );\n }\n return false;\n}\n\nfunction reason(\n severity: AssistantWorkflowDefinitionTuningReviewReasonSeverity,\n code: AssistantWorkflowDefinitionTuningReviewReasonCode,\n message: string,\n details: Record<string, AssistantWorkflowJsonValue>,\n): AssistantWorkflowDefinitionTuningReviewReason {\n return { severity, code, message, details };\n}\n\nfunction normalizeReviewOptions(\n options: AssistantWorkflowDefinitionTuningReviewOptions,\n): Required<AssistantWorkflowDefinitionTuningReviewOptions> {\n return {\n maxAppliedSuggestions: normalizeNonNegativeInteger(\n options.maxAppliedSuggestions,\n DEFAULT_MAX_APPLIED_SUGGESTIONS,\n ),\n maxChangedIntents: normalizeNonNegativeInteger(\n options.maxChangedIntents,\n DEFAULT_MAX_CHANGED_INTENTS,\n ),\n maxChangedDirectRoutes: normalizeNonNegativeInteger(\n options.maxChangedDirectRoutes,\n DEFAULT_MAX_CHANGED_DIRECT_ROUTES,\n ),\n maxAddedToolHintsPerIntent: normalizeNonNegativeInteger(\n options.maxAddedToolHintsPerIntent,\n DEFAULT_MAX_ADDED_TOOL_HINTS_PER_INTENT,\n ),\n requireSmokePass: options.requireSmokePass !== false,\n checkToolCompatibility: options.checkToolCompatibility !== false,\n };\n}\n\nfunction normalizeNonNegativeInteger(value: number | undefined, fallback: number): number {\n if (value === undefined || !Number.isFinite(value) || value < 0) return fallback;\n return Math.floor(value);\n}\n"]}
@@ -0,0 +1,43 @@
1
+ import { type AssistantWorkflowDefinitionTuningPromotion } from "./definition-tuning-promotion.js";
2
+ import type { AssistantWorkflowDefinitionTuningReviewArtifact } from "./definition-tuning-review-artifact.js";
3
+ import { type AssistantWorkflowSerializedDefinition } from "./definition-json.js";
4
+ import type { AssistantWorkflowJsonValue } from "./run-report-json.js";
5
+ export declare const ASSISTANT_WORKFLOW_DEFINITION_TUNING_SOURCE_PATCH_SCHEMA_VERSION = 1;
6
+ export type AssistantWorkflowDefinitionTuningSourcePatchStatus = "ready" | "blocked";
7
+ export type AssistantWorkflowDefinitionTuningSourcePatchOperation = {
8
+ kind: "replace_workflow_definition";
9
+ workflowId: string;
10
+ fromVersion: number | null;
11
+ toVersion: number | null;
12
+ format: "assistant_workflow_serialized_definition_json";
13
+ definition: AssistantWorkflowSerializedDefinition;
14
+ };
15
+ export type AssistantWorkflowDefinitionTuningSourcePatchArtifact = {
16
+ schemaVersion: typeof ASSISTANT_WORKFLOW_DEFINITION_TUNING_SOURCE_PATCH_SCHEMA_VERSION;
17
+ generatedAt: string;
18
+ workflowId: string;
19
+ fromVersion: number | null;
20
+ toVersion: number | null;
21
+ status: AssistantWorkflowDefinitionTuningSourcePatchStatus;
22
+ target: {
23
+ kind: "serialized_definition_file";
24
+ suggestedFileName: string | null;
25
+ };
26
+ promotion: Record<string, AssistantWorkflowJsonValue>;
27
+ brief: Record<string, AssistantWorkflowJsonValue>;
28
+ operations: AssistantWorkflowDefinitionTuningSourcePatchOperation[];
29
+ reasons: {
30
+ code: "promotion_not_promotable";
31
+ message: string;
32
+ details: Record<string, AssistantWorkflowJsonValue>;
33
+ }[];
34
+ };
35
+ export type AssistantWorkflowDefinitionTuningSourcePatchOptions = {
36
+ generatedAt?: string;
37
+ suggestedFileName?: string | null;
38
+ };
39
+ export declare function buildAssistantWorkflowDefinitionTuningSourcePatchArtifact(reviewArtifact: AssistantWorkflowDefinitionTuningReviewArtifact, promotion?: AssistantWorkflowDefinitionTuningPromotion, options?: AssistantWorkflowDefinitionTuningSourcePatchOptions): AssistantWorkflowDefinitionTuningSourcePatchArtifact;
40
+ export declare function buildAssistantWorkflowDefinitionTuningSourcePatchTracePayload(artifact: AssistantWorkflowDefinitionTuningSourcePatchArtifact): Record<string, AssistantWorkflowJsonValue>;
41
+ export declare function stringifyAssistantWorkflowDefinitionTuningSourcePatchArtifact(artifact: AssistantWorkflowDefinitionTuningSourcePatchArtifact, space?: number): string;
42
+ export declare function parseAssistantWorkflowDefinitionTuningSourcePatchArtifact(value: unknown): AssistantWorkflowDefinitionTuningSourcePatchArtifact | null;
43
+ //# sourceMappingURL=definition-tuning-source-patch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition-tuning-source-patch.d.ts","sourceRoot":"","sources":["../src/definition-tuning-source-patch.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,0CAA0C,EAChD,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,+CAA+C,EAAE,MAAM,wCAAwC,CAAC;AAC9G,OAAO,EAEL,KAAK,qCAAqC,EAC3C,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,eAAO,MAAM,gEAAgE,IAAI,CAAC;AAElF,MAAM,MAAM,kDAAkD,GAC1D,OAAO,GACP,SAAS,CAAC;AAEd,MAAM,MAAM,qDAAqD,GAAG;IAClE,IAAI,EAAE,6BAA6B,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,+CAA+C,CAAC;IACxD,UAAU,EAAE,qCAAqC,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,oDAAoD,GAAG;IACjE,aAAa,EAAE,OAAO,gEAAgE,CAAC;IACvF,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,kDAAkD,CAAC;IAC3D,MAAM,EAAE;QACN,IAAI,EAAE,4BAA4B,CAAC;QACnC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;KAClC,CAAC;IACF,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IACtD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;IAClD,UAAU,EAAE,qDAAqD,EAAE,CAAC;IACpE,OAAO,EAAE;QACP,IAAI,EAAE,0BAA0B,CAAC;QACjC,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;KACrD,EAAE,CAAC;CACL,CAAC;AAEF,MAAM,MAAM,mDAAmD,GAAG;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC,CAAC;AAEF,wBAAgB,yDAAyD,CACvE,cAAc,EAAE,+CAA+C,EAC/D,SAAS,GAAE,0CAA4G,EACvH,OAAO,GAAE,mDAAwD,GAChE,oDAAoD,CAwCtD;AAED,wBAAgB,6DAA6D,CAC3E,QAAQ,EAAE,oDAAoD,GAC7D,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CA0B5C;AAED,wBAAgB,6DAA6D,CAC3E,QAAQ,EAAE,oDAAoD,EAC9D,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAER;AAED,wBAAgB,yDAAyD,CACvE,KAAK,EAAE,OAAO,GACb,oDAAoD,GAAG,IAAI,CAiC7D"}
@@ -0,0 +1,214 @@
1
+ import { buildAssistantWorkflowDefinitionTuningPromotion, buildAssistantWorkflowDefinitionTuningPromotionBrief, buildAssistantWorkflowDefinitionTuningPromotionBriefTracePayload, buildAssistantWorkflowDefinitionTuningPromotionTracePayload, } from "./definition-tuning-promotion.js";
2
+ import { parseAssistantWorkflowSerializedDefinition, } from "./definition-json.js";
3
+ export const ASSISTANT_WORKFLOW_DEFINITION_TUNING_SOURCE_PATCH_SCHEMA_VERSION = 1;
4
+ export function buildAssistantWorkflowDefinitionTuningSourcePatchArtifact(reviewArtifact, promotion = buildAssistantWorkflowDefinitionTuningPromotion(reviewArtifact), options = {}) {
5
+ const brief = buildAssistantWorkflowDefinitionTuningPromotionBrief(reviewArtifact, promotion);
6
+ const ready = promotion.status === "promotable";
7
+ const fromVersion = promotion.summary.fromVersion;
8
+ const toVersion = promotion.summary.toVersion;
9
+ return {
10
+ schemaVersion: ASSISTANT_WORKFLOW_DEFINITION_TUNING_SOURCE_PATCH_SCHEMA_VERSION,
11
+ generatedAt: normalizeGeneratedAt(options.generatedAt) ?? new Date().toISOString(),
12
+ workflowId: reviewArtifact.workflowId,
13
+ fromVersion,
14
+ toVersion,
15
+ status: ready ? "ready" : "blocked",
16
+ target: {
17
+ kind: "serialized_definition_file",
18
+ suggestedFileName: normalizeOptionalString(options.suggestedFileName) ?? `${reviewArtifact.workflowId}.workflow.json`,
19
+ },
20
+ promotion: buildAssistantWorkflowDefinitionTuningPromotionTracePayload(promotion),
21
+ brief: buildAssistantWorkflowDefinitionTuningPromotionBriefTracePayload(brief),
22
+ operations: ready
23
+ ? [{
24
+ kind: "replace_workflow_definition",
25
+ workflowId: reviewArtifact.workflowId,
26
+ fromVersion,
27
+ toVersion,
28
+ format: "assistant_workflow_serialized_definition_json",
29
+ definition: reviewArtifact.patchedDefinition,
30
+ }]
31
+ : [],
32
+ reasons: ready
33
+ ? []
34
+ : [{
35
+ code: "promotion_not_promotable",
36
+ message: "Source patch preview is blocked because the definition-tuning promotion is not promotable.",
37
+ details: {
38
+ promotionStatus: promotion.status,
39
+ reasonCodes: promotion.reasons.map((reason) => reason.code),
40
+ },
41
+ }],
42
+ };
43
+ }
44
+ export function buildAssistantWorkflowDefinitionTuningSourcePatchTracePayload(artifact) {
45
+ return {
46
+ schemaVersion: artifact.schemaVersion,
47
+ generatedAt: artifact.generatedAt,
48
+ workflowId: artifact.workflowId,
49
+ fromVersion: artifact.fromVersion,
50
+ toVersion: artifact.toVersion,
51
+ status: artifact.status,
52
+ target: artifact.target,
53
+ operationCount: artifact.operations.length,
54
+ operations: artifact.operations.map((operation) => ({
55
+ kind: operation.kind,
56
+ workflowId: operation.workflowId,
57
+ fromVersion: operation.fromVersion,
58
+ toVersion: operation.toVersion,
59
+ format: operation.format,
60
+ definitionSummary: operation.definition.summary,
61
+ })),
62
+ promotion: artifact.promotion,
63
+ brief: artifact.brief,
64
+ reasons: artifact.reasons.map((reason) => ({
65
+ code: reason.code,
66
+ message: reason.message,
67
+ details: reason.details,
68
+ })),
69
+ };
70
+ }
71
+ export function stringifyAssistantWorkflowDefinitionTuningSourcePatchArtifact(artifact, space) {
72
+ return JSON.stringify(artifact, null, space);
73
+ }
74
+ export function parseAssistantWorkflowDefinitionTuningSourcePatchArtifact(value) {
75
+ if (!isRecord(value))
76
+ return null;
77
+ if (value["schemaVersion"] !== ASSISTANT_WORKFLOW_DEFINITION_TUNING_SOURCE_PATCH_SCHEMA_VERSION)
78
+ return null;
79
+ if (typeof value["generatedAt"] !== "string" || !value["generatedAt"].trim().length)
80
+ return null;
81
+ if (typeof value["workflowId"] !== "string" || !value["workflowId"].trim().length)
82
+ return null;
83
+ if (!isNullableNumber(value["fromVersion"]))
84
+ return null;
85
+ if (!isNullableNumber(value["toVersion"]))
86
+ return null;
87
+ if (value["status"] !== "ready" && value["status"] !== "blocked")
88
+ return null;
89
+ const target = parsePatchTarget(value["target"]);
90
+ if (!target)
91
+ return null;
92
+ if (!isJsonRecord(value["promotion"]))
93
+ return null;
94
+ if (!isJsonRecord(value["brief"]))
95
+ return null;
96
+ if (!Array.isArray(value["operations"]))
97
+ return null;
98
+ const operations = value["operations"].map(parsePatchOperation);
99
+ if (operations.some((operation) => operation === null))
100
+ return null;
101
+ const reasons = parsePatchReasons(value["reasons"]);
102
+ if (!reasons)
103
+ return null;
104
+ return {
105
+ schemaVersion: ASSISTANT_WORKFLOW_DEFINITION_TUNING_SOURCE_PATCH_SCHEMA_VERSION,
106
+ generatedAt: value["generatedAt"],
107
+ workflowId: value["workflowId"],
108
+ fromVersion: value["fromVersion"],
109
+ toVersion: value["toVersion"],
110
+ status: value["status"],
111
+ target,
112
+ promotion: value["promotion"],
113
+ brief: value["brief"],
114
+ operations: operations.filter((operation) => operation !== null),
115
+ reasons,
116
+ };
117
+ }
118
+ function parsePatchTarget(value) {
119
+ if (!isRecord(value))
120
+ return null;
121
+ if (value["kind"] !== "serialized_definition_file")
122
+ return null;
123
+ if (!isNullableString(value["suggestedFileName"]))
124
+ return null;
125
+ return {
126
+ kind: "serialized_definition_file",
127
+ suggestedFileName: value["suggestedFileName"],
128
+ };
129
+ }
130
+ function parsePatchOperation(value) {
131
+ if (!isRecord(value))
132
+ return null;
133
+ if (value["kind"] !== "replace_workflow_definition")
134
+ return null;
135
+ if (typeof value["workflowId"] !== "string" || !value["workflowId"].trim().length)
136
+ return null;
137
+ if (!isNullableNumber(value["fromVersion"]))
138
+ return null;
139
+ if (!isNullableNumber(value["toVersion"]))
140
+ return null;
141
+ if (value["format"] !== "assistant_workflow_serialized_definition_json")
142
+ return null;
143
+ const definition = parseAssistantWorkflowSerializedDefinition(value["definition"]);
144
+ if (!definition)
145
+ return null;
146
+ return {
147
+ kind: "replace_workflow_definition",
148
+ workflowId: value["workflowId"],
149
+ fromVersion: value["fromVersion"],
150
+ toVersion: value["toVersion"],
151
+ format: "assistant_workflow_serialized_definition_json",
152
+ definition,
153
+ };
154
+ }
155
+ function parsePatchReasons(value) {
156
+ if (!Array.isArray(value))
157
+ return null;
158
+ const reasons = value.map((reason) => {
159
+ if (!isRecord(reason))
160
+ return null;
161
+ if (reason["code"] !== "promotion_not_promotable")
162
+ return null;
163
+ if (typeof reason["message"] !== "string")
164
+ return null;
165
+ if (!isJsonRecord(reason["details"]))
166
+ return null;
167
+ return {
168
+ code: "promotion_not_promotable",
169
+ message: reason["message"],
170
+ details: reason["details"],
171
+ };
172
+ });
173
+ if (reasons.some((reason) => reason === null))
174
+ return null;
175
+ return reasons.filter((reason) => reason !== null);
176
+ }
177
+ function normalizeGeneratedAt(value) {
178
+ if (!value)
179
+ return null;
180
+ const date = new Date(value);
181
+ return Number.isNaN(date.getTime()) ? null : date.toISOString();
182
+ }
183
+ function normalizeOptionalString(value) {
184
+ if (value === null || value === undefined)
185
+ return null;
186
+ const trimmed = value.trim();
187
+ return trimmed.length ? trimmed : null;
188
+ }
189
+ function isRecord(value) {
190
+ return !!value && typeof value === "object" && !Array.isArray(value);
191
+ }
192
+ function isJsonRecord(value) {
193
+ if (!isRecord(value))
194
+ return false;
195
+ return Object.values(value).every(isJsonValue);
196
+ }
197
+ function isJsonValue(value) {
198
+ if (value === null)
199
+ return true;
200
+ if (typeof value === "string" || typeof value === "boolean")
201
+ return true;
202
+ if (typeof value === "number")
203
+ return Number.isFinite(value);
204
+ if (Array.isArray(value))
205
+ return value.every(isJsonValue);
206
+ return isJsonRecord(value);
207
+ }
208
+ function isNullableString(value) {
209
+ return value === null || typeof value === "string";
210
+ }
211
+ function isNullableNumber(value) {
212
+ return value === null || (typeof value === "number" && Number.isFinite(value));
213
+ }
214
+ //# sourceMappingURL=definition-tuning-source-patch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition-tuning-source-patch.js","sourceRoot":"","sources":["../src/definition-tuning-source-patch.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n buildAssistantWorkflowDefinitionTuningPromotion,\n buildAssistantWorkflowDefinitionTuningPromotionBrief,\n buildAssistantWorkflowDefinitionTuningPromotionBriefTracePayload,\n buildAssistantWorkflowDefinitionTuningPromotionTracePayload,\n type AssistantWorkflowDefinitionTuningPromotion,\n} from \"./definition-tuning-promotion.js\";\nimport type { AssistantWorkflowDefinitionTuningReviewArtifact } from \"./definition-tuning-review-artifact.js\";\nimport {\n parseAssistantWorkflowSerializedDefinition,\n type AssistantWorkflowSerializedDefinition,\n} from \"./definition-json.js\";\nimport type { AssistantWorkflowJsonValue } from \"./run-report-json.js\";\n\nexport const ASSISTANT_WORKFLOW_DEFINITION_TUNING_SOURCE_PATCH_SCHEMA_VERSION = 1;\n\nexport type AssistantWorkflowDefinitionTuningSourcePatchStatus =\n | \"ready\"\n | \"blocked\";\n\nexport type AssistantWorkflowDefinitionTuningSourcePatchOperation = {\n kind: \"replace_workflow_definition\";\n workflowId: string;\n fromVersion: number | null;\n toVersion: number | null;\n format: \"assistant_workflow_serialized_definition_json\";\n definition: AssistantWorkflowSerializedDefinition;\n};\n\nexport type AssistantWorkflowDefinitionTuningSourcePatchArtifact = {\n schemaVersion: typeof ASSISTANT_WORKFLOW_DEFINITION_TUNING_SOURCE_PATCH_SCHEMA_VERSION;\n generatedAt: string;\n workflowId: string;\n fromVersion: number | null;\n toVersion: number | null;\n status: AssistantWorkflowDefinitionTuningSourcePatchStatus;\n target: {\n kind: \"serialized_definition_file\";\n suggestedFileName: string | null;\n };\n promotion: Record<string, AssistantWorkflowJsonValue>;\n brief: Record<string, AssistantWorkflowJsonValue>;\n operations: AssistantWorkflowDefinitionTuningSourcePatchOperation[];\n reasons: {\n code: \"promotion_not_promotable\";\n message: string;\n details: Record<string, AssistantWorkflowJsonValue>;\n }[];\n};\n\nexport type AssistantWorkflowDefinitionTuningSourcePatchOptions = {\n generatedAt?: string;\n suggestedFileName?: string | null;\n};\n\nexport function buildAssistantWorkflowDefinitionTuningSourcePatchArtifact(\n reviewArtifact: AssistantWorkflowDefinitionTuningReviewArtifact,\n promotion: AssistantWorkflowDefinitionTuningPromotion = buildAssistantWorkflowDefinitionTuningPromotion(reviewArtifact),\n options: AssistantWorkflowDefinitionTuningSourcePatchOptions = {},\n): AssistantWorkflowDefinitionTuningSourcePatchArtifact {\n const brief = buildAssistantWorkflowDefinitionTuningPromotionBrief(reviewArtifact, promotion);\n const ready = promotion.status === \"promotable\";\n const fromVersion = promotion.summary.fromVersion;\n const toVersion = promotion.summary.toVersion;\n\n return {\n schemaVersion: ASSISTANT_WORKFLOW_DEFINITION_TUNING_SOURCE_PATCH_SCHEMA_VERSION,\n generatedAt: normalizeGeneratedAt(options.generatedAt) ?? new Date().toISOString(),\n workflowId: reviewArtifact.workflowId,\n fromVersion,\n toVersion,\n status: ready ? \"ready\" : \"blocked\",\n target: {\n kind: \"serialized_definition_file\",\n suggestedFileName: normalizeOptionalString(options.suggestedFileName) ?? `${reviewArtifact.workflowId}.workflow.json`,\n },\n promotion: buildAssistantWorkflowDefinitionTuningPromotionTracePayload(promotion),\n brief: buildAssistantWorkflowDefinitionTuningPromotionBriefTracePayload(brief),\n operations: ready\n ? [{\n kind: \"replace_workflow_definition\",\n workflowId: reviewArtifact.workflowId,\n fromVersion,\n toVersion,\n format: \"assistant_workflow_serialized_definition_json\",\n definition: reviewArtifact.patchedDefinition,\n }]\n : [],\n reasons: ready\n ? []\n : [{\n code: \"promotion_not_promotable\",\n message: \"Source patch preview is blocked because the definition-tuning promotion is not promotable.\",\n details: {\n promotionStatus: promotion.status,\n reasonCodes: promotion.reasons.map((reason) => reason.code),\n },\n }],\n };\n}\n\nexport function buildAssistantWorkflowDefinitionTuningSourcePatchTracePayload(\n artifact: AssistantWorkflowDefinitionTuningSourcePatchArtifact,\n): Record<string, AssistantWorkflowJsonValue> {\n return {\n schemaVersion: artifact.schemaVersion,\n generatedAt: artifact.generatedAt,\n workflowId: artifact.workflowId,\n fromVersion: artifact.fromVersion,\n toVersion: artifact.toVersion,\n status: artifact.status,\n target: artifact.target,\n operationCount: artifact.operations.length,\n operations: artifact.operations.map((operation) => ({\n kind: operation.kind,\n workflowId: operation.workflowId,\n fromVersion: operation.fromVersion,\n toVersion: operation.toVersion,\n format: operation.format,\n definitionSummary: operation.definition.summary,\n })),\n promotion: artifact.promotion,\n brief: artifact.brief,\n reasons: artifact.reasons.map((reason) => ({\n code: reason.code,\n message: reason.message,\n details: reason.details,\n })),\n };\n}\n\nexport function stringifyAssistantWorkflowDefinitionTuningSourcePatchArtifact(\n artifact: AssistantWorkflowDefinitionTuningSourcePatchArtifact,\n space?: number,\n): string {\n return JSON.stringify(artifact, null, space);\n}\n\nexport function parseAssistantWorkflowDefinitionTuningSourcePatchArtifact(\n value: unknown,\n): AssistantWorkflowDefinitionTuningSourcePatchArtifact | null {\n if (!isRecord(value)) return null;\n if (value[\"schemaVersion\"] !== ASSISTANT_WORKFLOW_DEFINITION_TUNING_SOURCE_PATCH_SCHEMA_VERSION) return null;\n if (typeof value[\"generatedAt\"] !== \"string\" || !value[\"generatedAt\"].trim().length) return null;\n if (typeof value[\"workflowId\"] !== \"string\" || !value[\"workflowId\"].trim().length) return null;\n if (!isNullableNumber(value[\"fromVersion\"])) return null;\n if (!isNullableNumber(value[\"toVersion\"])) return null;\n if (value[\"status\"] !== \"ready\" && value[\"status\"] !== \"blocked\") return null;\n const target = parsePatchTarget(value[\"target\"]);\n if (!target) return null;\n if (!isJsonRecord(value[\"promotion\"])) return null;\n if (!isJsonRecord(value[\"brief\"])) return null;\n if (!Array.isArray(value[\"operations\"])) return null;\n const operations = value[\"operations\"].map(parsePatchOperation);\n if (operations.some((operation) => operation === null)) return null;\n const reasons = parsePatchReasons(value[\"reasons\"]);\n if (!reasons) return null;\n\n return {\n schemaVersion: ASSISTANT_WORKFLOW_DEFINITION_TUNING_SOURCE_PATCH_SCHEMA_VERSION,\n generatedAt: value[\"generatedAt\"],\n workflowId: value[\"workflowId\"],\n fromVersion: value[\"fromVersion\"],\n toVersion: value[\"toVersion\"],\n status: value[\"status\"],\n target,\n promotion: value[\"promotion\"],\n brief: value[\"brief\"],\n operations: operations.filter((operation): operation is AssistantWorkflowDefinitionTuningSourcePatchOperation =>\n operation !== null\n ),\n reasons,\n };\n}\n\nfunction parsePatchTarget(value: unknown): AssistantWorkflowDefinitionTuningSourcePatchArtifact[\"target\"] | null {\n if (!isRecord(value)) return null;\n if (value[\"kind\"] !== \"serialized_definition_file\") return null;\n if (!isNullableString(value[\"suggestedFileName\"])) return null;\n return {\n kind: \"serialized_definition_file\",\n suggestedFileName: value[\"suggestedFileName\"],\n };\n}\n\nfunction parsePatchOperation(value: unknown): AssistantWorkflowDefinitionTuningSourcePatchOperation | null {\n if (!isRecord(value)) return null;\n if (value[\"kind\"] !== \"replace_workflow_definition\") return null;\n if (typeof value[\"workflowId\"] !== \"string\" || !value[\"workflowId\"].trim().length) return null;\n if (!isNullableNumber(value[\"fromVersion\"])) return null;\n if (!isNullableNumber(value[\"toVersion\"])) return null;\n if (value[\"format\"] !== \"assistant_workflow_serialized_definition_json\") return null;\n const definition = parseAssistantWorkflowSerializedDefinition(value[\"definition\"]);\n if (!definition) return null;\n return {\n kind: \"replace_workflow_definition\",\n workflowId: value[\"workflowId\"],\n fromVersion: value[\"fromVersion\"],\n toVersion: value[\"toVersion\"],\n format: \"assistant_workflow_serialized_definition_json\",\n definition,\n };\n}\n\nfunction parsePatchReasons(\n value: unknown,\n): AssistantWorkflowDefinitionTuningSourcePatchArtifact[\"reasons\"] | null {\n if (!Array.isArray(value)) return null;\n const reasons = value.map((reason) => {\n if (!isRecord(reason)) return null;\n if (reason[\"code\"] !== \"promotion_not_promotable\") return null;\n if (typeof reason[\"message\"] !== \"string\") return null;\n if (!isJsonRecord(reason[\"details\"])) return null;\n return {\n code: \"promotion_not_promotable\" as const,\n message: reason[\"message\"],\n details: reason[\"details\"],\n };\n });\n if (reasons.some((reason) => reason === null)) return null;\n return reasons.filter((reason): reason is AssistantWorkflowDefinitionTuningSourcePatchArtifact[\"reasons\"][number] =>\n reason !== null\n );\n}\n\nfunction normalizeGeneratedAt(value: string | undefined): string | null {\n if (!value) return null;\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? null : date.toISOString();\n}\n\nfunction normalizeOptionalString(value: string | null | undefined): string | null {\n if (value === null || value === undefined) return null;\n const trimmed = value.trim();\n return trimmed.length ? trimmed : null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isJsonRecord(value: unknown): value is Record<string, AssistantWorkflowJsonValue> {\n if (!isRecord(value)) return false;\n return Object.values(value).every(isJsonValue);\n}\n\nfunction isJsonValue(value: unknown): value is AssistantWorkflowJsonValue {\n if (value === null) return true;\n if (typeof value === \"string\" || typeof value === \"boolean\") return true;\n if (typeof value === \"number\") return Number.isFinite(value);\n if (Array.isArray(value)) return value.every(isJsonValue);\n return isJsonRecord(value);\n}\n\nfunction isNullableString(value: unknown): value is string | null {\n return value === null || typeof value === \"string\";\n}\n\nfunction isNullableNumber(value: unknown): value is number | null {\n return value === null || (typeof value === \"number\" && Number.isFinite(value));\n}\n"]}