@jangts/agent-core 0.1.1 → 0.2.0

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 (523) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/development/docs/api/reference.md +1907 -1874
  3. package/development/docs/api/support.md +27 -0
  4. package/development/skills/agent-core-app/scripts/create-app.mjs +267 -70
  5. package/development/skills/agent-core-app/scripts/lib/knowledge.mjs +40 -15
  6. package/development/skills/agent-core-app/scripts/lib/source.mjs +30 -2
  7. package/development/skills/agent-core-app/scripts/plan.mjs +37 -12
  8. package/development/skills/agent-core-app/scripts/prepare-source.mjs +61 -10
  9. package/development/skills/agent-core-app/scripts/resources.mjs +45 -17
  10. package/development/skills/agent-core-app/scripts/validate-knowledge.mjs +18 -1
  11. package/development/skills/agent-core-app/templates/catalog.json +36 -22
  12. package/dist/cjs/capabilities/index.js +13 -0
  13. package/dist/cjs/capabilities/invocation.js +80 -10
  14. package/dist/cjs/capabilities/model.js +126 -13
  15. package/dist/cjs/capabilities/tool-runtime.js +64 -12
  16. package/dist/cjs/capabilities/tools.js +266 -31
  17. package/dist/cjs/context/assembly.js +46 -5
  18. package/dist/cjs/context/audit.js +31 -6
  19. package/dist/cjs/context/fragments.js +54 -11
  20. package/dist/cjs/context/index.js +12 -0
  21. package/dist/cjs/context/journal.js +84 -7
  22. package/dist/cjs/context/plan.js +30 -2
  23. package/dist/cjs/diagnostics/catalog.js +11 -3
  24. package/dist/cjs/diagnostics/index.js +149 -29
  25. package/dist/cjs/diagnostics/sub-flow.js +240 -40
  26. package/dist/cjs/errors.js +99 -17
  27. package/dist/cjs/execution/branch.js +20 -4
  28. package/dist/cjs/execution/engine.js +470 -56
  29. package/dist/cjs/execution/events.js +136 -18
  30. package/dist/cjs/execution/index.js +7 -0
  31. package/dist/cjs/execution/reporting.js +75 -6
  32. package/dist/cjs/execution/state.js +161 -22
  33. package/dist/cjs/execution/workflow.js +224 -32
  34. package/dist/cjs/index.js +18 -0
  35. package/dist/cjs/kits/aggregation.js +45 -3
  36. package/dist/cjs/kits/answering/batch.js +23 -4
  37. package/dist/cjs/kits/answering/check-result.js +31 -8
  38. package/dist/cjs/kits/answering/checks.js +24 -3
  39. package/dist/cjs/kits/answering/flow.js +192 -36
  40. package/dist/cjs/kits/answering/index.js +19 -1
  41. package/dist/cjs/kits/answering/tasks.js +88 -13
  42. package/dist/cjs/kits/artifacts.js +36 -4
  43. package/dist/cjs/kits/candidates.js +47 -5
  44. package/dist/cjs/kits/delivery.js +40 -5
  45. package/dist/cjs/kits/durable.js +155 -31
  46. package/dist/cjs/kits/evidence.js +66 -15
  47. package/dist/cjs/kits/family.js +152 -22
  48. package/dist/cjs/kits/index.js +12 -1
  49. package/dist/cjs/kits/inference.js +104 -16
  50. package/dist/cjs/kits/intents/catalog.js +67 -16
  51. package/dist/cjs/kits/intents/index.js +11 -0
  52. package/dist/cjs/kits/intents/registry.js +188 -43
  53. package/dist/cjs/kits/intents/scopes.js +215 -46
  54. package/dist/cjs/kits/interaction/command.js +140 -36
  55. package/dist/cjs/kits/interaction/commands.js +86 -11
  56. package/dist/cjs/kits/interaction/handlers.js +27 -10
  57. package/dist/cjs/kits/interaction/index.js +10 -0
  58. package/dist/cjs/kits/interaction/transfer.js +80 -14
  59. package/dist/cjs/kits/knowledge/catalog.js +62 -11
  60. package/dist/cjs/kits/knowledge/index.js +16 -1
  61. package/dist/cjs/kits/knowledge/publication.js +99 -23
  62. package/dist/cjs/kits/knowledge/sections.js +33 -4
  63. package/dist/cjs/kits/normalization.js +51 -7
  64. package/dist/cjs/kits/policies.js +79 -15
  65. package/dist/cjs/kits/presentation/events.js +54 -10
  66. package/dist/cjs/kits/presentation/index.js +24 -1
  67. package/dist/cjs/kits/presentation/outputs.js +176 -38
  68. package/dist/cjs/kits/presentation/templates.js +33 -5
  69. package/dist/cjs/kits/presentation/variants.js +31 -2
  70. package/dist/cjs/kits/projection.js +63 -8
  71. package/dist/cjs/kits/rank-fusion.js +27 -4
  72. package/dist/cjs/kits/reflection-log-source.js +89 -16
  73. package/dist/cjs/kits/reflection.js +234 -60
  74. package/dist/cjs/kits/retrieval.js +98 -18
  75. package/dist/cjs/kits/search.js +180 -27
  76. package/dist/cjs/kits/text-skills.js +104 -19
  77. package/dist/cjs/kits/tools.js +415 -74
  78. package/dist/cjs/kits/vector-search.js +50 -16
  79. package/dist/cjs/mock/node.js +7 -1
  80. package/dist/cjs/mock/web.js +7 -1
  81. package/dist/cjs/mock.js +7 -1
  82. package/dist/cjs/model/binding.js +68 -17
  83. package/dist/cjs/model/call-budget.js +45 -4
  84. package/dist/cjs/model/decision-retry.js +19 -1
  85. package/dist/cjs/model/defaults.js +27 -4
  86. package/dist/cjs/model/index.js +7 -0
  87. package/dist/cjs/model/interactions/arguments.js +36 -1
  88. package/dist/cjs/model/interactions/json-object.js +48 -12
  89. package/dist/cjs/model/interactions/native-functions.js +52 -10
  90. package/dist/cjs/model/message-diagnostics.js +17 -4
  91. package/dist/cjs/model/options.js +9 -1
  92. package/dist/cjs/model/preparation.js +86 -12
  93. package/dist/cjs/model/runner.js +413 -79
  94. package/dist/cjs/model/selection-transport.js +48 -8
  95. package/dist/cjs/model/settings.js +67 -13
  96. package/dist/cjs/model/token-budget.js +69 -11
  97. package/dist/cjs/model/transports.js +59 -6
  98. package/dist/cjs/structs/common.js +11 -0
  99. package/dist/cjs/structs/debug.js +34 -5
  100. package/dist/cjs/structs/errors.js +26 -1
  101. package/dist/cjs/structs/index.js +11 -1
  102. package/dist/cjs/structs/kits/durable.js +7 -0
  103. package/dist/cjs/structs/kits/family.js +1 -0
  104. package/dist/cjs/structs/kits/interaction.js +8 -1
  105. package/dist/cjs/structs/kits/knowledge-publication.js +1 -0
  106. package/dist/cjs/structs/kits/reflection.js +18 -3
  107. package/dist/cjs/structs/model/chat-provider.js +6 -0
  108. package/dist/cjs/structs/support/model/completion.js +2 -0
  109. package/dist/cjs/structs/support/model/messages.js +2 -0
  110. package/dist/cjs/support/capabilities.js +43 -6
  111. package/dist/cjs/support/context/assembly.js +88 -16
  112. package/dist/cjs/support/context/compression.js +48 -6
  113. package/dist/cjs/support/context/fragments.js +6 -0
  114. package/dist/cjs/support/context/history.js +36 -1
  115. package/dist/cjs/support/context/index.js +11 -0
  116. package/dist/cjs/support/context/nodes.js +164 -35
  117. package/dist/cjs/support/context/processing.js +319 -61
  118. package/dist/cjs/support/context/selection-policy.js +98 -21
  119. package/dist/cjs/support/context/selection.js +61 -10
  120. package/dist/cjs/support/context/snapshot.js +29 -7
  121. package/dist/cjs/support/context/strategies.js +120 -28
  122. package/dist/cjs/support/index.js +9 -1
  123. package/dist/cjs/support/model/capabilities.js +20 -1
  124. package/dist/cjs/support/model/chat-completions.js +92 -20
  125. package/dist/cjs/support/model/children.js +34 -6
  126. package/dist/cjs/support/model/compatible-provider.js +189 -59
  127. package/dist/cjs/support/model/completion/calls.js +61 -0
  128. package/dist/cjs/support/model/completion/default.js +32 -0
  129. package/dist/cjs/support/model/completion/index.js +28 -0
  130. package/dist/cjs/support/model/completion/session.js +102 -0
  131. package/dist/cjs/support/model/index.js +12 -0
  132. package/dist/cjs/support/model/interactions/index.js +12 -1
  133. package/dist/cjs/support/model/interactions/json-object.js +6 -0
  134. package/dist/cjs/support/model/interactions/native-functions.js +6 -0
  135. package/dist/cjs/support/model/observer.js +32 -6
  136. package/dist/cjs/support/model/preview-rules.js +66 -16
  137. package/dist/cjs/support/model/reply-preview.js +77 -17
  138. package/dist/cjs/support/model/stage-transport.js +33 -7
  139. package/dist/cjs/support/model/strategies.js +75 -14
  140. package/dist/cjs/support/model/transports.js +53 -11
  141. package/dist/cjs/support/registration.js +49 -7
  142. package/dist/cjs/support/schema.js +46 -4
  143. package/dist/cjs/support/stream-events.js +60 -8
  144. package/dist/cjs/support/tool-runtime.js +6 -0
  145. package/dist/cjs/support/tools.js +79 -10
  146. package/dist/cjs/support/transport/index.js +7 -0
  147. package/dist/cjs/support/transport/json.js +28 -4
  148. package/dist/cjs/support/transport/sse.js +25 -2
  149. package/dist/cjs/utils/break-observer.js +20 -2
  150. package/dist/cjs/utils/cancellation.js +77 -9
  151. package/dist/cjs/utils/catalog.js +19 -4
  152. package/dist/cjs/utils/debug.js +14 -2
  153. package/dist/cjs/utils/index.js +8 -0
  154. package/dist/cjs/utils/interaction-definition.js +26 -6
  155. package/dist/cjs/utils/invocation.js +42 -4
  156. package/dist/cjs/utils/model-protocol.js +20 -1
  157. package/dist/cjs/utils/object.js +16 -0
  158. package/dist/cjs/utils/observer.js +22 -2
  159. package/dist/cjs/utils/protocol-registry.js +47 -4
  160. package/dist/cjs/utils/query-key.js +21 -2
  161. package/dist/cjs/utils/registration.js +18 -2
  162. package/dist/cjs/utils/rules.js +39 -11
  163. package/dist/cjs/utils/schema-adapter.js +25 -2
  164. package/dist/cjs/utils/synchronous.js +64 -7
  165. package/dist/cjs/utils/text.js +15 -1
  166. package/dist/esm/capabilities/index.d.ts +13 -0
  167. package/dist/esm/capabilities/index.js +13 -0
  168. package/dist/esm/capabilities/invocation.d.ts +16 -2
  169. package/dist/esm/capabilities/invocation.js +80 -10
  170. package/dist/esm/capabilities/model.d.ts +68 -1
  171. package/dist/esm/capabilities/model.js +126 -13
  172. package/dist/esm/capabilities/tool-runtime.d.ts +11 -0
  173. package/dist/esm/capabilities/tool-runtime.js +64 -12
  174. package/dist/esm/capabilities/tools.d.ts +96 -3
  175. package/dist/esm/capabilities/tools.js +267 -32
  176. package/dist/esm/context/assembly.d.ts +13 -2
  177. package/dist/esm/context/assembly.js +46 -5
  178. package/dist/esm/context/audit.d.ts +23 -1
  179. package/dist/esm/context/audit.js +31 -6
  180. package/dist/esm/context/fragments.d.ts +37 -3
  181. package/dist/esm/context/fragments.js +54 -11
  182. package/dist/esm/context/index.d.ts +12 -0
  183. package/dist/esm/context/index.js +12 -0
  184. package/dist/esm/context/journal.d.ts +32 -1
  185. package/dist/esm/context/journal.js +84 -7
  186. package/dist/esm/context/plan.d.ts +11 -1
  187. package/dist/esm/context/plan.js +30 -2
  188. package/dist/esm/diagnostics/catalog.js +11 -3
  189. package/dist/esm/diagnostics/index.d.ts +30 -2
  190. package/dist/esm/diagnostics/index.js +149 -29
  191. package/dist/esm/diagnostics/sub-flow.d.ts +41 -3
  192. package/dist/esm/diagnostics/sub-flow.js +240 -40
  193. package/dist/esm/errors.d.ts +22 -2
  194. package/dist/esm/errors.js +99 -17
  195. package/dist/esm/execution/branch.d.ts +19 -1
  196. package/dist/esm/execution/branch.js +20 -4
  197. package/dist/esm/execution/engine.d.ts +291 -5
  198. package/dist/esm/execution/engine.js +471 -57
  199. package/dist/esm/execution/events.d.ts +16 -2
  200. package/dist/esm/execution/events.js +136 -18
  201. package/dist/esm/execution/index.d.ts +7 -0
  202. package/dist/esm/execution/index.js +7 -0
  203. package/dist/esm/execution/reporting.d.ts +49 -1
  204. package/dist/esm/execution/reporting.js +75 -6
  205. package/dist/esm/execution/state.d.ts +126 -10
  206. package/dist/esm/execution/state.js +161 -22
  207. package/dist/esm/execution/workflow.d.ts +121 -3
  208. package/dist/esm/execution/workflow.js +224 -32
  209. package/dist/esm/index.d.ts +17 -1
  210. package/dist/esm/index.js +18 -0
  211. package/dist/esm/kits/aggregation.d.ts +34 -2
  212. package/dist/esm/kits/aggregation.js +45 -3
  213. package/dist/esm/kits/answering/batch.d.ts +17 -0
  214. package/dist/esm/kits/answering/batch.js +23 -4
  215. package/dist/esm/kits/answering/check-result.d.ts +18 -1
  216. package/dist/esm/kits/answering/check-result.js +31 -8
  217. package/dist/esm/kits/answering/checks.d.ts +11 -0
  218. package/dist/esm/kits/answering/checks.js +24 -3
  219. package/dist/esm/kits/answering/flow.d.ts +25 -2
  220. package/dist/esm/kits/answering/flow.js +192 -36
  221. package/dist/esm/kits/answering/index.d.ts +12 -0
  222. package/dist/esm/kits/answering/index.js +19 -1
  223. package/dist/esm/kits/answering/tasks.d.ts +32 -1
  224. package/dist/esm/kits/answering/tasks.js +88 -13
  225. package/dist/esm/kits/artifacts.d.ts +11 -0
  226. package/dist/esm/kits/artifacts.js +36 -4
  227. package/dist/esm/kits/candidates.d.ts +23 -1
  228. package/dist/esm/kits/candidates.js +47 -5
  229. package/dist/esm/kits/delivery.d.ts +34 -0
  230. package/dist/esm/kits/delivery.js +40 -5
  231. package/dist/esm/kits/durable.d.ts +19 -0
  232. package/dist/esm/kits/durable.js +155 -31
  233. package/dist/esm/kits/evidence.d.ts +28 -5
  234. package/dist/esm/kits/evidence.js +66 -15
  235. package/dist/esm/kits/family.d.ts +17 -1
  236. package/dist/esm/kits/family.js +152 -22
  237. package/dist/esm/kits/index.d.ts +12 -1
  238. package/dist/esm/kits/index.js +12 -1
  239. package/dist/esm/kits/inference.d.ts +64 -0
  240. package/dist/esm/kits/inference.js +104 -16
  241. package/dist/esm/kits/intents/catalog.d.ts +13 -1
  242. package/dist/esm/kits/intents/catalog.js +67 -16
  243. package/dist/esm/kits/intents/index.d.ts +11 -0
  244. package/dist/esm/kits/intents/index.js +11 -0
  245. package/dist/esm/kits/intents/registry.d.ts +61 -3
  246. package/dist/esm/kits/intents/registry.js +188 -43
  247. package/dist/esm/kits/intents/scopes.d.ts +73 -3
  248. package/dist/esm/kits/intents/scopes.js +215 -46
  249. package/dist/esm/kits/interaction/command.d.ts +38 -4
  250. package/dist/esm/kits/interaction/command.js +140 -36
  251. package/dist/esm/kits/interaction/commands.d.ts +66 -2
  252. package/dist/esm/kits/interaction/commands.js +86 -11
  253. package/dist/esm/kits/interaction/handlers.d.ts +19 -2
  254. package/dist/esm/kits/interaction/handlers.js +27 -10
  255. package/dist/esm/kits/interaction/index.d.ts +10 -0
  256. package/dist/esm/kits/interaction/index.js +10 -0
  257. package/dist/esm/kits/interaction/transfer.d.ts +39 -2
  258. package/dist/esm/kits/interaction/transfer.js +80 -14
  259. package/dist/esm/kits/knowledge/catalog.d.ts +13 -0
  260. package/dist/esm/kits/knowledge/catalog.js +62 -11
  261. package/dist/esm/kits/knowledge/index.d.ts +11 -0
  262. package/dist/esm/kits/knowledge/index.js +16 -1
  263. package/dist/esm/kits/knowledge/publication.d.ts +15 -1
  264. package/dist/esm/kits/knowledge/publication.js +99 -23
  265. package/dist/esm/kits/knowledge/sections.d.ts +31 -1
  266. package/dist/esm/kits/knowledge/sections.js +33 -4
  267. package/dist/esm/kits/normalization.d.ts +25 -2
  268. package/dist/esm/kits/normalization.js +51 -7
  269. package/dist/esm/kits/policies.d.ts +26 -3
  270. package/dist/esm/kits/policies.js +79 -15
  271. package/dist/esm/kits/presentation/events.d.ts +51 -4
  272. package/dist/esm/kits/presentation/events.js +54 -10
  273. package/dist/esm/kits/presentation/index.d.ts +12 -0
  274. package/dist/esm/kits/presentation/index.js +25 -2
  275. package/dist/esm/kits/presentation/outputs.d.ts +30 -1
  276. package/dist/esm/kits/presentation/outputs.js +176 -38
  277. package/dist/esm/kits/presentation/templates.d.ts +32 -3
  278. package/dist/esm/kits/presentation/templates.js +33 -5
  279. package/dist/esm/kits/presentation/variants.d.ts +29 -0
  280. package/dist/esm/kits/presentation/variants.js +31 -2
  281. package/dist/esm/kits/projection.d.ts +42 -5
  282. package/dist/esm/kits/projection.js +63 -8
  283. package/dist/esm/kits/rank-fusion.d.ts +21 -1
  284. package/dist/esm/kits/rank-fusion.js +28 -5
  285. package/dist/esm/kits/reflection-log-source.d.ts +28 -1
  286. package/dist/esm/kits/reflection-log-source.js +89 -16
  287. package/dist/esm/kits/reflection.d.ts +17 -1
  288. package/dist/esm/kits/reflection.js +235 -61
  289. package/dist/esm/kits/retrieval.d.ts +18 -2
  290. package/dist/esm/kits/retrieval.js +98 -18
  291. package/dist/esm/kits/search.d.ts +56 -3
  292. package/dist/esm/kits/search.js +180 -27
  293. package/dist/esm/kits/text-skills.d.ts +16 -2
  294. package/dist/esm/kits/text-skills.js +104 -19
  295. package/dist/esm/kits/tools.d.ts +122 -2
  296. package/dist/esm/kits/tools.js +416 -74
  297. package/dist/esm/kits/vector-search.d.ts +47 -1
  298. package/dist/esm/kits/vector-search.js +51 -17
  299. package/dist/esm/mock/node.d.ts +7 -0
  300. package/dist/esm/mock/node.js +7 -1
  301. package/dist/esm/mock/web.d.ts +7 -0
  302. package/dist/esm/mock/web.js +7 -1
  303. package/dist/esm/mock.d.ts +7 -0
  304. package/dist/esm/mock.js +7 -1
  305. package/dist/esm/model/binding.d.ts +32 -3
  306. package/dist/esm/model/binding.js +68 -17
  307. package/dist/esm/model/call-budget.d.ts +30 -2
  308. package/dist/esm/model/call-budget.js +45 -4
  309. package/dist/esm/model/decision-retry.d.ts +10 -1
  310. package/dist/esm/model/decision-retry.js +19 -1
  311. package/dist/esm/model/defaults.d.ts +13 -2
  312. package/dist/esm/model/defaults.js +27 -4
  313. package/dist/esm/model/index.d.ts +7 -0
  314. package/dist/esm/model/index.js +7 -0
  315. package/dist/esm/model/interactions/arguments.d.ts +27 -0
  316. package/dist/esm/model/interactions/arguments.js +36 -1
  317. package/dist/esm/model/interactions/json-object.d.ts +7 -1
  318. package/dist/esm/model/interactions/json-object.js +48 -12
  319. package/dist/esm/model/interactions/native-functions.d.ts +6 -0
  320. package/dist/esm/model/interactions/native-functions.js +52 -10
  321. package/dist/esm/model/message-diagnostics.d.ts +17 -1
  322. package/dist/esm/model/message-diagnostics.js +17 -4
  323. package/dist/esm/model/options.d.ts +18 -1
  324. package/dist/esm/model/options.js +9 -1
  325. package/dist/esm/model/preparation.d.ts +30 -2
  326. package/dist/esm/model/preparation.js +86 -12
  327. package/dist/esm/model/runner.d.ts +129 -5
  328. package/dist/esm/model/runner.js +414 -80
  329. package/dist/esm/model/selection-transport.d.ts +14 -1
  330. package/dist/esm/model/selection-transport.js +48 -8
  331. package/dist/esm/model/settings.d.ts +11 -0
  332. package/dist/esm/model/settings.js +67 -13
  333. package/dist/esm/model/token-budget.d.ts +59 -1
  334. package/dist/esm/model/token-budget.js +69 -11
  335. package/dist/esm/model/transports.d.ts +20 -2
  336. package/dist/esm/model/transports.js +59 -6
  337. package/dist/esm/structs/capabilities/invocation.d.ts +36 -0
  338. package/dist/esm/structs/capabilities/model.d.ts +27 -0
  339. package/dist/esm/structs/capabilities/tools.d.ts +38 -0
  340. package/dist/esm/structs/common.d.ts +62 -2
  341. package/dist/esm/structs/common.js +11 -0
  342. package/dist/esm/structs/context/fragments.d.ts +28 -0
  343. package/dist/esm/structs/context/journal.d.ts +28 -3
  344. package/dist/esm/structs/context/processing.d.ts +11 -0
  345. package/dist/esm/structs/debug.d.ts +58 -1
  346. package/dist/esm/structs/debug.js +34 -5
  347. package/dist/esm/structs/diagnostics.d.ts +119 -1
  348. package/dist/esm/structs/errors.d.ts +42 -1
  349. package/dist/esm/structs/errors.js +26 -1
  350. package/dist/esm/structs/execution/engine.d.ts +24 -1
  351. package/dist/esm/structs/execution/events.d.ts +12 -0
  352. package/dist/esm/structs/execution/workflow.d.ts +71 -0
  353. package/dist/esm/structs/index.d.ts +11 -1
  354. package/dist/esm/structs/index.js +11 -1
  355. package/dist/esm/structs/invocation.d.ts +30 -0
  356. package/dist/esm/structs/kits/aggregation.d.ts +12 -0
  357. package/dist/esm/structs/kits/answering/checks.d.ts +11 -0
  358. package/dist/esm/structs/kits/answering/flow.d.ts +35 -1
  359. package/dist/esm/structs/kits/answering/state.d.ts +21 -0
  360. package/dist/esm/structs/kits/answering/tasks.d.ts +21 -0
  361. package/dist/esm/structs/kits/artifacts.d.ts +14 -0
  362. package/dist/esm/structs/kits/candidates.d.ts +19 -0
  363. package/dist/esm/structs/kits/delivery.d.ts +22 -0
  364. package/dist/esm/structs/kits/durable.d.ts +56 -3
  365. package/dist/esm/structs/kits/durable.js +7 -0
  366. package/dist/esm/structs/kits/evidence.d.ts +23 -0
  367. package/dist/esm/structs/kits/family.d.ts +49 -1
  368. package/dist/esm/structs/kits/family.js +1 -0
  369. package/dist/esm/structs/kits/intents/catalog.d.ts +26 -0
  370. package/dist/esm/structs/kits/intents/registry.d.ts +34 -0
  371. package/dist/esm/structs/kits/intents/scopes.d.ts +36 -1
  372. package/dist/esm/structs/kits/interaction.d.ts +64 -0
  373. package/dist/esm/structs/kits/interaction.js +8 -1
  374. package/dist/esm/structs/kits/knowledge-publication.d.ts +43 -1
  375. package/dist/esm/structs/kits/knowledge-publication.js +1 -0
  376. package/dist/esm/structs/kits/knowledge.d.ts +39 -2
  377. package/dist/esm/structs/kits/normalization.d.ts +15 -0
  378. package/dist/esm/structs/kits/policies.d.ts +25 -1
  379. package/dist/esm/structs/kits/presentation/events.d.ts +28 -4
  380. package/dist/esm/structs/kits/presentation/outputs.d.ts +38 -1
  381. package/dist/esm/structs/kits/presentation/templates.d.ts +15 -0
  382. package/dist/esm/structs/kits/projection.d.ts +21 -0
  383. package/dist/esm/structs/kits/reflection.d.ts +61 -2
  384. package/dist/esm/structs/kits/reflection.js +18 -3
  385. package/dist/esm/structs/kits/retrieval.d.ts +38 -0
  386. package/dist/esm/structs/kits/search.d.ts +22 -0
  387. package/dist/esm/structs/kits/text-skills.d.ts +36 -0
  388. package/dist/esm/structs/kits/tools.d.ts +87 -0
  389. package/dist/esm/structs/model/chat-provider.d.ts +24 -1
  390. package/dist/esm/structs/model/chat-provider.js +6 -0
  391. package/dist/esm/structs/model/interactions.d.ts +38 -0
  392. package/dist/esm/structs/model/messages.d.ts +30 -0
  393. package/dist/esm/structs/model/runtime.d.ts +104 -6
  394. package/dist/esm/structs/support/capabilities.d.ts +19 -2
  395. package/dist/esm/structs/support/context-processing.d.ts +88 -9
  396. package/dist/esm/structs/support/context.d.ts +29 -1
  397. package/dist/esm/structs/support/model/completion.d.ts +50 -0
  398. package/dist/esm/structs/support/model/completion.js +1 -0
  399. package/dist/esm/structs/support/model/interactions.d.ts +13 -1
  400. package/dist/esm/structs/support/model/messages.d.ts +52 -0
  401. package/dist/esm/structs/support/model/messages.js +1 -0
  402. package/dist/esm/structs/support/model/provider-observer.d.ts +22 -1
  403. package/dist/esm/structs/support/model/provider.d.ts +71 -6
  404. package/dist/esm/structs/support/registration.d.ts +13 -0
  405. package/dist/esm/structs/support/schema.d.ts +14 -0
  406. package/dist/esm/structs/support/tools.d.ts +28 -0
  407. package/dist/esm/structs/support/transport/json.d.ts +16 -0
  408. package/dist/esm/structs/support/transport/sse.d.ts +15 -0
  409. package/dist/esm/structs/utils/rules.d.ts +19 -0
  410. package/dist/esm/support/capabilities.d.ts +25 -2
  411. package/dist/esm/support/capabilities.js +43 -6
  412. package/dist/esm/support/context/assembly.d.ts +35 -4
  413. package/dist/esm/support/context/assembly.js +88 -16
  414. package/dist/esm/support/context/compression.d.ts +17 -1
  415. package/dist/esm/support/context/compression.js +48 -6
  416. package/dist/esm/support/context/fragments.d.ts +6 -0
  417. package/dist/esm/support/context/fragments.js +6 -0
  418. package/dist/esm/support/context/history.d.ts +43 -0
  419. package/dist/esm/support/context/history.js +36 -1
  420. package/dist/esm/support/context/index.d.ts +13 -2
  421. package/dist/esm/support/context/index.js +12 -1
  422. package/dist/esm/support/context/nodes.d.ts +49 -3
  423. package/dist/esm/support/context/nodes.js +165 -36
  424. package/dist/esm/support/context/processing.d.ts +145 -1
  425. package/dist/esm/support/context/processing.js +320 -62
  426. package/dist/esm/support/context/selection-policy.d.ts +42 -2
  427. package/dist/esm/support/context/selection-policy.js +98 -21
  428. package/dist/esm/support/context/selection.d.ts +14 -1
  429. package/dist/esm/support/context/selection.js +61 -10
  430. package/dist/esm/support/context/snapshot.d.ts +23 -1
  431. package/dist/esm/support/context/snapshot.js +29 -7
  432. package/dist/esm/support/context/strategies.d.ts +35 -2
  433. package/dist/esm/support/context/strategies.js +120 -28
  434. package/dist/esm/support/index.d.ts +9 -1
  435. package/dist/esm/support/index.js +9 -1
  436. package/dist/esm/support/model/capabilities.d.ts +10 -0
  437. package/dist/esm/support/model/capabilities.js +20 -1
  438. package/dist/esm/support/model/chat-completions.d.ts +44 -15
  439. package/dist/esm/support/model/chat-completions.js +92 -20
  440. package/dist/esm/support/model/children.d.ts +32 -2
  441. package/dist/esm/support/model/children.js +34 -6
  442. package/dist/esm/support/model/compatible-provider.d.ts +29 -3
  443. package/dist/esm/support/model/compatible-provider.js +190 -60
  444. package/dist/esm/support/model/completion/calls.d.ts +40 -0
  445. package/dist/esm/support/model/completion/calls.js +58 -0
  446. package/dist/esm/support/model/completion/default.d.ts +10 -0
  447. package/dist/esm/support/model/completion/default.js +29 -0
  448. package/dist/esm/support/model/completion/index.d.ts +10 -0
  449. package/dist/esm/support/model/completion/index.js +22 -0
  450. package/dist/esm/support/model/completion/session.d.ts +11 -0
  451. package/dist/esm/support/model/completion/session.js +99 -0
  452. package/dist/esm/support/model/index.d.ts +14 -0
  453. package/dist/esm/support/model/index.js +12 -0
  454. package/dist/esm/support/model/interactions/index.d.ts +1 -1
  455. package/dist/esm/support/model/interactions/index.js +12 -1
  456. package/dist/esm/support/model/interactions/json-object.d.ts +6 -0
  457. package/dist/esm/support/model/interactions/json-object.js +6 -0
  458. package/dist/esm/support/model/interactions/native-functions.d.ts +6 -0
  459. package/dist/esm/support/model/interactions/native-functions.js +6 -0
  460. package/dist/esm/support/model/observer.d.ts +25 -2
  461. package/dist/esm/support/model/observer.js +32 -6
  462. package/dist/esm/support/model/preview-rules.d.ts +20 -2
  463. package/dist/esm/support/model/preview-rules.js +66 -16
  464. package/dist/esm/support/model/reply-preview.d.ts +15 -1
  465. package/dist/esm/support/model/reply-preview.js +77 -17
  466. package/dist/esm/support/model/stage-transport.d.ts +9 -1
  467. package/dist/esm/support/model/stage-transport.js +33 -7
  468. package/dist/esm/support/model/strategies.d.ts +24 -2
  469. package/dist/esm/support/model/strategies.js +75 -14
  470. package/dist/esm/support/model/transports.d.ts +17 -1
  471. package/dist/esm/support/model/transports.js +53 -11
  472. package/dist/esm/support/registration.d.ts +20 -1
  473. package/dist/esm/support/registration.js +49 -7
  474. package/dist/esm/support/schema.d.ts +31 -1
  475. package/dist/esm/support/schema.js +46 -4
  476. package/dist/esm/support/stream-events.d.ts +22 -1
  477. package/dist/esm/support/stream-events.js +60 -8
  478. package/dist/esm/support/tool-runtime.d.ts +6 -0
  479. package/dist/esm/support/tool-runtime.js +6 -0
  480. package/dist/esm/support/tools.d.ts +22 -0
  481. package/dist/esm/support/tools.js +79 -10
  482. package/dist/esm/support/transport/index.d.ts +7 -0
  483. package/dist/esm/support/transport/index.js +7 -0
  484. package/dist/esm/support/transport/json.d.ts +29 -2
  485. package/dist/esm/support/transport/json.js +28 -4
  486. package/dist/esm/support/transport/sse.d.ts +31 -1
  487. package/dist/esm/support/transport/sse.js +25 -2
  488. package/dist/esm/types.d.ts +9 -1
  489. package/dist/esm/utils/break-observer.d.ts +27 -2
  490. package/dist/esm/utils/break-observer.js +20 -2
  491. package/dist/esm/utils/cancellation.d.ts +56 -5
  492. package/dist/esm/utils/cancellation.js +77 -9
  493. package/dist/esm/utils/catalog.d.ts +20 -1
  494. package/dist/esm/utils/catalog.js +19 -4
  495. package/dist/esm/utils/debug.d.ts +20 -1
  496. package/dist/esm/utils/debug.js +14 -2
  497. package/dist/esm/utils/index.d.ts +8 -0
  498. package/dist/esm/utils/index.js +8 -0
  499. package/dist/esm/utils/interaction-definition.d.ts +18 -1
  500. package/dist/esm/utils/interaction-definition.js +26 -6
  501. package/dist/esm/utils/invocation.d.ts +36 -1
  502. package/dist/esm/utils/invocation.js +42 -4
  503. package/dist/esm/utils/model-protocol.d.ts +8 -0
  504. package/dist/esm/utils/model-protocol.js +20 -1
  505. package/dist/esm/utils/object.d.ts +16 -0
  506. package/dist/esm/utils/object.js +16 -0
  507. package/dist/esm/utils/observer.d.ts +19 -1
  508. package/dist/esm/utils/observer.js +22 -2
  509. package/dist/esm/utils/protocol-registry.d.ts +38 -1
  510. package/dist/esm/utils/protocol-registry.js +47 -4
  511. package/dist/esm/utils/query-key.d.ts +11 -1
  512. package/dist/esm/utils/query-key.js +21 -2
  513. package/dist/esm/utils/registration.d.ts +34 -2
  514. package/dist/esm/utils/registration.js +18 -2
  515. package/dist/esm/utils/rules.d.ts +81 -4
  516. package/dist/esm/utils/rules.js +39 -11
  517. package/dist/esm/utils/schema-adapter.d.ts +12 -1
  518. package/dist/esm/utils/schema-adapter.js +25 -2
  519. package/dist/esm/utils/synchronous.d.ts +60 -4
  520. package/dist/esm/utils/synchronous.js +64 -7
  521. package/dist/esm/utils/text.d.ts +15 -1
  522. package/dist/esm/utils/text.js +15 -1
  523. package/package.json +3 -2
