@jangts/agent-core 0.1.1 → 0.2.1

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 (558) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/LICENSE +55 -0
  3. package/NOTICE +6 -0
  4. package/README.md +8 -0
  5. package/development/docs/README.en.md +70 -0
  6. package/development/docs/README.md +1 -1
  7. package/development/docs/acceptance.en.md +34 -0
  8. package/development/docs/agent-development.en.md +42 -0
  9. package/development/docs/api/README.en.md +62 -0
  10. package/development/docs/api/advanced-agents.en.md +135 -0
  11. package/development/docs/api/context-processing.en.md +110 -0
  12. package/development/docs/api/core.en.md +274 -0
  13. package/development/docs/api/examples.en.md +118 -0
  14. package/development/docs/api/kits.en.md +183 -0
  15. package/development/docs/api/knowledge-answering.en.md +166 -0
  16. package/development/docs/api/mock.en.md +186 -0
  17. package/development/docs/api/observability.en.md +166 -0
  18. package/development/docs/api/reference.en.md +2235 -0
  19. package/development/docs/api/reference.md +1907 -1874
  20. package/development/docs/api/support.en.md +252 -0
  21. package/development/docs/api/support.md +27 -0
  22. package/development/docs/api/types.en.md +181 -0
  23. package/development/docs/api/workflow.en.md +188 -0
  24. package/development/docs/basic-usage.en.md +78 -0
  25. package/development/docs/create-app.en.md +76 -0
  26. package/development/docs/examples/offline-agent.en.md +273 -0
  27. package/development/docs/examples.en.md +36 -0
  28. package/development/docs/flows/knowledge-maintenance.en.md +38 -0
  29. package/development/docs/getting-started.en.md +71 -0
  30. package/development/docs/knowledge.en.md +89 -0
  31. package/development/docs/maintenance.en.md +62 -0
  32. package/development/docs/materials.en.md +38 -0
  33. package/development/docs/mechanisms.en.md +227 -0
  34. package/development/docs/memory-and-learning.en.md +42 -0
  35. package/development/docs/operations.en.md +51 -0
  36. package/development/docs/records.en.md +63 -0
  37. package/development/docs/registration.en.md +63 -0
  38. package/development/skills/agent-core-app/scripts/create-app.mjs +286 -70
  39. package/development/skills/agent-core-app/scripts/lib/knowledge.mjs +77 -16
  40. package/development/skills/agent-core-app/scripts/lib/source.mjs +30 -2
  41. package/development/skills/agent-core-app/scripts/plan.mjs +46 -12
  42. package/development/skills/agent-core-app/scripts/prepare-source.mjs +61 -10
  43. package/development/skills/agent-core-app/scripts/resources.mjs +62 -17
  44. package/development/skills/agent-core-app/scripts/validate-knowledge.mjs +18 -1
  45. package/development/skills/agent-core-app/templates/catalog.json +36 -22
  46. package/dist/cjs/capabilities/index.js +13 -0
  47. package/dist/cjs/capabilities/invocation.js +80 -10
  48. package/dist/cjs/capabilities/model.js +126 -13
  49. package/dist/cjs/capabilities/tool-runtime.js +64 -12
  50. package/dist/cjs/capabilities/tools.js +266 -31
  51. package/dist/cjs/context/assembly.js +46 -5
  52. package/dist/cjs/context/audit.js +31 -6
  53. package/dist/cjs/context/fragments.js +54 -11
  54. package/dist/cjs/context/index.js +12 -0
  55. package/dist/cjs/context/journal.js +84 -7
  56. package/dist/cjs/context/plan.js +30 -2
  57. package/dist/cjs/diagnostics/catalog.js +17 -3
  58. package/dist/cjs/diagnostics/index.js +149 -29
  59. package/dist/cjs/diagnostics/sub-flow.js +240 -40
  60. package/dist/cjs/errors.js +99 -17
  61. package/dist/cjs/execution/branch.js +20 -4
  62. package/dist/cjs/execution/engine.js +470 -56
  63. package/dist/cjs/execution/events.js +136 -18
  64. package/dist/cjs/execution/index.js +7 -0
  65. package/dist/cjs/execution/reporting.js +75 -6
  66. package/dist/cjs/execution/state.js +161 -22
  67. package/dist/cjs/execution/workflow.js +224 -32
  68. package/dist/cjs/index.js +18 -0
  69. package/dist/cjs/kits/aggregation.js +45 -3
  70. package/dist/cjs/kits/answering/batch.js +23 -4
  71. package/dist/cjs/kits/answering/check-result.js +31 -8
  72. package/dist/cjs/kits/answering/checks.js +24 -3
  73. package/dist/cjs/kits/answering/flow.js +192 -36
  74. package/dist/cjs/kits/answering/index.js +19 -1
  75. package/dist/cjs/kits/answering/tasks.js +88 -13
  76. package/dist/cjs/kits/artifacts.js +36 -4
  77. package/dist/cjs/kits/candidates.js +47 -5
  78. package/dist/cjs/kits/delivery.js +40 -5
  79. package/dist/cjs/kits/durable.js +155 -31
  80. package/dist/cjs/kits/evidence.js +66 -15
  81. package/dist/cjs/kits/family.js +152 -22
  82. package/dist/cjs/kits/index.js +12 -1
  83. package/dist/cjs/kits/inference.js +104 -16
  84. package/dist/cjs/kits/intents/catalog.js +67 -16
  85. package/dist/cjs/kits/intents/index.js +11 -0
  86. package/dist/cjs/kits/intents/registry.js +188 -43
  87. package/dist/cjs/kits/intents/scopes.js +215 -46
  88. package/dist/cjs/kits/interaction/command.js +140 -36
  89. package/dist/cjs/kits/interaction/commands.js +86 -11
  90. package/dist/cjs/kits/interaction/handlers.js +27 -10
  91. package/dist/cjs/kits/interaction/index.js +10 -0
  92. package/dist/cjs/kits/interaction/transfer.js +80 -14
  93. package/dist/cjs/kits/knowledge/catalog.js +62 -11
  94. package/dist/cjs/kits/knowledge/index.js +16 -1
  95. package/dist/cjs/kits/knowledge/publication.js +99 -23
  96. package/dist/cjs/kits/knowledge/sections.js +33 -4
  97. package/dist/cjs/kits/normalization.js +51 -7
  98. package/dist/cjs/kits/policies.js +79 -15
  99. package/dist/cjs/kits/presentation/events.js +54 -10
  100. package/dist/cjs/kits/presentation/index.js +24 -1
  101. package/dist/cjs/kits/presentation/outputs.js +176 -38
  102. package/dist/cjs/kits/presentation/templates.js +33 -5
  103. package/dist/cjs/kits/presentation/variants.js +31 -2
  104. package/dist/cjs/kits/projection.js +63 -8
  105. package/dist/cjs/kits/rank-fusion.js +27 -4
  106. package/dist/cjs/kits/reflection-log-source.js +89 -16
  107. package/dist/cjs/kits/reflection.js +234 -60
  108. package/dist/cjs/kits/retrieval.js +98 -18
  109. package/dist/cjs/kits/search.js +180 -27
  110. package/dist/cjs/kits/text-skills.js +104 -19
  111. package/dist/cjs/kits/tools.js +415 -74
  112. package/dist/cjs/kits/vector-search.js +50 -16
  113. package/dist/cjs/mock/node.js +7 -1
  114. package/dist/cjs/mock/web.js +7 -1
  115. package/dist/cjs/mock.js +7 -1
  116. package/dist/cjs/model/binding.js +68 -17
  117. package/dist/cjs/model/call-budget.js +45 -4
  118. package/dist/cjs/model/decision-retry.js +19 -1
  119. package/dist/cjs/model/defaults.js +27 -4
  120. package/dist/cjs/model/index.js +7 -0
  121. package/dist/cjs/model/interactions/arguments.js +36 -1
  122. package/dist/cjs/model/interactions/json-object.js +48 -12
  123. package/dist/cjs/model/interactions/native-functions.js +52 -10
  124. package/dist/cjs/model/message-diagnostics.js +17 -4
  125. package/dist/cjs/model/options.js +9 -1
  126. package/dist/cjs/model/preparation.js +86 -12
  127. package/dist/cjs/model/runner.js +413 -79
  128. package/dist/cjs/model/selection-transport.js +48 -8
  129. package/dist/cjs/model/settings.js +67 -13
  130. package/dist/cjs/model/token-budget.js +69 -11
  131. package/dist/cjs/model/transports.js +59 -6
  132. package/dist/cjs/structs/common.js +11 -0
  133. package/dist/cjs/structs/debug.js +34 -5
  134. package/dist/cjs/structs/errors.js +26 -1
  135. package/dist/cjs/structs/index.js +11 -1
  136. package/dist/cjs/structs/kits/durable.js +7 -0
  137. package/dist/cjs/structs/kits/family.js +1 -0
  138. package/dist/cjs/structs/kits/interaction.js +8 -1
  139. package/dist/cjs/structs/kits/knowledge-publication.js +1 -0
  140. package/dist/cjs/structs/kits/reflection.js +18 -3
  141. package/dist/cjs/structs/model/chat-provider.js +6 -0
  142. package/dist/cjs/structs/support/model/completion.js +2 -0
  143. package/dist/cjs/structs/support/model/messages.js +2 -0
  144. package/dist/cjs/support/capabilities.js +43 -6
  145. package/dist/cjs/support/context/assembly.js +88 -16
  146. package/dist/cjs/support/context/compression.js +48 -6
  147. package/dist/cjs/support/context/fragments.js +6 -0
  148. package/dist/cjs/support/context/history.js +36 -1
  149. package/dist/cjs/support/context/index.js +11 -0
  150. package/dist/cjs/support/context/nodes.js +164 -35
  151. package/dist/cjs/support/context/processing.js +319 -61
  152. package/dist/cjs/support/context/selection-policy.js +98 -21
  153. package/dist/cjs/support/context/selection.js +61 -10
  154. package/dist/cjs/support/context/snapshot.js +29 -7
  155. package/dist/cjs/support/context/strategies.js +120 -28
  156. package/dist/cjs/support/index.js +9 -1
  157. package/dist/cjs/support/model/capabilities.js +20 -1
  158. package/dist/cjs/support/model/chat-completions.js +92 -20
  159. package/dist/cjs/support/model/children.js +34 -6
  160. package/dist/cjs/support/model/compatible-provider.js +189 -59
  161. package/dist/cjs/support/model/completion/calls.js +61 -0
  162. package/dist/cjs/support/model/completion/default.js +33 -0
  163. package/dist/cjs/support/model/completion/index.js +28 -0
  164. package/dist/cjs/support/model/completion/session.js +107 -0
  165. package/dist/cjs/support/model/index.js +12 -0
  166. package/dist/cjs/support/model/interactions/index.js +12 -1
  167. package/dist/cjs/support/model/interactions/json-object.js +6 -0
  168. package/dist/cjs/support/model/interactions/native-functions.js +6 -0
  169. package/dist/cjs/support/model/observer.js +32 -6
  170. package/dist/cjs/support/model/preview-rules.js +66 -16
  171. package/dist/cjs/support/model/reply-preview.js +77 -17
  172. package/dist/cjs/support/model/stage-transport.js +33 -7
  173. package/dist/cjs/support/model/strategies.js +75 -14
  174. package/dist/cjs/support/model/transports.js +53 -11
  175. package/dist/cjs/support/registration.js +49 -7
  176. package/dist/cjs/support/schema.js +46 -4
  177. package/dist/cjs/support/stream-events.js +60 -8
  178. package/dist/cjs/support/tool-runtime.js +6 -0
  179. package/dist/cjs/support/tools.js +79 -10
  180. package/dist/cjs/support/transport/index.js +7 -0
  181. package/dist/cjs/support/transport/json.js +28 -4
  182. package/dist/cjs/support/transport/sse.js +25 -2
  183. package/dist/cjs/utils/break-observer.js +20 -2
  184. package/dist/cjs/utils/cancellation.js +77 -9
  185. package/dist/cjs/utils/catalog.js +19 -4
  186. package/dist/cjs/utils/debug.js +14 -2
  187. package/dist/cjs/utils/index.js +8 -0
  188. package/dist/cjs/utils/interaction-definition.js +26 -6
  189. package/dist/cjs/utils/invocation.js +42 -4
  190. package/dist/cjs/utils/model-protocol.js +20 -1
  191. package/dist/cjs/utils/object.js +16 -0
  192. package/dist/cjs/utils/observer.js +22 -2
  193. package/dist/cjs/utils/protocol-registry.js +47 -4
  194. package/dist/cjs/utils/query-key.js +21 -2
  195. package/dist/cjs/utils/registration.js +18 -2
  196. package/dist/cjs/utils/rules.js +39 -11
  197. package/dist/cjs/utils/schema-adapter.js +25 -2
  198. package/dist/cjs/utils/synchronous.js +64 -7
  199. package/dist/cjs/utils/text.js +15 -1
  200. package/dist/esm/capabilities/index.d.ts +13 -0
  201. package/dist/esm/capabilities/index.js +13 -0
  202. package/dist/esm/capabilities/invocation.d.ts +16 -2
  203. package/dist/esm/capabilities/invocation.js +80 -10
  204. package/dist/esm/capabilities/model.d.ts +68 -1
  205. package/dist/esm/capabilities/model.js +126 -13
  206. package/dist/esm/capabilities/tool-runtime.d.ts +11 -0
  207. package/dist/esm/capabilities/tool-runtime.js +64 -12
  208. package/dist/esm/capabilities/tools.d.ts +96 -3
  209. package/dist/esm/capabilities/tools.js +267 -32
  210. package/dist/esm/context/assembly.d.ts +13 -2
  211. package/dist/esm/context/assembly.js +46 -5
  212. package/dist/esm/context/audit.d.ts +23 -1
  213. package/dist/esm/context/audit.js +31 -6
  214. package/dist/esm/context/fragments.d.ts +37 -3
  215. package/dist/esm/context/fragments.js +54 -11
  216. package/dist/esm/context/index.d.ts +12 -0
  217. package/dist/esm/context/index.js +12 -0
  218. package/dist/esm/context/journal.d.ts +32 -1
  219. package/dist/esm/context/journal.js +84 -7
  220. package/dist/esm/context/plan.d.ts +11 -1
  221. package/dist/esm/context/plan.js +30 -2
  222. package/dist/esm/diagnostics/catalog.d.ts +6 -0
  223. package/dist/esm/diagnostics/catalog.js +17 -3
  224. package/dist/esm/diagnostics/index.d.ts +30 -2
  225. package/dist/esm/diagnostics/index.js +149 -29
  226. package/dist/esm/diagnostics/sub-flow.d.ts +41 -3
  227. package/dist/esm/diagnostics/sub-flow.js +240 -40
  228. package/dist/esm/errors.d.ts +22 -2
  229. package/dist/esm/errors.js +99 -17
  230. package/dist/esm/execution/branch.d.ts +19 -1
  231. package/dist/esm/execution/branch.js +20 -4
  232. package/dist/esm/execution/engine.d.ts +291 -5
  233. package/dist/esm/execution/engine.js +471 -57
  234. package/dist/esm/execution/events.d.ts +16 -2
  235. package/dist/esm/execution/events.js +136 -18
  236. package/dist/esm/execution/index.d.ts +7 -0
  237. package/dist/esm/execution/index.js +7 -0
  238. package/dist/esm/execution/reporting.d.ts +49 -1
  239. package/dist/esm/execution/reporting.js +75 -6
  240. package/dist/esm/execution/state.d.ts +126 -10
  241. package/dist/esm/execution/state.js +161 -22
  242. package/dist/esm/execution/workflow.d.ts +121 -3
  243. package/dist/esm/execution/workflow.js +224 -32
  244. package/dist/esm/index.d.ts +17 -1
  245. package/dist/esm/index.js +18 -0
  246. package/dist/esm/kits/aggregation.d.ts +34 -2
  247. package/dist/esm/kits/aggregation.js +45 -3
  248. package/dist/esm/kits/answering/batch.d.ts +17 -0
  249. package/dist/esm/kits/answering/batch.js +23 -4
  250. package/dist/esm/kits/answering/check-result.d.ts +18 -1
  251. package/dist/esm/kits/answering/check-result.js +31 -8
  252. package/dist/esm/kits/answering/checks.d.ts +11 -0
  253. package/dist/esm/kits/answering/checks.js +24 -3
  254. package/dist/esm/kits/answering/flow.d.ts +25 -2
  255. package/dist/esm/kits/answering/flow.js +192 -36
  256. package/dist/esm/kits/answering/index.d.ts +12 -0
  257. package/dist/esm/kits/answering/index.js +19 -1
  258. package/dist/esm/kits/answering/tasks.d.ts +32 -1
  259. package/dist/esm/kits/answering/tasks.js +88 -13
  260. package/dist/esm/kits/artifacts.d.ts +11 -0
  261. package/dist/esm/kits/artifacts.js +36 -4
  262. package/dist/esm/kits/candidates.d.ts +23 -1
  263. package/dist/esm/kits/candidates.js +47 -5
  264. package/dist/esm/kits/delivery.d.ts +34 -0
  265. package/dist/esm/kits/delivery.js +40 -5
  266. package/dist/esm/kits/durable.d.ts +19 -0
  267. package/dist/esm/kits/durable.js +155 -31
  268. package/dist/esm/kits/evidence.d.ts +28 -5
  269. package/dist/esm/kits/evidence.js +66 -15
  270. package/dist/esm/kits/family.d.ts +17 -1
  271. package/dist/esm/kits/family.js +152 -22
  272. package/dist/esm/kits/index.d.ts +12 -1
  273. package/dist/esm/kits/index.js +12 -1
  274. package/dist/esm/kits/inference.d.ts +64 -0
  275. package/dist/esm/kits/inference.js +104 -16
  276. package/dist/esm/kits/intents/catalog.d.ts +13 -1
  277. package/dist/esm/kits/intents/catalog.js +67 -16
  278. package/dist/esm/kits/intents/index.d.ts +11 -0
  279. package/dist/esm/kits/intents/index.js +11 -0
  280. package/dist/esm/kits/intents/registry.d.ts +61 -3
  281. package/dist/esm/kits/intents/registry.js +188 -43
  282. package/dist/esm/kits/intents/scopes.d.ts +73 -3
  283. package/dist/esm/kits/intents/scopes.js +215 -46
  284. package/dist/esm/kits/interaction/command.d.ts +38 -4
  285. package/dist/esm/kits/interaction/command.js +140 -36
  286. package/dist/esm/kits/interaction/commands.d.ts +66 -2
  287. package/dist/esm/kits/interaction/commands.js +86 -11
  288. package/dist/esm/kits/interaction/handlers.d.ts +19 -2
  289. package/dist/esm/kits/interaction/handlers.js +27 -10
  290. package/dist/esm/kits/interaction/index.d.ts +10 -0
  291. package/dist/esm/kits/interaction/index.js +10 -0
  292. package/dist/esm/kits/interaction/transfer.d.ts +39 -2
  293. package/dist/esm/kits/interaction/transfer.js +80 -14
  294. package/dist/esm/kits/knowledge/catalog.d.ts +13 -0
  295. package/dist/esm/kits/knowledge/catalog.js +62 -11
  296. package/dist/esm/kits/knowledge/index.d.ts +11 -0
  297. package/dist/esm/kits/knowledge/index.js +16 -1
  298. package/dist/esm/kits/knowledge/publication.d.ts +15 -1
  299. package/dist/esm/kits/knowledge/publication.js +99 -23
  300. package/dist/esm/kits/knowledge/sections.d.ts +31 -1
  301. package/dist/esm/kits/knowledge/sections.js +33 -4
  302. package/dist/esm/kits/normalization.d.ts +25 -2
  303. package/dist/esm/kits/normalization.js +51 -7
  304. package/dist/esm/kits/policies.d.ts +26 -3
  305. package/dist/esm/kits/policies.js +79 -15
  306. package/dist/esm/kits/presentation/events.d.ts +51 -4
  307. package/dist/esm/kits/presentation/events.js +54 -10
  308. package/dist/esm/kits/presentation/index.d.ts +12 -0
  309. package/dist/esm/kits/presentation/index.js +25 -2
  310. package/dist/esm/kits/presentation/outputs.d.ts +30 -1
  311. package/dist/esm/kits/presentation/outputs.js +176 -38
  312. package/dist/esm/kits/presentation/templates.d.ts +32 -3
  313. package/dist/esm/kits/presentation/templates.js +33 -5
  314. package/dist/esm/kits/presentation/variants.d.ts +29 -0
  315. package/dist/esm/kits/presentation/variants.js +31 -2
  316. package/dist/esm/kits/projection.d.ts +42 -5
  317. package/dist/esm/kits/projection.js +63 -8
  318. package/dist/esm/kits/rank-fusion.d.ts +21 -1
  319. package/dist/esm/kits/rank-fusion.js +28 -5
  320. package/dist/esm/kits/reflection-log-source.d.ts +28 -1
  321. package/dist/esm/kits/reflection-log-source.js +89 -16
  322. package/dist/esm/kits/reflection.d.ts +17 -1
  323. package/dist/esm/kits/reflection.js +235 -61
  324. package/dist/esm/kits/retrieval.d.ts +18 -2
  325. package/dist/esm/kits/retrieval.js +98 -18
  326. package/dist/esm/kits/search.d.ts +56 -3
  327. package/dist/esm/kits/search.js +180 -27
  328. package/dist/esm/kits/text-skills.d.ts +16 -2
  329. package/dist/esm/kits/text-skills.js +104 -19
  330. package/dist/esm/kits/tools.d.ts +122 -2
  331. package/dist/esm/kits/tools.js +416 -74
  332. package/dist/esm/kits/vector-search.d.ts +47 -1
  333. package/dist/esm/kits/vector-search.js +51 -17
  334. package/dist/esm/mock/node.d.ts +7 -0
  335. package/dist/esm/mock/node.js +7 -1
  336. package/dist/esm/mock/web.d.ts +7 -0
  337. package/dist/esm/mock/web.js +7 -1
  338. package/dist/esm/mock.d.ts +7 -0
  339. package/dist/esm/mock.js +7 -1
  340. package/dist/esm/model/binding.d.ts +32 -3
  341. package/dist/esm/model/binding.js +68 -17
  342. package/dist/esm/model/call-budget.d.ts +30 -2
  343. package/dist/esm/model/call-budget.js +45 -4
  344. package/dist/esm/model/decision-retry.d.ts +10 -1
  345. package/dist/esm/model/decision-retry.js +19 -1
  346. package/dist/esm/model/defaults.d.ts +13 -2
  347. package/dist/esm/model/defaults.js +27 -4
  348. package/dist/esm/model/index.d.ts +7 -0
  349. package/dist/esm/model/index.js +7 -0
  350. package/dist/esm/model/interactions/arguments.d.ts +27 -0
  351. package/dist/esm/model/interactions/arguments.js +36 -1
  352. package/dist/esm/model/interactions/json-object.d.ts +7 -1
  353. package/dist/esm/model/interactions/json-object.js +48 -12
  354. package/dist/esm/model/interactions/native-functions.d.ts +6 -0
  355. package/dist/esm/model/interactions/native-functions.js +52 -10
  356. package/dist/esm/model/message-diagnostics.d.ts +17 -1
  357. package/dist/esm/model/message-diagnostics.js +17 -4
  358. package/dist/esm/model/options.d.ts +18 -1
  359. package/dist/esm/model/options.js +9 -1
  360. package/dist/esm/model/preparation.d.ts +30 -2
  361. package/dist/esm/model/preparation.js +86 -12
  362. package/dist/esm/model/runner.d.ts +129 -5
  363. package/dist/esm/model/runner.js +414 -80
  364. package/dist/esm/model/selection-transport.d.ts +14 -1
  365. package/dist/esm/model/selection-transport.js +48 -8
  366. package/dist/esm/model/settings.d.ts +11 -0
  367. package/dist/esm/model/settings.js +67 -13
  368. package/dist/esm/model/token-budget.d.ts +59 -1
  369. package/dist/esm/model/token-budget.js +69 -11
  370. package/dist/esm/model/transports.d.ts +20 -2
  371. package/dist/esm/model/transports.js +59 -6
  372. package/dist/esm/structs/capabilities/invocation.d.ts +36 -0
  373. package/dist/esm/structs/capabilities/model.d.ts +27 -0
  374. package/dist/esm/structs/capabilities/tools.d.ts +38 -0
  375. package/dist/esm/structs/common.d.ts +62 -2
  376. package/dist/esm/structs/common.js +11 -0
  377. package/dist/esm/structs/context/fragments.d.ts +28 -0
  378. package/dist/esm/structs/context/journal.d.ts +28 -3
  379. package/dist/esm/structs/context/processing.d.ts +11 -0
  380. package/dist/esm/structs/debug.d.ts +58 -1
  381. package/dist/esm/structs/debug.js +34 -5
  382. package/dist/esm/structs/diagnostics.d.ts +119 -1
  383. package/dist/esm/structs/errors.d.ts +42 -1
  384. package/dist/esm/structs/errors.js +26 -1
  385. package/dist/esm/structs/execution/engine.d.ts +24 -1
  386. package/dist/esm/structs/execution/events.d.ts +12 -0
  387. package/dist/esm/structs/execution/workflow.d.ts +71 -0
  388. package/dist/esm/structs/index.d.ts +11 -1
  389. package/dist/esm/structs/index.js +11 -1
  390. package/dist/esm/structs/invocation.d.ts +30 -0
  391. package/dist/esm/structs/kits/aggregation.d.ts +12 -0
  392. package/dist/esm/structs/kits/answering/checks.d.ts +11 -0
  393. package/dist/esm/structs/kits/answering/flow.d.ts +35 -1
  394. package/dist/esm/structs/kits/answering/state.d.ts +21 -0
  395. package/dist/esm/structs/kits/answering/tasks.d.ts +21 -0
  396. package/dist/esm/structs/kits/artifacts.d.ts +14 -0
  397. package/dist/esm/structs/kits/candidates.d.ts +19 -0
  398. package/dist/esm/structs/kits/delivery.d.ts +22 -0
  399. package/dist/esm/structs/kits/durable.d.ts +56 -3
  400. package/dist/esm/structs/kits/durable.js +7 -0
  401. package/dist/esm/structs/kits/evidence.d.ts +23 -0
  402. package/dist/esm/structs/kits/family.d.ts +49 -1
  403. package/dist/esm/structs/kits/family.js +1 -0
  404. package/dist/esm/structs/kits/intents/catalog.d.ts +26 -0
  405. package/dist/esm/structs/kits/intents/registry.d.ts +34 -0
  406. package/dist/esm/structs/kits/intents/scopes.d.ts +36 -1
  407. package/dist/esm/structs/kits/interaction.d.ts +64 -0
  408. package/dist/esm/structs/kits/interaction.js +8 -1
  409. package/dist/esm/structs/kits/knowledge-publication.d.ts +43 -1
  410. package/dist/esm/structs/kits/knowledge-publication.js +1 -0
  411. package/dist/esm/structs/kits/knowledge.d.ts +39 -2
  412. package/dist/esm/structs/kits/normalization.d.ts +15 -0
  413. package/dist/esm/structs/kits/policies.d.ts +25 -1
  414. package/dist/esm/structs/kits/presentation/events.d.ts +28 -4
  415. package/dist/esm/structs/kits/presentation/outputs.d.ts +38 -1
  416. package/dist/esm/structs/kits/presentation/templates.d.ts +15 -0
  417. package/dist/esm/structs/kits/projection.d.ts +21 -0
  418. package/dist/esm/structs/kits/reflection.d.ts +61 -2
  419. package/dist/esm/structs/kits/reflection.js +18 -3
  420. package/dist/esm/structs/kits/retrieval.d.ts +39 -0
  421. package/dist/esm/structs/kits/search.d.ts +24 -0
  422. package/dist/esm/structs/kits/text-skills.d.ts +36 -0
  423. package/dist/esm/structs/kits/tools.d.ts +87 -0
  424. package/dist/esm/structs/model/chat-provider.d.ts +24 -1
  425. package/dist/esm/structs/model/chat-provider.js +6 -0
  426. package/dist/esm/structs/model/interactions.d.ts +38 -0
  427. package/dist/esm/structs/model/messages.d.ts +34 -0
  428. package/dist/esm/structs/model/runtime.d.ts +104 -6
  429. package/dist/esm/structs/support/capabilities.d.ts +19 -2
  430. package/dist/esm/structs/support/context-processing.d.ts +88 -9
  431. package/dist/esm/structs/support/context.d.ts +29 -1
  432. package/dist/esm/structs/support/model/completion.d.ts +50 -0
  433. package/dist/esm/structs/support/model/completion.js +1 -0
  434. package/dist/esm/structs/support/model/interactions.d.ts +13 -1
  435. package/dist/esm/structs/support/model/messages.d.ts +54 -0
  436. package/dist/esm/structs/support/model/messages.js +1 -0
  437. package/dist/esm/structs/support/model/provider-observer.d.ts +22 -1
  438. package/dist/esm/structs/support/model/provider.d.ts +71 -6
  439. package/dist/esm/structs/support/registration.d.ts +13 -0
  440. package/dist/esm/structs/support/schema.d.ts +14 -0
  441. package/dist/esm/structs/support/tools.d.ts +28 -0
  442. package/dist/esm/structs/support/transport/json.d.ts +16 -0
  443. package/dist/esm/structs/support/transport/sse.d.ts +15 -0
  444. package/dist/esm/structs/utils/rules.d.ts +19 -0
  445. package/dist/esm/support/capabilities.d.ts +25 -2
  446. package/dist/esm/support/capabilities.js +43 -6
  447. package/dist/esm/support/context/assembly.d.ts +35 -4
  448. package/dist/esm/support/context/assembly.js +88 -16
  449. package/dist/esm/support/context/compression.d.ts +17 -1
  450. package/dist/esm/support/context/compression.js +48 -6
  451. package/dist/esm/support/context/fragments.d.ts +6 -0
  452. package/dist/esm/support/context/fragments.js +6 -0
  453. package/dist/esm/support/context/history.d.ts +43 -0
  454. package/dist/esm/support/context/history.js +36 -1
  455. package/dist/esm/support/context/index.d.ts +13 -2
  456. package/dist/esm/support/context/index.js +12 -1
  457. package/dist/esm/support/context/nodes.d.ts +65 -3
  458. package/dist/esm/support/context/nodes.js +165 -36
  459. package/dist/esm/support/context/processing.d.ts +152 -1
  460. package/dist/esm/support/context/processing.js +320 -62
  461. package/dist/esm/support/context/selection-policy.d.ts +42 -2
  462. package/dist/esm/support/context/selection-policy.js +98 -21
  463. package/dist/esm/support/context/selection.d.ts +14 -1
  464. package/dist/esm/support/context/selection.js +61 -10
  465. package/dist/esm/support/context/snapshot.d.ts +23 -1
  466. package/dist/esm/support/context/snapshot.js +29 -7
  467. package/dist/esm/support/context/strategies.d.ts +35 -2
  468. package/dist/esm/support/context/strategies.js +120 -28
  469. package/dist/esm/support/index.d.ts +9 -1
  470. package/dist/esm/support/index.js +9 -1
  471. package/dist/esm/support/model/capabilities.d.ts +10 -0
  472. package/dist/esm/support/model/capabilities.js +20 -1
  473. package/dist/esm/support/model/chat-completions.d.ts +44 -15
  474. package/dist/esm/support/model/chat-completions.js +92 -20
  475. package/dist/esm/support/model/children.d.ts +34 -2
  476. package/dist/esm/support/model/children.js +34 -6
  477. package/dist/esm/support/model/compatible-provider.d.ts +29 -3
  478. package/dist/esm/support/model/compatible-provider.js +190 -60
  479. package/dist/esm/support/model/completion/calls.d.ts +40 -0
  480. package/dist/esm/support/model/completion/calls.js +58 -0
  481. package/dist/esm/support/model/completion/default.d.ts +11 -0
  482. package/dist/esm/support/model/completion/default.js +30 -0
  483. package/dist/esm/support/model/completion/index.d.ts +10 -0
  484. package/dist/esm/support/model/completion/index.js +22 -0
  485. package/dist/esm/support/model/completion/session.d.ts +16 -0
  486. package/dist/esm/support/model/completion/session.js +104 -0
  487. package/dist/esm/support/model/index.d.ts +14 -0
  488. package/dist/esm/support/model/index.js +12 -0
  489. package/dist/esm/support/model/interactions/index.d.ts +1 -1
  490. package/dist/esm/support/model/interactions/index.js +12 -1
  491. package/dist/esm/support/model/interactions/json-object.d.ts +6 -0
  492. package/dist/esm/support/model/interactions/json-object.js +6 -0
  493. package/dist/esm/support/model/interactions/native-functions.d.ts +6 -0
  494. package/dist/esm/support/model/interactions/native-functions.js +6 -0
  495. package/dist/esm/support/model/observer.d.ts +25 -2
  496. package/dist/esm/support/model/observer.js +32 -6
  497. package/dist/esm/support/model/preview-rules.d.ts +26 -2
  498. package/dist/esm/support/model/preview-rules.js +66 -16
  499. package/dist/esm/support/model/reply-preview.d.ts +22 -1
  500. package/dist/esm/support/model/reply-preview.js +77 -17
  501. package/dist/esm/support/model/stage-transport.d.ts +9 -1
  502. package/dist/esm/support/model/stage-transport.js +33 -7
  503. package/dist/esm/support/model/strategies.d.ts +28 -2
  504. package/dist/esm/support/model/strategies.js +75 -14
  505. package/dist/esm/support/model/transports.d.ts +17 -1
  506. package/dist/esm/support/model/transports.js +53 -11
  507. package/dist/esm/support/registration.d.ts +20 -1
  508. package/dist/esm/support/registration.js +49 -7
  509. package/dist/esm/support/schema.d.ts +31 -1
  510. package/dist/esm/support/schema.js +46 -4
  511. package/dist/esm/support/stream-events.d.ts +22 -1
  512. package/dist/esm/support/stream-events.js +60 -8
  513. package/dist/esm/support/tool-runtime.d.ts +6 -0
  514. package/dist/esm/support/tool-runtime.js +6 -0
  515. package/dist/esm/support/tools.d.ts +22 -0
  516. package/dist/esm/support/tools.js +79 -10
  517. package/dist/esm/support/transport/index.d.ts +7 -0
  518. package/dist/esm/support/transport/index.js +7 -0
  519. package/dist/esm/support/transport/json.d.ts +29 -2
  520. package/dist/esm/support/transport/json.js +28 -4
  521. package/dist/esm/support/transport/sse.d.ts +31 -1
  522. package/dist/esm/support/transport/sse.js +25 -2
  523. package/dist/esm/types.d.ts +9 -1
  524. package/dist/esm/utils/break-observer.d.ts +27 -2
  525. package/dist/esm/utils/break-observer.js +20 -2
  526. package/dist/esm/utils/cancellation.d.ts +56 -5
  527. package/dist/esm/utils/cancellation.js +77 -9
  528. package/dist/esm/utils/catalog.d.ts +20 -1
  529. package/dist/esm/utils/catalog.js +19 -4
  530. package/dist/esm/utils/debug.d.ts +20 -1
  531. package/dist/esm/utils/debug.js +14 -2
  532. package/dist/esm/utils/index.d.ts +8 -0
  533. package/dist/esm/utils/index.js +8 -0
  534. package/dist/esm/utils/interaction-definition.d.ts +18 -1
  535. package/dist/esm/utils/interaction-definition.js +26 -6
  536. package/dist/esm/utils/invocation.d.ts +36 -1
  537. package/dist/esm/utils/invocation.js +42 -4
  538. package/dist/esm/utils/model-protocol.d.ts +8 -0
  539. package/dist/esm/utils/model-protocol.js +20 -1
  540. package/dist/esm/utils/object.d.ts +16 -0
  541. package/dist/esm/utils/object.js +16 -0
  542. package/dist/esm/utils/observer.d.ts +19 -1
  543. package/dist/esm/utils/observer.js +22 -2
  544. package/dist/esm/utils/protocol-registry.d.ts +38 -1
  545. package/dist/esm/utils/protocol-registry.js +47 -4
  546. package/dist/esm/utils/query-key.d.ts +11 -1
  547. package/dist/esm/utils/query-key.js +21 -2
  548. package/dist/esm/utils/registration.d.ts +34 -2
  549. package/dist/esm/utils/registration.js +18 -2
  550. package/dist/esm/utils/rules.d.ts +81 -4
  551. package/dist/esm/utils/rules.js +39 -11
  552. package/dist/esm/utils/schema-adapter.d.ts +12 -1
  553. package/dist/esm/utils/schema-adapter.js +25 -2
  554. package/dist/esm/utils/synchronous.d.ts +60 -4
  555. package/dist/esm/utils/synchronous.js +64 -7
  556. package/dist/esm/utils/text.d.ts +15 -1
  557. package/dist/esm/utils/text.js +15 -1
  558. package/package.json +7 -3
