@jangts/agent-core 0.1.0 → 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 (527) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/README.md +59 -0
  3. package/development/docs/api/reference.md +1907 -1874
  4. package/development/docs/api/support.md +27 -0
  5. package/development/docs/assets/agent-core-icon.png +0 -0
  6. package/development/docs/assets/agent-core-logo.png +0 -0
  7. package/development/docs/assets/character-agent-core.png +0 -0
  8. package/development/skills/agent-core-app/scripts/create-app.mjs +267 -70
  9. package/development/skills/agent-core-app/scripts/lib/knowledge.mjs +40 -15
  10. package/development/skills/agent-core-app/scripts/lib/source.mjs +30 -2
  11. package/development/skills/agent-core-app/scripts/plan.mjs +37 -12
  12. package/development/skills/agent-core-app/scripts/prepare-source.mjs +61 -10
  13. package/development/skills/agent-core-app/scripts/resources.mjs +45 -17
  14. package/development/skills/agent-core-app/scripts/validate-knowledge.mjs +18 -1
  15. package/development/skills/agent-core-app/templates/catalog.json +36 -22
  16. package/dist/cjs/capabilities/index.js +13 -0
  17. package/dist/cjs/capabilities/invocation.js +80 -10
  18. package/dist/cjs/capabilities/model.js +126 -13
  19. package/dist/cjs/capabilities/tool-runtime.js +64 -12
  20. package/dist/cjs/capabilities/tools.js +266 -31
  21. package/dist/cjs/context/assembly.js +46 -5
  22. package/dist/cjs/context/audit.js +31 -6
  23. package/dist/cjs/context/fragments.js +54 -11
  24. package/dist/cjs/context/index.js +12 -0
  25. package/dist/cjs/context/journal.js +84 -7
  26. package/dist/cjs/context/plan.js +30 -2
  27. package/dist/cjs/diagnostics/catalog.js +11 -3
  28. package/dist/cjs/diagnostics/index.js +149 -29
  29. package/dist/cjs/diagnostics/sub-flow.js +240 -40
  30. package/dist/cjs/errors.js +99 -17
  31. package/dist/cjs/execution/branch.js +20 -4
  32. package/dist/cjs/execution/engine.js +470 -56
  33. package/dist/cjs/execution/events.js +136 -18
  34. package/dist/cjs/execution/index.js +7 -0
  35. package/dist/cjs/execution/reporting.js +75 -6
  36. package/dist/cjs/execution/state.js +161 -22
  37. package/dist/cjs/execution/workflow.js +224 -32
  38. package/dist/cjs/index.js +18 -0
  39. package/dist/cjs/kits/aggregation.js +45 -3
  40. package/dist/cjs/kits/answering/batch.js +23 -4
  41. package/dist/cjs/kits/answering/check-result.js +31 -8
  42. package/dist/cjs/kits/answering/checks.js +24 -3
  43. package/dist/cjs/kits/answering/flow.js +192 -36
  44. package/dist/cjs/kits/answering/index.js +19 -1
  45. package/dist/cjs/kits/answering/tasks.js +88 -13
  46. package/dist/cjs/kits/artifacts.js +36 -4
  47. package/dist/cjs/kits/candidates.js +47 -5
  48. package/dist/cjs/kits/delivery.js +40 -5
  49. package/dist/cjs/kits/durable.js +155 -31
  50. package/dist/cjs/kits/evidence.js +66 -15
  51. package/dist/cjs/kits/family.js +152 -22
  52. package/dist/cjs/kits/index.js +12 -1
  53. package/dist/cjs/kits/inference.js +104 -16
  54. package/dist/cjs/kits/intents/catalog.js +67 -16
  55. package/dist/cjs/kits/intents/index.js +11 -0
  56. package/dist/cjs/kits/intents/registry.js +188 -43
  57. package/dist/cjs/kits/intents/scopes.js +215 -46
  58. package/dist/cjs/kits/interaction/command.js +140 -36
  59. package/dist/cjs/kits/interaction/commands.js +86 -11
  60. package/dist/cjs/kits/interaction/handlers.js +27 -10
  61. package/dist/cjs/kits/interaction/index.js +10 -0
  62. package/dist/cjs/kits/interaction/transfer.js +80 -14
  63. package/dist/cjs/kits/knowledge/catalog.js +62 -11
  64. package/dist/cjs/kits/knowledge/index.js +16 -1
  65. package/dist/cjs/kits/knowledge/publication.js +99 -23
  66. package/dist/cjs/kits/knowledge/sections.js +33 -4
  67. package/dist/cjs/kits/normalization.js +51 -7
  68. package/dist/cjs/kits/policies.js +79 -15
  69. package/dist/cjs/kits/presentation/events.js +54 -10
  70. package/dist/cjs/kits/presentation/index.js +24 -1
  71. package/dist/cjs/kits/presentation/outputs.js +176 -38
  72. package/dist/cjs/kits/presentation/templates.js +33 -5
  73. package/dist/cjs/kits/presentation/variants.js +31 -2
  74. package/dist/cjs/kits/projection.js +63 -8
  75. package/dist/cjs/kits/rank-fusion.js +27 -4
  76. package/dist/cjs/kits/reflection-log-source.js +89 -16
  77. package/dist/cjs/kits/reflection.js +234 -60
  78. package/dist/cjs/kits/retrieval.js +98 -18
  79. package/dist/cjs/kits/search.js +180 -27
  80. package/dist/cjs/kits/text-skills.js +104 -19
  81. package/dist/cjs/kits/tools.js +415 -74
  82. package/dist/cjs/kits/vector-search.js +50 -16
  83. package/dist/cjs/mock/node.js +7 -1
  84. package/dist/cjs/mock/web.js +7 -1
  85. package/dist/cjs/mock.js +7 -1
  86. package/dist/cjs/model/binding.js +68 -17
  87. package/dist/cjs/model/call-budget.js +45 -4
  88. package/dist/cjs/model/decision-retry.js +19 -1
  89. package/dist/cjs/model/defaults.js +27 -4
  90. package/dist/cjs/model/index.js +7 -0
  91. package/dist/cjs/model/interactions/arguments.js +36 -1
  92. package/dist/cjs/model/interactions/json-object.js +48 -12
  93. package/dist/cjs/model/interactions/native-functions.js +52 -10
  94. package/dist/cjs/model/message-diagnostics.js +17 -4
  95. package/dist/cjs/model/options.js +9 -1
  96. package/dist/cjs/model/preparation.js +86 -12
  97. package/dist/cjs/model/runner.js +413 -79
  98. package/dist/cjs/model/selection-transport.js +48 -8
  99. package/dist/cjs/model/settings.js +67 -13
  100. package/dist/cjs/model/token-budget.js +69 -11
  101. package/dist/cjs/model/transports.js +59 -6
  102. package/dist/cjs/structs/common.js +11 -0
  103. package/dist/cjs/structs/debug.js +34 -5
  104. package/dist/cjs/structs/errors.js +26 -1
  105. package/dist/cjs/structs/index.js +11 -1
  106. package/dist/cjs/structs/kits/durable.js +7 -0
  107. package/dist/cjs/structs/kits/family.js +1 -0
  108. package/dist/cjs/structs/kits/interaction.js +8 -1
  109. package/dist/cjs/structs/kits/knowledge-publication.js +1 -0
  110. package/dist/cjs/structs/kits/reflection.js +18 -3
  111. package/dist/cjs/structs/model/chat-provider.js +6 -0
  112. package/dist/cjs/structs/support/model/completion.js +2 -0
  113. package/dist/cjs/structs/support/model/messages.js +2 -0
  114. package/dist/cjs/support/capabilities.js +43 -6
  115. package/dist/cjs/support/context/assembly.js +88 -16
  116. package/dist/cjs/support/context/compression.js +48 -6
  117. package/dist/cjs/support/context/fragments.js +6 -0
  118. package/dist/cjs/support/context/history.js +36 -1
  119. package/dist/cjs/support/context/index.js +11 -0
  120. package/dist/cjs/support/context/nodes.js +164 -35
  121. package/dist/cjs/support/context/processing.js +319 -61
  122. package/dist/cjs/support/context/selection-policy.js +98 -21
  123. package/dist/cjs/support/context/selection.js +61 -10
  124. package/dist/cjs/support/context/snapshot.js +29 -7
  125. package/dist/cjs/support/context/strategies.js +120 -28
  126. package/dist/cjs/support/index.js +9 -1
  127. package/dist/cjs/support/model/capabilities.js +20 -1
  128. package/dist/cjs/support/model/chat-completions.js +92 -20
  129. package/dist/cjs/support/model/children.js +34 -6
  130. package/dist/cjs/support/model/compatible-provider.js +189 -59
  131. package/dist/cjs/support/model/completion/calls.js +61 -0
  132. package/dist/cjs/support/model/completion/default.js +32 -0
  133. package/dist/cjs/support/model/completion/index.js +28 -0
  134. package/dist/cjs/support/model/completion/session.js +102 -0
  135. package/dist/cjs/support/model/index.js +12 -0
  136. package/dist/cjs/support/model/interactions/index.js +12 -1
  137. package/dist/cjs/support/model/interactions/json-object.js +6 -0
  138. package/dist/cjs/support/model/interactions/native-functions.js +6 -0
  139. package/dist/cjs/support/model/observer.js +32 -6
  140. package/dist/cjs/support/model/preview-rules.js +66 -16
  141. package/dist/cjs/support/model/reply-preview.js +77 -17
  142. package/dist/cjs/support/model/stage-transport.js +33 -7
  143. package/dist/cjs/support/model/strategies.js +75 -14
  144. package/dist/cjs/support/model/transports.js +53 -11
  145. package/dist/cjs/support/registration.js +49 -7
  146. package/dist/cjs/support/schema.js +46 -4
  147. package/dist/cjs/support/stream-events.js +60 -8
  148. package/dist/cjs/support/tool-runtime.js +6 -0
  149. package/dist/cjs/support/tools.js +79 -10
  150. package/dist/cjs/support/transport/index.js +7 -0
  151. package/dist/cjs/support/transport/json.js +28 -4
  152. package/dist/cjs/support/transport/sse.js +25 -2
  153. package/dist/cjs/utils/break-observer.js +20 -2
  154. package/dist/cjs/utils/cancellation.js +77 -9
  155. package/dist/cjs/utils/catalog.js +19 -4
  156. package/dist/cjs/utils/debug.js +14 -2
  157. package/dist/cjs/utils/index.js +8 -0
  158. package/dist/cjs/utils/interaction-definition.js +26 -6
  159. package/dist/cjs/utils/invocation.js +42 -4
  160. package/dist/cjs/utils/model-protocol.js +20 -1
  161. package/dist/cjs/utils/object.js +16 -0
  162. package/dist/cjs/utils/observer.js +22 -2
  163. package/dist/cjs/utils/protocol-registry.js +47 -4
  164. package/dist/cjs/utils/query-key.js +21 -2
  165. package/dist/cjs/utils/registration.js +18 -2
  166. package/dist/cjs/utils/rules.js +39 -11
  167. package/dist/cjs/utils/schema-adapter.js +25 -2
  168. package/dist/cjs/utils/synchronous.js +64 -7
  169. package/dist/cjs/utils/text.js +15 -1
  170. package/dist/esm/capabilities/index.d.ts +13 -0
  171. package/dist/esm/capabilities/index.js +13 -0
  172. package/dist/esm/capabilities/invocation.d.ts +16 -2
  173. package/dist/esm/capabilities/invocation.js +80 -10
  174. package/dist/esm/capabilities/model.d.ts +68 -1
  175. package/dist/esm/capabilities/model.js +126 -13
  176. package/dist/esm/capabilities/tool-runtime.d.ts +11 -0
  177. package/dist/esm/capabilities/tool-runtime.js +64 -12
  178. package/dist/esm/capabilities/tools.d.ts +96 -3
  179. package/dist/esm/capabilities/tools.js +267 -32
  180. package/dist/esm/context/assembly.d.ts +13 -2
  181. package/dist/esm/context/assembly.js +46 -5
  182. package/dist/esm/context/audit.d.ts +23 -1
  183. package/dist/esm/context/audit.js +31 -6
  184. package/dist/esm/context/fragments.d.ts +37 -3
  185. package/dist/esm/context/fragments.js +54 -11
  186. package/dist/esm/context/index.d.ts +12 -0
  187. package/dist/esm/context/index.js +12 -0
  188. package/dist/esm/context/journal.d.ts +32 -1
  189. package/dist/esm/context/journal.js +84 -7
  190. package/dist/esm/context/plan.d.ts +11 -1
  191. package/dist/esm/context/plan.js +30 -2
  192. package/dist/esm/diagnostics/catalog.js +11 -3
  193. package/dist/esm/diagnostics/index.d.ts +30 -2
  194. package/dist/esm/diagnostics/index.js +149 -29
  195. package/dist/esm/diagnostics/sub-flow.d.ts +41 -3
  196. package/dist/esm/diagnostics/sub-flow.js +240 -40
  197. package/dist/esm/errors.d.ts +22 -2
  198. package/dist/esm/errors.js +99 -17
  199. package/dist/esm/execution/branch.d.ts +19 -1
  200. package/dist/esm/execution/branch.js +20 -4
  201. package/dist/esm/execution/engine.d.ts +291 -5
  202. package/dist/esm/execution/engine.js +471 -57
  203. package/dist/esm/execution/events.d.ts +16 -2
  204. package/dist/esm/execution/events.js +136 -18
  205. package/dist/esm/execution/index.d.ts +7 -0
  206. package/dist/esm/execution/index.js +7 -0
  207. package/dist/esm/execution/reporting.d.ts +49 -1
  208. package/dist/esm/execution/reporting.js +75 -6
  209. package/dist/esm/execution/state.d.ts +126 -10
  210. package/dist/esm/execution/state.js +161 -22
  211. package/dist/esm/execution/workflow.d.ts +121 -3
  212. package/dist/esm/execution/workflow.js +224 -32
  213. package/dist/esm/index.d.ts +17 -1
  214. package/dist/esm/index.js +18 -0
  215. package/dist/esm/kits/aggregation.d.ts +34 -2
  216. package/dist/esm/kits/aggregation.js +45 -3
  217. package/dist/esm/kits/answering/batch.d.ts +17 -0
  218. package/dist/esm/kits/answering/batch.js +23 -4
  219. package/dist/esm/kits/answering/check-result.d.ts +18 -1
  220. package/dist/esm/kits/answering/check-result.js +31 -8
  221. package/dist/esm/kits/answering/checks.d.ts +11 -0
  222. package/dist/esm/kits/answering/checks.js +24 -3
  223. package/dist/esm/kits/answering/flow.d.ts +25 -2
  224. package/dist/esm/kits/answering/flow.js +192 -36
  225. package/dist/esm/kits/answering/index.d.ts +12 -0
  226. package/dist/esm/kits/answering/index.js +19 -1
  227. package/dist/esm/kits/answering/tasks.d.ts +32 -1
  228. package/dist/esm/kits/answering/tasks.js +88 -13
  229. package/dist/esm/kits/artifacts.d.ts +11 -0
  230. package/dist/esm/kits/artifacts.js +36 -4
  231. package/dist/esm/kits/candidates.d.ts +23 -1
  232. package/dist/esm/kits/candidates.js +47 -5
  233. package/dist/esm/kits/delivery.d.ts +34 -0
  234. package/dist/esm/kits/delivery.js +40 -5
  235. package/dist/esm/kits/durable.d.ts +19 -0
  236. package/dist/esm/kits/durable.js +155 -31
  237. package/dist/esm/kits/evidence.d.ts +28 -5
  238. package/dist/esm/kits/evidence.js +66 -15
  239. package/dist/esm/kits/family.d.ts +17 -1
  240. package/dist/esm/kits/family.js +152 -22
  241. package/dist/esm/kits/index.d.ts +12 -1
  242. package/dist/esm/kits/index.js +12 -1
  243. package/dist/esm/kits/inference.d.ts +64 -0
  244. package/dist/esm/kits/inference.js +104 -16
  245. package/dist/esm/kits/intents/catalog.d.ts +13 -1
  246. package/dist/esm/kits/intents/catalog.js +67 -16
  247. package/dist/esm/kits/intents/index.d.ts +11 -0
  248. package/dist/esm/kits/intents/index.js +11 -0
  249. package/dist/esm/kits/intents/registry.d.ts +61 -3
  250. package/dist/esm/kits/intents/registry.js +188 -43
  251. package/dist/esm/kits/intents/scopes.d.ts +73 -3
  252. package/dist/esm/kits/intents/scopes.js +215 -46
  253. package/dist/esm/kits/interaction/command.d.ts +38 -4
  254. package/dist/esm/kits/interaction/command.js +140 -36
  255. package/dist/esm/kits/interaction/commands.d.ts +66 -2
  256. package/dist/esm/kits/interaction/commands.js +86 -11
  257. package/dist/esm/kits/interaction/handlers.d.ts +19 -2
  258. package/dist/esm/kits/interaction/handlers.js +27 -10
  259. package/dist/esm/kits/interaction/index.d.ts +10 -0
  260. package/dist/esm/kits/interaction/index.js +10 -0
  261. package/dist/esm/kits/interaction/transfer.d.ts +39 -2
  262. package/dist/esm/kits/interaction/transfer.js +80 -14
  263. package/dist/esm/kits/knowledge/catalog.d.ts +13 -0
  264. package/dist/esm/kits/knowledge/catalog.js +62 -11
  265. package/dist/esm/kits/knowledge/index.d.ts +11 -0
  266. package/dist/esm/kits/knowledge/index.js +16 -1
  267. package/dist/esm/kits/knowledge/publication.d.ts +15 -1
  268. package/dist/esm/kits/knowledge/publication.js +99 -23
  269. package/dist/esm/kits/knowledge/sections.d.ts +31 -1
  270. package/dist/esm/kits/knowledge/sections.js +33 -4
  271. package/dist/esm/kits/normalization.d.ts +25 -2
  272. package/dist/esm/kits/normalization.js +51 -7
  273. package/dist/esm/kits/policies.d.ts +26 -3
  274. package/dist/esm/kits/policies.js +79 -15
  275. package/dist/esm/kits/presentation/events.d.ts +51 -4
  276. package/dist/esm/kits/presentation/events.js +54 -10
  277. package/dist/esm/kits/presentation/index.d.ts +12 -0
  278. package/dist/esm/kits/presentation/index.js +25 -2
  279. package/dist/esm/kits/presentation/outputs.d.ts +30 -1
  280. package/dist/esm/kits/presentation/outputs.js +176 -38
  281. package/dist/esm/kits/presentation/templates.d.ts +32 -3
  282. package/dist/esm/kits/presentation/templates.js +33 -5
  283. package/dist/esm/kits/presentation/variants.d.ts +29 -0
  284. package/dist/esm/kits/presentation/variants.js +31 -2
  285. package/dist/esm/kits/projection.d.ts +42 -5
  286. package/dist/esm/kits/projection.js +63 -8
  287. package/dist/esm/kits/rank-fusion.d.ts +21 -1
  288. package/dist/esm/kits/rank-fusion.js +28 -5
  289. package/dist/esm/kits/reflection-log-source.d.ts +28 -1
  290. package/dist/esm/kits/reflection-log-source.js +89 -16
  291. package/dist/esm/kits/reflection.d.ts +17 -1
  292. package/dist/esm/kits/reflection.js +235 -61
  293. package/dist/esm/kits/retrieval.d.ts +18 -2
  294. package/dist/esm/kits/retrieval.js +98 -18
  295. package/dist/esm/kits/search.d.ts +56 -3
  296. package/dist/esm/kits/search.js +180 -27
  297. package/dist/esm/kits/text-skills.d.ts +16 -2
  298. package/dist/esm/kits/text-skills.js +104 -19
  299. package/dist/esm/kits/tools.d.ts +122 -2
  300. package/dist/esm/kits/tools.js +416 -74
  301. package/dist/esm/kits/vector-search.d.ts +47 -1
  302. package/dist/esm/kits/vector-search.js +51 -17
  303. package/dist/esm/mock/node.d.ts +7 -0
  304. package/dist/esm/mock/node.js +7 -1
  305. package/dist/esm/mock/web.d.ts +7 -0
  306. package/dist/esm/mock/web.js +7 -1
  307. package/dist/esm/mock.d.ts +7 -0
  308. package/dist/esm/mock.js +7 -1
  309. package/dist/esm/model/binding.d.ts +32 -3
  310. package/dist/esm/model/binding.js +68 -17
  311. package/dist/esm/model/call-budget.d.ts +30 -2
  312. package/dist/esm/model/call-budget.js +45 -4
  313. package/dist/esm/model/decision-retry.d.ts +10 -1
  314. package/dist/esm/model/decision-retry.js +19 -1
  315. package/dist/esm/model/defaults.d.ts +13 -2
  316. package/dist/esm/model/defaults.js +27 -4
  317. package/dist/esm/model/index.d.ts +7 -0
  318. package/dist/esm/model/index.js +7 -0
  319. package/dist/esm/model/interactions/arguments.d.ts +27 -0
  320. package/dist/esm/model/interactions/arguments.js +36 -1
  321. package/dist/esm/model/interactions/json-object.d.ts +7 -1
  322. package/dist/esm/model/interactions/json-object.js +48 -12
  323. package/dist/esm/model/interactions/native-functions.d.ts +6 -0
  324. package/dist/esm/model/interactions/native-functions.js +52 -10
  325. package/dist/esm/model/message-diagnostics.d.ts +17 -1
  326. package/dist/esm/model/message-diagnostics.js +17 -4
  327. package/dist/esm/model/options.d.ts +18 -1
  328. package/dist/esm/model/options.js +9 -1
  329. package/dist/esm/model/preparation.d.ts +30 -2
  330. package/dist/esm/model/preparation.js +86 -12
  331. package/dist/esm/model/runner.d.ts +129 -5
  332. package/dist/esm/model/runner.js +414 -80
  333. package/dist/esm/model/selection-transport.d.ts +14 -1
  334. package/dist/esm/model/selection-transport.js +48 -8
  335. package/dist/esm/model/settings.d.ts +11 -0
  336. package/dist/esm/model/settings.js +67 -13
  337. package/dist/esm/model/token-budget.d.ts +59 -1
  338. package/dist/esm/model/token-budget.js +69 -11
  339. package/dist/esm/model/transports.d.ts +20 -2
  340. package/dist/esm/model/transports.js +59 -6
  341. package/dist/esm/structs/capabilities/invocation.d.ts +36 -0
  342. package/dist/esm/structs/capabilities/model.d.ts +27 -0
  343. package/dist/esm/structs/capabilities/tools.d.ts +38 -0
  344. package/dist/esm/structs/common.d.ts +62 -2
  345. package/dist/esm/structs/common.js +11 -0
  346. package/dist/esm/structs/context/fragments.d.ts +28 -0
  347. package/dist/esm/structs/context/journal.d.ts +28 -3
  348. package/dist/esm/structs/context/processing.d.ts +11 -0
  349. package/dist/esm/structs/debug.d.ts +58 -1
  350. package/dist/esm/structs/debug.js +34 -5
  351. package/dist/esm/structs/diagnostics.d.ts +119 -1
  352. package/dist/esm/structs/errors.d.ts +42 -1
  353. package/dist/esm/structs/errors.js +26 -1
  354. package/dist/esm/structs/execution/engine.d.ts +24 -1
  355. package/dist/esm/structs/execution/events.d.ts +12 -0
  356. package/dist/esm/structs/execution/workflow.d.ts +71 -0
  357. package/dist/esm/structs/index.d.ts +11 -1
  358. package/dist/esm/structs/index.js +11 -1
  359. package/dist/esm/structs/invocation.d.ts +30 -0
  360. package/dist/esm/structs/kits/aggregation.d.ts +12 -0
  361. package/dist/esm/structs/kits/answering/checks.d.ts +11 -0
  362. package/dist/esm/structs/kits/answering/flow.d.ts +35 -1
  363. package/dist/esm/structs/kits/answering/state.d.ts +21 -0
  364. package/dist/esm/structs/kits/answering/tasks.d.ts +21 -0
  365. package/dist/esm/structs/kits/artifacts.d.ts +14 -0
  366. package/dist/esm/structs/kits/candidates.d.ts +19 -0
  367. package/dist/esm/structs/kits/delivery.d.ts +22 -0
  368. package/dist/esm/structs/kits/durable.d.ts +56 -3
  369. package/dist/esm/structs/kits/durable.js +7 -0
  370. package/dist/esm/structs/kits/evidence.d.ts +23 -0
  371. package/dist/esm/structs/kits/family.d.ts +49 -1
  372. package/dist/esm/structs/kits/family.js +1 -0
  373. package/dist/esm/structs/kits/intents/catalog.d.ts +26 -0
  374. package/dist/esm/structs/kits/intents/registry.d.ts +34 -0
  375. package/dist/esm/structs/kits/intents/scopes.d.ts +36 -1
  376. package/dist/esm/structs/kits/interaction.d.ts +64 -0
  377. package/dist/esm/structs/kits/interaction.js +8 -1
  378. package/dist/esm/structs/kits/knowledge-publication.d.ts +43 -1
  379. package/dist/esm/structs/kits/knowledge-publication.js +1 -0
  380. package/dist/esm/structs/kits/knowledge.d.ts +39 -2
  381. package/dist/esm/structs/kits/normalization.d.ts +15 -0
  382. package/dist/esm/structs/kits/policies.d.ts +25 -1
  383. package/dist/esm/structs/kits/presentation/events.d.ts +28 -4
  384. package/dist/esm/structs/kits/presentation/outputs.d.ts +38 -1
  385. package/dist/esm/structs/kits/presentation/templates.d.ts +15 -0
  386. package/dist/esm/structs/kits/projection.d.ts +21 -0
  387. package/dist/esm/structs/kits/reflection.d.ts +61 -2
  388. package/dist/esm/structs/kits/reflection.js +18 -3
  389. package/dist/esm/structs/kits/retrieval.d.ts +38 -0
  390. package/dist/esm/structs/kits/search.d.ts +22 -0
  391. package/dist/esm/structs/kits/text-skills.d.ts +36 -0
  392. package/dist/esm/structs/kits/tools.d.ts +87 -0
  393. package/dist/esm/structs/model/chat-provider.d.ts +24 -1
  394. package/dist/esm/structs/model/chat-provider.js +6 -0
  395. package/dist/esm/structs/model/interactions.d.ts +38 -0
  396. package/dist/esm/structs/model/messages.d.ts +30 -0
  397. package/dist/esm/structs/model/runtime.d.ts +104 -6
  398. package/dist/esm/structs/support/capabilities.d.ts +19 -2
  399. package/dist/esm/structs/support/context-processing.d.ts +88 -9
  400. package/dist/esm/structs/support/context.d.ts +29 -1
  401. package/dist/esm/structs/support/model/completion.d.ts +50 -0
  402. package/dist/esm/structs/support/model/completion.js +1 -0
  403. package/dist/esm/structs/support/model/interactions.d.ts +13 -1
  404. package/dist/esm/structs/support/model/messages.d.ts +52 -0
  405. package/dist/esm/structs/support/model/messages.js +1 -0
  406. package/dist/esm/structs/support/model/provider-observer.d.ts +22 -1
  407. package/dist/esm/structs/support/model/provider.d.ts +71 -6
  408. package/dist/esm/structs/support/registration.d.ts +13 -0
  409. package/dist/esm/structs/support/schema.d.ts +14 -0
  410. package/dist/esm/structs/support/tools.d.ts +28 -0
  411. package/dist/esm/structs/support/transport/json.d.ts +16 -0
  412. package/dist/esm/structs/support/transport/sse.d.ts +15 -0
  413. package/dist/esm/structs/utils/rules.d.ts +19 -0
  414. package/dist/esm/support/capabilities.d.ts +25 -2
  415. package/dist/esm/support/capabilities.js +43 -6
  416. package/dist/esm/support/context/assembly.d.ts +35 -4
  417. package/dist/esm/support/context/assembly.js +88 -16
  418. package/dist/esm/support/context/compression.d.ts +17 -1
  419. package/dist/esm/support/context/compression.js +48 -6
  420. package/dist/esm/support/context/fragments.d.ts +6 -0
  421. package/dist/esm/support/context/fragments.js +6 -0
  422. package/dist/esm/support/context/history.d.ts +43 -0
  423. package/dist/esm/support/context/history.js +36 -1
  424. package/dist/esm/support/context/index.d.ts +13 -2
  425. package/dist/esm/support/context/index.js +12 -1
  426. package/dist/esm/support/context/nodes.d.ts +49 -3
  427. package/dist/esm/support/context/nodes.js +165 -36
  428. package/dist/esm/support/context/processing.d.ts +145 -1
  429. package/dist/esm/support/context/processing.js +320 -62
  430. package/dist/esm/support/context/selection-policy.d.ts +42 -2
  431. package/dist/esm/support/context/selection-policy.js +98 -21
  432. package/dist/esm/support/context/selection.d.ts +14 -1
  433. package/dist/esm/support/context/selection.js +61 -10
  434. package/dist/esm/support/context/snapshot.d.ts +23 -1
  435. package/dist/esm/support/context/snapshot.js +29 -7
  436. package/dist/esm/support/context/strategies.d.ts +35 -2
  437. package/dist/esm/support/context/strategies.js +120 -28
  438. package/dist/esm/support/index.d.ts +9 -1
  439. package/dist/esm/support/index.js +9 -1
  440. package/dist/esm/support/model/capabilities.d.ts +10 -0
  441. package/dist/esm/support/model/capabilities.js +20 -1
  442. package/dist/esm/support/model/chat-completions.d.ts +44 -15
  443. package/dist/esm/support/model/chat-completions.js +92 -20
  444. package/dist/esm/support/model/children.d.ts +32 -2
  445. package/dist/esm/support/model/children.js +34 -6
  446. package/dist/esm/support/model/compatible-provider.d.ts +29 -3
  447. package/dist/esm/support/model/compatible-provider.js +190 -60
  448. package/dist/esm/support/model/completion/calls.d.ts +40 -0
  449. package/dist/esm/support/model/completion/calls.js +58 -0
  450. package/dist/esm/support/model/completion/default.d.ts +10 -0
  451. package/dist/esm/support/model/completion/default.js +29 -0
  452. package/dist/esm/support/model/completion/index.d.ts +10 -0
  453. package/dist/esm/support/model/completion/index.js +22 -0
  454. package/dist/esm/support/model/completion/session.d.ts +11 -0
  455. package/dist/esm/support/model/completion/session.js +99 -0
  456. package/dist/esm/support/model/index.d.ts +14 -0
  457. package/dist/esm/support/model/index.js +12 -0
  458. package/dist/esm/support/model/interactions/index.d.ts +1 -1
  459. package/dist/esm/support/model/interactions/index.js +12 -1
  460. package/dist/esm/support/model/interactions/json-object.d.ts +6 -0
  461. package/dist/esm/support/model/interactions/json-object.js +6 -0
  462. package/dist/esm/support/model/interactions/native-functions.d.ts +6 -0
  463. package/dist/esm/support/model/interactions/native-functions.js +6 -0
  464. package/dist/esm/support/model/observer.d.ts +25 -2
  465. package/dist/esm/support/model/observer.js +32 -6
  466. package/dist/esm/support/model/preview-rules.d.ts +20 -2
  467. package/dist/esm/support/model/preview-rules.js +66 -16
  468. package/dist/esm/support/model/reply-preview.d.ts +15 -1
  469. package/dist/esm/support/model/reply-preview.js +77 -17
  470. package/dist/esm/support/model/stage-transport.d.ts +9 -1
  471. package/dist/esm/support/model/stage-transport.js +33 -7
  472. package/dist/esm/support/model/strategies.d.ts +24 -2
  473. package/dist/esm/support/model/strategies.js +75 -14
  474. package/dist/esm/support/model/transports.d.ts +17 -1
  475. package/dist/esm/support/model/transports.js +53 -11
  476. package/dist/esm/support/registration.d.ts +20 -1
  477. package/dist/esm/support/registration.js +49 -7
  478. package/dist/esm/support/schema.d.ts +31 -1
  479. package/dist/esm/support/schema.js +46 -4
  480. package/dist/esm/support/stream-events.d.ts +22 -1
  481. package/dist/esm/support/stream-events.js +60 -8
  482. package/dist/esm/support/tool-runtime.d.ts +6 -0
  483. package/dist/esm/support/tool-runtime.js +6 -0
  484. package/dist/esm/support/tools.d.ts +22 -0
  485. package/dist/esm/support/tools.js +79 -10
  486. package/dist/esm/support/transport/index.d.ts +7 -0
  487. package/dist/esm/support/transport/index.js +7 -0
  488. package/dist/esm/support/transport/json.d.ts +29 -2
  489. package/dist/esm/support/transport/json.js +28 -4
  490. package/dist/esm/support/transport/sse.d.ts +31 -1
  491. package/dist/esm/support/transport/sse.js +25 -2
  492. package/dist/esm/types.d.ts +9 -1
  493. package/dist/esm/utils/break-observer.d.ts +27 -2
  494. package/dist/esm/utils/break-observer.js +20 -2
  495. package/dist/esm/utils/cancellation.d.ts +56 -5
  496. package/dist/esm/utils/cancellation.js +77 -9
  497. package/dist/esm/utils/catalog.d.ts +20 -1
  498. package/dist/esm/utils/catalog.js +19 -4
  499. package/dist/esm/utils/debug.d.ts +20 -1
  500. package/dist/esm/utils/debug.js +14 -2
  501. package/dist/esm/utils/index.d.ts +8 -0
  502. package/dist/esm/utils/index.js +8 -0
  503. package/dist/esm/utils/interaction-definition.d.ts +18 -1
  504. package/dist/esm/utils/interaction-definition.js +26 -6
  505. package/dist/esm/utils/invocation.d.ts +36 -1
  506. package/dist/esm/utils/invocation.js +42 -4
  507. package/dist/esm/utils/model-protocol.d.ts +8 -0
  508. package/dist/esm/utils/model-protocol.js +20 -1
  509. package/dist/esm/utils/object.d.ts +16 -0
  510. package/dist/esm/utils/object.js +16 -0
  511. package/dist/esm/utils/observer.d.ts +19 -1
  512. package/dist/esm/utils/observer.js +22 -2
  513. package/dist/esm/utils/protocol-registry.d.ts +38 -1
  514. package/dist/esm/utils/protocol-registry.js +47 -4
  515. package/dist/esm/utils/query-key.d.ts +11 -1
  516. package/dist/esm/utils/query-key.js +21 -2
  517. package/dist/esm/utils/registration.d.ts +34 -2
  518. package/dist/esm/utils/registration.js +18 -2
  519. package/dist/esm/utils/rules.d.ts +81 -4
  520. package/dist/esm/utils/rules.js +39 -11
  521. package/dist/esm/utils/schema-adapter.d.ts +12 -1
  522. package/dist/esm/utils/schema-adapter.js +25 -2
  523. package/dist/esm/utils/synchronous.d.ts +60 -4
  524. package/dist/esm/utils/synchronous.js +64 -7
  525. package/dist/esm/utils/text.d.ts +15 -1
  526. package/dist/esm/utils/text.js +15 -1
  527. package/package.json +23 -3
