@nhtio/adk 0.1.0-master-2a4e1bd2 → 0.1.0-master-cd595e6f

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 (413) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/artifact_methods-CJDQ5Lv-.mjs +1 -0
  3. package/artifact_methods-D6k_82r3.js +1 -0
  4. package/batteries/artifacts/ecmascript.cjs +1 -1
  5. package/batteries/artifacts/ecmascript.mjs +1 -1
  6. package/batteries/artifacts/toon.cjs +1 -1
  7. package/batteries/artifacts/toon.mjs +1 -1
  8. package/batteries/artifacts/xml.cjs +1 -1
  9. package/batteries/artifacts/xml.mjs +1 -1
  10. package/batteries/artifacts/yaml.cjs +1 -1
  11. package/batteries/artifacts/yaml.mjs +1 -1
  12. package/batteries/artifacts.cjs +4 -4
  13. package/batteries/artifacts.mjs +4 -4
  14. package/batteries/dev-tools/forge.cjs +3 -3
  15. package/batteries/dev-tools/forge.mjs +3 -3
  16. package/batteries/dev-tools.cjs +2 -2
  17. package/batteries/dev-tools.mjs +2 -2
  18. package/batteries/encoding.cjs +7 -7
  19. package/batteries/encoding.mjs +7 -7
  20. package/batteries/generation/gemini/adapter.cjs +1 -1
  21. package/batteries/generation/gemini/adapter.mjs +1 -1
  22. package/batteries/generation/local_diffusion/adapter.cjs +1 -1
  23. package/batteries/generation/local_diffusion/adapter.mjs +1 -1
  24. package/batteries/generation/openai/adapter.cjs +1 -1
  25. package/batteries/generation/openai/adapter.mjs +1 -1
  26. package/batteries/isolation/browser.d.ts +1 -1
  27. package/batteries/isolation/child_process/transport.d.ts +2 -2
  28. package/batteries/isolation/child_process.cjs +4 -4
  29. package/batteries/isolation/child_process.cjs.map +1 -1
  30. package/batteries/isolation/child_process.mjs +4 -4
  31. package/batteries/isolation/child_process.mjs.map +1 -1
  32. package/batteries/isolation/codec.d.ts +2 -2
  33. package/batteries/isolation/crash_policy.d.ts +1 -1
  34. package/batteries/isolation/isolate_function.d.ts +2 -2
  35. package/batteries/isolation/protocol.d.ts +4 -4
  36. package/batteries/isolation/serve.d.ts +2 -2
  37. package/batteries/isolation/types.d.ts +4 -4
  38. package/batteries/isolation.cjs +1 -1
  39. package/batteries/isolation.mjs +1 -1
  40. package/batteries/llm/anthropic_messages/adapter.cjs +6 -6
  41. package/batteries/llm/anthropic_messages/adapter.cjs.map +1 -1
  42. package/batteries/llm/anthropic_messages/adapter.mjs +6 -6
  43. package/batteries/llm/anthropic_messages/adapter.mjs.map +1 -1
  44. package/batteries/llm/anthropic_messages/count_tokens.cjs +1 -1
  45. package/batteries/llm/anthropic_messages/count_tokens.mjs +1 -1
  46. package/batteries/llm/anthropic_messages/helpers.cjs +3 -3
  47. package/batteries/llm/anthropic_messages/helpers.mjs +3 -3
  48. package/batteries/llm/anthropic_messages/types.d.ts +2 -2
  49. package/batteries/llm/anthropic_messages/validation.cjs +3 -3
  50. package/batteries/llm/anthropic_messages/validation.cjs.map +1 -1
  51. package/batteries/llm/anthropic_messages/validation.mjs +3 -3
  52. package/batteries/llm/anthropic_messages/validation.mjs.map +1 -1
  53. package/batteries/llm/anthropic_messages.cjs +2 -2
  54. package/batteries/llm/anthropic_messages.mjs +2 -2
  55. package/batteries/llm/bedrock_converse/adapter.cjs +29 -7
  56. package/batteries/llm/bedrock_converse/adapter.cjs.map +1 -1
  57. package/batteries/llm/bedrock_converse/adapter.mjs +30 -8
  58. package/batteries/llm/bedrock_converse/adapter.mjs.map +1 -1
  59. package/batteries/llm/bedrock_converse/exceptions.cjs +3 -0
  60. package/batteries/llm/bedrock_converse/exceptions.cjs.map +1 -1
  61. package/batteries/llm/bedrock_converse/exceptions.d.ts +6 -0
  62. package/batteries/llm/bedrock_converse/exceptions.mjs +3 -1
  63. package/batteries/llm/bedrock_converse/exceptions.mjs.map +1 -1
  64. package/batteries/llm/bedrock_converse/helpers.cjs +1 -1
  65. package/batteries/llm/bedrock_converse/helpers.mjs +1 -1
  66. package/batteries/llm/bedrock_converse/types.d.ts +6 -2
  67. package/batteries/llm/bedrock_converse/validation.cjs +7 -1
  68. package/batteries/llm/bedrock_converse/validation.cjs.map +1 -1
  69. package/batteries/llm/bedrock_converse/validation.mjs +7 -1
  70. package/batteries/llm/bedrock_converse/validation.mjs.map +1 -1
  71. package/batteries/llm/bedrock_converse.cjs +2 -2
  72. package/batteries/llm/bedrock_converse.mjs +2 -2
  73. package/batteries/llm/claude_code_cli/adapter.cjs +6 -6
  74. package/batteries/llm/claude_code_cli/adapter.cjs.map +1 -1
  75. package/batteries/llm/claude_code_cli/adapter.mjs +6 -6
  76. package/batteries/llm/claude_code_cli/adapter.mjs.map +1 -1
  77. package/batteries/llm/claude_code_cli/helpers.cjs +3 -3
  78. package/batteries/llm/claude_code_cli/helpers.mjs +3 -3
  79. package/batteries/llm/claude_code_cli/types.d.ts +3 -2
  80. package/batteries/llm/claude_code_cli/validation.cjs +3 -3
  81. package/batteries/llm/claude_code_cli/validation.cjs.map +1 -1
  82. package/batteries/llm/claude_code_cli/validation.mjs +3 -3
  83. package/batteries/llm/claude_code_cli/validation.mjs.map +1 -1
  84. package/batteries/llm/claude_code_cli.cjs +1 -1
  85. package/batteries/llm/claude_code_cli.mjs +1 -1
  86. package/batteries/llm/gemini_generate_content/adapter.cjs +29 -7
  87. package/batteries/llm/gemini_generate_content/adapter.cjs.map +1 -1
  88. package/batteries/llm/gemini_generate_content/adapter.mjs +30 -8
  89. package/batteries/llm/gemini_generate_content/adapter.mjs.map +1 -1
  90. package/batteries/llm/gemini_generate_content/exceptions.cjs +3 -0
  91. package/batteries/llm/gemini_generate_content/exceptions.cjs.map +1 -1
  92. package/batteries/llm/gemini_generate_content/exceptions.d.ts +6 -0
  93. package/batteries/llm/gemini_generate_content/exceptions.mjs +3 -1
  94. package/batteries/llm/gemini_generate_content/exceptions.mjs.map +1 -1
  95. package/batteries/llm/gemini_generate_content/helpers.cjs +1 -1
  96. package/batteries/llm/gemini_generate_content/helpers.mjs +1 -1
  97. package/batteries/llm/gemini_generate_content/types.d.ts +7 -3
  98. package/batteries/llm/gemini_generate_content/validation.cjs +11 -2
  99. package/batteries/llm/gemini_generate_content/validation.cjs.map +1 -1
  100. package/batteries/llm/gemini_generate_content/validation.mjs +11 -2
  101. package/batteries/llm/gemini_generate_content/validation.mjs.map +1 -1
  102. package/batteries/llm/gemini_generate_content.cjs +1 -1
  103. package/batteries/llm/gemini_generate_content.mjs +1 -1
  104. package/batteries/llm/litert_lm/adapter.cjs +6 -6
  105. package/batteries/llm/litert_lm/adapter.cjs.map +1 -1
  106. package/batteries/llm/litert_lm/adapter.mjs +6 -6
  107. package/batteries/llm/litert_lm/adapter.mjs.map +1 -1
  108. package/batteries/llm/litert_lm/helpers.cjs +3 -3
  109. package/batteries/llm/litert_lm/helpers.mjs +3 -3
  110. package/batteries/llm/litert_lm/types.d.ts +2 -2
  111. package/batteries/llm/litert_lm/validation.cjs +3 -3
  112. package/batteries/llm/litert_lm/validation.cjs.map +1 -1
  113. package/batteries/llm/litert_lm/validation.mjs +3 -3
  114. package/batteries/llm/litert_lm/validation.mjs.map +1 -1
  115. package/batteries/llm/litert_lm.cjs +1 -1
  116. package/batteries/llm/litert_lm.mjs +1 -1
  117. package/batteries/llm/ollama/adapter.cjs +6 -6
  118. package/batteries/llm/ollama/adapter.cjs.map +1 -1
  119. package/batteries/llm/ollama/adapter.mjs +6 -6
  120. package/batteries/llm/ollama/adapter.mjs.map +1 -1
  121. package/batteries/llm/ollama/helpers.cjs +4 -4
  122. package/batteries/llm/ollama/helpers.mjs +4 -4
  123. package/batteries/llm/ollama/types.d.ts +2 -2
  124. package/batteries/llm/ollama/validation.cjs +3 -3
  125. package/batteries/llm/ollama/validation.cjs.map +1 -1
  126. package/batteries/llm/ollama/validation.mjs +3 -3
  127. package/batteries/llm/ollama/validation.mjs.map +1 -1
  128. package/batteries/llm/ollama.cjs +2 -2
  129. package/batteries/llm/ollama.mjs +2 -2
  130. package/batteries/llm/openai_chat_completions/adapter.cjs +6 -6
  131. package/batteries/llm/openai_chat_completions/adapter.cjs.map +1 -1
  132. package/batteries/llm/openai_chat_completions/adapter.mjs +6 -6
  133. package/batteries/llm/openai_chat_completions/adapter.mjs.map +1 -1
  134. package/batteries/llm/openai_chat_completions/helpers.cjs +4 -4
  135. package/batteries/llm/openai_chat_completions/helpers.mjs +4 -4
  136. package/batteries/llm/openai_chat_completions/types.d.ts +2 -2
  137. package/batteries/llm/openai_chat_completions/validation.cjs +3 -3
  138. package/batteries/llm/openai_chat_completions/validation.cjs.map +1 -1
  139. package/batteries/llm/openai_chat_completions/validation.mjs +3 -3
  140. package/batteries/llm/openai_chat_completions/validation.mjs.map +1 -1
  141. package/batteries/llm/openai_chat_completions.cjs +2 -2
  142. package/batteries/llm/openai_chat_completions.mjs +2 -2
  143. package/batteries/llm/openai_responses/adapter.cjs +6 -6
  144. package/batteries/llm/openai_responses/adapter.cjs.map +1 -1
  145. package/batteries/llm/openai_responses/adapter.mjs +6 -6
  146. package/batteries/llm/openai_responses/adapter.mjs.map +1 -1
  147. package/batteries/llm/openai_responses/helpers.cjs +3 -3
  148. package/batteries/llm/openai_responses/helpers.mjs +3 -3
  149. package/batteries/llm/openai_responses/types.d.ts +2 -2
  150. package/batteries/llm/openai_responses/validation.cjs +3 -3
  151. package/batteries/llm/openai_responses/validation.cjs.map +1 -1
  152. package/batteries/llm/openai_responses/validation.mjs +3 -3
  153. package/batteries/llm/openai_responses/validation.mjs.map +1 -1
  154. package/batteries/llm/openai_responses.cjs +2 -2
  155. package/batteries/llm/openai_responses.mjs +2 -2
  156. package/batteries/llm/transformers_js/adapter.cjs +6 -6
  157. package/batteries/llm/transformers_js/adapter.cjs.map +1 -1
  158. package/batteries/llm/transformers_js/adapter.mjs +6 -6
  159. package/batteries/llm/transformers_js/adapter.mjs.map +1 -1
  160. package/batteries/llm/transformers_js/helpers.cjs +3 -3
  161. package/batteries/llm/transformers_js/helpers.mjs +3 -3
  162. package/batteries/llm/transformers_js/types.d.ts +2 -2
  163. package/batteries/llm/transformers_js/validation.cjs +3 -3
  164. package/batteries/llm/transformers_js/validation.cjs.map +1 -1
  165. package/batteries/llm/transformers_js/validation.mjs +3 -3
  166. package/batteries/llm/transformers_js/validation.mjs.map +1 -1
  167. package/batteries/llm/transformers_js.cjs +1 -1
  168. package/batteries/llm/transformers_js.mjs +1 -1
  169. package/batteries/llm/webllm_chat_completions/adapter.cjs +6 -6
  170. package/batteries/llm/webllm_chat_completions/adapter.cjs.map +1 -1
  171. package/batteries/llm/webllm_chat_completions/adapter.mjs +6 -6
  172. package/batteries/llm/webllm_chat_completions/adapter.mjs.map +1 -1
  173. package/batteries/llm/webllm_chat_completions/helpers.cjs +1 -1
  174. package/batteries/llm/webllm_chat_completions/helpers.mjs +1 -1
  175. package/batteries/llm/webllm_chat_completions/validation.cjs +3 -3
  176. package/batteries/llm/webllm_chat_completions/validation.cjs.map +1 -1
  177. package/batteries/llm/webllm_chat_completions/validation.mjs +3 -3
  178. package/batteries/llm/webllm_chat_completions/validation.mjs.map +1 -1
  179. package/batteries/llm/webllm_chat_completions.cjs +2 -2
  180. package/batteries/llm/webllm_chat_completions.mjs +2 -2
  181. package/batteries/llm.cjs +2 -2
  182. package/batteries/llm.mjs +2 -2
  183. package/batteries/media/builder.d.ts +3 -0
  184. package/batteries/media/contracts.cjs.map +1 -1
  185. package/batteries/media/contracts.d.ts +40 -1
  186. package/batteries/media/contracts.mjs.map +1 -1
  187. package/batteries/media/engines/sharp.cjs +36 -2
  188. package/batteries/media/engines/sharp.cjs.map +1 -1
  189. package/batteries/media/engines/sharp.mjs +36 -2
  190. package/batteries/media/engines/sharp.mjs.map +1 -1
  191. package/batteries/media/forge.cjs +5 -5
  192. package/batteries/media/forge.mjs +5 -5
  193. package/batteries/media/index.d.ts +1 -1
  194. package/batteries/media/lint.cjs +3 -2
  195. package/batteries/media/lint.cjs.map +1 -1
  196. package/batteries/media/lint.mjs +3 -2
  197. package/batteries/media/lint.mjs.map +1 -1
  198. package/batteries/media.cjs +66 -2
  199. package/batteries/media.cjs.map +1 -1
  200. package/batteries/media.mjs +66 -2
  201. package/batteries/media.mjs.map +1 -1
  202. package/batteries/orchestration/conformance.cjs +123 -74
  203. package/batteries/orchestration/conformance.cjs.map +1 -1
  204. package/batteries/orchestration/conformance.d.ts +10 -8
  205. package/batteries/orchestration/conformance.mjs +54 -5
  206. package/batteries/orchestration/conformance.mjs.map +1 -1
  207. package/batteries/orchestration/dispatch_reasoner.cjs +4 -4
  208. package/batteries/orchestration/dispatch_reasoner.mjs +4 -4
  209. package/batteries/orchestration/executor.cjs +2 -2
  210. package/batteries/orchestration/executor.mjs +2 -2
  211. package/batteries/orchestration/forge.cjs +4 -4
  212. package/batteries/orchestration/forge.mjs +4 -4
  213. package/batteries/orchestration/validation.cjs +2 -2
  214. package/batteries/orchestration/validation.mjs +2 -2
  215. package/batteries/orchestration.cjs +4 -4
  216. package/batteries/orchestration.mjs +4 -4
  217. package/batteries/sandbox/contracts/policy_enforcer.d.ts +13 -1
  218. package/batteries/sandbox/js/compartment.d.ts +7 -2
  219. package/batteries/sandbox/js/exceptions.d.ts +4 -0
  220. package/batteries/sandbox/js/runner.d.ts +1 -1
  221. package/batteries/sandbox/js/service.d.ts +1 -1
  222. package/batteries/sandbox/js/ses_contracts.d.ts +4 -3
  223. package/batteries/sandbox/js.cjs +17 -8
  224. package/batteries/sandbox/js.cjs.map +1 -1
  225. package/batteries/sandbox/js.mjs +17 -9
  226. package/batteries/sandbox/js.mjs.map +1 -1
  227. package/batteries/sandbox/manager.d.ts +4 -3
  228. package/batteries/sandbox/node/srt_enforcer.d.ts +1 -1
  229. package/batteries/sandbox/node.cjs +36 -12
  230. package/batteries/sandbox/node.cjs.map +1 -1
  231. package/batteries/sandbox/node.mjs +36 -12
  232. package/batteries/sandbox/node.mjs.map +1 -1
  233. package/batteries/sandbox/tools.cjs +1 -1
  234. package/batteries/sandbox/tools.mjs +1 -1
  235. package/batteries/sandbox/types.d.ts +10 -1
  236. package/batteries/sandbox.cjs +27 -9
  237. package/batteries/sandbox.cjs.map +1 -1
  238. package/batteries/sandbox.mjs +28 -11
  239. package/batteries/sandbox.mjs.map +1 -1
  240. package/batteries/skills.cjs +9 -9
  241. package/batteries/skills.mjs +9 -9
  242. package/batteries/tools/_shared.cjs +1 -1
  243. package/batteries/tools/_shared.mjs +1 -1
  244. package/batteries/tools/color.cjs +2 -2
  245. package/batteries/tools/color.mjs +2 -2
  246. package/batteries/tools/comparison.cjs +2 -2
  247. package/batteries/tools/comparison.mjs +2 -2
  248. package/batteries/tools/data_structure.cjs +2 -2
  249. package/batteries/tools/data_structure.mjs +2 -2
  250. package/batteries/tools/datetime_extended.cjs +3 -3
  251. package/batteries/tools/datetime_extended.mjs +3 -3
  252. package/batteries/tools/datetime_math.cjs +3 -3
  253. package/batteries/tools/datetime_math.mjs +3 -3
  254. package/batteries/tools/encoding.cjs +2 -2
  255. package/batteries/tools/encoding.mjs +2 -2
  256. package/batteries/tools/formatting.cjs +2 -2
  257. package/batteries/tools/formatting.mjs +2 -2
  258. package/batteries/tools/geo_basics.cjs +2 -2
  259. package/batteries/tools/geo_basics.mjs +2 -2
  260. package/batteries/tools/math.cjs +2 -2
  261. package/batteries/tools/math.mjs +2 -2
  262. package/batteries/tools/memory.cjs +5 -5
  263. package/batteries/tools/memory.mjs +5 -5
  264. package/batteries/tools/parsing.cjs +3 -3
  265. package/batteries/tools/parsing.mjs +3 -3
  266. package/batteries/tools/retrievables.cjs +5 -5
  267. package/batteries/tools/retrievables.mjs +5 -5
  268. package/batteries/tools/scrapper.cjs +1 -1
  269. package/batteries/tools/scrapper.mjs +1 -1
  270. package/batteries/tools/searxng.cjs +1 -1
  271. package/batteries/tools/searxng.mjs +1 -1
  272. package/batteries/tools/standing_instructions.cjs +3 -3
  273. package/batteries/tools/standing_instructions.mjs +3 -3
  274. package/batteries/tools/statistics.cjs +3 -3
  275. package/batteries/tools/statistics.mjs +3 -3
  276. package/batteries/tools/string_processing.cjs +2 -2
  277. package/batteries/tools/string_processing.mjs +2 -2
  278. package/batteries/tools/structured_data.cjs +2 -2
  279. package/batteries/tools/structured_data.mjs +2 -2
  280. package/batteries/tools/text_analysis.cjs +3 -3
  281. package/batteries/tools/text_analysis.mjs +3 -3
  282. package/batteries/tools/text_comparison.cjs +2 -2
  283. package/batteries/tools/text_comparison.mjs +2 -2
  284. package/batteries/tools/time.cjs +3 -3
  285. package/batteries/tools/time.mjs +3 -3
  286. package/batteries/tools/unit_conversion.cjs +2 -2
  287. package/batteries/tools/unit_conversion.mjs +2 -2
  288. package/batteries/tools.cjs +2 -2
  289. package/batteries/tools.mjs +2 -2
  290. package/batteries/validation.cjs +5 -5
  291. package/batteries/validation.mjs +5 -5
  292. package/batteries/vector/conformance/index.d.ts +11 -16
  293. package/batteries/vector/conformance.cjs +107 -36
  294. package/batteries/vector/conformance.cjs.map +1 -1
  295. package/batteries/vector/conformance.mjs +84 -13
  296. package/batteries/vector/conformance.mjs.map +1 -1
  297. package/batteries/vector/retrievable.cjs +1 -1
  298. package/batteries/vector/retrievable.mjs +1 -1
  299. package/batteries.cjs +5 -5
  300. package/batteries.mjs +5 -5
  301. package/{chat_common-DbbIESdo.mjs → chat_common-CmKV5Dz4.mjs} +2 -2
  302. package/{chat_common-DbbIESdo.mjs.map → chat_common-CmKV5Dz4.mjs.map} +1 -1
  303. package/{chat_common-B3O3zz-i.js → chat_common-Dpan9moo.js} +2 -2
  304. package/{chat_common-B3O3zz-i.js.map → chat_common-Dpan9moo.js.map} +1 -1
  305. package/{common-v9Jo9M5k.mjs → common-BpdHIpQE.mjs} +7 -7
  306. package/{common-v9Jo9M5k.mjs.map → common-BpdHIpQE.mjs.map} +1 -1
  307. package/{common-BV3HGeLj.js → common-H44Ik9ou.js} +7 -7
  308. package/{common-BV3HGeLj.js.map → common-H44Ik9ou.js.map} +1 -1
  309. package/common.cjs +7 -7
  310. package/common.mjs +7 -7
  311. package/{dispatch_runner-CbNyqSMy.mjs → dispatch_runner-BZDXUe0G.mjs} +5 -5
  312. package/{dispatch_runner-CbNyqSMy.mjs.map → dispatch_runner-BZDXUe0G.mjs.map} +1 -1
  313. package/{dispatch_runner-Bl3Xwebu.js → dispatch_runner-CKhm-scw.js} +5 -5
  314. package/{dispatch_runner-Bl3Xwebu.js.map → dispatch_runner-CKhm-scw.js.map} +1 -1
  315. package/dispatch_runner.cjs +1 -1
  316. package/dispatch_runner.mjs +1 -1
  317. package/{ecmascript-BSnvyY8T.js → ecmascript-CCtgamDh.js} +3 -3
  318. package/{ecmascript-BSnvyY8T.js.map → ecmascript-CCtgamDh.js.map} +1 -1
  319. package/{ecmascript-CZ7_YKfZ.mjs → ecmascript-DcmUQ9Jx.mjs} +3 -3
  320. package/{ecmascript-CZ7_YKfZ.mjs.map → ecmascript-DcmUQ9Jx.mjs.map} +1 -1
  321. package/eslint.cjs +1 -1
  322. package/eslint.mjs +1 -1
  323. package/exceptions.cjs +1 -1
  324. package/exceptions.mjs +1 -1
  325. package/forge.cjs +2 -2
  326. package/forge.mjs +2 -2
  327. package/guards.cjs +7 -7
  328. package/guards.mjs +7 -7
  329. package/{helpers-CDmLDBq5.mjs → helpers-BH7HTtkD.mjs} +3 -3
  330. package/{helpers-CDmLDBq5.mjs.map → helpers-BH7HTtkD.mjs.map} +1 -1
  331. package/{helpers-Tvvwpx1M.js → helpers-CEjjkXso.js} +3 -3
  332. package/{helpers-Tvvwpx1M.js.map → helpers-CEjjkXso.js.map} +1 -1
  333. package/index.cjs +10 -10
  334. package/index.mjs +10 -10
  335. package/{isolation-BQCTQYZ_.js → isolation-7Jrcucgc.js} +11 -11
  336. package/isolation-7Jrcucgc.js.map +1 -0
  337. package/{isolation-7xbkc12r.mjs → isolation-CO0NiK8R.mjs} +11 -11
  338. package/isolation-CO0NiK8R.mjs.map +1 -0
  339. package/lib/classes/tokenizable.d.ts +2 -3
  340. package/mcp/adk-docs-corpus.json +2 -2
  341. package/package.json +469 -469
  342. package/{retrievable-C5dXuDhD.js → retrievable-BTwjmPnl.js} +3 -3
  343. package/{retrievable-C5dXuDhD.js.map → retrievable-BTwjmPnl.js.map} +1 -1
  344. package/{retrievable-gl_TIHnX.mjs → retrievable-CXTAUuuv.mjs} +3 -3
  345. package/{retrievable-gl_TIHnX.mjs.map → retrievable-CXTAUuuv.mjs.map} +1 -1
  346. package/{scrapper-DD6-_2u-.js → scrapper-CJexXXK-.js} +4 -4
  347. package/{scrapper-DD6-_2u-.js.map → scrapper-CJexXXK-.js.map} +1 -1
  348. package/{scrapper-u_orpxIB.mjs → scrapper-DiQ5FfDL.mjs} +4 -4
  349. package/{scrapper-u_orpxIB.mjs.map → scrapper-DiQ5FfDL.mjs.map} +1 -1
  350. package/{searxng-fVdJUCK2.mjs → searxng-BFTJ6rTE.mjs} +4 -4
  351. package/{searxng-fVdJUCK2.mjs.map → searxng-BFTJ6rTE.mjs.map} +1 -1
  352. package/{searxng-C7GK0Nrz.js → searxng-DzlGZG4V.js} +4 -4
  353. package/{searxng-C7GK0Nrz.js.map → searxng-DzlGZG4V.js.map} +1 -1
  354. package/server.json +2 -2
  355. package/skills/adk-assembly/SKILL.md +2 -2
  356. package/{spooled_artifact-DriNQRj7.js → spooled_artifact-BpcesRBv.js} +384 -384
  357. package/spooled_artifact-BpcesRBv.js.map +1 -0
  358. package/{spooled_artifact-BkueYJhR.mjs → spooled_artifact-Bw_7swIp.mjs} +385 -385
  359. package/spooled_artifact-Bw_7swIp.mjs.map +1 -0
  360. package/spooled_artifact.cjs +2 -2
  361. package/spooled_artifact.mjs +2 -2
  362. package/{spooled_markdown_artifact-CfHRZUkl.mjs → spooled_markdown_artifact-vd6eNtIP.mjs} +3 -3
  363. package/{spooled_markdown_artifact-CfHRZUkl.mjs.map → spooled_markdown_artifact-vd6eNtIP.mjs.map} +1 -1
  364. package/{spooled_markdown_artifact-C_VkCDhF.js → spooled_markdown_artifact-wJPnE8Ij.js} +3 -3
  365. package/{spooled_markdown_artifact-C_VkCDhF.js.map → spooled_markdown_artifact-wJPnE8Ij.js.map} +1 -1
  366. package/{thought-B8JAi3-W.mjs → thought-BE1KGEhV.mjs} +3 -3
  367. package/{thought-B8JAi3-W.mjs.map → thought-BE1KGEhV.mjs.map} +1 -1
  368. package/{thought--fRgOwTP.js → thought-bS7O9O5H.js} +3 -3
  369. package/{thought--fRgOwTP.js.map → thought-bS7O9O5H.js.map} +1 -1
  370. package/{tokenizable-CWW7iSrD.js → tokenizable-BMZuGWRd.js} +35 -29
  371. package/tokenizable-BMZuGWRd.js.map +1 -0
  372. package/{tokenizable-DLMP68ZV.mjs → tokenizable-VB4Av8GF.mjs} +36 -30
  373. package/tokenizable-VB4Av8GF.mjs.map +1 -0
  374. package/{tool_call-CPjyvkm4.mjs → tool_call-Cfaj-6zK.mjs} +4 -4
  375. package/{tool_call-CPjyvkm4.mjs.map → tool_call-Cfaj-6zK.mjs.map} +1 -1
  376. package/{tool_call-DgqVwL5n.js → tool_call-Fs_Uh5wQ.js} +4 -4
  377. package/{tool_call-DgqVwL5n.js.map → tool_call-Fs_Uh5wQ.js.map} +1 -1
  378. package/{tools-BmLzkvNr.mjs → tools-B3_8C78Q.mjs} +6 -6
  379. package/{tools-BmLzkvNr.mjs.map → tools-B3_8C78Q.mjs.map} +1 -1
  380. package/{tools-DmcIe2Cb.js → tools-CqOcmHR8.js} +6 -6
  381. package/{tools-DmcIe2Cb.js.map → tools-CqOcmHR8.js.map} +1 -1
  382. package/{toon-BvTQsKdN.mjs → toon-BSlr88px.mjs} +5 -5
  383. package/{toon-BvTQsKdN.mjs.map → toon-BSlr88px.mjs.map} +1 -1
  384. package/{toon-B05eKx-q.js → toon-D71tkyI3.js} +5 -5
  385. package/{toon-B05eKx-q.js.map → toon-D71tkyI3.js.map} +1 -1
  386. package/{turn_runner-DEGCvfVZ.mjs → turn_runner-BHHD6h77.mjs} +5 -5
  387. package/{turn_runner-DEGCvfVZ.mjs.map → turn_runner-BHHD6h77.mjs.map} +1 -1
  388. package/{turn_runner-DT8TseR4.js → turn_runner-DhLI7OTH.js} +5 -5
  389. package/{turn_runner-DT8TseR4.js.map → turn_runner-DhLI7OTH.js.map} +1 -1
  390. package/turn_runner.cjs +1 -1
  391. package/turn_runner.mjs +1 -1
  392. package/types-D6X_aUIb.mjs.map +1 -1
  393. package/types-DrSosVaM.js.map +1 -1
  394. package/{validate-lzy9nG_E.mjs → validate-Bi7FGjoq.mjs} +13 -1
  395. package/{validate-lzy9nG_E.mjs.map → validate-Bi7FGjoq.mjs.map} +1 -1
  396. package/{validate-CdOS7S2u.js → validate-CkQI-48O.js} +13 -1
  397. package/{validate-CdOS7S2u.js.map → validate-CkQI-48O.js.map} +1 -1
  398. package/{xml-DDTIMpY3.js → xml-BeNvlifb.js} +5 -5
  399. package/{xml-DDTIMpY3.js.map → xml-BeNvlifb.js.map} +1 -1
  400. package/{xml-VhJ4NrMB.mjs → xml-vyCZZiF_.mjs} +5 -5
  401. package/{xml-VhJ4NrMB.mjs.map → xml-vyCZZiF_.mjs.map} +1 -1
  402. package/{yaml-Cx16IYJq.js → yaml-DhLLa2cj.js} +5 -5
  403. package/{yaml-Cx16IYJq.js.map → yaml-DhLLa2cj.js.map} +1 -1
  404. package/{yaml-Du4wFGzL.mjs → yaml-Dtz0Bd7J.mjs} +5 -5
  405. package/{yaml-Du4wFGzL.mjs.map → yaml-Dtz0Bd7J.mjs.map} +1 -1
  406. package/artifact_methods-BMCahBLn.mjs +0 -1
  407. package/artifact_methods-f_bSy4kX.js +0 -1
  408. package/isolation-7xbkc12r.mjs.map +0 -1
  409. package/isolation-BQCTQYZ_.js.map +0 -1
  410. package/spooled_artifact-BkueYJhR.mjs.map +0 -1
  411. package/spooled_artifact-DriNQRj7.js.map +0 -1
  412. package/tokenizable-CWW7iSrD.js.map +0 -1
  413. package/tokenizable-DLMP68ZV.mjs.map +0 -1
