@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
@@ -2,7 +2,12 @@ import type { InteractionProtocolDefinition } from '../../structs/kits/interacti
2
2
  import { CommandCatalog } from './commands.js';
3
3
  import { defineCommand, commandSchema } from './command.js';
4
4
  import { bindInteraction } from './handlers.js';
5
- /** Web/AI payload family. HTTP/SSE framing and actual command execution remain separate ports. */
5
+ /**
6
+ * Web/AI payload family. HTTP/SSE framing and actual command execution remain separate ports.
7
+ *
8
+ * Every command registered here gets the envelope's discriminator forced to its own id, so a
9
+ * payload cannot claim one command while carrying another command's data.
10
+ */
6
11
  export declare class InteractionProtocol<Value extends object = Record<string, unknown>, Result = Value, Args extends unknown[] = [], Id extends string = string> {
7
12
  static readonly define: typeof defineInteractionProtocol;
8
13
  static readonly Commands: typeof CommandCatalog;
@@ -10,20 +15,52 @@ export declare class InteractionProtocol<Value extends object = Record<string, u
10
15
  static readonly commandSchema: typeof commandSchema;
11
16
  static readonly bind: typeof bindInteraction;
12
17
  static readonly categories: readonly import("./handlers.js").InteractionCategory[];
18
+ /** Field carrying the command id in a payload. */
13
19
  readonly commandField: string;
20
+ /** Accepted selector names: the command field first, then any declared aliases. */
14
21
  readonly commandSelectors: readonly string[];
22
+ /** Sealed catalog of the compiled commands. */
15
23
  readonly commands: CommandCatalog<Value, Result, Args, Id>;
16
24
  private readonly selectionError?;
25
+ /**
26
+ * @param definition - Command definitions plus envelope, selector aliases and error wording.
27
+ * @throws An error for a blank or duplicate selector, a conflicting per-command discriminator
28
+ * (it must match the envelope field and the command's own id).
29
+ */
17
30
  constructor(definition: InteractionProtocolDefinition<Value, Result, Args, Id>);
31
+ /** JSON schema for the model, expressed as a union of the per-command schemas. */
18
32
  get modelJsonSchema(): Record<string, unknown>;
33
+ /** Strict JSON schema for transport input, expressed as a union of per-command schemas. */
19
34
  get inputJsonSchema(): Record<string, unknown>;
35
+ /**
36
+ * Parse a payload and return only the result.
37
+ *
38
+ * @param value - Raw payload.
39
+ * @param args - Extra arguments forwarded to the command parser.
40
+ * @throws The same errors as `receive`.
41
+ */
20
42
  parse(value: Value, ...args: Args): Result;
21
- /** Retain the selected command separately from a formatter's output. */
43
+ /**
44
+ * Retain the selected command id separately from a formatter's output.
45
+ *
46
+ * @param value - Raw payload; aliases are normalized when more than one selector is allowed.
47
+ * @param args - Extra arguments forwarded to the command parser.
48
+ * @returns The selected command id and its parsed result.
49
+ * @throws A configured error for a malformed or ambiguous selector, or the catalog's
50
+ * command/mode/ownership errors.
51
+ */
22
52
  receive(value: Value, ...args: Args): {
23
53
  id: Id;
24
54
  result: Result;
25
55
  };
26
56
  private normalizeSelector;
27
57
  }
58
+ /**
59
+ * Construct a protocol from one definition.
60
+ *
61
+ * @param definition - Commands, envelope and selector configuration.
62
+ * @returns A new protocol instance.
63
+ * @throws The same errors as the constructor.
64
+ */
28
65
  export declare function defineInteractionProtocol<Value extends object = Record<string, unknown>, Result = Value, Args extends unknown[] = [], Id extends string = string>(definition: InteractionProtocolDefinition<Value, Result, Args, Id>): InteractionProtocol<Value, Result, Args, Id>;
29
66
  export type { InteractionProtocolDefinition } from '../../structs/kits/interaction.js';
@@ -1,10 +1,24 @@
1
+ /**
2
+ * Interaction Kit: the web/AI payload family with selector normalization.
3
+ *
4
+ * Place in the package: part of the `interaction` Kit and its main entry. HTTP/SSE framing and
5
+ * the actual command execution remain separate ports; this class only validates the envelope,
6
+ * accepts selector aliases and delegates parsing to the sealed command catalog.
7
+ *
8
+ * Exports: `InteractionProtocol`, `defineInteractionProtocol`, and its definition type.
9
+ */
1
10
  import { pinCommandDefinition } from '../../utils/interaction-definition.js';
2
11
  import { breakWhile } from '../../utils/rules.js';
3
12
  import { defineCommandCatalog, CommandCatalog } from './commands.js';