@@ -5,30 +5,73 @@ exports.validateContextFragment = validateContextFragment;
5
5
  exports.validateContextBudget = validateContextBudget;
6
6
  const errors_js_1 = require("../structs/errors.js");
7
7
  const rules_js_1 = require("../utils/rules.js");
8
- /** Validate one fragment before formatting. The shared set preserves registration order. */
8
+ /**
9
+ * Validate one fragment and return the text it contributes to the model input.
10
+ *
11
+ * @param fragment Declaration to check.
12
+ * @param ids Optional accumulator of ids already seen. Callers validating a batch pass the
13
+ * same set for every fragment so duplicates are detected across the whole input.
14
+ * @param checkBudget Whether this fragment's own `maxChars` is enforced. Disable only when the
15
+ * same serialized text has already been checked against the identical limit.
16
+ * @returns The exact text the fragment contributes: the value when it is a string, otherwise
17
+ * the JSON form used for structured fields.
18
+ * @throws Error when identity, trust, lifetime, role, the `maxChars` declaration or the value
19
+ * shape is invalid, or when untrusted content is declared as a system instruction.
20
+ * @throws ValidationError when the serialized text exceeds `maxChars`; text is never truncated.
21
+ */
9
22
  function validateContextFragment(fragment, ids = new Set(), checkBudget = true) {
10
- if (!/^[a-z][a-zA-Z0-9:._-]*$/.test(fragment.id) || ids.has(fragment.id) || !fragment.sourceId
11
- || !['instruction', 'server', 'user', 'tool'].includes(fragment.trust)
12
- || !['configuration', 'turn', 'step'].includes(fragment.lifetime) || !['system', 'user'].includes(fragment.role)
13
- || !Number.isSafeInteger(fragment.maxChars) || fragment.maxChars < 1)
23
+ // Ids are stable keys in usage records and protected-context errors, so they start with a
24
+ // lowercase letter and admit only characters that are safe in both positions.
25
+ if (!/^[a-z][a-zA-Z0-9:._-]*$/.test(fragment.id) ||
26
+ ids.has(fragment.id) ||
27
+ !fragment.sourceId ||
28
+ !['instruction', 'server', 'user', 'tool'].includes(fragment.trust) ||
29
+ !['configuration', 'turn', 'step'].includes(fragment.lifetime) ||
30
+ !['system', 'user'].includes(fragment.role) ||
31
+ !Number.isSafeInteger(fragment.maxChars) ||
32
+ fragment.maxChars < 1)
14
33
  throw new Error('Invalid context fragment');
34
+ // Consumed before the later checks: a failed fragment must not leave its id reusable by a
35
+ // retry through the same accumulator.
15
36
  ids.add(fragment.id);
16
- if (fragment.role === 'system' && (fragment.trust === 'user' || fragment.trust === 'tool' || typeof fragment.value !== 'string'))
37
+ if (fragment.role === 'system' &&
38
+ (fragment.trust === 'user' || fragment.trust === 'tool' || typeof fragment.value !== 'string'))
17
39
  throw new Error('Untrusted context cannot become a system instruction');
18
- if (typeof fragment.value !== 'string' && (!fragment.value || typeof fragment.value !== 'object' || Array.isArray(fragment.value)))
40
+ if (typeof fragment.value !== 'string' &&
41
+ (!fragment.value || typeof fragment.value !== 'object' || Array.isArray(fragment.value)))
19
42
  throw new Error('Invalid context value');
43
+ // Structured values are measured as the JSON text that will be sent, so the declared budget
44
+ // describes the payload rather than the in-memory object.
20
45
  const serialized = typeof fragment.value === 'string' ? fragment.value : JSON.stringify(fragment.value);
21
46
  if (checkBudget && serialized.length > fragment.maxChars)
22
- throw new errors_js_1.ValidationError([{ code: 'CONTEXT_BUDGET', message: `上下文片段 ${fragment.id} 超过预算;不截断原问题、约束与证据。` }]);
47
+ throw new errors_js_1.ValidationError([
48
+ {
49
+ code: 'CONTEXT_BUDGET',
50
+ message: `上下文片段 ${fragment.id} 超过预算;不截断原问题、约束与证据。`,
51
+ },
52
+ ]);
23
53
  return serialized;
24
54
  }