@@ -5,95 +5,240 @@ exports.createIntentRegistry = createIntentRegistry;
5
5
  const synchronous_js_1 = require("../../utils/synchronous.js");
6
6
  const rules_js_1 = require("../../utils/rules.js");
7
7
  const registration_js_1 = require("../../utils/registration.js");
8
- /** Intent semantics and allowed values are configuration; the registry owns their common lifecycle. */
8
+ /**
9
+ * Intent semantics and allowed values are configuration; the registry owns their common lifecycle.
10
+ *
11
+ * Registration order is preserved by `ids`, `definitions`, `values` and `entries`; once
12
+ * `seal()` is called the set is final and further registration is rejected.
13
+ */
9
14
  class IntentRegistry {
15
+ /** Create and seal a complete catalog in one call. */
10
16
  static create = createIntentRegistry;
11
17
  byId = new Map();
12
18
  sealed = false;
13
19
  policy;
20
+ /**
21
+ * @param policy - Optional id pattern, vocabulary lists, error wording and assertion hook.
22
+ * Lists and the pattern are copied so later mutation of the input cannot weaken checks.
23
+ */
14
24
  constructor(policy = {}) {
15
25
  const pattern = policy.idPattern;
16
26
  const errorPorts = policy.errors, { sealed, invalid, duplicate } = errorPorts ?? {};
17
- const listFields = ['scopeModes', 'targetModes', 'contextTiers', 'actions', 'steps', 'handoffValues', 'tags'];
18
- const lists = Object.fromEntries(listFields.map(key => { const value = policy[key]; return [key, value === undefined ? undefined : Object.freeze([...value])]; }));
19
- this.policy = Object.freeze({ ...(0, registration_js_1.registrationData)(policy, ['idPattern', 'assertDefinition', 'errors', ...listFields]), ...lists, idPattern: pattern ? new RegExp(pattern.source, pattern.flags) : undefined,
20
- errors: errorPorts && Object.freeze({ sealed: typeof sealed === 'function' ? sealed.bind(errorPorts) : sealed,
21
- invalid: typeof invalid === 'function' ? invalid.bind(errorPorts) : invalid, duplicate: duplicate?.bind(errorPorts) }),
22
- assertDefinition: policy.assertDefinition?.bind(policy) });
27
+ const listFields = [
28
+ 'scopeModes',
29
+ 'targetModes',
30
+ 'contextTiers',
31
+ 'actions',
32
+ 'steps',
33
+ 'handoffValues',
34
+ 'tags',
35
+ ];
36
+ const lists = Object.fromEntries(listFields.map((key) => {
37
+ const value = policy[key];
38
+ return [key, value === undefined ? undefined : Object.freeze([...value])];
39
+ }));
40
+ this.policy = Object.freeze({
41
+ ...(0, registration_js_1.registrationData)(policy, ['idPattern', 'assertDefinition', 'errors', ...listFields]),
42
+ ...lists,
43
+ idPattern: pattern ? new RegExp(pattern.source, pattern.flags) : undefined,
44
+ errors: errorPorts &&
45
+ Object.freeze({
46
+ sealed: typeof sealed === 'function' ? sealed.bind(errorPorts) : sealed,
47
+ invalid: typeof invalid === 'function' ? invalid.bind(errorPorts) : invalid,
48
+ duplicate: duplicate?.bind(errorPorts),
49
+ }),
50
+ assertDefinition: policy.assertDefinition?.bind(policy),
51
+ });
23
52
  }
53
+ /**
54
+ * Validate, freeze and add one intent.
55
+ *
56
+ * Checks run in a fixed order — sealed, identity, context contract, auxiliary actions,
57
+ * handoff, plan, steps — so the reported violation is stable when several rules fail.
58
+ *
59
+ * @param input - Intent declaration; the App's own assertion receives this original object,
60
+ * not the compiled copy, so helpers and prototype methods keep working.
61
+ * @returns This registry, for chaining.
62
+ * @throws A configured error for a sealed registry, invalid identity or vocabulary values,
63
+ * empty/duplicate steps, or a duplicate intent id.
64
+ */
24
65
  register(input) {
25
66
  const id = input.id;
26
- const definition = { ...(0, registration_js_1.registrationData)(input, ['id', 'description', 'steps', 'scopePolicy', 'targetPolicy', 'contextTier', 'planIntent', 'auxiliaryActions', 'preparedHandoff']), id, description: input.description, steps: input.steps,
27
- scopePolicy: input.scopePolicy, targetPolicy: input.targetPolicy, contextTier: input.contextTier,
28
- planIntent: input.planIntent, auxiliaryActions: input.auxiliaryActions, preparedHandoff: input.preparedHandoff };
67
+ const definition = {
68
+ ...(0, registration_js_1.registrationData)(input, [
69
+ 'id',
70
+ 'description',
71
+ 'steps',
72
+ 'scopePolicy',
73
+ 'targetPolicy',
74
+ 'contextTier',
75
+ 'planIntent',
76
+ 'auxiliaryActions',
77
+ 'preparedHandoff',
78
+ ]),
79
+ id,
80
+ description: input.description,
81
+ steps: input.steps,
82
+ scopePolicy: input.scopePolicy,
83
+ targetPolicy: input.targetPolicy,
84
+ contextTier: input.contextTier,
85
+ planIntent: input.planIntent,
86
+ auxiliaryActions: input.auxiliaryActions,
87
+ preparedHandoff: input.preparedHandoff,
88
+ };
29
89
  const policy = this.policy;
30
90
  const invalid = policy.errors?.invalid ?? 'Invalid intent definition';
31
91
  const tags = policy.tags ?? [];
32
- const validName = (name) => { if (typeof name !== 'string' || !name.trim())
33
- return false; if (!policy.idPattern)
34
- return true; policy.idPattern.lastIndex = 0; return policy.idPattern.test(name); };
92
+ const validName = (name) => {
93
+ if (typeof name !== 'string' || !name.trim())
94
+ return false;
95
+ if (!policy.idPattern)
96
+ return true;
97
+ policy.idPattern.lastIndex = 0;
98
+ return policy.idPattern.test(name);
99
+ };
35
100
  (0, rules_js_1.breakWhile)([
36
- { occur: () => this.sealed, error: policy.errors?.sealed ?? 'Intent registry is sealed', tags: ['sealed'] },
101
+ {
102
+ occur: () => this.sealed,
103
+ error: policy.errors?.sealed ?? 'Intent registry is sealed',
104
+ tags: ['sealed'],
105
+ },
37
106
  {
38
107
  occur: [() => !validName(definition.id), () => !definition.description.trim()],
39
- error: invalid, tags: ['identity'],
108
+ error: invalid,
109
+ tags: ['identity'],
40
110
  },
41
111
  {
42
112
  occur: [
43
- () => policy.scopeModes !== undefined && !policy.scopeModes.includes(definition.scopePolicy),
44
- () => policy.targetModes !== undefined && !policy.targetModes.includes(definition.targetPolicy),
45
- () => policy.contextTiers !== undefined && !policy.contextTiers.includes(definition.contextTier),
46
- ], error: invalid, tags: ['context-contract'],
113
+ () => policy.scopeModes !== undefined &&
114
+ !policy.scopeModes.includes(definition.scopePolicy),
115
+ () => policy.targetModes !== undefined &&
116
+ !policy.targetModes.includes(definition.targetPolicy),
117
+ () => policy.contextTiers !== undefined &&
118
+ !policy.contextTiers.includes(definition.contextTier),
119
+ ],
120
+ error: invalid,
121
+ tags: ['context-contract'],
47
122
  },
48
123
  {
49
124
  occur: [
50
125
  () => definition.auxiliaryActions !== undefined && !definition.auxiliaryActions.length,
51
- () => definition.auxiliaryActions !== undefined && definition.auxiliaryActions.some(action => policy.actions !== undefined && !policy.actions.includes(action)),
52
- () => definition.auxiliaryActions !== undefined && new Set(definition.auxiliaryActions).size !== definition.auxiliaryActions.length,
53
- ], error: invalid, tags: ['auxiliary-actions'],
126
+ () => definition.auxiliaryActions !== undefined &&
127
+ definition.auxiliaryActions.some((action) => policy.actions !== undefined && !policy.actions.includes(action)),
128
+ () => definition.auxiliaryActions !== undefined &&
129
+ new Set(definition.auxiliaryActions).size !== definition.auxiliaryActions.length,
130
+ ],
131
+ error: invalid,
132
+ tags: ['auxiliary-actions'],
133
+ },
134
+ {
135
+ occur: () => definition.preparedHandoff !== undefined &&
136
+ policy.handoffValues !== undefined &&
137
+ !policy.handoffValues.includes(definition.preparedHandoff),
138
+ error: invalid,
139
+ tags: ['handoff'],
140
+ },
141
+ {
142
+ occur: () => policy.actions !== undefined && !policy.actions.includes(definition.planIntent),
143
+ error: invalid,
144
+ tags: ['plan'],
54
145
  },
55
- { occur: () => definition.preparedHandoff !== undefined && policy.handoffValues !== undefined && !policy.handoffValues.includes(definition.preparedHandoff), error: invalid, tags: ['handoff'] },
56
- { occur: () => policy.actions !== undefined && !policy.actions.includes(definition.planIntent), error: invalid, tags: ['plan'] },
57
146
  {
58
147
  occur: [
59
148
  () => !definition.steps.length,
60
- () => definition.steps.some(step => policy.steps !== undefined && !policy.steps.includes(step)),
149
+ () => definition.steps.some((step) => policy.steps !== undefined && !policy.steps.includes(step)),
61
150
  () => new Set(definition.steps).size !== definition.steps.length,
62
- ], error: invalid, tags: ['steps'],
151
+ ],
152
+ error: invalid,
153
+ tags: ['steps'],
63
154
  },
64
155
  ], tags);
