@jangts/agent-core 0.1.1 → 0.2.1

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 (558) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/LICENSE +55 -0
  3. package/NOTICE +6 -0
  4. package/README.md +8 -0
  5. package/development/docs/README.en.md +70 -0
  6. package/development/docs/README.md +1 -1
  7. package/development/docs/acceptance.en.md +34 -0
  8. package/development/docs/agent-development.en.md +42 -0
  9. package/development/docs/api/README.en.md +62 -0
  10. package/development/docs/api/advanced-agents.en.md +135 -0
  11. package/development/docs/api/context-processing.en.md +110 -0
  12. package/development/docs/api/core.en.md +274 -0
  13. package/development/docs/api/examples.en.md +118 -0
  14. package/development/docs/api/kits.en.md +183 -0
  15. package/development/docs/api/knowledge-answering.en.md +166 -0
  16. package/development/docs/api/mock.en.md +186 -0
  17. package/development/docs/api/observability.en.md +166 -0
  18. package/development/docs/api/reference.en.md +2235 -0
  19. package/development/docs/api/reference.md +1907 -1874
  20. package/development/docs/api/support.en.md +252 -0
  21. package/development/docs/api/support.md +27 -0
  22. package/development/docs/api/types.en.md +181 -0
  23. package/development/docs/api/workflow.en.md +188 -0
  24. package/development/docs/basic-usage.en.md +78 -0
  25. package/development/docs/create-app.en.md +76 -0
  26. package/development/docs/examples/offline-agent.en.md +273 -0
  27. package/development/docs/examples.en.md +36 -0
  28. package/development/docs/flows/knowledge-maintenance.en.md +38 -0
  29. package/development/docs/getting-started.en.md +71 -0
  30. package/development/docs/knowledge.en.md +89 -0
  31. package/development/docs/maintenance.en.md +62 -0
  32. package/development/docs/materials.en.md +38 -0
  33. package/development/docs/mechanisms.en.md +227 -0
  34. package/development/docs/memory-and-learning.en.md +42 -0
  35. package/development/docs/operations.en.md +51 -0
  36. package/development/docs/records.en.md +63 -0
  37. package/development/docs/registration.en.md +63 -0
  38. package/development/skills/agent-core-app/scripts/create-app.mjs +286 -70
  39. package/development/skills/agent-core-app/scripts/lib/knowledge.mjs +77 -16
  40. package/development/skills/agent-core-app/scripts/lib/source.mjs +30 -2
  41. package/development/skills/agent-core-app/scripts/plan.mjs +46 -12
  42. package/development/skills/agent-core-app/scripts/prepare-source.mjs +61 -10
  43. package/development/skills/agent-core-app/scripts/resources.mjs +62 -17
  44. package/development/skills/agent-core-app/scripts/validate-knowledge.mjs +18 -1
  45. package/development/skills/agent-core-app/templates/catalog.json +36 -22
  46. package/dist/cjs/capabilities/index.js +13 -0
  47. package/dist/cjs/capabilities/invocation.js +80 -10
  48. package/dist/cjs/capabilities/model.js +126 -13
  49. package/dist/cjs/capabilities/tool-runtime.js +64 -12
  50. package/dist/cjs/capabilities/tools.js +266 -31
  51. package/dist/cjs/context/assembly.js +46 -5
  52. package/dist/cjs/context/audit.js +31 -6
  53. package/dist/cjs/context/fragments.js +54 -11
  54. package/dist/cjs/context/index.js +12 -0
  55. package/dist/cjs/context/journal.js +84 -7
  56. package/dist/cjs/context/plan.js +30 -2
  57. package/dist/cjs/diagnostics/catalog.js +17 -3
  58. package/dist/cjs/diagnostics/index.js +149 -29
  59. package/dist/cjs/diagnostics/sub-flow.js +240 -40
  60. package/dist/cjs/errors.js +99 -17
  61. package/dist/cjs/execution/branch.js +20 -4
  62. package/dist/cjs/execution/engine.js +470 -56
  63. package/dist/cjs/execution/events.js +136 -18
  64. package/dist/cjs/execution/index.js +7 -0
  65. package/dist/cjs/execution/reporting.js +75 -6
  66. package/dist/cjs/execution/state.js +161 -22
  67. package/dist/cjs/execution/workflow.js +224 -32
  68. package/dist/cjs/index.js +18 -0
  69. package/dist/cjs/kits/aggregation.js +45 -3
  70. package/dist/cjs/kits/answering/batch.js +23 -4
  71. package/dist/cjs/kits/answering/check-result.js +31 -8
  72. package/dist/cjs/kits/answering/checks.js +24 -3
  73. package/dist/cjs/kits/answering/flow.js +192 -36
  74. package/dist/cjs/kits/answering/index.js +19 -1
  75. package/dist/cjs/kits/answering/tasks.js +88 -13
  76. package/dist/cjs/kits/artifacts.js +36 -4
  77. package/dist/cjs/kits/candidates.js +47 -5
  78. package/dist/cjs/kits/delivery.js +40 -5
  79. package/dist/cjs/kits/durable.js +155 -31
  80. package/dist/cjs/kits/evidence.js +66 -15
  81. package/dist/cjs/kits/family.js +152 -22
  82. package/dist/cjs/kits/index.js +12 -1
  83. package/dist/cjs/kits/inference.js +104 -16
  84. package/dist/cjs/kits/intents/catalog.js +67 -16
  85. package/dist/cjs/kits/intents/index.js +11 -0
  86. package/dist/cjs/kits/intents/registry.js +188 -43
  87. package/dist/cjs/kits/intents/scopes.js +215 -46
  88. package/dist/cjs/kits/interaction/command.js +140 -36
  89. package/dist/cjs/kits/interaction/commands.js +86 -11
  90. package/dist/cjs/kits/interaction/handlers.js +27 -10
  91. package/dist/cjs/kits/interaction/index.js +10 -0
  92. package/dist/cjs/kits/interaction/transfer.js +80 -14
  93. package/dist/cjs/kits/knowledge/catalog.js +62 -11
  94. package/dist/cjs/kits/knowledge/index.js +16 -1
  95. package/dist/cjs/kits/knowledge/publication.js +99 -23
  96. package/dist/cjs/kits/knowledge/sections.js +33 -4
  97. package/dist/cjs/kits/normalization.js +51 -7
  98. package/dist/cjs/kits/policies.js +79 -15
  99. package/dist/cjs/kits/presentation/events.js +54 -10
  100. package/dist/cjs/kits/presentation/index.js +24 -1
  101. package/dist/cjs/kits/presentation/outputs.js +176 -38
  102. package/dist/cjs/kits/presentation/templates.js +33 -5
  103. package/dist/cjs/kits/presentation/variants.js +31 -2
  104. package/dist/cjs/kits/projection.js +63 -8
  105. package/dist/cjs/kits/rank-fusion.js +27 -4
  106. package/dist/cjs/kits/reflection-log-source.js +89 -16
  107. package/dist/cjs/kits/reflection.js +234 -60
  108. package/dist/cjs/kits/retrieval.js +98 -18
  109. package/dist/cjs/kits/search.js +180 -27
  110. package/dist/cjs/kits/text-skills.js +104 -19
  111. package/dist/cjs/kits/tools.js +415 -74
  112. package/dist/cjs/kits/vector-search.js +50 -16
  113. package/dist/cjs/mock/node.js +7 -1
  114. package/dist/cjs/mock/web.js +7 -1
  115. package/dist/cjs/mock.js +7 -1
  116. package/dist/cjs/model/binding.js +68 -17
  117. package/dist/cjs/model/call-budget.js +45 -4
  118. package/dist/cjs/model/decision-retry.js +19 -1
  119. package/dist/cjs/model/defaults.js +27 -4
  120. package/dist/cjs/model/index.js +7 -0
  121. package/dist/cjs/model/interactions/arguments.js +36 -1
  122. package/dist/cjs/model/interactions/json-object.js +48 -12
  123. package/dist/cjs/model/interactions/native-functions.js +52 -10
  124. package/dist/cjs/model/message-diagnostics.js +17 -4
  125. package/dist/cjs/model/options.js +9 -1
  126. package/dist/cjs/model/preparation.js +86 -12
  127. package/dist/cjs/model/runner.js +413 -79
  128. package/dist/cjs/model/selection-transport.js +48 -8
  129. package/dist/cjs/model/settings.js +67 -13
  130. package/dist/cjs/model/token-budget.js +69 -11
  131. package/dist/cjs/model/transports.js +59 -6
  132. package/dist/cjs/structs/common.js +11 -0
  133. package/dist/cjs/structs/debug.js +34 -5
  134. package/dist/cjs/structs/errors.js +26 -1
  135. package/dist/cjs/structs/index.js +11 -1
  136. package/dist/cjs/structs/kits/durable.js +7 -0
  137. package/dist/cjs/structs/kits/family.js +1 -0
  138. package/dist/cjs/structs/kits/interaction.js +8 -1
  139. package/dist/cjs/structs/kits/knowledge-publication.js +1 -0
  140. package/dist/cjs/structs/kits/reflection.js +18 -3
  141. package/dist/cjs/structs/model/chat-provider.js +6 -0
  142. package/dist/cjs/structs/support/model/completion.js +2 -0
  143. package/dist/cjs/structs/support/model/messages.js +2 -0
  144. package/dist/cjs/support/capabilities.js +43 -6
  145. package/dist/cjs/support/context/assembly.js +88 -16
  146. package/dist/cjs/support/context/compression.js +48 -6
  147. package/dist/cjs/support/context/fragments.js +6 -0
  148. package/dist/cjs/support/context/history.js +36 -1
  149. package/dist/cjs/support/context/index.js +11 -0
  150. package/dist/cjs/support/context/nodes.js +164 -35
  151. package/dist/cjs/support/context/processing.js +319 -61
  152. package/dist/cjs/support/context/selection-policy.js +98 -21
  153. package/dist/cjs/support/context/selection.js +61 -10
  154. package/dist/cjs/support/context/snapshot.js +29 -7
  155. package/dist/cjs/support/context/strategies.js +120 -28
  156. package/dist/cjs/support/index.js +9 -1
  157. package/dist/cjs/support/model/capabilities.js +20 -1
  158. package/dist/cjs/support/model/chat-completions.js +92 -20
  159. package/dist/cjs/support/model/children.js +34 -6
  160. package/dist/cjs/support/model/compatible-provider.js +189 -59
  161. package/dist/cjs/support/model/completion/calls.js +61 -0
  162. package/dist/cjs/support/model/completion/default.js +33 -0
  163. package/dist/cjs/support/model/completion/index.js +28 -0
  164. package/dist/cjs/support/model/completion/session.js +107 -0
  165. package/dist/cjs/support/model/index.js +12 -0
  166. package/dist/cjs/support/model/interactions/index.js +12 -1
  167. package/dist/cjs/support/model/interactions/json-object.js +6 -0
  168. package/dist/cjs/support/model/interactions/native-functions.js +6 -0
  169. package/dist/cjs/support/model/observer.js +32 -6
  170. package/dist/cjs/support/model/preview-rules.js +66 -16
  171. package/dist/cjs/support/model/reply-preview.js +77 -17
  172. package/dist/cjs/support/model/stage-transport.js +33 -7
  173. package/dist/cjs/support/model/strategies.js +75 -14
  174. package/dist/cjs/support/model/transports.js +53 -11
  175. package/dist/cjs/support/registration.js +49 -7
  176. package/dist/cjs/support/schema.js +46 -4
  177. package/dist/cjs/support/stream-events.js +60 -8
  178. package/dist/cjs/support/tool-runtime.js +6 -0
  179. package/dist/cjs/support/tools.js +79 -10
  180. package/dist/cjs/support/transport/index.js +7 -0
  181. package/dist/cjs/support/transport/json.js +28 -4
  182. package/dist/cjs/support/transport/sse.js +25 -2
  183. package/dist/cjs/utils/break-observer.js +20 -2
  184. package/dist/cjs/utils/cancellation.js +77 -9
  185. package/dist/cjs/utils/catalog.js +19 -4
  186. package/dist/cjs/utils/debug.js +14 -2
  187. package/dist/cjs/utils/index.js +8 -0
  188. package/dist/cjs/utils/interaction-definition.js +26 -6
  189. package/dist/cjs/utils/invocation.js +42 -4
  190. package/dist/cjs/utils/model-protocol.js +20 -1
  191. package/dist/cjs/utils/object.js +16 -0
  192. package/dist/cjs/utils/observer.js +22 -2
  193. package/dist/cjs/utils/protocol-registry.js +47 -4
  194. package/dist/cjs/utils/query-key.js +21 -2
  195. package/dist/cjs/utils/registration.js +18 -2
  196. package/dist/cjs/utils/rules.js +39 -11
  197. package/dist/cjs/utils/schema-adapter.js +25 -2
  198. package/dist/cjs/utils/synchronous.js +64 -7
  199. package/dist/cjs/utils/text.js +15 -1
  200. package/dist/esm/capabilities/index.d.ts +13 -0
  201. package/dist/esm/capabilities/index.js +13 -0
  202. package/dist/esm/capabilities/invocation.d.ts +16 -2
  203. package/dist/esm/capabilities/invocation.js +80 -10
  204. package/dist/esm/capabilities/model.d.ts +68 -1
  205. package/dist/esm/capabilities/model.js +126 -13
  206. package/dist/esm/capabilities/tool-runtime.d.ts +11 -0
  207. package/dist/esm/capabilities/tool-runtime.js +64 -12
  208. package/dist/esm/capabilities/tools.d.ts +96 -3
  209. package/dist/esm/capabilities/tools.js +267 -32
  210. package/dist/esm/context/assembly.d.ts +13 -2
  211. package/dist/esm/context/assembly.js +46 -5
  212. package/dist/esm/context/audit.d.ts +23 -1
  213. package/dist/esm/context/audit.js +31 -6
  214. package/dist/esm/context/fragments.d.ts +37 -3
  215. package/dist/esm/context/fragments.js +54 -11
  216. package/dist/esm/context/index.d.ts +12 -0
  217. package/dist/esm/context/index.js +12 -0
  218. package/dist/esm/context/journal.d.ts +32 -1
  219. package/dist/esm/context/journal.js +84 -7
  220. package/dist/esm/context/plan.d.ts +11 -1
  221. package/dist/esm/context/plan.js +30 -2
  222. package/dist/esm/diagnostics/catalog.d.ts +6 -0
  223. package/dist/esm/diagnostics/catalog.js +17 -3
  224. package/dist/esm/diagnostics/index.d.ts +30 -2
  225. package/dist/esm/diagnostics/index.js +149 -29
  226. package/dist/esm/diagnostics/sub-flow.d.ts +41 -3
  227. package/dist/esm/diagnostics/sub-flow.js +240 -40
  228. package/dist/esm/errors.d.ts +22 -2
  229. package/dist/esm/errors.js +99 -17
  230. package/dist/esm/execution/branch.d.ts +19 -1
  231. package/dist/esm/execution/branch.js +20 -4
  232. package/dist/esm/execution/engine.d.ts +291 -5
  233. package/dist/esm/execution/engine.js +471 -57
  234. package/dist/esm/execution/events.d.ts +16 -2
  235. package/dist/esm/execution/events.js +136 -18
  236. package/dist/esm/execution/index.d.ts +7 -0
  237. package/dist/esm/execution/index.js +7 -0
  238. package/dist/esm/execution/reporting.d.ts +49 -1
  239. package/dist/esm/execution/reporting.js +75 -6
  240. package/dist/esm/execution/state.d.ts +126 -10
  241. package/dist/esm/execution/state.js +161 -22
  242. package/dist/esm/execution/workflow.d.ts +121 -3
  243. package/dist/esm/execution/workflow.js +224 -32
  244. package/dist/esm/index.d.ts +17 -1
  245. package/dist/esm/index.js +18 -0
  246. package/dist/esm/kits/aggregation.d.ts +34 -2
  247. package/dist/esm/kits/aggregation.js +45 -3
  248. package/dist/esm/kits/answering/batch.d.ts +17 -0
  249. package/dist/esm/kits/answering/batch.js +23 -4
  250. package/dist/esm/kits/answering/check-result.d.ts +18 -1
  251. package/dist/esm/kits/answering/check-result.js +31 -8
  252. package/dist/esm/kits/answering/checks.d.ts +11 -0
  253. package/dist/esm/kits/answering/checks.js +24 -3
  254. package/dist/esm/kits/answering/flow.d.ts +25 -2
  255. package/dist/esm/kits/answering/flow.js +192 -36
  256. package/dist/esm/kits/answering/index.d.ts +12 -0
  257. package/dist/esm/kits/answering/index.js +19 -1
  258. package/dist/esm/kits/answering/tasks.d.ts +32 -1
  259. package/dist/esm/kits/answering/tasks.js +88 -13
  260. package/dist/esm/kits/artifacts.d.ts +11 -0
  261. package/dist/esm/kits/artifacts.js +36 -4
  262. package/dist/esm/kits/candidates.d.ts +23 -1
  263. package/dist/esm/kits/candidates.js +47 -5
  264. package/dist/esm/kits/delivery.d.ts +34 -0
  265. package/dist/esm/kits/delivery.js +40 -5
  266. package/dist/esm/kits/durable.d.ts +19 -0
  267. package/dist/esm/kits/durable.js +155 -31
  268. package/dist/esm/kits/evidence.d.ts +28 -5
  269. package/dist/esm/kits/evidence.js +66 -15
  270. package/dist/esm/kits/family.d.ts +17 -1
  271. package/dist/esm/kits/family.js +152 -22
  272. package/dist/esm/kits/index.d.ts +12 -1
  273. package/dist/esm/kits/index.js +12 -1
  274. package/dist/esm/kits/inference.d.ts +64 -0
  275. package/dist/esm/kits/inference.js +104 -16
  276. package/dist/esm/kits/intents/catalog.d.ts +13 -1
  277. package/dist/esm/kits/intents/catalog.js +67 -16
  278. package/dist/esm/kits/intents/index.d.ts +11 -0
  279. package/dist/esm/kits/intents/index.js +11 -0
  280. package/dist/esm/kits/intents/registry.d.ts +61 -3
  281. package/dist/esm/kits/intents/registry.js +188 -43
  282. package/dist/esm/kits/intents/scopes.d.ts +73 -3
  283. package/dist/esm/kits/intents/scopes.js +215 -46
  284. package/dist/esm/kits/interaction/command.d.ts +38 -4
  285. package/dist/esm/kits/interaction/command.js +140 -36
  286. package/dist/esm/kits/interaction/commands.d.ts +66 -2
  287. package/dist/esm/kits/interaction/commands.js +86 -11
  288. package/dist/esm/kits/interaction/handlers.d.ts +19 -2
  289. package/dist/esm/kits/interaction/handlers.js +27 -10
  290. package/dist/esm/kits/interaction/index.d.ts +10 -0
  291. package/dist/esm/kits/interaction/index.js +10 -0
  292. package/dist/esm/kits/interaction/transfer.d.ts +39 -2
  293. package/dist/esm/kits/interaction/transfer.js +80 -14
  294. package/dist/esm/kits/knowledge/catalog.d.ts +13 -0
  295. package/dist/esm/kits/knowledge/catalog.js +62 -11
  296. package/dist/esm/kits/knowledge/index.d.ts +11 -0
  297. package/dist/esm/kits/knowledge/index.js +16 -1
  298. package/dist/esm/kits/knowledge/publication.d.ts +15 -1
  299. package/dist/esm/kits/knowledge/publication.js +99 -23
  300. package/dist/esm/kits/knowledge/sections.d.ts +31 -1
  301. package/dist/esm/kits/knowledge/sections.js +33 -4
  302. package/dist/esm/kits/normalization.d.ts +25 -2
  303. package/dist/esm/kits/normalization.js +51 -7
  304. package/dist/esm/kits/policies.d.ts +26 -3
  305. package/dist/esm/kits/policies.js +79 -15
  306. package/dist/esm/kits/presentation/events.d.ts +51 -4
  307. package/dist/esm/kits/presentation/events.js +54 -10
  308. package/dist/esm/kits/presentation/index.d.ts +12 -0
  309. package/dist/esm/kits/presentation/index.js +25 -2
  310. package/dist/esm/kits/presentation/outputs.d.ts +30 -1
  311. package/dist/esm/kits/presentation/outputs.js +176 -38
  312. package/dist/esm/kits/presentation/templates.d.ts +32 -3
  313. package/dist/esm/kits/presentation/templates.js +33 -5
  314. package/dist/esm/kits/presentation/variants.d.ts +29 -0
  315. package/dist/esm/kits/presentation/variants.js +31 -2
  316. package/dist/esm/kits/projection.d.ts +42 -5
  317. package/dist/esm/kits/projection.js +63 -8
  318. package/dist/esm/kits/rank-fusion.d.ts +21 -1
  319. package/dist/esm/kits/rank-fusion.js +28 -5
  320. package/dist/esm/kits/reflection-log-source.d.ts +28 -1
  321. package/dist/esm/kits/reflection-log-source.js +89 -16
  322. package/dist/esm/kits/reflection.d.ts +17 -1
  323. package/dist/esm/kits/reflection.js +235 -61
  324. package/dist/esm/kits/retrieval.d.ts +18 -2
  325. package/dist/esm/kits/retrieval.js +98 -18
  326. package/dist/esm/kits/search.d.ts +56 -3
  327. package/dist/esm/kits/search.js +180 -27
  328. package/dist/esm/kits/text-skills.d.ts +16 -2
  329. package/dist/esm/kits/text-skills.js +104 -19
  330. package/dist/esm/kits/tools.d.ts +122 -2
  331. package/dist/esm/kits/tools.js +416 -74
  332. package/dist/esm/kits/vector-search.d.ts +47 -1
  333. package/dist/esm/kits/vector-search.js +51 -17
  334. package/dist/esm/mock/node.d.ts +7 -0
  335. package/dist/esm/mock/node.js +7 -1
  336. package/dist/esm/mock/web.d.ts +7 -0
  337. package/dist/esm/mock/web.js +7 -1
  338. package/dist/esm/mock.d.ts +7 -0
  339. package/dist/esm/mock.js +7 -1
  340. package/dist/esm/model/binding.d.ts +32 -3
  341. package/dist/esm/model/binding.js +68 -17
  342. package/dist/esm/model/call-budget.d.ts +30 -2
  343. package/dist/esm/model/call-budget.js +45 -4
  344. package/dist/esm/model/decision-retry.d.ts +10 -1
  345. package/dist/esm/model/decision-retry.js +19 -1
  346. package/dist/esm/model/defaults.d.ts +13 -2
  347. package/dist/esm/model/defaults.js +27 -4
  348. package/dist/esm/model/index.d.ts +7 -0
  349. package/dist/esm/model/index.js +7 -0
  350. package/dist/esm/model/interactions/arguments.d.ts +27 -0
  351. package/dist/esm/model/interactions/arguments.js +36 -1
  352. package/dist/esm/model/interactions/json-object.d.ts +7 -1
  353. package/dist/esm/model/interactions/json-object.js +48 -12
  354. package/dist/esm/model/interactions/native-functions.d.ts +6 -0
  355. package/dist/esm/model/interactions/native-functions.js +52 -10
  356. package/dist/esm/model/message-diagnostics.d.ts +17 -1
  357. package/dist/esm/model/message-diagnostics.js +17 -4
  358. package/dist/esm/model/options.d.ts +18 -1
  359. package/dist/esm/model/options.js +9 -1
  360. package/dist/esm/model/preparation.d.ts +30 -2
  361. package/dist/esm/model/preparation.js +86 -12
  362. package/dist/esm/model/runner.d.ts +129 -5
  363. package/dist/esm/model/runner.js +414 -80
  364. package/dist/esm/model/selection-transport.d.ts +14 -1
  365. package/dist/esm/model/selection-transport.js +48 -8
  366. package/dist/esm/model/settings.d.ts +11 -0
  367. package/dist/esm/model/settings.js +67 -13
  368. package/dist/esm/model/token-budget.d.ts +59 -1
  369. package/dist/esm/model/token-budget.js +69 -11
  370. package/dist/esm/model/transports.d.ts +20 -2
  371. package/dist/esm/model/transports.js +59 -6
  372. package/dist/esm/structs/capabilities/invocation.d.ts +36 -0
  373. package/dist/esm/structs/capabilities/model.d.ts +27 -0
  374. package/dist/esm/structs/capabilities/tools.d.ts +38 -0
  375. package/dist/esm/structs/common.d.ts +62 -2
  376. package/dist/esm/structs/common.js +11 -0
  377. package/dist/esm/structs/context/fragments.d.ts +28 -0
  378. package/dist/esm/structs/context/journal.d.ts +28 -3
  379. package/dist/esm/structs/context/processing.d.ts +11 -0
  380. package/dist/esm/structs/debug.d.ts +58 -1
  381. package/dist/esm/structs/debug.js +34 -5
  382. package/dist/esm/structs/diagnostics.d.ts +119 -1
  383. package/dist/esm/structs/errors.d.ts +42 -1
  384. package/dist/esm/structs/errors.js +26 -1
  385. package/dist/esm/structs/execution/engine.d.ts +24 -1
  386. package/dist/esm/structs/execution/events.d.ts +12 -0
  387. package/dist/esm/structs/execution/workflow.d.ts +71 -0
  388. package/dist/esm/structs/index.d.ts +11 -1
  389. package/dist/esm/structs/index.js +11 -1
  390. package/dist/esm/structs/invocation.d.ts +30 -0
  391. package/dist/esm/structs/kits/aggregation.d.ts +12 -0
  392. package/dist/esm/structs/kits/answering/checks.d.ts +11 -0
  393. package/dist/esm/structs/kits/answering/flow.d.ts +35 -1
  394. package/dist/esm/structs/kits/answering/state.d.ts +21 -0
  395. package/dist/esm/structs/kits/answering/tasks.d.ts +21 -0
  396. package/dist/esm/structs/kits/artifacts.d.ts +14 -0
  397. package/dist/esm/structs/kits/candidates.d.ts +19 -0
  398. package/dist/esm/structs/kits/delivery.d.ts +22 -0
  399. package/dist/esm/structs/kits/durable.d.ts +56 -3
  400. package/dist/esm/structs/kits/durable.js +7 -0
  401. package/dist/esm/structs/kits/evidence.d.ts +23 -0
  402. package/dist/esm/structs/kits/family.d.ts +49 -1
  403. package/dist/esm/structs/kits/family.js +1 -0
  404. package/dist/esm/structs/kits/intents/catalog.d.ts +26 -0
  405. package/dist/esm/structs/kits/intents/registry.d.ts +34 -0
  406. package/dist/esm/structs/kits/intents/scopes.d.ts +36 -1
  407. package/dist/esm/structs/kits/interaction.d.ts +64 -0
  408. package/dist/esm/structs/kits/interaction.js +8 -1
  409. package/dist/esm/structs/kits/knowledge-publication.d.ts +43 -1
  410. package/dist/esm/structs/kits/knowledge-publication.js +1 -0
  411. package/dist/esm/structs/kits/knowledge.d.ts +39 -2
  412. package/dist/esm/structs/kits/normalization.d.ts +15 -0
  413. package/dist/esm/structs/kits/policies.d.ts +25 -1
  414. package/dist/esm/structs/kits/presentation/events.d.ts +28 -4
  415. package/dist/esm/structs/kits/presentation/outputs.d.ts +38 -1
  416. package/dist/esm/structs/kits/presentation/templates.d.ts +15 -0
  417. package/dist/esm/structs/kits/projection.d.ts +21 -0
  418. package/dist/esm/structs/kits/reflection.d.ts +61 -2
  419. package/dist/esm/structs/kits/reflection.js +18 -3
  420. package/dist/esm/structs/kits/retrieval.d.ts +39 -0
  421. package/dist/esm/structs/kits/search.d.ts +24 -0
  422. package/dist/esm/structs/kits/text-skills.d.ts +36 -0
  423. package/dist/esm/structs/kits/tools.d.ts +87 -0
  424. package/dist/esm/structs/model/chat-provider.d.ts +24 -1
  425. package/dist/esm/structs/model/chat-provider.js +6 -0
  426. package/dist/esm/structs/model/interactions.d.ts +38 -0
  427. package/dist/esm/structs/model/messages.d.ts +34 -0
  428. package/dist/esm/structs/model/runtime.d.ts +104 -6
  429. package/dist/esm/structs/support/capabilities.d.ts +19 -2
  430. package/dist/esm/structs/support/context-processing.d.ts +88 -9
  431. package/dist/esm/structs/support/context.d.ts +29 -1
  432. package/dist/esm/structs/support/model/completion.d.ts +50 -0
  433. package/dist/esm/structs/support/model/completion.js +1 -0
  434. package/dist/esm/structs/support/model/interactions.d.ts +13 -1
  435. package/dist/esm/structs/support/model/messages.d.ts +54 -0
  436. package/dist/esm/structs/support/model/messages.js +1 -0
  437. package/dist/esm/structs/support/model/provider-observer.d.ts +22 -1
  438. package/dist/esm/structs/support/model/provider.d.ts +71 -6
  439. package/dist/esm/structs/support/registration.d.ts +13 -0
  440. package/dist/esm/structs/support/schema.d.ts +14 -0
  441. package/dist/esm/structs/support/tools.d.ts +28 -0
  442. package/dist/esm/structs/support/transport/json.d.ts +16 -0
  443. package/dist/esm/structs/support/transport/sse.d.ts +15 -0
  444. package/dist/esm/structs/utils/rules.d.ts +19 -0
  445. package/dist/esm/support/capabilities.d.ts +25 -2
  446. package/dist/esm/support/capabilities.js +43 -6
  447. package/dist/esm/support/context/assembly.d.ts +35 -4
  448. package/dist/esm/support/context/assembly.js +88 -16
  449. package/dist/esm/support/context/compression.d.ts +17 -1
  450. package/dist/esm/support/context/compression.js +48 -6
  451. package/dist/esm/support/context/fragments.d.ts +6 -0
  452. package/dist/esm/support/context/fragments.js +6 -0
  453. package/dist/esm/support/context/history.d.ts +43 -0
  454. package/dist/esm/support/context/history.js +36 -1
  455. package/dist/esm/support/context/index.d.ts +13 -2
  456. package/dist/esm/support/context/index.js +12 -1
  457. package/dist/esm/support/context/nodes.d.ts +65 -3
  458. package/dist/esm/support/context/nodes.js +165 -36
  459. package/dist/esm/support/context/processing.d.ts +152 -1
  460. package/dist/esm/support/context/processing.js +320 -62
  461. package/dist/esm/support/context/selection-policy.d.ts +42 -2
  462. package/dist/esm/support/context/selection-policy.js +98 -21
  463. package/dist/esm/support/context/selection.d.ts +14 -1
  464. package/dist/esm/support/context/selection.js +61 -10
  465. package/dist/esm/support/context/snapshot.d.ts +23 -1
  466. package/dist/esm/support/context/snapshot.js +29 -7
  467. package/dist/esm/support/context/strategies.d.ts +35 -2
  468. package/dist/esm/support/context/strategies.js +120 -28
  469. package/dist/esm/support/index.d.ts +9 -1
  470. package/dist/esm/support/index.js +9 -1
  471. package/dist/esm/support/model/capabilities.d.ts +10 -0
  472. package/dist/esm/support/model/capabilities.js +20 -1
  473. package/dist/esm/support/model/chat-completions.d.ts +44 -15
  474. package/dist/esm/support/model/chat-completions.js +92 -20
  475. package/dist/esm/support/model/children.d.ts +34 -2
  476. package/dist/esm/support/model/children.js +34 -6
  477. package/dist/esm/support/model/compatible-provider.d.ts +29 -3
  478. package/dist/esm/support/model/compatible-provider.js +190 -60
  479. package/dist/esm/support/model/completion/calls.d.ts +40 -0
  480. package/dist/esm/support/model/completion/calls.js +58 -0
  481. package/dist/esm/support/model/completion/default.d.ts +11 -0
  482. package/dist/esm/support/model/completion/default.js +30 -0
  483. package/dist/esm/support/model/completion/index.d.ts +10 -0
  484. package/dist/esm/support/model/completion/index.js +22 -0
  485. package/dist/esm/support/model/completion/session.d.ts +16 -0
  486. package/dist/esm/support/model/completion/session.js +104 -0
  487. package/dist/esm/support/model/index.d.ts +14 -0
  488. package/dist/esm/support/model/index.js +12 -0
  489. package/dist/esm/support/model/interactions/index.d.ts +1 -1
  490. package/dist/esm/support/model/interactions/index.js +12 -1
  491. package/dist/esm/support/model/interactions/json-object.d.ts +6 -0
  492. package/dist/esm/support/model/interactions/json-object.js +6 -0
  493. package/dist/esm/support/model/interactions/native-functions.d.ts +6 -0
  494. package/dist/esm/support/model/interactions/native-functions.js +6 -0
  495. package/dist/esm/support/model/observer.d.ts +25 -2
  496. package/dist/esm/support/model/observer.js +32 -6
  497. package/dist/esm/support/model/preview-rules.d.ts +26 -2
  498. package/dist/esm/support/model/preview-rules.js +66 -16
  499. package/dist/esm/support/model/reply-preview.d.ts +22 -1
  500. package/dist/esm/support/model/reply-preview.js +77 -17
  501. package/dist/esm/support/model/stage-transport.d.ts +9 -1
  502. package/dist/esm/support/model/stage-transport.js +33 -7
  503. package/dist/esm/support/model/strategies.d.ts +28 -2
  504. package/dist/esm/support/model/strategies.js +75 -14
  505. package/dist/esm/support/model/transports.d.ts +17 -1
  506. package/dist/esm/support/model/transports.js +53 -11
  507. package/dist/esm/support/registration.d.ts +20 -1
  508. package/dist/esm/support/registration.js +49 -7
  509. package/dist/esm/support/schema.d.ts +31 -1
  510. package/dist/esm/support/schema.js +46 -4
  511. package/dist/esm/support/stream-events.d.ts +22 -1
  512. package/dist/esm/support/stream-events.js +60 -8
  513. package/dist/esm/support/tool-runtime.d.ts +6 -0
  514. package/dist/esm/support/tool-runtime.js +6 -0
  515. package/dist/esm/support/tools.d.ts +22 -0
  516. package/dist/esm/support/tools.js +79 -10
  517. package/dist/esm/support/transport/index.d.ts +7 -0
  518. package/dist/esm/support/transport/index.js +7 -0
  519. package/dist/esm/support/transport/json.d.ts +29 -2
  520. package/dist/esm/support/transport/json.js +28 -4
  521. package/dist/esm/support/transport/sse.d.ts +31 -1
  522. package/dist/esm/support/transport/sse.js +25 -2
  523. package/dist/esm/types.d.ts +9 -1
  524. package/dist/esm/utils/break-observer.d.ts +27 -2
  525. package/dist/esm/utils/break-observer.js +20 -2
  526. package/dist/esm/utils/cancellation.d.ts +56 -5
  527. package/dist/esm/utils/cancellation.js +77 -9
  528. package/dist/esm/utils/catalog.d.ts +20 -1
  529. package/dist/esm/utils/catalog.js +19 -4
  530. package/dist/esm/utils/debug.d.ts +20 -1
  531. package/dist/esm/utils/debug.js +14 -2
  532. package/dist/esm/utils/index.d.ts +8 -0
  533. package/dist/esm/utils/index.js +8 -0
  534. package/dist/esm/utils/interaction-definition.d.ts +18 -1
  535. package/dist/esm/utils/interaction-definition.js +26 -6
  536. package/dist/esm/utils/invocation.d.ts +36 -1
  537. package/dist/esm/utils/invocation.js +42 -4
  538. package/dist/esm/utils/model-protocol.d.ts +8 -0
  539. package/dist/esm/utils/model-protocol.js +20 -1
  540. package/dist/esm/utils/object.d.ts +16 -0
  541. package/dist/esm/utils/object.js +16 -0
  542. package/dist/esm/utils/observer.d.ts +19 -1
  543. package/dist/esm/utils/observer.js +22 -2
  544. package/dist/esm/utils/protocol-registry.d.ts +38 -1
  545. package/dist/esm/utils/protocol-registry.js +47 -4
  546. package/dist/esm/utils/query-key.d.ts +11 -1
  547. package/dist/esm/utils/query-key.js +21 -2
  548. package/dist/esm/utils/registration.d.ts +34 -2
  549. package/dist/esm/utils/registration.js +18 -2
  550. package/dist/esm/utils/rules.d.ts +81 -4
  551. package/dist/esm/utils/rules.js +39 -11
  552. package/dist/esm/utils/schema-adapter.d.ts +12 -1
  553. package/dist/esm/utils/schema-adapter.js +25 -2
  554. package/dist/esm/utils/synchronous.d.ts +60 -4
  555. package/dist/esm/utils/synchronous.js +64 -7
  556. package/dist/esm/utils/text.d.ts +15 -1
  557. package/dist/esm/utils/text.js +15 -1
  558. package/package.json +7 -3