25
- /** Core input-budget boundary; helpers may retain their existing error presentation. */
55
+ /**
56
+ * Enforce the character budget of the whole model input.
57
+ *
58
+ * @param inputChars Characters that will be sent; must be a non-negative safe integer.
59
+ * @param maxInputChars Budget limit. `Infinity` is accepted as an explicit "no limit", which
60
+ * is why it is allowed in place of a safe integer.
61
+ * @param exceeded Optional factory for the over-budget error. Support may pass one to keep its
62
+ * own message; Core otherwise raises a `CONTEXT_BUDGET` ValidationError.
63
+ * @returns Nothing.
64
+ * @throws TypeError when either count is not a non-negative integer.
65
+ * @throws Error when the budget is exceeded: the `exceeded` result, or a ValidationError.
66
+ */
26
67
  function validateContextBudget(inputChars, maxInputChars, exceeded) {
27
68
  (0, rules_js_1.breakWhile)(!Number.isSafeInteger(inputChars) || inputChars < 0, () => new TypeError('Invalid context input size'));
28
69
  (0, rules_js_1.breakWhile)(maxInputChars !== Infinity && (!Number.isSafeInteger(maxInputChars) || maxInputChars < 0), () => new TypeError('Invalid context budget'));
29
70
  if (inputChars > maxInputChars)
30
- throw exceeded?.(maxInputChars)
31
- ?? new errors_js_1.ValidationError([{ code: 'CONTEXT_BUDGET', message: `Model input exceeds ${maxInputChars} characters` }]);
71
+ throw (exceeded?.(maxInputChars) ??
72
+ new errors_js_1.ValidationError([
73
+ { code: 'CONTEXT_BUDGET', message: `Model input exceeds ${maxInputChars} characters` },
74
+ ]));
32
75
  }