65
- // App assertions may use implementation helpers; never pass a compiled view as the source instance.
156
+ // App assertions may use implementation helpers; never pass a compiled view as the source
157
+ // instance.
66
158
  (0, synchronous_js_1.assertion)(policy.assertDefinition?.(input), 'Registry definition assertions must return void synchronously');
67
- (0, rules_js_1.breakWhile)(this.byId.has(definition.id), () => policy.errors?.duplicate?.(definition.id) ?? new Error(`Duplicate intent: ${definition.id}`), [...tags, 'duplicate']);
159
+ (0, rules_js_1.breakWhile)(this.byId.has(definition.id), () => policy.errors?.duplicate?.(definition.id) ??
160
+ new Error(`Duplicate intent: ${definition.id}`), [...tags, 'duplicate']);
68
161
  this.byId.set(definition.id, Object.freeze({
69
- ...definition, steps: Object.freeze([...definition.steps]),
70
- ...(definition.auxiliaryActions ? { auxiliaryActions: Object.freeze([...definition.auxiliaryActions]) } : {}),
162
+ ...definition,
163
+ steps: Object.freeze([...definition.steps]),
164
+ ...(definition.auxiliaryActions
165
+ ? { auxiliaryActions: Object.freeze([...definition.auxiliaryActions]) }
166
+ : {}),
71
167
  }));
