@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
@@ -1,3 +1,12 @@
1
+ /**
2
+ * Incremental reply preview: project partial model output into presentable bubbles.
3
+ *
4
+ * The projection is a lexical scan, deliberately separate from authoritative JSON or schema
5
+ * validation, and it only reads explicitly registered prose fields. It is presentation only: it
6
+ * must never authorize, persist or execute a proposal.
7
+ *
8
+ * Main export: `createReplyPreview` and its rule/settings types.
9
+ */
1
10
  import { synchronous } from '../../utils/synchronous.js';
2
11
  /** Incremental lexical projection, deliberately separate from authoritative JSON/schema validation. */
3
12
  class StringProjection {
@@ -41,7 +50,16 @@ class StringProjection {
41
50
  if (ch === 'u')
42
51
  token.unicode = '';
43
52
  else {
44
- const escapes = { '"': '"', '\\': '\\', '/': '/', b: '\b', f: '\f', n: '\n', r: '\r', t: '\t' };
53
+ const escapes = {
54
+ '"': '"',
55
+ '\\': '\\',
56
+ '/': '/',
57
+ b: '\b',
58
+ f: '\f',
59
+ n: '\n',
60
+ r: '\r',
61
+ t: '\t',
62
+ };
45
63
  if (!(ch in escapes))
46
64
  throw new Error('Invalid escape');
47
65
  token.text += escapes[ch];
@@ -86,7 +104,9 @@ class StringProjection {
86
104
  }
87
105
  const frame = this.stack.at(-1);
88
106
  if (ch === '}' || ch === ']') {
89
- if (!frame || (ch === '}' ? frame.kind !== '{' : frame.kind !== '[') || !['key', 'value', 'comma'].includes(frame.state))
107
+ if (!frame ||
108
+ (ch === '}' ? frame.kind !== '{' : frame.kind !== '[') ||
109
+ !['key', 'value', 'comma'].includes(frame.state))
90
110
  throw new Error('Invalid close');
91
111
  this.stack.pop();
92
112
  this.complete();
@@ -108,8 +128,16 @@ class StringProjection {
108
128
  if (!frame || !['key', 'value'].includes(frame.state))
109
129
  throw new Error('Invalid string position');
110
130
  const key = frame.state === 'key', path = this.path();
111
- const projected = !key && this.paths.some(pattern => path.length === pattern.length && pattern.every((key, i) => key === '*' ? /^\d+$/.test(path[i]) : key === path[i]));
112
- this.token = { key, path, text: '', projectionKey: projected ? JSON.stringify(path) : undefined, escape: false };
131
+ const projected = !key &&
132
+ this.paths.some((pattern) => path.length === pattern.length &&
133
+ pattern.every((key, i) => (key === '*' ? /^\d+$/.test(path[i]) : key === path[i])));
134
+ this.token = {
135
+ key,
136
+ path,
137
+ text: '',
138
+ projectionKey: projected ? JSON.stringify(path) : undefined,
139
+ escape: false,
140
+ };
113
141
  continue;
114
142
  }
115
143
  if (frame && frame.state !== 'value')
@@ -120,23 +148,46 @@ class StringProjection {
120
148
  if (ch === '{' || ch === '[') {
121
149
  if (this.stack.length >= 32)
122
150
  throw new Error('Too deep');
123
- this.stack.push({ path: this.path(), kind: ch, state: ch === '{' ? 'key' : 'value', index: 0, keys: new Set() });
151
+ this.stack.push({
152
+ path: this.path(),
153
+ kind: ch,
154
+ state: ch === '{' ? 'key' : 'value',
155
+ index: 0,
156
+ keys: new Set(),
157
+ });
124
158
  }
125
159
  else
126
160
  this.primitive = true;
127
161
  }
128
162
  }
129
- string(path) { const key = JSON.stringify(path); return this.completedStrings.has(key) ? this.values.get(key)?.text : undefined; }
163
+ string(path) {
164
+ const key = JSON.stringify(path);
165
+ return this.completedStrings.has(key) ? this.values.get(key)?.text : undefined;
166
+ }
130
167
  texts(paths = this.paths) {
131
168
  // Later bubbles can arrive first in JSON; keep their indices stable until the leading prose exists.
132
169
  const first = paths[0];
133
170
  if (first && !first.includes('*') && !this.values.has(JSON.stringify(first)))
134
171
  return [];
135
- return paths.flatMap(pattern => [...this.values.values()].filter(({ path }) => path.length === pattern.length && pattern.every((key, i) => key === '*' ? /^\d+$/.test(path[i]) : key === path[i]))
136
- .sort((a, b) => Number(a.path.at(-1)) - Number(b.path.at(-1)))).map(value => value.text);
172
+ return paths
173
+ .flatMap((pattern) => [...this.values.values()]
174
+ .filter(({ path }) => path.length === pattern.length &&
175
+ pattern.every((key, i) => (key === '*' ? /^\d+$/.test(path[i]) : key === path[i])))
176
+ .sort((a, b) => Number(a.path.at(-1)) - Number(b.path.at(-1))))
177
+ .map((value) => value.text);
137
178
  }
138
179
  }
139
- /** Only explicitly registered prose fields are projected. Tools/reviews are never selected implicitly. */
180
+ /**
181
+ * Create a model-output event handler that publishes preview bubbles.
182
+ *
183
+ * The handler resets on `model.start`, ignores other invocations, disables itself on unexpected
184
+ * output, and clears the preview when a call ends unsuccessfully. Rules are snapshotted at
185
+ * creation, and only explicitly registered prose fields are projected.
186
+ *
187
+ * @param options Rules, optional renderer, character budget and the bubble sink.
188
+ * @returns An async handler for `ModelOutputEvent`.
189
+ * @throws {TypeError} When the sink is missing or `maxChars` is not a positive integer.
190
+ */
140
191
  export function createReplyPreview(options) {
141
192
  if (typeof options.sink !== 'function')
142
193
  throw new TypeError('A reply preview sink is required');
@@ -144,7 +195,7 @@ export function createReplyPreview(options) {
144
195
  const maxChars = options.maxChars ?? 16000;
145
196
  if (!Number.isSafeInteger(maxChars) || maxChars < 1)
146
197
  throw new TypeError('Invalid reply preview budget');
147
- const rules = options.rules.map(rule => Object.freeze({
198
+ const rules = options.rules.map((rule) => Object.freeze({
148
199
  capabilityId: rule.capabilityId,
149
200
  stageId: rule.stageId,
150
201
  paths: rule.paths === undefined ? undefined : structuredClone(rule.paths),
@@ -155,10 +206,13 @@ export function createReplyPreview(options) {
155
206
  let selected;
156
207
  let activeCall;
157
208
  const publish = async (texts) => {
158
- // Hold incomplete surrogate pairs and never show internal control characters.
209
+ // Hold incomplete surrogate pairs and never show internal control characters. The bubble cap
210
+ // is independent of `maxChars`: at most five bubbles and 16000 characters reach the sink.
159
211
  let remaining = 16000;
160
- const bubbles = texts.slice(0, 5).map(text => {
161
- const value = (render ? synchronous(render(text), 'Reply preview renderers must be synchronous') : text).slice(0, remaining).replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]|[\ud800-\udbff]$/gu, '');
212
+ const bubbles = texts.slice(0, 5).map((text) => {
213
+ const value = (render ? synchronous(render(text), 'Reply preview renderers must be synchronous') : text)
214
+ .slice(0, remaining)
215
+ .replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]|[\ud800-\udbff]$/gu, '');
162
216
  remaining -= value.length;
163
217
  return value;
164
218
  });
@@ -194,14 +248,17 @@ export function createReplyPreview(options) {
194
248
  if (disabled)
195
249
  return;
196
250
  const part = event.payload.part;
197
- chars += typeof part === 'string' ? part.length : (part.name?.length ?? 0) + (part.arguments?.length ?? 0);
251
+ chars +=
252
+ typeof part === 'string'
253
+ ? part.length
254
+ : (part.name?.length ?? 0) + (part.arguments?.length ?? 0);
198
255
  if (chars > maxChars) {
199
256
  disabled = true;
200
257
  await publish([]);
201
258
  return;
202
259
  }
203
260
  if (typeof part === 'string') {
204
- const rule = rules.find(rule => !rule.capabilityId && rule.stageId === event.payload.stageId);
261
+ const rule = rules.find((rule) => !rule.capabilityId && rule.stageId === event.payload.stageId);
205
262
  if (!rule) {
206
263
  if (part.trim()) {
207
264
  disabled = true;
@@ -219,7 +276,7 @@ export function createReplyPreview(options) {
219
276
  return;
220
277
  }
221
278
  name += part.name ?? '';
222
- const rule = rules.find(rule => rule.capabilityId === name && (!rule.stageId || rule.stageId === event.payload.stageId));
279
+ const rule = rules.find((rule) => rule.capabilityId === name && (!rule.stageId || rule.stageId === event.payload.stageId));
223
280
  if (!rule) {
224
281
  if (selected) {
225
282
  disabled = true;
@@ -232,7 +289,10 @@ export function createReplyPreview(options) {
232
289
  try {
233
290
  if (!selected) {
234
291
  selected = rule;
235
- parser = new StringProjection([...(rule.paths ?? [['text'], ['bubbles', '*']]), ...(rule.when ? [rule.when.path] : [])]);
292
+ parser = new StringProjection([
293
+ ...(rule.paths ?? [['text'], ['bubbles', '*']]),
294
+ ...(rule.when ? [rule.when.path] : []),
295
+ ]);
236
296
  parser.push(argumentsText);
237
297
  argumentsText = '';
238
298
  }
@@ -1,5 +1,13 @@
1
1
  import type { ModelStageTransportRegistration } from '../../structs/support/model/interactions.js';
2
- /** Compile static references now; dynamic sources are checked afresh at the model boundary. */
2
+ /**
3
+ * Build a transport that projects a capability source through declared stage references.
4
+ *
5
+ * @param registration Transport declaration: unique ID, stage-to-capability references, interaction
6
+ * adapter, options and a static or per-stage capability source.
7
+ * @returns A Core model transport with `capabilities(stage)`.
8
+ * @throws {Error} When a stage ID repeats, has no capability IDs, the declaration has no stages, a
9
+ * stage or capability is not registered, or a dynamic capability source is asynchronous.
10
+ */
3
11
  export declare function createStageModelTransport<Result, const Id extends string = string>(registration: ModelStageTransportRegistration<Result> & {
4
12
  readonly id: Id;
5
13
  }): import("../../index.js").ModelTransportDefinition<Result> & {
@@ -1,14 +1,34 @@
1
+ /**
2
+ * Stage-scoped model transport: expose only the capabilities declared for each stage.
3
+ *
4
+ * Static capability sources are projected once at construction; dynamic sources are re-projected
5
+ * at the model boundary. Either way, an undeclared stage or capability is rejected rather than
6
+ * silently omitted.
7
+ *
8
+ * Main export: `createStageModelTransport`.
9
+ */
1
10
  import { synchronous } from '../../utils/synchronous.js';
2
11
  import { ModelCapabilityRegistry } from '../../capabilities/model.js';
3
12
  import { breakWhile } from '../../utils/rules.js';
4
13
  import { createModelTransport } from './transports.js';
5
- /** Compile static references now; dynamic sources are checked afresh at the model boundary. */
14
+ /**
15
+ * Build a transport that projects a capability source through declared stage references.
16
+ *
17
+ * @param registration Transport declaration: unique ID, stage-to-capability references, interaction
18
+ * adapter, options and a static or per-stage capability source.
19
+ * @returns A Core model transport with `capabilities(stage)`.
20
+ * @throws {Error} When a stage ID repeats, has no capability IDs, the declaration has no stages, a
21
+ * stage or capability is not registered, or a dynamic capability source is asynchronous.
22
+ */
6
23
  export function createStageModelTransport(registration) {
7
24
  const stages = new Map();
8
25
  for (const stage of registration.stages) {
9
26
  const ids = stage.capabilityIds;
10
- breakWhile(!stage.id?.trim() || stages.has(stage.id) || !Array.isArray(ids) || !ids.length
11
- || new Set(ids).size !== ids.length, `Invalid model stage: ${stage.id}`);
27
+ breakWhile(!stage.id?.trim() ||
28
+ stages.has(stage.id) ||
29
+ !Array.isArray(ids) ||
30
+ !ids.length ||
31
+ new Set(ids).size !== ids.length, `Invalid model stage: ${stage.id}`);
12
32
  stages.set(stage.id, Object.freeze([...ids]));
13
33
  }
14
34
  breakWhile(!stages.size, 'Model transport requires declared stages');
@@ -30,13 +50,19 @@ export function createStageModelTransport(registration) {
30
50
  },
31
51
  });
32
52
  };
33
- const fixed = typeof source === 'function' ? undefined
34
- : new Map([...stages.keys()].map(stage => [stage, project(stage, source)]));
53
+ const fixed = typeof source === 'function'
54
+ ? undefined
55
+ : new Map([...stages.keys()].map((stage) => [stage, project(stage, source)]));
35
56
  return createModelTransport({
36
- id, adapter, options, requireStrictArguments,
57
+ id,
58
+ adapter,
59
+ options,
60
+ requireStrictArguments,
37
61
  capabilities(stage) {
38
62
  breakWhile(!stages.has(stage), `Unregistered model stage: ${id} -> ${stage}`);
39
- return fixed ? fixed.get(stage) : project(stage, synchronous(source.call(registration, stage), 'Model capability sources must be synchronous'));
63
+ return fixed
64
+ ? fixed.get(stage)
65
+ : project(stage, synchronous(source.call(registration, stage), 'Model capability sources must be synchronous'));
40
66
  },
41
67
  });
42
68
  }
@@ -1,6 +1,13 @@
1
1
  import type { ExecutionOptions } from '../../structs/common.js';
2
2
  import type { ModelRunnerOptions, ModelRunnerSettings, ModelTransportDefinition } from '../../structs/model/runtime.js';
3
- /** Local admission and output allowances, never a claim about provider capacity or performance. */
3
+ /**
4
+ * Budget presets by expected workload size.
5
+ *
6
+ * `maxCalls` counts model calls per run; `maxInputChars`/`maxOutputChars` are character budgets;
7
+ * `maxOutputTokens` is the per-call output reservation; `callTimeoutMs` bounds one call in
8
+ * milliseconds. These are local admission and output allowances, never a claim about provider
9
+ * capacity or performance.
10
+ */
4
11
  export declare const modelBudgetStrategies: Readonly<{
5
12
  small: Readonly<{
6
13
  maxCalls: 2;
@@ -24,6 +31,7 @@ export declare const modelBudgetStrategies: Readonly<{
24
31
  callTimeoutMs: 60000;
25
32
  }>;
26
33
  }>;
34
+ /** Preset name, or an explicit partial set of Core runner settings. */
27
35
  export type ModelBudgetStrategy = keyof typeof modelBudgetStrategies | Partial<ModelRunnerSettings>;
28
36
  type StrategyModel<Transports extends readonly ModelTransportDefinition[], Execution> = Omit<ModelRunnerOptions<Transports>, 'execution'> & {
29
37
  execution?: Execution;
@@ -31,10 +39,13 @@ type StrategyModel<Transports extends readonly ModelTransportDefinition[], Execu
31
39
  export type ModelStrategyOptions<Transports extends readonly ModelTransportDefinition[] = readonly ModelTransportDefinition[], Execution = ExecutionOptions> = Partial<StrategyModel<Transports, Execution>> & {
32
40
  /** An existing definition, or an ID in the explicitly supplied model catalog. */
33
41
  readonly model: StrategyModel<Transports, Execution> | string;
42
+ /** Named model definitions; required when `model` is a string ID. */
34
43
  readonly models?: Readonly<Record<string, StrategyModel<Transports, Execution>>>;
35
44
  /** Names and supplier-specific implementations are declared by the App, never guessed. */
36
45
  readonly reasoning?: string;
46
+ /** Per-reasoning overrides; entries are applied only when `reasoning` names them. */
37
47
  readonly reasoningOptions?: Readonly<Record<string, Partial<StrategyModel<Transports, Execution>>>>;
48
+ /** Preset name, or an explicit partial budget; defaults to `medium`. */
38
49
  readonly budget?: ModelBudgetStrategy;
39
50
  };
40
51
  type NamedDefinition<Catalog, Id> = Id extends string ? string extends Id ? Catalog[keyof Catalog] : Id extends keyof Catalog ? Catalog[Id] : never : never;
@@ -45,6 +56,17 @@ type ExecutionFrom<Source, Fallback> = Source extends unknown ? 'execution' exte
45
56
  type StrategyResult<Options extends ModelStrategyOptions> = Omit<ModelRunnerOptions<TransportsFrom<Options, TransportsFrom<SelectedReasoning<Options>, TransportsFrom<SelectedModel<Options>, readonly []>>>>, 'execution'> & {
46
57
  execution?: ExecutionFrom<Options, ExecutionFrom<SelectedReasoning<Options>, ExecutionFrom<SelectedModel<Options>, undefined>>>;
47
58
  };
48
- /** Preset < selected model < declared reasoning < exact budget < explicit Core fields. */
59
+ /**
60
+ * Compose runner options in precedence order: budget preset, selected model, declared reasoning,
61
+ * exact budget, then explicit Core fields.
62
+ *
63
+ * The result is validated through the same Core binding rules but creates no runner and spends no
64
+ * calls.
65
+ *
66
+ * @param options Model selection, optional reasoning and budget, and explicit Core overrides.
67
+ * @returns A frozen, validated `ModelRunnerOptions` with inferred transport/execution types.
68
+ * @throws {TypeError} When a model ID is unknown, a string model is combined with inline
69
+ * definitions, a reasoning name is unknown, or a budget field or preset is invalid.
70
+ */
49
71
  export declare function createModelStrategy<const Options extends ModelStrategyOptions>(options: Options): StrategyResult<Options>;
50
72
  export {};
@@ -1,18 +1,67 @@
1
+ /**
2
+ * Model strategy presets: compose a Core `ModelRunnerOptions` from named sources.
3
+ *
4
+ * A strategy selects a model definition (inline or by catalog ID), optional reasoning variant and
5
+ * a budget preset, then layers any explicit Core fields last. Values are local admission
6
+ * allowances, not claims about provider capacity or performance.
7
+ *
8
+ * Main exports: `modelBudgetStrategies`, `createModelStrategy` and the strategy option types.
9
+ */
1
10
  import { snapshotModelBinding } from '../../model/binding.js';
2
- /** Local admission and output allowances, never a claim about provider capacity or performance. */
11
+ /**
12
+ * Budget presets by expected workload size.
13
+ *
14
+ * `maxCalls` counts model calls per run; `maxInputChars`/`maxOutputChars` are character budgets;
15
+ * `maxOutputTokens` is the per-call output reservation; `callTimeoutMs` bounds one call in
16
+ * milliseconds. These are local admission and output allowances, never a claim about provider
17
+ * capacity or performance.
18
+ */
3
19
  export const modelBudgetStrategies = Object.freeze({
4
- small: Object.freeze({ maxCalls: 2, maxInputChars: 8000, maxOutputChars: 4000, maxOutputTokens: 512, callTimeoutMs: 15000 }),
5
- medium: Object.freeze({ maxCalls: 8, maxInputChars: 32000, maxOutputChars: 16000, maxOutputTokens: 1024, callTimeoutMs: 30000 }),
6
- large: Object.freeze({ maxCalls: 16, maxInputChars: 64000, maxOutputChars: 32000, maxOutputTokens: 4096, callTimeoutMs: 60000 }),
20
+ small: Object.freeze({
21
+ maxCalls: 2,
22
+ maxInputChars: 8000,
23
+ maxOutputChars: 4000,
24
+ maxOutputTokens: 512,
25
+ callTimeoutMs: 15000,
26
+ }),
27
+ medium: Object.freeze({
28
+ maxCalls: 8,
29
+ maxInputChars: 32000,
30
+ maxOutputChars: 16000,
31
+ maxOutputTokens: 1024,
32
+ callTimeoutMs: 30000,
33
+ }),
34
+ large: Object.freeze({
35
+ maxCalls: 16,
36
+ maxInputChars: 64000,
37
+ maxOutputChars: 32000,
38
+ maxOutputTokens: 4096,
39
+ callTimeoutMs: 60000,
40
+ }),
7
41
  });
8
- // Exhaustiveness ensures new Core settings cannot silently disappear at this boundary.
42
+ // Exhaustiveness ensures new Core settings cannot silently disappear at this boundary: adding a
43
+ // setting to `ModelRunnerSettings` without listing it here fails type checking.
9
44
  const budgetSettingKeys = {
10
- maxCalls: true, callTimeoutMs: true, maxOutputChars: true, usage: true,
11
- children: true, maxInputChars: true, maxSchemaChars: true, tokenBudget: true, maxOutputTokens: true,
45
+ maxCalls: true,
46
+ callTimeoutMs: true,
47
+ maxOutputChars: true,
48
+ usage: true,
49
+ children: true,
50
+ maxInputChars: true,
51
+ maxSchemaChars: true,
52
+ tokenBudget: true,
53
+ maxOutputTokens: true,
12
54
  };
13
55
  const settingKeys = {
14
- ...budgetSettingKeys, provider: true, execution: true, transports: true, sink: true, errors: true,
56
+ ...budgetSettingKeys,
57
+ provider: true,
58
+ execution: true,
59
+ transports: true,
60
+ sink: true,
61
+ errors: true,
15
62
  };
63
+ // Copy only known Core keys, so helper fields such as `model`, `models` or `budget` in a selected
64
+ // definition are not forwarded as runner options.
16
65
  function settings(source) {
17
66
  const result = {};
18
67
  for (const key of Object.keys(settingKeys))
@@ -38,20 +87,32 @@ export function createModelStrategy(options) {
38
87
  if (typeof model !== 'string' && models !== undefined)
39
88
  throw new TypeError('Use a model ID with configured models');
40
89
  const selected = typeof model === 'string'
41
- ? models && Object.hasOwn(models, model) ? models[model] : undefined : model;
90
+ ? models && Object.hasOwn(models, model)
91
+ ? models[model]
92
+ : undefined
93
+ : model;
42
94
  if (!selected || typeof selected !== 'object')
43
95
  throw new TypeError(`Unknown model strategy: ${String(model)}`);
44
- const reasoningSettings = reasoning === undefined ? undefined
45
- : reasoningOptions && Object.hasOwn(reasoningOptions, reasoning) ? reasoningOptions[reasoning] : undefined;
96
+ const reasoningSettings = reasoning === undefined
97
+ ? undefined
98
+ : reasoningOptions && Object.hasOwn(reasoningOptions, reasoning)
99
+ ? reasoningOptions[reasoning]
100
+ : undefined;
46
101
  if (reasoning !== undefined && !reasoningSettings)
47
102
  throw new TypeError(`Unknown reasoning strategy: ${reasoning}`);
48
103
  if (typeof budget === 'string' && !Object.hasOwn(modelBudgetStrategies, budget))
49
104
  throw new TypeError(`Unknown model budget: ${budget}`);
50
- if (!budget || (typeof budget !== 'string' && (typeof budget !== 'object' || Array.isArray(budget))))
105
+ if (!budget ||
106
+ (typeof budget !== 'string' && (typeof budget !== 'object' || Array.isArray(budget))))
51
107
  throw new TypeError('Invalid model budget strategy');
52
108
  const preset = typeof budget === 'string' ? modelBudgetStrategies[budget] : modelBudgetStrategies.medium;
53
- const result = { ...preset, ...settings(selected), ...(reasoningSettings && settings(reasoningSettings)),
54
- ...(typeof budget === 'object' && budgetSettings(budget)), ...settings(options) };
109
+ const result = {
110
+ ...preset,
111
+ ...settings(selected),
112
+ ...(reasoningSettings && settings(reasoningSettings)),
113
+ ...(typeof budget === 'object' && budgetSettings(budget)),
114
+ ...settings(options),
115
+ };
55
116
  // Validate through the same Core rules without creating a request runner or spending calls.
56
117
  snapshotModelBinding(result);
57
118
  return Object.freeze(result);
@@ -1,6 +1,12 @@
1
1
  import type { ModelOptions } from '../../structs/model/messages.js';
2
2
  import type { ModelTransportDefinition } from '../../structs/model/runtime.js';
3
3
  export { createModelTransport } from '../../model/selection-transport.js';
4
+ /**
5
+ * Create a plain-text transport that trims the assembled response.
6
+ *
7
+ * @param definition Transport ID and optional temperature.
8
+ * @returns A frozen Core transport definition typed as string output.
9
+ */
4
10
  export declare function createTextTransport<const Id extends string>(definition: {
5
11
  readonly id: Id;
6
12
  readonly options?: Pick<ModelOptions, 'temperature'>;
@@ -8,7 +14,17 @@ export declare function createTextTransport<const Id extends string>(definition:
8
14
  readonly id: Id;
9
15
  };
10
16
  export type { ModelTransportRegistration } from '../../structs/support/model/interactions.js';
11
- /** Typed JSON values without a capability-selection envelope. */
17
+ /**
18
+ * Create a typed JSON transport without a capability-selection envelope.
19
+ *
20
+ * The transport embeds the JSON Schema in the instruction and requires the response to be one
21
+ * complete JSON value. The returned response parser rejects native call events and invalid JSON,
22
+ * then validates the value through the supplied schema.
23
+ *
24
+ * @param definition Transport ID, output schema and optional temperature/json settings.
25
+ * @returns A frozen Core transport definition typed as `Output`.
26
+ * @throws {TypeError} When the ID is blank or the schema adapter cannot be snapshotted.
27
+ */
12
28
  export declare function createJsonTransport<Output, const Id extends string = string>(definition: {
13
29
  readonly id: Id;
14
30
  readonly outputSchema: import('../../structs/common.js').SchemaAdapter<Output>;
@@ -1,28 +1,67 @@
1
+ /**
2
+ * Model transport creators for plain text and typed JSON values.
3
+ *
4
+ * Both produce Core `ModelTransportDefinition` objects with an ID, so a runner can select them by
5
+ * name. Neither invokes a model: preparation, response assembly and parsing stay in Core.
6
+ *
7
+ * Main exports: `createTextTransport`, `createJsonTransport`, `createModelTransport` and the
8
+ * transport registration type.
9
+ */
1
10
  import { snapshotSchemaAdapter } from '../../utils/schema-adapter.js';
2
11
  import { snapshotModelOptions } from '../../model/options.js';
3
12
  import { modelProtocolError } from '../../utils/model-protocol.js';
4
13
  import { createPlainTextTransport } from '../../model/transports.js';
5
14
  export { createModelTransport } from '../../model/selection-transport.js';
15
+ /**
16
+ * Create a plain-text transport that trims the assembled response.
17
+ *
18
+ * @param definition Transport ID and optional temperature.
19
+ * @returns A frozen Core transport definition typed as string output.
20
+ */
6
21
  export function createTextTransport(definition) {
7
22
  return createPlainTextTransport(definition.id, definition.options);
8
23
  }
9
- /** Typed JSON values without a capability-selection envelope. */
24
+ /**
25
+ * Create a typed JSON transport without a capability-selection envelope.
26
+ *
27
+ * The transport embeds the JSON Schema in the instruction and requires the response to be one
28
+ * complete JSON value. The returned response parser rejects native call events and invalid JSON,
29
+ * then validates the value through the supplied schema.
30
+ *
31
+ * @param definition Transport ID, output schema and optional temperature/json settings.
32
+ * @returns A frozen Core transport definition typed as `Output`.
33
+ * @throws {TypeError} When the ID is blank or the schema adapter cannot be snapshotted.
34
+ */
10
35
  export function createJsonTransport(definition) {
11
36
  const { id, outputSchema, options } = definition;
12
37
  if (typeof id !== 'string' || !id.trim())
13
38
  throw new TypeError('JSON transport requires an ID');
14
39
  const schema = snapshotSchemaAdapter(outputSchema);
15
- const settings = Object.freeze({ ...snapshotModelOptions({ temperature: options?.temperature, json: options?.json ?? true }) });
16
- const instruction = 'Return exactly one complete JSON value matching this JSON Schema: '
17
- + JSON.stringify(schema.jsonSchema) + '\nReturn the value itself, without prose, fences, a schema document or a capability-selection envelope.';
18
- return Object.freeze({ id, prepare() {
19
- return { options: settings, instruction, schemaChars: instruction.length, createResponse() {
40
+ const settings = Object.freeze({
41
+ ...snapshotModelOptions({ temperature: options?.temperature, json: options?.json ?? true }),
42
+ });
43
+ const instruction = 'Return exactly one complete JSON value matching this JSON Schema: ' +
44
+ JSON.stringify(schema.jsonSchema) +
45
+ '\nReturn the value itself, without prose, fences, a schema document or a capability-selection envelope.';
46
+ return Object.freeze({
47
+ id,
48
+ prepare() {
49
+ return {
50
+ options: settings,
51
+ instruction,
52
+ schemaChars: instruction.length,
53
+ createResponse() {
20
54
  let raw = '';
21
- return { get outputChars() { return raw.length; }, push(part) {
55
+ return {
56
+ get outputChars() {
57
+ return raw.length;
58
+ },
59
+ push(part) {
22
60
  if (typeof part !== 'string')
23
61
  modelProtocolError('JSON value transport does not accept native call events');
24
62
  raw += part;
25
- }, finish() {
63
+ },
64
+ finish() {
26
65
  let value;
27
66
  try {
28
67
  value = JSON.parse(raw);
@@ -31,7 +70,10 @@ export function createJsonTransport(definition) {
31
70
  modelProtocolError('JSON value transport requires complete JSON');
32
71
  }
33
72
  return schema.parse(value);
34
- } };
35
- } };
36
- } });
73
+ },
74
+ };
75
+ },
76
+ };
77
+ },
78
+ });
37
79
  }
@@ -1,6 +1,25 @@
1
1
  import type { RegistrationDefinition } from '../structs/support/registration.js';
2
- /** Compile an installation plan once; predicates observe preceding installations at request time. */
2
+ /**
3
+ * Compile an ordered installation plan.
4
+ *
5
+ * Predicates observe the effects of preceding installations at request time; a predicate that
6
+ * throws rejects the install instead of being treated as `false`. Callbacks are bound to their
7
+ * declaring definition so implementations may rely on `this`.
8
+ *
9
+ * @param definitions Registration steps in execution order.
10
+ * @returns A frozen catalog plus `install(context)`, which runs enabled steps sequentially.
11
+ * @throws {Error} When a `register` handler is missing or a `when` predicate is not a function.
12
+ */
3
13
  export declare function defineRegistrationCatalog<Context>(definitions: readonly RegistrationDefinition<Context>[]): Readonly<{
14
+ /**
15
+ * Run every enabled step in declaration order against `context`.
16
+ *
17
+ * Stops at the first failing predicate or handler; earlier installations are not rolled back.
18
+ *
19
+ * @param context Value passed to each predicate and registration handler.
20
+ * @throws {TypeError} When a predicate is asynchronous or does not return a boolean, or when
21
+ * a handler is asynchronous.
22
+ */
4
23
  install(context: Context): void;
5
24
  definitions: readonly Readonly<{
6
25
  id: string;
@@ -1,21 +1,63 @@
1
+ /**
2
+ * Conditional registration support: compile an ordered list of install steps for an application.
3
+ *
4
+ * Steps are validated and bound once, then installed per invocation. Predicates run at install
5
+ * time and only see what previous steps already installed, so ordering is part of the contract.
6
+ * This is app-side composition for Core-facing handlers; it defines no new scheduling protocol.
7
+ *
8
+ * Main export: `defineRegistrationCatalog`.
9
+ */
1
10
  import { readonlyCatalog } from '../utils/catalog.js';
2
11
  import { synchronous, booleanResult } from '../utils/synchronous.js';
3
12
  import { breakWhile } from '../utils/rules.js';
4
- /** Compile an installation plan once; predicates observe preceding installations at request time. */
13
+ /**
14
+ * Compile an ordered installation plan.
15
+ *
16
+ * Predicates observe the effects of preceding installations at request time; a predicate that
17
+ * throws rejects the install instead of being treated as `false`. Callbacks are bound to their
18
+ * declaring definition so implementations may rely on `this`.
19
+ *
20
+ * @param definitions Registration steps in execution order.
21
+ * @returns A frozen catalog plus `install(context)`, which runs enabled steps sequentially.
22
+ * @throws {Error} When a `register` handler is missing or a `when` predicate is not a function.
23
+ */
5
24
  export function defineRegistrationCatalog(definitions) {
6
- const catalog = readonlyCatalog(definitions.map(definition => {
25
+ const catalog = readonlyCatalog(definitions.map((definition) => {
7
26
  const { id, when, register } = definition;
8
27
  breakWhile([
9
- { occur: typeof register !== 'function', error: 'Missing registration handler', tags: ['handler'] },
10
- { occur: when !== undefined && typeof when !== 'function', error: 'Invalid registration predicate', tags: ['predicate'] },
28
+ {
29
+ occur: typeof register !== 'function',
30
+ error: 'Missing registration handler',
31
+ tags: ['handler'],
32
+ },
33
+ {
34
+ occur: when !== undefined && typeof when !== 'function',
35
+ error: 'Invalid registration predicate',
36
+ tags: ['predicate'],
37
+ },
11
38
  ], ['agent-core', 'registration']);
12
- return Object.freeze({ id, when: when?.bind(definition), register: register.bind(definition) });
13
- }), id => new TypeError(`Unknown registration: ${id}`));
39
+ return Object.freeze({
40
+ id,
41
+ when: when?.bind(definition),
42
+ register: register.bind(definition),
43
+ });
44
+ }), (id) => new TypeError(`Unknown registration: ${id}`));
14
45
  return Object.freeze({
15
46
  ...catalog,
47
+ /**
48
+ * Run every enabled step in declaration order against `context`.
49
+ *
50
+ * Stops at the first failing predicate or handler; earlier installations are not rolled back.
51
+ *
52
+ * @param context Value passed to each predicate and registration handler.
53
+ * @throws {TypeError} When a predicate is asynchronous or does not return a boolean, or when
54
+ * a handler is asynchronous.
55
+ */
16
56
  install(context) {
17
57
  for (const entry of catalog.definitions) {
18
- const enabled = entry.when ? booleanResult(entry.when(context), 'Registration predicates must be synchronous', 'Registration predicates must return boolean') : true;
58
+ const enabled = entry.when
59
+ ? booleanResult(entry.when(context), 'Registration predicates must be synchronous', 'Registration predicates must return boolean')
60
+ : true;
19
61
  if (enabled) {
20
62
  synchronous(entry.register(context), 'Registration handlers must be synchronous');
21
63
  }