33
76
  var text_js_1 = require("../utils/text.js");
34
77
  Object.defineProperty(exports, "commonPrefixLength", { enumerable: true, get: function () { return text_js_1.commonPrefixLength; } });
@@ -15,6 +15,18 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.assembleContextPlan = exports.assembleFragments = void 0;
18
+ /**
19
+ * Context surface: fragment trust, per-fragment budgets, message assembly, structural audit,
20
+ * the request-local journal and plan assembly.
21
+ *
22
+ * Core owns the guarantees here. A fragment declares its trust, lifetime and character
23
+ * budget in one place; assembly validates those declarations and refuses to truncate;
24
+ * auditing rejects structural change to protected fragments. Selection, ordering, compression
25
+ * and model choice remain App-side nodes that run before this boundary.
26
+ *
27
+ * Exports: `assembleFragments`, `assembleContextPlan`, `ContextJournal`, the fragment helpers,
28
+ * and the evidence Kit helpers consumed alongside assembled context.
29
+ */
18
30
  __exportStar(require("./fragments.js"), exports);
19
31
  var assembly_js_1 = require("./assembly.js");
20
32
  Object.defineProperty(exports, "assembleFragments", { enumerable: true, get: function () { return assembly_js_1.assembleFragments; } });
@@ -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;
@@ -2,9 +2,17 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.coreEventCatalog = void 0;
4
4
  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',
5
+ 'node.progress': 'metadata',
6
+ 'model.start': 'metadata',
7
+ 'model.binding': 'metadata',
8
+ 'model.prepare': 'content',
9
+ 'model.output': 'content',
10
+ 'model.parsed': 'content',
11
+ 'model.end': 'metadata',
7
12
  'runtime.rejected': 'metadata',
8
- 'loop.event': 'metadata', 'workflow.event': 'metadata', 'tool.call': 'metadata', 'tool.result': 'metadata',
13
+ 'loop.event': 'metadata',
14
+ 'workflow.event': 'metadata',
15
+ 'tool.call': 'metadata',
16
+ 'tool.result': 'metadata',
9
17
  'rule.result': 'metadata',
10
18
  };
@@ -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
  }