4
13
  import { defineCommand, commandSchema } from './command.js';
5
14
  import { bindInteraction } from './handlers.js';
6
15
  import { INTERACTION_CATEGORIES } from '../../structs/kits/interaction.js';
7
- /** Web/AI payload family. HTTP/SSE framing and actual command execution remain separate ports. */
16
+ /**
17
+ * Web/AI payload family. HTTP/SSE framing and actual command execution remain separate ports.
18
+ *
19
+ * Every command registered here gets the envelope's discriminator forced to its own id, so a
20
+ * payload cannot claim one command while carrying another command's data.
21
+ */
8
22
  export class InteractionProtocol {
9
23
  static define = defineInteractionProtocol;
10
24
  static Commands = CommandCatalog;
@@ -12,39 +26,79 @@ export class InteractionProtocol {
12
26
  static commandSchema = commandSchema;
13
27
  static bind = bindInteraction;
14
28
  static categories = INTERACTION_CATEGORIES;
29
+ /** Field carrying the command id in a payload. */
15
30
  commandField;
31
+ /** Accepted selector names: the command field first, then any declared aliases. */
16
32
  commandSelectors;
33
+ /** Sealed catalog of the compiled commands. */
17
34
  commands;
18
35
  selectionError;
36
+ /**
37
+ * @param definition - Command definitions plus envelope, selector aliases and error wording.
38
+ * @throws An error for a blank or duplicate selector, a conflicting per-command discriminator
39
+ * (it must match the envelope field and the command's own id).
40
+ */
19
41
  constructor(definition) {
20
- const { commands, commandField, commandAliases, modeField, unknownError, modeError, ownershipError } = definition;
42
+ const { commands, commandField, commandAliases, modeField, unknownError, modeError, ownershipError, } = definition;
21
43
  const { discriminator: _discriminator, modes: _modes, ownedFields: _ownedFields, ...envelope } = pinCommandDefinition(definition);
22
- const selectionError = typeof definition.selectionError === 'function' ? definition.selectionError.bind(definition) : definition.selectionError;
44
+ const selectionError = typeof definition.selectionError === 'function'
45
+ ? definition.selectionError.bind(definition)
46
+ : definition.selectionError;
23
47
  breakWhile(!commandField.trim(), 'Missing transfer command field');
24
48
  this.commandField = commandField;
25
49
  this.commandSelectors = Object.freeze([commandField, ...(commandAliases ?? [])]);
26
50
  breakWhile([
27
- { occur: () => this.commandSelectors.some(field => !field.trim()), error: 'Missing transfer selector' },
28
- { occur: () => new Set(this.commandSelectors).size !== this.commandSelectors.length, error: 'Duplicate transfer selector' },
51
+ {
52
+ occur: () => this.commandSelectors.some((field) => !field.trim()),
53
+ error: 'Missing transfer selector',
54
+ },
55
+ {
56
+ occur: () => new Set(this.commandSelectors).size !== this.commandSelectors.length,
57
+ error: 'Duplicate transfer selector',
58
+ },
29
59
  ]);
30
60
  this.selectionError = selectionError;
31
61
  const registered = Object.fromEntries(Object.entries(commands).map(([id, value]) => {
32
62
  const command = pinCommandDefinition(value);
33
- breakWhile(command.discriminator && (command.discriminator.field !== commandField || command.discriminator.value !== id), 'Conflicting transfer command discriminator');
63
+ breakWhile(command.discriminator &&
64
+ (command.discriminator.field !== commandField || command.discriminator.value !== id), 'Conflicting transfer command discriminator');
34
65
  return [id, { ...command, discriminator: { field: commandField, value: id } }];
35
66
  }));
36
67
  this.commands = defineCommandCatalog(registered, envelope, {
37
- modeField, unknownError, modeError, ownershipError, tags: envelope.tags,
68
+ modeField,
69
+ unknownError,
70
+ modeError,
71
+ ownershipError,
72
+ tags: envelope.tags,
38
73
  });
39
74
  }
75
+ /** JSON schema for the model, expressed as a union of the per-command schemas. */
40
76
  get modelJsonSchema() {
41
- return { anyOf: [...this.commands.values()].map(command => command.modelJsonSchema) };
77
+ return { anyOf: [...this.commands.values()].map((command) => command.modelJsonSchema) };
42
78
  }
43
- get inputJsonSchema() { return { anyOf: [...this.commands.values()].map(command => command.inputJsonSchema) }; }
79
+ /** Strict JSON schema for transport input, expressed as a union of per-command schemas. */
80
+ get inputJsonSchema() {
81
+ return { anyOf: [...this.commands.values()].map((command) => command.inputJsonSchema) };
82
+ }
83
+ /**
84
+ * Parse a payload and return only the result.
85
+ *
86
+ * @param value - Raw payload.
87
+ * @param args - Extra arguments forwarded to the command parser.
88
+ * @throws The same errors as `receive`.
89
+ */
44
90
  parse(value, ...args) {
45
91
  return this.receive(value, ...args).result;
46
92
  }
47
- /** Retain the selected command separately from a formatter's output. */
93
+ /**
94
+ * Retain the selected command id separately from a formatter's output.
95
+ *
96
+ * @param value - Raw payload; aliases are normalized when more than one selector is allowed.
97
+ * @param args - Extra arguments forwarded to the command parser.
98
+ * @returns The selected command id and its parsed result.
99
+ * @throws A configured error for a malformed or ambiguous selector, or the catalog's
100
+ * command/mode/ownership errors.
101
+ */
48
102
  receive(value, ...args) {
49
103
  const normalized = this.normalizeSelector(value, args);
50
104
  const id = normalized[this.commandField];
@@ -54,14 +108,19 @@ export class InteractionProtocol {
54
108
  // Preserve the original no-alias parsing path; alias handling is an explicit host choice.
55
109
  if (this.commandSelectors.length === 1)
56
110
  return value;
57
- const fail = () => typeof this.selectionError === 'function' ? this.selectionError(value, ...args)
58
- : this.selectionError ?? new TypeError('Invalid transfer selector');
111
+ const fail = () => typeof this.selectionError === 'function'
112
+ ? this.selectionError(value, ...args)
113
+ : (this.selectionError ?? new TypeError('Invalid transfer selector'));
59
114
  breakWhile(!value || typeof value !== 'object' || Array.isArray(value), fail);
60
115
  const record = value;
61
- const selectors = this.commandSelectors.filter(field => Object.hasOwn(record, field));
116
+ const selectors = this.commandSelectors.filter((field) => Object.hasOwn(record, field));
62
117
  breakWhile([
63
118
  { occur: () => selectors.length !== 1, error: fail, tags: ['selector-count'] },
64
- { occur: () => typeof record[selectors[0]] !== 'string', error: fail, tags: ['selector-value'] },
119
+ {
120
+ occur: () => typeof record[selectors[0]] !== 'string',
121
+ error: fail,
122
+ tags: ['selector-value'],
123
+ },
65
124
  ]);
66
125
  const normalized = { ...record, [this.commandField]: record[selectors[0]] };
67
126
  if (selectors[0] !== this.commandField)
@@ -69,6 +128,13 @@ export class InteractionProtocol {
69
128
  return normalized;
70
129
  }
71
130
  }
131
+ /**
132
+ * Construct a protocol from one definition.
133
+ *
134
+ * @param definition - Commands, envelope and selector configuration.
135
+ * @returns A new protocol instance.
136
+ * @throws The same errors as the constructor.
137
+ */
72
138
  export function defineInteractionProtocol(definition) {
73
139
  return new InteractionProtocol(definition);
74
140
  }
@@ -1,3 +1,16 @@
1
1
  import type { KnowledgeCatalogOptions, KnowledgeDocument, KnowledgeCatalog } from '../../structs/kits/knowledge.js';
2
+ /**
3
+ * Compile a knowledge catalog from document declarations.
4
+ *
5
+ * Reads are declarative: `document` returns the whole text, `self` returns exactly the named
6
+ * sections and `subtree` includes their nested sections. Section ids are validated up front,
7
+ * so a typo fails at read time instead of silently returning partial content.
8
+ *
9
+ * @param documents - Unique-id documents, each compiled into an immutable section tree.
10
+ * @param options - Optional `maxChars` budget and an observer for successful reads.
11
+ * @returns A frozen catalog extended with `sectionIds`, `assertSelection` and `read`.
12
+ * @throws TypeError For a duplicate document id, an invalid budget, an unknown document or
13
+ * section, or a malformed selection; `RangeError` when the content exceeds `maxChars`.
14
+ */
2
15
  export declare function defineKnowledgeCatalog(documents: readonly KnowledgeDocument[], options?: KnowledgeCatalogOptions): KnowledgeCatalog;
3
16
  export type * from '../../structs/kits/knowledge.js';
@@ -1,6 +1,28 @@
1
+ /**
2
+ * Knowledge Kit: compile documents into a sectioned catalog and read budgeted snapshots.
3
+ *
4
+ * Place in the package: part of the `knowledge` Kit. A snapshot carries text, revision and an
5
+ * opaque id; this module never fetches, authorizes or persists — it only resolves declared
6
+ * documents and sections.
7
+ *
8
+ * Exports: `defineKnowledgeCatalog`, and the knowledge document/read/snapshot types.
9
+ */
1
10
  import { readonlyCatalog } from '../../utils/catalog.js';
2
11
  import { compileKnowledgeDocument, knowledgeText } from './sections.js';
3
12
  import { observeSafely } from '../../utils/observer.js';
13
+ /**
14
+ * Compile a knowledge catalog from document declarations.
15
+ *
16
+ * Reads are declarative: `document` returns the whole text, `self` returns exactly the named
17
+ * sections and `subtree` includes their nested sections. Section ids are validated up front,
18
+ * so a typo fails at read time instead of silently returning partial content.
19
+ *
20
+ * @param documents - Unique-id documents, each compiled into an immutable section tree.
21
+ * @param options - Optional `maxChars` budget and an observer for successful reads.
22
+ * @returns A frozen catalog extended with `sectionIds`, `assertSelection` and `read`.
23
+ * @throws TypeError For a duplicate document id, an invalid budget, an unknown document or
24
+ * section, or a malformed selection; `RangeError` when the content exceeds `maxChars`.
25
+ */
4
26
  export function defineKnowledgeCatalog(documents, options = {}) {
5
27
  const { maxChars } = options, observe = options.observe?.bind(options);
6
28
  const catalog = new Map();
@@ -20,7 +42,9 @@ export function defineKnowledgeCatalog(documents, options = {}) {
20
42
  if (!read.selection || !['document', 'self', 'subtree'].includes(read.selection.mode))
21
43
  throw new TypeError('Invalid knowledge selection');
22
44
  if (read.selection.mode !== 'document') {
23
- if (!Array.isArray(read.selection.sectionIds) || !read.selection.sectionIds.length || new Set(read.selection.sectionIds).size !== read.selection.sectionIds.length)
45
+ if (!Array.isArray(read.selection.sectionIds) ||
46
+ !read.selection.sectionIds.length ||
47
+ new Set(read.selection.sectionIds).size !== read.selection.sectionIds.length)
24
48
  throw new TypeError('Invalid knowledge section selection');
25
49
  for (const id of read.selection.sectionIds)
26
50
  if (!entry.sections.has(id))
@@ -28,21 +52,48 @@ export function defineKnowledgeCatalog(documents, options = {}) {
28
52
  }
29
53
  return { read, entry };
30
54
  };
31
- const sectionIds = (id) => { const entry = catalog.get(id); if (!entry)
32
- throw new TypeError(`Unknown knowledge document: ${id}`); return Object.freeze([...entry.sections.keys()]); };
33
- const assertSelection = (read) => { resolve(read); };
34
- return Object.freeze({ ...readonlyCatalog([...catalog.values()].map(entry => entry.document), id => new TypeError(`Unknown knowledge document: ${id}`)),
35
- sectionIds, assertSelection,
55
+ const sectionIds = (id) => {
56
+ const entry = catalog.get(id);
57
+ if (!entry)
58
+ throw new TypeError(`Unknown knowledge document: ${id}`);
59
+ return Object.freeze([...entry.sections.keys()]);
60
+ };
61
+ const assertSelection = (read) => {
62
+ resolve(read);
63
+ };
64
+ return Object.freeze({
65
+ ...readonlyCatalog([...catalog.values()].map((entry) => entry.document), (id) => new TypeError(`Unknown knowledge document: ${id}`)),
66
+ sectionIds,
67
+ assertSelection,
36
68
  read(input) {
37
69
  const { read, entry } = resolve(input), raw = read.selection;
38
- const selection = raw.mode === 'document' ? Object.freeze({ mode: 'document' }) : Object.freeze({ mode: raw.mode, sectionIds: Object.freeze([...raw.sectionIds]) });
39
- const content = (selection.mode === 'document' ? knowledgeText(entry.document.parts) : selection.sectionIds.map(id => knowledgeText(entry.sections.get(id).parts, selection.mode === 'subtree')).join('\n\n')).trim();
70
+ const selection = raw.mode === 'document'
71
+ ? Object.freeze({ mode: 'document' })
72
+ : Object.freeze({ mode: raw.mode, sectionIds: Object.freeze([...raw.sectionIds]) });
73
+ const content = (selection.mode === 'document'
74
+ ? knowledgeText(entry.document.parts)
75
+ : selection.sectionIds
76
+ .map((id) => knowledgeText(entry.sections.get(id).parts, selection.mode === 'subtree'))
77
+ .join('\n\n')).trim();
40
78
  if (maxChars !== undefined && content.length > maxChars)
41
79
  throw new RangeError('Knowledge selection exceeds its budget');
42
80
  // Preserve the existing opaque snapshot identity format.
43
- const identitySelection = selection.mode === 'document' ? selection : { mode: selection.mode, sections: selection.sectionIds };
44
- const snapshot = Object.freeze({ documentId: read.documentId, selection, revision: entry.document.revision, locale: entry.document.locale, content,
45
- id: JSON.stringify([read.documentId, entry.document.revision, entry.document.locale, identitySelection]) });
81
+ const identitySelection = selection.mode === 'document'
82
+ ? selection
83
+ : { mode: selection.mode, sections: selection.sectionIds };
84
+ const snapshot = Object.freeze({
85
+ documentId: read.documentId,
86
+ selection,
87
+ revision: entry.document.revision,
88
+ locale: entry.document.locale,
89
+ content,
90
+ id: JSON.stringify([
91
+ read.documentId,
92
+ entry.document.revision,
93
+ entry.document.locale,
94
+ identitySelection,
95
+ ]),
96
+ });
46
97
  observeSafely(observe, snapshot);
47
98
  return snapshot;
48
99
  },
@@ -1,9 +1,20 @@
1
+ /**
2
+ * Knowledge Kit entry: sectioned knowledge documents, snapshot reads and candidate publication.
3
+ *
4
+ * Place in the package: an optional App-side library. Documents, storage, authorization and
5
+ * provenance are App-owned; this directory owns the section tree, budgeted reads, opaque
6
+ * snapshot identity and the candidate/publish lifecycle over an atomic store revision.
7
+ *
8
+ * Exports: everything from `./catalog.js` and `./publication.js`, `parseKnowledgeDocument`, and
9
+ * the `Knowledge` namespace object.
10
+ */
1
11
  export * from './catalog.js';
2
12
  export { parseKnowledgeDocument } from './sections.js';
3
13
  import { defineKnowledgeCatalog } from './catalog.js';
4
14
  import { parseKnowledgeDocument } from './sections.js';
5
15
  import { defineKnowledgePublication } from './publication.js';
6
16
  export * from './publication.js';
17
+ /** Namespace object for callers that prefer one import over named helpers. */
7
18
  export declare const Knowledge: Readonly<{
8
19
  defineKnowledgeCatalog: typeof defineKnowledgeCatalog;
9
20
  parseKnowledgeDocument: typeof parseKnowledgeDocument;
@@ -1,7 +1,22 @@
1
+ /**
2
+ * Knowledge Kit entry: sectioned knowledge documents, snapshot reads and candidate publication.
3
+ *
4
+ * Place in the package: an optional App-side library. Documents, storage, authorization and
5
+ * provenance are App-owned; this directory owns the section tree, budgeted reads, opaque
6
+ * snapshot identity and the candidate/publish lifecycle over an atomic store revision.
7
+ *
8
+ * Exports: everything from `./catalog.js` and `./publication.js`, `parseKnowledgeDocument`, and
9
+ * the `Knowledge` namespace object.
10
+ */
1
11
  export * from './catalog.js';
2
12
  export { parseKnowledgeDocument } from './sections.js';
3
13
  import { defineKnowledgeCatalog } from './catalog.js';
4
14
  import { parseKnowledgeDocument } from './sections.js';
5
15
  import { defineKnowledgePublication } from './publication.js';
6
16
  export * from './publication.js';
7
- export const Knowledge = Object.freeze({ defineKnowledgeCatalog, parseKnowledgeDocument, defineKnowledgePublication });
17
+ /** Namespace object for callers that prefer one import over named helpers. */
18
+ export const Knowledge = Object.freeze({
19
+ defineKnowledgeCatalog,
20
+ parseKnowledgeDocument,
21
+ defineKnowledgePublication,
22
+ });
@@ -1,4 +1,18 @@
1
1
  import type { KnowledgePublication, KnowledgePublicationOptions } from '../../structs/kits/knowledge-publication.js';
2
- /** Candidate preparation and publication share the same compiler and an App-owned atomic revision. */
2
+ /**
3
+ * Compile a publication lifecycle over one App-owned atomic record.
4
+ *
5
+ * Candidate preparation and publication share the same compiler and an App-owned atomic
6
+ * revision. `propose` compiles and validates a candidate but leaves published documents alone;
7
+ * `publish` re-verifies sources and the base revision before swapping, so a stale candidate can
8
+ * never overwrite newer content.
9
+ *
10
+ * @param options - Store, authorization, provenance verification, clock, optional required
11
+ * reads, capacity and retention bounds; handlers are bound to this options object.
12
+ * @returns A frozen publication exposing `read`, `propose`, `publish` and `reject`.
13
+ * @throws A configured error for invalid bounds, a malformed record or candidate, a revision
14
+ * conflict, an expired candidate, exhausted capacity, a changed base revision, or a public
15
+ * document whose content changed without a new revision.
16
+ */
3
17
  export declare function defineKnowledgePublication<App>(options: KnowledgePublicationOptions<App>): KnowledgePublication<App>;
4
18
  export type * from '../../structs/kits/knowledge-publication.js';
@@ -1,14 +1,41 @@
1
+ /**
2
+ * Knowledge Kit: candidate preparation, verification and atomic publication of documents.
3
+ *
4
+ * Place in the package: part of the `knowledge` Kit. The store, authorization and provenance
5
+ * checks are App ports; this module owns revision checking, candidate expiry and capacity,
6
+ * compilation of proposed documents and the compare-and-swap commit.
7
+ *
8
+ * Exports: `defineKnowledgePublication`, and the publication record/candidate/source types.
9
+ */
1
10
  import { defineKnowledgeCatalog } from './catalog.js';
2
11
  import { invocationId } from '../../utils/invocation.js';
3
12
  import { awaitWithSignal, awaitAssertion } from '../../utils/cancellation.js';
4
13
  import { breakWhile } from '../../utils/rules.js';
5
- /** Candidate preparation and publication share the same compiler and an App-owned atomic revision. */
14
+ /**
15
+ * Compile a publication lifecycle over one App-owned atomic record.
16
+ *
17
+ * Candidate preparation and publication share the same compiler and an App-owned atomic
18
+ * revision. `propose` compiles and validates a candidate but leaves published documents alone;
19
+ * `publish` re-verifies sources and the base revision before swapping, so a stale candidate can
20
+ * never overwrite newer content.
21
+ *
22
+ * @param options - Store, authorization, provenance verification, clock, optional required
23
+ * reads, capacity and retention bounds; handlers are bound to this options object.
24
+ * @returns A frozen publication exposing `read`, `propose`, `publish` and `reject`.
25
+ * @throws A configured error for invalid bounds, a malformed record or candidate, a revision
26
+ * conflict, an expired candidate, exhausted capacity, a changed base revision, or a public
27
+ * document whose content changed without a new revision.
28
+ */
6
29
  export function defineKnowledgePublication(options) {
7
30
  const load = options.store.load.bind(options.store), swap = options.store.compareAndSwap.bind(options.store);
8
31
  const authorize = options.authorize.bind(options), verify = options.verifySources.bind(options), now = options.now?.bind(options) ?? Date.now;
32
+ // Defaults keep one record small: at most 32 pending candidates, each valid for seven days.
9
33
  const maxCandidates = options.maxCandidates ?? 32, retention = options.candidateRetentionMs ?? 7 * 86400_000;
10
34
  const maxChars = options.maxReadChars, reads = structuredClone(options.requiredReads ?? []);
11
- breakWhile(!Number.isSafeInteger(maxCandidates) || maxCandidates < 1 || !Number.isSafeInteger(retention) || retention < 1, 'Invalid publication bounds');
35
+ breakWhile(!Number.isSafeInteger(maxCandidates) ||
36
+ maxCandidates < 1 ||
37
+ !Number.isSafeInteger(retention) ||
38
+ retention < 1, 'Invalid publication bounds');
12
39
  const compile = (documents) => {
13
40
  const catalog = defineKnowledgeCatalog(documents, { maxChars });
14
41
  for (const read of reads)
@@ -21,24 +48,53 @@ export function defineKnowledgePublication(options) {
21
48
  const sourceSnapshot = (sources) => {
22
49
  const invalid = 'Invalid or expired knowledge provenance';
23
50
  breakWhile(!Array.isArray(sources) || !sources.length || sources.length > 32, invalid);
24
- const snapshot = Array.from(sources, source => ({ id: source?.id, revision: source?.revision, expiresAtMs: source?.expiresAtMs }));
25
- breakWhile(snapshot.some(source => typeof source.id !== 'string' || !source.id.trim()
26
- || typeof source.revision !== 'string' || !source.revision.trim() || source.expiresAtMs !== undefined && (!Number.isFinite(source.expiresAtMs) || source.expiresAtMs <= now())), invalid);
51
+ const snapshot = Array.from(sources, (source) => ({
52
+ id: source?.id,
53
+ revision: source?.revision,
54
+ expiresAtMs: source?.expiresAtMs,
55
+ }));
56
+ breakWhile(snapshot.some((source) => typeof source.id !== 'string' ||
57
+ !source.id.trim() ||
58
+ typeof source.revision !== 'string' ||
59
+ !source.revision.trim() ||
60
+ (source.expiresAtMs !== undefined &&
61
+ (!Number.isFinite(source.expiresAtMs) || source.expiresAtMs <= now()))), invalid);
27
62
  return snapshot;
28
63
  };
29
64
  const read = async (context) => {
30
65
  context.signal.throwIfAborted();
31
66
  const record = structuredClone(await awaitWithSignal(load(), context.signal));
32
- breakWhile(!record || !Number.isSafeInteger(record.revision) || record.revision < 0 || !Number.isSafeInteger(record.publishedRevision) || record.publishedRevision < 0 || record.publishedRevision > record.revision
33
- || !Array.isArray(record.documents) || !Array.isArray(record.candidates) || record.candidates.length > maxCandidates, 'Invalid publication record');
34
- breakWhile(new Set(record.candidates.map(item => item?.id)).size !== record.candidates.length || record.candidates.some(item => !item || typeof item.id !== 'string' || !item.id
35
- || !Number.isSafeInteger(item.baseRevision) || item.baseRevision < 0 || item.baseRevision > record.publishedRevision
36
- || !Number.isFinite(item.createdAtMs) || !Number.isFinite(item.expiresAtMs) || item.expiresAtMs <= item.createdAtMs
37
- || !Array.isArray(item.sources) || !item.sources.length || item.sources.length > 32), 'Invalid knowledge candidate');
38
- const compilationKey = JSON.stringify([record.revision, record.publishedRevision, record.documents, record.candidates.map(item => item.document)]);
67
+ breakWhile(!record ||
68
+ !Number.isSafeInteger(record.revision) ||
69
+ record.revision < 0 ||
70
+ !Number.isSafeInteger(record.publishedRevision) ||
71
+ record.publishedRevision < 0 ||
72
+ record.publishedRevision > record.revision ||
73
+ !Array.isArray(record.documents) ||
74
+ !Array.isArray(record.candidates) ||
75
+ record.candidates.length > maxCandidates, 'Invalid publication record');
76
+ breakWhile(new Set(record.candidates.map((item) => item?.id)).size !== record.candidates.length ||
77
+ record.candidates.some((item) => !item ||
78
+ typeof item.id !== 'string' ||
79
+ !item.id ||
80
+ !Number.isSafeInteger(item.baseRevision) ||
81
+ item.baseRevision < 0 ||
82
+ item.baseRevision > record.publishedRevision ||
83
+ !Number.isFinite(item.createdAtMs) ||
84
+ !Number.isFinite(item.expiresAtMs) ||
85
+ item.expiresAtMs <= item.createdAtMs ||
86
+ !Array.isArray(item.sources) ||
87
+ !item.sources.length ||
88
+ item.sources.length > 32), 'Invalid knowledge candidate');
89
+ const compilationKey = JSON.stringify([
90
+ record.revision,
91
+ record.publishedRevision,
92
+ record.documents,
93
+ record.candidates.map((item) => item.document),
94
+ ]);
39
95
  if (compilationKey !== compiledRecord) {
40
96
  for (const item of record.candidates)
41
- compile([...record.documents.filter(doc => doc.id !== item.document.id), item.document]);
97
+ compile([...record.documents.filter((doc) => doc.id !== item.document.id), item.document]);
42
98
  compile(record.documents);
43
99
  compiledRecord = compilationKey;
44
100
  }
@@ -61,14 +117,19 @@ export function defineKnowledgePublication(options) {
61
117
  return record;
62
118
  };
63
119
  const replacement = (record, document) => {
64
- const previous = record.documents.find(item => item.id === document.id);
65
- breakWhile(!!previous && previous.revision === document.revision && JSON.stringify(previous) !== JSON.stringify(document), 'Changed knowledge needs a new document revision');
66
- const documents = [...record.documents.filter(item => item.id !== document.id), structuredClone(document)];
120
+ const previous = record.documents.find((item) => item.id === document.id);
121
+ breakWhile(!!previous &&
122
+ previous.revision === document.revision &&
123
+ JSON.stringify(previous) !== JSON.stringify(document), 'Changed knowledge needs a new document revision');
124
+ const documents = [
125
+ ...record.documents.filter((item) => item.id !== document.id),
126
+ structuredClone(document),
127
+ ];
67
128
  compile(documents);
68
129
  return documents;
69
130
  };
70
131
  const candidate = (record, id) => {
71
- const item = record.candidates.find(value => value.id === id);
132
+ const item = record.candidates.find((value) => value.id === id);
72
133
  breakWhile(!item || item.expiresAtMs <= now(), 'Knowledge candidate unavailable');
73
134
  return item;
74
135
  };
@@ -83,10 +144,16 @@ export function defineKnowledgePublication(options) {
83
144
  replacement(record, document);
84
145
  await awaitAssertion(() => verify(structuredClone(sources), context), context.signal, 'Knowledge provenance validation must return void');
85
146
  sourceSnapshot(sources);
86
- const candidates = record.candidates.filter(item => item.expiresAtMs > now());
147
+ const candidates = record.candidates.filter((item) => item.expiresAtMs > now());
87
148
  breakWhile(candidates.length >= maxCandidates, 'Knowledge candidate capacity exhausted');
88
- const item = { id: invocationId(), baseRevision: record.publishedRevision, document, sources,
89
- createdAtMs: now(), expiresAtMs: Math.min(now() + retention, ...sources.map(source => source.expiresAtMs ?? Infinity)) };
149
+ const item = {
150
+ id: invocationId(),
151
+ baseRevision: record.publishedRevision,
152
+ document,
153
+ sources,
154
+ createdAtMs: now(),
155
+ expiresAtMs: Math.min(now() + retention, ...sources.map((source) => source.expiresAtMs ?? Infinity)),
156
+ };
90
157
  return commit(record, { ...record, revision: record.revision + 1, candidates: [...candidates, item] }, context, () => {
91
158
  sourceSnapshot(sources);
92
159
  breakWhile(item.expiresAtMs <= now(), 'Knowledge candidate expired');
@@ -101,8 +168,13 @@ export function defineKnowledgePublication(options) {
101
168
  await awaitAssertion(() => verify(structuredClone(sources), context), context.signal, 'Knowledge provenance validation must return void');
102
169
  sourceSnapshot(sources);
103
170
  const documents = replacement(record, item.document);
104
- return commit(record, { ...record, revision: record.revision + 1, publishedRevision: record.publishedRevision + 1, documents,
105
- candidates: record.candidates.filter(value => value.id !== item.id) }, context, () => {
171
+ return commit(record, {
172
+ ...record,
173
+ revision: record.revision + 1,
174
+ publishedRevision: record.publishedRevision + 1,
175
+ documents,
176
+ candidates: record.candidates.filter((value) => value.id !== item.id),
177
+ }, context, () => {
106
178
  candidate(record, item.id);
107
179
  sourceSnapshot(sources);
108
180
  });
@@ -112,7 +184,11 @@ export function defineKnowledgePublication(options) {
112
184
  await awaitAssertion(() => authorize('reject', context), context.signal, 'Knowledge publication authorization must return void');
113
185
  const record = await checked(revision, context);
114
186
  candidate(record, candidateId);
115
- return commit(record, { ...record, revision: record.revision + 1, candidates: record.candidates.filter(item => item.id !== candidateId) }, context);
187
+ return commit(record, {
188
+ ...record,
189
+ revision: record.revision + 1,
190
+ candidates: record.candidates.filter((item) => item.id !== candidateId),
191
+ }, context);
116
192
  },
117
193
  });
118
194
  }
@@ -1,11 +1,34 @@
1
+ /**
2
+ * Knowledge Kit: adapter and helpers for sectioned knowledge documents.
3
+ *
4
+ * Place in the package: part of the `knowledge` Kit. The anchor format is one text adapter;
5
+ * other sources build the same document contract directly. No I/O happens here.
6
+ *
7
+ * Exports: `parseKnowledgeDocument`, `compileKnowledgeDocument`, `knowledgeText`.
8
+ */
1
9
  import type { KnowledgeDocument, KnowledgePart, KnowledgeSection } from '../../structs/kits/knowledge.js';
2
- /** Paired, nestable anchors are one text adapter. Other sources supply the same document contract directly. */
10
+ /**
11
+ * Paired, nestable anchors are one text adapter. Other sources supply the same document
12
+ * contract directly.
13
+ *
14
+ * @param input - Document identity, revision, optional locale and the anchored text.
15
+ * @returns A document whose parts alternate text strings and section objects.
16
+ * @throws TypeError For an unmatched closing anchor or an anchor left open at the end.
17
+ */
3
18
  export declare function parseKnowledgeDocument(input: {
4
19
  id: string;
5
20
  revision: string;
6
21
  text: string;
7
22
  locale?: string;
8
23
  }): KnowledgeDocument;
24
+ /**
25
+ * Deep-copy and freeze a document while indexing its sections by id.
26
+ *
27
+ * @param document - Declared document, possibly sharing arrays or containing cycles.
28
+ * @returns The frozen document plus a map from section id to its frozen section.
29
+ * @throws TypeError For a missing identity or parts array, a sparse or cyclic tree, a blank
30
+ * section id, or a duplicate section id.
31
+ */
9
32
  export declare function compileKnowledgeDocument(document: KnowledgeDocument): {
10
33
  document: Readonly<{
11
34
  id: string;
@@ -15,4 +38,11 @@ export declare function compileKnowledgeDocument(document: KnowledgeDocument): {
15
38
  }>;
16
39
  sections: Map<string, KnowledgeSection>;
17
40
  };
41
+ /**
42
+ * Flatten parts into text.
43
+ *
44
+ * @param parts - Document parts; nested sections are traversed in order.
45
+ * @param subtree - When false, nested section text is skipped and only top-level text remains.
46
+ * @returns Concatenated text with separators left to the caller.
47
+ */
18
48
  export declare function knowledgeText(parts: readonly KnowledgePart[], subtree?: boolean): string;