@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,187 @@
1
+ import { findAssistantWorkflowIntent, normalizeAssistantWorkflowId, } from "./definition.js";
2
+ import { applyAssistantWorkflowMemoryPatches, buildAssistantWorkflowMemoryPatchTracePayload, } from "./memory-updates.js";
3
+ export function findAssistantWorkflowMemorySlot(workflow, slotId) {
4
+ const normalized = normalizeAssistantWorkflowId(slotId);
5
+ if (!normalized)
6
+ return null;
7
+ return (workflow.memorySlots ?? []).find((slot) => slot.id === normalized) ?? null;
8
+ }
9
+ export function buildAssistantWorkflowMemoryPolicy(workflow, intentId) {
10
+ const intent = findAssistantWorkflowIntent(workflow, intentId);
11
+ const slotIds = new Set((workflow.memorySlots ?? []).map((slot) => slot.id));
12
+ const readSlots = filterMemorySlotIds(intent?.memoryPolicy?.read ?? [], slotIds);
13
+ const writeSlots = filterMemorySlotIds(intent?.memoryPolicy?.write ?? [], slotIds);
14
+ const injectSlots = filterMemorySlotIds(intent?.memoryPolicy?.inject ?? [], slotIds);
15
+ const missingMemorySlots = uniqueStrings([
16
+ ...missingMemorySlotIds(intent?.memoryPolicy?.read ?? [], slotIds),
17
+ ...missingMemorySlotIds(intent?.memoryPolicy?.write ?? [], slotIds),
18
+ ...missingMemorySlotIds(intent?.memoryPolicy?.inject ?? [], slotIds),
19
+ ]);
20
+ return {
21
+ readSlots,
22
+ writeSlots,
23
+ injectSlots,
24
+ missingMemorySlots,
25
+ operationsBySlot: buildOperationsBySlot({ readSlots, writeSlots, injectSlots }),
26
+ };
27
+ }
28
+ export function buildAssistantWorkflowMemoryInjectionPlan(input) {
29
+ const snapshot = input.snapshot ?? {};
30
+ const maxTotalChars = normalizePositiveInteger(input.maxTotalChars);
31
+ const entries = [];
32
+ const serializedValues = {};
33
+ const injectedSlots = [];
34
+ const missingSnapshotSlots = [];
35
+ const skippedSlots = [];
36
+ let totalChars = 0;
37
+ for (const slotId of input.policy.injectSlots) {
38
+ const slot = findAssistantWorkflowMemorySlot(input.workflow, slotId);
39
+ if (!slot)
40
+ continue;
41
+ if (!Object.prototype.hasOwnProperty.call(snapshot, slotId)) {
42
+ missingSnapshotSlots.push(slotId);
43
+ skippedSlots.push({ slotId, reason: "missing-value" });
44
+ continue;
45
+ }
46
+ const value = snapshot[slotId];
47
+ const serialized = serializeMemoryValue(value);
48
+ const slotMaxChars = normalizePositiveInteger(slot.maxChars);
49
+ const remainingTotalChars = maxTotalChars === null ? null : Math.max(0, maxTotalChars - totalChars);
50
+ if (remainingTotalChars === 0) {
51
+ skippedSlots.push({ slotId, reason: "total-char-budget-exceeded" });
52
+ continue;
53
+ }
54
+ const effectiveMaxChars = minPositiveInteger(slotMaxChars, remainingTotalChars);
55
+ const bounded = boundSerializedMemoryValue(serialized, effectiveMaxChars);
56
+ entries.push({
57
+ slotId,
58
+ storage: slot.storage,
59
+ profileField: slot.profileField ?? null,
60
+ value,
61
+ serializedValue: bounded.value,
62
+ charCount: bounded.value.length,
63
+ truncated: bounded.truncated,
64
+ maxChars: effectiveMaxChars,
65
+ });
66
+ serializedValues[slotId] = bounded.value;
67
+ injectedSlots.push(slotId);
68
+ totalChars += bounded.value.length;
69
+ }
70
+ return {
71
+ entries,
72
+ serializedValues,
73
+ injectedSlots,
74
+ missingSnapshotSlots,
75
+ skippedSlots,
76
+ totalChars,
77
+ };
78
+ }
79
+ export function buildAssistantWorkflowMemoryInjectionTracePayload(plan) {
80
+ return {
81
+ injectedSlots: plan.injectedSlots,
82
+ missingSnapshotSlots: plan.missingSnapshotSlots,
83
+ skippedSlots: plan.skippedSlots,
84
+ totalChars: plan.totalChars,
85
+ entries: plan.entries.map((entry) => ({
86
+ slotId: entry.slotId,
87
+ storage: entry.storage,
88
+ profileField: entry.profileField,
89
+ charCount: entry.charCount,
90
+ truncated: entry.truncated,
91
+ maxChars: entry.maxChars,
92
+ })),
93
+ };
94
+ }
95
+ export function applyAssistantWorkflowIntentMemoryPatches(input) {
96
+ const intentId = normalizeAssistantWorkflowId(input.intentId);
97
+ const policy = buildAssistantWorkflowMemoryPolicy(input.workflow, intentId);
98
+ const memoryResult = applyAssistantWorkflowMemoryPatches(input.snapshot, input.patches, input.workflow, { allowedSlotIds: policy.writeSlots });
99
+ return { intentId, policy, memoryResult };
100
+ }
101
+ export function buildAssistantWorkflowIntentMemoryPatchTracePayload(result) {
102
+ return {
103
+ intentId: result.intentId,
104
+ writeSlots: result.policy.writeSlots,
105
+ missingMemorySlots: result.policy.missingMemorySlots,
106
+ ...buildAssistantWorkflowMemoryPatchTracePayload(result.memoryResult),
107
+ };
108
+ }
109
+ function filterMemorySlotIds(rawSlots, availableSlots) {
110
+ const out = [];
111
+ const seen = new Set();
112
+ for (const rawSlot of rawSlots) {
113
+ const slot = normalizeAssistantWorkflowId(rawSlot);
114
+ if (!slot || seen.has(slot))
115
+ continue;
116
+ if (availableSlots.size > 0 && !availableSlots.has(slot))
117
+ continue;
118
+ seen.add(slot);
119
+ out.push(slot);
120
+ }
121
+ return out;
122
+ }
123
+ function serializeMemoryValue(value) {
124
+ if (typeof value === "string")
125
+ return value;
126
+ try {
127
+ return JSON.stringify(value) ?? String(value);
128
+ }
129
+ catch {
130
+ return String(value);
131
+ }
132
+ }
133
+ function boundSerializedMemoryValue(value, maxChars) {
134
+ if (maxChars === null || value.length <= maxChars) {
135
+ return { value, truncated: false };
136
+ }
137
+ return { value: value.slice(0, maxChars), truncated: true };
138
+ }
139
+ function normalizePositiveInteger(value) {
140
+ return typeof value === "number" && Number.isInteger(value) && value > 0 ? value : null;
141
+ }
142
+ function minPositiveInteger(left, right) {
143
+ if (left === null)
144
+ return right;
145
+ if (right === null)
146
+ return left;
147
+ return Math.min(left, right);
148
+ }
149
+ function missingMemorySlotIds(rawSlots, availableSlots) {
150
+ if (availableSlots.size === 0)
151
+ return [];
152
+ const out = [];
153
+ for (const rawSlot of rawSlots) {
154
+ const slot = normalizeAssistantWorkflowId(rawSlot);
155
+ if (slot && !availableSlots.has(slot))
156
+ out.push(slot);
157
+ }
158
+ return uniqueStrings(out);
159
+ }
160
+ function buildOperationsBySlot(policy) {
161
+ const out = {};
162
+ for (const slot of policy.readSlots)
163
+ addOperation(out, slot, "read");
164
+ for (const slot of policy.writeSlots)
165
+ addOperation(out, slot, "write");
166
+ for (const slot of policy.injectSlots)
167
+ addOperation(out, slot, "inject");
168
+ return out;
169
+ }
170
+ function addOperation(target, slot, operation) {
171
+ const current = target[slot] ?? [];
172
+ if (!current.includes(operation)) {
173
+ target[slot] = [...current, operation];
174
+ }
175
+ }
176
+ function uniqueStrings(values) {
177
+ const out = [];
178
+ const seen = new Set();
179
+ for (const value of values) {
180
+ if (seen.has(value))
181
+ continue;
182
+ seen.add(value);
183
+ out.push(value);
184
+ }
185
+ return out;
186
+ }
187
+ //# sourceMappingURL=memory-policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-policy.js","sourceRoot":"","sources":["../src/memory-policy.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n findAssistantWorkflowIntent,\n normalizeAssistantWorkflowId,\n type AssistantWorkflowDefinition,\n type AssistantWorkflowMemoryOperation,\n type AssistantWorkflowMemorySlotDefinition,\n} from \"./definition.js\";\nimport {\n applyAssistantWorkflowMemoryPatches,\n buildAssistantWorkflowMemoryPatchTracePayload,\n type AssistantWorkflowMemoryPatch,\n type AssistantWorkflowMemoryPatchResult,\n type AssistantWorkflowMemorySnapshot,\n type AssistantWorkflowMemoryValue,\n} from \"./memory-updates.js\";\n\nexport type AssistantWorkflowResolvedMemoryPolicy = {\n readSlots: string[];\n writeSlots: string[];\n injectSlots: string[];\n missingMemorySlots: string[];\n operationsBySlot: Record<string, AssistantWorkflowMemoryOperation[]>;\n};\n\nexport type AssistantWorkflowMemoryInjectionEntry = {\n slotId: string;\n storage: string;\n profileField: string | null;\n value: AssistantWorkflowMemoryValue;\n serializedValue: string;\n charCount: number;\n truncated: boolean;\n maxChars: number | null;\n};\n\nexport type AssistantWorkflowSkippedMemoryInjection = {\n slotId: string;\n reason: \"missing-value\" | \"total-char-budget-exceeded\";\n};\n\nexport type AssistantWorkflowMemoryInjectionPlan = {\n entries: AssistantWorkflowMemoryInjectionEntry[];\n serializedValues: Record<string, string>;\n injectedSlots: string[];\n missingSnapshotSlots: string[];\n skippedSlots: AssistantWorkflowSkippedMemoryInjection[];\n totalChars: number;\n};\n\nexport type AssistantWorkflowMemoryInjectionPlanInput = {\n workflow: AssistantWorkflowDefinition<string, string, string, string>;\n policy: AssistantWorkflowResolvedMemoryPolicy;\n snapshot?: AssistantWorkflowMemorySnapshot | null;\n maxTotalChars?: number;\n};\n\nexport type AssistantWorkflowIntentMemoryPatchInput = {\n workflow: AssistantWorkflowDefinition<string, string, string, string>;\n intentId: unknown;\n snapshot?: AssistantWorkflowMemorySnapshot | null;\n patches: readonly AssistantWorkflowMemoryPatch[];\n};\n\nexport type AssistantWorkflowIntentMemoryPatchResult = {\n intentId: string | null;\n policy: AssistantWorkflowResolvedMemoryPolicy;\n memoryResult: AssistantWorkflowMemoryPatchResult;\n};\n\nexport function findAssistantWorkflowMemorySlot(\n workflow: AssistantWorkflowDefinition<string, string, string, string>,\n slotId: unknown,\n): AssistantWorkflowMemorySlotDefinition | null {\n const normalized = normalizeAssistantWorkflowId(slotId);\n if (!normalized) return null;\n return (workflow.memorySlots ?? []).find((slot) => slot.id === normalized) ?? null;\n}\n\nexport function buildAssistantWorkflowMemoryPolicy(\n workflow: AssistantWorkflowDefinition<string, string, string, string>,\n intentId: unknown,\n): AssistantWorkflowResolvedMemoryPolicy {\n const intent = findAssistantWorkflowIntent(workflow, intentId);\n const slotIds = new Set((workflow.memorySlots ?? []).map((slot) => slot.id));\n const readSlots = filterMemorySlotIds(intent?.memoryPolicy?.read ?? [], slotIds);\n const writeSlots = filterMemorySlotIds(intent?.memoryPolicy?.write ?? [], slotIds);\n const injectSlots = filterMemorySlotIds(intent?.memoryPolicy?.inject ?? [], slotIds);\n const missingMemorySlots = uniqueStrings([\n ...missingMemorySlotIds(intent?.memoryPolicy?.read ?? [], slotIds),\n ...missingMemorySlotIds(intent?.memoryPolicy?.write ?? [], slotIds),\n ...missingMemorySlotIds(intent?.memoryPolicy?.inject ?? [], slotIds),\n ]);\n\n return {\n readSlots,\n writeSlots,\n injectSlots,\n missingMemorySlots,\n operationsBySlot: buildOperationsBySlot({ readSlots, writeSlots, injectSlots }),\n };\n}\n\nexport function buildAssistantWorkflowMemoryInjectionPlan(\n input: AssistantWorkflowMemoryInjectionPlanInput,\n): AssistantWorkflowMemoryInjectionPlan {\n const snapshot = input.snapshot ?? {};\n const maxTotalChars = normalizePositiveInteger(input.maxTotalChars);\n const entries: AssistantWorkflowMemoryInjectionEntry[] = [];\n const serializedValues: Record<string, string> = {};\n const injectedSlots: string[] = [];\n const missingSnapshotSlots: string[] = [];\n const skippedSlots: AssistantWorkflowSkippedMemoryInjection[] = [];\n let totalChars = 0;\n\n for (const slotId of input.policy.injectSlots) {\n const slot = findAssistantWorkflowMemorySlot(input.workflow, slotId);\n if (!slot) continue;\n if (!Object.prototype.hasOwnProperty.call(snapshot, slotId)) {\n missingSnapshotSlots.push(slotId);\n skippedSlots.push({ slotId, reason: \"missing-value\" });\n continue;\n }\n const value = snapshot[slotId] as AssistantWorkflowMemoryValue;\n const serialized = serializeMemoryValue(value);\n const slotMaxChars = normalizePositiveInteger(slot.maxChars);\n const remainingTotalChars = maxTotalChars === null ? null : Math.max(0, maxTotalChars - totalChars);\n if (remainingTotalChars === 0) {\n skippedSlots.push({ slotId, reason: \"total-char-budget-exceeded\" });\n continue;\n }\n const effectiveMaxChars = minPositiveInteger(slotMaxChars, remainingTotalChars);\n const bounded = boundSerializedMemoryValue(serialized, effectiveMaxChars);\n entries.push({\n slotId,\n storage: slot.storage,\n profileField: slot.profileField ?? null,\n value,\n serializedValue: bounded.value,\n charCount: bounded.value.length,\n truncated: bounded.truncated,\n maxChars: effectiveMaxChars,\n });\n serializedValues[slotId] = bounded.value;\n injectedSlots.push(slotId);\n totalChars += bounded.value.length;\n }\n\n return {\n entries,\n serializedValues,\n injectedSlots,\n missingSnapshotSlots,\n skippedSlots,\n totalChars,\n };\n}\n\nexport function buildAssistantWorkflowMemoryInjectionTracePayload(\n plan: AssistantWorkflowMemoryInjectionPlan,\n): Record<string, unknown> {\n return {\n injectedSlots: plan.injectedSlots,\n missingSnapshotSlots: plan.missingSnapshotSlots,\n skippedSlots: plan.skippedSlots,\n totalChars: plan.totalChars,\n entries: plan.entries.map((entry) => ({\n slotId: entry.slotId,\n storage: entry.storage,\n profileField: entry.profileField,\n charCount: entry.charCount,\n truncated: entry.truncated,\n maxChars: entry.maxChars,\n })),\n };\n}\n\nexport function applyAssistantWorkflowIntentMemoryPatches(\n input: AssistantWorkflowIntentMemoryPatchInput,\n): AssistantWorkflowIntentMemoryPatchResult {\n const intentId = normalizeAssistantWorkflowId(input.intentId);\n const policy = buildAssistantWorkflowMemoryPolicy(input.workflow, intentId);\n const memoryResult = applyAssistantWorkflowMemoryPatches(\n input.snapshot,\n input.patches,\n input.workflow,\n { allowedSlotIds: policy.writeSlots },\n );\n return { intentId, policy, memoryResult };\n}\n\nexport function buildAssistantWorkflowIntentMemoryPatchTracePayload(\n result: AssistantWorkflowIntentMemoryPatchResult,\n): Record<string, unknown> {\n return {\n intentId: result.intentId,\n writeSlots: result.policy.writeSlots,\n missingMemorySlots: result.policy.missingMemorySlots,\n ...buildAssistantWorkflowMemoryPatchTracePayload(result.memoryResult),\n };\n}\n\nfunction filterMemorySlotIds(rawSlots: readonly string[], availableSlots: ReadonlySet<string>): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n for (const rawSlot of rawSlots) {\n const slot = normalizeAssistantWorkflowId(rawSlot);\n if (!slot || seen.has(slot)) continue;\n if (availableSlots.size > 0 && !availableSlots.has(slot)) continue;\n seen.add(slot);\n out.push(slot);\n }\n return out;\n}\n\nfunction serializeMemoryValue(value: AssistantWorkflowMemoryValue): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n}\n\nfunction boundSerializedMemoryValue(value: string, maxChars: number | null): { value: string; truncated: boolean } {\n if (maxChars === null || value.length <= maxChars) {\n return { value, truncated: false };\n }\n return { value: value.slice(0, maxChars), truncated: true };\n}\n\nfunction normalizePositiveInteger(value: number | undefined): number | null {\n return typeof value === \"number\" && Number.isInteger(value) && value > 0 ? value : null;\n}\n\nfunction minPositiveInteger(left: number | null, right: number | null): number | null {\n if (left === null) return right;\n if (right === null) return left;\n return Math.min(left, right);\n}\n\nfunction missingMemorySlotIds(rawSlots: readonly string[], availableSlots: ReadonlySet<string>): string[] {\n if (availableSlots.size === 0) return [];\n const out: string[] = [];\n for (const rawSlot of rawSlots) {\n const slot = normalizeAssistantWorkflowId(rawSlot);\n if (slot && !availableSlots.has(slot)) out.push(slot);\n }\n return uniqueStrings(out);\n}\n\nfunction buildOperationsBySlot(policy: {\n readSlots: readonly string[];\n writeSlots: readonly string[];\n injectSlots: readonly string[];\n}): Record<string, AssistantWorkflowMemoryOperation[]> {\n const out: Record<string, AssistantWorkflowMemoryOperation[]> = {};\n for (const slot of policy.readSlots) addOperation(out, slot, \"read\");\n for (const slot of policy.writeSlots) addOperation(out, slot, \"write\");\n for (const slot of policy.injectSlots) addOperation(out, slot, \"inject\");\n return out;\n}\n\nfunction addOperation(\n target: Record<string, AssistantWorkflowMemoryOperation[]>,\n slot: string,\n operation: AssistantWorkflowMemoryOperation,\n): void {\n const current = target[slot] ?? [];\n if (!current.includes(operation)) {\n target[slot] = [...current, operation];\n }\n}\n\nfunction uniqueStrings(values: readonly string[]): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n for (const value of values) {\n if (seen.has(value)) continue;\n seen.add(value);\n out.push(value);\n }\n return out;\n}\n"]}
@@ -0,0 +1,39 @@
1
+ import { type AssistantWorkflowDefinition } from "./definition.js";
2
+ export type AssistantWorkflowMemoryValue = null | string | number | boolean | readonly AssistantWorkflowMemoryValue[] | {
3
+ readonly [key: string]: AssistantWorkflowMemoryValue;
4
+ };
5
+ export type AssistantWorkflowMemorySnapshot = Record<string, AssistantWorkflowMemoryValue>;
6
+ export type AssistantWorkflowMemoryPatchOperation = "set" | "append" | "clear";
7
+ export type AssistantWorkflowMemoryPatchSource = "planner" | "tool" | "runtime" | "user" | "system";
8
+ export type AssistantWorkflowMemoryPatch = {
9
+ slotId: string;
10
+ operation: AssistantWorkflowMemoryPatchOperation;
11
+ value?: AssistantWorkflowMemoryValue;
12
+ source?: AssistantWorkflowMemoryPatchSource;
13
+ reason?: string;
14
+ maxItems?: number;
15
+ };
16
+ export type AssistantWorkflowAppliedMemoryPatch = {
17
+ slotId: string;
18
+ operation: AssistantWorkflowMemoryPatchOperation;
19
+ changed: boolean;
20
+ };
21
+ export type AssistantWorkflowSkippedMemoryPatchReason = "invalid-slot" | "unknown-slot" | "missing-value" | "write-not-allowed";
22
+ export type AssistantWorkflowSkippedMemoryPatch = {
23
+ slotId: string | null;
24
+ operation: AssistantWorkflowMemoryPatchOperation | null;
25
+ reason: AssistantWorkflowSkippedMemoryPatchReason;
26
+ };
27
+ export type AssistantWorkflowMemoryPatchResult = {
28
+ snapshot: AssistantWorkflowMemorySnapshot;
29
+ appliedPatches: AssistantWorkflowAppliedMemoryPatch[];
30
+ skippedPatches: AssistantWorkflowSkippedMemoryPatch[];
31
+ changedSlots: string[];
32
+ };
33
+ export type AssistantWorkflowMemoryPatchApplyOptions = {
34
+ allowedSlotIds?: readonly string[] | null;
35
+ };
36
+ export declare function buildAssistantWorkflowMemoryPatch(slotId: string, operation: AssistantWorkflowMemoryPatchOperation, options?: Omit<AssistantWorkflowMemoryPatch, "slotId" | "operation">): AssistantWorkflowMemoryPatch;
37
+ export declare function applyAssistantWorkflowMemoryPatches(snapshot: AssistantWorkflowMemorySnapshot | null | undefined, patches: readonly AssistantWorkflowMemoryPatch[], workflow?: AssistantWorkflowDefinition<string, string, string, string>, options?: AssistantWorkflowMemoryPatchApplyOptions): AssistantWorkflowMemoryPatchResult;
38
+ export declare function buildAssistantWorkflowMemoryPatchTracePayload(result: AssistantWorkflowMemoryPatchResult): Record<string, unknown>;
39
+ //# sourceMappingURL=memory-updates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-updates.d.ts","sourceRoot":"","sources":["../src/memory-updates.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,4BAA4B,GACpC,IAAI,GACJ,MAAM,GACN,MAAM,GACN,OAAO,GACP,SAAS,4BAA4B,EAAE,GACvC;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,4BAA4B,CAAA;CAAE,CAAC;AAE7D,MAAM,MAAM,+BAA+B,GAAG,MAAM,CAAC,MAAM,EAAE,4BAA4B,CAAC,CAAC;AAE3F,MAAM,MAAM,qCAAqC,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/E,MAAM,MAAM,kCAAkC,GAC1C,SAAS,GACT,MAAM,GACN,SAAS,GACT,MAAM,GACN,QAAQ,CAAC;AAEb,MAAM,MAAM,4BAA4B,GAAG;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,qCAAqC,CAAC;IACjD,KAAK,CAAC,EAAE,4BAA4B,CAAC;IACrC,MAAM,CAAC,EAAE,kCAAkC,CAAC;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,qCAAqC,CAAC;IACjD,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,yCAAyC,GACjD,cAAc,GACd,cAAc,GACd,eAAe,GACf,mBAAmB,CAAC;AAExB,MAAM,MAAM,mCAAmC,GAAG;IAChD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,qCAAqC,GAAG,IAAI,CAAC;IACxD,MAAM,EAAE,yCAAyC,CAAC;CACnD,CAAC;AAEF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,QAAQ,EAAE,+BAA+B,CAAC;IAC1C,cAAc,EAAE,mCAAmC,EAAE,CAAC;IACtD,cAAc,EAAE,mCAAmC,EAAE,CAAC;IACtD,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,wCAAwC,GAAG;IACrD,cAAc,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;CAC3C,CAAC;AAEF,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,qCAAqC,EAChD,OAAO,GAAE,IAAI,CAAC,4BAA4B,EAAE,QAAQ,GAAG,WAAW,CAAM,GACvE,4BAA4B,CAa9B;AAED,wBAAgB,mCAAmC,CACjD,QAAQ,EAAE,+BAA+B,GAAG,IAAI,GAAG,SAAS,EAC5D,OAAO,EAAE,SAAS,4BAA4B,EAAE,EAChD,QAAQ,CAAC,EAAE,2BAA2B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EACtE,OAAO,GAAE,wCAA6C,GACrD,kCAAkC,CA8CpC;AAED,wBAAgB,6CAA6C,CAC3D,MAAM,EAAE,kCAAkC,GACzC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQzB"}
@@ -0,0 +1,110 @@
1
+ import { normalizeAssistantWorkflowId, } from "./definition.js";
2
+ export function buildAssistantWorkflowMemoryPatch(slotId, operation, options = {}) {
3
+ const normalizedSlotId = normalizeAssistantWorkflowId(slotId);
4
+ if (!normalizedSlotId) {
5
+ throw new Error("Assistant workflow memory patch slotId is required.");
6
+ }
7
+ if ((operation === "set" || operation === "append") && !("value" in options)) {
8
+ throw new Error(`Assistant workflow memory patch ${operation} requires a value.`);
9
+ }
10
+ return {
11
+ slotId: normalizedSlotId,
12
+ operation,
13
+ ...options,
14
+ };
15
+ }
16
+ export function applyAssistantWorkflowMemoryPatches(snapshot, patches, workflow, options = {}) {
17
+ let next = { ...(snapshot ?? {}) };
18
+ const appliedPatches = [];
19
+ const skippedPatches = [];
20
+ const changedSlots = [];
21
+ const knownSlots = workflow ? new Set((workflow.memorySlots ?? []).map((slot) => slot.id)) : null;
22
+ const allowedSlots = normalizeAllowedSlotIds(options.allowedSlotIds);
23
+ for (const patch of patches) {
24
+ const slotId = normalizeAssistantWorkflowId(patch.slotId);
25
+ if (!slotId) {
26
+ skippedPatches.push({
27
+ slotId: null,
28
+ operation: patch.operation ?? null,
29
+ reason: "invalid-slot",
30
+ });
31
+ continue;
32
+ }
33
+ if (knownSlots && knownSlots.size > 0 && !knownSlots.has(slotId)) {
34
+ skippedPatches.push({ slotId, operation: patch.operation, reason: "unknown-slot" });
35
+ continue;
36
+ }
37
+ if (allowedSlots && !allowedSlots.has(slotId)) {
38
+ skippedPatches.push({ slotId, operation: patch.operation, reason: "write-not-allowed" });
39
+ continue;
40
+ }
41
+ if ((patch.operation === "set" || patch.operation === "append") && !("value" in patch)) {
42
+ skippedPatches.push({ slotId, operation: patch.operation, reason: "missing-value" });
43
+ continue;
44
+ }
45
+ const before = next[slotId];
46
+ next = applyMemoryPatch(next, slotId, patch);
47
+ const changed = !memoryValuesEqual(before, next[slotId]);
48
+ appliedPatches.push({ slotId, operation: patch.operation, changed });
49
+ if (changed && !changedSlots.includes(slotId)) {
50
+ changedSlots.push(slotId);
51
+ }
52
+ }
53
+ return {
54
+ snapshot: next,
55
+ appliedPatches,
56
+ skippedPatches,
57
+ changedSlots,
58
+ };
59
+ }
60
+ export function buildAssistantWorkflowMemoryPatchTracePayload(result) {
61
+ return {
62
+ changedSlots: result.changedSlots,
63
+ appliedPatchCount: result.appliedPatches.length,
64
+ skippedPatchCount: result.skippedPatches.length,
65
+ appliedPatches: result.appliedPatches,
66
+ skippedPatches: result.skippedPatches,
67
+ };
68
+ }
69
+ function applyMemoryPatch(snapshot, slotId, patch) {
70
+ switch (patch.operation) {
71
+ case "set":
72
+ return { ...snapshot, [slotId]: patch.value };
73
+ case "append":
74
+ return {
75
+ ...snapshot,
76
+ [slotId]: appendMemoryValue(snapshot[slotId], patch.value, patch.maxItems),
77
+ };
78
+ case "clear": {
79
+ const { [slotId]: _removed, ...rest } = snapshot;
80
+ return rest;
81
+ }
82
+ }
83
+ }
84
+ function appendMemoryValue(existing, value, maxItems) {
85
+ const current = Array.isArray(existing)
86
+ ? [...existing]
87
+ : existing === undefined || existing === null
88
+ ? []
89
+ : [existing];
90
+ const next = [...current, value];
91
+ if (typeof maxItems === "number" && Number.isInteger(maxItems) && maxItems > 0) {
92
+ return next.slice(-maxItems);
93
+ }
94
+ return next;
95
+ }
96
+ function memoryValuesEqual(left, right) {
97
+ return JSON.stringify(left ?? null) === JSON.stringify(right ?? null);
98
+ }
99
+ function normalizeAllowedSlotIds(value) {
100
+ if (value === null || value === undefined)
101
+ return null;
102
+ const allowed = new Set();
103
+ for (const rawSlotId of value) {
104
+ const slotId = normalizeAssistantWorkflowId(rawSlotId);
105
+ if (slotId)
106
+ allowed.add(slotId);
107
+ }
108
+ return allowed;
109
+ }
110
+ //# sourceMappingURL=memory-updates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-updates.js","sourceRoot":"","sources":["../src/memory-updates.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n normalizeAssistantWorkflowId,\n type AssistantWorkflowDefinition,\n} from \"./definition.js\";\n\nexport type AssistantWorkflowMemoryValue =\n | null\n | string\n | number\n | boolean\n | readonly AssistantWorkflowMemoryValue[]\n | { readonly [key: string]: AssistantWorkflowMemoryValue };\n\nexport type AssistantWorkflowMemorySnapshot = Record<string, AssistantWorkflowMemoryValue>;\n\nexport type AssistantWorkflowMemoryPatchOperation = \"set\" | \"append\" | \"clear\";\n\nexport type AssistantWorkflowMemoryPatchSource =\n | \"planner\"\n | \"tool\"\n | \"runtime\"\n | \"user\"\n | \"system\";\n\nexport type AssistantWorkflowMemoryPatch = {\n slotId: string;\n operation: AssistantWorkflowMemoryPatchOperation;\n value?: AssistantWorkflowMemoryValue;\n source?: AssistantWorkflowMemoryPatchSource;\n reason?: string;\n maxItems?: number;\n};\n\nexport type AssistantWorkflowAppliedMemoryPatch = {\n slotId: string;\n operation: AssistantWorkflowMemoryPatchOperation;\n changed: boolean;\n};\n\nexport type AssistantWorkflowSkippedMemoryPatchReason =\n | \"invalid-slot\"\n | \"unknown-slot\"\n | \"missing-value\"\n | \"write-not-allowed\";\n\nexport type AssistantWorkflowSkippedMemoryPatch = {\n slotId: string | null;\n operation: AssistantWorkflowMemoryPatchOperation | null;\n reason: AssistantWorkflowSkippedMemoryPatchReason;\n};\n\nexport type AssistantWorkflowMemoryPatchResult = {\n snapshot: AssistantWorkflowMemorySnapshot;\n appliedPatches: AssistantWorkflowAppliedMemoryPatch[];\n skippedPatches: AssistantWorkflowSkippedMemoryPatch[];\n changedSlots: string[];\n};\n\nexport type AssistantWorkflowMemoryPatchApplyOptions = {\n allowedSlotIds?: readonly string[] | null;\n};\n\nexport function buildAssistantWorkflowMemoryPatch(\n slotId: string,\n operation: AssistantWorkflowMemoryPatchOperation,\n options: Omit<AssistantWorkflowMemoryPatch, \"slotId\" | \"operation\"> = {},\n): AssistantWorkflowMemoryPatch {\n const normalizedSlotId = normalizeAssistantWorkflowId(slotId);\n if (!normalizedSlotId) {\n throw new Error(\"Assistant workflow memory patch slotId is required.\");\n }\n if ((operation === \"set\" || operation === \"append\") && !(\"value\" in options)) {\n throw new Error(`Assistant workflow memory patch ${operation} requires a value.`);\n }\n return {\n slotId: normalizedSlotId,\n operation,\n ...options,\n };\n}\n\nexport function applyAssistantWorkflowMemoryPatches(\n snapshot: AssistantWorkflowMemorySnapshot | null | undefined,\n patches: readonly AssistantWorkflowMemoryPatch[],\n workflow?: AssistantWorkflowDefinition<string, string, string, string>,\n options: AssistantWorkflowMemoryPatchApplyOptions = {},\n): AssistantWorkflowMemoryPatchResult {\n let next: AssistantWorkflowMemorySnapshot = { ...(snapshot ?? {}) };\n const appliedPatches: AssistantWorkflowAppliedMemoryPatch[] = [];\n const skippedPatches: AssistantWorkflowSkippedMemoryPatch[] = [];\n const changedSlots: string[] = [];\n const knownSlots = workflow ? new Set((workflow.memorySlots ?? []).map((slot) => slot.id)) : null;\n const allowedSlots = normalizeAllowedSlotIds(options.allowedSlotIds);\n\n for (const patch of patches) {\n const slotId = normalizeAssistantWorkflowId(patch.slotId);\n if (!slotId) {\n skippedPatches.push({\n slotId: null,\n operation: patch.operation ?? null,\n reason: \"invalid-slot\",\n });\n continue;\n }\n if (knownSlots && knownSlots.size > 0 && !knownSlots.has(slotId)) {\n skippedPatches.push({ slotId, operation: patch.operation, reason: \"unknown-slot\" });\n continue;\n }\n if (allowedSlots && !allowedSlots.has(slotId)) {\n skippedPatches.push({ slotId, operation: patch.operation, reason: \"write-not-allowed\" });\n continue;\n }\n if ((patch.operation === \"set\" || patch.operation === \"append\") && !(\"value\" in patch)) {\n skippedPatches.push({ slotId, operation: patch.operation, reason: \"missing-value\" });\n continue;\n }\n\n const before = next[slotId];\n next = applyMemoryPatch(next, slotId, patch);\n const changed = !memoryValuesEqual(before, next[slotId]);\n appliedPatches.push({ slotId, operation: patch.operation, changed });\n if (changed && !changedSlots.includes(slotId)) {\n changedSlots.push(slotId);\n }\n }\n\n return {\n snapshot: next,\n appliedPatches,\n skippedPatches,\n changedSlots,\n };\n}\n\nexport function buildAssistantWorkflowMemoryPatchTracePayload(\n result: AssistantWorkflowMemoryPatchResult,\n): Record<string, unknown> {\n return {\n changedSlots: result.changedSlots,\n appliedPatchCount: result.appliedPatches.length,\n skippedPatchCount: result.skippedPatches.length,\n appliedPatches: result.appliedPatches,\n skippedPatches: result.skippedPatches,\n };\n}\n\nfunction applyMemoryPatch(\n snapshot: AssistantWorkflowMemorySnapshot,\n slotId: string,\n patch: AssistantWorkflowMemoryPatch,\n): AssistantWorkflowMemorySnapshot {\n switch (patch.operation) {\n case \"set\":\n return { ...snapshot, [slotId]: patch.value as AssistantWorkflowMemoryValue };\n case \"append\":\n return {\n ...snapshot,\n [slotId]: appendMemoryValue(snapshot[slotId], patch.value as AssistantWorkflowMemoryValue, patch.maxItems),\n };\n case \"clear\": {\n const { [slotId]: _removed, ...rest } = snapshot;\n return rest;\n }\n }\n}\n\nfunction appendMemoryValue(\n existing: AssistantWorkflowMemoryValue | undefined,\n value: AssistantWorkflowMemoryValue,\n maxItems: number | undefined,\n): AssistantWorkflowMemoryValue[] {\n const current = Array.isArray(existing)\n ? [...existing]\n : existing === undefined || existing === null\n ? []\n : [existing];\n const next = [...current, value];\n if (typeof maxItems === \"number\" && Number.isInteger(maxItems) && maxItems > 0) {\n return next.slice(-maxItems);\n }\n return next;\n}\n\nfunction memoryValuesEqual(\n left: AssistantWorkflowMemoryValue | undefined,\n right: AssistantWorkflowMemoryValue | undefined,\n): boolean {\n return JSON.stringify(left ?? null) === JSON.stringify(right ?? null);\n}\n\nfunction normalizeAllowedSlotIds(value: readonly string[] | null | undefined): Set<string> | null {\n if (value === null || value === undefined) return null;\n const allowed = new Set<string>();\n for (const rawSlotId of value) {\n const slotId = normalizeAssistantWorkflowId(rawSlotId);\n if (slotId) allowed.add(slotId);\n }\n return allowed;\n}\n"]}
@@ -0,0 +1,79 @@
1
+ import { type AssistantWorkflowDirectRouteOutcomeRouteSource, type AssistantWorkflowOutcome, type AssistantWorkflowOutcomeDelivery } from "./outcome.js";
2
+ export type AssistantWorkflowFinalTextOutcomeTraceInput = {
3
+ content: string;
4
+ delivery?: AssistantWorkflowOutcomeDelivery;
5
+ source?: string;
6
+ layer?: string;
7
+ mode?: string;
8
+ streamed?: boolean;
9
+ };
10
+ export type AssistantWorkflowStructuredArtifactOutcomeTraceInput = {
11
+ content: string;
12
+ artifactKind: string;
13
+ source?: string;
14
+ layer?: string;
15
+ mode?: string;
16
+ submode?: string;
17
+ tool?: string;
18
+ streamed?: boolean;
19
+ };
20
+ export type AssistantWorkflowUnavailableOutcomeTraceInput = {
21
+ artifactKind: string;
22
+ reason: string;
23
+ /** Artifact kinds that cannot be produced because this prerequisite is unavailable. */
24
+ blockedArtifactKinds?: readonly string[];
25
+ content?: string;
26
+ source?: string;
27
+ layer?: string;
28
+ mode?: string;
29
+ tool?: string;
30
+ };
31
+ export type AssistantWorkflowClarificationOutcomeTraceInput = {
32
+ content: string;
33
+ ruleId?: string;
34
+ source?: string;
35
+ layer?: string;
36
+ mode?: string;
37
+ streamed?: boolean;
38
+ };
39
+ export type AssistantWorkflowDegradedOutcomeTraceInput = {
40
+ content: string;
41
+ reason: string;
42
+ source?: string;
43
+ layer?: string;
44
+ mode?: string;
45
+ hasToolResults?: boolean;
46
+ toolCount?: number;
47
+ structuredBlockKinds?: string[];
48
+ streamed?: boolean;
49
+ };
50
+ /**
51
+ * The host's minimal direct-route identity. The core deliberately accepts
52
+ * legacy trace metadata so applications can migrate outcome reporting before
53
+ * their route registry is fully workflow-authored.
54
+ */
55
+ export type AssistantWorkflowDirectRouteOutcomeTraceEntry = {
56
+ layer: string;
57
+ skipEvent?: string | null;
58
+ traceRoute?: string | null;
59
+ workflowInvocation?: AssistantWorkflowDirectRouteOutcomeRouteSource | null;
60
+ };
61
+ export type AssistantWorkflowDirectRouteOutcomeInput = {
62
+ handled: boolean;
63
+ content?: string;
64
+ artifactKind?: string;
65
+ payload?: unknown;
66
+ reason?: string;
67
+ delivery?: AssistantWorkflowOutcomeDelivery;
68
+ };
69
+ export declare function buildAssistantWorkflowFinalTextOutcomeTracePayload(input: AssistantWorkflowFinalTextOutcomeTraceInput): Record<string, unknown>;
70
+ export declare function buildAssistantWorkflowStructuredArtifactOutcomeTracePayload(input: AssistantWorkflowStructuredArtifactOutcomeTraceInput): Record<string, unknown>;
71
+ export declare function buildAssistantWorkflowUnavailableOutcomeTracePayload(input: AssistantWorkflowUnavailableOutcomeTraceInput): Record<string, unknown>;
72
+ export declare function buildAssistantWorkflowClarificationOutcomeTracePayload(input: AssistantWorkflowClarificationOutcomeTraceInput): Record<string, unknown>;
73
+ export declare function buildAssistantWorkflowDegradedOutcomeTracePayload(input: AssistantWorkflowDegradedOutcomeTraceInput): Record<string, unknown>;
74
+ export declare function getAssistantWorkflowDirectRouteOutcomeTraceRoute(entry: AssistantWorkflowDirectRouteOutcomeTraceEntry): string;
75
+ export declare function buildAssistantWorkflowDirectRouteOutcome(entry: AssistantWorkflowDirectRouteOutcomeTraceEntry, input: AssistantWorkflowDirectRouteOutcomeInput): AssistantWorkflowOutcome;
76
+ export declare function buildAssistantWorkflowDirectRouteOutcomeTracePayload(entry: AssistantWorkflowDirectRouteOutcomeTraceEntry, input: AssistantWorkflowDirectRouteOutcomeInput & {
77
+ source?: string;
78
+ }): Record<string, unknown>;
79
+ //# sourceMappingURL=outcome-trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcome-trace.d.ts","sourceRoot":"","sources":["../src/outcome-trace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ import { assistantWorkflowDirectRouteFromInvocation, assistantWorkflowDirectRouteNotHandledFromInvocation, assistantWorkflowClarification, assistantWorkflowDegraded, assistantWorkflowFinalText, assistantWorkflowStructuredArtifact, assistantWorkflowUnavailable, buildAssistantWorkflowOutcomeTraceEventPayload, getAssistantWorkflowDirectRouteOutcomeRoute, } from "./outcome.js";
2
+ import { parseAssistantWorkflowDirectRouteTraceStage } from "./trace-stages.js";
3
+ export function buildAssistantWorkflowFinalTextOutcomeTracePayload(input) {
4
+ return buildAssistantWorkflowOutcomeTraceEventPayload({
5
+ outcome: assistantWorkflowFinalText(input.content, input.delivery),
6
+ source: input.source ?? "final_answer",
7
+ layer: input.layer ?? "final_answer",
8
+ metadata: {
9
+ mode: input.mode ?? null,
10
+ streamed: input.streamed ?? null,
11
+ },
12
+ });
13
+ }
14
+ export function buildAssistantWorkflowStructuredArtifactOutcomeTracePayload(input) {
15
+ return buildAssistantWorkflowOutcomeTraceEventPayload({
16
+ outcome: assistantWorkflowStructuredArtifact(input.artifactKind, {}, input.content),
17
+ source: input.source ?? "final_answer",
18
+ layer: input.layer ?? "final_answer.structured_fast_path",
19
+ metadata: {
20
+ mode: input.mode ?? null,
21
+ submode: input.submode ?? null,
22
+ tool: input.tool ?? null,
23
+ streamed: input.streamed ?? false,
24
+ },
25
+ });
26
+ }
27
+ export function buildAssistantWorkflowUnavailableOutcomeTracePayload(input) {
28
+ return buildAssistantWorkflowOutcomeTraceEventPayload({
29
+ outcome: assistantWorkflowUnavailable(input.artifactKind, input.reason, input.content),
30
+ source: input.source ?? "tool_execution",
31
+ layer: input.layer ?? "tool.unavailable",
32
+ metadata: {
33
+ mode: input.mode ?? null,
34
+ tool: input.tool ?? null,
35
+ blockedArtifactKinds: normalizeNonEmptyStrings(input.blockedArtifactKinds),
36
+ },
37
+ });
38
+ }
39
+ export function buildAssistantWorkflowClarificationOutcomeTracePayload(input) {
40
+ return buildAssistantWorkflowOutcomeTraceEventPayload({
41
+ outcome: assistantWorkflowClarification(input.content, input.ruleId),
42
+ source: input.source ?? "final_answer",
43
+ layer: input.layer ?? "final_answer.clarification",
44
+ metadata: {
45
+ mode: input.mode ?? null,
46
+ ruleId: input.ruleId ?? null,
47
+ streamed: input.streamed ?? false,
48
+ },
49
+ });
50
+ }
51
+ export function buildAssistantWorkflowDegradedOutcomeTracePayload(input) {
52
+ return buildAssistantWorkflowOutcomeTraceEventPayload({
53
+ outcome: assistantWorkflowDegraded(input.content, input.reason),
54
+ source: input.source ?? "final_answer",
55
+ layer: input.layer ?? "final_answer.degraded",
56
+ metadata: {
57
+ mode: input.mode ?? null,
58
+ hasToolResults: input.hasToolResults ?? null,
59
+ toolCount: input.toolCount ?? null,
60
+ structuredBlockKinds: input.structuredBlockKinds ?? [],
61
+ streamed: input.streamed ?? false,
62
+ },
63
+ });
64
+ }
65
+ export function getAssistantWorkflowDirectRouteOutcomeTraceRoute(entry) {
66
+ return getAssistantWorkflowDirectRouteOutcomeRoute(entry.workflowInvocation, getAssistantWorkflowLegacyDirectRouteOutcomeTraceRoute(entry));
67
+ }
68
+ export function buildAssistantWorkflowDirectRouteOutcome(entry, input) {
69
+ const fallbackRoute = getAssistantWorkflowLegacyDirectRouteOutcomeTraceRoute(entry);
70
+ if (!input.handled) {
71
+ return assistantWorkflowDirectRouteNotHandledFromInvocation(entry.workflowInvocation, {
72
+ ...(input.reason ? { reason: input.reason } : {}),
73
+ fallbackRoute,
74
+ });
75
+ }
76
+ const options = {};
77
+ if (input.content !== undefined)
78
+ options.content = input.content;
79
+ if (input.artifactKind !== undefined)
80
+ options.artifactKind = input.artifactKind;
81
+ if (input.payload !== undefined)
82
+ options.payload = input.payload;
83
+ if (input.reason !== undefined)
84
+ options.reason = input.reason;
85
+ if (input.delivery !== undefined)
86
+ options.delivery = input.delivery;
87
+ return assistantWorkflowDirectRouteFromInvocation(entry.workflowInvocation, {
88
+ ...options,
89
+ fallbackRoute,
90
+ });
91
+ }
92
+ export function buildAssistantWorkflowDirectRouteOutcomeTracePayload(entry, input) {
93
+ return buildAssistantWorkflowOutcomeTraceEventPayload({
94
+ outcome: buildAssistantWorkflowDirectRouteOutcome(entry, input),
95
+ ...(input.source !== undefined ? { source: input.source } : {}),
96
+ layer: entry.layer,
97
+ ...(entry.skipEvent !== undefined ? { skipEvent: entry.skipEvent } : {}),
98
+ });
99
+ }
100
+ function getAssistantWorkflowLegacyDirectRouteOutcomeTraceRoute(entry) {
101
+ const traceRoute = entry.traceRoute?.trim();
102
+ if (traceRoute)
103
+ return traceRoute;
104
+ const skipRoute = parseAssistantWorkflowDirectRouteTraceStage(entry.skipEvent);
105
+ if (skipRoute)
106
+ return skipRoute.route;
107
+ const directLayerRoute = /^direct_route\.(.+)$/.exec(entry.layer)?.[1];
108
+ if (directLayerRoute?.trim())
109
+ return directLayerRoute.trim();
110
+ return entry.layer.trim().replace(/[^a-zA-Z0-9]+/g, "_").replace(/^_+|_+$/g, "") || "unknown";
111
+ }
112
+ function normalizeNonEmptyStrings(values) {
113
+ if (!values?.length)
114
+ return [];
115
+ return Array.from(new Set(values.map((value) => value.trim()).filter(Boolean)));
116
+ }
117
+ //# sourceMappingURL=outcome-trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outcome-trace.js","sourceRoot":"","sources":["../src/outcome-trace.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0CAA0C,EAC1C,oDAAoD,EACpD,8BAA8B,EAC9B,yBAAyB,EACzB,0BAA0B,EAC1B,mCAAmC,EACnC,4BAA4B,EAC5B,8CAA8C,EAC9C,2CAA2C,GAM5C,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,2CAA2C,EAAE,MAAM,mBAAmB,CAAC;AA4EhF,MAAM,UAAU,kDAAkD,CAChE,KAAkD;IAElD,OAAO,8CAA8C,CAAC;QACpD,OAAO,EAAE,0BAA0B,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC;QAClE,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,cAAc;QACtC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,cAAc;QACpC,QAAQ,EAAE;YACR,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;SACjC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,2DAA2D,CACzE,KAA2D;IAE3D,OAAO,8CAA8C,CAAC;QACpD,OAAO,EAAE,mCAAmC,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,CAAC;QACnF,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,cAAc;QACtC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,mCAAmC;QACzD,QAAQ,EAAE;YACR,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;YAC9B,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK;SAClC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oDAAoD,CAClE,KAAoD;IAEpD,OAAO,8CAA8C,CAAC;QACpD,OAAO,EAAE,4BAA4B,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;QACtF,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,gBAAgB;QACxC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,kBAAkB;QACxC,QAAQ,EAAE;YACR,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;YACxB,oBAAoB,EAAE,wBAAwB,CAAC,KAAK,CAAC,oBAAoB,CAAC;SAC3E;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sDAAsD,CACpE,KAAsD;IAEtD,OAAO,8CAA8C,CAAC;QACpD,OAAO,EAAE,8BAA8B,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;QACpE,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,cAAc;QACtC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,4BAA4B;QAClD,QAAQ,EAAE;YACR,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;YAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK;SAClC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iDAAiD,CAC/D,KAAiD;IAEjD,OAAO,8CAA8C,CAAC;QACpD,OAAO,EAAE,yBAAyB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC;QAC/D,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,cAAc;QACtC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,uBAAuB;QAC7C,QAAQ,EAAE;YACR,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,IAAI;YACxB,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,IAAI;YAC5C,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;YAClC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB,IAAI,EAAE;YACtD,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,KAAK;SAClC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gDAAgD,CAC9D,KAAoD;IAEpD,OAAO,2CAA2C,CAChD,KAAK,CAAC,kBAAkB,EACxB,sDAAsD,CAAC,KAAK,CAAC,CAC9D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wCAAwC,CACtD,KAAoD,EACpD,KAA+C;IAE/C,MAAM,aAAa,GAAG,sDAAsD,CAAC,KAAK,CAAC,CAAC;IACpF,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,oDAAoD,CAAC,KAAK,CAAC,kBAAkB,EAAE;YACpF,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,aAAa;SACd,CAAC,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAA+C,EAAE,CAAC;IAC/D,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACjE,IAAI,KAAK,CAAC,YAAY,KAAK,SAAS;QAAE,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;IAChF,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACjE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC9D,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;IACpE,OAAO,0CAA0C,CAAC,KAAK,CAAC,kBAAkB,EAAE;QAC1E,GAAG,OAAO;QACV,aAAa;KACd,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oDAAoD,CAClE,KAAoD,EACpD,KAEC;IAED,OAAO,8CAA8C,CAAC;QACpD,OAAO,EAAE,wCAAwC,CAAC,KAAK,EAAE,KAAK,CAAC;QAC/D,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/D,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzE,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sDAAsD,CAC7D,KAAoD;IAEpD,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;IAC5C,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAClC,MAAM,SAAS,GAAG,2CAA2C,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IAC/E,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC,KAAK,CAAC;IACtC,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvE,IAAI,gBAAgB,EAAE,IAAI,EAAE;QAAE,OAAO,gBAAgB,CAAC,IAAI,EAAE,CAAC;IAC7D,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,SAAS,CAAC;AAChG,CAAC;AAED,SAAS,wBAAwB,CAAC,MAAqC;IACrE,IAAI,CAAC,MAAM,EAAE,MAAM;QAAE,OAAO,EAAE,CAAC;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClF,CAAC","sourcesContent":["import {\n assistantWorkflowDirectRouteFromInvocation,\n assistantWorkflowDirectRouteNotHandledFromInvocation,\n assistantWorkflowClarification,\n assistantWorkflowDegraded,\n assistantWorkflowFinalText,\n assistantWorkflowStructuredArtifact,\n assistantWorkflowUnavailable,\n buildAssistantWorkflowOutcomeTraceEventPayload,\n getAssistantWorkflowDirectRouteOutcomeRoute,\n type AssistantWorkflowDirectRouteOutcome,\n type AssistantWorkflowDirectRouteOutcomeOptions,\n type AssistantWorkflowDirectRouteOutcomeRouteSource,\n type AssistantWorkflowOutcome,\n type AssistantWorkflowOutcomeDelivery,\n} from \"./outcome.js\";\nimport { parseAssistantWorkflowDirectRouteTraceStage } from \"./trace-stages.js\";\n\nexport type AssistantWorkflowFinalTextOutcomeTraceInput = {\n content: string;\n delivery?: AssistantWorkflowOutcomeDelivery;\n source?: string;\n layer?: string;\n mode?: string;\n streamed?: boolean;\n};\n\nexport type AssistantWorkflowStructuredArtifactOutcomeTraceInput = {\n content: string;\n artifactKind: string;\n source?: string;\n layer?: string;\n mode?: string;\n submode?: string;\n tool?: string;\n streamed?: boolean;\n};\n\nexport type AssistantWorkflowUnavailableOutcomeTraceInput = {\n artifactKind: string;\n reason: string;\n /** Artifact kinds that cannot be produced because this prerequisite is unavailable. */\n blockedArtifactKinds?: readonly string[];\n content?: string;\n source?: string;\n layer?: string;\n mode?: string;\n tool?: string;\n};\n\nexport type AssistantWorkflowClarificationOutcomeTraceInput = {\n content: string;\n ruleId?: string;\n source?: string;\n layer?: string;\n mode?: string;\n streamed?: boolean;\n};\n\nexport type AssistantWorkflowDegradedOutcomeTraceInput = {\n content: string;\n reason: string;\n source?: string;\n layer?: string;\n mode?: string;\n hasToolResults?: boolean;\n toolCount?: number;\n structuredBlockKinds?: string[];\n streamed?: boolean;\n};\n\n/**\n * The host's minimal direct-route identity. The core deliberately accepts\n * legacy trace metadata so applications can migrate outcome reporting before\n * their route registry is fully workflow-authored.\n */\nexport type AssistantWorkflowDirectRouteOutcomeTraceEntry = {\n layer: string;\n skipEvent?: string | null;\n traceRoute?: string | null;\n workflowInvocation?: AssistantWorkflowDirectRouteOutcomeRouteSource | null;\n};\n\nexport type AssistantWorkflowDirectRouteOutcomeInput = {\n handled: boolean;\n content?: string;\n artifactKind?: string;\n payload?: unknown;\n reason?: string;\n delivery?: AssistantWorkflowOutcomeDelivery;\n};\n\nexport function buildAssistantWorkflowFinalTextOutcomeTracePayload(\n input: AssistantWorkflowFinalTextOutcomeTraceInput,\n): Record<string, unknown> {\n return buildAssistantWorkflowOutcomeTraceEventPayload({\n outcome: assistantWorkflowFinalText(input.content, input.delivery),\n source: input.source ?? \"final_answer\",\n layer: input.layer ?? \"final_answer\",\n metadata: {\n mode: input.mode ?? null,\n streamed: input.streamed ?? null,\n },\n });\n}\n\nexport function buildAssistantWorkflowStructuredArtifactOutcomeTracePayload(\n input: AssistantWorkflowStructuredArtifactOutcomeTraceInput,\n): Record<string, unknown> {\n return buildAssistantWorkflowOutcomeTraceEventPayload({\n outcome: assistantWorkflowStructuredArtifact(input.artifactKind, {}, input.content),\n source: input.source ?? \"final_answer\",\n layer: input.layer ?? \"final_answer.structured_fast_path\",\n metadata: {\n mode: input.mode ?? null,\n submode: input.submode ?? null,\n tool: input.tool ?? null,\n streamed: input.streamed ?? false,\n },\n });\n}\n\nexport function buildAssistantWorkflowUnavailableOutcomeTracePayload(\n input: AssistantWorkflowUnavailableOutcomeTraceInput,\n): Record<string, unknown> {\n return buildAssistantWorkflowOutcomeTraceEventPayload({\n outcome: assistantWorkflowUnavailable(input.artifactKind, input.reason, input.content),\n source: input.source ?? \"tool_execution\",\n layer: input.layer ?? \"tool.unavailable\",\n metadata: {\n mode: input.mode ?? null,\n tool: input.tool ?? null,\n blockedArtifactKinds: normalizeNonEmptyStrings(input.blockedArtifactKinds),\n },\n });\n}\n\nexport function buildAssistantWorkflowClarificationOutcomeTracePayload(\n input: AssistantWorkflowClarificationOutcomeTraceInput,\n): Record<string, unknown> {\n return buildAssistantWorkflowOutcomeTraceEventPayload({\n outcome: assistantWorkflowClarification(input.content, input.ruleId),\n source: input.source ?? \"final_answer\",\n layer: input.layer ?? \"final_answer.clarification\",\n metadata: {\n mode: input.mode ?? null,\n ruleId: input.ruleId ?? null,\n streamed: input.streamed ?? false,\n },\n });\n}\n\nexport function buildAssistantWorkflowDegradedOutcomeTracePayload(\n input: AssistantWorkflowDegradedOutcomeTraceInput,\n): Record<string, unknown> {\n return buildAssistantWorkflowOutcomeTraceEventPayload({\n outcome: assistantWorkflowDegraded(input.content, input.reason),\n source: input.source ?? \"final_answer\",\n layer: input.layer ?? \"final_answer.degraded\",\n metadata: {\n mode: input.mode ?? null,\n hasToolResults: input.hasToolResults ?? null,\n toolCount: input.toolCount ?? null,\n structuredBlockKinds: input.structuredBlockKinds ?? [],\n streamed: input.streamed ?? false,\n },\n });\n}\n\nexport function getAssistantWorkflowDirectRouteOutcomeTraceRoute(\n entry: AssistantWorkflowDirectRouteOutcomeTraceEntry,\n): string {\n return getAssistantWorkflowDirectRouteOutcomeRoute(\n entry.workflowInvocation,\n getAssistantWorkflowLegacyDirectRouteOutcomeTraceRoute(entry),\n );\n}\n\nexport function buildAssistantWorkflowDirectRouteOutcome(\n entry: AssistantWorkflowDirectRouteOutcomeTraceEntry,\n input: AssistantWorkflowDirectRouteOutcomeInput,\n): AssistantWorkflowOutcome {\n const fallbackRoute = getAssistantWorkflowLegacyDirectRouteOutcomeTraceRoute(entry);\n if (!input.handled) {\n return assistantWorkflowDirectRouteNotHandledFromInvocation(entry.workflowInvocation, {\n ...(input.reason ? { reason: input.reason } : {}),\n fallbackRoute,\n });\n }\n const options: AssistantWorkflowDirectRouteOutcomeOptions = {};\n if (input.content !== undefined) options.content = input.content;\n if (input.artifactKind !== undefined) options.artifactKind = input.artifactKind;\n if (input.payload !== undefined) options.payload = input.payload;\n if (input.reason !== undefined) options.reason = input.reason;\n if (input.delivery !== undefined) options.delivery = input.delivery;\n return assistantWorkflowDirectRouteFromInvocation(entry.workflowInvocation, {\n ...options,\n fallbackRoute,\n });\n}\n\nexport function buildAssistantWorkflowDirectRouteOutcomeTracePayload(\n entry: AssistantWorkflowDirectRouteOutcomeTraceEntry,\n input: AssistantWorkflowDirectRouteOutcomeInput & {\n source?: string;\n },\n): Record<string, unknown> {\n return buildAssistantWorkflowOutcomeTraceEventPayload({\n outcome: buildAssistantWorkflowDirectRouteOutcome(entry, input),\n ...(input.source !== undefined ? { source: input.source } : {}),\n layer: entry.layer,\n ...(entry.skipEvent !== undefined ? { skipEvent: entry.skipEvent } : {}),\n });\n}\n\nfunction getAssistantWorkflowLegacyDirectRouteOutcomeTraceRoute(\n entry: AssistantWorkflowDirectRouteOutcomeTraceEntry,\n): string {\n const traceRoute = entry.traceRoute?.trim();\n if (traceRoute) return traceRoute;\n const skipRoute = parseAssistantWorkflowDirectRouteTraceStage(entry.skipEvent);\n if (skipRoute) return skipRoute.route;\n const directLayerRoute = /^direct_route\\.(.+)$/.exec(entry.layer)?.[1];\n if (directLayerRoute?.trim()) return directLayerRoute.trim();\n return entry.layer.trim().replace(/[^a-zA-Z0-9]+/g, \"_\").replace(/^_+|_+$/g, \"\") || \"unknown\";\n}\n\nfunction normalizeNonEmptyStrings(values: readonly string[] | undefined): string[] {\n if (!values?.length) return [];\n return Array.from(new Set(values.map((value) => value.trim()).filter(Boolean)));\n}\n"]}