@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 @@
1
+ {"version":3,"file":"definition-tuning-approval.d.ts","sourceRoot":"","sources":["../src/definition-tuning-approval.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,+CAA+C,EAAE,MAAM,wCAAwC,CAAC;AAC9G,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAEvE,eAAO,MAAM,4DAA4D,IAAI,CAAC;AAE9E,MAAM,MAAM,qDAAqD,GAC7D,SAAS,GACT,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,MAAM,iDAAiD,GAAG;IAC9D,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,qDAAqD,CAAC;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iDAAiD,GAAG;IAC9D,aAAa,EAAE,OAAO,4DAA4D,CAAC;IACnF,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,+BAA+B,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/C,SAAS,EAAE,iDAAiD,EAAE,CAAC;CAChE,CAAC;AAEF,MAAM,MAAM,wDAAwD,GAAG;IACrE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,+BAA+B,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,wDAAwD,GAClE,IAAI,CACF,wDAAwD,EACxD,YAAY,GAAG,iBAAiB,GAAG,iCAAiC,CACrE,GAAG;IACF,eAAe,CAAC,EAAE,qDAAqD,CAAC;IACxE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEJ,wBAAgB,sDAAsD,CACpE,SAAS,EAAE,SAAS,iDAAiD,EAAE,EACvE,OAAO,GAAE,wDAA6D,GACrE,iDAAiD,CASnD;AAED,wBAAgB,gEAAgE,CAC9E,cAAc,EAAE,+CAA+C,EAC/D,SAAS,EAAE,SAAS,iDAAiD,EAAE,EACvE,OAAO,GAAE,IAAI,CACX,wDAAwD,EACxD,YAAY,GAAG,iBAAiB,GAAG,iCAAiC,CAChE,GACL,iDAAiD,CAOnD;AAED,wBAAgB,gEAAgE,CAC9E,cAAc,EAAE,+CAA+C,EAC/D,OAAO,GAAE,wDAA6D,GACrE,iDAAiD,CAsBnD;AAED,wBAAgB,0DAA0D,CACxE,QAAQ,EAAE,iDAAiD,GAC1D,MAAM,EAAE,CAIV;AAED,wBAAgB,0DAA0D,CACxE,QAAQ,EAAE,iDAAiD,GAC1D,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CA8B5C;AAED,wBAAgB,0DAA0D,CACxE,QAAQ,EAAE,iDAAiD,EAC3D,KAAK,CAAC,EAAE,MAAM,GACb,MAAM,CAER;AAED,wBAAgB,sDAAsD,CACpE,KAAK,EAAE,OAAO,GACb,iDAAiD,GAAG,IAAI,CAqB1D"}
@@ -0,0 +1,207 @@
1
+ export const ASSISTANT_WORKFLOW_DEFINITION_TUNING_APPROVAL_SCHEMA_VERSION = 1;
2
+ export function buildAssistantWorkflowDefinitionTuningApprovalArtifact(decisions, options = {}) {
3
+ return {
4
+ schemaVersion: ASSISTANT_WORKFLOW_DEFINITION_TUNING_APPROVAL_SCHEMA_VERSION,
5
+ generatedAt: normalizeGeneratedAt(options.generatedAt) ?? new Date().toISOString(),
6
+ workflowId: normalizeOptionalString(options.workflowId),
7
+ workflowVersion: normalizeOptionalNumber(options.workflowVersion),
8
+ sourceReviewArtifactGeneratedAt: normalizeOptionalString(options.sourceReviewArtifactGeneratedAt),
9
+ decisions: normalizeApprovalDecisions(decisions),
10
+ };
11
+ }
12
+ export function buildAssistantWorkflowDefinitionTuningApprovalArtifactFromReview(reviewArtifact, decisions, options = {}) {
13
+ return buildAssistantWorkflowDefinitionTuningApprovalArtifact(decisions, {
14
+ ...options,
15
+ workflowId: reviewArtifact.workflowId,
16
+ workflowVersion: reviewArtifact.workflowVersion,
17
+ sourceReviewArtifactGeneratedAt: reviewArtifact.generatedAt,
18
+ });
19
+ }
20
+ export function buildAssistantWorkflowDefinitionTuningApprovalTemplateFromReview(reviewArtifact, options = {}) {
21
+ const defaultDecision = isApprovalDecisionKind(options.defaultDecision)
22
+ ? options.defaultDecision
23
+ : "pending";
24
+ const decidedAt = normalizeGeneratedAt(options.decidedAt);
25
+ const decisions = reviewArtifact.suggestions.applied.map((suggestion) => {
26
+ const reviewNote = buildSuggestionReviewNote(reviewArtifact, suggestion);
27
+ return {
28
+ suggestionId: suggestion.id,
29
+ decision: defaultDecision,
30
+ ...(options.note?.trim() ? { note: options.note.trim() } : reviewNote ? { note: reviewNote } : {}),
31
+ ...(options.decidedBy?.trim() ? { decidedBy: options.decidedBy.trim() } : {}),
32
+ ...(decidedAt ? { decidedAt } : {}),
33
+ };
34
+ });
35
+ return buildAssistantWorkflowDefinitionTuningApprovalArtifactFromReview(reviewArtifact, decisions, options.generatedAt ? { generatedAt: options.generatedAt } : {});
36
+ }
37
+ export function readApprovedAssistantWorkflowDefinitionTuningSuggestionIds(artifact) {
38
+ return artifact.decisions
39
+ .filter((decision) => decision.decision === "approved")
40
+ .map((decision) => decision.suggestionId);
41
+ }
42
+ export function buildAssistantWorkflowDefinitionTuningApprovalTracePayload(artifact) {
43
+ const approvedSuggestionIds = readApprovedAssistantWorkflowDefinitionTuningSuggestionIds(artifact);
44
+ const rejectedSuggestionIds = artifact.decisions
45
+ .filter((decision) => decision.decision === "rejected")
46
+ .map((decision) => decision.suggestionId);
47
+ const pendingSuggestionIds = artifact.decisions
48
+ .filter((decision) => decision.decision === "pending")
49
+ .map((decision) => decision.suggestionId);
50
+ return {
51
+ schemaVersion: artifact.schemaVersion,
52
+ generatedAt: artifact.generatedAt,
53
+ workflowId: artifact.workflowId,
54
+ workflowVersion: artifact.workflowVersion,
55
+ sourceReviewArtifactGeneratedAt: artifact.sourceReviewArtifactGeneratedAt,
56
+ decisionCount: artifact.decisions.length,
57
+ approvedCount: approvedSuggestionIds.length,
58
+ rejectedCount: rejectedSuggestionIds.length,
59
+ pendingCount: pendingSuggestionIds.length,
60
+ approvedSuggestionIds,
61
+ rejectedSuggestionIds,
62
+ pendingSuggestionIds,
63
+ decisions: artifact.decisions.map((decision) => ({
64
+ suggestionId: decision.suggestionId,
65
+ decision: decision.decision,
66
+ note: decision.note ?? null,
67
+ decidedBy: decision.decidedBy ?? null,
68
+ decidedAt: decision.decidedAt ?? null,
69
+ })),
70
+ };
71
+ }
72
+ export function stringifyAssistantWorkflowDefinitionTuningApprovalArtifact(artifact, space) {
73
+ return JSON.stringify(artifact, null, space);
74
+ }
75
+ export function parseAssistantWorkflowDefinitionTuningApprovalArtifact(value) {
76
+ if (!isRecord(value))
77
+ return null;
78
+ if (value["schemaVersion"] !== ASSISTANT_WORKFLOW_DEFINITION_TUNING_APPROVAL_SCHEMA_VERSION)
79
+ return null;
80
+ if (typeof value["generatedAt"] !== "string" || !value["generatedAt"].trim().length)
81
+ return null;
82
+ if (!isNullableString(value["workflowId"]))
83
+ return null;
84
+ if (!isNullableNumber(value["workflowVersion"]))
85
+ return null;
86
+ if (!isNullableString(value["sourceReviewArtifactGeneratedAt"]))
87
+ return null;
88
+ if (!Array.isArray(value["decisions"]))
89
+ return null;
90
+ const decisions = value["decisions"].map(parseApprovalDecision);
91
+ if (decisions.some((decision) => decision === null))
92
+ return null;
93
+ return {
94
+ schemaVersion: ASSISTANT_WORKFLOW_DEFINITION_TUNING_APPROVAL_SCHEMA_VERSION,
95
+ generatedAt: value["generatedAt"],
96
+ workflowId: value["workflowId"],
97
+ workflowVersion: value["workflowVersion"],
98
+ sourceReviewArtifactGeneratedAt: value["sourceReviewArtifactGeneratedAt"],
99
+ decisions: decisions.filter((decision) => decision !== null),
100
+ };
101
+ }
102
+ function normalizeApprovalDecisions(decisions) {
103
+ const bySuggestionId = new Map();
104
+ for (const decision of decisions) {
105
+ const suggestionId = normalizeRequiredString(decision.suggestionId);
106
+ if (!suggestionId)
107
+ continue;
108
+ const decidedAt = normalizeGeneratedAt(decision.decidedAt);
109
+ bySuggestionId.set(suggestionId, {
110
+ suggestionId,
111
+ decision: decision.decision,
112
+ ...(decision.note?.trim() ? { note: decision.note.trim() } : {}),
113
+ ...(decision.decidedBy?.trim() ? { decidedBy: decision.decidedBy.trim() } : {}),
114
+ ...(decidedAt ? { decidedAt } : {}),
115
+ });
116
+ }
117
+ return [...bySuggestionId.values()].sort((left, right) => left.suggestionId.localeCompare(right.suggestionId));
118
+ }
119
+ function parseApprovalDecision(value) {
120
+ if (!isRecord(value))
121
+ return null;
122
+ if (typeof value["suggestionId"] !== "string" || !value["suggestionId"].trim().length)
123
+ return null;
124
+ if (!isApprovalDecisionKind(value["decision"]))
125
+ return null;
126
+ if (value["note"] !== undefined && typeof value["note"] !== "string")
127
+ return null;
128
+ if (value["decidedBy"] !== undefined && typeof value["decidedBy"] !== "string")
129
+ return null;
130
+ if (value["decidedAt"] !== undefined && typeof value["decidedAt"] !== "string")
131
+ return null;
132
+ return {
133
+ suggestionId: value["suggestionId"],
134
+ decision: value["decision"],
135
+ ...(value["note"] ? { note: value["note"] } : {}),
136
+ ...(value["decidedBy"] ? { decidedBy: value["decidedBy"] } : {}),
137
+ ...(value["decidedAt"] ? { decidedAt: value["decidedAt"] } : {}),
138
+ };
139
+ }
140
+ function buildSuggestionReviewNote(artifact, suggestion) {
141
+ const reasons = Array.isArray(artifact.review["reasons"]) ? artifact.review["reasons"] : [];
142
+ const matchingReason = reasons.find((reason) => isMatchingSuggestionReviewReason(reason, suggestion));
143
+ if (matchingReason && isRecord(matchingReason) && typeof matchingReason["code"] === "string") {
144
+ return `Review required: ${matchingReason["code"]}.`;
145
+ }
146
+ const deferredSignals = readDeferredReviewSignalsForSuggestion(artifact, suggestion);
147
+ if (deferredSignals.length > 0) {
148
+ return `Review required: deferred_review_signals (${deferredSignals.join(", ")}).`;
149
+ }
150
+ return "Pending semantic review.";
151
+ }
152
+ function readDeferredReviewSignalsForSuggestion(artifact, suggestion) {
153
+ if (!suggestion.intentId)
154
+ return [];
155
+ return uniqueStrings(artifact.suggestions.reviewOnly
156
+ .filter((reviewOnly) => reviewOnly.intentId === suggestion.intentId)
157
+ .map((reviewOnly) => reviewOnly.signal ?? reviewOnly.action));
158
+ }
159
+ function isMatchingSuggestionReviewReason(value, suggestion) {
160
+ if (!isRecord(value) || !isRecord(value["details"]))
161
+ return false;
162
+ const details = value["details"];
163
+ const intentMatches = typeof details["intentId"] !== "string" || details["intentId"] === suggestion.intentId;
164
+ const toolMatches = typeof details["toolName"] !== "string" || details["toolName"] === suggestion.toolName;
165
+ return intentMatches && toolMatches;
166
+ }
167
+ function isApprovalDecisionKind(value) {
168
+ return value === "pending" || value === "approved" || value === "rejected";
169
+ }
170
+ function normalizeGeneratedAt(value) {
171
+ if (!value)
172
+ return null;
173
+ const date = new Date(value);
174
+ return Number.isNaN(date.getTime()) ? null : date.toISOString();
175
+ }
176
+ function normalizeOptionalString(value) {
177
+ if (value === null || value === undefined)
178
+ return null;
179
+ const trimmed = value.trim();
180
+ return trimmed.length ? trimmed : null;
181
+ }
182
+ function normalizeOptionalNumber(value) {
183
+ return typeof value === "number" && Number.isFinite(value) ? value : null;
184
+ }
185
+ function normalizeRequiredString(value) {
186
+ const trimmed = value.trim();
187
+ return trimmed.length ? trimmed : null;
188
+ }
189
+ function uniqueStrings(values) {
190
+ const out = [];
191
+ for (const value of values) {
192
+ if (!value.length || out.includes(value))
193
+ continue;
194
+ out.push(value);
195
+ }
196
+ return out.sort((left, right) => left.localeCompare(right));
197
+ }
198
+ function isRecord(value) {
199
+ return !!value && typeof value === "object" && !Array.isArray(value);
200
+ }
201
+ function isNullableString(value) {
202
+ return value === null || typeof value === "string";
203
+ }
204
+ function isNullableNumber(value) {
205
+ return value === null || (typeof value === "number" && Number.isFinite(value));
206
+ }
207
+ //# sourceMappingURL=definition-tuning-approval.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition-tuning-approval.js","sourceRoot":"","sources":["../src/definition-tuning-approval.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AssistantWorkflowDefinitionTuningReviewArtifact } from \"./definition-tuning-review-artifact.js\";\nimport type { AssistantWorkflowJsonValue } from \"./run-report-json.js\";\n\nexport const ASSISTANT_WORKFLOW_DEFINITION_TUNING_APPROVAL_SCHEMA_VERSION = 1;\n\nexport type AssistantWorkflowDefinitionTuningApprovalDecisionKind =\n | \"pending\"\n | \"approved\"\n | \"rejected\";\n\nexport type AssistantWorkflowDefinitionTuningApprovalDecision = {\n suggestionId: string;\n decision: AssistantWorkflowDefinitionTuningApprovalDecisionKind;\n note?: string;\n decidedBy?: string;\n decidedAt?: string;\n};\n\nexport type AssistantWorkflowDefinitionTuningApprovalArtifact = {\n schemaVersion: typeof ASSISTANT_WORKFLOW_DEFINITION_TUNING_APPROVAL_SCHEMA_VERSION;\n generatedAt: string;\n workflowId: string | null;\n workflowVersion: number | null;\n sourceReviewArtifactGeneratedAt: string | null;\n decisions: AssistantWorkflowDefinitionTuningApprovalDecision[];\n};\n\nexport type AssistantWorkflowDefinitionTuningApprovalArtifactOptions = {\n workflowId?: string | null;\n workflowVersion?: number | null;\n sourceReviewArtifactGeneratedAt?: string | null;\n generatedAt?: string;\n};\n\nexport type AssistantWorkflowDefinitionTuningApprovalTemplateOptions =\n Omit<\n AssistantWorkflowDefinitionTuningApprovalArtifactOptions,\n \"workflowId\" | \"workflowVersion\" | \"sourceReviewArtifactGeneratedAt\"\n > & {\n defaultDecision?: AssistantWorkflowDefinitionTuningApprovalDecisionKind;\n decidedBy?: string;\n decidedAt?: string;\n note?: string;\n };\n\nexport function buildAssistantWorkflowDefinitionTuningApprovalArtifact(\n decisions: readonly AssistantWorkflowDefinitionTuningApprovalDecision[],\n options: AssistantWorkflowDefinitionTuningApprovalArtifactOptions = {},\n): AssistantWorkflowDefinitionTuningApprovalArtifact {\n return {\n schemaVersion: ASSISTANT_WORKFLOW_DEFINITION_TUNING_APPROVAL_SCHEMA_VERSION,\n generatedAt: normalizeGeneratedAt(options.generatedAt) ?? new Date().toISOString(),\n workflowId: normalizeOptionalString(options.workflowId),\n workflowVersion: normalizeOptionalNumber(options.workflowVersion),\n sourceReviewArtifactGeneratedAt: normalizeOptionalString(options.sourceReviewArtifactGeneratedAt),\n decisions: normalizeApprovalDecisions(decisions),\n };\n}\n\nexport function buildAssistantWorkflowDefinitionTuningApprovalArtifactFromReview(\n reviewArtifact: AssistantWorkflowDefinitionTuningReviewArtifact,\n decisions: readonly AssistantWorkflowDefinitionTuningApprovalDecision[],\n options: Omit<\n AssistantWorkflowDefinitionTuningApprovalArtifactOptions,\n \"workflowId\" | \"workflowVersion\" | \"sourceReviewArtifactGeneratedAt\"\n > = {},\n): AssistantWorkflowDefinitionTuningApprovalArtifact {\n return buildAssistantWorkflowDefinitionTuningApprovalArtifact(decisions, {\n ...options,\n workflowId: reviewArtifact.workflowId,\n workflowVersion: reviewArtifact.workflowVersion,\n sourceReviewArtifactGeneratedAt: reviewArtifact.generatedAt,\n });\n}\n\nexport function buildAssistantWorkflowDefinitionTuningApprovalTemplateFromReview(\n reviewArtifact: AssistantWorkflowDefinitionTuningReviewArtifact,\n options: AssistantWorkflowDefinitionTuningApprovalTemplateOptions = {},\n): AssistantWorkflowDefinitionTuningApprovalArtifact {\n const defaultDecision = isApprovalDecisionKind(options.defaultDecision)\n ? options.defaultDecision\n : \"pending\";\n const decidedAt = normalizeGeneratedAt(options.decidedAt);\n const decisions = reviewArtifact.suggestions.applied.map((suggestion) => {\n const reviewNote = buildSuggestionReviewNote(reviewArtifact, suggestion);\n\n return {\n suggestionId: suggestion.id,\n decision: defaultDecision,\n ...(options.note?.trim() ? { note: options.note.trim() } : reviewNote ? { note: reviewNote } : {}),\n ...(options.decidedBy?.trim() ? { decidedBy: options.decidedBy.trim() } : {}),\n ...(decidedAt ? { decidedAt } : {}),\n };\n });\n\n return buildAssistantWorkflowDefinitionTuningApprovalArtifactFromReview(\n reviewArtifact,\n decisions,\n options.generatedAt ? { generatedAt: options.generatedAt } : {},\n );\n}\n\nexport function readApprovedAssistantWorkflowDefinitionTuningSuggestionIds(\n artifact: AssistantWorkflowDefinitionTuningApprovalArtifact,\n): string[] {\n return artifact.decisions\n .filter((decision) => decision.decision === \"approved\")\n .map((decision) => decision.suggestionId);\n}\n\nexport function buildAssistantWorkflowDefinitionTuningApprovalTracePayload(\n artifact: AssistantWorkflowDefinitionTuningApprovalArtifact,\n): Record<string, AssistantWorkflowJsonValue> {\n const approvedSuggestionIds = readApprovedAssistantWorkflowDefinitionTuningSuggestionIds(artifact);\n const rejectedSuggestionIds = artifact.decisions\n .filter((decision) => decision.decision === \"rejected\")\n .map((decision) => decision.suggestionId);\n const pendingSuggestionIds = artifact.decisions\n .filter((decision) => decision.decision === \"pending\")\n .map((decision) => decision.suggestionId);\n\n return {\n schemaVersion: artifact.schemaVersion,\n generatedAt: artifact.generatedAt,\n workflowId: artifact.workflowId,\n workflowVersion: artifact.workflowVersion,\n sourceReviewArtifactGeneratedAt: artifact.sourceReviewArtifactGeneratedAt,\n decisionCount: artifact.decisions.length,\n approvedCount: approvedSuggestionIds.length,\n rejectedCount: rejectedSuggestionIds.length,\n pendingCount: pendingSuggestionIds.length,\n approvedSuggestionIds,\n rejectedSuggestionIds,\n pendingSuggestionIds,\n decisions: artifact.decisions.map((decision) => ({\n suggestionId: decision.suggestionId,\n decision: decision.decision,\n note: decision.note ?? null,\n decidedBy: decision.decidedBy ?? null,\n decidedAt: decision.decidedAt ?? null,\n })),\n };\n}\n\nexport function stringifyAssistantWorkflowDefinitionTuningApprovalArtifact(\n artifact: AssistantWorkflowDefinitionTuningApprovalArtifact,\n space?: number,\n): string {\n return JSON.stringify(artifact, null, space);\n}\n\nexport function parseAssistantWorkflowDefinitionTuningApprovalArtifact(\n value: unknown,\n): AssistantWorkflowDefinitionTuningApprovalArtifact | null {\n if (!isRecord(value)) return null;\n if (value[\"schemaVersion\"] !== ASSISTANT_WORKFLOW_DEFINITION_TUNING_APPROVAL_SCHEMA_VERSION) return null;\n if (typeof value[\"generatedAt\"] !== \"string\" || !value[\"generatedAt\"].trim().length) return null;\n if (!isNullableString(value[\"workflowId\"])) return null;\n if (!isNullableNumber(value[\"workflowVersion\"])) return null;\n if (!isNullableString(value[\"sourceReviewArtifactGeneratedAt\"])) return null;\n if (!Array.isArray(value[\"decisions\"])) return null;\n const decisions = value[\"decisions\"].map(parseApprovalDecision);\n if (decisions.some((decision) => decision === null)) return null;\n\n return {\n schemaVersion: ASSISTANT_WORKFLOW_DEFINITION_TUNING_APPROVAL_SCHEMA_VERSION,\n generatedAt: value[\"generatedAt\"],\n workflowId: value[\"workflowId\"],\n workflowVersion: value[\"workflowVersion\"],\n sourceReviewArtifactGeneratedAt: value[\"sourceReviewArtifactGeneratedAt\"],\n decisions: decisions.filter((decision): decision is AssistantWorkflowDefinitionTuningApprovalDecision =>\n decision !== null\n ),\n };\n}\n\nfunction normalizeApprovalDecisions(\n decisions: readonly AssistantWorkflowDefinitionTuningApprovalDecision[],\n): AssistantWorkflowDefinitionTuningApprovalDecision[] {\n const bySuggestionId = new Map<string, AssistantWorkflowDefinitionTuningApprovalDecision>();\n for (const decision of decisions) {\n const suggestionId = normalizeRequiredString(decision.suggestionId);\n if (!suggestionId) continue;\n const decidedAt = normalizeGeneratedAt(decision.decidedAt);\n bySuggestionId.set(suggestionId, {\n suggestionId,\n decision: decision.decision,\n ...(decision.note?.trim() ? { note: decision.note.trim() } : {}),\n ...(decision.decidedBy?.trim() ? { decidedBy: decision.decidedBy.trim() } : {}),\n ...(decidedAt ? { decidedAt } : {}),\n });\n }\n return [...bySuggestionId.values()].sort((left, right) => left.suggestionId.localeCompare(right.suggestionId));\n}\n\nfunction parseApprovalDecision(value: unknown): AssistantWorkflowDefinitionTuningApprovalDecision | null {\n if (!isRecord(value)) return null;\n if (typeof value[\"suggestionId\"] !== \"string\" || !value[\"suggestionId\"].trim().length) return null;\n if (!isApprovalDecisionKind(value[\"decision\"])) return null;\n if (value[\"note\"] !== undefined && typeof value[\"note\"] !== \"string\") return null;\n if (value[\"decidedBy\"] !== undefined && typeof value[\"decidedBy\"] !== \"string\") return null;\n if (value[\"decidedAt\"] !== undefined && typeof value[\"decidedAt\"] !== \"string\") return null;\n\n return {\n suggestionId: value[\"suggestionId\"],\n decision: value[\"decision\"],\n ...(value[\"note\"] ? { note: value[\"note\"] } : {}),\n ...(value[\"decidedBy\"] ? { decidedBy: value[\"decidedBy\"] } : {}),\n ...(value[\"decidedAt\"] ? { decidedAt: value[\"decidedAt\"] } : {}),\n };\n}\n\nfunction buildSuggestionReviewNote(\n artifact: AssistantWorkflowDefinitionTuningReviewArtifact,\n suggestion: AssistantWorkflowDefinitionTuningReviewArtifact[\"suggestions\"][\"applied\"][number],\n): string | null {\n const reasons = Array.isArray(artifact.review[\"reasons\"]) ? artifact.review[\"reasons\"] : [];\n const matchingReason = reasons.find((reason) => isMatchingSuggestionReviewReason(reason, suggestion));\n if (matchingReason && isRecord(matchingReason) && typeof matchingReason[\"code\"] === \"string\") {\n return `Review required: ${matchingReason[\"code\"]}.`;\n }\n const deferredSignals = readDeferredReviewSignalsForSuggestion(artifact, suggestion);\n if (deferredSignals.length > 0) {\n return `Review required: deferred_review_signals (${deferredSignals.join(\", \")}).`;\n }\n return \"Pending semantic review.\";\n}\n\nfunction readDeferredReviewSignalsForSuggestion(\n artifact: AssistantWorkflowDefinitionTuningReviewArtifact,\n suggestion: AssistantWorkflowDefinitionTuningReviewArtifact[\"suggestions\"][\"applied\"][number],\n): string[] {\n if (!suggestion.intentId) return [];\n return uniqueStrings(\n artifact.suggestions.reviewOnly\n .filter((reviewOnly) => reviewOnly.intentId === suggestion.intentId)\n .map((reviewOnly) => reviewOnly.signal ?? reviewOnly.action),\n );\n}\n\nfunction isMatchingSuggestionReviewReason(\n value: unknown,\n suggestion: AssistantWorkflowDefinitionTuningReviewArtifact[\"suggestions\"][\"applied\"][number],\n): boolean {\n if (!isRecord(value) || !isRecord(value[\"details\"])) return false;\n const details = value[\"details\"];\n const intentMatches = typeof details[\"intentId\"] !== \"string\" || details[\"intentId\"] === suggestion.intentId;\n const toolMatches = typeof details[\"toolName\"] !== \"string\" || details[\"toolName\"] === suggestion.toolName;\n return intentMatches && toolMatches;\n}\n\nfunction isApprovalDecisionKind(value: unknown): value is AssistantWorkflowDefinitionTuningApprovalDecisionKind {\n return value === \"pending\" || value === \"approved\" || value === \"rejected\";\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 normalizeOptionalNumber(value: number | null | undefined): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction normalizeRequiredString(value: string): string | null {\n const trimmed = value.trim();\n return trimmed.length ? trimmed : null;\n}\n\nfunction uniqueStrings(values: readonly string[]): string[] {\n const out: string[] = [];\n for (const value of values) {\n if (!value.length || out.includes(value)) continue;\n out.push(value);\n }\n return out.sort((left, right) => left.localeCompare(right));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(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"]}
@@ -0,0 +1,58 @@
1
+ import type { AssistantWorkflowDefinitionTuningSuggestion } from "./definition-tuning.js";
2
+ export declare const ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION = 1;
3
+ export type AssistantWorkflowSerializedDefinitionTuningSuggestion = AssistantWorkflowDefinitionTuningSuggestion & {
4
+ schemaVersion: typeof ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION;
5
+ };
6
+ export type AssistantWorkflowSerializedDefinitionTuningSuggestionLineErrorReason = "invalid_json" | "invalid_definition_tuning_suggestion";
7
+ export type AssistantWorkflowSerializedDefinitionTuningSuggestionLineError = {
8
+ lineNumber: number;
9
+ reason: AssistantWorkflowSerializedDefinitionTuningSuggestionLineErrorReason;
10
+ preview: string;
11
+ };
12
+ export type AssistantWorkflowSerializedDefinitionTuningSuggestionLinesParseResult = {
13
+ lineCount: number;
14
+ suggestionCount: number;
15
+ errorCount: number;
16
+ suggestions: AssistantWorkflowSerializedDefinitionTuningSuggestion[];
17
+ errors: AssistantWorkflowSerializedDefinitionTuningSuggestionLineError[];
18
+ };
19
+ export type AssistantWorkflowSerializedDefinitionTuningSuggestionLinesOptions = {
20
+ trailingNewline?: boolean;
21
+ };
22
+ export type AssistantWorkflowSerializedDefinitionTuningBatchOptions = {
23
+ generatedAt?: string;
24
+ onlyApplicable?: boolean;
25
+ };
26
+ export type AssistantWorkflowSerializedDefinitionTuningBatchCount = {
27
+ key: string;
28
+ count: number;
29
+ };
30
+ export type AssistantWorkflowSerializedDefinitionTuningBatchSummary = {
31
+ generatedAt: string;
32
+ sourceSuggestionCount: number;
33
+ suggestionCount: number;
34
+ applicableSuggestionCount: number;
35
+ reviewOnlySuggestionCount: number;
36
+ warningCount: number;
37
+ actionCounts: AssistantWorkflowSerializedDefinitionTuningBatchCount[];
38
+ severityCounts: AssistantWorkflowSerializedDefinitionTuningBatchCount[];
39
+ patchKindCounts: AssistantWorkflowSerializedDefinitionTuningBatchCount[];
40
+ intentCounts: AssistantWorkflowSerializedDefinitionTuningBatchCount[];
41
+ toolCounts: AssistantWorkflowSerializedDefinitionTuningBatchCount[];
42
+ };
43
+ export type AssistantWorkflowSerializedDefinitionTuningBatch = {
44
+ schemaVersion: typeof ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION;
45
+ generatedAt: string;
46
+ sourceSuggestionCount: number;
47
+ suggestionCount: number;
48
+ summary: AssistantWorkflowSerializedDefinitionTuningBatchSummary;
49
+ suggestions: AssistantWorkflowSerializedDefinitionTuningSuggestion[];
50
+ };
51
+ export declare function serializeAssistantWorkflowDefinitionTuningSuggestion(suggestion: AssistantWorkflowDefinitionTuningSuggestion): AssistantWorkflowSerializedDefinitionTuningSuggestion;
52
+ export declare function stringifyAssistantWorkflowDefinitionTuningSuggestionLines(suggestions: readonly AssistantWorkflowDefinitionTuningSuggestion[], options?: AssistantWorkflowSerializedDefinitionTuningSuggestionLinesOptions): string;
53
+ export declare function stringifyAssistantWorkflowSerializedDefinitionTuningSuggestionLines(suggestions: readonly AssistantWorkflowSerializedDefinitionTuningSuggestion[], options?: AssistantWorkflowSerializedDefinitionTuningSuggestionLinesOptions): string;
54
+ export declare function buildAssistantWorkflowSerializedDefinitionTuningBatch(allSuggestions: readonly AssistantWorkflowSerializedDefinitionTuningSuggestion[], options?: AssistantWorkflowSerializedDefinitionTuningBatchOptions): AssistantWorkflowSerializedDefinitionTuningBatch;
55
+ export declare function parseAssistantWorkflowSerializedDefinitionTuningSuggestion(value: unknown): AssistantWorkflowSerializedDefinitionTuningSuggestion | null;
56
+ export declare function parseAssistantWorkflowSerializedDefinitionTuningSuggestionLines(input: string): AssistantWorkflowSerializedDefinitionTuningSuggestionLinesParseResult;
57
+ export declare function parseAssistantWorkflowSerializedDefinitionTuningBatch(value: unknown): AssistantWorkflowSerializedDefinitionTuningBatch | null;
58
+ //# sourceMappingURL=definition-tuning-json.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition-tuning-json.d.ts","sourceRoot":"","sources":["../src/definition-tuning-json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,2CAA2C,EAC5C,MAAM,wBAAwB,CAAC;AAGhC,eAAO,MAAM,wDAAwD,IAAI,CAAC;AAE1E,MAAM,MAAM,qDAAqD,GAC/D,2CAA2C,GAAG;IAC5C,aAAa,EAAE,OAAO,wDAAwD,CAAC;CAChF,CAAC;AAEJ,MAAM,MAAM,oEAAoE,GAC5E,cAAc,GACd,sCAAsC,CAAC;AAE3C,MAAM,MAAM,8DAA8D,GAAG;IAC3E,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,oEAAoE,CAAC;IAC7E,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,qEAAqE,GAAG;IAClF,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,qDAAqD,EAAE,CAAC;IACrE,MAAM,EAAE,8DAA8D,EAAE,CAAC;CAC1E,CAAC;AAEF,MAAM,MAAM,iEAAiE,GAAG;IAC9E,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,uDAAuD,GAAG;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,qDAAqD,GAAG;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,uDAAuD,GAAG;IACpE,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,yBAAyB,EAAE,MAAM,CAAC;IAClC,yBAAyB,EAAE,MAAM,CAAC;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,qDAAqD,EAAE,CAAC;IACtE,cAAc,EAAE,qDAAqD,EAAE,CAAC;IACxE,eAAe,EAAE,qDAAqD,EAAE,CAAC;IACzE,YAAY,EAAE,qDAAqD,EAAE,CAAC;IACtE,UAAU,EAAE,qDAAqD,EAAE,CAAC;CACrE,CAAC;AAEF,MAAM,MAAM,gDAAgD,GAAG;IAC7D,aAAa,EAAE,OAAO,wDAAwD,CAAC;IAC/E,WAAW,EAAE,MAAM,CAAC;IACpB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,uDAAuD,CAAC;IACjE,WAAW,EAAE,qDAAqD,EAAE,CAAC;CACtE,CAAC;AAcF,wBAAgB,oDAAoD,CAClE,UAAU,EAAE,2CAA2C,GACtD,qDAAqD,CAgBvD;AAED,wBAAgB,yDAAyD,CACvE,WAAW,EAAE,SAAS,2CAA2C,EAAE,EACnE,OAAO,GAAE,iEAAsE,GAC9E,MAAM,CAKR;AAED,wBAAgB,mEAAmE,CACjF,WAAW,EAAE,SAAS,qDAAqD,EAAE,EAC7E,OAAO,GAAE,iEAAsE,GAC9E,MAAM,CAIR;AAED,wBAAgB,qDAAqD,CACnE,cAAc,EAAE,SAAS,qDAAqD,EAAE,EAChF,OAAO,GAAE,uDAA4D,GACpE,gDAAgD,CAelD;AAED,wBAAgB,0DAA0D,CACxE,KAAK,EAAE,OAAO,GACb,qDAAqD,GAAG,IAAI,CAgC9D;AAED,wBAAgB,+DAA+D,CAC7E,KAAK,EAAE,MAAM,GACZ,qEAAqE,CAsCvE;AAED,wBAAgB,qDAAqD,CACnE,KAAK,EAAE,OAAO,GACb,gDAAgD,GAAG,IAAI,CAuBzD"}
@@ -0,0 +1,276 @@
1
+ export const ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION = 1;
2
+ const ACTIONS = new Set([
3
+ "add_intent_tool_hint",
4
+ "add_direct_route_strategy",
5
+ "register_tool_capability",
6
+ "review_tool_selection_policy",
7
+ "review_clarification_rule",
8
+ "review_direct_route_strategy",
9
+ "debug_runtime_error",
10
+ "promote_eval_case",
11
+ "review_quality_signal",
12
+ ]);
13
+ export function serializeAssistantWorkflowDefinitionTuningSuggestion(suggestion) {
14
+ return {
15
+ schemaVersion: ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION,
16
+ id: suggestion.id,
17
+ action: suggestion.action,
18
+ severity: suggestion.severity,
19
+ intentId: suggestion.intentId,
20
+ toolName: suggestion.toolName,
21
+ signal: suggestion.signal,
22
+ count: suggestion.count,
23
+ requestIds: [...suggestion.requestIds],
24
+ sourceSuggestionIds: [...suggestion.sourceSuggestionIds],
25
+ rationale: suggestion.rationale,
26
+ suggestedAction: suggestion.suggestedAction,
27
+ patchPreview: clonePatchPreview(suggestion.patchPreview),
28
+ };
29
+ }
30
+ export function stringifyAssistantWorkflowDefinitionTuningSuggestionLines(suggestions, options = {}) {
31
+ return stringifyAssistantWorkflowSerializedDefinitionTuningSuggestionLines(suggestions.map(serializeAssistantWorkflowDefinitionTuningSuggestion), options);
32
+ }
33
+ export function stringifyAssistantWorkflowSerializedDefinitionTuningSuggestionLines(suggestions, options = {}) {
34
+ const lines = suggestions.map((suggestion) => JSON.stringify(suggestion));
35
+ if (!lines.length)
36
+ return "";
37
+ return options.trailingNewline === true ? `${lines.join("\n")}\n` : lines.join("\n");
38
+ }
39
+ export function buildAssistantWorkflowSerializedDefinitionTuningBatch(allSuggestions, options = {}) {
40
+ const suggestions = options.onlyApplicable === true
41
+ ? allSuggestions.filter(isApplicableSuggestion)
42
+ : [...allSuggestions];
43
+ const generatedAt = normalizeGeneratedAt(options.generatedAt) ?? new Date().toISOString();
44
+ const summary = buildBatchSummary(allSuggestions, suggestions, generatedAt);
45
+ return {
46
+ schemaVersion: ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION,
47
+ generatedAt,
48
+ sourceSuggestionCount: allSuggestions.length,
49
+ suggestionCount: suggestions.length,
50
+ summary,
51
+ suggestions,
52
+ };
53
+ }
54
+ export function parseAssistantWorkflowSerializedDefinitionTuningSuggestion(value) {
55
+ if (!isRecord(value))
56
+ return null;
57
+ if (value["schemaVersion"] !== ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION)
58
+ return null;
59
+ if (typeof value["id"] !== "string" || !value["id"].trim().length)
60
+ return null;
61
+ if (!isAction(value["action"]))
62
+ return null;
63
+ if (value["severity"] !== "info" && value["severity"] !== "warning")
64
+ return null;
65
+ if (!isNullableString(value["intentId"]))
66
+ return null;
67
+ if (!isNullableString(value["toolName"]))
68
+ return null;
69
+ if (!isNullableString(value["signal"]))
70
+ return null;
71
+ if (!isNonNegativeFiniteNumber(value["count"]))
72
+ return null;
73
+ if (!isStringArray(value["requestIds"]))
74
+ return null;
75
+ if (!isStringArray(value["sourceSuggestionIds"]))
76
+ return null;
77
+ if (typeof value["rationale"] !== "string")
78
+ return null;
79
+ if (typeof value["suggestedAction"] !== "string")
80
+ return null;
81
+ const patchPreview = parsePatchPreview(value["patchPreview"]);
82
+ if (!patchPreview)
83
+ return null;
84
+ return {
85
+ schemaVersion: ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION,
86
+ id: value["id"],
87
+ action: value["action"],
88
+ severity: value["severity"],
89
+ intentId: value["intentId"],
90
+ toolName: value["toolName"],
91
+ signal: value["signal"],
92
+ count: value["count"],
93
+ requestIds: value["requestIds"],
94
+ sourceSuggestionIds: value["sourceSuggestionIds"],
95
+ rationale: value["rationale"],
96
+ suggestedAction: value["suggestedAction"],
97
+ patchPreview,
98
+ };
99
+ }
100
+ export function parseAssistantWorkflowSerializedDefinitionTuningSuggestionLines(input) {
101
+ const suggestions = [];
102
+ const errors = [];
103
+ let lineCount = 0;
104
+ for (const [index, line] of input.split(/\r?\n/).entries()) {
105
+ const trimmed = line.trim();
106
+ if (!trimmed.length)
107
+ continue;
108
+ const lineNumber = index + 1;
109
+ lineCount += 1;
110
+ let parsed;
111
+ try {
112
+ parsed = JSON.parse(trimmed);
113
+ }
114
+ catch {
115
+ errors.push({ lineNumber, reason: "invalid_json", preview: previewLine(trimmed) });
116
+ continue;
117
+ }
118
+ const suggestion = parseAssistantWorkflowSerializedDefinitionTuningSuggestion(parsed);
119
+ if (!suggestion) {
120
+ errors.push({
121
+ lineNumber,
122
+ reason: "invalid_definition_tuning_suggestion",
123
+ preview: previewLine(trimmed),
124
+ });
125
+ continue;
126
+ }
127
+ suggestions.push(suggestion);
128
+ }
129
+ return {
130
+ lineCount,
131
+ suggestionCount: suggestions.length,
132
+ errorCount: errors.length,
133
+ suggestions,
134
+ errors,
135
+ };
136
+ }
137
+ export function parseAssistantWorkflowSerializedDefinitionTuningBatch(value) {
138
+ if (!isRecord(value))
139
+ return null;
140
+ if (value["schemaVersion"] !== ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION)
141
+ return null;
142
+ if (typeof value["generatedAt"] !== "string" || !value["generatedAt"].trim().length)
143
+ return null;
144
+ if (!isNonNegativeFiniteNumber(value["sourceSuggestionCount"]))
145
+ return null;
146
+ if (!isNonNegativeFiniteNumber(value["suggestionCount"]))
147
+ return null;
148
+ if (!isBatchSummary(value["summary"]))
149
+ return null;
150
+ if (!Array.isArray(value["suggestions"]))
151
+ return null;
152
+ const suggestions = value["suggestions"].map(parseAssistantWorkflowSerializedDefinitionTuningSuggestion);
153
+ if (suggestions.some((suggestion) => suggestion === null))
154
+ return null;
155
+ if (suggestions.length !== value["suggestionCount"])
156
+ return null;
157
+ return {
158
+ schemaVersion: ASSISTANT_WORKFLOW_DEFINITION_TUNING_JSON_SCHEMA_VERSION,
159
+ generatedAt: value["generatedAt"],
160
+ sourceSuggestionCount: value["sourceSuggestionCount"],
161
+ suggestionCount: value["suggestionCount"],
162
+ summary: value["summary"],
163
+ suggestions: suggestions.filter((suggestion) => suggestion !== null),
164
+ };
165
+ }
166
+ function buildBatchSummary(allSuggestions, suggestions, generatedAt) {
167
+ return {
168
+ generatedAt,
169
+ sourceSuggestionCount: allSuggestions.length,
170
+ suggestionCount: suggestions.length,
171
+ applicableSuggestionCount: suggestions.filter(isApplicableSuggestion).length,
172
+ reviewOnlySuggestionCount: suggestions.filter((suggestion) => suggestion.patchPreview.kind === "none").length,
173
+ warningCount: suggestions.filter((suggestion) => suggestion.severity === "warning").length,
174
+ actionCounts: buildStringCounts(suggestions.map((suggestion) => suggestion.action)),
175
+ severityCounts: buildStringCounts(suggestions.map((suggestion) => suggestion.severity)),
176
+ patchKindCounts: buildStringCounts(suggestions.map((suggestion) => suggestion.patchPreview.kind)),
177
+ intentCounts: buildStringCounts(suggestions.map((suggestion) => suggestion.intentId ?? "none")),
178
+ toolCounts: buildStringCounts(suggestions.map((suggestion) => suggestion.toolName ?? "none")),
179
+ };
180
+ }
181
+ function isApplicableSuggestion(suggestion) {
182
+ return suggestion.patchPreview.kind !== "none";
183
+ }
184
+ function clonePatchPreview(patchPreview) {
185
+ return { ...patchPreview };
186
+ }
187
+ function parsePatchPreview(value) {
188
+ if (!isRecord(value))
189
+ return null;
190
+ if (value["kind"] === "none")
191
+ return { kind: "none" };
192
+ if (value["kind"] === "register_tool_capability" && typeof value["toolName"] === "string") {
193
+ return { kind: "register_tool_capability", toolName: value["toolName"] };
194
+ }
195
+ if (value["kind"] === "append_intent_tool_hint" &&
196
+ typeof value["intentId"] === "string" &&
197
+ typeof value["toolName"] === "string") {
198
+ return {
199
+ kind: "append_intent_tool_hint",
200
+ intentId: value["intentId"],
201
+ toolName: value["toolName"],
202
+ };
203
+ }
204
+ if (value["kind"] === "append_direct_route_strategy" &&
205
+ typeof value["routeId"] === "string" &&
206
+ typeof value["strategyId"] === "string" &&
207
+ typeof value["description"] === "string") {
208
+ return {
209
+ kind: "append_direct_route_strategy",
210
+ routeId: value["routeId"],
211
+ strategyId: value["strategyId"],
212
+ description: value["description"],
213
+ };
214
+ }
215
+ return null;
216
+ }
217
+ function buildStringCounts(values) {
218
+ const counts = new Map();
219
+ for (const value of values) {
220
+ if (!value.length)
221
+ continue;
222
+ counts.set(value, (counts.get(value) ?? 0) + 1);
223
+ }
224
+ return [...counts.entries()]
225
+ .map(([key, count]) => ({ key, count }))
226
+ .sort((left, right) => {
227
+ if (right.count !== left.count)
228
+ return right.count - left.count;
229
+ return left.key.localeCompare(right.key);
230
+ });
231
+ }
232
+ function isBatchSummary(value) {
233
+ if (!isRecord(value))
234
+ return false;
235
+ return (typeof value["generatedAt"] === "string" &&
236
+ isNonNegativeFiniteNumber(value["sourceSuggestionCount"]) &&
237
+ isNonNegativeFiniteNumber(value["suggestionCount"]) &&
238
+ isNonNegativeFiniteNumber(value["applicableSuggestionCount"]) &&
239
+ isNonNegativeFiniteNumber(value["reviewOnlySuggestionCount"]) &&
240
+ isNonNegativeFiniteNumber(value["warningCount"]) &&
241
+ isCountArray(value["actionCounts"]) &&
242
+ isCountArray(value["severityCounts"]) &&
243
+ isCountArray(value["patchKindCounts"]) &&
244
+ isCountArray(value["intentCounts"]) &&
245
+ isCountArray(value["toolCounts"]));
246
+ }
247
+ function isCountArray(value) {
248
+ return Array.isArray(value) && value.every((item) => isRecord(item) &&
249
+ typeof item["key"] === "string" &&
250
+ isNonNegativeFiniteNumber(item["count"]));
251
+ }
252
+ function isAction(value) {
253
+ return typeof value === "string" && ACTIONS.has(value);
254
+ }
255
+ function isRecord(value) {
256
+ return value !== null && typeof value === "object" && !Array.isArray(value);
257
+ }
258
+ function isNullableString(value) {
259
+ return value === null || typeof value === "string";
260
+ }
261
+ function isStringArray(value) {
262
+ return Array.isArray(value) && value.every((item) => typeof item === "string");
263
+ }
264
+ function isNonNegativeFiniteNumber(value) {
265
+ return typeof value === "number" && Number.isFinite(value) && value >= 0;
266
+ }
267
+ function normalizeGeneratedAt(value) {
268
+ if (value === undefined)
269
+ return null;
270
+ const trimmed = value.trim();
271
+ return trimmed.length ? trimmed : null;
272
+ }
273
+ function previewLine(line) {
274
+ return line.length <= 120 ? line : `${line.slice(0, 117)}...`;
275
+ }
276
+ //# sourceMappingURL=definition-tuning-json.js.map