@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
@@ -1,28 +1,79 @@
1
+ /**
2
+ * Intents Kit: project registered intents, scopes and tools into one task-facing catalog.
3
+ *
4
+ * Place in the package: part of the `intents` Kit. It reads the actual registries supplied by
5
+ * the App instead of maintaining a parallel capability list, so an intent is only advertised
6
+ * when its tools, scopes and availability agree.
7
+ *
8
+ * Exports: `defineAgentCatalog`, and the catalog intent/scope/port types.
9
+ */
1
10
  import { booleanResult } from '../../utils/synchronous.js';
2
- /** The actual registries determine availability and relationships. No parallel capability list. */
11
+ /**
12
+ * Compile a catalog projection over the App's live registries.
13
+ *
14
+ * The actual registries determine availability and relationships. No parallel capability list
15
+ * exists: `intentIds` filters by tool support, `modelCatalog` narrows to the currently accepted
16
+ * task when `restrictToTask` is enabled, and scope tool ids are filtered to tools that exist.
17
+ *
18
+ * @param ports - Sources for intent ids, intents, scopes, the current task, the tool registry
19
+ * and the `restrictToTask` switch.
20
+ * @returns A frozen projection with `intentIds`, `intentSteps`, `intentCatalog`,
21
+ * `scopeCatalog` and `modelCatalog`.
22
+ * @throws TypeError When a supplied predicate does not return a boolean synchronously.
23
+ */
3
24
  export function defineAgentCatalog(ports) {
4
25
  const ids = ports.intentIds.bind(ports), intents = ports.intents.bind(ports), scopes = ports.scopes.bind(ports), task = ports.currentTask.bind(ports);
5
- const tools = { values: ports.tools.values.bind(ports.tools), has: ports.tools.has.bind(ports.tools), supports: ports.tools.supportsIntent.bind(ports.tools), describe: ports.tools.describe.bind(ports.tools) };
26
+ const tools = {
27
+ values: ports.tools.values.bind(ports.tools),
28
+ has: ports.tools.has.bind(ports.tools),
29
+ supports: ports.tools.supportsIntent.bind(ports.tools),
30
+ describe: ports.tools.describe.bind(ports.tools),
31
+ };
6
32
  const restrict = ports.restrictToTask !== false;
7
33
  const boolean = (value) => booleanResult(value, 'Catalog predicates must be synchronous', 'Catalog predicates must return boolean');
8
- const intentIds = (app) => ids().filter(id => boolean(tools.supports(id, app)));
9
- const intentSteps = (app) => new Map(intents().map(intent => [intent.id, [...new Set([
10
- ...intent.steps, ...[...tools.values()].filter(tool => tool.invocation && (!tool.available || app === undefined || boolean(tool.available(app)))
11
- && (tool.intentIds === 'all' || tool.intentIds.includes(intent.id))).map(tool => tool.invocation.step),
12
- ])]]));
34
+ const intentIds = (app) => ids().filter((id) => boolean(tools.supports(id, app)));
35
+ const intentSteps = (app) => new Map(intents().map((intent) => [
36
+ intent.id,
37
+ [
38
+ ...new Set([
39
+ ...intent.steps,
40
+ ...[...tools.values()]
41
+ .filter((tool) => tool.invocation &&
42
+ (!tool.available || app === undefined || boolean(tool.available(app))) &&
43
+ (tool.intentIds === 'all' || tool.intentIds.includes(intent.id)))
44
+ .map((tool) => tool.invocation.step),
45
+ ]),
46
+ ],
47
+ ]));
13
48
  const intentCatalog = (app) => {
14
49
  const selected = intentIds(app), described = tools.describe('model', app), steps = intentSteps(app);
15
- return intents(selected).map(intent => ({ ...intent, steps: steps.get(intent.id) ?? [...intent.steps],
16
- scopeIds: scopes([intent.id]).map(scope => scope.id), toolIds: described.filter(tool => tool.intentIds.includes(intent.id)).map(tool => tool.id) }));
50
+ return intents(selected).map((intent) => ({
51
+ ...intent,
52
+ steps: steps.get(intent.id) ?? [...intent.steps],
53
+ scopeIds: scopes([intent.id]).map((scope) => scope.id),
54
+ toolIds: described
55
+ .filter((tool) => tool.intentIds.includes(intent.id))
56
+ .map((tool) => tool.id),
57
+ }));
17
58
  };
18
- const scopeCatalog = (app) => scopes(intentIds(app)).map(scope => ({ ...scope, toolIds: scope.toolIds.filter(tools.has) }));
19
- return Object.freeze({ intentIds, intentSteps, intentCatalog, scopeCatalog,
59
+ const scopeCatalog = (app) => scopes(intentIds(app)).map((scope) => ({ ...scope, toolIds: scope.toolIds.filter(tools.has) }));
60
+ return Object.freeze({
61
+ intentIds,
62
+ intentSteps,
63
+ intentCatalog,
64
+ scopeCatalog,
20
65
  modelCatalog(app) {
21
- const accepted = restrict ? task(app) : undefined, selected = intentIds(app).filter(id => !accepted || id === accepted.intentId);
22
- return { availableIntentIds: selected,
23
- availableIntents: intentCatalog(app).filter(intent => selected.includes(intent.id)).map(intent => accepted ? { ...intent, scopeIds: accepted.scopeId ? [accepted.scopeId] : [] } : intent),
24
- availableScopes: scopeCatalog(app).filter(scope => !accepted || scope.id === accepted.scopeId),
25
- availableTools: tools.describe('model', app).filter(tool => !accepted || tool.intentIds.includes(accepted.intentId)) };
66
+ const accepted = restrict ? task(app) : undefined, selected = intentIds(app).filter((id) => !accepted || id === accepted.intentId);
67
+ return {
68
+ availableIntentIds: selected,
69
+ availableIntents: intentCatalog(app)
70
+ .filter((intent) => selected.includes(intent.id))
71
+ .map((intent) => accepted ? { ...intent, scopeIds: accepted.scopeId ? [accepted.scopeId] : [] } : intent),
72
+ availableScopes: scopeCatalog(app).filter((scope) => !accepted || scope.id === accepted.scopeId),
73
+ availableTools: tools
74
+ .describe('model', app)
75
+ .filter((tool) => !accepted || tool.intentIds.includes(accepted.intentId)),
76
+ };
26
77
  },
27
78
  });
28
79
  }
@@ -1,9 +1,20 @@
1
+ /**
2
+ * Intents Kit entry: intent and scope registries plus the task-facing catalog projection.
3
+ *
4
+ * Place in the package: an optional App-side library for declaring what the agent may do.
5
+ * Applications register their own intents and scopes; this directory owns registration
6
+ * checks, aliases, relationship lookups and the model-visible projection. Core never imports it.
7
+ *
8
+ * Exports: everything from `./registry.js`, `./scopes.js` and `./catalog.js`, plus the
9
+ * `Intents` namespace object.
10
+ */
1
11
  export * from './registry.js';
2
12
  export * from './scopes.js';
3
13
  export * from './catalog.js';
4
14
  import { IntentRegistry } from './registry.js';
5
15
  import { ScopeRegistry } from './scopes.js';
6
16
  import { defineAgentCatalog } from './catalog.js';
17
+ /** Namespace object for callers that prefer one import over named helpers. */
7
18
  export declare const Intents: Readonly<{
8
19
  IntentRegistry: typeof IntentRegistry;
9
20
  ScopeRegistry: typeof ScopeRegistry;
@@ -1,7 +1,18 @@
1
+ /**
2
+ * Intents Kit entry: intent and scope registries plus the task-facing catalog projection.
3
+ *
4
+ * Place in the package: an optional App-side library for declaring what the agent may do.
5
+ * Applications register their own intents and scopes; this directory owns registration
6
+ * checks, aliases, relationship lookups and the model-visible projection. Core never imports it.
7
+ *
8
+ * Exports: everything from `./registry.js`, `./scopes.js` and `./catalog.js`, plus the
9
+ * `Intents` namespace object.
10
+ */
1
11
  export * from './registry.js';
2
12
  export * from './scopes.js';
3
13
  export * from './catalog.js';
4
14
  import { IntentRegistry } from './registry.js';
5
15
  import { ScopeRegistry } from './scopes.js';
6
16
  import { defineAgentCatalog } from './catalog.js';
17
+ /** Namespace object for callers that prefer one import over named helpers. */
7
18
  export const Intents = Object.freeze({ IntentRegistry, ScopeRegistry, defineAgentCatalog });
@@ -1,30 +1,88 @@
1
+ /**
2
+ * Intents Kit: an ordered, sealable registry of intent declarations.
3
+ *
4
+ * Place in the package: part of the `intents` Kit. Intent semantics and the allowed vocabulary
5
+ * (scope modes, target modes, context tiers, steps, actions) are App configuration; this class
6
+ * owns the common lifecycle — validation, ordering, duplicate detection and sealing.
7
+ *
8
+ * Exports: `IntentRegistry`, `createIntentRegistry`, and the intent registry types.
9
+ */
1
10
  import type { IntentDefinition, IntentDescription, IntentRegistryPolicy, IntentId, RegisteredIntent } from '../../structs/kits/intents/registry.js';
2
- /** Intent semantics and allowed values are configuration; the registry owns their common lifecycle. */
11
+ /**
12
+ * Intent semantics and allowed values are configuration; the registry owns their common lifecycle.
13
+ *
14
+ * Registration order is preserved by `ids`, `definitions`, `values` and `entries`; once
15
+ * `seal()` is called the set is final and further registration is rejected.
16
+ */
3
17
  export declare class IntentRegistry<Definition extends IntentDefinition = IntentDefinition> {
18
+ /** Create and seal a complete catalog in one call. */
4
19
  static readonly create: typeof createIntentRegistry;
5
20
  private readonly byId;
6
21
  private sealed;
7
22
  private readonly policy;
23
+ /**
24
+ * @param policy - Optional id pattern, vocabulary lists, error wording and assertion hook.
25
+ * Lists and the pattern are copied so later mutation of the input cannot weaken checks.
26
+ */
8
27
  constructor(policy?: IntentRegistryPolicy<Definition>);
28
+ /**
29
+ * Validate, freeze and add one intent.
30
+ *
31
+ * Checks run in a fixed order — sealed, identity, context contract, auxiliary actions,
32
+ * handoff, plan, steps — so the reported violation is stable when several rules fail.
33
+ *
34
+ * @param input - Intent declaration; the App's own assertion receives this original object,
35
+ * not the compiled copy, so helpers and prototype methods keep working.
36
+ * @returns This registry, for chaining.
37
+ * @throws A configured error for a sealed registry, invalid identity or vocabulary values,
38
+ * empty/duplicate steps, or a duplicate intent id.
39
+ */
9
40
  register(input: Definition): this;
41
+ /** Register every intent in iteration order. */
10
42
  registerAll(definitions: Iterable<Definition>): this;
43
+ /** Registered intent for `goal`, or `undefined` when it is absent. */
11
44
  get(goal: string): RegisteredIntent<Definition> | undefined;
45
+ /** Whether an intent id is registered. */
12
46
  has(goal: string): boolean;
47
+ /** Registered intent ids in registration order. */
13
48
  ids(): readonly IntentId<Definition>[];
49
+ /** Registered intents in registration order. */
14
50
  get definitions(): readonly RegisteredIntent<Definition>[];
51
+ /** Iterate the registered intents. */
15
52
  values(): MapIterator<Readonly<Omit<Readonly<IntentDefinition & import("../../utils/registration.js").RegistrationData<Definition> & Pick<Definition, Extract<keyof Definition, keyof IntentDefinition>>>, "steps" | "auxiliaryActions"> & { readonly [Key in keyof Pick<Definition, Extract<keyof Definition, "steps" | "auxiliaryActions">>]: Readonly<Definition[Key]>; } & {
16
53
  id: Definition["id"];
17
54
  steps: Readonly<Definition["steps"]>;
18
55
  }>>;
56
+ /** Iterate `[id, intent]` pairs. */
19
57
  entries(): MapIterator<[string, Readonly<Omit<Readonly<IntentDefinition & import("../../utils/registration.js").RegistrationData<Definition> & Pick<Definition, Extract<keyof Definition, keyof IntentDefinition>>>, "steps" | "auxiliaryActions"> & { readonly [Key in keyof Pick<Definition, Extract<keyof Definition, "steps" | "auxiliaryActions">>]: Readonly<Definition[Key]>; } & {
20
58
  id: Definition["id"];
21
59
  steps: Readonly<Definition["steps"]>;
22
60
  }>]>;
61
+ /**
62
+ * Registered intent for `id`.
63
+ *
64
+ * @throws TypeError When the id is not registered.
65
+ */
23
66
  require(id: string): RegisteredIntent<Definition>;
67
+ /** Whether the intent declares this step; unknown intents allow nothing. */
24
68
  allows(goal: string, step: string): boolean;
69
+ /**
70
+ * Copy the selected intents out of the registry.
71
+ *
72
+ * @param goals - Ids to include; the default is every registered id, in registry order.
73
+ * @returns Descriptions whose arrays are copied so callers cannot mutate registry state.
74
+ */
25
75
  describe(goals?: readonly string[]): IntentDescription<Definition>[];
76
+ /** Finalize the registry; no registration is accepted afterwards. */
26
77
  seal(): this;
27
78
  }
28
- /** Create and seal a complete catalog; use the constructor for incremental installation. */
79
+ /**
80
+ * Create and seal a complete catalog; use the constructor for incremental installation.
81
+ *
82
+ * @param definitions - Intent declarations registered in iteration order.
83
+ * @param policy - Optional registry policy forwarded to the constructor.
84
+ * @returns A sealed registry.
85
+ * @throws A configured error for the first invalid or duplicate declaration.
86
+ */
29
87
  export declare function createIntentRegistry<Definition extends IntentDefinition>(definitions: Iterable<Definition>, policy?: IntentRegistryPolicy<Definition>): IntentRegistry<Definition>;
30
- export type { IntentDefinition, IntentDescription, IntentRegistryPolicy, IntentId, RegisteredIntent } from '../../structs/kits/intents/registry.js';
88
+ export type { IntentDefinition, IntentDescription, IntentRegistryPolicy, IntentId, RegisteredIntent, } from '../../structs/kits/intents/registry.js';
@@ -1,94 +1,239 @@
1
1
  import { assertion } from '../../utils/synchronous.js';
2
2
  import { breakWhile } from '../../utils/rules.js';
3
3
  import { registrationData } from '../../utils/registration.js';
4
- /** Intent semantics and allowed values are configuration; the registry owns their common lifecycle. */
4
+ /**
5
+ * Intent semantics and allowed values are configuration; the registry owns their common lifecycle.
6
+ *
7
+ * Registration order is preserved by `ids`, `definitions`, `values` and `entries`; once
8
+ * `seal()` is called the set is final and further registration is rejected.
9
+ */
5
10
  export class IntentRegistry {
11
+ /** Create and seal a complete catalog in one call. */
6
12
  static create = createIntentRegistry;
7
13
  byId = new Map();
8
14
  sealed = false;
9
15
  policy;
16
+ /**
17
+ * @param policy - Optional id pattern, vocabulary lists, error wording and assertion hook.
18
+ * Lists and the pattern are copied so later mutation of the input cannot weaken checks.
19
+ */
10
20
  constructor(policy = {}) {
11
21
  const pattern = policy.idPattern;
12
22
  const errorPorts = policy.errors, { sealed, invalid, duplicate } = errorPorts ?? {};
13
- const listFields = ['scopeModes', 'targetModes', 'contextTiers', 'actions', 'steps', 'handoffValues', 'tags'];
14
- const lists = Object.fromEntries(listFields.map(key => { const value = policy[key]; return [key, value === undefined ? undefined : Object.freeze([...value])]; }));
15
- this.policy = Object.freeze({ ...registrationData(policy, ['idPattern', 'assertDefinition', 'errors', ...listFields]), ...lists, idPattern: pattern ? new RegExp(pattern.source, pattern.flags) : undefined,
16
- errors: errorPorts && Object.freeze({ sealed: typeof sealed === 'function' ? sealed.bind(errorPorts) : sealed,
17
- invalid: typeof invalid === 'function' ? invalid.bind(errorPorts) : invalid, duplicate: duplicate?.bind(errorPorts) }),
18
- assertDefinition: policy.assertDefinition?.bind(policy) });
23
+ const listFields = [
24
+ 'scopeModes',
25
+ 'targetModes',
26
+ 'contextTiers',
27
+ 'actions',
28
+ 'steps',
29
+ 'handoffValues',
30
+ 'tags',
31
+ ];
32
+ const lists = Object.fromEntries(listFields.map((key) => {
33
+ const value = policy[key];
34
+ return [key, value === undefined ? undefined : Object.freeze([...value])];
35
+ }));
36
+ this.policy = Object.freeze({
37
+ ...registrationData(policy, ['idPattern', 'assertDefinition', 'errors', ...listFields]),
38
+ ...lists,
39
+ idPattern: pattern ? new RegExp(pattern.source, pattern.flags) : undefined,
40
+ errors: errorPorts &&
41
+ Object.freeze({
42
+ sealed: typeof sealed === 'function' ? sealed.bind(errorPorts) : sealed,
43
+ invalid: typeof invalid === 'function' ? invalid.bind(errorPorts) : invalid,
44
+ duplicate: duplicate?.bind(errorPorts),
45
+ }),
46
+ assertDefinition: policy.assertDefinition?.bind(policy),
47
+ });
19
48
  }
49
+ /**
50
+ * Validate, freeze and add one intent.
51
+ *
52
+ * Checks run in a fixed order — sealed, identity, context contract, auxiliary actions,
53
+ * handoff, plan, steps — so the reported violation is stable when several rules fail.
54
+ *
55
+ * @param input - Intent declaration; the App's own assertion receives this original object,
56
+ * not the compiled copy, so helpers and prototype methods keep working.
57
+ * @returns This registry, for chaining.
58
+ * @throws A configured error for a sealed registry, invalid identity or vocabulary values,
59
+ * empty/duplicate steps, or a duplicate intent id.
60
+ */
20
61
  register(input) {
21
62
  const id = input.id;
22
- const definition = { ...registrationData(input, ['id', 'description', 'steps', 'scopePolicy', 'targetPolicy', 'contextTier', 'planIntent', 'auxiliaryActions', 'preparedHandoff']), id, description: input.description, steps: input.steps,
23
- scopePolicy: input.scopePolicy, targetPolicy: input.targetPolicy, contextTier: input.contextTier,
24
- planIntent: input.planIntent, auxiliaryActions: input.auxiliaryActions, preparedHandoff: input.preparedHandoff };
63
+ const definition = {
64
+ ...registrationData(input, [
65
+ 'id',
66
+ 'description',
67
+ 'steps',
68
+ 'scopePolicy',
69
+ 'targetPolicy',
70
+ 'contextTier',
71
+ 'planIntent',
72
+ 'auxiliaryActions',
73
+ 'preparedHandoff',
74
+ ]),
75
+ id,
76
+ description: input.description,
77
+ steps: input.steps,
78
+ scopePolicy: input.scopePolicy,
79
+ targetPolicy: input.targetPolicy,
80
+ contextTier: input.contextTier,
81
+ planIntent: input.planIntent,
82
+ auxiliaryActions: input.auxiliaryActions,
83
+ preparedHandoff: input.preparedHandoff,
84
+ };
25
85
  const policy = this.policy;
26
86
  const invalid = policy.errors?.invalid ?? 'Invalid intent definition';
27
87
  const tags = policy.tags ?? [];
28
- const validName = (name) => { if (typeof name !== 'string' || !name.trim())
29
- return false; if (!policy.idPattern)
30
- return true; policy.idPattern.lastIndex = 0; return policy.idPattern.test(name); };
88
+ const validName = (name) => {
89
+ if (typeof name !== 'string' || !name.trim())
90
+ return false;
91
+ if (!policy.idPattern)
92
+ return true;
93
+ policy.idPattern.lastIndex = 0;
94
+ return policy.idPattern.test(name);
95
+ };
31
96
  breakWhile([
32
- { occur: () => this.sealed, error: policy.errors?.sealed ?? 'Intent registry is sealed', tags: ['sealed'] },
97
+ {
98
+ occur: () => this.sealed,
99
+ error: policy.errors?.sealed ?? 'Intent registry is sealed',
100
+ tags: ['sealed'],
101
+ },
33
102
  {
34
103
  occur: [() => !validName(definition.id), () => !definition.description.trim()],
35
- error: invalid, tags: ['identity'],
104
+ error: invalid,
105
+ tags: ['identity'],
36
106
  },
37
107
  {
38
108
  occur: [
39
- () => policy.scopeModes !== undefined && !policy.scopeModes.includes(definition.scopePolicy),
40
- () => policy.targetModes !== undefined && !policy.targetModes.includes(definition.targetPolicy),
41
- () => policy.contextTiers !== undefined && !policy.contextTiers.includes(definition.contextTier),
42
- ], error: invalid, tags: ['context-contract'],
109
+ () => policy.scopeModes !== undefined &&
110
+ !policy.scopeModes.includes(definition.scopePolicy),
111
+ () => policy.targetModes !== undefined &&
112
+ !policy.targetModes.includes(definition.targetPolicy),
113
+ () => policy.contextTiers !== undefined &&
114
+ !policy.contextTiers.includes(definition.contextTier),
115
+ ],
116
+ error: invalid,
117
+ tags: ['context-contract'],
43
118
  },
44
119
  {
45
120
  occur: [
46
121
  () => definition.auxiliaryActions !== undefined && !definition.auxiliaryActions.length,
47
- () => definition.auxiliaryActions !== undefined && definition.auxiliaryActions.some(action => policy.actions !== undefined && !policy.actions.includes(action)),
48
- () => definition.auxiliaryActions !== undefined && new Set(definition.auxiliaryActions).size !== definition.auxiliaryActions.length,
49
- ], error: invalid, tags: ['auxiliary-actions'],
122
+ () => definition.auxiliaryActions !== undefined &&
123
+ definition.auxiliaryActions.some((action) => policy.actions !== undefined && !policy.actions.includes(action)),
124
+ () => definition.auxiliaryActions !== undefined &&
125
+ new Set(definition.auxiliaryActions).size !== definition.auxiliaryActions.length,
126
+ ],
127
+ error: invalid,
128
+ tags: ['auxiliary-actions'],
129
+ },
130
+ {
131
+ occur: () => definition.preparedHandoff !== undefined &&
132
+ policy.handoffValues !== undefined &&
133
+ !policy.handoffValues.includes(definition.preparedHandoff),
134
+ error: invalid,
135
+ tags: ['handoff'],
136
+ },
137
+ {
138
+ occur: () => policy.actions !== undefined && !policy.actions.includes(definition.planIntent),
139
+ error: invalid,
140
+ tags: ['plan'],
50
141
  },
51
- { occur: () => definition.preparedHandoff !== undefined && policy.handoffValues !== undefined && !policy.handoffValues.includes(definition.preparedHandoff), error: invalid, tags: ['handoff'] },
52
- { occur: () => policy.actions !== undefined && !policy.actions.includes(definition.planIntent), error: invalid, tags: ['plan'] },
53
142
  {
54
143
  occur: [
55
144
  () => !definition.steps.length,
56
- () => definition.steps.some(step => policy.steps !== undefined && !policy.steps.includes(step)),
145
+ () => definition.steps.some((step) => policy.steps !== undefined && !policy.steps.includes(step)),
57
146
  () => new Set(definition.steps).size !== definition.steps.length,
58
- ], error: invalid, tags: ['steps'],
147
+ ],
148
+ error: invalid,
149
+ tags: ['steps'],
59
150
  },
60
151
  ], tags);
61
- // App assertions may use implementation helpers; never pass a compiled view as the source instance.
152
+ // App assertions may use implementation helpers; never pass a compiled view as the source
153
+ // instance.
62
154
  assertion(policy.assertDefinition?.(input), 'Registry definition assertions must return void synchronously');
63
- breakWhile(this.byId.has(definition.id), () => policy.errors?.duplicate?.(definition.id) ?? new Error(`Duplicate intent: ${definition.id}`), [...tags, 'duplicate']);
155
+ breakWhile(this.byId.has(definition.id), () => policy.errors?.duplicate?.(definition.id) ??
156
+ new Error(`Duplicate intent: ${definition.id}`), [...tags, 'duplicate']);
64
157
  this.byId.set(definition.id, Object.freeze({
65
- ...definition, steps: Object.freeze([...definition.steps]),
66
- ...(definition.auxiliaryActions ? { auxiliaryActions: Object.freeze([...definition.auxiliaryActions]) } : {}),
158
+ ...definition,
159
+ steps: Object.freeze([...definition.steps]),
160
+ ...(definition.auxiliaryActions
161
+ ? { auxiliaryActions: Object.freeze([...definition.auxiliaryActions]) }
162
+ : {}),
67
163
  }));
68
164
  return this;
69
165
  }
166
+ /** Register every intent in iteration order. */
70
167
  registerAll(definitions) {
71
168
  for (const definition of definitions)
72
169
  this.register(definition);
73
170
  return this;
74
171
  }
75
- get(goal) { return this.byId.get(goal); }
76
- has(goal) { return this.byId.has(goal); }
77
- ids() { return Object.freeze([...this.byId.keys()]); }
78
- get definitions() { return Object.freeze([...this.byId.values()]); }
79
- values() { return this.byId.values(); }
80
- entries() { return this.byId.entries(); }
81
- require(id) { const value = this.byId.get(id); if (!value)
82
- throw new TypeError(`Unknown intent: ${id}`); return value; }
83
- allows(goal, step) { return this.byId.get(goal)?.steps.includes(step) ?? false; }
172
+ /** Registered intent for `goal`, or `undefined` when it is absent. */
173
+ get(goal) {
174
+ return this.byId.get(goal);
175
+ }
176
+ /** Whether an intent id is registered. */
177
+ has(goal) {
178
+ return this.byId.has(goal);
179
+ }
180
+ /** Registered intent ids in registration order. */
181
+ ids() {
182
+ return Object.freeze([...this.byId.keys()]);
183
+ }
184
+ /** Registered intents in registration order. */
185
+ get definitions() {
186
+ return Object.freeze([...this.byId.values()]);
187
+ }
188
+ /** Iterate the registered intents. */
189
+ values() {
190
+ return this.byId.values();
191
+ }
192
+ /** Iterate `[id, intent]` pairs. */
193
+ entries() {
194
+ return this.byId.entries();
195
+ }
196
+ /**
197
+ * Registered intent for `id`.
198
+ *
199
+ * @throws TypeError When the id is not registered.
200
+ */
201
+ require(id) {
202
+ const value = this.byId.get(id);
203
+ if (!value)
204
+ throw new TypeError(`Unknown intent: ${id}`);
205
+ return value;
206
+ }
207
+ /** Whether the intent declares this step; unknown intents allow nothing. */
208
+ allows(goal, step) {
209
+ return this.byId.get(goal)?.steps.includes(step) ?? false;
210
+ }
211
+ /**
212
+ * Copy the selected intents out of the registry.
213
+ *
214
+ * @param goals - Ids to include; the default is every registered id, in registry order.
215
+ * @returns Descriptions whose arrays are copied so callers cannot mutate registry state.
216
+ */
84
217
  describe(goals = this.ids()) {
85
218
  const selected = new Set(goals);
86
- return [...this.byId.values()].filter(item => selected.has(item.id))
87
- .map(item => ({ ...item, steps: [...item.steps] }));
219
+ return [...this.byId.values()]
220
+ .filter((item) => selected.has(item.id))
221
+ .map((item) => ({ ...item, steps: [...item.steps] }));
222
+ }
223
+ /** Finalize the registry; no registration is accepted afterwards. */
224
+ seal() {
225
+ this.sealed = true;
226
+ return this;
88
227
  }
89
- seal() { this.sealed = true; return this; }
90
228
  }
91
- /** Create and seal a complete catalog; use the constructor for incremental installation. */
229
+ /**
230
+ * Create and seal a complete catalog; use the constructor for incremental installation.
231
+ *
232
+ * @param definitions - Intent declarations registered in iteration order.
233
+ * @param policy - Optional registry policy forwarded to the constructor.
234
+ * @returns A sealed registry.
235
+ * @throws A configured error for the first invalid or duplicate declaration.
236
+ */
92
237
  export function createIntentRegistry(definitions, policy = {}) {
93
238
  return new IntentRegistry(policy).registerAll(definitions).seal();
94
239
  }