@@ -1,15 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("../../chunk-Cek0wNdY.js");
3
- let vitest = require("vitest");
4
3
  //#region src/batteries/vector/conformance/index.ts
5
- /**
6
- * Shared conformance suite for vector-store adapters. Drive any adapter through
7
- * {@link runVectorStoreConformance} to verify it honours the same contract all shipped adapters do.
8
- * Public, deep-import-only (`@nhtio/adk/batteries/vector/conformance`) — it imports `vitest`, an
9
- * optional peer you install to run the suite; it is never pulled in by the battery barrel.
10
- *
11
- * @module @nhtio/adk/batteries/vector/conformance
12
- */
13
4
  /** A deterministic stub encoder producing a 3-dim vector from simple text features. */
14
5
  var stubEncoder = async (texts, _kind) => texts.map((tx) => [
15
6
  tx.length,
@@ -45,14 +36,93 @@ var padVector = (v, dim) => {
45
36
  * @param dim - Vector dimensionality the harness pads to (default 3).
46
37
  * @param opts - Per-`it` retry/timeout overrides.
47
38
  */
48
- var runVectorStoreConformance = (label, makeStore, dim = 3, opts = {}) => {
39
+ var assert = (condition, message) => {
40
+ if (!condition) throw new Error(message);
41
+ };
42
+ var equal = (actual, expected) => {
43
+ if (actual === expected) return true;
44
+ if (actual === null || expected === null || typeof actual !== "object" || typeof expected !== "object") return false;
45
+ if (Array.isArray(actual) !== Array.isArray(expected)) return false;
46
+ const actualRecord = actual;
47
+ const expectedRecord = expected;
48
+ const keysA = Object.keys(actualRecord);
49
+ const keysB = Object.keys(expectedRecord);
50
+ if (keysA.length !== keysB.length) return false;
51
+ return keysA.every((key) => Object.hasOwn(expectedRecord, key) && equal(actualRecord[key], expectedRecord[key]));
52
+ };
53
+ var match = (actual, expected) => {
54
+ if (expected === null || typeof expected !== "object") return equal(actual, expected);
55
+ if (actual === null || typeof actual !== "object") return false;
56
+ return Object.entries(expected).every(([key, value]) => match(actual[key], value));
57
+ };
58
+ var expectValue = (actual) => ({
59
+ toBe: (expected) => assert(equal(actual, expected), `expected ${String(actual)} to be ${String(expected)}`),
60
+ toEqual: (expected) => assert(equal(actual, expected), "values were not equal"),
61
+ toMatchObject: (expected) => assert(match(actual, expected), "value did not match expected object"),
62
+ toBeDefined: () => assert(actual !== void 0, "value was undefined"),
63
+ toBeUndefined: () => assert(actual === void 0, "value was defined"),
64
+ toHaveLength: (length) => assert(actual.length === length, "unexpected length"),
65
+ rejects: { toThrow: async () => {
66
+ try {
67
+ await actual;
68
+ } catch {
69
+ return;
70
+ }
71
+ throw new Error("expected promise to reject");
72
+ } }
73
+ });
74
+ /**
75
+ * Run the framework-free vector-store conformance suite against a consumer implementation.
76
+ *
77
+ * Each check creates a fresh store through `makeStore`; the returned promise rejects when any
78
+ * contract assertion fails. Consumers can await this function from any test runner without
79
+ * importing a test framework from the conformance module.
80
+ *
81
+ * @param label - Human-readable name used to identify the implementation under test.
82
+ * @param makeStore - Factory returning a fresh, connected store with the `docs` collection.
83
+ * @param dim - Vector dimensionality used by the suite (defaults to 3).
84
+ * @param opts - Retry count and per-attempt timeout in milliseconds for eventually consistent stores.
85
+ */
86
+ var runVectorStoreConformance = async (label, makeStore, dim = 3, opts = {}) => {
49
87
  const p = (v) => padVector(v, dim);
50
- const io = {
51
- retry: opts.retry ?? 0,
52
- timeout: opts.timeout ?? 5e3
88
+ const pending = [];
89
+ const retry = opts.retry ?? 0;
90
+ const timeout = opts.timeout ?? 5e3;
91
+ const runCase = async (test) => {
92
+ let last;
93
+ for (let attempt = 0; attempt <= retry; attempt++) {
94
+ let timedOut = false;
95
+ const operation = Promise.resolve().then(test);
96
+ let timer;
97
+ const deadline = new Promise((_, reject) => {
98
+ timer = setTimeout(() => {
99
+ timedOut = true;
100
+ reject(/* @__PURE__ */ new Error(`conformance check timed out after ${timeout}ms`));
101
+ }, timeout);
102
+ });
103
+ try {
104
+ await Promise.race([operation, deadline]);
105
+ return;
106
+ } catch (error) {
107
+ if (timedOut) {
108
+ last = error;
109
+ break;
110
+ }
111
+ last = error;
112
+ } finally {
113
+ if (timer !== void 0) clearTimeout(timer);
114
+ }
115
+ }
116
+ throw last;
117
+ };
118
+ const it = (_name, _io, test) => {
119
+ pending.push(() => runCase(test));
53
120
  };
54
- (0, vitest.describe)("conformance: " + label, () => {
55
- (0, vitest.it)("upserts vectors and searches by nearVector with [0,1] score", io, async () => {
121
+ const describe = (_name, suite) => suite();
122
+ const expect = expectValue;
123
+ const io = void 0;
124
+ describe("conformance: " + label, () => {
125
+ it("upserts vectors and searches by nearVector with [0,1] score", io, async () => {
56
126
  const vs = await makeStore();
57
127
  await vs("docs").upsert([{
58
128
  id: "1",
@@ -76,12 +146,12 @@ var runVectorStoreConformance = (label, makeStore, dim = 3, opts = {}) => {
76
146
  1,
77
147
  0
78
148
  ])).select("id", "score").limit(2);
79
- (0, vitest.expect)(res.length).toBe(2);
80
- (0, vitest.expect)(res[0].id).toBeDefined();
81
- (0, vitest.expect)(typeof res[0].score).toBe("number");
82
- (0, vitest.expect)(res[0].score >= 0 && res[0].score <= 1).toBe(true);
149
+ expect(res.length).toBe(2);
150
+ expect(res[0].id).toBeDefined();
151
+ expect(typeof res[0].score).toBe("number");
152
+ expect(res[0].score >= 0 && res[0].score <= 1).toBe(true);
83
153
  });
84
- (0, vitest.it)("encodes text on upsert+nearText when an encoder is configured", io, async () => {
154
+ it("encodes text on upsert+nearText when an encoder is configured", io, async () => {
85
155
  const vs = await makeStore();
86
156
  await vs("docs").upsert([{
87
157
  id: "c",
@@ -89,12 +159,12 @@ var runVectorStoreConformance = (label, makeStore, dim = 3, opts = {}) => {
89
159
  metadata: {}
90
160
  }]);
91
161
  const res = await vs("docs").nearText("cat").select("id").limit(1);
92
- (0, vitest.expect)(res.length).toBe(1);
93
- (0, vitest.expect)(res[0].id).toBe("c");
162
+ expect(res.length).toBe(1);
163
+ expect(res[0].id).toBe("c");
94
164
  });
95
- (0, vitest.it)("requires .select() on reads", io, async () => {
165
+ it("requires .select() on reads", io, async () => {
96
166
  const vs = await makeStore();
97
- await (0, vitest.expect)((async () => {
167
+ await expect((async () => {
98
168
  await vs("docs").nearVector(p([
99
169
  1,
100
170
  1,
@@ -102,7 +172,7 @@ var runVectorStoreConformance = (label, makeStore, dim = 3, opts = {}) => {
102
172
  ]));
103
173
  })()).rejects.toThrow();
104
174
  });
105
- (0, vitest.it)("filter-scan (no near) returns rows without score", io, async () => {
175
+ it("filter-scan (no near) returns rows without score", io, async () => {
106
176
  const vs = await makeStore();
107
177
  await vs("docs").upsert([{
108
178
  id: "1",
@@ -114,10 +184,10 @@ var runVectorStoreConformance = (label, makeStore, dim = 3, opts = {}) => {
114
184
  metadata: { kind: "x" }
115
185
  }]);
116
186
  const res = await vs("docs").where("kind", "x").select("id", "metadata").limit(10);
117
- (0, vitest.expect)(res.length).toBe(1);
118
- (0, vitest.expect)(res[0].score).toBeUndefined();
187
+ expect(res.length).toBe(1);
188
+ expect(res[0].score).toBeUndefined();
119
189
  });
120
- (0, vitest.it)("nested filter A AND (B OR C) selects the right subset", io, async () => {
190
+ it("nested filter A AND (B OR C) selects the right subset", io, async () => {
121
191
  const vs = await makeStore();
122
192
  await vs("docs").upsert([
123
193
  {
@@ -173,9 +243,9 @@ var runVectorStoreConformance = (label, makeStore, dim = 3, opts = {}) => {
173
243
  }
174
244
  }
175
245
  ]);
176
- (0, vitest.expect)((await vs("docs").where("kind", "doc").andWhere((qb) => qb.where("year", ">=", 2024).orWhere("pinned", true)).select("id").limit(10)).map((r) => r.id).sort()).toEqual(["a", "c"]);
246
+ expect((await vs("docs").where("kind", "doc").andWhere((qb) => qb.where("year", ">=", 2024).orWhere("pinned", true)).select("id").limit(10)).map((r) => r.id).sort()).toEqual(["a", "c"]);
177
247
  });
178
- (0, vitest.it)("projection: vector excluded unless selected", io, async () => {
248
+ it("projection: vector excluded unless selected", io, async () => {
179
249
  const vs = await makeStore();
180
250
  await vs("docs").upsert([{
181
251
  id: "1",
@@ -185,7 +255,7 @@ var runVectorStoreConformance = (label, makeStore, dim = 3, opts = {}) => {
185
255
  0
186
256
  ])
187
257
  }]);
188
- (0, vitest.expect)((await vs("docs").nearVector(p([
258
+ expect((await vs("docs").nearVector(p([
189
259
  1,
190
260
  0,
191
261
  0
@@ -195,9 +265,9 @@ var runVectorStoreConformance = (label, makeStore, dim = 3, opts = {}) => {
195
265
  0,
196
266
  0
197
267
  ])).select("id", "vector").limit(1);
198
- (0, vitest.expect)(Array.isArray(withVec[0].vector)).toBe(true);
268
+ expect(Array.isArray(withVec[0].vector)).toBe(true);
199
269
  });
200
- (0, vitest.it)("deletes by id", io, async () => {
270
+ it("deletes by id", io, async () => {
201
271
  const vs = await makeStore();
202
272
  await vs("docs").upsert([{
203
273
  id: "1",
@@ -215,13 +285,14 @@ var runVectorStoreConformance = (label, makeStore, dim = 3, opts = {}) => {
215
285
  ])
216
286
  }]);
217
287
  await vs("docs").whereIn("id", ["1"]).delete();
218
- (0, vitest.expect)((await vs("docs").select("id").limit(10)).length).toBe(1);
288
+ expect((await vs("docs").select("id").limit(10)).length).toBe(1);
219
289
  });
220
- (0, vitest.it)("throws transaction-unsupported when capabilities.transactions is false", io, async () => {
290
+ it("throws transaction-unsupported when capabilities.transactions is false", io, async () => {
221
291
  const vs = await makeStore();
222
- if (!vs.capabilities.transactions) await (0, vitest.expect)(vs.transaction(async () => {})).rejects.toThrow();
292
+ if (!vs.capabilities.transactions) await expect(vs.transaction(async () => {})).rejects.toThrow();
223
293
  });
224
294
  });
295
+ for (const fn of pending) await fn();
225
296
  };
226
297
  //#endregion
227
298
  exports.paddedStubEncoder = paddedStubEncoder;
@@ -1 +1 @@
1
- {"version":3,"file":"conformance.cjs","names":[],"sources":["../../../src/batteries/vector/conformance/index.ts"],"sourcesContent":["/**\n * Shared conformance suite for vector-store adapters. Drive any adapter through\n * {@link runVectorStoreConformance} to verify it honours the same contract all shipped adapters do.\n * Public, deep-import-only (`@nhtio/adk/batteries/vector/conformance`) — it imports `vitest`, an\n * optional peer you install to run the suite; it is never pulled in by the battery barrel.\n *\n * @module @nhtio/adk/batteries/vector/conformance\n */\n\nimport { describe, expect, it } from 'vitest'\nimport type { CallableVectorStore } from '../contract'\n\n/** A deterministic stub encoder producing a 3-dim vector from simple text features. */\nexport const stubEncoder = async (\n texts: string[],\n _kind: 'query' | 'document'\n): Promise<number[][]> =>\n texts.map((tx) => [tx.length, tx.includes('cat') ? 1 : 0, tx.includes('dog') ? 1 : 0])\n\n/**\n * A dimension-padding encoder factory: wraps {@link stubEncoder} and zero-extends to `dim`. Used by\n * backends that enforce a minimum dimension (e.g. Cloudflare Vectorize requires 32–1536).\n */\nexport const paddedStubEncoder =\n (dim: number) =>\n async (texts: string[], kind: 'query' | 'document'): Promise<number[][]> => {\n const base = await stubEncoder(texts, kind)\n return base.map((v) => padVector(v, dim))\n }\n\n// Zero-extend (or truncate) a vector to exactly `dim` entries. dim===3 (the default) returns the\n// vector unchanged, so existing callers are byte-for-byte identical.\nconst padVector = (v: number[], dim: number): number[] => {\n if (v.length === dim) return v\n if (v.length > dim) return v.slice(0, dim)\n return [...v, ...new Array(dim - v.length).fill(0)]\n}\n\n/**\n * Drive a vector-store adapter through the shared contract suite.\n *\n * @remarks\n * `makeStore` must return an already-connected store whose `'docs'` collection is created at the\n * matching dimension; it is re-invoked per test so retries are self-contained. `dim` defaults to 3\n * — pass a larger value for backends with a dimension floor (the harness pads every test vector to\n * `dim`). `opts.retry` / `opts.timeout` are forwarded to every `it()` (defaults: retry 0, 5s) and\n * exist for aggressively eventually-consistent managed backends whose read-after-write can flap for\n * seconds — a retried attempt re-runs `makeStore()` against an index that has had more time to\n * settle, without weakening any assertion.\n *\n * @param label - Human-readable label for the suite (the adapter name).\n * @param makeStore - Factory returning a fresh, connected store with the `'docs'` collection.\n * @param dim - Vector dimensionality the harness pads to (default 3).\n * @param opts - Per-`it` retry/timeout overrides.\n */\nexport const runVectorStoreConformance = (\n label: string,\n makeStore: () => Promise<CallableVectorStore>,\n dim = 3,\n opts: { retry?: number; timeout?: number } = {}\n): void => {\n const p = (v: number[]): number[] => padVector(v, dim)\n const io = { retry: opts.retry ?? 0, timeout: opts.timeout ?? 5000 }\n describe('conformance: ' + label, () => {\n it('upserts vectors and searches by nearVector with [0,1] score', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([\n { id: '1', vector: p([3, 1, 0]), metadata: { kind: 'animal' } },\n { id: '2', vector: p([3, 0, 1]), metadata: { kind: 'animal' } },\n ])\n const res = await vs('docs')\n .nearVector(p([3, 1, 0]))\n .select('id', 'score')\n .limit(2)\n expect(res.length).toBe(2)\n expect(res[0].id).toBeDefined()\n expect(typeof res[0].score).toBe('number')\n expect(res[0].score! >= 0 && res[0].score! <= 1).toBe(true)\n })\n it('encodes text on upsert+nearText when an encoder is configured', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([{ id: 'c', document: 'cat', metadata: {} }])\n const res = await vs('docs').nearText('cat').select('id').limit(1)\n expect(res.length).toBe(1)\n expect(res[0].id).toBe('c')\n })\n it('requires .select() on reads', io, async () => {\n const vs = await makeStore()\n await expect(\n (async () => {\n await vs('docs').nearVector(p([1, 1, 1]))\n })()\n ).rejects.toThrow()\n })\n it('filter-scan (no near) returns rows without score', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([{ id: '1', vector: p([1, 0, 0]), metadata: { kind: 'x' } }])\n const res = await vs('docs').where('kind', 'x').select('id', 'metadata').limit(10)\n expect(res.length).toBe(1)\n expect(res[0].score).toBeUndefined()\n })\n it('nested filter A AND (B OR C) selects the right subset', io, async () => {\n const vs = await makeStore()\n // Every record carries all three fields so the test probes nested AND/OR routing, not\n // backend-specific missing-field semantics (e.g. Chroma's $or excludes records missing a\n // referenced key, where the JS evaluator treats that clause as merely false).\n await vs('docs').upsert([\n { id: 'a', vector: p([1, 0, 0]), metadata: { kind: 'doc', year: 2024, pinned: false } }, // kept (year arm)\n { id: 'b', vector: p([0, 1, 0]), metadata: { kind: 'doc', year: 2010, pinned: false } }, // dropped (neither arm)\n { id: 'c', vector: p([0, 0, 1]), metadata: { kind: 'doc', year: 2010, pinned: true } }, // kept (pinned arm)\n { id: 'd', vector: p([1, 1, 0]), metadata: { kind: 'other', year: 2024, pinned: true } }, // dropped (kind mismatch)\n ])\n // kind = 'doc' AND (year >= 2024 OR pinned = true)\n const res = await vs('docs')\n .where('kind', 'doc')\n .andWhere((qb) => qb.where('year', '>=', 2024).orWhere('pinned', true))\n .select('id')\n .limit(10)\n expect(res.map((r) => r.id).sort()).toEqual(['a', 'c'])\n })\n it('projection: vector excluded unless selected', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([{ id: '1', vector: p([1, 0, 0]) }])\n const noVec = await vs('docs')\n .nearVector(p([1, 0, 0]))\n .select('id')\n .limit(1)\n expect(noVec[0].vector).toBeUndefined()\n const withVec = await vs('docs')\n .nearVector(p([1, 0, 0]))\n .select('id', 'vector')\n .limit(1)\n expect(Array.isArray(withVec[0].vector)).toBe(true)\n })\n it('deletes by id', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([\n { id: '1', vector: p([1, 0, 0]) },\n { id: '2', vector: p([0, 1, 0]) },\n ])\n await vs('docs').whereIn('id', ['1']).delete()\n const all = await vs('docs').select('id').limit(10)\n expect(all.length).toBe(1)\n })\n it('throws transaction-unsupported when capabilities.transactions is false', io, async () => {\n const vs = await makeStore()\n if (!vs.capabilities.transactions) {\n await expect(vs.transaction(async () => {})).rejects.toThrow()\n }\n })\n })\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,IAAa,cAAc,OACzB,OACA,UAEA,MAAM,KAAK,OAAO;CAAC,GAAG;CAAQ,GAAG,SAAS,KAAK,IAAI,IAAI;CAAG,GAAG,SAAS,KAAK,IAAI,IAAI;AAAC,CAAC;;;;;AAMvF,IAAa,qBACV,QACD,OAAO,OAAiB,SAAoD;CAE1E,QAAO,MADY,YAAY,OAAO,IAAI,GAC9B,KAAK,MAAM,UAAU,GAAG,GAAG,CAAC;AAC1C;AAIF,IAAM,aAAa,GAAa,QAA0B;CACxD,IAAI,EAAE,WAAW,KAAK,OAAO;CAC7B,IAAI,EAAE,SAAS,KAAK,OAAO,EAAE,MAAM,GAAG,GAAG;CACzC,OAAO,CAAC,GAAG,GAAG,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACpD;;;;;;;;;;;;;;;;;;AAmBA,IAAa,6BACX,OACA,WACA,MAAM,GACN,OAA6C,CAAC,MACrC;CACT,MAAM,KAAK,MAA0B,UAAU,GAAG,GAAG;CACrD,MAAM,KAAK;EAAE,OAAO,KAAK,SAAS;EAAG,SAAS,KAAK,WAAW;CAAK;CACnE,CAAA,GAAA,OAAA,UAAS,kBAAkB,aAAa;EACtC,CAAA,GAAA,OAAA,IAAG,+DAA+D,IAAI,YAAY;GAChF,MAAM,KAAK,MAAM,UAAU;GAC3B,MAAM,GAAG,MAAM,EAAE,OAAO,CACtB;IAAE,IAAI;IAAK,QAAQ,EAAE;KAAC;KAAG;KAAG;IAAC,CAAC;IAAG,UAAU,EAAE,MAAM,SAAS;GAAE,GAC9D;IAAE,IAAI;IAAK,QAAQ,EAAE;KAAC;KAAG;KAAG;IAAC,CAAC;IAAG,UAAU,EAAE,MAAM,SAAS;GAAE,CAChE,CAAC;GACD,MAAM,MAAM,MAAM,GAAG,MAAM,EACxB,WAAW,EAAE;IAAC;IAAG;IAAG;GAAC,CAAC,CAAC,EACvB,OAAO,MAAM,OAAO,EACpB,MAAM,CAAC;GACV,CAAA,GAAA,OAAA,QAAO,IAAI,MAAM,EAAE,KAAK,CAAC;GACzB,CAAA,GAAA,OAAA,QAAO,IAAI,GAAG,EAAE,EAAE,YAAY;GAC9B,CAAA,GAAA,OAAA,QAAO,OAAO,IAAI,GAAG,KAAK,EAAE,KAAK,QAAQ;GACzC,CAAA,GAAA,OAAA,QAAO,IAAI,GAAG,SAAU,KAAK,IAAI,GAAG,SAAU,CAAC,EAAE,KAAK,IAAI;EAC5D,CAAC;EACD,CAAA,GAAA,OAAA,IAAG,iEAAiE,IAAI,YAAY;GAClF,MAAM,KAAK,MAAM,UAAU;GAC3B,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC;IAAE,IAAI;IAAK,UAAU;IAAO,UAAU,CAAC;GAAE,CAAC,CAAC;GACpE,MAAM,MAAM,MAAM,GAAG,MAAM,EAAE,SAAS,KAAK,EAAE,OAAO,IAAI,EAAE,MAAM,CAAC;GACjE,CAAA,GAAA,OAAA,QAAO,IAAI,MAAM,EAAE,KAAK,CAAC;GACzB,CAAA,GAAA,OAAA,QAAO,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG;EAC5B,CAAC;EACD,CAAA,GAAA,OAAA,IAAG,+BAA+B,IAAI,YAAY;GAChD,MAAM,KAAK,MAAM,UAAU;GAC3B,OAAA,GAAA,OAAA,SACG,YAAY;IACX,MAAM,GAAG,MAAM,EAAE,WAAW,EAAE;KAAC;KAAG;KAAG;IAAC,CAAC,CAAC;GAC1C,GAAG,CACL,EAAE,QAAQ,QAAQ;EACpB,CAAC;EACD,CAAA,GAAA,OAAA,IAAG,oDAAoD,IAAI,YAAY;GACrE,MAAM,KAAK,MAAM,UAAU;GAC3B,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC;IAAE,IAAI;IAAK,QAAQ,EAAE;KAAC;KAAG;KAAG;IAAC,CAAC;IAAG,UAAU,EAAE,MAAM,IAAI;GAAE,CAAC,CAAC;GACpF,MAAM,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,QAAQ,GAAG,EAAE,OAAO,MAAM,UAAU,EAAE,MAAM,EAAE;GACjF,CAAA,GAAA,OAAA,QAAO,IAAI,MAAM,EAAE,KAAK,CAAC;GACzB,CAAA,GAAA,OAAA,QAAO,IAAI,GAAG,KAAK,EAAE,cAAc;EACrC,CAAC;EACD,CAAA,GAAA,OAAA,IAAG,yDAAyD,IAAI,YAAY;GAC1E,MAAM,KAAK,MAAM,UAAU;GAI3B,MAAM,GAAG,MAAM,EAAE,OAAO;IACtB;KAAE,IAAI;KAAK,QAAQ,EAAE;MAAC;MAAG;MAAG;KAAC,CAAC;KAAG,UAAU;MAAE,MAAM;MAAO,MAAM;MAAM,QAAQ;KAAM;IAAE;IACtF;KAAE,IAAI;KAAK,QAAQ,EAAE;MAAC;MAAG;MAAG;KAAC,CAAC;KAAG,UAAU;MAAE,MAAM;MAAO,MAAM;MAAM,QAAQ;KAAM;IAAE;IACtF;KAAE,IAAI;KAAK,QAAQ,EAAE;MAAC;MAAG;MAAG;KAAC,CAAC;KAAG,UAAU;MAAE,MAAM;MAAO,MAAM;MAAM,QAAQ;KAAK;IAAE;IACrF;KAAE,IAAI;KAAK,QAAQ,EAAE;MAAC;MAAG;MAAG;KAAC,CAAC;KAAG,UAAU;MAAE,MAAM;MAAS,MAAM;MAAM,QAAQ;KAAK;IAAE;GACzF,CAAC;GAOD,CAAA,GAAA,OAAA,SAAO,MALW,GAAG,MAAM,EACxB,MAAM,QAAQ,KAAK,EACnB,UAAU,OAAO,GAAG,MAAM,QAAQ,MAAM,IAAI,EAAE,QAAQ,UAAU,IAAI,CAAC,EACrE,OAAO,IAAI,EACX,MAAM,EAAE,GACA,KAAK,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC;EACxD,CAAC;EACD,CAAA,GAAA,OAAA,IAAG,+CAA+C,IAAI,YAAY;GAChE,MAAM,KAAK,MAAM,UAAU;GAC3B,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC;IAAE,IAAI;IAAK,QAAQ,EAAE;KAAC;KAAG;KAAG;IAAC,CAAC;GAAE,CAAC,CAAC;GAK3D,CAAA,GAAA,OAAA,SAAO,MAJa,GAAG,MAAM,EAC1B,WAAW,EAAE;IAAC;IAAG;IAAG;GAAC,CAAC,CAAC,EACvB,OAAO,IAAI,EACX,MAAM,CAAC,GACG,GAAG,MAAM,EAAE,cAAc;GACtC,MAAM,UAAU,MAAM,GAAG,MAAM,EAC5B,WAAW,EAAE;IAAC;IAAG;IAAG;GAAC,CAAC,CAAC,EACvB,OAAO,MAAM,QAAQ,EACrB,MAAM,CAAC;GACV,CAAA,GAAA,OAAA,QAAO,MAAM,QAAQ,QAAQ,GAAG,MAAM,CAAC,EAAE,KAAK,IAAI;EACpD,CAAC;EACD,CAAA,GAAA,OAAA,IAAG,iBAAiB,IAAI,YAAY;GAClC,MAAM,KAAK,MAAM,UAAU;GAC3B,MAAM,GAAG,MAAM,EAAE,OAAO,CACtB;IAAE,IAAI;IAAK,QAAQ,EAAE;KAAC;KAAG;KAAG;IAAC,CAAC;GAAE,GAChC;IAAE,IAAI;IAAK,QAAQ,EAAE;KAAC;KAAG;KAAG;IAAC,CAAC;GAAE,CAClC,CAAC;GACD,MAAM,GAAG,MAAM,EAAE,QAAQ,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO;GAE7C,CAAA,GAAA,OAAA,SAAO,MADW,GAAG,MAAM,EAAE,OAAO,IAAI,EAAE,MAAM,EAAE,GACvC,MAAM,EAAE,KAAK,CAAC;EAC3B,CAAC;EACD,CAAA,GAAA,OAAA,IAAG,0EAA0E,IAAI,YAAY;GAC3F,MAAM,KAAK,MAAM,UAAU;GAC3B,IAAI,CAAC,GAAG,aAAa,cACnB,OAAA,GAAA,OAAA,QAAa,GAAG,YAAY,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,QAAQ;EAEjE,CAAC;CACH,CAAC;AACH"}
1
+ {"version":3,"file":"conformance.cjs","names":[],"sources":["../../../src/batteries/vector/conformance/index.ts"],"sourcesContent":["/**\n * Shared conformance suite for vector-store adapters. Drive any adapter through\n * {@link runVectorStoreConformance} to verify it honours the same contract all shipped adapters do.\n * Public, deep-import-only (`@nhtio/adk/batteries/vector/conformance`). The suite has no test-runner\n * dependency: callers invoke it and await the returned promise from any test framework.\n *\n * @module @nhtio/adk/batteries/vector/conformance\n */\n\nimport type { CallableVectorStore } from '../contract'\n\n/** A deterministic stub encoder producing a 3-dim vector from simple text features. */\nexport const stubEncoder = async (\n texts: string[],\n _kind: 'query' | 'document'\n): Promise<number[][]> =>\n texts.map((tx) => [tx.length, tx.includes('cat') ? 1 : 0, tx.includes('dog') ? 1 : 0])\n\n/**\n * A dimension-padding encoder factory: wraps {@link stubEncoder} and zero-extends to `dim`. Used by\n * backends that enforce a minimum dimension (e.g. Cloudflare Vectorize requires 32–1536).\n */\nexport const paddedStubEncoder =\n (dim: number) =>\n async (texts: string[], kind: 'query' | 'document'): Promise<number[][]> => {\n const base = await stubEncoder(texts, kind)\n return base.map((v) => padVector(v, dim))\n }\n\n// Zero-extend (or truncate) a vector to exactly `dim` entries. dim===3 (the default) returns the\n// vector unchanged, so existing callers are byte-for-byte identical.\nconst padVector = (v: number[], dim: number): number[] => {\n if (v.length === dim) return v\n if (v.length > dim) return v.slice(0, dim)\n return [...v, ...new Array(dim - v.length).fill(0)]\n}\n\n/**\n * Drive a vector-store adapter through the shared contract suite.\n *\n * @remarks\n * `makeStore` must return an already-connected store whose `'docs'` collection is created at the\n * matching dimension; it is re-invoked per test so retries are self-contained. `dim` defaults to 3\n * — pass a larger value for backends with a dimension floor (the harness pads every test vector to\n * `dim`). `opts.retry` / `opts.timeout` are forwarded to every `it()` (defaults: retry 0, 5s) and\n * exist for aggressively eventually-consistent managed backends whose read-after-write can flap for\n * seconds — a retried attempt re-runs `makeStore()` against an index that has had more time to\n * settle, without weakening any assertion.\n *\n * @param label - Human-readable label for the suite (the adapter name).\n * @param makeStore - Factory returning a fresh, connected store with the `'docs'` collection.\n * @param dim - Vector dimensionality the harness pads to (default 3).\n * @param opts - Per-`it` retry/timeout overrides.\n */\nconst assert: (condition: boolean, message: string) => asserts condition = (condition, message) => {\n if (!condition) throw new Error(message)\n}\nconst equal = (actual: unknown, expected: unknown): boolean => {\n if (actual === expected) return true\n if (\n actual === null ||\n expected === null ||\n typeof actual !== 'object' ||\n typeof expected !== 'object'\n )\n return false\n if (Array.isArray(actual) !== Array.isArray(expected)) return false\n const actualRecord = actual as Record<string, unknown>\n const expectedRecord = expected as Record<string, unknown>\n const keysA = Object.keys(actualRecord)\n const keysB = Object.keys(expectedRecord)\n if (keysA.length !== keysB.length) return false\n return keysA.every(\n (key) => Object.hasOwn(expectedRecord, key) && equal(actualRecord[key], expectedRecord[key])\n )\n}\nconst match = (actual: unknown, expected: unknown): boolean => {\n if (expected === null || typeof expected !== 'object') return equal(actual, expected)\n if (actual === null || typeof actual !== 'object') return false\n return Object.entries(expected).every(([key, value]) =>\n match((actual as Record<string, unknown>)[key], value)\n )\n}\nconst expectValue = (actual: unknown) => ({\n toBe: (expected: unknown) =>\n assert(equal(actual, expected), `expected ${String(actual)} to be ${String(expected)}`),\n toEqual: (expected: unknown) => assert(equal(actual, expected), 'values were not equal'),\n toMatchObject: (expected: unknown) =>\n assert(match(actual, expected), 'value did not match expected object'),\n toBeDefined: () => assert(actual !== undefined, 'value was undefined'),\n toBeUndefined: () => assert(actual === undefined, 'value was defined'),\n toHaveLength: (length: number) =>\n assert((actual as { length: number }).length === length, 'unexpected length'),\n rejects: {\n toThrow: async () => {\n try {\n await (actual as Promise<unknown>)\n } catch {\n return\n }\n throw new Error('expected promise to reject')\n },\n },\n})\n\n/**\n * Run the framework-free vector-store conformance suite against a consumer implementation.\n *\n * Each check creates a fresh store through `makeStore`; the returned promise rejects when any\n * contract assertion fails. Consumers can await this function from any test runner without\n * importing a test framework from the conformance module.\n *\n * @param label - Human-readable name used to identify the implementation under test.\n * @param makeStore - Factory returning a fresh, connected store with the `docs` collection.\n * @param dim - Vector dimensionality used by the suite (defaults to 3).\n * @param opts - Retry count and per-attempt timeout in milliseconds for eventually consistent stores.\n */\nexport const runVectorStoreConformance = async (\n label: string,\n makeStore: () => Promise<CallableVectorStore>,\n dim = 3,\n opts: { retry?: number; timeout?: number } = {}\n): Promise<void> => {\n const p = (v: number[]): number[] => padVector(v, dim)\n const pending: Array<() => Promise<void>> = []\n const retry = opts.retry ?? 0\n const timeout = opts.timeout ?? 5000\n const runCase = async (test: () => Promise<void>): Promise<void> => {\n let last: unknown\n for (let attempt = 0; attempt <= retry; attempt++) {\n let timedOut = false\n const operation = Promise.resolve().then(test)\n let timer: ReturnType<typeof setTimeout> | undefined\n const deadline = new Promise<never>((_, reject) => {\n timer = setTimeout(() => {\n timedOut = true\n reject(new Error(`conformance check timed out after ${timeout}ms`))\n }, timeout)\n })\n try {\n await Promise.race([operation, deadline])\n return\n } catch (error) {\n // A timeout cannot cancel an arbitrary backend operation. Drain it before retrying so a\n // late write/read from this attempt cannot race the fresh store made by the next attempt.\n if (timedOut) {\n last = error\n break\n }\n last = error\n } finally {\n if (timer !== undefined) clearTimeout(timer)\n }\n }\n throw last\n }\n const it = (_name: string, _io: unknown, test: () => Promise<void>) => {\n pending.push(() => runCase(test))\n }\n const describe = (_name: string, suite: () => void) => suite()\n const expect = expectValue\n const io = undefined\n describe('conformance: ' + label, () => {\n it('upserts vectors and searches by nearVector with [0,1] score', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([\n { id: '1', vector: p([3, 1, 0]), metadata: { kind: 'animal' } },\n { id: '2', vector: p([3, 0, 1]), metadata: { kind: 'animal' } },\n ])\n const res = await vs('docs')\n .nearVector(p([3, 1, 0]))\n .select('id', 'score')\n .limit(2)\n expect(res.length).toBe(2)\n expect(res[0].id).toBeDefined()\n expect(typeof res[0].score).toBe('number')\n expect(res[0].score! >= 0 && res[0].score! <= 1).toBe(true)\n })\n it('encodes text on upsert+nearText when an encoder is configured', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([{ id: 'c', document: 'cat', metadata: {} }])\n const res = await vs('docs').nearText('cat').select('id').limit(1)\n expect(res.length).toBe(1)\n expect(res[0].id).toBe('c')\n })\n it('requires .select() on reads', io, async () => {\n const vs = await makeStore()\n await expect(\n (async () => {\n await vs('docs').nearVector(p([1, 1, 1]))\n })()\n ).rejects.toThrow()\n })\n it('filter-scan (no near) returns rows without score', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([{ id: '1', vector: p([1, 0, 0]), metadata: { kind: 'x' } }])\n const res = await vs('docs').where('kind', 'x').select('id', 'metadata').limit(10)\n expect(res.length).toBe(1)\n expect(res[0].score).toBeUndefined()\n })\n it('nested filter A AND (B OR C) selects the right subset', io, async () => {\n const vs = await makeStore()\n // Every record carries all three fields so the test probes nested AND/OR routing, not\n // backend-specific missing-field semantics (e.g. Chroma's $or excludes records missing a\n // referenced key, where the JS evaluator treats that clause as merely false).\n await vs('docs').upsert([\n { id: 'a', vector: p([1, 0, 0]), metadata: { kind: 'doc', year: 2024, pinned: false } }, // kept (year arm)\n { id: 'b', vector: p([0, 1, 0]), metadata: { kind: 'doc', year: 2010, pinned: false } }, // dropped (neither arm)\n { id: 'c', vector: p([0, 0, 1]), metadata: { kind: 'doc', year: 2010, pinned: true } }, // kept (pinned arm)\n { id: 'd', vector: p([1, 1, 0]), metadata: { kind: 'other', year: 2024, pinned: true } }, // dropped (kind mismatch)\n ])\n // kind = 'doc' AND (year >= 2024 OR pinned = true)\n const res = await vs('docs')\n .where('kind', 'doc')\n .andWhere((qb) => qb.where('year', '>=', 2024).orWhere('pinned', true))\n .select('id')\n .limit(10)\n expect(res.map((r) => r.id).sort()).toEqual(['a', 'c'])\n })\n it('projection: vector excluded unless selected', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([{ id: '1', vector: p([1, 0, 0]) }])\n const noVec = await vs('docs')\n .nearVector(p([1, 0, 0]))\n .select('id')\n .limit(1)\n expect(noVec[0].vector).toBeUndefined()\n const withVec = await vs('docs')\n .nearVector(p([1, 0, 0]))\n .select('id', 'vector')\n .limit(1)\n expect(Array.isArray(withVec[0].vector)).toBe(true)\n })\n it('deletes by id', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([\n { id: '1', vector: p([1, 0, 0]) },\n { id: '2', vector: p([0, 1, 0]) },\n ])\n await vs('docs').whereIn('id', ['1']).delete()\n const all = await vs('docs').select('id').limit(10)\n expect(all.length).toBe(1)\n })\n it('throws transaction-unsupported when capabilities.transactions is false', io, async () => {\n const vs = await makeStore()\n if (!vs.capabilities.transactions) {\n await expect(vs.transaction(async () => {})).rejects.toThrow()\n }\n })\n })\n for (const fn of pending) {\n await fn()\n }\n}\n"],"mappings":";;;;AAYA,IAAa,cAAc,OACzB,OACA,UAEA,MAAM,KAAK,OAAO;CAAC,GAAG;CAAQ,GAAG,SAAS,KAAK,IAAI,IAAI;CAAG,GAAG,SAAS,KAAK,IAAI,IAAI;AAAC,CAAC;;;;;AAMvF,IAAa,qBACV,QACD,OAAO,OAAiB,SAAoD;CAE1E,QAAO,MADY,YAAY,OAAO,IAAI,GAC9B,KAAK,MAAM,UAAU,GAAG,GAAG,CAAC;AAC1C;AAIF,IAAM,aAAa,GAAa,QAA0B;CACxD,IAAI,EAAE,WAAW,KAAK,OAAO;CAC7B,IAAI,EAAE,SAAS,KAAK,OAAO,EAAE,MAAM,GAAG,GAAG;CACzC,OAAO,CAAC,GAAG,GAAG,GAAG,IAAI,MAAM,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACpD;;;;;;;;;;;;;;;;;;AAmBA,IAAM,UAAsE,WAAW,YAAY;CACjG,IAAI,CAAC,WAAW,MAAM,IAAI,MAAM,OAAO;AACzC;AACA,IAAM,SAAS,QAAiB,aAA+B;CAC7D,IAAI,WAAW,UAAU,OAAO;CAChC,IACE,WAAW,QACX,aAAa,QACb,OAAO,WAAW,YAClB,OAAO,aAAa,UAEpB,OAAO;CACT,IAAI,MAAM,QAAQ,MAAM,MAAM,MAAM,QAAQ,QAAQ,GAAG,OAAO;CAC9D,MAAM,eAAe;CACrB,MAAM,iBAAiB;CACvB,MAAM,QAAQ,OAAO,KAAK,YAAY;CACtC,MAAM,QAAQ,OAAO,KAAK,cAAc;CACxC,IAAI,MAAM,WAAW,MAAM,QAAQ,OAAO;CAC1C,OAAO,MAAM,OACV,QAAQ,OAAO,OAAO,gBAAgB,GAAG,KAAK,MAAM,aAAa,MAAM,eAAe,IAAI,CAC7F;AACF;AACA,IAAM,SAAS,QAAiB,aAA+B;CAC7D,IAAI,aAAa,QAAQ,OAAO,aAAa,UAAU,OAAO,MAAM,QAAQ,QAAQ;CACpF,IAAI,WAAW,QAAQ,OAAO,WAAW,UAAU,OAAO;CAC1D,OAAO,OAAO,QAAQ,QAAQ,EAAE,OAAO,CAAC,KAAK,WAC3C,MAAO,OAAmC,MAAM,KAAK,CACvD;AACF;AACA,IAAM,eAAe,YAAqB;CACxC,OAAO,aACL,OAAO,MAAM,QAAQ,QAAQ,GAAG,YAAY,OAAO,MAAM,EAAE,SAAS,OAAO,QAAQ,GAAG;CACxF,UAAU,aAAsB,OAAO,MAAM,QAAQ,QAAQ,GAAG,uBAAuB;CACvF,gBAAgB,aACd,OAAO,MAAM,QAAQ,QAAQ,GAAG,qCAAqC;CACvE,mBAAmB,OAAO,WAAW,KAAA,GAAW,qBAAqB;CACrE,qBAAqB,OAAO,WAAW,KAAA,GAAW,mBAAmB;CACrE,eAAe,WACb,OAAQ,OAA8B,WAAW,QAAQ,mBAAmB;CAC9E,SAAS,EACP,SAAS,YAAY;EACnB,IAAI;GACF,MAAO;EACT,QAAQ;GACN;EACF;EACA,MAAM,IAAI,MAAM,4BAA4B;CAC9C,EACF;AACF;;;;;;;;;;;;;AAcA,IAAa,4BAA4B,OACvC,OACA,WACA,MAAM,GACN,OAA6C,CAAC,MAC5B;CAClB,MAAM,KAAK,MAA0B,UAAU,GAAG,GAAG;CACrD,MAAM,UAAsC,CAAC;CAC7C,MAAM,QAAQ,KAAK,SAAS;CAC5B,MAAM,UAAU,KAAK,WAAW;CAChC,MAAM,UAAU,OAAO,SAA6C;EAClE,IAAI;EACJ,KAAK,IAAI,UAAU,GAAG,WAAW,OAAO,WAAW;GACjD,IAAI,WAAW;GACf,MAAM,YAAY,QAAQ,QAAQ,EAAE,KAAK,IAAI;GAC7C,IAAI;GACJ,MAAM,WAAW,IAAI,SAAgB,GAAG,WAAW;IACjD,QAAQ,iBAAiB;KACvB,WAAW;KACX,uBAAO,IAAI,MAAM,qCAAqC,QAAQ,GAAG,CAAC;IACpE,GAAG,OAAO;GACZ,CAAC;GACD,IAAI;IACF,MAAM,QAAQ,KAAK,CAAC,WAAW,QAAQ,CAAC;IACxC;GACF,SAAS,OAAO;IAGd,IAAI,UAAU;KACZ,OAAO;KACP;IACF;IACA,OAAO;GACT,UAAU;IACR,IAAI,UAAU,KAAA,GAAW,aAAa,KAAK;GAC7C;EACF;EACA,MAAM;CACR;CACA,MAAM,MAAM,OAAe,KAAc,SAA8B;EACrE,QAAQ,WAAW,QAAQ,IAAI,CAAC;CAClC;CACA,MAAM,YAAY,OAAe,UAAsB,MAAM;CAC7D,MAAM,SAAS;CACf,MAAM,KAAK,KAAA;CACX,SAAS,kBAAkB,aAAa;EACtC,GAAG,+DAA+D,IAAI,YAAY;GAChF,MAAM,KAAK,MAAM,UAAU;GAC3B,MAAM,GAAG,MAAM,EAAE,OAAO,CACtB;IAAE,IAAI;IAAK,QAAQ,EAAE;KAAC;KAAG;KAAG;IAAC,CAAC;IAAG,UAAU,EAAE,MAAM,SAAS;GAAE,GAC9D;IAAE,IAAI;IAAK,QAAQ,EAAE;KAAC;KAAG;KAAG;IAAC,CAAC;IAAG,UAAU,EAAE,MAAM,SAAS;GAAE,CAChE,CAAC;GACD,MAAM,MAAM,MAAM,GAAG,MAAM,EACxB,WAAW,EAAE;IAAC;IAAG;IAAG;GAAC,CAAC,CAAC,EACvB,OAAO,MAAM,OAAO,EACpB,MAAM,CAAC;GACV,OAAO,IAAI,MAAM,EAAE,KAAK,CAAC;GACzB,OAAO,IAAI,GAAG,EAAE,EAAE,YAAY;GAC9B,OAAO,OAAO,IAAI,GAAG,KAAK,EAAE,KAAK,QAAQ;GACzC,OAAO,IAAI,GAAG,SAAU,KAAK,IAAI,GAAG,SAAU,CAAC,EAAE,KAAK,IAAI;EAC5D,CAAC;EACD,GAAG,iEAAiE,IAAI,YAAY;GAClF,MAAM,KAAK,MAAM,UAAU;GAC3B,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC;IAAE,IAAI;IAAK,UAAU;IAAO,UAAU,CAAC;GAAE,CAAC,CAAC;GACpE,MAAM,MAAM,MAAM,GAAG,MAAM,EAAE,SAAS,KAAK,EAAE,OAAO,IAAI,EAAE,MAAM,CAAC;GACjE,OAAO,IAAI,MAAM,EAAE,KAAK,CAAC;GACzB,OAAO,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG;EAC5B,CAAC;EACD,GAAG,+BAA+B,IAAI,YAAY;GAChD,MAAM,KAAK,MAAM,UAAU;GAC3B,MAAM,QACH,YAAY;IACX,MAAM,GAAG,MAAM,EAAE,WAAW,EAAE;KAAC;KAAG;KAAG;IAAC,CAAC,CAAC;GAC1C,GAAG,CACL,EAAE,QAAQ,QAAQ;EACpB,CAAC;EACD,GAAG,oDAAoD,IAAI,YAAY;GACrE,MAAM,KAAK,MAAM,UAAU;GAC3B,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC;IAAE,IAAI;IAAK,QAAQ,EAAE;KAAC;KAAG;KAAG;IAAC,CAAC;IAAG,UAAU,EAAE,MAAM,IAAI;GAAE,CAAC,CAAC;GACpF,MAAM,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,QAAQ,GAAG,EAAE,OAAO,MAAM,UAAU,EAAE,MAAM,EAAE;GACjF,OAAO,IAAI,MAAM,EAAE,KAAK,CAAC;GACzB,OAAO,IAAI,GAAG,KAAK,EAAE,cAAc;EACrC,CAAC;EACD,GAAG,yDAAyD,IAAI,YAAY;GAC1E,MAAM,KAAK,MAAM,UAAU;GAI3B,MAAM,GAAG,MAAM,EAAE,OAAO;IACtB;KAAE,IAAI;KAAK,QAAQ,EAAE;MAAC;MAAG;MAAG;KAAC,CAAC;KAAG,UAAU;MAAE,MAAM;MAAO,MAAM;MAAM,QAAQ;KAAM;IAAE;IACtF;KAAE,IAAI;KAAK,QAAQ,EAAE;MAAC;MAAG;MAAG;KAAC,CAAC;KAAG,UAAU;MAAE,MAAM;MAAO,MAAM;MAAM,QAAQ;KAAM;IAAE;IACtF;KAAE,IAAI;KAAK,QAAQ,EAAE;MAAC;MAAG;MAAG;KAAC,CAAC;KAAG,UAAU;MAAE,MAAM;MAAO,MAAM;MAAM,QAAQ;KAAK;IAAE;IACrF;KAAE,IAAI;KAAK,QAAQ,EAAE;MAAC;MAAG;MAAG;KAAC,CAAC;KAAG,UAAU;MAAE,MAAM;MAAS,MAAM;MAAM,QAAQ;KAAK;IAAE;GACzF,CAAC;GAOD,QAAO,MALW,GAAG,MAAM,EACxB,MAAM,QAAQ,KAAK,EACnB,UAAU,OAAO,GAAG,MAAM,QAAQ,MAAM,IAAI,EAAE,QAAQ,UAAU,IAAI,CAAC,EACrE,OAAO,IAAI,EACX,MAAM,EAAE,GACA,KAAK,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,CAAC;EACxD,CAAC;EACD,GAAG,+CAA+C,IAAI,YAAY;GAChE,MAAM,KAAK,MAAM,UAAU;GAC3B,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC;IAAE,IAAI;IAAK,QAAQ,EAAE;KAAC;KAAG;KAAG;IAAC,CAAC;GAAE,CAAC,CAAC;GAK3D,QAAO,MAJa,GAAG,MAAM,EAC1B,WAAW,EAAE;IAAC;IAAG;IAAG;GAAC,CAAC,CAAC,EACvB,OAAO,IAAI,EACX,MAAM,CAAC,GACG,GAAG,MAAM,EAAE,cAAc;GACtC,MAAM,UAAU,MAAM,GAAG,MAAM,EAC5B,WAAW,EAAE;IAAC;IAAG;IAAG;GAAC,CAAC,CAAC,EACvB,OAAO,MAAM,QAAQ,EACrB,MAAM,CAAC;GACV,OAAO,MAAM,QAAQ,QAAQ,GAAG,MAAM,CAAC,EAAE,KAAK,IAAI;EACpD,CAAC;EACD,GAAG,iBAAiB,IAAI,YAAY;GAClC,MAAM,KAAK,MAAM,UAAU;GAC3B,MAAM,GAAG,MAAM,EAAE,OAAO,CACtB;IAAE,IAAI;IAAK,QAAQ,EAAE;KAAC;KAAG;KAAG;IAAC,CAAC;GAAE,GAChC;IAAE,IAAI;IAAK,QAAQ,EAAE;KAAC;KAAG;KAAG;IAAC,CAAC;GAAE,CAClC,CAAC;GACD,MAAM,GAAG,MAAM,EAAE,QAAQ,MAAM,CAAC,GAAG,CAAC,EAAE,OAAO;GAE7C,QAAO,MADW,GAAG,MAAM,EAAE,OAAO,IAAI,EAAE,MAAM,EAAE,GACvC,MAAM,EAAE,KAAK,CAAC;EAC3B,CAAC;EACD,GAAG,0EAA0E,IAAI,YAAY;GAC3F,MAAM,KAAK,MAAM,UAAU;GAC3B,IAAI,CAAC,GAAG,aAAa,cACnB,MAAM,OAAO,GAAG,YAAY,YAAY,CAAC,CAAC,CAAC,EAAE,QAAQ,QAAQ;EAEjE,CAAC;CACH,CAAC;CACD,KAAK,MAAM,MAAM,SACf,MAAM,GAAG;AAEb"}
@@ -1,13 +1,4 @@
1
- import { describe, expect, it } from "vitest";
2
1
  //#region src/batteries/vector/conformance/index.ts
3
- /**
4
- * Shared conformance suite for vector-store adapters. Drive any adapter through
5
- * {@link runVectorStoreConformance} to verify it honours the same contract all shipped adapters do.
6
- * Public, deep-import-only (`@nhtio/adk/batteries/vector/conformance`) — it imports `vitest`, an
7
- * optional peer you install to run the suite; it is never pulled in by the battery barrel.
8
- *
9
- * @module @nhtio/adk/batteries/vector/conformance
10
- */
11
2
  /** A deterministic stub encoder producing a 3-dim vector from simple text features. */
12
3
  var stubEncoder = async (texts, _kind) => texts.map((tx) => [
13
4
  tx.length,
@@ -43,12 +34,91 @@ var padVector = (v, dim) => {
43
34
  * @param dim - Vector dimensionality the harness pads to (default 3).
44
35
  * @param opts - Per-`it` retry/timeout overrides.
45
36
  */
46
- var runVectorStoreConformance = (label, makeStore, dim = 3, opts = {}) => {
37
+ var assert = (condition, message) => {
38
+ if (!condition) throw new Error(message);
39
+ };
40
+ var equal = (actual, expected) => {
41
+ if (actual === expected) return true;
42
+ if (actual === null || expected === null || typeof actual !== "object" || typeof expected !== "object") return false;
43
+ if (Array.isArray(actual) !== Array.isArray(expected)) return false;
44
+ const actualRecord = actual;
45
+ const expectedRecord = expected;
46
+ const keysA = Object.keys(actualRecord);
47
+ const keysB = Object.keys(expectedRecord);
48
+ if (keysA.length !== keysB.length) return false;
49
+ return keysA.every((key) => Object.hasOwn(expectedRecord, key) && equal(actualRecord[key], expectedRecord[key]));
50
+ };
51
+ var match = (actual, expected) => {
52
+ if (expected === null || typeof expected !== "object") return equal(actual, expected);
53
+ if (actual === null || typeof actual !== "object") return false;
54
+ return Object.entries(expected).every(([key, value]) => match(actual[key], value));
55
+ };
56
+ var expectValue = (actual) => ({
57
+ toBe: (expected) => assert(equal(actual, expected), `expected ${String(actual)} to be ${String(expected)}`),
58
+ toEqual: (expected) => assert(equal(actual, expected), "values were not equal"),
59
+ toMatchObject: (expected) => assert(match(actual, expected), "value did not match expected object"),
60
+ toBeDefined: () => assert(actual !== void 0, "value was undefined"),
61
+ toBeUndefined: () => assert(actual === void 0, "value was defined"),
62
+ toHaveLength: (length) => assert(actual.length === length, "unexpected length"),
63
+ rejects: { toThrow: async () => {
64
+ try {
65
+ await actual;
66
+ } catch {
67
+ return;
68
+ }
69
+ throw new Error("expected promise to reject");
70
+ } }
71
+ });
72
+ /**
73
+ * Run the framework-free vector-store conformance suite against a consumer implementation.
74
+ *
75
+ * Each check creates a fresh store through `makeStore`; the returned promise rejects when any
76
+ * contract assertion fails. Consumers can await this function from any test runner without
77
+ * importing a test framework from the conformance module.
78
+ *
79
+ * @param label - Human-readable name used to identify the implementation under test.
80
+ * @param makeStore - Factory returning a fresh, connected store with the `docs` collection.
81
+ * @param dim - Vector dimensionality used by the suite (defaults to 3).
82
+ * @param opts - Retry count and per-attempt timeout in milliseconds for eventually consistent stores.
83
+ */
84
+ var runVectorStoreConformance = async (label, makeStore, dim = 3, opts = {}) => {
47
85
  const p = (v) => padVector(v, dim);
48
- const io = {
49
- retry: opts.retry ?? 0,
50
- timeout: opts.timeout ?? 5e3
86
+ const pending = [];
87
+ const retry = opts.retry ?? 0;
88
+ const timeout = opts.timeout ?? 5e3;
89
+ const runCase = async (test) => {
90
+ let last;
91
+ for (let attempt = 0; attempt <= retry; attempt++) {
92
+ let timedOut = false;
93
+ const operation = Promise.resolve().then(test);
94
+ let timer;
95
+ const deadline = new Promise((_, reject) => {
96
+ timer = setTimeout(() => {
97
+ timedOut = true;
98
+ reject(/* @__PURE__ */ new Error(`conformance check timed out after ${timeout}ms`));
99
+ }, timeout);
100
+ });
101
+ try {
102
+ await Promise.race([operation, deadline]);
103
+ return;
104
+ } catch (error) {
105
+ if (timedOut) {
106
+ last = error;
107
+ break;
108
+ }
109
+ last = error;
110
+ } finally {
111
+ if (timer !== void 0) clearTimeout(timer);
112
+ }
113
+ }
114
+ throw last;
115
+ };
116
+ const it = (_name, _io, test) => {
117
+ pending.push(() => runCase(test));
51
118
  };
119
+ const describe = (_name, suite) => suite();
120
+ const expect = expectValue;
121
+ const io = void 0;
52
122
  describe("conformance: " + label, () => {
53
123
  it("upserts vectors and searches by nearVector with [0,1] score", io, async () => {
54
124
  const vs = await makeStore();
@@ -220,6 +290,7 @@ var runVectorStoreConformance = (label, makeStore, dim = 3, opts = {}) => {
220
290
  if (!vs.capabilities.transactions) await expect(vs.transaction(async () => {})).rejects.toThrow();
221
291
  });
222
292
  });
293
+ for (const fn of pending) await fn();
223
294
  };
224
295
  //#endregion
225
296
  export { paddedStubEncoder, runVectorStoreConformance, stubEncoder };
@@ -1 +1 @@
1
- {"version":3,"file":"conformance.mjs","names":[],"sources":["../../../src/batteries/vector/conformance/index.ts"],"sourcesContent":["/**\n * Shared conformance suite for vector-store adapters. Drive any adapter through\n * {@link runVectorStoreConformance} to verify it honours the same contract all shipped adapters do.\n * Public, deep-import-only (`@nhtio/adk/batteries/vector/conformance`) — it imports `vitest`, an\n * optional peer you install to run the suite; it is never pulled in by the battery barrel.\n *\n * @module @nhtio/adk/batteries/vector/conformance\n */\n\nimport { describe, expect, it } from 'vitest'\nimport type { CallableVectorStore } from '../contract'\n\n/** A deterministic stub encoder producing a 3-dim vector from simple text features. */\nexport const stubEncoder = async (\n texts: string[],\n _kind: 'query' | 'document'\n): Promise<number[][]> =>\n texts.map((tx) => [tx.length, tx.includes('cat') ? 1 : 0, tx.includes('dog') ? 1 : 0])\n\n/**\n * A dimension-padding encoder factory: wraps {@link stubEncoder} and zero-extends to `dim`. Used by\n * backends that enforce a minimum dimension (e.g. Cloudflare Vectorize requires 32–1536).\n */\nexport const paddedStubEncoder =\n (dim: number) =>\n async (texts: string[], kind: 'query' | 'document'): Promise<number[][]> => {\n const base = await stubEncoder(texts, kind)\n return base.map((v) => padVector(v, dim))\n }\n\n// Zero-extend (or truncate) a vector to exactly `dim` entries. dim===3 (the default) returns the\n// vector unchanged, so existing callers are byte-for-byte identical.\nconst padVector = (v: number[], dim: number): number[] => {\n if (v.length === dim) return v\n if (v.length > dim) return v.slice(0, dim)\n return [...v, ...new Array(dim - v.length).fill(0)]\n}\n\n/**\n * Drive a vector-store adapter through the shared contract suite.\n *\n * @remarks\n * `makeStore` must return an already-connected store whose `'docs'` collection is created at the\n * matching dimension; it is re-invoked per test so retries are self-contained. `dim` defaults to 3\n * — pass a larger value for backends with a dimension floor (the harness pads every test vector to\n * `dim`). `opts.retry` / `opts.timeout` are forwarded to every `it()` (defaults: retry 0, 5s) and\n * exist for aggressively eventually-consistent managed backends whose read-after-write can flap for\n * seconds — a retried attempt re-runs `makeStore()` against an index that has had more time to\n * settle, without weakening any assertion.\n *\n * @param label - Human-readable label for the suite (the adapter name).\n * @param makeStore - Factory returning a fresh, connected store with the `'docs'` collection.\n * @param dim - Vector dimensionality the harness pads to (default 3).\n * @param opts - Per-`it` retry/timeout overrides.\n */\nexport const runVectorStoreConformance = (\n label: string,\n makeStore: () => Promise<CallableVectorStore>,\n dim = 3,\n opts: { retry?: number; timeout?: number } = {}\n): void => {\n const p = (v: number[]): number[] => padVector(v, dim)\n const io = { retry: opts.retry ?? 0, timeout: opts.timeout ?? 5000 }\n describe('conformance: ' + label, () => {\n it('upserts vectors and searches by nearVector with [0,1] score', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([\n { id: '1', vector: p([3, 1, 0]), metadata: { kind: 'animal' } },\n { id: '2', vector: p([3, 0, 1]), metadata: { kind: 'animal' } },\n ])\n const res = await vs('docs')\n .nearVector(p([3, 1, 0]))\n .select('id', 'score')\n .limit(2)\n expect(res.length).toBe(2)\n expect(res[0].id).toBeDefined()\n expect(typeof res[0].score).toBe('number')\n expect(res[0].score! >= 0 && res[0].score! <= 1).toBe(true)\n })\n it('encodes text on upsert+nearText when an encoder is configured', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([{ id: 'c', document: 'cat', metadata: {} }])\n const res = await vs('docs').nearText('cat').select('id').limit(1)\n expect(res.length).toBe(1)\n expect(res[0].id).toBe('c')\n })\n it('requires .select() on reads', io, async () => {\n const vs = await makeStore()\n await expect(\n (async () => {\n await vs('docs').nearVector(p([1, 1, 1]))\n })()\n ).rejects.toThrow()\n })\n it('filter-scan (no near) returns rows without score', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([{ id: '1', vector: p([1, 0, 0]), metadata: { kind: 'x' } }])\n const res = await vs('docs').where('kind', 'x').select('id', 'metadata').limit(10)\n expect(res.length).toBe(1)\n expect(res[0].score).toBeUndefined()\n })\n it('nested filter A AND (B OR C) selects the right subset', io, async () => {\n const vs = await makeStore()\n // Every record carries all three fields so the test probes nested AND/OR routing, not\n // backend-specific missing-field semantics (e.g. Chroma's $or excludes records missing a\n // referenced key, where the JS evaluator treats that clause as merely false).\n await vs('docs').upsert([\n { id: 'a', vector: p([1, 0, 0]), metadata: { kind: 'doc', year: 2024, pinned: false } }, // kept (year arm)\n { id: 'b', vector: p([0, 1, 0]), metadata: { kind: 'doc', year: 2010, pinned: false } }, // dropped (neither arm)\n { id: 'c', vector: p([0, 0, 1]), metadata: { kind: 'doc', year: 2010, pinned: true } }, // kept (pinned arm)\n { id: 'd', vector: p([1, 1, 0]), metadata: { kind: 'other', year: 2024, pinned: true } }, // dropped (kind mismatch)\n ])\n // kind = 'doc' AND (year >= 2024 OR pinned = true)\n const res = await vs('docs')\n .where('kind', 'doc')\n .andWhere((qb) => qb.where('year', '>=', 2024).orWhere('pinned', true))\n .select('id')\n .limit(10)\n expect(res.map((r) => r.id).sort()).toEqual(['a', 'c'])\n })\n it('projection: vector excluded unless selected', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([{ id: '1', vector: p([1, 0, 0]) }])\n const noVec = await vs('docs')\n .nearVector(p([1, 0, 0]))\n .select('id')\n .limit(1)\n expect(noVec[0].vector).toBeUndefined()\n const withVec = await vs('docs')\n .nearVector(p([1, 0, 0]))\n .select('id', 'vector')\n .limit(1)\n expect(Array.isArray(withVec[0].vector)).toBe(true)\n })\n it('deletes by id', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([\n { id: '1', vector: p([1, 0, 0]) },\n { id: '2', vector: p([0, 1, 0]) },\n ])\n await vs('docs').whereIn('id', ['1']).delete()\n const all = await vs('docs').select('id').limit(10)\n expect(all.length).toBe(1)\n })\n it('throws transaction-unsupported when capabilities.transactions is false', io, async () => {\n const vs = await makeStore()\n if (!vs.capabilities.transactions) {\n await expect(vs.transaction(async () => {})).rejects.toThrow()\n }\n })\n })\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"conformance.mjs","names":[],"sources":["../../../src/batteries/vector/conformance/index.ts"],"sourcesContent":["/**\n * Shared conformance suite for vector-store adapters. Drive any adapter through\n * {@link runVectorStoreConformance} to verify it honours the same contract all shipped adapters do.\n * Public, deep-import-only (`@nhtio/adk/batteries/vector/conformance`). The suite has no test-runner\n * dependency: callers invoke it and await the returned promise from any test framework.\n *\n * @module @nhtio/adk/batteries/vector/conformance\n */\n\nimport type { CallableVectorStore } from '../contract'\n\n/** A deterministic stub encoder producing a 3-dim vector from simple text features. */\nexport const stubEncoder = async (\n texts: string[],\n _kind: 'query' | 'document'\n): Promise<number[][]> =>\n texts.map((tx) => [tx.length, tx.includes('cat') ? 1 : 0, tx.includes('dog') ? 1 : 0])\n\n/**\n * A dimension-padding encoder factory: wraps {@link stubEncoder} and zero-extends to `dim`. Used by\n * backends that enforce a minimum dimension (e.g. Cloudflare Vectorize requires 32–1536).\n */\nexport const paddedStubEncoder =\n (dim: number) =>\n async (texts: string[], kind: 'query' | 'document'): Promise<number[][]> => {\n const base = await stubEncoder(texts, kind)\n return base.map((v) => padVector(v, dim))\n }\n\n// Zero-extend (or truncate) a vector to exactly `dim` entries. dim===3 (the default) returns the\n// vector unchanged, so existing callers are byte-for-byte identical.\nconst padVector = (v: number[], dim: number): number[] => {\n if (v.length === dim) return v\n if (v.length > dim) return v.slice(0, dim)\n return [...v, ...new Array(dim - v.length).fill(0)]\n}\n\n/**\n * Drive a vector-store adapter through the shared contract suite.\n *\n * @remarks\n * `makeStore` must return an already-connected store whose `'docs'` collection is created at the\n * matching dimension; it is re-invoked per test so retries are self-contained. `dim` defaults to 3\n * — pass a larger value for backends with a dimension floor (the harness pads every test vector to\n * `dim`). `opts.retry` / `opts.timeout` are forwarded to every `it()` (defaults: retry 0, 5s) and\n * exist for aggressively eventually-consistent managed backends whose read-after-write can flap for\n * seconds — a retried attempt re-runs `makeStore()` against an index that has had more time to\n * settle, without weakening any assertion.\n *\n * @param label - Human-readable label for the suite (the adapter name).\n * @param makeStore - Factory returning a fresh, connected store with the `'docs'` collection.\n * @param dim - Vector dimensionality the harness pads to (default 3).\n * @param opts - Per-`it` retry/timeout overrides.\n */\nconst assert: (condition: boolean, message: string) => asserts condition = (condition, message) => {\n if (!condition) throw new Error(message)\n}\nconst equal = (actual: unknown, expected: unknown): boolean => {\n if (actual === expected) return true\n if (\n actual === null ||\n expected === null ||\n typeof actual !== 'object' ||\n typeof expected !== 'object'\n )\n return false\n if (Array.isArray(actual) !== Array.isArray(expected)) return false\n const actualRecord = actual as Record<string, unknown>\n const expectedRecord = expected as Record<string, unknown>\n const keysA = Object.keys(actualRecord)\n const keysB = Object.keys(expectedRecord)\n if (keysA.length !== keysB.length) return false\n return keysA.every(\n (key) => Object.hasOwn(expectedRecord, key) && equal(actualRecord[key], expectedRecord[key])\n )\n}\nconst match = (actual: unknown, expected: unknown): boolean => {\n if (expected === null || typeof expected !== 'object') return equal(actual, expected)\n if (actual === null || typeof actual !== 'object') return false\n return Object.entries(expected).every(([key, value]) =>\n match((actual as Record<string, unknown>)[key], value)\n )\n}\nconst expectValue = (actual: unknown) => ({\n toBe: (expected: unknown) =>\n assert(equal(actual, expected), `expected ${String(actual)} to be ${String(expected)}`),\n toEqual: (expected: unknown) => assert(equal(actual, expected), 'values were not equal'),\n toMatchObject: (expected: unknown) =>\n assert(match(actual, expected), 'value did not match expected object'),\n toBeDefined: () => assert(actual !== undefined, 'value was undefined'),\n toBeUndefined: () => assert(actual === undefined, 'value was defined'),\n toHaveLength: (length: number) =>\n assert((actual as { length: number }).length === length, 'unexpected length'),\n rejects: {\n toThrow: async () => {\n try {\n await (actual as Promise<unknown>)\n } catch {\n return\n }\n throw new Error('expected promise to reject')\n },\n },\n})\n\n/**\n * Run the framework-free vector-store conformance suite against a consumer implementation.\n *\n * Each check creates a fresh store through `makeStore`; the returned promise rejects when any\n * contract assertion fails. Consumers can await this function from any test runner without\n * importing a test framework from the conformance module.\n *\n * @param label - Human-readable name used to identify the implementation under test.\n * @param makeStore - Factory returning a fresh, connected store with the `docs` collection.\n * @param dim - Vector dimensionality used by the suite (defaults to 3).\n * @param opts - Retry count and per-attempt timeout in milliseconds for eventually consistent stores.\n */\nexport const runVectorStoreConformance = async (\n label: string,\n makeStore: () => Promise<CallableVectorStore>,\n dim = 3,\n opts: { retry?: number; timeout?: number } = {}\n): Promise<void> => {\n const p = (v: number[]): number[] => padVector(v, dim)\n const pending: Array<() => Promise<void>> = []\n const retry = opts.retry ?? 0\n const timeout = opts.timeout ?? 5000\n const runCase = async (test: () => Promise<void>): Promise<void> => {\n let last: unknown\n for (let attempt = 0; attempt <= retry; attempt++) {\n let timedOut = false\n const operation = Promise.resolve().then(test)\n let timer: ReturnType<typeof setTimeout> | undefined\n const deadline = new Promise<never>((_, reject) => {\n timer = setTimeout(() => {\n timedOut = true\n reject(new Error(`conformance check timed out after ${timeout}ms`))\n }, timeout)\n })\n try {\n await Promise.race([operation, deadline])\n return\n } catch (error) {\n // A timeout cannot cancel an arbitrary backend operation. Drain it before retrying so a\n // late write/read from this attempt cannot race the fresh store made by the next attempt.\n if (timedOut) {\n last = error\n break\n }\n last = error\n } finally {\n if (timer !== undefined) clearTimeout(timer)\n }\n }\n throw last\n }\n const it = (_name: string, _io: unknown, test: () => Promise<void>) => {\n pending.push(() => runCase(test))\n }\n const describe = (_name: string, suite: () => void) => suite()\n const expect = expectValue\n const io = undefined\n describe('conformance: ' + label, () => {\n it('upserts vectors and searches by nearVector with [0,1] score', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([\n { id: '1', vector: p([3, 1, 0]), metadata: { kind: 'animal' } },\n { id: '2', vector: p([3, 0, 1]), metadata: { kind: 'animal' } },\n ])\n const res = await vs('docs')\n .nearVector(p([3, 1, 0]))\n .select('id', 'score')\n .limit(2)\n expect(res.length).toBe(2)\n expect(res[0].id).toBeDefined()\n expect(typeof res[0].score).toBe('number')\n expect(res[0].score! >= 0 && res[0].score! <= 1).toBe(true)\n })\n it('encodes text on upsert+nearText when an encoder is configured', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([{ id: 'c', document: 'cat', metadata: {} }])\n const res = await vs('docs').nearText('cat').select('id').limit(1)\n expect(res.length).toBe(1)\n expect(res[0].id).toBe('c')\n })\n it('requires .select() on reads', io, async () => {\n const vs = await makeStore()\n await expect(\n (async () => {\n await vs('docs').nearVector(p([1, 1, 1]))\n })()\n ).rejects.toThrow()\n })\n it('filter-scan (no near) returns rows without score', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([{ id: '1', vector: p([1, 0, 0]), metadata: { kind: 'x' } }])\n const res = await vs('docs').where('kind', 'x').select('id', 'metadata').limit(10)\n expect(res.length).toBe(1)\n expect(res[0].score).toBeUndefined()\n })\n it('nested filter A AND (B OR C) selects the right subset', io, async () => {\n const vs = await makeStore()\n // Every record carries all three fields so the test probes nested AND/OR routing, not\n // backend-specific missing-field semantics (e.g. Chroma's $or excludes records missing a\n // referenced key, where the JS evaluator treats that clause as merely false).\n await vs('docs').upsert([\n { id: 'a', vector: p([1, 0, 0]), metadata: { kind: 'doc', year: 2024, pinned: false } }, // kept (year arm)\n { id: 'b', vector: p([0, 1, 0]), metadata: { kind: 'doc', year: 2010, pinned: false } }, // dropped (neither arm)\n { id: 'c', vector: p([0, 0, 1]), metadata: { kind: 'doc', year: 2010, pinned: true } }, // kept (pinned arm)\n { id: 'd', vector: p([1, 1, 0]), metadata: { kind: 'other', year: 2024, pinned: true } }, // dropped (kind mismatch)\n ])\n // kind = 'doc' AND (year >= 2024 OR pinned = true)\n const res = await vs('docs')\n .where('kind', 'doc')\n .andWhere((qb) => qb.where('year', '>=', 2024).orWhere('pinned', true))\n .select('id')\n .limit(10)\n expect(res.map((r) => r.id).sort()).toEqual(['a', 'c'])\n })\n it('projection: vector excluded unless selected', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([{ id: '1', vector: p([1, 0, 0]) }])\n const noVec = await vs('docs')\n .nearVector(p([1, 0, 0]))\n .select('id')\n .limit(1)\n expect(noVec[0].vector).toBeUndefined()\n const withVec = await vs('docs')\n .nearVector(p([1, 0, 0]))\n .select('id', 'vector')\n .limit(1)\n expect(Array.isArray(withVec[0].vector)).toBe(true)\n })\n it('deletes by id', io, async () => {\n const vs = await makeStore()\n await vs('docs').upsert([\n { id: '1', vector: p([1, 0, 0]) },\n { id: '2', vector: p([0, 1, 0]) },\n ])\n await vs('docs').whereIn('id', ['1']).delete()\n const all = await vs('docs').select('id').limit(10)\n expect(all.length).toBe(1)\n })\n it('throws transaction-unsupported when capabilities.transactions is false', io, async () => {\n const vs = await makeStore()\n if (!vs.capabilities.transactions) {\n await expect(vs.transaction(async () => {})).rejects.toThrow()\n }\n })\n })\n for (const fn of pending) {\n await fn()\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  require("../../chunk-Cek0wNdY.js");
3
- const require_retrievable = require("../../retrievable-C5dXuDhD.js");
3
+ const require_retrievable = require("../../retrievable-BTwjmPnl.js");
4
4
  require("../../index.cjs");
5
5
  //#region src/batteries/vector/retrievable_glue.ts
6
6
  /**
@@ -1,4 +1,4 @@
1
- import { t as Retrievable } from "../../retrievable-gl_TIHnX.mjs";
1
+ import { t as Retrievable } from "../../retrievable-CXTAUuuv.mjs";
2
2
  import "../../index.mjs";
3
3
  //#region src/batteries/vector/retrievable_glue.ts
4
4
  /**
package/batteries.cjs CHANGED
@@ -3,10 +3,10 @@ require("./chunk-Cek0wNdY.js");
3
3
  const require_batteries_context_exceptions = require("./batteries/context/exceptions.cjs");
4
4
  const require_batteries_llm_openai_chat_completions_exceptions = require("./batteries/llm/openai_chat_completions/exceptions.cjs");
5
5
  const require_batteries_llm_openai_chat_completions_validation = require("./batteries/llm/openai_chat_completions/validation.cjs");
6
- const require_helpers = require("./helpers-Tvvwpx1M.js");
6
+ const require_helpers = require("./helpers-CEjjkXso.js");
7
7
  const require_batteries_llm_openai_chat_completions_helpers = require("./batteries/llm/openai_chat_completions/helpers.cjs");
8
8
  const require_batteries_llm_openai_chat_completions_adapter = require("./batteries/llm/openai_chat_completions/adapter.cjs");
9
- const require_chat_common = require("./chat_common-B3O3zz-i.js");
9
+ const require_chat_common = require("./chat_common-Dpan9moo.js");
10
10
  const require_batteries_llm_webllm_chat_completions_exceptions = require("./batteries/llm/webllm_chat_completions/exceptions.cjs");
11
11
  const require_batteries_llm_webllm_chat_completions_validation = require("./batteries/llm/webllm_chat_completions/validation.cjs");
12
12
  const require_batteries_llm_webllm_chat_completions_adapter = require("./batteries/llm/webllm_chat_completions/adapter.cjs");
@@ -41,8 +41,8 @@ const require_batteries_tools_math = require("./batteries/tools/math.cjs");
41
41
  const require_batteries_tools_memory = require("./batteries/tools/memory.cjs");
42
42
  const require_batteries_tools_parsing = require("./batteries/tools/parsing.cjs");
43
43
  const require_batteries_tools_retrievables = require("./batteries/tools/retrievables.cjs");
44
- const require_scrapper = require("./scrapper-DD6-_2u-.js");
45
- const require_searxng = require("./searxng-C7GK0Nrz.js");
44
+ const require_scrapper = require("./scrapper-CJexXXK-.js");
45
+ const require_searxng = require("./searxng-DzlGZG4V.js");
46
46
  const require_batteries_tools_standing_instructions = require("./batteries/tools/standing_instructions.cjs");
47
47
  const require_batteries_tools_statistics = require("./batteries/tools/statistics.cjs");
48
48
  const require_batteries_tools_string_processing = require("./batteries/tools/string_processing.cjs");
@@ -106,7 +106,7 @@ const require_batteries_context_thrift_subtractive_pass = require("./batteries/c
106
106
  const require_batteries_context_thrift_relevance = require("./batteries/context/thrift/relevance.cjs");
107
107
  const require_batteries_context_compact_summarizer = require("./batteries/context/compact/summarizer.cjs");
108
108
  require("./batteries/context.cjs");
109
- const require_isolation = require("./isolation-BQCTQYZ_.js");
109
+ const require_isolation = require("./isolation-7Jrcucgc.js");
110
110
  exports.AnthropicMessagesAdapter = require_batteries_llm_anthropic_messages_adapter.AnthropicMessagesAdapter;
111
111
  exports.BaseVectorStore = require_batteries_vector_contract.BaseVectorStore;
112
112
  exports.COMPACTION_SYSTEM_PROMPT = require_batteries_context_compact_summarizer.COMPACTION_SYSTEM_PROMPT;
package/batteries.mjs CHANGED
@@ -1,10 +1,10 @@
1
1
  import { E_CONTEXT_RESOLVER_MISSING } from "./batteries/context/exceptions.mjs";
2
2
  import { E_INVALID_OPENAI_CHAT_COMPLETIONS_OPTIONS, E_OPENAI_CHAT_COMPLETIONS_CONTEXT_OVERFLOW, E_OPENAI_CHAT_COMPLETIONS_HTTP_ERROR, E_OPENAI_CHAT_COMPLETIONS_INVALID_TOOL_CALL_ARGS, E_OPENAI_CHAT_COMPLETIONS_REQUEST_TIMEOUT, E_OPENAI_CHAT_COMPLETIONS_STREAM_ERROR, E_OPENAI_CHAT_COMPLETIONS_STREAM_STALLED } from "./batteries/llm/openai_chat_completions/exceptions.mjs";
3
3
  import { openAIChatCompletionsOptionsSchema, validateOptions as validateOptions$9 } from "./batteries/llm/openai_chat_completions/validation.mjs";
4
- import { A as renderMemories, F as renderThirdPartyPrivateRetrievables, G as toolsToChatCompletionsTools, H as sanitizeFilenameForDescription, I as renderThirdPartyPublicRetrievables, L as renderThought, M as renderRetrievableSafetyDirective, N as renderRetrievables, O as renderChatCompletionsSystemPrompt, P as renderStandingInstructions, R as renderTrustedContent, S as floorTrustTier, T as neutraliseDeveloperRulesTag, U as sanitizeMimeType, W as stripEnvelopeSpecialTokens, _ as defaultRenderUntrustedContent, c as defaultRenderMemories, d as defaultRenderRetrievables, f as defaultRenderStandingInstructions, g as defaultRenderTrustedContent, h as defaultRenderThought, i as defaultFilterThoughts, k as renderFirstPartyRetrievables, m as defaultRenderThirdPartyPublicRetrievables, o as defaultRenderChatCompletionsSystemPrompt, p as defaultRenderThirdPartyPrivateRetrievables, r as defaultDescriptionToChatCompletionsJsonSchema, s as defaultRenderFirstPartyRetrievables, u as defaultRenderRetrievableSafetyDirective, v as defaultToolsToChatCompletionsTools, x as filterThoughts, y as descriptionToChatCompletionsJsonSchema, z as renderUntrustedContent } from "./helpers-CDmLDBq5.mjs";
4
+ import { A as renderMemories, F as renderThirdPartyPrivateRetrievables, G as toolsToChatCompletionsTools, H as sanitizeFilenameForDescription, I as renderThirdPartyPublicRetrievables, L as renderThought, M as renderRetrievableSafetyDirective, N as renderRetrievables, O as renderChatCompletionsSystemPrompt, P as renderStandingInstructions, R as renderTrustedContent, S as floorTrustTier, T as neutraliseDeveloperRulesTag, U as sanitizeMimeType, W as stripEnvelopeSpecialTokens, _ as defaultRenderUntrustedContent, c as defaultRenderMemories, d as defaultRenderRetrievables, f as defaultRenderStandingInstructions, g as defaultRenderTrustedContent, h as defaultRenderThought, i as defaultFilterThoughts, k as renderFirstPartyRetrievables, m as defaultRenderThirdPartyPublicRetrievables, o as defaultRenderChatCompletionsSystemPrompt, p as defaultRenderThirdPartyPrivateRetrievables, r as defaultDescriptionToChatCompletionsJsonSchema, s as defaultRenderFirstPartyRetrievables, u as defaultRenderRetrievableSafetyDirective, v as defaultToolsToChatCompletionsTools, x as filterThoughts, y as descriptionToChatCompletionsJsonSchema, z as renderUntrustedContent } from "./helpers-BH7HTtkD.mjs";
5
5
  import { buildChatCompletionsHistory, createChatCompletionsToolCallDeltaAccumulator, defaultBuildChatCompletionsHistory, defaultCreateChatCompletionsToolCallDeltaAccumulator, defaultRenderChatCompletionsToolCallResult, defaultRenderTimelineMessage, extractReasoningFields, renderChatCompletionsToolCallResult, renderTimelineMessage } from "./batteries/llm/openai_chat_completions/helpers.mjs";
6
6
  import { OpenAIChatCompletionsAdapter } from "./batteries/llm/openai_chat_completions/adapter.mjs";
7
- import { t as deCollideToolCallIds } from "./chat_common-DbbIESdo.mjs";
7
+ import { t as deCollideToolCallIds } from "./chat_common-CmKV5Dz4.mjs";
8
8
  import { E_INVALID_WEBLLM_CHAT_COMPLETIONS_OPTIONS, E_WEBLLM_CHAT_COMPLETIONS_CONTEXT_OVERFLOW, E_WEBLLM_CHAT_COMPLETIONS_INVALID_TOOL_CALL_ARGS, E_WEBLLM_CHAT_COMPLETIONS_STREAM_ERROR } from "./batteries/llm/webllm_chat_completions/exceptions.mjs";
9
9
  import { validateOptions as validateOptions$17, webLLMChatCompletionsOptionsSchema } from "./batteries/llm/webllm_chat_completions/validation.mjs";
10
10
  import { WebLLMChatCompletionsAdapter } from "./batteries/llm/webllm_chat_completions/adapter.mjs";
@@ -39,8 +39,8 @@ import { calculateTool, evaluateKatexTool } from "./batteries/tools/math.mjs";
39
39
  import { deleteMemoryTool, listMemoriesTool, memoryTools, storeMemoryTool, updateMemoryTool } from "./batteries/tools/memory.mjs";
40
40
  import { detectDelimiterTool, parseCsvTool, parseKvTool, parseYamlTool } from "./batteries/tools/parsing.mjs";
41
41
  import { deleteRetrievableTool, listRetrievablesTool, retrievableTools, storeRetrievableTool, updateRetrievableTool } from "./batteries/tools/retrievables.mjs";
42
- import { a as E_INVALID_SCRAPPER_CONFIG, i as createScrapperLinksToolSync, n as createScrapperArticleToolSync, r as createScrapperLinksTool, t as createScrapperArticleTool } from "./scrapper-u_orpxIB.mjs";
43
- import { n as createSearxngSearchToolSync, r as E_INVALID_SEARXNG_CONFIG, t as createSearxngSearchTool } from "./searxng-fVdJUCK2.mjs";
42
+ import { a as E_INVALID_SCRAPPER_CONFIG, i as createScrapperLinksToolSync, n as createScrapperArticleToolSync, r as createScrapperLinksTool, t as createScrapperArticleTool } from "./scrapper-DiQ5FfDL.mjs";
43
+ import { n as createSearxngSearchToolSync, r as E_INVALID_SEARXNG_CONFIG, t as createSearxngSearchTool } from "./searxng-BFTJ6rTE.mjs";
44
44
  import { addStandingInstructionTool, listStandingInstructionsTool, removeStandingInstructionTool, standingInstructionTools } from "./batteries/tools/standing_instructions.mjs";
45
45
  import { statsCorrelateTool, statsDescribeTool, statsHistogramTool, statsTransformTool } from "./batteries/tools/statistics.mjs";
46
46
  import { stringExtractTool, stringTransformTool } from "./batteries/tools/string_processing.mjs";
@@ -104,5 +104,5 @@ import { DEFAULT_ENCODING, DEFAULT_RESERVE_FRACTION, DEFAULT_THIS_TURN_RESULT_KE
104
104
  import { RELEVANCE_FLOOR_CURVE, RELEVANCE_FLOOR_MAX, RELEVANCE_FLOOR_MIN, argText, contentTokens, groupHistoryIntoTurns, relevanceToQuery, scaledRelevanceFloor, selectNaiveTurns, selectRelevantTurns } from "./batteries/context/thrift/relevance.mjs";
105
105
  import { COMPACTION_SYSTEM_PROMPT, DEFAULT_KEEP_VERBATIM, DEFAULT_SUMMARISE_AT_TOKENS, DEFAULT_SUMMARY_MESSAGE_ID, assembleCompactedTurns, summariseTurns } from "./batteries/context/compact/summarizer.mjs";
106
106
  import "./batteries/context.mjs";
107
- import { A as event, C as E_INVALID_ISOLATION_OPTIONS, D as E_ISOLATION_READY_TIMEOUT, E as E_ISOLATION_ENCODER_REQUIRED, M as resolveIsolatedServiceSpec, N as stream, O as E_ISOLATION_UNENCODABLE, S as defineIsolatedServiceValidated, T as E_ISOLATED_TERMINATED, _ as transfer, a as createWorkerTransport, b as nextCorrelationId, c as serveIsolated, d as hasIsolationHook, f as DEFAULT_CRASH_POLICY_MAX_CRASHES, g as registerEncodableClasses, h as isEncoderAvailable, i as isolateFunction, j as method, k as E_ISOLATION_UNSUPPORTED_ENV, l as serveIsolatedOverPort, m as createCrashPolicy, n as E_ISOLATE_FUNCTION_REQUIRES_SOURCE_REHYDRATION, o as spawnIsolated, p as DEFAULT_CRASH_POLICY_WINDOW_MS, r as E_ISOLATE_FUNCTION_UNSERIALIZABLE, s as createIsolatedService, t as E_ISOLATE_FUNCTION_ARG_UNSUPPORTED, u as emitIsolationReport, v as GuestEndpoint, w as E_ISOLATED_CRASHED, x as wireErrorToError, y as HostEndpoint } from "./isolation-7xbkc12r.mjs";
107
+ import { A as event, C as E_INVALID_ISOLATION_OPTIONS, D as E_ISOLATION_READY_TIMEOUT, E as E_ISOLATION_ENCODER_REQUIRED, M as resolveIsolatedServiceSpec, N as stream, O as E_ISOLATION_UNENCODABLE, S as defineIsolatedServiceValidated, T as E_ISOLATED_TERMINATED, _ as transfer, a as createWorkerTransport, b as nextCorrelationId, c as serveIsolated, d as hasIsolationHook, f as DEFAULT_CRASH_POLICY_MAX_CRASHES, g as registerEncodableClasses, h as isEncoderAvailable, i as isolateFunction, j as method, k as E_ISOLATION_UNSUPPORTED_ENV, l as serveIsolatedOverPort, m as createCrashPolicy, n as E_ISOLATE_FUNCTION_REQUIRES_SOURCE_REHYDRATION, o as spawnIsolated, p as DEFAULT_CRASH_POLICY_WINDOW_MS, r as E_ISOLATE_FUNCTION_UNSERIALIZABLE, s as createIsolatedService, t as E_ISOLATE_FUNCTION_ARG_UNSUPPORTED, u as emitIsolationReport, v as GuestEndpoint, w as E_ISOLATED_CRASHED, x as wireErrorToError, y as HostEndpoint } from "./isolation-CO0NiK8R.mjs";
108
108
  export { AnthropicMessagesAdapter, BaseVectorStore, COMPACTION_SYSTEM_PROMPT, ClaudeCodeCliAdapter, CollectionBuilder, DEFAULT_CRASH_POLICY_MAX_CRASHES, DEFAULT_CRASH_POLICY_WINDOW_MS, DEFAULT_ENCODING, DEFAULT_KEEP_VERBATIM, DEFAULT_RESERVE_FRACTION, DEFAULT_SUMMARISE_AT_TOKENS, DEFAULT_SUMMARY_MESSAGE_ID, DEFAULT_THIS_TURN_RESULT_KEEP, EDIT_IMAGE_FIELD_NAME, E_ANTHROPIC_MESSAGES_CONTEXT_OVERFLOW, E_ANTHROPIC_MESSAGES_HTTP_ERROR, E_ANTHROPIC_MESSAGES_INVALID_TOOL_CALL_ARGS, E_ANTHROPIC_MESSAGES_REQUEST_TIMEOUT, E_ANTHROPIC_MESSAGES_STREAM_ERROR, E_ANTHROPIC_MESSAGES_STREAM_STALLED, E_ANTHROPIC_MESSAGES_UNSUPPORTED_MEDIA_MODALITY, E_CLAUDE_CODE_CLI_BINARY_NOT_FOUND, E_CLAUDE_CODE_CLI_CONTEXT_OVERFLOW, E_CLAUDE_CODE_CLI_MCP_BRIDGE_STARTUP_FAILED, E_CLAUDE_CODE_CLI_PROCESS_EXITED_NONZERO, E_CLAUDE_CODE_CLI_STARTUP_TIMEOUT, E_CLAUDE_CODE_CLI_STREAM_ERROR, E_CLAUDE_CODE_CLI_STREAM_STALLED, E_CLAUDE_CODE_CLI_TURN_FAILED, E_CLAUDE_CODE_CLI_UNSUPPORTED_MEDIA_MODALITY, E_CLAUDE_CODE_CLI_WRAPPER_CRASHED, E_CLAUDE_CODE_CLI_WRAPPER_SPAWN_ERROR, E_CONTEXT_RESOLVER_MISSING, E_GEMINI_GENERATION_HTTP_ERROR, E_GEMINI_GENERATION_MALFORMED_RESPONSE, E_GEMINI_GENERATION_REQUEST_TIMEOUT, E_INVALID_ANTHROPIC_MESSAGES_OPTIONS, E_INVALID_CLAUDE_CODE_CLI_OPTIONS, E_INVALID_GEMINI_GENERATION_OPTIONS, E_INVALID_ISOLATION_OPTIONS, E_INVALID_LITERT_LM_OPTIONS, E_INVALID_OLLAMA_EMBEDDINGS_OPTIONS, E_INVALID_OLLAMA_OPTIONS, E_INVALID_OPENAI_CHAT_COMPLETIONS_OPTIONS, E_INVALID_OPENAI_EMBEDDINGS_OPTIONS, E_INVALID_OPENAI_GENERATION_OPTIONS, E_INVALID_OPENAI_RESPONSES_OPTIONS, E_INVALID_SCRAPPER_CONFIG, E_INVALID_SEARXNG_CONFIG, E_INVALID_TESSERACT_JS_OCR_OPTIONS, E_INVALID_TRANSFORMERS_JS_CAPTION_OPTIONS, E_INVALID_TRANSFORMERS_JS_EMBEDDINGS_OPTIONS, E_INVALID_TRANSFORMERS_JS_GENERATION_OPTIONS, E_INVALID_TRANSFORMERS_JS_OPTIONS, E_INVALID_TRANSFORMERS_JS_STT_OPTIONS, E_INVALID_TRANSFORMERS_JS_TTS_OPTIONS, E_INVALID_VECTOR_RECORD, E_INVALID_VECTOR_STORE_CONFIG, E_INVALID_WEBLLM_CHAT_COMPLETIONS_OPTIONS, E_ISOLATED_CRASHED, E_ISOLATED_TERMINATED, E_ISOLATE_FUNCTION_ARG_UNSUPPORTED, E_ISOLATE_FUNCTION_REQUIRES_SOURCE_REHYDRATION, E_ISOLATE_FUNCTION_UNSERIALIZABLE, E_ISOLATION_ENCODER_REQUIRED, E_ISOLATION_READY_TIMEOUT, E_ISOLATION_UNENCODABLE, E_ISOLATION_UNSUPPORTED_ENV, E_LITERT_LM_CONTEXT_OVERFLOW, E_LITERT_LM_INVALID_TOOL_CALL_ARGS, E_LITERT_LM_STREAM_ERROR, E_OLLAMA_CONTEXT_OVERFLOW, E_OLLAMA_EMBEDDINGS_HTTP_ERROR, E_OLLAMA_EMBEDDINGS_MALFORMED_RESPONSE, E_OLLAMA_EMBEDDINGS_REQUEST_TIMEOUT, E_OLLAMA_HTTP_ERROR, E_OLLAMA_INVALID_TOOL_CALL_ARGS, E_OLLAMA_REQUEST_TIMEOUT, E_OLLAMA_STREAM_ERROR, E_OLLAMA_STREAM_STALLED, E_OLLAMA_UNSUPPORTED_MEDIA_MODALITY, E_OPENAI_CHAT_COMPLETIONS_CONTEXT_OVERFLOW, E_OPENAI_CHAT_COMPLETIONS_HTTP_ERROR, E_OPENAI_CHAT_COMPLETIONS_INVALID_TOOL_CALL_ARGS, E_OPENAI_CHAT_COMPLETIONS_REQUEST_TIMEOUT, E_OPENAI_CHAT_COMPLETIONS_STREAM_ERROR, E_OPENAI_CHAT_COMPLETIONS_STREAM_STALLED, E_OPENAI_EMBEDDINGS_HTTP_ERROR, E_OPENAI_EMBEDDINGS_MALFORMED_RESPONSE, E_OPENAI_EMBEDDINGS_REQUEST_TIMEOUT, E_OPENAI_GENERATION_HTTP_ERROR, E_OPENAI_GENERATION_MALFORMED_RESPONSE, E_OPENAI_GENERATION_REQUEST_TIMEOUT, E_OPENAI_RESPONSES_CONTEXT_OVERFLOW, E_OPENAI_RESPONSES_HTTP_ERROR, E_OPENAI_RESPONSES_INVALID_TOOL_CALL_ARGS, E_OPENAI_RESPONSES_REASONING_REPLAY_REJECTED, E_OPENAI_RESPONSES_REQUEST_TIMEOUT, E_OPENAI_RESPONSES_STREAM_ERROR, E_OPENAI_RESPONSES_STREAM_STALLED, E_OPENAI_RESPONSES_UNSUPPORTED_MEDIA_MODALITY, E_TESSERACT_JS_OCR_ENGINE_ERROR, E_TRANSFORMERS_JS_CAPTION_ENGINE_ERROR, E_TRANSFORMERS_JS_CONTEXT_OVERFLOW, E_TRANSFORMERS_JS_EMBEDDINGS_ENGINE_ERROR, E_TRANSFORMERS_JS_GENERATION_ENGINE_ERROR, E_TRANSFORMERS_JS_GENERATION_UNSUPPORTED_OPERATION, E_TRANSFORMERS_JS_INVALID_TOOL_CALL_ARGS, E_TRANSFORMERS_JS_STREAM_ERROR, E_TRANSFORMERS_JS_STT_ENGINE_ERROR, E_TRANSFORMERS_JS_TOOL_PARSE_FAILED, E_TRANSFORMERS_JS_TTS_ENGINE_ERROR, E_VECTOR_STORE_COLLECTION_FAILED, E_VECTOR_STORE_CONNECTION_FAILED, E_VECTOR_STORE_CONSISTENCY_TIMEOUT, E_VECTOR_STORE_DELETE_FAILED, E_VECTOR_STORE_DIMENSION_MISMATCH, E_VECTOR_STORE_DRIVER_UNAVAILABLE, E_VECTOR_STORE_ENCODER_REQUIRED, E_VECTOR_STORE_MIGRATION_FAILED, E_VECTOR_STORE_PROJECTION_REQUIRED, E_VECTOR_STORE_QUERY_CONFLICT, E_VECTOR_STORE_RAW_BINDING_MISMATCH, E_VECTOR_STORE_SEARCH_FAILED, E_VECTOR_STORE_TRANSACTIONS_UNSUPPORTED, E_VECTOR_STORE_UNSUPPORTED_FILTER_OPERATOR, E_VECTOR_STORE_UNSUPPORTED_OPERATION, E_VECTOR_STORE_UPSERT_FAILED, E_WEBLLM_CHAT_COMPLETIONS_CONTEXT_OVERFLOW, E_WEBLLM_CHAT_COMPLETIONS_INVALID_TOOL_CALL_ARGS, E_WEBLLM_CHAT_COMPLETIONS_STREAM_ERROR, FilterBuilder, GeminiGenerationAdapter, GuestEndpoint, HostEndpoint, InMemoryVectorStore, LiteRtLmAdapter, OllamaAdapter, OllamaEmbeddingsAdapter, OpenAIChatCompletionsAdapter, OpenAIEmbeddingsAdapter, OpenAIGenerationAdapter, OpenAIResponsesAdapter, OramaVectorStore, RELEVANCE_FLOOR_CURVE, RELEVANCE_FLOOR_MAX, RELEVANCE_FLOOR_MIN, TesseractJsOcrAdapter, TransformersJsAdapter, TransformersJsCaptionAdapter, TransformersJsEmbeddingsAdapter, TransformersJsGenerationAdapter, TransformersJsSttAdapter, TransformersJsTtsAdapter, VectorMigrator, VectorQueryBuilder, VectorSchemaBuilder, WebLLMChatCompletionsAdapter, addStandingInstructionTool, anthropicMessagesOptionsSchema, applyEmbeddingPrefix, argText, assembleCompactedTurns, baseVectorStoreOptionsSchema, buildChatCompletionsHistory, calculateTool, clamp01, claudeCodeCliOptionsSchema, colorAdjustTool, colorContrastTool, colorSchemeTool, compareRecordsTool, compareValuesTool, contentTokens, convertTimeTool, convertUnitTool, createChatCompletionsToolCallDeltaAccumulator, createCrashPolicy, createIsolatedService, createScrapperArticleTool, createScrapperArticleToolSync, createScrapperLinksTool, createScrapperLinksToolSync, createSearxngSearchTool, createSearxngSearchToolSync, createVectorRetrievableCallbacks, createVectorStore, createWorkerTransport, dateAddTool, dateBusinessDaysTool, dateCalendarInfoTool, dateDiffTool, dateNthWeekdayTool, dateParseTool, datePeriodTool, deCollideToolCallIds, defaultBuildChatCompletionsHistory, defaultCreateChatCompletionsToolCallDeltaAccumulator, defaultDecodeAudio, defaultDescriptionToChatCompletionsJsonSchema, defaultFilterThoughts, defaultRenderChatCompletionsSystemPrompt, defaultRenderChatCompletionsToolCallResult, defaultRenderFirstPartyRetrievables, defaultRenderMemories, defaultRenderRetrievableSafetyDirective, defaultRenderRetrievables, defaultRenderStandingInstructions, defaultRenderThirdPartyPrivateRetrievables, defaultRenderThirdPartyPublicRetrievables, defaultRenderThought, defaultRenderTimelineMessage, defaultRenderTrustedContent, defaultRenderUntrustedContent, defaultToolsToChatCompletionsTools, defineIsolatedServiceValidated as defineIsolatedService, deleteMemoryTool, deleteRetrievableTool, descriptionToChatCompletionsJsonSchema, detectDelimiterTool, dimensionsMatch, durationFormatTool, emitIsolationReport, encodeTextTool, encoderFromEmbeddings, evaluateFilter, evaluateKatexTool, event, extractReasoningFields, filterThoughts, floorTrustTier, formatListTool, formatNumberTool, formatTableTool, geminiGenerationOptionsSchema, geoBboxContainsTool, geoDistanceTool, geoWithinRadiusTool, getCurrentTimeTool, groupHistoryIntoTurns, hasIsolationHook, implementsVectorStoreConstructor, isEncoderAvailable, isFilterCondition, isFilterGroup, isFiniteVector, isPcmInput, isRawExpr, isRawFilter, isolateFunction, jsonFormatTool, jsonTransformTool, listMemoriesTool, listRetrievablesTool, listStandingInstructionsTool, liteRtLmOptionsSchema, mapMetric, memoryTools, method, neutraliseDeveloperRulesTag, nextCorrelationId, normalizeScore, ollamaEmbeddingsOptionsSchema, ollamaOptionsSchema, openAIChatCompletionsOptionsSchema, openAIEmbeddingsOptionsSchema, openAIGenerationOptionsSchema, openAIResponsesOptionsSchema, parseCsvTool, parseKvTool, parseYamlTool, raw, registerEncodableClasses, relevanceToQuery, removeStandingInstructionTool, renderChatCompletionsSystemPrompt, renderChatCompletionsToolCallResult, renderFirstPartyRetrievables, renderMemories, renderRetrievableSafetyDirective, renderRetrievables, renderStandingInstructions, renderThirdPartyPrivateRetrievables, renderThirdPartyPublicRetrievables, renderThought, renderTimelineMessage, renderTrustedContent, renderUntrustedContent, resolveBudget, resolveClientCtor, resolveIsolatedServiceSpec, retrievableTools, sanitizeFilenameForDescription, sanitizeMetadata, sanitizeMimeType, scaledRelevanceFloor, scrapperArticleToRetrievable, scrapperLinksToRetrievables, searxngResultsToRetrievables, selectNaiveTurns, selectRelevantTurns, serveIsolated, serveIsolatedOverPort, setOperationsTool, spawnIsolated, standingInstructionTools, statsCorrelateTool, statsDescribeTool, statsHistogramTool, statsTransformTool, storeMemoryTool, storeRetrievableTool, storeRetrievables, stream, stringExtractTool, stringSimilarityTool, stringTransformTool, stripEnvelopeSpecialTokens, stripPriorTurnThoughts, subtractToFit, summariseTurns, tesseractJsOcrOptionsSchema, textAnalyzeTool, textDiffTool, textEscapeTool, textLinesTool, toBytes, toBytes$1 as toGenerationBytes, toolsToChatCompletionsTools, transfer, transformersJsCaptionOptionsSchema, transformersJsEmbeddingsOptionsSchema, transformersJsGenerationOptionsSchema, transformersJsOptionsSchema, transformersJsSttAdapterOptionsSchema, transformersJsTtsOptionsSchema, unicodeNormalizeTool, updateMemoryTool, updateRetrievableTool, validateOptions as validateAnthropicMessagesOptions, validateOptions$1 as validateClaudeCodeCliOptions, validateCreateConfig, validateFormatTool, validateOptions$2 as validateGeminiGenerationOptions, validateOptions$3 as validateLiteRtLmOptions, validateOptions$4 as validateOllamaEmbeddingsOptions, validateOptions$5 as validateOllamaOptions, validateOptions$6 as validateOpenAIEmbeddingsOptions, validateOptions$7 as validateOpenAIGenerationOptions, validateOptions$8 as validateOpenAIResponsesOptions, validateOptions$9 as validateOptions, validateRecords, validateOptions$10 as validateTesseractJsOcrOptions, validateOptions$11 as validateTransformersJsCaptionOptions, validateOptions$12 as validateTransformersJsEmbeddingsOptions, validateOptions$13 as validateTransformersJsGenerationOptions, validateOptions$14 as validateTransformersJsOptions, validateOptions$15 as validateTransformersJsSttOptions, validateOptions$16 as validateTransformersJsTtsOptions, validateOptions$17 as validateWebLLMChatCompletionsOptions, vectorFilterSchema, vectorRecordSchema, vectorStoreConstructorSchema, webLLMChatCompletionsOptionsSchema, wireErrorToError };
@@ -1,5 +1,5 @@
1
1
  import "./tool_parsers-DgZhgxV8.mjs";
2
- import "./helpers-CDmLDBq5.mjs";
2
+ import "./helpers-BH7HTtkD.mjs";
3
3
  import "./gpu_budget-Bi2nUUil.mjs";
4
4
  import "./lifecycle-C4kwYJ-N.mjs";
5
5
  import "./batteries/llm/chat_common/exceptions.mjs";
@@ -37,4 +37,4 @@ var deCollideToolCallIds = (id, ctx) => [...ctx.turnToolCalls].some((tc) => tc.i
37
37
  //#endregion
38
38
  export { deCollideToolCallIds as t };
39
39
 
40
- //# sourceMappingURL=chat_common-DbbIESdo.mjs.map
40
+ //# sourceMappingURL=chat_common-CmKV5Dz4.mjs.map