@@ -4,64 +4,188 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.TextSearch = void 0;
7
+ /**
8
+ * Text Search Kit: an in-memory MiniSearch index with explicit field declarations.
9
+ *
10
+ * Place in the package: an optional App-side full-text index. The Kit owns the index,
11
+ * declarative validation and snapshot compatibility; corpus, tokenization policy, storage,
12
+ * identity, filters and persistence stay with the App. No model call or Core dependency is
13
+ * involved, and nothing is written to disk here.
14
+ *
15
+ * Exports: `TextSearch` and the search option/query/hit/snapshot types.
16
+ */
7
17
  const synchronous_js_1 = require("../utils/synchronous.js");
8
18
  const minisearch_1 = __importDefault(require("minisearch"));
9
19
  const rules_js_1 = require("../utils/rules.js");
10
- /** Optional App-side full-text index. No storage, identity, model calls or Core dependencies. */
20
+ /**
21
+ * Optional App-side full-text index. No storage, identity, model calls or Core dependencies.
22
+ *
23
+ * Only declared fields are indexed and only `storedFields` come back with a hit, so a document
24
+ * never leaks extra properties into search results.
25
+ */
11
26
  class TextSearch {
12
27
  options;
13
28
  stored;
14
29
  inputFields;
15
30
  configurationFingerprint;
16
31
  index;
32
+ /**
33
+ * Compile the index configuration and validate it before any document is added.
34
+ *
35
+ * @param registration - Format revision, indexed and stored fields, optional tokenizer,
36
+ * boosts and combination mode; handlers are bound to this object.
37
+ * @throws TypeError For a missing revision, empty/duplicate/blank field declarations, stored
38
+ * fields that collide with search metadata, an invalid tokenizer or combination, or a
39
+ * boost for an undeclared field or with a non-positive value.
40
+ */
17
41
  constructor(registration) {
18
- const definition = { indexRevision: registration.indexRevision, fields: registration.fields, storedFields: registration.storedFields,
19
- tokenize: registration.tokenize, boost: registration.boost, combineWith: registration.combineWith };
42
+ const definition = {
43
+ indexRevision: registration.indexRevision,
44
+ fields: registration.fields,
45
+ storedFields: registration.storedFields,
46
+ tokenize: registration.tokenize,
47
+ boost: registration.boost,
48
+ combineWith: registration.combineWith,
49
+ };
20
50
  const reserved = new Set(['id', 'score', 'terms', 'queryTerms', 'match']);
21
51
  (0, rules_js_1.breakWhile)([
22
- { occur: () => !definition || typeof definition.indexRevision !== 'string' || !definition.indexRevision.trim(), error: 'Text search requires an application format revision' },
23
- { occur: () => !Array.isArray(definition.fields) || !definition.fields.length || !Array.isArray(definition.storedFields), error: 'Text search requires field declarations' },
24
- { occur: () => [...definition.fields, ...definition.storedFields].some(f => typeof f !== 'string' || !f.trim()), error: 'Invalid text search field' },
25
- { occur: () => new Set(definition.fields).size !== definition.fields.length || new Set(definition.storedFields).size !== definition.storedFields.length, error: 'Duplicate text search field' },
26
- { occur: () => definition.storedFields.some(f => reserved.has(f)), error: 'Stored fields conflict with search metadata' },
27
- { occur: () => definition.tokenize !== undefined && typeof definition.tokenize !== 'function', error: 'Invalid text search tokenizer' },
28
- { occur: () => definition.combineWith !== undefined && !['AND', 'OR'].includes(definition.combineWith), error: 'Invalid text search combination' },
29
- { occur: () => Object.entries(definition.boost ?? {}).some(([field, value]) => !definition.fields.includes(field) || typeof value !== 'number' || !Number.isFinite(value) || value <= 0), error: 'Invalid text search field boost' },
52
+ {
53
+ occur: () => !definition ||
54
+ typeof definition.indexRevision !== 'string' ||
55
+ !definition.indexRevision.trim(),
56
+ error: 'Text search requires an application format revision',
57
+ },
58
+ {
59
+ occur: () => !Array.isArray(definition.fields) ||
60
+ !definition.fields.length ||
61
+ !Array.isArray(definition.storedFields),
62
+ error: 'Text search requires field declarations',
63
+ },
64
+ {
65
+ occur: () => [...definition.fields, ...definition.storedFields].some((f) => typeof f !== 'string' || !f.trim()),
66
+ error: 'Invalid text search field',
67
+ },
68
+ {
69
+ occur: () => new Set(definition.fields).size !== definition.fields.length ||
70
+ new Set(definition.storedFields).size !== definition.storedFields.length,
71
+ error: 'Duplicate text search field',
72
+ },
73
+ {
74
+ occur: () => definition.storedFields.some((f) => reserved.has(f)),
75
+ error: 'Stored fields conflict with search metadata',
76
+ },
77
+ {
78
+ occur: () => definition.tokenize !== undefined && typeof definition.tokenize !== 'function',
79
+ error: 'Invalid text search tokenizer',
80
+ },
81
+ {
82
+ occur: () => definition.combineWith !== undefined && !['AND', 'OR'].includes(definition.combineWith),
83
+ error: 'Invalid text search combination',
84
+ },
85
+ {
86
+ occur: () => Object.entries(definition.boost ?? {}).some(([field, value]) => !definition.fields.includes(field) ||
87
+ typeof value !== 'number' ||
88
+ !Number.isFinite(value) ||
89
+ value <= 0),
90
+ error: 'Invalid text search field boost',
91
+ },
30
92
  ], ['kit', 'text-search', 'registration']);
31
93
  this.stored = Object.freeze([...definition.storedFields]);
32
94
  this.inputFields = Object.freeze([...new Set([...definition.fields, ...this.stored])]);
33
95
  // Object entries have distinct keys, so there is no equal-key ordering case.
34
- const boost = Object.fromEntries(Object.entries(definition.boost ?? {}).sort(([a], [b]) => a < b ? -1 : 1));
35
- this.options = { fields: [...definition.fields], storeFields: [...definition.storedFields], ...(definition.tokenize ? { tokenize: definition.tokenize.bind(registration) } : {}),
36
- searchOptions: { boost, combineWith: definition.combineWith ?? 'OR' } };
37
- this.configurationFingerprint = JSON.stringify({ indexRevision: definition.indexRevision, fields: this.options.fields, storedFields: this.options.storeFields, boost: this.options.searchOptions.boost, combineWith: this.options.searchOptions.combineWith });
96
+ const boost = Object.fromEntries(Object.entries(definition.boost ?? {}).sort(([a], [b]) => (a < b ? -1 : 1)));
97
+ this.options = {
98
+ fields: [...definition.fields],
99
+ storeFields: [...definition.storedFields],
100
+ ...(definition.tokenize ? { tokenize: definition.tokenize.bind(registration) } : {}),
101
+ searchOptions: { boost, combineWith: definition.combineWith ?? 'OR' },
102
+ };
103
+ this.configurationFingerprint = JSON.stringify({
104
+ indexRevision: definition.indexRevision,
105
+ fields: this.options.fields,
106
+ storedFields: this.options.storeFields,
107
+ boost: this.options.searchOptions.boost,
108
+ combineWith: this.options.searchOptions.combineWith,
109
+ });
38
110
  this.index = new minisearch_1.default(this.options);
39
111
  }
112
+ /**
113
+ * Insert or replace one document.
114
+ *
115
+ * @param document - Document carrying a non-blank string `id`; only declared fields are kept.
116
+ * @throws TypeError For a missing document, a blank/non-string id, or a non-string value in
117
+ * an indexed field.
118
+ */
40
119
  upsert(document) {
41
120
  (0, rules_js_1.breakWhile)(!document, 'Invalid text search document');
42
121
  // Only declared fields belong to this index. Read inherited getters before
43
122
  // cloning and do not retain caller-owned nested metadata or extra services.
44
- const snapshot = structuredClone({ ...Object.fromEntries(this.inputFields.map(field => [field, document[field]])), id: document.id });
45
- (0, rules_js_1.breakWhile)(typeof snapshot.id !== 'string' || !snapshot.id.trim() || this.options.fields.some(field => snapshot[field] !== undefined && typeof snapshot[field] !== 'string'), 'Invalid text search document');
123
+ const snapshot = structuredClone({
124
+ ...Object.fromEntries(this.inputFields.map((field) => [field, document[field]])),
125
+ id: document.id,
126
+ });
127
+ (0, rules_js_1.breakWhile)(typeof snapshot.id !== 'string' ||
128
+ !snapshot.id.trim() ||
129
+ this.options.fields.some((field) => snapshot[field] !== undefined && typeof snapshot[field] !== 'string'), 'Invalid text search document');
46
130
  if (this.index.has(snapshot.id))
47
131
  this.index.replace(snapshot);
48
132
  else
49
133
  this.index.add(snapshot);
50
134
  }
135
+ /**
136
+ * Search the index and return at most `limit` hits.
137
+ *
138
+ * @param options - Non-empty query text, limit (1..1000) and a synchronous filter that decides
139
+ * which stored documents may be returned.
140
+ * @returns Hits ordered by MiniSearch relevance, carrying the stored fields only.
141
+ * @throws TypeError For a blank query, an out-of-range limit, a missing filter, a filter
142
+ * result that is not synchronous boolean.
143
+ */
51
144
  search(options) {
52
145
  const { query } = options;
53
146
  (0, rules_js_1.breakWhile)([
54
- { occur: () => typeof query !== 'string' || !query.trim(), error: 'Text search requires a nonempty query' },
55
- { occur: () => !options || !Number.isSafeInteger(options.limit) || options.limit < 1 || options.limit > 1000, error: 'Text search limit must be between 1 and 1000' },
56
- { occur: () => typeof options.filter !== 'function', error: 'Text search requires an application filter' },
147
+ {
148
+ occur: () => typeof query !== 'string' || !query.trim(),
149
+ error: 'Text search requires a nonempty query',
150
+ },
151
+ {
152
+ occur: () => !options ||
153
+ !Number.isSafeInteger(options.limit) ||
154
+ options.limit < 1 ||
155
+ options.limit > 1000,
156
+ error: 'Text search limit must be between 1 and 1000',
157
+ },
158
+ {
159
+ occur: () => typeof options.filter !== 'function',
160
+ error: 'Text search requires an application filter',
161
+ },
57
162
  ], ['kit', 'text-search', 'query']);
58
- return this.index.search(query, { filter: hit => (0, synchronous_js_1.booleanResult)(options.filter({ ...this.fields(hit), id: String(hit.id) }), 'Text search filters must be synchronous', 'Text search filters must return boolean') }).slice(0, options.limit)
59
- .map(hit => ({ id: String(hit.id), score: hit.score, terms: [...hit.terms], document: this.fields(hit) }));
163
+ return this.index
164
+ .search(query, {
165
+ filter: (hit) => (0, synchronous_js_1.booleanResult)(options.filter({ ...this.fields(hit), id: String(hit.id) }), 'Text search filters must be synchronous', 'Text search filters must return boolean'),
166
+ })
167
+ .slice(0, options.limit)
168
+ .map((hit) => ({
169
+ id: String(hit.id),
170
+ score: hit.score,
171
+ terms: [...hit.terms],
172
+ document: this.fields(hit),
173
+ }));
60
174
  }
61
175
  fields(hit) {
62
- return structuredClone(Object.fromEntries(this.stored.filter(field => Object.hasOwn(hit, field)).map(field => [field, hit[field]])));
176
+ return structuredClone(Object.fromEntries(this.stored
177
+ .filter((field) => Object.hasOwn(hit, field))
178
+ .map((field) => [field, hit[field]])));
63
179
  }
64
- /** Vacuum before returning so deleted terms do not survive the next serialized checkpoint. */
180
+ /**
181
+ * Remove one document.
182
+ *
183
+ * Vacuum before returning so deleted terms do not survive the next serialized checkpoint.
184
+ *
185
+ * @param id - Document id; a non-blank string is required.
186
+ * @returns Whether a document was actually discarded.
187
+ * @throws TypeError For a blank or non-string id.
188
+ */
65
189
  async remove(id) {
66
190
  (0, rules_js_1.breakWhile)(typeof id !== 'string' || !id.trim(), 'Invalid text search document id');
67
191
  if (!this.index.has(id))
@@ -70,11 +194,40 @@ class TextSearch {
70
194
  await this.index.vacuum();
71
195
  return true;
72
196
  }
73
- clear() { this.index.removeAll(); }
74
- snapshot() { return { version: 2, engine: 'minisearch-7', configurationFingerprint: this.configurationFingerprint, serializedIndex: JSON.stringify(this.index) }; }
197
+ /** Drop every document while keeping the compiled configuration. */
198
+ clear() {
199
+ this.index.removeAll();
200
+ }
201
+ /**
202
+ * Serialize the index together with the configuration used to build it.
203
+ *
204
+ * @returns A versioned snapshot; the fingerprint lets `restore` reject a mismatched setup.
205
+ */
206
+ snapshot() {
207
+ return {
208
+ // The layout version and engine tag pin the serialized format to MiniSearch 7 semantics.
209
+ version: 2,
210
+ engine: 'minisearch-7',
211
+ configurationFingerprint: this.configurationFingerprint,
212
+ serializedIndex: JSON.stringify(this.index),
213
+ };
214
+ }
215
+ /**
216
+ * Rebuild an index from a snapshot.
217
+ *
218
+ * @param definition - The same configuration the snapshot was produced with.
219
+ * @param snapshot - Snapshot returned by `snapshot`.
220
+ * @returns A new populated `TextSearch`.
221
+ * @throws An error when the layout version, engine tag, configuration fingerprint or payload
222
+ * type does not match, because restoring an incompatible index would silently misanswer.
223
+ */
75
224
  static restore(definition, snapshot) {
76
225
  const search = new TextSearch(definition);
77
- (0, rules_js_1.breakWhile)(!snapshot || snapshot.version !== 2 || snapshot.engine !== 'minisearch-7' || snapshot.configurationFingerprint !== search.configurationFingerprint || typeof snapshot.serializedIndex !== 'string', 'Incompatible text search snapshot; rebuild from application records');
226
+ (0, rules_js_1.breakWhile)(!snapshot ||
227
+ snapshot.version !== 2 ||
228
+ snapshot.engine !== 'minisearch-7' ||
229
+ snapshot.configurationFingerprint !== search.configurationFingerprint ||
230
+ typeof snapshot.serializedIndex !== 'string', 'Incompatible text search snapshot; rebuild from application records');
78
231
  search.index = minisearch_1.default.loadJSON(snapshot.serializedIndex, search.options);
79
232
  return search;
80
233
  }
@@ -2,21 +2,57 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.TextSkills = void 0;
4
4
  exports.defineTextSkillLoader = defineTextSkillLoader;
5
+ /**
6
+ * Text Skills Kit: compile declarative, text-only skill registrations into readable skills.
7
+ *
8
+ * Place in the package: an optional App-side library for skill documents that are pure text.
9
+ * Documents are read through an App port; nothing here executes code, imports modules, binds
10
+ * tools or grants authority. Tool ids are only carried as declared references.
11
+ *
12
+ * Exports: `defineTextSkillLoader`, `TextSkills`, and the skill document/port types.
13
+ */
5
14
  const synchronous_js_1 = require("../utils/synchronous.js");
6
15
  const rules_js_1 = require("../utils/rules.js");
7
- /** Compile text-only skill rules. Hosts supply document reads; no code, tools or imports execute here. */
16
+ /**
17
+ * Compile a loader that validates registrations and reads their documents.
18
+ *
19
+ * The default contract is narrow by design: ids are lower-case words joined by hyphens (up to
20
+ * `maxIdChars`, default 64), each entry lives at `<id>/SKILL.md`, the kind is `text-workflow`,
21
+ * and the document starts with `name`/`description` front matter.
22
+ *
23
+ * @param definition - Size limits, optional per-app entry/header overrides and error wording;
24
+ * handlers are bound to this object.
25
+ * @returns A frozen loader with `load({ entries }, ports)`.
26
+ * @throws TypeError At construction for non-integer or non-positive limits; from `load` for a
27
+ * malformed catalog, duplicate/invalid ids, a mismatched entry path or kind, duplicate tool
28
+ * ids, an oversized instruction body, or a header that is absent or disagrees with the id.
29
+ */
8
30
  function defineTextSkillLoader(definition) {
9
31
  const { maxInstructionChars, maxDescriptionChars, maxIdChars = 64 } = definition;
10
32
  (0, rules_js_1.breakWhile)([
11
- { occur: () => ![maxInstructionChars, maxDescriptionChars, maxIdChars].every(Number.isSafeInteger), error: 'Invalid text skill limits', tags: ['integer'] },
12
- { occur: () => Math.min(maxInstructionChars, maxDescriptionChars, maxIdChars) < 1, error: 'Invalid text skill limits', tags: ['range'] },
33
+ {
34
+ occur: () => ![maxInstructionChars, maxDescriptionChars, maxIdChars].every(Number.isSafeInteger),
35
+ error: 'Invalid text skill limits',
36
+ tags: ['integer'],
37
+ },
38
+ {
39
+ occur: () => Math.min(maxInstructionChars, maxDescriptionChars, maxIdChars) < 1,
40
+ error: 'Invalid text skill limits',
41
+ tags: ['range'],
42
+ },
13
43
  ]);
14
44
  const idPattern = new RegExp(`^[a-z][a-z0-9-]{0,${maxIdChars - 1}}$`);
15
- const entryFor = definition.entryFor?.bind(definition) ?? (id => `${id}/SKILL.md`);
45
+ const entryFor = definition.entryFor?.bind(definition) ?? ((id) => `${id}/SKILL.md`);
16
46
  const parseHeader = definition.parseHeader?.bind(definition) ?? strictHeader;
17
- const catalogError = (typeof definition.errors?.catalog === 'function' ? definition.errors.catalog.bind(definition.errors) : definition.errors?.catalog) ?? 'Text skill catalog must be an array';
18
- const registrationError = (typeof definition.errors?.registration === 'function' ? definition.errors.registration.bind(definition.errors) : definition.errors?.registration) ?? 'Invalid text skill registration';
19
- const documentError = (typeof definition.errors?.document === 'function' ? definition.errors.document.bind(definition.errors) : definition.errors?.document) ?? 'Invalid text skill document';
47
+ const catalogError = (typeof definition.errors?.catalog === 'function'
48
+ ? definition.errors.catalog.bind(definition.errors)
49
+ : definition.errors?.catalog) ?? 'Text skill catalog must be an array';
50
+ const registrationError = (typeof definition.errors?.registration === 'function'
51
+ ? definition.errors.registration.bind(definition.errors)
52
+ : definition.errors?.registration) ?? 'Invalid text skill registration';
53
+ const documentError = (typeof definition.errors?.document === 'function'
54
+ ? definition.errors.document.bind(definition.errors)
55
+ : definition.errors?.document) ?? 'Invalid text skill document';
20
56
  const tags = [...(definition.tags ?? [])];
21
57
  return Object.freeze({
22
58
  load(input, ports) {
@@ -24,16 +60,49 @@ function defineTextSkillLoader(definition) {
24
60
  const entries = input.entries, read = ports.read.bind(ports);
25
61
  (0, rules_js_1.breakWhile)(!Array.isArray(entries), catalogError);
26
62
  const ids = new Set();
27
- return Object.freeze(entries.map(raw => {
28
- (0, rules_js_1.breakWhile)(!raw || typeof raw !== 'object' || Array.isArray(raw), registrationError, [...tags, 'registration', 'shape']);
29
- const entry = { id: raw.id, entry: raw.entry, kind: raw.kind, toolIds: raw.toolIds };
63
+ return Object.freeze(entries.map((raw) => {
64
+ (0, rules_js_1.breakWhile)(!raw || typeof raw !== 'object' || Array.isArray(raw), registrationError, [
65
+ ...tags,
66
+ 'registration',
67
+ 'shape',
68
+ ]);
69
+ const entry = {
70
+ id: raw.id,
71
+ entry: raw.entry,
72
+ kind: raw.kind,
73
+ toolIds: raw.toolIds,
74
+ };
30
75
  (0, rules_js_1.breakWhile)([
31
- { occur: () => !entry || typeof entry !== 'object', error: registrationError, tags: ['shape'] },
32
- { occur: [() => typeof entry.id !== 'string' || !idPattern.test(entry.id), () => ids.has(entry.id)], error: registrationError, tags: ['id'] },
33
- { occur: [() => entry.entry !== (0, synchronous_js_1.synchronous)(entryFor(entry.id), 'Skill entry selectors must be synchronous'), () => entry.kind !== 'text-workflow'], error: registrationError, tags: ['workflow'] },
34
76
  {
35
- occur: [() => !Array.isArray(entry.toolIds), () => entry.toolIds.some(tool => typeof tool !== 'string' || !tool), () => new Set(entry.toolIds).size !== entry.toolIds.length],
36
- error: registrationError, tags: ['tools'],
77
+ occur: () => !entry || typeof entry !== 'object',
78
+ error: registrationError,
79
+ tags: ['shape'],
80
+ },
81
+ {
82
+ occur: [
83
+ () => typeof entry.id !== 'string' || !idPattern.test(entry.id),
84
+ () => ids.has(entry.id),
85
+ ],
86
+ error: registrationError,
87
+ tags: ['id'],
88
+ },
89
+ {
90
+ occur: [
91
+ () => entry.entry !==
92
+ (0, synchronous_js_1.synchronous)(entryFor(entry.id), 'Skill entry selectors must be synchronous'),
93
+ () => entry.kind !== 'text-workflow',
94
+ ],
95
+ error: registrationError,
96
+ tags: ['workflow'],
97
+ },
98
+ {
99
+ occur: [
100
+ () => !Array.isArray(entry.toolIds),
101
+ () => entry.toolIds.some((tool) => typeof tool !== 'string' || !tool),
102
+ () => new Set(entry.toolIds).size !== entry.toolIds.length,
103
+ ],
104
+ error: registrationError,
105
+ tags: ['tools'],
37
106
  },
38
107
  ], [...tags, 'registration']);
39
108
  ids.add(entry.id);
@@ -41,17 +110,33 @@ function defineTextSkillLoader(definition) {
41
110
  (0, rules_js_1.breakWhile)(typeof instructions !== 'string' || instructions.length > maxInstructionChars, documentError, [...tags, 'document', 'instructions']);
42
111
  const header = (0, synchronous_js_1.synchronous)(parseHeader(instructions), 'Skill header parsing must be synchronous');
43
112
  (0, rules_js_1.breakWhile)([
44
- { occur: [() => !header, () => header.id !== entry.id], error: documentError, tags: ['identity'] },
45
- { occur: () => !header.description.trim() || header.description.length > maxDescriptionChars, error: documentError, tags: ['description'] },
113
+ {
114
+ occur: [() => !header, () => header.id !== entry.id],
115
+ error: documentError,
116
+ tags: ['identity'],
117
+ },
118
+ {
119
+ occur: () => !header.description.trim() || header.description.length > maxDescriptionChars,
120
+ error: documentError,
121
+ tags: ['description'],
122
+ },
46
123
  ], [...tags, 'document']);
47
- return Object.freeze({ id: entry.id, entry: entry.entry, kind: entry.kind, toolIds: Object.freeze([...entry.toolIds]),
48
- description: header.description.trim(), instructions });
124
+ return Object.freeze({
125
+ id: entry.id,
126
+ entry: entry.entry,
127
+ kind: entry.kind,
128
+ toolIds: Object.freeze([...entry.toolIds]),
129
+ description: header.description.trim(),
130
+ instructions,
131
+ });
49
132
  }));
50
133
  },
51
134
  });
52
135
  }
136
+ /** Default header parser: exactly the two front-matter keys, nothing else, in this order. */
53
137
  function strictHeader(instructions) {
54
138
  const header = instructions.match(/^---\r?\nname: ([a-z][a-z0-9-]*)\r?\ndescription: ([^\r\n]+)\r?\n---(?:\r?\n|$)/);
55
139
  return header ? { id: header[1], description: header[2] } : undefined;
56
140
  }
141
+ /** Namespace object for callers that prefer one import over named helpers. */
57
142
  exports.TextSkills = Object.freeze({ defineTextSkillLoader });