@@ -1,39 +1,116 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ContextJournal = void 0;
4
+ /**
5
+ * Request-local journal of context-relevant execution receipts.
6
+ *
7
+ * It records what was produced (model values, tool inputs) and what came back (tool results),
8
+ * each stamped with a monotonic producer sequence so a snapshot replays in order. Values are
9
+ * deep-cloned on write and on read: a caller mutating its own object cannot retroactively
10
+ * change recorded history, and a snapshot is not a live window into the journal.
11
+ *
12
+ * This is a projection, not a persistent log store; storage and retention belong to the App.
13
+ *
14
+ * Exports: `ContextJournal` and the `ContextRecord` type.
15
+ */
4
16
  const invocation_js_1 = require("../utils/invocation.js");
5
17
  /** Request-local context projection of execution receipts; not a separate persistent log store. */
6
18
  class ContextJournal {
19
+ /** Append-only: `producerSequence` is derived from this length, so order is never rewritten. */
7
20
  records = [];
21
+ /** Duplicate invocation ids are rejected instead of overwriting earlier history. */
8
22
  invocationIds = new Set();
23
+ /** Open tool calls, so a result can only close a call that actually started. */
9
24
  toolCalls = new Map();
10
- model({ stageId, value, invocation }) {
25
+ /**
26
+ * Record one model-produced value.
27
+ *
28
+ * @param options.stageId Stage that produced the value.
29
+ * @param options.value Value to record; deep-cloned on write.
30
+ * @param options.invocation Execution identity whose `invocationId` must not be in the journal.
31
+ * @returns Nothing.
32
+ * @throws Error when the invocation id was already recorded.
33
+ */
34
+ model({ stageId, value, invocation, }) {
11
35
  if (this.invocationIds.has(invocation.invocationId))
12
36
  throw new Error('Duplicate journal invocation');
13
- this.records.push({ ...invocation, producerSequence: this.records.length + 1, occurredAtMs: Date.now(), type: 'model', stageId, value: structuredClone(value) });
37
+ this.records.push({
38
+ ...invocation,
39
+ // Derived from the append position, so the sequence stays gap-free without a counter.
40
+ producerSequence: this.records.length + 1,
41
+ occurredAtMs: Date.now(),
42
+ type: 'model',
43
+ stageId,
44
+ value: structuredClone(value),
45
+ });
14
46
  this.invocationIds.add(invocation.invocationId);
15
47
  }
48
+ /**
49
+ * Open a tool call.
50
+ *
51
+ * @param request Tool id, input and optional invocation metadata. A supplied invocation id is
52
+ * kept so Core records and the journal share one identity; otherwise a new id is generated.
53
+ * @returns The invocation id that must be used to finish the call.
54
+ * @throws Error when a call with that id is already recorded.
55
+ */
16
56
  beginTool({ toolId, input, invocation }) {
17
57
  const invocationId = invocation?.invocationId ?? (0, invocation_js_1.invocationId)();
18
58
  if (this.invocationIds.has(invocationId))
19
59
  throw new Error('Duplicate journal invocation');
20
- const record = { ...invocation, invocationId, startedAtMs: invocation?.startedAtMs ?? Date.now(), durationMs: 0, producerSequence: this.records.length + 1, occurredAtMs: Date.now(), type: 'tool', toolId, input: structuredClone(input) };
60
+ const record = {
61
+ ...invocation,
62
+ invocationId,
63
+ startedAtMs: invocation?.startedAtMs ?? Date.now(),
64
+ durationMs: 0,
65
+ producerSequence: this.records.length + 1,
66
+ occurredAtMs: Date.now(),
67
+ type: 'tool',
68
+ toolId,
69
+ input: structuredClone(input),
70
+ };
21
71
  this.records.push(record);
22
72
  this.invocationIds.add(invocationId);
23
73
  this.toolCalls.set(invocationId, { record, finished: false });
24
74
  return invocationId;
25
75
  }
76
+ /**
77
+ * Close an open tool call with its outcome.
78
+ *
79
+ * @param request Invocation id, terminal status and result value; the value is cloned into
80
+ * the record.
81
+ * @returns Nothing.
82
+ * @throws Error when the call is unknown or was already finished.
83
+ */
26
84
  finishTool({ invocationId, status, value }) {
27
85
  const entry = this.toolCalls.get(invocationId);
28
86
  if (!entry || entry.finished)
29
87
  throw new Error('Invalid tool receipt');
30
88
  const call = entry.record;
31
89
  const occurredAtMs = Date.now();
32
- this.records.push({ invocationId, runId: call.runId, spanId: call.spanId, parentSpanId: call.parentSpanId, parentInvocationId: call.parentInvocationId,
33
- startedAtMs: call.startedAtMs, durationMs: occurredAtMs - call.startedAtMs,
34
- producerSequence: this.records.length + 1, occurredAtMs, type: 'tool-result', toolId: call.toolId, status, value: structuredClone(value) });
90
+ this.records.push({
91
+ invocationId,
92
+ runId: call.runId,
93
+ spanId: call.spanId,
94
+ parentSpanId: call.parentSpanId,
95
+ parentInvocationId: call.parentInvocationId,
96
+ startedAtMs: call.startedAtMs,
97
+ durationMs: occurredAtMs - call.startedAtMs,
98
+ producerSequence: this.records.length + 1,
99
+ occurredAtMs,
100
+ type: 'tool-result',
101
+ toolId: call.toolId,
102
+ status,
103
+ value: structuredClone(value),
104
+ });
105
+ // Kept after finishing, so a repeated finish is rejected instead of appending a second
106
+ // result for the same call.
35
107
  entry.finished = true;
36
108
  }
37
- snapshot() { return structuredClone(this.records); }
109
+ /**
110
+ * @returns A detached copy of every record, safe for the caller to mutate.
111
+ */
112
+ snapshot() {
113
+ return structuredClone(this.records);
114
+ }
38
115
  }
39
116
  exports.ContextJournal = ContextJournal;
@@ -1,18 +1,46 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.assembleContextPlan = assembleContextPlan;
4
+ /**
5
+ * Assembly of a `ContextPlan`: the Core-side step between App context processing and the
6
+ * model input budget.
7
+ *
8
+ * A plan may carry trusted originals and an explicit mutation allow-list; when it does, the
9
+ * current fragments are audited before assembly. Assembly itself only validates, merges and
10
+ * measures. Reduction, grouping and model selection happen in App-side nodes before this
11
+ * point.
12
+ *
13
+ * Exports: `assembleContextPlan`.
14
+ */
4
15
  const audit_js_1 = require("./audit.js");
5
16
  const rules_js_1 = require("../utils/rules.js");
6
17
  const assembly_js_1 = require("./assembly.js");
7
18
  const fragments_js_1 = require("./fragments.js");
8
- /** Generic input assembly only. Reduction, grouping and model selection are App-side nodes. */
19
+ /**
20
+ * Build the model input for a context plan.
21
+ *
22
+ * @param plan Fragments, their budget, optional protected user messages, and the optional
23
+ * originals/allow-list used for the structural audit.
24
+ * @returns The assembled context, including appended user messages and the final character
25
+ * count that was checked against the budget.
26
+ * @throws ValidationError when the audit fails, a fragment is invalid or over its budget, or
27
+ * the combined input exceeds the budget.
28
+ * @throws Error when an additional message is not a user message.
29
+ */
9
30
  function assembleContextPlan(plan) {
31
+ // Audit first: a structural violation must surface as a policy error rather than be masked
32
+ // by a later budget or field-merge failure on fragments the plan did not allow to change.
10
33
  if (plan.originalFragments)
11
34
  (0, audit_js_1.auditContextChange)(plan.originalFragments, plan.fragments, new Set(plan.mutableFragmentIds ?? []));
12
35
  const context = (0, assembly_js_1.assembleFragments)([...plan.fragments], plan.maxInputChars);
36
+ // Detach caller-owned messages: the built context must not change if the plan object is
37
+ // reused or mutated after assembly.
13
38
  const additional = structuredClone([...(plan.additionalMessages ?? [])]);
14
- (0, rules_js_1.breakWhile)(additional.some(message => message.role !== 'user' || typeof message.content !== 'string'), 'Additional context must be user messages');
39
+ // Only user messages may be appended: the system instruction is fixed by the fragments above.
40
+ (0, rules_js_1.breakWhile)(additional.some((message) => message.role !== 'user' || typeof message.content !== 'string'), 'Additional context must be user messages');
15
41
  context.messages.push(...additional);
42
+ // The per-fragment budget already passed; this re-check covers the appended messages, which
43
+ // are outside every fragment's limit.
16
44
  context.inputChars += additional.reduce((sum, message) => sum + message.content.length, 0);
17
45
  (0, fragments_js_1.validateContextBudget)(context.inputChars, context.maxInputChars);
18
46
  return context;
@@ -1,10 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.coreEventCatalog = void 0;
4
+ /**
5
+ * Default visibility tier for every event Core can emit.
6
+ *
7
+ * The same object is the allow-list used when normalizing persisted records; adding an event to
8
+ * `CoreEventName` without a tier here fails type checking.
9
+ */
4
10
  exports.coreEventCatalog = {
5
- 'node.progress': 'metadata', 'model.start': 'metadata',
6
- 'model.binding': 'metadata', 'model.prepare': 'content', 'model.output': 'content', 'model.parsed': 'content', 'model.end': 'metadata',
11
+ 'node.progress': 'metadata',
12
+ 'model.start': 'metadata',
13
+ 'model.binding': 'metadata',
14
+ 'model.prepare': 'content',
15
+ 'model.output': 'content',
16
+ 'model.parsed': 'content',
17
+ 'model.end': 'metadata',
7
18
  'runtime.rejected': 'metadata',
8
- 'loop.event': 'metadata', 'workflow.event': 'metadata', 'tool.call': 'metadata', 'tool.result': 'metadata',
19
+ 'loop.event': 'metadata',
20
+ 'workflow.event': 'metadata',
21
+ 'tool.call': 'metadata',
22
+ 'tool.result': 'metadata',
9
23
  'rule.result': 'metadata',
10
24
  };
@@ -18,6 +18,17 @@ exports.reportedStepStatuses = exports.reportedStepStatusCatalog = void 0;
18
18
  exports.createDiagnostics = createDiagnostics;
19
19
  exports.diagnosticError = diagnosticError;
20
20
  exports.normalizeDiagnosticEvent = normalizeDiagnosticEvent;
21
+ /**
22
+ * Core diagnostics surface: one execution fact source shared by live observers and an optional
23
+ * log consumer.
24
+ *
25
+ * `createDiagnostics` configures the consumer, `diagnosticError` turns an arbitrary thrown value
26
+ * into a loggable record, and `normalizeDiagnosticEvent` re-validates a persisted record before
27
+ * it is trusted. Payload visibility comes from the event catalog, and a failing consumer never
28
+ * changes execution.
29
+ *
30
+ * Exports: the factory and helpers above, the event catalog, and the diagnostic types.
31
+ */
21
32
  const events_js_1 = require("../execution/events.js");
22
33
  const debug_js_1 = require("../structs/debug.js");
23
34
  const errors_js_1 = require("../errors.js");
@@ -29,10 +40,26 @@ __exportStar(require("./catalog.js"), exports);
29
40
  var debug_js_2 = require("../structs/debug.js");
30
41
  Object.defineProperty(exports, "reportedStepStatusCatalog", { enumerable: true, get: function () { return debug_js_2.reportedStepStatusCatalog; } });
31
42
  Object.defineProperty(exports, "reportedStepStatuses", { enumerable: true, get: function () { return debug_js_2.reportedStepStatuses; } });
32
- /** Configure the optional log consumer of the shared execution fact source. */
43
+ /**
44
+ * Configure the optional log consumer of the shared execution fact source.
45
+ *
46
+ * @param options.output Log consumer. Without it, events are still observable but not persisted.
47
+ * @param options.observe Live observer applied to this scope and every child scope.
48
+ * @param options.runId Run identity; a random id is generated when omitted.
49
+ * @param options.spanId Root span id; defaults to `run`.
50
+ * @returns A diagnostic context whose children share the run, sequence and consumers.
51
+ */
33
52
  function createDiagnostics(options = {}) {
34
53
  return (0, events_js_1.createEventScope)(options);
35
54
  }
55
+ /**
56
+ * Convert a thrown value into a plain record suitable as a log payload.
57
+ *
58
+ * @param error Any thrown value. Non-Errors are reported as `NonError` with their string form
59
+ * and no issue details.
60
+ * @returns A record with name, message, stack, code, issues and whatever boundary metadata was
61
+ * recorded. It never throws: an uninspectable value becomes `UninspectableError`.
62
+ */
36
63
  function diagnosticError(error) {
37
64
  const info = (0, errors_js_1.getErrorInfo)(error);
38
65
  let detail;
@@ -40,43 +67,96 @@ function diagnosticError(error) {
40
67
  if (!(error instanceof Error))
41
68
  return { name: 'NonError', message: String(error) };
42
69
  const { name, message, stack, code } = error;
43
- detail = { name, message, stack, code: code ?? (info.code === 'UNKNOWN_ERROR' ? undefined : info.code) };
70
+ detail = {
71
+ name,
72
+ message,
73
+ stack,
74
+ code: code ?? (info.code === 'UNKNOWN_ERROR' ? undefined : info.code),
75
+ };
44
76
  }
45
77
  catch {
46
- detail = { name: 'UninspectableError', message: 'Error details unavailable', code: info.code === 'UNKNOWN_ERROR' ? undefined : info.code };
78
+ detail = {
79
+ name: 'UninspectableError',
80
+ message: 'Error details unavailable',
81
+ code: info.code === 'UNKNOWN_ERROR' ? undefined : info.code,
82
+ };
47
83
  }
48
- return { ...detail, issues: info.issues,
84
+ return {
85
+ ...detail,
86
+ issues: info.issues,
49
87
  ...(info.stageId === undefined ? {} : { stageId: info.stageId }),
50
- ...(info.isRetryable === undefined ? {} : { isRetryable: info.isRetryable }) };
88
+ ...(info.isRetryable === undefined ? {} : { isRetryable: info.isRetryable }),
89
+ };
51
90
  }
52
- /** Validate the current envelope and return a detached record without interpreting payloads. */
91
+ /**
92
+ * Validate a persisted diagnostic record and return a detached copy.
93
+ *
94
+ * Persisted data is untrusted, so the envelope version, event type, identity, ordering and the
95
+ * bounded sub-step shape are checked; the payload itself is not interpreted. The copy is deep
96
+ * cloned, so a store cannot hand back a record that later shares structure with the caller.
97
+ *
98
+ * @param input Candidate record, typically parsed JSON from a log store.
99
+ * @returns A normalized record with `subSteps`, `subStepsDropped` and `subStepsTruncated`
100
+ * defaulted.
101
+ * @throws TypeError when the envelope, identity, node role or reported steps are invalid.
102
+ * @throws RangeError when a reported payload is too large or too deeply nested.
103
+ */
53
104
  function normalizeDiagnosticEvent(input) {
54
105
  if (!input || typeof input !== 'object')
55
106
  throw new TypeError('Invalid diagnostic record');
56
107
  const raw = input;
108
+ // The version gates the whole layout: an older record may use different fields, so it is
109
+ // rejected instead of best-effort coerced.
57
110
  if (raw.version !== 2)
58
111
  throw new TypeError('Unsupported diagnostic version');
59
112
  const { type, producerSequence, occurredAtMs } = raw;
60
- if (typeof type !== 'string' || !Object.hasOwn(catalog_js_1.coreEventCatalog, type) || typeof raw.runId !== 'string' || !raw.runId
61
- || typeof raw.spanId !== 'string' || !raw.spanId || !Number.isSafeInteger(producerSequence) || Number(producerSequence) < 1
62
- || typeof occurredAtMs !== 'number' || !Number.isFinite(occurredAtMs) || !Object.hasOwn(raw, 'payload'))
113
+ if (typeof type !== 'string' ||
114
+ !Object.hasOwn(catalog_js_1.coreEventCatalog, type) ||
115
+ typeof raw.runId !== 'string' ||
116
+ !raw.runId ||
117
+ typeof raw.spanId !== 'string' ||
118
+ !raw.spanId ||
119
+ !Number.isSafeInteger(producerSequence) ||
120
+ Number(producerSequence) < 1 ||
121
+ typeof occurredAtMs !== 'number' ||
122
+ !Number.isFinite(occurredAtMs) ||
123
+ !Object.hasOwn(raw, 'payload'))
63
124
  throw new TypeError('Invalid diagnostic envelope');
64
125
  const { eventId } = raw;
65
126
  if (typeof eventId !== 'string' || !eventId)
66
127
  throw new TypeError('Invalid diagnostic event identity');
67
128
  const steps = raw.subSteps ?? [];
68
- if (!Array.isArray(steps) || steps.length > 256 || new Set(steps.map(step => step?.stepId)).size !== steps.length
69
- || steps.some(step => !step || step.origin !== 'reported' || typeof step.stepId !== 'string' || !step.stepId.trim()
70
- || typeof step.name !== 'string' || typeof step.kind !== 'string' || !Number.isSafeInteger(step.sequence) || step.sequence < 1
71
- || (step.status !== undefined && !debug_js_1.reportedStepStatuses.includes(step.status))
72
- || ['parentStepId', 'relatedDefinitionId', 'caseId', 'summary'].some(key => step[key] !== undefined && typeof step[key] !== 'string')
73
- || (step.usedModel !== undefined && typeof step.usedModel !== 'boolean')
74
- || (step.revision !== undefined && (!Number.isSafeInteger(step.revision) || step.revision < 1 || !Number.isFinite(step.createdAtMs)))
75
- || ['createdAtMs', 'startedAtMs', 'endedAtMs'].some(key => step[key] !== undefined && (typeof step[key] !== 'number' || !Number.isFinite(step[key]) || step[key] < 0))
76
- || (step.nextStepIds !== undefined && (!Array.isArray(step.nextStepIds) || step.nextStepIds.some((id) => typeof id !== 'string'))))
77
- || (raw.subStepsDropped !== undefined && (!Number.isSafeInteger(raw.subStepsDropped) || Number(raw.subStepsDropped) < 0))
78
- || (raw.subStepsTruncated !== undefined && typeof raw.subStepsTruncated !== 'boolean'))
129
+ // The count and size bounds match what the sub-flow logger enforces, so a record produced by
130
+ // Core can never be rejected here; only hand-edited or foreign records can.
131
+ if (!Array.isArray(steps) ||
132
+ steps.length > 256 ||
133
+ new Set(steps.map((step) => step?.stepId)).size !== steps.length ||
134
+ steps.some((step) => !step ||
135
+ step.origin !== 'reported' ||
136
+ typeof step.stepId !== 'string' ||
137
+ !step.stepId.trim() ||
138
+ typeof step.name !== 'string' ||
139
+ typeof step.kind !== 'string' ||
140
+ !Number.isSafeInteger(step.sequence) ||
141
+ step.sequence < 1 ||
142
+ (step.status !== undefined && !debug_js_1.reportedStepStatuses.includes(step.status)) ||
143
+ ['parentStepId', 'relatedDefinitionId', 'caseId', 'summary'].some((key) => step[key] !== undefined && typeof step[key] !== 'string') ||
144
+ (step.usedModel !== undefined && typeof step.usedModel !== 'boolean') ||
145
+ (step.revision !== undefined &&
146
+ (!Number.isSafeInteger(step.revision) ||
147
+ step.revision < 1 ||
148
+ !Number.isFinite(step.createdAtMs))) ||
149
+ ['createdAtMs', 'startedAtMs', 'endedAtMs'].some((key) => step[key] !== undefined &&
150
+ (typeof step[key] !== 'number' || !Number.isFinite(step[key]) || step[key] < 0)) ||
151
+ (step.nextStepIds !== undefined &&
152
+ (!Array.isArray(step.nextStepIds) ||
153
+ step.nextStepIds.some((id) => typeof id !== 'string')))) ||
154
+ (raw.subStepsDropped !== undefined &&
155
+ (!Number.isSafeInteger(raw.subStepsDropped) || Number(raw.subStepsDropped) < 0)) ||
156
+ (raw.subStepsTruncated !== undefined && typeof raw.subStepsTruncated !== 'boolean'))
79
157
  throw new TypeError('Invalid reported diagnostic steps');
158
+ // Structural check only: the returned snapshot is discarded because the clone below already
159
+ // produces the detached copy kept by the normalized record.
80
160
  for (const step of steps)
81
161
  if (step.payload !== undefined)
82
162
  (0, sub_flow_js_1.payloadSnapshot)(step.payload);
@@ -84,19 +164,59 @@ function normalizeDiagnosticEvent(input) {
84
164
  (0, rules_js_1.breakWhile)(raw.usedModel !== undefined && typeof raw.usedModel !== 'boolean', () => new TypeError('Invalid reported model use'));
85
165
  if (type === 'node.progress') {
86
166
  const progress = raw.payload?.subStep;
87
- (0, rules_js_1.breakWhile)(progress !== undefined && (!progress || !['write', 'fix'].includes(progress.operation) || typeof progress.stepId !== 'string' || !progress.stepId
88
- || !Number.isSafeInteger(progress.sequence) || progress.sequence < 1 || !Number.isSafeInteger(progress.revision) || progress.revision < 1
89
- || !Number.isFinite(progress.createdAtMs) || progress.createdAtMs < 0 || !debug_js_1.reportedStepStatuses.includes(progress.status)
90
- || (progress.usedModel !== undefined && typeof progress.usedModel !== 'boolean')), () => new TypeError('Invalid reported sub-step progress'));
167
+ (0, rules_js_1.breakWhile)(progress !== undefined &&
168
+ (!progress ||
169
+ !['write', 'fix'].includes(progress.operation) ||
170
+ typeof progress.stepId !== 'string' ||
171
+ !progress.stepId ||
172
+ !Number.isSafeInteger(progress.sequence) ||
173
+ progress.sequence < 1 ||
174
+ !Number.isSafeInteger(progress.revision) ||
175
+ progress.revision < 1 ||
176
+ !Number.isFinite(progress.createdAtMs) ||
177
+ progress.createdAtMs < 0 ||
178
+ !debug_js_1.reportedStepStatuses.includes(progress.status) ||
179
+ (progress.usedModel !== undefined && typeof progress.usedModel !== 'boolean')), () => new TypeError('Invalid reported sub-step progress'));
91
180
  }
92
- for (const key of ['parentSpanId', 'invocationId', 'parentInvocationId', 'workflowInvocationId', 'workflowNodeId', 'agentId', 'branchId', 'agentVersionId', 'parentBranchId', 'parentAgentVersionId', 'forkPointId', 'definitionId', 'definitionKind', 'definitionRevision', 'nodeId', 'nodeName', 'nodeKind', 'nodeDescription', 'stageId', 'modelId']) {
181
+ for (const key of [
182
+ 'parentSpanId',
183
+ 'invocationId',
184
+ 'parentInvocationId',
185
+ 'workflowInvocationId',
186
+ 'workflowNodeId',
187
+ 'agentId',
188
+ 'branchId',
189
+ 'agentVersionId',
190
+ 'parentBranchId',
191
+ 'parentAgentVersionId',
192
+ 'forkPointId',
193
+ 'definitionId',
194
+ 'definitionKind',
195
+ 'definitionRevision',
196
+ 'nodeId',
197
+ 'nodeName',
198
+ 'nodeKind',
199
+ 'nodeDescription',
200
+ 'stageId',
201
+ 'modelId',
202
+ ]) {
93
203
  if (raw[key] !== undefined && typeof raw[key] !== 'string')
94
204
  throw new TypeError('Invalid diagnostic identity');
95
205
  }
96
- if (raw.nodeRole !== undefined && !['workflow-node', 'workflow-boundary', 'invocation', 'loop-step'].includes(String(raw.nodeRole)))
206
+ if (raw.nodeRole !== undefined &&
207
+ !['workflow-node', 'workflow-boundary', 'invocation', 'loop-step'].includes(String(raw.nodeRole)))
97
208
  throw new TypeError('Invalid diagnostic node role');
209
+ // Detached copy: the caller's object may be reused, frozen or backed by a store buffer.
98
210
  const copy = structuredClone(raw);
99
- return { ...copy, version: 2, eventId, type, producerSequence, occurredAtMs,
100
- subSteps: copy.subSteps ?? [], subStepsDropped: copy.subStepsDropped ?? 0,
101
- subStepsTruncated: copy.subStepsTruncated ?? false };
211
+ return {
212
+ ...copy,
213
+ version: 2,
214
+ eventId,
215
+ type,
216
+ producerSequence,
217
+ occurredAtMs,
218
+ subSteps: copy.subSteps ?? [],
219
+ subStepsDropped: copy.subStepsDropped ?? 0,
220
+ subStepsTruncated: copy.subStepsTruncated ?? false,
221
+ };
102
222
  }