72
168
  return this;
73
169
  }
170
+ /** Register every intent in iteration order. */
74
171
  registerAll(definitions) {
75
172
  for (const definition of definitions)
76
173
  this.register(definition);
77
174
  return this;
78
175
  }
79
- get(goal) { return this.byId.get(goal); }
80
- has(goal) { return this.byId.has(goal); }
81
- ids() { return Object.freeze([...this.byId.keys()]); }
82
- get definitions() { return Object.freeze([...this.byId.values()]); }
83
- values() { return this.byId.values(); }
84
- entries() { return this.byId.entries(); }
85
- require(id) { const value = this.byId.get(id); if (!value)
86
- throw new TypeError(`Unknown intent: ${id}`); return value; }
87
- allows(goal, step) { return this.byId.get(goal)?.steps.includes(step) ?? false; }
176
+ /** Registered intent for `goal`, or `undefined` when it is absent. */
177
+ get(goal) {
178
+ return this.byId.get(goal);
179
+ }
180
+ /** Whether an intent id is registered. */
181
+ has(goal) {
182
+ return this.byId.has(goal);
183
+ }
184
+ /** Registered intent ids in registration order. */
185
+ ids() {
186
+ return Object.freeze([...this.byId.keys()]);
187
+ }
188
+ /** Registered intents in registration order. */
189
+ get definitions() {
190
+ return Object.freeze([...this.byId.values()]);
191
+ }
192
+ /** Iterate the registered intents. */
193
+ values() {
194
+ return this.byId.values();
195
+ }
196
+ /** Iterate `[id, intent]` pairs. */
197
+ entries() {
198
+ return this.byId.entries();
199
+ }
200
+ /**
201
+ * Registered intent for `id`.
202
+ *
203
+ * @throws TypeError When the id is not registered.
204
+ */
205
+ require(id) {
206
+ const value = this.byId.get(id);
207
+ if (!value)
208
+ throw new TypeError(`Unknown intent: ${id}`);
209
+ return value;
210
+ }
211
+ /** Whether the intent declares this step; unknown intents allow nothing. */
212
+ allows(goal, step) {
213
+ return this.byId.get(goal)?.steps.includes(step) ?? false;
214
+ }
215
+ /**
216
+ * Copy the selected intents out of the registry.
217
+ *
218
+ * @param goals - Ids to include; the default is every registered id, in registry order.
219
+ * @returns Descriptions whose arrays are copied so callers cannot mutate registry state.
220
+ */
88
221
  describe(goals = this.ids()) {
89
222
  const selected = new Set(goals);
90
- return [...this.byId.values()].filter(item => selected.has(item.id))
91
- .map(item => ({ ...item, steps: [...item.steps] }));
223
+ return [...this.byId.values()]
224
+ .filter((item) => selected.has(item.id))
225
+ .map((item) => ({ ...item, steps: [...item.steps] }));
226
+ }
227
+ /** Finalize the registry; no registration is accepted afterwards. */
228
+ seal() {
229
+ this.sealed = true;
230
+ return this;
92
231
  }
93
- seal() { this.sealed = true; return this; }
94
232
  }
95
233
  exports.IntentRegistry = IntentRegistry;
96
- /** Create and seal a complete catalog; use the constructor for incremental installation. */
234
+ /**
235
+ * Create and seal a complete catalog; use the constructor for incremental installation.
236
+ *
237
+ * @param definitions - Intent declarations registered in iteration order.
238
+ * @param policy - Optional registry policy forwarded to the constructor.
239
+ * @returns A sealed registry.
240
+ * @throws A configured error for the first invalid or duplicate declaration.
241
+ */
97
242
  function createIntentRegistry(definitions, policy = {}) {
98
243
  return new IntentRegistry(policy).registerAll(definitions).seal();
99
244
  }
@@ -5,62 +5,148 @@ exports.createScopeRegistry = createScopeRegistry;
5
5
  const synchronous_js_1 = require("../../utils/synchronous.js");
6
6
  const rules_js_1 = require("../../utils/rules.js");
7
7
  const registration_js_1 = require("../../utils/registration.js");
8
- /** Generic scope relationships; categories, intent policy and extra fields belong to the host. */
8
+ /**
9
+ * Generic scope relationships; categories, intent policy and extra fields belong to the host.
10
+ *
11
+ * A scope is addressable by its id or by any of its aliases; aliases resolve to the declaring
12
+ * scope, and a name may be claimed only once across both namespaces.
13
+ */
9
14
  class ScopeRegistry {
15
+ /** Create and seal a complete scope catalog in one call. */
10
16
  static create = createScopeRegistry;
11
17
  byId = new Map();
12
18
  sources = new Map();
13
19
  aliases = new Map();
14
20
  sealed = false;
15
21
  policy;
22
+ /**
23
+ * @param policy - Optional id pattern, categories, required-binding switches, intent
24
+ * acceptance override, error wording and assertion hook; lists are copied on construction.
25
+ */
16
26
  constructor(policy = {}) {
17
27
  const pattern = policy.idPattern;
18
28
  const errorPorts = policy.errors, { sealed, invalid } = errorPorts ?? {};
19
29
  const listFields = ['categories', 'tags'];
20
- const lists = Object.fromEntries(listFields.map(key => { const value = policy[key]; return [key, value === undefined ? undefined : Object.freeze([...value])]; }));
21
- this.policy = Object.freeze({ ...(0, registration_js_1.registrationData)(policy, ['idPattern', 'assertDefinition', 'acceptsIntent', 'errors', ...listFields]), ...lists, idPattern: pattern ? new RegExp(pattern.source, pattern.flags) : undefined,
22
- errors: errorPorts && Object.freeze({ sealed: typeof sealed === 'function' ? sealed.bind(errorPorts) : sealed,
23
- invalid: typeof invalid === 'function' ? invalid.bind(errorPorts) : invalid }),
24
- assertDefinition: policy.assertDefinition?.bind(policy), acceptsIntent: policy.acceptsIntent?.bind(policy) });
30
+ const lists = Object.fromEntries(listFields.map((key) => {
31
+ const value = policy[key];
32
+ return [key, value === undefined ? undefined : Object.freeze([...value])];
33
+ }));
34
+ this.policy = Object.freeze({
35
+ ...(0, registration_js_1.registrationData)(policy, [
36
+ 'idPattern',
37
+ 'assertDefinition',
38
+ 'acceptsIntent',
39
+ 'errors',
40
+ ...listFields,
41
+ ]),
42
+ ...lists,
43
+ idPattern: pattern ? new RegExp(pattern.source, pattern.flags) : undefined,
44
+ errors: errorPorts &&
45
+ Object.freeze({
46
+ sealed: typeof sealed === 'function' ? sealed.bind(errorPorts) : sealed,
47
+ invalid: typeof invalid === 'function' ? invalid.bind(errorPorts) : invalid,
48
+ }),
49
+ assertDefinition: policy.assertDefinition?.bind(policy),
50
+ acceptsIntent: policy.acceptsIntent?.bind(policy),
51
+ });
25
52
  }
53
+ /**
54
+ * Validate, freeze and add one scope together with its aliases.
55
+ *
56
+ * Every name is checked for conflicts before any of them is stored, so a rejected scope
57
+ * leaves no partial alias entry behind.
58
+ *
59
+ * @param input - Scope declaration; the raw object is retained for `acceptsIntent` overrides
60
+ * while the compiled copy serves lookups.
61
+ * @returns This registry, for chaining.
62
+ * @throws A configured error for a sealed registry, an invalid name/description/category,
63
+ * a missing required binding, duplicate intent ids or an already-claimed name.
64
+ */
26
65
  register(input) {
27
- const definition = { ...(0, registration_js_1.registrationData)(input, ['id', 'description', 'category', 'intentIds', 'queryScopeIds', 'knowledgeTopicIds', 'toolIds', 'aliases', 'evidence', 'contextTier']), id: input.id, description: input.description, category: input.category,
28
- intentIds: input.intentIds ?? [], queryScopeIds: input.queryScopeIds ?? [],
29
- knowledgeTopicIds: input.knowledgeTopicIds ?? [], toolIds: input.toolIds ?? [],
30
- aliases: input.aliases, evidence: input.evidence, contextTier: input.contextTier,
66
+ const definition = {
67
+ ...(0, registration_js_1.registrationData)(input, [
68
+ 'id',
69
+ 'description',
70
+ 'category',
71
+ 'intentIds',
72
+ 'queryScopeIds',
73
+ 'knowledgeTopicIds',
74
+ 'toolIds',
75
+ 'aliases',
76
+ 'evidence',
77
+ 'contextTier',
78
+ ]),
79
+ id: input.id,
80
+ description: input.description,
81
+ category: input.category,
82
+ intentIds: input.intentIds ?? [],
83
+ queryScopeIds: input.queryScopeIds ?? [],
84
+ knowledgeTopicIds: input.knowledgeTopicIds ?? [],
85
+ toolIds: input.toolIds ?? [],
86
+ aliases: input.aliases,
87
+ evidence: input.evidence,
88
+ contextTier: input.contextTier,
31
89
  };
32
90
  const names = [definition.id, ...(definition.aliases ?? [])];
33
91
  const policy = this.policy, tags = policy.tags ?? [];
34
92
  const invalid = policy.errors?.invalid ?? 'Invalid scope definition';
35
- const validName = (name) => { if (typeof name !== 'string' || !name.trim())
36
- return false; if (!policy.idPattern)
37
- return true; policy.idPattern.lastIndex = 0; return policy.idPattern.test(name); };
93
+ const validName = (name) => {
94
+ if (typeof name !== 'string' || !name.trim())
95
+ return false;
96
+ if (!policy.idPattern)
97
+ return true;
98
+ policy.idPattern.lastIndex = 0;
99
+ return policy.idPattern.test(name);
100
+ };
38
101
  (0, rules_js_1.breakWhile)([
39
- { occur: () => this.sealed, error: policy.errors?.sealed ?? 'Scope registry is sealed', tags: ['sealed'] },
102
+ {
103
+ occur: () => this.sealed,
104
+ error: policy.errors?.sealed ?? 'Scope registry is sealed',
105
+ tags: ['sealed'],
106
+ },
40
107
  {
41
108
  occur: [
42
109
  () => !names.every(validName),
43
110
  () => !definition.description.trim(),
44
111
  () => policy.categories !== undefined && !policy.categories.includes(definition.category),
45
- ], error: invalid, tags: ['identity'],
112
+ ],
113
+ error: invalid,
114
+ tags: ['identity'],
46
115
  },
47
- { occur: () => policy.requireIntents === true && !definition.intentIds.length, error: invalid, tags: ['intents', 'required'] },
48
116
  {
49
- occur: [() => policy.requireSources === true && !definition.queryScopeIds.length && !definition.knowledgeTopicIds.length, () => policy.requireTools === true && !definition.toolIds.length],
50
- error: invalid, tags: ['capability-bindings'],
117
+ occur: () => policy.requireIntents === true && !definition.intentIds.length,
118
+ error: invalid,
119
+ tags: ['intents', 'required'],
51
120
  },
52
121
  {
53
- occur: [() => definition.intentIds.some(intent => typeof intent !== 'string'), () => new Set(definition.intentIds).size !== definition.intentIds.length],
54
- error: invalid, tags: ['intents', 'values'],
122
+ occur: [
123
+ () => policy.requireSources === true &&
124
+ !definition.queryScopeIds.length &&
125
+ !definition.knowledgeTopicIds.length,
126
+ () => policy.requireTools === true && !definition.toolIds.length,
127
+ ],
128
+ error: invalid,
129
+ tags: ['capability-bindings'],
130
+ },
131
+ {
132
+ occur: [
133
+ () => definition.intentIds.some((intent) => typeof intent !== 'string'),
134
+ () => new Set(definition.intentIds).size !== definition.intentIds.length,
135
+ ],
136
+ error: invalid,
137
+ tags: ['intents', 'values'],
55
138
  },
56
139
  ], tags);
57
140
  (0, synchronous_js_1.assertion)(policy.assertDefinition?.(input), 'Registry definition assertions must return void synchronously');
58
- (0, rules_js_1.breakWhile)(names.some(name => this.byId.has(name) || this.aliases.has(name)), invalid, [...tags, 'duplicate']);
141
+ (0, rules_js_1.breakWhile)(names.some((name) => this.byId.has(name) || this.aliases.has(name)), invalid, [...tags, 'duplicate']);
59
142
  const frozen = Object.freeze({
60
- ...definition, intentIds: Object.freeze([...definition.intentIds]), toolIds: Object.freeze([...definition.toolIds]),
61
- queryScopeIds: Object.freeze([...definition.queryScopeIds]), knowledgeTopicIds: Object.freeze([...definition.knowledgeTopicIds]),
143
+ ...definition,
144
+ intentIds: Object.freeze([...definition.intentIds]),
145
+ toolIds: Object.freeze([...definition.toolIds]),
146
+ queryScopeIds: Object.freeze([...definition.queryScopeIds]),
147
+ knowledgeTopicIds: Object.freeze([...definition.knowledgeTopicIds]),
62
148
  aliases: Object.freeze([...(definition.aliases ?? [])]),
63
- evidence: Object.freeze([...(definition.evidence ?? [])].map(item => Object.freeze((0, registration_js_1.registrationData)(item)))),
149
+ evidence: Object.freeze([...(definition.evidence ?? [])].map((item) => Object.freeze((0, registration_js_1.registrationData)(item)))),
64
150
  });
65
151
  this.byId.set(definition.id, frozen);
66
152
  this.sources.set(definition.id, input);
@@ -68,43 +154,126 @@ class ScopeRegistry {
68
154
  this.aliases.set(alias, definition.id);
69
155
  return this;
70
156
  }
157
+ /** Register every scope in iteration order. */
71
158
  registerAll(definitions) {
72
159
  for (const definition of definitions)
73
160
  this.register(definition);
74
161
  return this;
75
162
  }
76
- seal() { this.sealed = true; return this; }
77
- get definitions() { return Object.freeze([...this.byId.values()]); }
78
- ids() { return Object.freeze([...this.byId.keys()]); }
79
- values() { return this.byId.values(); }
80
- entries() { return this.byId.entries(); }
81
- require(id) { const value = this.get(id); if (!value)
82
- throw new TypeError(`Unknown scope: ${id}`); return value; }
83
- normalize(scope) { return this.aliases.get(scope) ?? scope; }
84
- get(scope) { return scope ? this.byId.get(this.normalize(scope)) : undefined; }
85
- has(scope) { return !!this.get(scope); }
163
+ /** Finalize the registry; no registration is accepted afterwards. */
164
+ seal() {
165
+ this.sealed = true;
166
+ return this;
167
+ }
168
+ /** Registered scopes in registration order. */
169
+ get definitions() {
170
+ return Object.freeze([...this.byId.values()]);
171
+ }
172
+ /** Registered scope ids in registration order; aliases are not included. */
173
+ ids() {
174
+ return Object.freeze([...this.byId.keys()]);
175
+ }
176
+ /** Iterate the registered scopes. */
177
+ values() {
178
+ return this.byId.values();
179
+ }
180
+ /** Iterate `[id, scope]` pairs. */
181
+ entries() {
182
+ return this.byId.entries();
183
+ }
184
+ /**
185
+ * Registered scope for an id or alias.
186
+ *
187
+ * @throws TypeError When the name resolves to nothing.
188
+ */
189
+ require(id) {
190
+ const value = this.get(id);
191
+ if (!value)
192
+ throw new TypeError(`Unknown scope: ${id}`);
193
+ return value;
194
+ }
195
+ /** Resolve an alias to its scope id; unknown names are returned unchanged. */
196
+ normalize(scope) {
197
+ return this.aliases.get(scope) ?? scope;
198
+ }
199
+ /** Registered scope for an id or alias, or `undefined` for a null/unknown name. */
200
+ get(scope) {
201
+ return scope ? this.byId.get(this.normalize(scope)) : undefined;
202
+ }
203
+ /** Whether the name resolves to a registered scope. */
204
+ has(scope) {
205
+ return !!this.get(scope);
206
+ }
207
+ /**
208
+ * Whether a scope accepts an intent.
209
+ *
210
+ * The App may override the declared `intentIds` through `acceptsIntent`; without an
211
+ * override the membership check applies.
212
+ */
86
213
  acceptsIntent(scope, goal) {
87
214
  const definition = this.get(scope);
88
215
  if (!definition)
89
216
  return false;
90
217
  const ids = definition.intentIds;
91
- return this.policy.acceptsIntent ? (0, synchronous_js_1.booleanResult)(this.policy.acceptsIntent(this.sources.get(this.normalize(scope)), goal), 'Scope intent predicates must return boolean synchronously') : ids.includes(goal);
92
- }
93
- acceptsQuery(scope, queryScope) { const ids = this.get(scope)?.queryScopeIds ?? []; return !!scope && ids.includes(queryScope); }
94
- is(scope, category) { return this.get(scope)?.category === category; }
95
- queryScopeIds() { return [...new Set([...this.byId.values()].flatMap(item => item.queryScopeIds))]; }
96
- topics(scope) { return [...(this.get(scope)?.knowledgeTopicIds ?? [])]; }
97
- evidence(scope) { return [...(this.get(scope)?.evidence ?? [])]; }
98
- contextTier(scope) { return this.get(scope)?.contextTier; }
218
+ return this.policy.acceptsIntent
219
+ ? (0, synchronous_js_1.booleanResult)(this.policy.acceptsIntent(this.sources.get(this.normalize(scope)), goal), 'Scope intent predicates must return boolean synchronously')
220
+ : ids.includes(goal);
221
+ }
222
+ /** Whether the scope declares this query scope; a null scope accepts nothing. */
223
+ acceptsQuery(scope, queryScope) {
224
+ const ids = this.get(scope)?.queryScopeIds ?? [];
225
+ return !!scope && ids.includes(queryScope);
226
+ }
227
+ /** Whether the scope belongs to the given App category. */
228
+ is(scope, category) {
229
+ return this.get(scope)?.category === category;
230
+ }
231
+ /** Every query scope declared by any registered scope, deduplicated. */
232
+ queryScopeIds() {
233
+ return [...new Set([...this.byId.values()].flatMap((item) => item.queryScopeIds))];
234
+ }
235
+ /** Knowledge topic ids of one scope; copied so callers cannot mutate the registry. */
236
+ topics(scope) {
237
+ return [...(this.get(scope)?.knowledgeTopicIds ?? [])];
238
+ }
239
+ /** Evidence declarations of one scope; copied so callers cannot mutate the registry. */
240
+ evidence(scope) {
241
+ return [...(this.get(scope)?.evidence ?? [])];
242
+ }
243
+ /** Declared context tier of one scope, if any. */
244
+ contextTier(scope) {
245
+ return this.get(scope)?.contextTier;
246
+ }
247
+ /**
248
+ * Copy the scopes that accept at least one of the given intents.
249
+ *
250
+ * @param goals - Intent ids to filter by; omit to include every registered scope.
251
+ * @returns Descriptions whose arrays are copied so callers cannot mutate registry state.
252
+ */
99
253
  describe(goals) {
100
254
  const selected = goals ? new Set(goals) : undefined;
101
- return [...this.byId.values()].filter(item => !selected || item.intentIds.some(goal => selected.has(goal)))
102
- .map(item => ({ ...item, intentIds: [...item.intentIds], queryScopeIds: [...item.queryScopeIds],
103
- knowledgeTopicIds: [...item.knowledgeTopicIds], toolIds: [...item.toolIds], aliases: [...item.aliases], evidence: [...item.evidence] }));
255
+ return [...this.byId.values()]
256
+ .filter((item) => !selected || item.intentIds.some((goal) => selected.has(goal)))
257
+ .map((item) => ({
258
+ ...item,
259
+ intentIds: [...item.intentIds],
260
+ queryScopeIds: [...item.queryScopeIds],
261
+ knowledgeTopicIds: [...item.knowledgeTopicIds],
262
+ toolIds: [...item.toolIds],
263
+ aliases: [...item.aliases],
264
+ evidence: [...item.evidence],
265
+ }));
104
266
  }
105
267
  }
106
268
  exports.ScopeRegistry = ScopeRegistry;
107
- /** Create and seal a complete catalog; use the constructor for incremental installation. */
269
+ /**
270
+ * Create and seal a complete catalog; use the constructor for incremental installation.
271
+ *
272
+ * @param definitions - Scope declarations registered in iteration order.
273
+ * @param policy - Optional registry policy forwarded to the constructor.
274
+ * @returns A sealed registry.
275
+ * @throws A configured error for the first invalid or duplicate declaration.
276
+ */
108
277
  function createScopeRegistry(definitions, policy = {}) {
109
278
  return new ScopeRegistry(policy).registerAll(definitions).seal();
110
279
  }