@psiclawops/hypermem 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (926) hide show
  1. package/ARCHITECTURE.md +2 -2
  2. package/CHANGELOG.md +10 -1
  3. package/docs/ROADMAP.md +12 -3
  4. package/memory-plugin/package.json +3 -3
  5. package/package.json +2 -1
  6. package/plugin/package.json +4 -4
  7. package/dist/adaptive-lifecycle.d.ts +0 -81
  8. package/dist/adaptive-lifecycle.d.ts.map +0 -1
  9. package/dist/adaptive-lifecycle.js +0 -190
  10. package/dist/background-indexer.d.ts +0 -161
  11. package/dist/background-indexer.d.ts.map +0 -1
  12. package/dist/background-indexer.js +0 -1263
  13. package/dist/budget-policy.d.ts +0 -22
  14. package/dist/budget-policy.d.ts.map +0 -1
  15. package/dist/budget-policy.js +0 -32
  16. package/dist/cache.d.ts +0 -148
  17. package/dist/cache.d.ts.map +0 -1
  18. package/dist/cache.js +0 -571
  19. package/dist/compaction-fence.d.ts +0 -97
  20. package/dist/compaction-fence.d.ts.map +0 -1
  21. package/dist/compaction-fence.js +0 -174
  22. package/dist/composition-snapshot-integrity.d.ts +0 -36
  23. package/dist/composition-snapshot-integrity.d.ts.map +0 -1
  24. package/dist/composition-snapshot-integrity.js +0 -131
  25. package/dist/composition-snapshot-runtime.d.ts +0 -59
  26. package/dist/composition-snapshot-runtime.d.ts.map +0 -1
  27. package/dist/composition-snapshot-runtime.js +0 -250
  28. package/dist/composition-snapshot-store.d.ts +0 -44
  29. package/dist/composition-snapshot-store.d.ts.map +0 -1
  30. package/dist/composition-snapshot-store.js +0 -117
  31. package/dist/compositor-utils.d.ts +0 -31
  32. package/dist/compositor-utils.d.ts.map +0 -1
  33. package/dist/compositor-utils.js +0 -47
  34. package/dist/compositor.d.ts +0 -518
  35. package/dist/compositor.d.ts.map +0 -1
  36. package/dist/compositor.js +0 -4280
  37. package/dist/content-hash.d.ts +0 -43
  38. package/dist/content-hash.d.ts.map +0 -1
  39. package/dist/content-hash.js +0 -75
  40. package/dist/content-type-classifier.d.ts +0 -41
  41. package/dist/content-type-classifier.d.ts.map +0 -1
  42. package/dist/content-type-classifier.js +0 -181
  43. package/dist/context-backfill.d.ts +0 -46
  44. package/dist/context-backfill.d.ts.map +0 -1
  45. package/dist/context-backfill.js +0 -113
  46. package/dist/context-store.d.ts +0 -131
  47. package/dist/context-store.d.ts.map +0 -1
  48. package/dist/context-store.js +0 -279
  49. package/dist/contradiction-audit-store.d.ts +0 -54
  50. package/dist/contradiction-audit-store.d.ts.map +0 -1
  51. package/dist/contradiction-audit-store.js +0 -88
  52. package/dist/contradiction-detector.d.ts +0 -78
  53. package/dist/contradiction-detector.d.ts.map +0 -1
  54. package/dist/contradiction-detector.js +0 -362
  55. package/dist/contradiction-resolution-policy.d.ts +0 -21
  56. package/dist/contradiction-resolution-policy.d.ts.map +0 -1
  57. package/dist/contradiction-resolution-policy.js +0 -17
  58. package/dist/cross-agent.d.ts +0 -74
  59. package/dist/cross-agent.d.ts.map +0 -1
  60. package/dist/cross-agent.js +0 -271
  61. package/dist/db.d.ts +0 -131
  62. package/dist/db.d.ts.map +0 -1
  63. package/dist/db.js +0 -410
  64. package/dist/degradation.d.ts +0 -102
  65. package/dist/degradation.d.ts.map +0 -1
  66. package/dist/degradation.js +0 -141
  67. package/dist/desired-state-store.d.ts +0 -100
  68. package/dist/desired-state-store.d.ts.map +0 -1
  69. package/dist/desired-state-store.js +0 -222
  70. package/dist/doc-chunk-store.d.ts +0 -159
  71. package/dist/doc-chunk-store.d.ts.map +0 -1
  72. package/dist/doc-chunk-store.js +0 -441
  73. package/dist/doc-chunker.d.ts +0 -99
  74. package/dist/doc-chunker.d.ts.map +0 -1
  75. package/dist/doc-chunker.js +0 -324
  76. package/dist/dreaming-promoter.d.ts +0 -124
  77. package/dist/dreaming-promoter.d.ts.map +0 -1
  78. package/dist/dreaming-promoter.js +0 -447
  79. package/dist/episode-store.d.ts +0 -49
  80. package/dist/episode-store.d.ts.map +0 -1
  81. package/dist/episode-store.js +0 -135
  82. package/dist/expertise-store.d.ts +0 -129
  83. package/dist/expertise-store.d.ts.map +0 -1
  84. package/dist/expertise-store.js +0 -342
  85. package/dist/fact-store.d.ts +0 -90
  86. package/dist/fact-store.d.ts.map +0 -1
  87. package/dist/fact-store.js +0 -283
  88. package/dist/fleet-store.d.ts +0 -144
  89. package/dist/fleet-store.d.ts.map +0 -1
  90. package/dist/fleet-store.js +0 -276
  91. package/dist/fos-mod.d.ts +0 -178
  92. package/dist/fos-mod.d.ts.map +0 -1
  93. package/dist/fos-mod.js +0 -416
  94. package/dist/hybrid-retrieval.d.ts +0 -102
  95. package/dist/hybrid-retrieval.d.ts.map +0 -1
  96. package/dist/hybrid-retrieval.js +0 -429
  97. package/dist/image-eviction.d.ts +0 -49
  98. package/dist/image-eviction.d.ts.map +0 -1
  99. package/dist/image-eviction.js +0 -251
  100. package/dist/index.d.ts +0 -727
  101. package/dist/index.d.ts.map +0 -1
  102. package/dist/index.js +0 -1495
  103. package/dist/keystone-scorer.d.ts +0 -51
  104. package/dist/keystone-scorer.d.ts.map +0 -1
  105. package/dist/keystone-scorer.js +0 -52
  106. package/dist/knowledge-graph.d.ts +0 -110
  107. package/dist/knowledge-graph.d.ts.map +0 -1
  108. package/dist/knowledge-graph.js +0 -305
  109. package/dist/knowledge-lint.d.ts +0 -31
  110. package/dist/knowledge-lint.d.ts.map +0 -1
  111. package/dist/knowledge-lint.js +0 -155
  112. package/dist/knowledge-store.d.ts +0 -75
  113. package/dist/knowledge-store.d.ts.map +0 -1
  114. package/dist/knowledge-store.js +0 -270
  115. package/dist/library-schema.d.ts +0 -31
  116. package/dist/library-schema.d.ts.map +0 -1
  117. package/dist/library-schema.js +0 -1357
  118. package/dist/message-store.d.ts +0 -181
  119. package/dist/message-store.d.ts.map +0 -1
  120. package/dist/message-store.js +0 -577
  121. package/dist/metrics-dashboard.d.ts +0 -131
  122. package/dist/metrics-dashboard.d.ts.map +0 -1
  123. package/dist/metrics-dashboard.js +0 -298
  124. package/dist/obsidian-exporter.d.ts +0 -57
  125. package/dist/obsidian-exporter.d.ts.map +0 -1
  126. package/dist/obsidian-exporter.js +0 -274
  127. package/dist/obsidian-watcher.d.ts +0 -147
  128. package/dist/obsidian-watcher.d.ts.map +0 -1
  129. package/dist/obsidian-watcher.js +0 -403
  130. package/dist/open-domain.d.ts +0 -46
  131. package/dist/open-domain.d.ts.map +0 -1
  132. package/dist/open-domain.js +0 -125
  133. package/dist/preference-store.d.ts +0 -54
  134. package/dist/preference-store.d.ts.map +0 -1
  135. package/dist/preference-store.js +0 -109
  136. package/dist/preservation-gate.d.ts +0 -82
  137. package/dist/preservation-gate.d.ts.map +0 -1
  138. package/dist/preservation-gate.js +0 -150
  139. package/dist/proactive-pass.d.ts +0 -63
  140. package/dist/proactive-pass.d.ts.map +0 -1
  141. package/dist/proactive-pass.js +0 -293
  142. package/dist/profiles.d.ts +0 -46
  143. package/dist/profiles.d.ts.map +0 -1
  144. package/dist/profiles.js +0 -262
  145. package/dist/provider-translator.d.ts +0 -50
  146. package/dist/provider-translator.d.ts.map +0 -1
  147. package/dist/provider-translator.js +0 -403
  148. package/dist/rate-limiter.d.ts +0 -76
  149. package/dist/rate-limiter.d.ts.map +0 -1
  150. package/dist/rate-limiter.js +0 -179
  151. package/dist/repair-tool-pairs.d.ts +0 -38
  152. package/dist/repair-tool-pairs.d.ts.map +0 -1
  153. package/dist/repair-tool-pairs.js +0 -209
  154. package/dist/replay-recovery.d.ts +0 -29
  155. package/dist/replay-recovery.d.ts.map +0 -1
  156. package/dist/replay-recovery.js +0 -82
  157. package/dist/reranker.d.ts +0 -95
  158. package/dist/reranker.d.ts.map +0 -1
  159. package/dist/reranker.js +0 -308
  160. package/dist/retrieval-policy.d.ts +0 -51
  161. package/dist/retrieval-policy.d.ts.map +0 -1
  162. package/dist/retrieval-policy.js +0 -77
  163. package/dist/schema.d.ts +0 -15
  164. package/dist/schema.d.ts.map +0 -1
  165. package/dist/schema.js +0 -327
  166. package/dist/secret-scanner.d.ts +0 -51
  167. package/dist/secret-scanner.d.ts.map +0 -1
  168. package/dist/secret-scanner.js +0 -248
  169. package/dist/seed.d.ts +0 -108
  170. package/dist/seed.d.ts.map +0 -1
  171. package/dist/seed.js +0 -179
  172. package/dist/session-flusher.d.ts +0 -53
  173. package/dist/session-flusher.d.ts.map +0 -1
  174. package/dist/session-flusher.js +0 -69
  175. package/dist/session-topic-map.d.ts +0 -41
  176. package/dist/session-topic-map.d.ts.map +0 -1
  177. package/dist/session-topic-map.js +0 -77
  178. package/dist/spawn-context.d.ts +0 -54
  179. package/dist/spawn-context.d.ts.map +0 -1
  180. package/dist/spawn-context.js +0 -159
  181. package/dist/system-store.d.ts +0 -73
  182. package/dist/system-store.d.ts.map +0 -1
  183. package/dist/system-store.js +0 -182
  184. package/dist/temporal-store.d.ts +0 -81
  185. package/dist/temporal-store.d.ts.map +0 -1
  186. package/dist/temporal-store.js +0 -149
  187. package/dist/tool-artifact-store.d.ts +0 -98
  188. package/dist/tool-artifact-store.d.ts.map +0 -1
  189. package/dist/tool-artifact-store.js +0 -244
  190. package/dist/topic-detector.d.ts +0 -35
  191. package/dist/topic-detector.d.ts.map +0 -1
  192. package/dist/topic-detector.js +0 -249
  193. package/dist/topic-store.d.ts +0 -51
  194. package/dist/topic-store.d.ts.map +0 -1
  195. package/dist/topic-store.js +0 -175
  196. package/dist/topic-synthesizer.d.ts +0 -71
  197. package/dist/topic-synthesizer.d.ts.map +0 -1
  198. package/dist/topic-synthesizer.js +0 -426
  199. package/dist/trigger-registry.d.ts +0 -63
  200. package/dist/trigger-registry.d.ts.map +0 -1
  201. package/dist/trigger-registry.js +0 -171
  202. package/dist/types.d.ts +0 -1085
  203. package/dist/types.d.ts.map +0 -1
  204. package/dist/types.js +0 -9
  205. package/dist/vector-store.d.ts +0 -180
  206. package/dist/vector-store.d.ts.map +0 -1
  207. package/dist/vector-store.js +0 -1041
  208. package/dist/version.d.ts +0 -34
  209. package/dist/version.d.ts.map +0 -1
  210. package/dist/version.js +0 -44
  211. package/dist/wiki-page-emitter.d.ts +0 -65
  212. package/dist/wiki-page-emitter.d.ts.map +0 -1
  213. package/dist/wiki-page-emitter.js +0 -258
  214. package/dist/work-store.d.ts +0 -112
  215. package/dist/work-store.d.ts.map +0 -1
  216. package/dist/work-store.js +0 -273
  217. package/memory-plugin/dist/index.d.ts +0 -24
  218. package/memory-plugin/dist/index.d.ts.map +0 -1
  219. package/memory-plugin/dist/index.js +0 -350
  220. package/memory-plugin/dist/index.js.map +0 -1
  221. package/node_modules/sqlite-vec/README.md +0 -1
  222. package/node_modules/sqlite-vec/index.cjs +0 -46
  223. package/node_modules/sqlite-vec/index.d.ts +0 -17
  224. package/node_modules/sqlite-vec/index.mjs +0 -47
  225. package/node_modules/sqlite-vec/package.json +0 -1
  226. package/node_modules/sqlite-vec-linux-x64/README.md +0 -1
  227. package/node_modules/sqlite-vec-linux-x64/package.json +0 -1
  228. package/node_modules/sqlite-vec-linux-x64/vec0.so +0 -0
  229. package/node_modules/zod/LICENSE +0 -21
  230. package/node_modules/zod/README.md +0 -208
  231. package/node_modules/zod/index.cjs +0 -33
  232. package/node_modules/zod/index.d.cts +0 -4
  233. package/node_modules/zod/index.d.ts +0 -4
  234. package/node_modules/zod/index.js +0 -4
  235. package/node_modules/zod/locales/index.cjs +0 -17
  236. package/node_modules/zod/locales/index.d.cts +0 -1
  237. package/node_modules/zod/locales/index.d.ts +0 -1
  238. package/node_modules/zod/locales/index.js +0 -1
  239. package/node_modules/zod/locales/package.json +0 -6
  240. package/node_modules/zod/mini/index.cjs +0 -32
  241. package/node_modules/zod/mini/index.d.cts +0 -3
  242. package/node_modules/zod/mini/index.d.ts +0 -3
  243. package/node_modules/zod/mini/index.js +0 -3
  244. package/node_modules/zod/mini/package.json +0 -6
  245. package/node_modules/zod/package.json +0 -135
  246. package/node_modules/zod/src/index.ts +0 -4
  247. package/node_modules/zod/src/locales/index.ts +0 -1
  248. package/node_modules/zod/src/mini/index.ts +0 -3
  249. package/node_modules/zod/src/v3/ZodError.ts +0 -330
  250. package/node_modules/zod/src/v3/benchmarks/datetime.ts +0 -58
  251. package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +0 -80
  252. package/node_modules/zod/src/v3/benchmarks/index.ts +0 -59
  253. package/node_modules/zod/src/v3/benchmarks/ipv4.ts +0 -57
  254. package/node_modules/zod/src/v3/benchmarks/object.ts +0 -69
  255. package/node_modules/zod/src/v3/benchmarks/primitives.ts +0 -162
  256. package/node_modules/zod/src/v3/benchmarks/realworld.ts +0 -63
  257. package/node_modules/zod/src/v3/benchmarks/string.ts +0 -55
  258. package/node_modules/zod/src/v3/benchmarks/union.ts +0 -80
  259. package/node_modules/zod/src/v3/errors.ts +0 -13
  260. package/node_modules/zod/src/v3/external.ts +0 -6
  261. package/node_modules/zod/src/v3/helpers/enumUtil.ts +0 -17
  262. package/node_modules/zod/src/v3/helpers/errorUtil.ts +0 -8
  263. package/node_modules/zod/src/v3/helpers/parseUtil.ts +0 -176
  264. package/node_modules/zod/src/v3/helpers/partialUtil.ts +0 -34
  265. package/node_modules/zod/src/v3/helpers/typeAliases.ts +0 -2
  266. package/node_modules/zod/src/v3/helpers/util.ts +0 -224
  267. package/node_modules/zod/src/v3/index.ts +0 -4
  268. package/node_modules/zod/src/v3/locales/en.ts +0 -124
  269. package/node_modules/zod/src/v3/standard-schema.ts +0 -113
  270. package/node_modules/zod/src/v3/tests/Mocker.ts +0 -54
  271. package/node_modules/zod/src/v3/tests/all-errors.test.ts +0 -157
  272. package/node_modules/zod/src/v3/tests/anyunknown.test.ts +0 -28
  273. package/node_modules/zod/src/v3/tests/array.test.ts +0 -71
  274. package/node_modules/zod/src/v3/tests/async-parsing.test.ts +0 -388
  275. package/node_modules/zod/src/v3/tests/async-refinements.test.ts +0 -46
  276. package/node_modules/zod/src/v3/tests/base.test.ts +0 -29
  277. package/node_modules/zod/src/v3/tests/bigint.test.ts +0 -55
  278. package/node_modules/zod/src/v3/tests/branded.test.ts +0 -53
  279. package/node_modules/zod/src/v3/tests/catch.test.ts +0 -220
  280. package/node_modules/zod/src/v3/tests/coerce.test.ts +0 -133
  281. package/node_modules/zod/src/v3/tests/complex.test.ts +0 -70
  282. package/node_modules/zod/src/v3/tests/custom.test.ts +0 -31
  283. package/node_modules/zod/src/v3/tests/date.test.ts +0 -32
  284. package/node_modules/zod/src/v3/tests/deepmasking.test.ts +0 -186
  285. package/node_modules/zod/src/v3/tests/default.test.ts +0 -112
  286. package/node_modules/zod/src/v3/tests/description.test.ts +0 -33
  287. package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +0 -315
  288. package/node_modules/zod/src/v3/tests/enum.test.ts +0 -80
  289. package/node_modules/zod/src/v3/tests/error.test.ts +0 -551
  290. package/node_modules/zod/src/v3/tests/firstparty.test.ts +0 -87
  291. package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +0 -21
  292. package/node_modules/zod/src/v3/tests/function.test.ts +0 -261
  293. package/node_modules/zod/src/v3/tests/generics.test.ts +0 -48
  294. package/node_modules/zod/src/v3/tests/instanceof.test.ts +0 -37
  295. package/node_modules/zod/src/v3/tests/intersection.test.ts +0 -110
  296. package/node_modules/zod/src/v3/tests/language-server.source.ts +0 -76
  297. package/node_modules/zod/src/v3/tests/language-server.test.ts +0 -207
  298. package/node_modules/zod/src/v3/tests/literal.test.ts +0 -36
  299. package/node_modules/zod/src/v3/tests/map.test.ts +0 -110
  300. package/node_modules/zod/src/v3/tests/masking.test.ts +0 -4
  301. package/node_modules/zod/src/v3/tests/mocker.test.ts +0 -19
  302. package/node_modules/zod/src/v3/tests/nan.test.ts +0 -24
  303. package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +0 -87
  304. package/node_modules/zod/src/v3/tests/nullable.test.ts +0 -42
  305. package/node_modules/zod/src/v3/tests/number.test.ts +0 -176
  306. package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +0 -29
  307. package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +0 -29
  308. package/node_modules/zod/src/v3/tests/object.test.ts +0 -434
  309. package/node_modules/zod/src/v3/tests/optional.test.ts +0 -42
  310. package/node_modules/zod/src/v3/tests/parseUtil.test.ts +0 -23
  311. package/node_modules/zod/src/v3/tests/parser.test.ts +0 -41
  312. package/node_modules/zod/src/v3/tests/partials.test.ts +0 -243
  313. package/node_modules/zod/src/v3/tests/pickomit.test.ts +0 -111
  314. package/node_modules/zod/src/v3/tests/pipeline.test.ts +0 -29
  315. package/node_modules/zod/src/v3/tests/preprocess.test.ts +0 -186
  316. package/node_modules/zod/src/v3/tests/primitive.test.ts +0 -440
  317. package/node_modules/zod/src/v3/tests/promise.test.ts +0 -90
  318. package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -194
  319. package/node_modules/zod/src/v3/tests/record.test.ts +0 -171
  320. package/node_modules/zod/src/v3/tests/recursive.test.ts +0 -197
  321. package/node_modules/zod/src/v3/tests/refine.test.ts +0 -313
  322. package/node_modules/zod/src/v3/tests/safeparse.test.ts +0 -27
  323. package/node_modules/zod/src/v3/tests/set.test.ts +0 -142
  324. package/node_modules/zod/src/v3/tests/standard-schema.test.ts +0 -83
  325. package/node_modules/zod/src/v3/tests/string.test.ts +0 -916
  326. package/node_modules/zod/src/v3/tests/transformer.test.ts +0 -233
  327. package/node_modules/zod/src/v3/tests/tuple.test.ts +0 -90
  328. package/node_modules/zod/src/v3/tests/unions.test.ts +0 -57
  329. package/node_modules/zod/src/v3/tests/validations.test.ts +0 -133
  330. package/node_modules/zod/src/v3/tests/void.test.ts +0 -15
  331. package/node_modules/zod/src/v3/types.ts +0 -5138
  332. package/node_modules/zod/src/v4/classic/checks.ts +0 -32
  333. package/node_modules/zod/src/v4/classic/coerce.ts +0 -27
  334. package/node_modules/zod/src/v4/classic/compat.ts +0 -70
  335. package/node_modules/zod/src/v4/classic/errors.ts +0 -82
  336. package/node_modules/zod/src/v4/classic/external.ts +0 -51
  337. package/node_modules/zod/src/v4/classic/from-json-schema.ts +0 -643
  338. package/node_modules/zod/src/v4/classic/index.ts +0 -5
  339. package/node_modules/zod/src/v4/classic/iso.ts +0 -90
  340. package/node_modules/zod/src/v4/classic/parse.ts +0 -82
  341. package/node_modules/zod/src/v4/classic/schemas.ts +0 -2409
  342. package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +0 -26
  343. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +0 -59
  344. package/node_modules/zod/src/v4/classic/tests/array.test.ts +0 -264
  345. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +0 -210
  346. package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +0 -381
  347. package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +0 -68
  348. package/node_modules/zod/src/v4/classic/tests/base.test.ts +0 -7
  349. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +0 -54
  350. package/node_modules/zod/src/v4/classic/tests/brand.test.ts +0 -106
  351. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +0 -276
  352. package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +0 -20
  353. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +0 -573
  354. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +0 -562
  355. package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +0 -160
  356. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +0 -374
  357. package/node_modules/zod/src/v4/classic/tests/custom.test.ts +0 -40
  358. package/node_modules/zod/src/v4/classic/tests/date.test.ts +0 -62
  359. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +0 -302
  360. package/node_modules/zod/src/v4/classic/tests/default.test.ts +0 -365
  361. package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +0 -27
  362. package/node_modules/zod/src/v4/classic/tests/description.test.ts +0 -32
  363. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +0 -661
  364. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +0 -285
  365. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +0 -595
  366. package/node_modules/zod/src/v4/classic/tests/error.test.ts +0 -711
  367. package/node_modules/zod/src/v4/classic/tests/file.test.ts +0 -96
  368. package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +0 -179
  369. package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +0 -26
  370. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +0 -734
  371. package/node_modules/zod/src/v4/classic/tests/function.test.ts +0 -360
  372. package/node_modules/zod/src/v4/classic/tests/generics.test.ts +0 -72
  373. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +0 -68
  374. package/node_modules/zod/src/v4/classic/tests/index.test.ts +0 -939
  375. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +0 -60
  376. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +0 -198
  377. package/node_modules/zod/src/v4/classic/tests/json.test.ts +0 -109
  378. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +0 -227
  379. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +0 -117
  380. package/node_modules/zod/src/v4/classic/tests/map.test.ts +0 -330
  381. package/node_modules/zod/src/v4/classic/tests/nan.test.ts +0 -21
  382. package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +0 -168
  383. package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +0 -101
  384. package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +0 -22
  385. package/node_modules/zod/src/v4/classic/tests/number.test.ts +0 -270
  386. package/node_modules/zod/src/v4/classic/tests/object.test.ts +0 -640
  387. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +0 -223
  388. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +0 -427
  389. package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +0 -211
  390. package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +0 -101
  391. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +0 -74
  392. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +0 -282
  393. package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +0 -175
  394. package/node_modules/zod/src/v4/classic/tests/promise.test.ts +0 -81
  395. package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +0 -23
  396. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -252
  397. package/node_modules/zod/src/v4/classic/tests/record.test.ts +0 -632
  398. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +0 -582
  399. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +0 -570
  400. package/node_modules/zod/src/v4/classic/tests/registries.test.ts +0 -243
  401. package/node_modules/zod/src/v4/classic/tests/set.test.ts +0 -181
  402. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +0 -134
  403. package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +0 -125
  404. package/node_modules/zod/src/v4/classic/tests/string.test.ts +0 -1175
  405. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +0 -106
  406. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +0 -771
  407. package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +0 -438
  408. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +0 -2990
  409. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +0 -361
  410. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +0 -183
  411. package/node_modules/zod/src/v4/classic/tests/union.test.ts +0 -219
  412. package/node_modules/zod/src/v4/classic/tests/url.test.ts +0 -13
  413. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +0 -283
  414. package/node_modules/zod/src/v4/classic/tests/void.test.ts +0 -12
  415. package/node_modules/zod/src/v4/core/api.ts +0 -1798
  416. package/node_modules/zod/src/v4/core/checks.ts +0 -1293
  417. package/node_modules/zod/src/v4/core/config.ts +0 -15
  418. package/node_modules/zod/src/v4/core/core.ts +0 -138
  419. package/node_modules/zod/src/v4/core/doc.ts +0 -44
  420. package/node_modules/zod/src/v4/core/errors.ts +0 -448
  421. package/node_modules/zod/src/v4/core/index.ts +0 -16
  422. package/node_modules/zod/src/v4/core/json-schema-generator.ts +0 -126
  423. package/node_modules/zod/src/v4/core/json-schema-processors.ts +0 -667
  424. package/node_modules/zod/src/v4/core/json-schema.ts +0 -147
  425. package/node_modules/zod/src/v4/core/parse.ts +0 -195
  426. package/node_modules/zod/src/v4/core/regexes.ts +0 -183
  427. package/node_modules/zod/src/v4/core/registries.ts +0 -105
  428. package/node_modules/zod/src/v4/core/schemas.ts +0 -4538
  429. package/node_modules/zod/src/v4/core/standard-schema.ts +0 -159
  430. package/node_modules/zod/src/v4/core/tests/extend.test.ts +0 -59
  431. package/node_modules/zod/src/v4/core/tests/index.test.ts +0 -46
  432. package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +0 -124
  433. package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +0 -22
  434. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +0 -181
  435. package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +0 -379
  436. package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +0 -46
  437. package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +0 -128
  438. package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +0 -69
  439. package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +0 -83
  440. package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +0 -67
  441. package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +0 -45
  442. package/node_modules/zod/src/v4/core/to-json-schema.ts +0 -613
  443. package/node_modules/zod/src/v4/core/util.ts +0 -966
  444. package/node_modules/zod/src/v4/core/versions.ts +0 -5
  445. package/node_modules/zod/src/v4/core/zsf.ts +0 -323
  446. package/node_modules/zod/src/v4/index.ts +0 -4
  447. package/node_modules/zod/src/v4/locales/ar.ts +0 -115
  448. package/node_modules/zod/src/v4/locales/az.ts +0 -111
  449. package/node_modules/zod/src/v4/locales/be.ts +0 -176
  450. package/node_modules/zod/src/v4/locales/bg.ts +0 -128
  451. package/node_modules/zod/src/v4/locales/ca.ts +0 -116
  452. package/node_modules/zod/src/v4/locales/cs.ts +0 -118
  453. package/node_modules/zod/src/v4/locales/da.ts +0 -123
  454. package/node_modules/zod/src/v4/locales/de.ts +0 -116
  455. package/node_modules/zod/src/v4/locales/en.ts +0 -119
  456. package/node_modules/zod/src/v4/locales/eo.ts +0 -118
  457. package/node_modules/zod/src/v4/locales/es.ts +0 -141
  458. package/node_modules/zod/src/v4/locales/fa.ts +0 -126
  459. package/node_modules/zod/src/v4/locales/fi.ts +0 -121
  460. package/node_modules/zod/src/v4/locales/fr-CA.ts +0 -116
  461. package/node_modules/zod/src/v4/locales/fr.ts +0 -116
  462. package/node_modules/zod/src/v4/locales/he.ts +0 -246
  463. package/node_modules/zod/src/v4/locales/hu.ts +0 -117
  464. package/node_modules/zod/src/v4/locales/hy.ts +0 -164
  465. package/node_modules/zod/src/v4/locales/id.ts +0 -115
  466. package/node_modules/zod/src/v4/locales/index.ts +0 -49
  467. package/node_modules/zod/src/v4/locales/is.ts +0 -119
  468. package/node_modules/zod/src/v4/locales/it.ts +0 -116
  469. package/node_modules/zod/src/v4/locales/ja.ts +0 -114
  470. package/node_modules/zod/src/v4/locales/ka.ts +0 -123
  471. package/node_modules/zod/src/v4/locales/kh.ts +0 -7
  472. package/node_modules/zod/src/v4/locales/km.ts +0 -119
  473. package/node_modules/zod/src/v4/locales/ko.ts +0 -121
  474. package/node_modules/zod/src/v4/locales/lt.ts +0 -239
  475. package/node_modules/zod/src/v4/locales/mk.ts +0 -118
  476. package/node_modules/zod/src/v4/locales/ms.ts +0 -115
  477. package/node_modules/zod/src/v4/locales/nl.ts +0 -121
  478. package/node_modules/zod/src/v4/locales/no.ts +0 -116
  479. package/node_modules/zod/src/v4/locales/ota.ts +0 -117
  480. package/node_modules/zod/src/v4/locales/pl.ts +0 -118
  481. package/node_modules/zod/src/v4/locales/ps.ts +0 -126
  482. package/node_modules/zod/src/v4/locales/pt.ts +0 -116
  483. package/node_modules/zod/src/v4/locales/ru.ts +0 -176
  484. package/node_modules/zod/src/v4/locales/sl.ts +0 -118
  485. package/node_modules/zod/src/v4/locales/sv.ts +0 -119
  486. package/node_modules/zod/src/v4/locales/ta.ts +0 -118
  487. package/node_modules/zod/src/v4/locales/th.ts +0 -119
  488. package/node_modules/zod/src/v4/locales/tr.ts +0 -111
  489. package/node_modules/zod/src/v4/locales/ua.ts +0 -7
  490. package/node_modules/zod/src/v4/locales/uk.ts +0 -117
  491. package/node_modules/zod/src/v4/locales/ur.ts +0 -119
  492. package/node_modules/zod/src/v4/locales/uz.ts +0 -116
  493. package/node_modules/zod/src/v4/locales/vi.ts +0 -117
  494. package/node_modules/zod/src/v4/locales/yo.ts +0 -124
  495. package/node_modules/zod/src/v4/locales/zh-CN.ts +0 -116
  496. package/node_modules/zod/src/v4/locales/zh-TW.ts +0 -115
  497. package/node_modules/zod/src/v4/mini/checks.ts +0 -32
  498. package/node_modules/zod/src/v4/mini/coerce.ts +0 -27
  499. package/node_modules/zod/src/v4/mini/external.ts +0 -40
  500. package/node_modules/zod/src/v4/mini/index.ts +0 -3
  501. package/node_modules/zod/src/v4/mini/iso.ts +0 -66
  502. package/node_modules/zod/src/v4/mini/parse.ts +0 -14
  503. package/node_modules/zod/src/v4/mini/schemas.ts +0 -1916
  504. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +0 -24
  505. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +0 -129
  506. package/node_modules/zod/src/v4/mini/tests/brand.test.ts +0 -94
  507. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +0 -144
  508. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +0 -529
  509. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +0 -36
  510. package/node_modules/zod/src/v4/mini/tests/error.test.ts +0 -22
  511. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +0 -5
  512. package/node_modules/zod/src/v4/mini/tests/index.test.ts +0 -963
  513. package/node_modules/zod/src/v4/mini/tests/number.test.ts +0 -95
  514. package/node_modules/zod/src/v4/mini/tests/object.test.ts +0 -227
  515. package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +0 -43
  516. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +0 -275
  517. package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +0 -50
  518. package/node_modules/zod/src/v4/mini/tests/string.test.ts +0 -347
  519. package/node_modules/zod/src/v4-mini/index.ts +0 -3
  520. package/node_modules/zod/v3/ZodError.cjs +0 -138
  521. package/node_modules/zod/v3/ZodError.d.cts +0 -164
  522. package/node_modules/zod/v3/ZodError.d.ts +0 -164
  523. package/node_modules/zod/v3/ZodError.js +0 -133
  524. package/node_modules/zod/v3/errors.cjs +0 -17
  525. package/node_modules/zod/v3/errors.d.cts +0 -5
  526. package/node_modules/zod/v3/errors.d.ts +0 -5
  527. package/node_modules/zod/v3/errors.js +0 -9
  528. package/node_modules/zod/v3/external.cjs +0 -22
  529. package/node_modules/zod/v3/external.d.cts +0 -6
  530. package/node_modules/zod/v3/external.d.ts +0 -6
  531. package/node_modules/zod/v3/external.js +0 -6
  532. package/node_modules/zod/v3/helpers/enumUtil.cjs +0 -2
  533. package/node_modules/zod/v3/helpers/enumUtil.d.cts +0 -8
  534. package/node_modules/zod/v3/helpers/enumUtil.d.ts +0 -8
  535. package/node_modules/zod/v3/helpers/enumUtil.js +0 -1
  536. package/node_modules/zod/v3/helpers/errorUtil.cjs +0 -9
  537. package/node_modules/zod/v3/helpers/errorUtil.d.cts +0 -9
  538. package/node_modules/zod/v3/helpers/errorUtil.d.ts +0 -9
  539. package/node_modules/zod/v3/helpers/errorUtil.js +0 -6
  540. package/node_modules/zod/v3/helpers/parseUtil.cjs +0 -124
  541. package/node_modules/zod/v3/helpers/parseUtil.d.cts +0 -78
  542. package/node_modules/zod/v3/helpers/parseUtil.d.ts +0 -78
  543. package/node_modules/zod/v3/helpers/parseUtil.js +0 -109
  544. package/node_modules/zod/v3/helpers/partialUtil.cjs +0 -2
  545. package/node_modules/zod/v3/helpers/partialUtil.d.cts +0 -8
  546. package/node_modules/zod/v3/helpers/partialUtil.d.ts +0 -8
  547. package/node_modules/zod/v3/helpers/partialUtil.js +0 -1
  548. package/node_modules/zod/v3/helpers/typeAliases.cjs +0 -2
  549. package/node_modules/zod/v3/helpers/typeAliases.d.cts +0 -2
  550. package/node_modules/zod/v3/helpers/typeAliases.d.ts +0 -2
  551. package/node_modules/zod/v3/helpers/typeAliases.js +0 -1
  552. package/node_modules/zod/v3/helpers/util.cjs +0 -137
  553. package/node_modules/zod/v3/helpers/util.d.cts +0 -85
  554. package/node_modules/zod/v3/helpers/util.d.ts +0 -85
  555. package/node_modules/zod/v3/helpers/util.js +0 -133
  556. package/node_modules/zod/v3/index.cjs +0 -33
  557. package/node_modules/zod/v3/index.d.cts +0 -4
  558. package/node_modules/zod/v3/index.d.ts +0 -4
  559. package/node_modules/zod/v3/index.js +0 -4
  560. package/node_modules/zod/v3/locales/en.cjs +0 -112
  561. package/node_modules/zod/v3/locales/en.d.cts +0 -3
  562. package/node_modules/zod/v3/locales/en.d.ts +0 -3
  563. package/node_modules/zod/v3/locales/en.js +0 -109
  564. package/node_modules/zod/v3/package.json +0 -6
  565. package/node_modules/zod/v3/standard-schema.cjs +0 -2
  566. package/node_modules/zod/v3/standard-schema.d.cts +0 -102
  567. package/node_modules/zod/v3/standard-schema.d.ts +0 -102
  568. package/node_modules/zod/v3/standard-schema.js +0 -1
  569. package/node_modules/zod/v3/types.cjs +0 -3777
  570. package/node_modules/zod/v3/types.d.cts +0 -1034
  571. package/node_modules/zod/v3/types.d.ts +0 -1034
  572. package/node_modules/zod/v3/types.js +0 -3695
  573. package/node_modules/zod/v4/classic/checks.cjs +0 -33
  574. package/node_modules/zod/v4/classic/checks.d.cts +0 -1
  575. package/node_modules/zod/v4/classic/checks.d.ts +0 -1
  576. package/node_modules/zod/v4/classic/checks.js +0 -1
  577. package/node_modules/zod/v4/classic/coerce.cjs +0 -47
  578. package/node_modules/zod/v4/classic/coerce.d.cts +0 -17
  579. package/node_modules/zod/v4/classic/coerce.d.ts +0 -17
  580. package/node_modules/zod/v4/classic/coerce.js +0 -17
  581. package/node_modules/zod/v4/classic/compat.cjs +0 -61
  582. package/node_modules/zod/v4/classic/compat.d.cts +0 -50
  583. package/node_modules/zod/v4/classic/compat.d.ts +0 -50
  584. package/node_modules/zod/v4/classic/compat.js +0 -31
  585. package/node_modules/zod/v4/classic/errors.cjs +0 -74
  586. package/node_modules/zod/v4/classic/errors.d.cts +0 -30
  587. package/node_modules/zod/v4/classic/errors.d.ts +0 -30
  588. package/node_modules/zod/v4/classic/errors.js +0 -48
  589. package/node_modules/zod/v4/classic/external.cjs +0 -73
  590. package/node_modules/zod/v4/classic/external.d.cts +0 -15
  591. package/node_modules/zod/v4/classic/external.d.ts +0 -15
  592. package/node_modules/zod/v4/classic/external.js +0 -20
  593. package/node_modules/zod/v4/classic/from-json-schema.cjs +0 -610
  594. package/node_modules/zod/v4/classic/from-json-schema.d.cts +0 -12
  595. package/node_modules/zod/v4/classic/from-json-schema.d.ts +0 -12
  596. package/node_modules/zod/v4/classic/from-json-schema.js +0 -584
  597. package/node_modules/zod/v4/classic/index.cjs +0 -33
  598. package/node_modules/zod/v4/classic/index.d.cts +0 -4
  599. package/node_modules/zod/v4/classic/index.d.ts +0 -4
  600. package/node_modules/zod/v4/classic/index.js +0 -4
  601. package/node_modules/zod/v4/classic/iso.cjs +0 -60
  602. package/node_modules/zod/v4/classic/iso.d.cts +0 -22
  603. package/node_modules/zod/v4/classic/iso.d.ts +0 -22
  604. package/node_modules/zod/v4/classic/iso.js +0 -30
  605. package/node_modules/zod/v4/classic/package.json +0 -6
  606. package/node_modules/zod/v4/classic/parse.cjs +0 -41
  607. package/node_modules/zod/v4/classic/parse.d.cts +0 -31
  608. package/node_modules/zod/v4/classic/parse.d.ts +0 -31
  609. package/node_modules/zod/v4/classic/parse.js +0 -15
  610. package/node_modules/zod/v4/classic/schemas.cjs +0 -1272
  611. package/node_modules/zod/v4/classic/schemas.d.cts +0 -739
  612. package/node_modules/zod/v4/classic/schemas.d.ts +0 -739
  613. package/node_modules/zod/v4/classic/schemas.js +0 -1157
  614. package/node_modules/zod/v4/core/api.cjs +0 -1222
  615. package/node_modules/zod/v4/core/api.d.cts +0 -304
  616. package/node_modules/zod/v4/core/api.d.ts +0 -304
  617. package/node_modules/zod/v4/core/api.js +0 -1082
  618. package/node_modules/zod/v4/core/checks.cjs +0 -601
  619. package/node_modules/zod/v4/core/checks.d.cts +0 -278
  620. package/node_modules/zod/v4/core/checks.d.ts +0 -278
  621. package/node_modules/zod/v4/core/checks.js +0 -575
  622. package/node_modules/zod/v4/core/core.cjs +0 -83
  623. package/node_modules/zod/v4/core/core.d.cts +0 -70
  624. package/node_modules/zod/v4/core/core.d.ts +0 -70
  625. package/node_modules/zod/v4/core/core.js +0 -76
  626. package/node_modules/zod/v4/core/doc.cjs +0 -39
  627. package/node_modules/zod/v4/core/doc.d.cts +0 -14
  628. package/node_modules/zod/v4/core/doc.d.ts +0 -14
  629. package/node_modules/zod/v4/core/doc.js +0 -35
  630. package/node_modules/zod/v4/core/errors.cjs +0 -213
  631. package/node_modules/zod/v4/core/errors.d.cts +0 -220
  632. package/node_modules/zod/v4/core/errors.d.ts +0 -220
  633. package/node_modules/zod/v4/core/errors.js +0 -182
  634. package/node_modules/zod/v4/core/index.cjs +0 -47
  635. package/node_modules/zod/v4/core/index.d.cts +0 -16
  636. package/node_modules/zod/v4/core/index.d.ts +0 -16
  637. package/node_modules/zod/v4/core/index.js +0 -16
  638. package/node_modules/zod/v4/core/json-schema-generator.cjs +0 -99
  639. package/node_modules/zod/v4/core/json-schema-generator.d.cts +0 -65
  640. package/node_modules/zod/v4/core/json-schema-generator.d.ts +0 -65
  641. package/node_modules/zod/v4/core/json-schema-generator.js +0 -95
  642. package/node_modules/zod/v4/core/json-schema-processors.cjs +0 -648
  643. package/node_modules/zod/v4/core/json-schema-processors.d.cts +0 -49
  644. package/node_modules/zod/v4/core/json-schema-processors.d.ts +0 -49
  645. package/node_modules/zod/v4/core/json-schema-processors.js +0 -605
  646. package/node_modules/zod/v4/core/json-schema.cjs +0 -2
  647. package/node_modules/zod/v4/core/json-schema.d.cts +0 -88
  648. package/node_modules/zod/v4/core/json-schema.d.ts +0 -88
  649. package/node_modules/zod/v4/core/json-schema.js +0 -1
  650. package/node_modules/zod/v4/core/package.json +0 -6
  651. package/node_modules/zod/v4/core/parse.cjs +0 -131
  652. package/node_modules/zod/v4/core/parse.d.cts +0 -49
  653. package/node_modules/zod/v4/core/parse.d.ts +0 -49
  654. package/node_modules/zod/v4/core/parse.js +0 -93
  655. package/node_modules/zod/v4/core/regexes.cjs +0 -166
  656. package/node_modules/zod/v4/core/regexes.d.cts +0 -79
  657. package/node_modules/zod/v4/core/regexes.d.ts +0 -79
  658. package/node_modules/zod/v4/core/regexes.js +0 -133
  659. package/node_modules/zod/v4/core/registries.cjs +0 -56
  660. package/node_modules/zod/v4/core/registries.d.cts +0 -35
  661. package/node_modules/zod/v4/core/registries.d.ts +0 -35
  662. package/node_modules/zod/v4/core/registries.js +0 -51
  663. package/node_modules/zod/v4/core/schemas.cjs +0 -2124
  664. package/node_modules/zod/v4/core/schemas.d.cts +0 -1146
  665. package/node_modules/zod/v4/core/schemas.d.ts +0 -1146
  666. package/node_modules/zod/v4/core/schemas.js +0 -2093
  667. package/node_modules/zod/v4/core/standard-schema.cjs +0 -2
  668. package/node_modules/zod/v4/core/standard-schema.d.cts +0 -126
  669. package/node_modules/zod/v4/core/standard-schema.d.ts +0 -126
  670. package/node_modules/zod/v4/core/standard-schema.js +0 -1
  671. package/node_modules/zod/v4/core/to-json-schema.cjs +0 -446
  672. package/node_modules/zod/v4/core/to-json-schema.d.cts +0 -114
  673. package/node_modules/zod/v4/core/to-json-schema.d.ts +0 -114
  674. package/node_modules/zod/v4/core/to-json-schema.js +0 -437
  675. package/node_modules/zod/v4/core/util.cjs +0 -710
  676. package/node_modules/zod/v4/core/util.d.cts +0 -199
  677. package/node_modules/zod/v4/core/util.d.ts +0 -199
  678. package/node_modules/zod/v4/core/util.js +0 -651
  679. package/node_modules/zod/v4/core/versions.cjs +0 -8
  680. package/node_modules/zod/v4/core/versions.d.cts +0 -5
  681. package/node_modules/zod/v4/core/versions.d.ts +0 -5
  682. package/node_modules/zod/v4/core/versions.js +0 -5
  683. package/node_modules/zod/v4/index.cjs +0 -22
  684. package/node_modules/zod/v4/index.d.cts +0 -3
  685. package/node_modules/zod/v4/index.d.ts +0 -3
  686. package/node_modules/zod/v4/index.js +0 -3
  687. package/node_modules/zod/v4/locales/ar.cjs +0 -133
  688. package/node_modules/zod/v4/locales/ar.d.cts +0 -5
  689. package/node_modules/zod/v4/locales/ar.d.ts +0 -4
  690. package/node_modules/zod/v4/locales/ar.js +0 -106
  691. package/node_modules/zod/v4/locales/az.cjs +0 -132
  692. package/node_modules/zod/v4/locales/az.d.cts +0 -5
  693. package/node_modules/zod/v4/locales/az.d.ts +0 -4
  694. package/node_modules/zod/v4/locales/az.js +0 -105
  695. package/node_modules/zod/v4/locales/be.cjs +0 -183
  696. package/node_modules/zod/v4/locales/be.d.cts +0 -5
  697. package/node_modules/zod/v4/locales/be.d.ts +0 -4
  698. package/node_modules/zod/v4/locales/be.js +0 -156
  699. package/node_modules/zod/v4/locales/bg.cjs +0 -147
  700. package/node_modules/zod/v4/locales/bg.d.cts +0 -5
  701. package/node_modules/zod/v4/locales/bg.d.ts +0 -4
  702. package/node_modules/zod/v4/locales/bg.js +0 -120
  703. package/node_modules/zod/v4/locales/ca.cjs +0 -134
  704. package/node_modules/zod/v4/locales/ca.d.cts +0 -5
  705. package/node_modules/zod/v4/locales/ca.d.ts +0 -4
  706. package/node_modules/zod/v4/locales/ca.js +0 -107
  707. package/node_modules/zod/v4/locales/cs.cjs +0 -138
  708. package/node_modules/zod/v4/locales/cs.d.cts +0 -5
  709. package/node_modules/zod/v4/locales/cs.d.ts +0 -4
  710. package/node_modules/zod/v4/locales/cs.js +0 -111
  711. package/node_modules/zod/v4/locales/da.cjs +0 -142
  712. package/node_modules/zod/v4/locales/da.d.cts +0 -5
  713. package/node_modules/zod/v4/locales/da.d.ts +0 -4
  714. package/node_modules/zod/v4/locales/da.js +0 -115
  715. package/node_modules/zod/v4/locales/de.cjs +0 -135
  716. package/node_modules/zod/v4/locales/de.d.cts +0 -5
  717. package/node_modules/zod/v4/locales/de.d.ts +0 -4
  718. package/node_modules/zod/v4/locales/de.js +0 -108
  719. package/node_modules/zod/v4/locales/en.cjs +0 -136
  720. package/node_modules/zod/v4/locales/en.d.cts +0 -5
  721. package/node_modules/zod/v4/locales/en.d.ts +0 -4
  722. package/node_modules/zod/v4/locales/en.js +0 -109
  723. package/node_modules/zod/v4/locales/eo.cjs +0 -136
  724. package/node_modules/zod/v4/locales/eo.d.cts +0 -5
  725. package/node_modules/zod/v4/locales/eo.d.ts +0 -4
  726. package/node_modules/zod/v4/locales/eo.js +0 -109
  727. package/node_modules/zod/v4/locales/es.cjs +0 -159
  728. package/node_modules/zod/v4/locales/es.d.cts +0 -5
  729. package/node_modules/zod/v4/locales/es.d.ts +0 -4
  730. package/node_modules/zod/v4/locales/es.js +0 -132
  731. package/node_modules/zod/v4/locales/fa.cjs +0 -141
  732. package/node_modules/zod/v4/locales/fa.d.cts +0 -5
  733. package/node_modules/zod/v4/locales/fa.d.ts +0 -4
  734. package/node_modules/zod/v4/locales/fa.js +0 -114
  735. package/node_modules/zod/v4/locales/fi.cjs +0 -139
  736. package/node_modules/zod/v4/locales/fi.d.cts +0 -5
  737. package/node_modules/zod/v4/locales/fi.d.ts +0 -4
  738. package/node_modules/zod/v4/locales/fi.js +0 -112
  739. package/node_modules/zod/v4/locales/fr-CA.cjs +0 -134
  740. package/node_modules/zod/v4/locales/fr-CA.d.cts +0 -5
  741. package/node_modules/zod/v4/locales/fr-CA.d.ts +0 -4
  742. package/node_modules/zod/v4/locales/fr-CA.js +0 -107
  743. package/node_modules/zod/v4/locales/fr.cjs +0 -135
  744. package/node_modules/zod/v4/locales/fr.d.cts +0 -5
  745. package/node_modules/zod/v4/locales/fr.d.ts +0 -4
  746. package/node_modules/zod/v4/locales/fr.js +0 -108
  747. package/node_modules/zod/v4/locales/he.cjs +0 -241
  748. package/node_modules/zod/v4/locales/he.d.cts +0 -5
  749. package/node_modules/zod/v4/locales/he.d.ts +0 -4
  750. package/node_modules/zod/v4/locales/he.js +0 -214
  751. package/node_modules/zod/v4/locales/hu.cjs +0 -135
  752. package/node_modules/zod/v4/locales/hu.d.cts +0 -5
  753. package/node_modules/zod/v4/locales/hu.d.ts +0 -4
  754. package/node_modules/zod/v4/locales/hu.js +0 -108
  755. package/node_modules/zod/v4/locales/hy.cjs +0 -174
  756. package/node_modules/zod/v4/locales/hy.d.cts +0 -5
  757. package/node_modules/zod/v4/locales/hy.d.ts +0 -4
  758. package/node_modules/zod/v4/locales/hy.js +0 -147
  759. package/node_modules/zod/v4/locales/id.cjs +0 -133
  760. package/node_modules/zod/v4/locales/id.d.cts +0 -5
  761. package/node_modules/zod/v4/locales/id.d.ts +0 -4
  762. package/node_modules/zod/v4/locales/id.js +0 -106
  763. package/node_modules/zod/v4/locales/index.cjs +0 -104
  764. package/node_modules/zod/v4/locales/index.d.cts +0 -49
  765. package/node_modules/zod/v4/locales/index.d.ts +0 -49
  766. package/node_modules/zod/v4/locales/index.js +0 -49
  767. package/node_modules/zod/v4/locales/is.cjs +0 -136
  768. package/node_modules/zod/v4/locales/is.d.cts +0 -5
  769. package/node_modules/zod/v4/locales/is.d.ts +0 -4
  770. package/node_modules/zod/v4/locales/is.js +0 -109
  771. package/node_modules/zod/v4/locales/it.cjs +0 -135
  772. package/node_modules/zod/v4/locales/it.d.cts +0 -5
  773. package/node_modules/zod/v4/locales/it.d.ts +0 -4
  774. package/node_modules/zod/v4/locales/it.js +0 -108
  775. package/node_modules/zod/v4/locales/ja.cjs +0 -134
  776. package/node_modules/zod/v4/locales/ja.d.cts +0 -5
  777. package/node_modules/zod/v4/locales/ja.d.ts +0 -4
  778. package/node_modules/zod/v4/locales/ja.js +0 -107
  779. package/node_modules/zod/v4/locales/ka.cjs +0 -139
  780. package/node_modules/zod/v4/locales/ka.d.cts +0 -5
  781. package/node_modules/zod/v4/locales/ka.d.ts +0 -4
  782. package/node_modules/zod/v4/locales/ka.js +0 -112
  783. package/node_modules/zod/v4/locales/kh.cjs +0 -12
  784. package/node_modules/zod/v4/locales/kh.d.cts +0 -5
  785. package/node_modules/zod/v4/locales/kh.d.ts +0 -5
  786. package/node_modules/zod/v4/locales/kh.js +0 -5
  787. package/node_modules/zod/v4/locales/km.cjs +0 -137
  788. package/node_modules/zod/v4/locales/km.d.cts +0 -5
  789. package/node_modules/zod/v4/locales/km.d.ts +0 -4
  790. package/node_modules/zod/v4/locales/km.js +0 -110
  791. package/node_modules/zod/v4/locales/ko.cjs +0 -138
  792. package/node_modules/zod/v4/locales/ko.d.cts +0 -5
  793. package/node_modules/zod/v4/locales/ko.d.ts +0 -4
  794. package/node_modules/zod/v4/locales/ko.js +0 -111
  795. package/node_modules/zod/v4/locales/lt.cjs +0 -230
  796. package/node_modules/zod/v4/locales/lt.d.cts +0 -5
  797. package/node_modules/zod/v4/locales/lt.d.ts +0 -4
  798. package/node_modules/zod/v4/locales/lt.js +0 -203
  799. package/node_modules/zod/v4/locales/mk.cjs +0 -136
  800. package/node_modules/zod/v4/locales/mk.d.cts +0 -5
  801. package/node_modules/zod/v4/locales/mk.d.ts +0 -4
  802. package/node_modules/zod/v4/locales/mk.js +0 -109
  803. package/node_modules/zod/v4/locales/ms.cjs +0 -134
  804. package/node_modules/zod/v4/locales/ms.d.cts +0 -5
  805. package/node_modules/zod/v4/locales/ms.d.ts +0 -4
  806. package/node_modules/zod/v4/locales/ms.js +0 -107
  807. package/node_modules/zod/v4/locales/nl.cjs +0 -137
  808. package/node_modules/zod/v4/locales/nl.d.cts +0 -5
  809. package/node_modules/zod/v4/locales/nl.d.ts +0 -4
  810. package/node_modules/zod/v4/locales/nl.js +0 -110
  811. package/node_modules/zod/v4/locales/no.cjs +0 -135
  812. package/node_modules/zod/v4/locales/no.d.cts +0 -5
  813. package/node_modules/zod/v4/locales/no.d.ts +0 -4
  814. package/node_modules/zod/v4/locales/no.js +0 -108
  815. package/node_modules/zod/v4/locales/ota.cjs +0 -136
  816. package/node_modules/zod/v4/locales/ota.d.cts +0 -5
  817. package/node_modules/zod/v4/locales/ota.d.ts +0 -4
  818. package/node_modules/zod/v4/locales/ota.js +0 -109
  819. package/node_modules/zod/v4/locales/package.json +0 -6
  820. package/node_modules/zod/v4/locales/pl.cjs +0 -136
  821. package/node_modules/zod/v4/locales/pl.d.cts +0 -5
  822. package/node_modules/zod/v4/locales/pl.d.ts +0 -4
  823. package/node_modules/zod/v4/locales/pl.js +0 -109
  824. package/node_modules/zod/v4/locales/ps.cjs +0 -141
  825. package/node_modules/zod/v4/locales/ps.d.cts +0 -5
  826. package/node_modules/zod/v4/locales/ps.d.ts +0 -4
  827. package/node_modules/zod/v4/locales/ps.js +0 -114
  828. package/node_modules/zod/v4/locales/pt.cjs +0 -135
  829. package/node_modules/zod/v4/locales/pt.d.cts +0 -5
  830. package/node_modules/zod/v4/locales/pt.d.ts +0 -4
  831. package/node_modules/zod/v4/locales/pt.js +0 -108
  832. package/node_modules/zod/v4/locales/ru.cjs +0 -183
  833. package/node_modules/zod/v4/locales/ru.d.cts +0 -5
  834. package/node_modules/zod/v4/locales/ru.d.ts +0 -4
  835. package/node_modules/zod/v4/locales/ru.js +0 -156
  836. package/node_modules/zod/v4/locales/sl.cjs +0 -136
  837. package/node_modules/zod/v4/locales/sl.d.cts +0 -5
  838. package/node_modules/zod/v4/locales/sl.d.ts +0 -4
  839. package/node_modules/zod/v4/locales/sl.js +0 -109
  840. package/node_modules/zod/v4/locales/sv.cjs +0 -137
  841. package/node_modules/zod/v4/locales/sv.d.cts +0 -5
  842. package/node_modules/zod/v4/locales/sv.d.ts +0 -4
  843. package/node_modules/zod/v4/locales/sv.js +0 -110
  844. package/node_modules/zod/v4/locales/ta.cjs +0 -137
  845. package/node_modules/zod/v4/locales/ta.d.cts +0 -5
  846. package/node_modules/zod/v4/locales/ta.d.ts +0 -4
  847. package/node_modules/zod/v4/locales/ta.js +0 -110
  848. package/node_modules/zod/v4/locales/th.cjs +0 -137
  849. package/node_modules/zod/v4/locales/th.d.cts +0 -5
  850. package/node_modules/zod/v4/locales/th.d.ts +0 -4
  851. package/node_modules/zod/v4/locales/th.js +0 -110
  852. package/node_modules/zod/v4/locales/tr.cjs +0 -132
  853. package/node_modules/zod/v4/locales/tr.d.cts +0 -5
  854. package/node_modules/zod/v4/locales/tr.d.ts +0 -4
  855. package/node_modules/zod/v4/locales/tr.js +0 -105
  856. package/node_modules/zod/v4/locales/ua.cjs +0 -12
  857. package/node_modules/zod/v4/locales/ua.d.cts +0 -5
  858. package/node_modules/zod/v4/locales/ua.d.ts +0 -5
  859. package/node_modules/zod/v4/locales/ua.js +0 -5
  860. package/node_modules/zod/v4/locales/uk.cjs +0 -135
  861. package/node_modules/zod/v4/locales/uk.d.cts +0 -5
  862. package/node_modules/zod/v4/locales/uk.d.ts +0 -4
  863. package/node_modules/zod/v4/locales/uk.js +0 -108
  864. package/node_modules/zod/v4/locales/ur.cjs +0 -137
  865. package/node_modules/zod/v4/locales/ur.d.cts +0 -5
  866. package/node_modules/zod/v4/locales/ur.d.ts +0 -4
  867. package/node_modules/zod/v4/locales/ur.js +0 -110
  868. package/node_modules/zod/v4/locales/uz.cjs +0 -136
  869. package/node_modules/zod/v4/locales/uz.d.cts +0 -5
  870. package/node_modules/zod/v4/locales/uz.d.ts +0 -4
  871. package/node_modules/zod/v4/locales/uz.js +0 -109
  872. package/node_modules/zod/v4/locales/vi.cjs +0 -135
  873. package/node_modules/zod/v4/locales/vi.d.cts +0 -5
  874. package/node_modules/zod/v4/locales/vi.d.ts +0 -4
  875. package/node_modules/zod/v4/locales/vi.js +0 -108
  876. package/node_modules/zod/v4/locales/yo.cjs +0 -134
  877. package/node_modules/zod/v4/locales/yo.d.cts +0 -5
  878. package/node_modules/zod/v4/locales/yo.d.ts +0 -4
  879. package/node_modules/zod/v4/locales/yo.js +0 -107
  880. package/node_modules/zod/v4/locales/zh-CN.cjs +0 -136
  881. package/node_modules/zod/v4/locales/zh-CN.d.cts +0 -5
  882. package/node_modules/zod/v4/locales/zh-CN.d.ts +0 -4
  883. package/node_modules/zod/v4/locales/zh-CN.js +0 -109
  884. package/node_modules/zod/v4/locales/zh-TW.cjs +0 -134
  885. package/node_modules/zod/v4/locales/zh-TW.d.cts +0 -5
  886. package/node_modules/zod/v4/locales/zh-TW.d.ts +0 -4
  887. package/node_modules/zod/v4/locales/zh-TW.js +0 -107
  888. package/node_modules/zod/v4/mini/checks.cjs +0 -34
  889. package/node_modules/zod/v4/mini/checks.d.cts +0 -1
  890. package/node_modules/zod/v4/mini/checks.d.ts +0 -1
  891. package/node_modules/zod/v4/mini/checks.js +0 -1
  892. package/node_modules/zod/v4/mini/coerce.cjs +0 -52
  893. package/node_modules/zod/v4/mini/coerce.d.cts +0 -7
  894. package/node_modules/zod/v4/mini/coerce.d.ts +0 -7
  895. package/node_modules/zod/v4/mini/coerce.js +0 -22
  896. package/node_modules/zod/v4/mini/external.cjs +0 -63
  897. package/node_modules/zod/v4/mini/external.d.cts +0 -12
  898. package/node_modules/zod/v4/mini/external.d.ts +0 -12
  899. package/node_modules/zod/v4/mini/external.js +0 -14
  900. package/node_modules/zod/v4/mini/index.cjs +0 -32
  901. package/node_modules/zod/v4/mini/index.d.cts +0 -3
  902. package/node_modules/zod/v4/mini/index.d.ts +0 -3
  903. package/node_modules/zod/v4/mini/index.js +0 -3
  904. package/node_modules/zod/v4/mini/iso.cjs +0 -64
  905. package/node_modules/zod/v4/mini/iso.d.cts +0 -22
  906. package/node_modules/zod/v4/mini/iso.d.ts +0 -22
  907. package/node_modules/zod/v4/mini/iso.js +0 -34
  908. package/node_modules/zod/v4/mini/package.json +0 -6
  909. package/node_modules/zod/v4/mini/parse.cjs +0 -16
  910. package/node_modules/zod/v4/mini/parse.d.cts +0 -1
  911. package/node_modules/zod/v4/mini/parse.d.ts +0 -1
  912. package/node_modules/zod/v4/mini/parse.js +0 -1
  913. package/node_modules/zod/v4/mini/schemas.cjs +0 -1046
  914. package/node_modules/zod/v4/mini/schemas.d.cts +0 -427
  915. package/node_modules/zod/v4/mini/schemas.d.ts +0 -427
  916. package/node_modules/zod/v4/mini/schemas.js +0 -925
  917. package/node_modules/zod/v4/package.json +0 -6
  918. package/node_modules/zod/v4-mini/index.cjs +0 -32
  919. package/node_modules/zod/v4-mini/index.d.cts +0 -3
  920. package/node_modules/zod/v4-mini/index.d.ts +0 -3
  921. package/node_modules/zod/v4-mini/index.js +0 -3
  922. package/node_modules/zod/v4-mini/package.json +0 -6
  923. package/plugin/dist/index.d.ts +0 -208
  924. package/plugin/dist/index.d.ts.map +0 -1
  925. package/plugin/dist/index.js +0 -3474
  926. package/plugin/dist/index.js.map +0 -1
@@ -1,1041 +0,0 @@
1
- /**
2
- * hypermem Vector Store — Semantic Search via sqlite-vec
3
- *
4
- * Provides embedding-backed KNN search over facts, knowledge, episodes,
5
- * and session registry entries. Uses Ollama (local) for embeddings,
6
- * sqlite-vec for vector indexing, and coexists with existing FTS5.
7
- *
8
- * Architecture:
9
- * - One vec0 virtual table per indexed content type
10
- * - Embeddings generated via local Ollama (nomic-embed-text, 768d)
11
- * - Vectors stored alongside content in the same agent DB
12
- * - LRU embedding cache (module-level, per-process) to avoid redundant Ollama calls
13
- * - Precomputed embedding passthrough: callers can supply an embedding to skip Ollama
14
- * - Batch embedding support for bulk indexing
15
- */
16
- import { createHash } from 'node:crypto';
17
- import { readFileSync, writeFileSync, existsSync, readdirSync, realpathSync } from 'node:fs';
18
- import { join, dirname, delimiter } from 'node:path';
19
- const DEFAULT_EMBEDDING_CONFIG = {
20
- provider: 'ollama',
21
- ollamaUrl: 'http://localhost:11434',
22
- openaiBaseUrl: 'https://api.openai.com/v1',
23
- model: 'nomic-embed-text',
24
- dimensions: 768,
25
- timeout: 10000,
26
- batchSize: 32,
27
- cacheSize: 128,
28
- };
29
- /** Provider-specific defaults applied when provider is 'openai' and fields are not set. */
30
- const OPENAI_DEFAULTS = {
31
- model: 'text-embedding-3-small',
32
- dimensions: 1536,
33
- batchSize: 128,
34
- };
35
- /** Provider-specific defaults applied when provider is 'gemini' and fields are not set. */
36
- const GEMINI_DEFAULTS = {
37
- model: 'gemini-embedding-2-preview',
38
- dimensions: 3072,
39
- batchSize: 100, // Gemini batch limit
40
- timeout: 15000,
41
- };
42
- const _embeddingCache = new Map();
43
- /**
44
- * Insert an entry into the LRU cache, evicting the oldest if over capacity.
45
- */
46
- function cachePut(key, embedding, maxSize) {
47
- if (_embeddingCache.has(key)) {
48
- // Update existing entry (refresh timestamp)
49
- _embeddingCache.delete(key);
50
- }
51
- else if (_embeddingCache.size >= maxSize) {
52
- // Evict oldest entry by timestamp
53
- let oldestKey;
54
- let oldestTime = Infinity;
55
- for (const [k, v] of _embeddingCache) {
56
- if (v.timestamp < oldestTime) {
57
- oldestTime = v.timestamp;
58
- oldestKey = k;
59
- }
60
- }
61
- if (oldestKey !== undefined) {
62
- _embeddingCache.delete(oldestKey);
63
- }
64
- }
65
- _embeddingCache.set(key, { embedding, timestamp: Date.now() });
66
- }
67
- /**
68
- * Clear the embedding cache. Primarily for testing.
69
- */
70
- export function clearEmbeddingCache() {
71
- _embeddingCache.clear();
72
- }
73
- /**
74
- * Generate embeddings via OpenAI Embeddings API.
75
- * Batches up to batchSize inputs per request.
76
- */
77
- async function generateOpenAIEmbeddings(texts, config) {
78
- // Resolve API key: config > environment
79
- const apiKey = config.openaiApiKey
80
- ?? process.env.OPENROUTER_API_KEY
81
- ?? process.env.OPENAI_API_KEY
82
- ?? null;
83
- if (!apiKey) {
84
- throw new Error('[hypermem] OpenAI embedding provider requires an API key. ' +
85
- 'Set openaiApiKey in hypermem config, or set OPENROUTER_API_KEY / OPENAI_API_KEY env var.');
86
- }
87
- const baseUrl = config.openaiBaseUrl ?? 'https://api.openai.com/v1';
88
- const model = config.model;
89
- const results = [];
90
- for (let i = 0; i < texts.length; i += config.batchSize) {
91
- const batch = texts.slice(i, i + config.batchSize);
92
- const controller = new AbortController();
93
- const timer = setTimeout(() => controller.abort(), config.timeout);
94
- try {
95
- const response = await fetch(`${baseUrl}/embeddings`, {
96
- method: 'POST',
97
- headers: {
98
- 'Content-Type': 'application/json',
99
- 'Authorization': `Bearer ${apiKey}`,
100
- },
101
- body: JSON.stringify({ model, input: batch }),
102
- signal: controller.signal,
103
- });
104
- if (!response.ok) {
105
- const body = await response.text().catch(() => '');
106
- throw new Error(`OpenAI embedding failed: ${response.status} ${response.statusText} — ${body}`);
107
- }
108
- const data = await response.json();
109
- // OpenAI returns results in order by default but may not guarantee it — sort by index.
110
- const sorted = data.data.sort((a, b) => a.index - b.index);
111
- for (const item of sorted) {
112
- if (item.embedding.length !== config.dimensions) {
113
- throw new Error(`OpenAI embedding dimension mismatch: expected ${config.dimensions}, got ${item.embedding.length}. ` +
114
- 'If you changed models, re-index via hypermem reindex.');
115
- }
116
- results.push(new Float32Array(item.embedding));
117
- }
118
- }
119
- finally {
120
- clearTimeout(timer);
121
- }
122
- }
123
- return results;
124
- }
125
- let _geminiTokenCache = null;
126
- /**
127
- * Extract Gemini CLI OAuth client credentials.
128
- *
129
- * Strategy:
130
- * 1. Check env vars GEMINI_CLI_OAUTH_CLIENT_ID / GEMINI_CLI_OAUTH_CLIENT_SECRET
131
- * 2. Find the `gemini` binary in PATH, resolve to real path, navigate to oauth2.js,
132
- * regex out client_id and client_secret.
133
- */
134
- function resolveGeminiCliCredentials() {
135
- const envId = process.env.GEMINI_CLI_OAUTH_CLIENT_ID;
136
- const envSecret = process.env.GEMINI_CLI_OAUTH_CLIENT_SECRET;
137
- if (envId && envSecret) {
138
- return { clientId: envId, clientSecret: envSecret };
139
- }
140
- // Find gemini binary in PATH
141
- const pathDirs = (process.env.PATH ?? '').split(delimiter);
142
- let geminiBinPath = null;
143
- for (const dir of pathDirs) {
144
- const candidate = join(dir, 'gemini');
145
- if (existsSync(candidate)) {
146
- geminiBinPath = candidate;
147
- break;
148
- }
149
- }
150
- if (!geminiBinPath) {
151
- console.log('[hypermem-vector] Gemini CLI binary not found in PATH; cannot extract OAuth credentials');
152
- return null;
153
- }
154
- try {
155
- // Resolve symlinks to get actual install location
156
- const realBin = realpathSync(geminiBinPath);
157
- // Navigate from bin to the oauth2.js module
158
- // Typical layout: .../node_modules/.bin/gemini -> ../gemini-cli/bin/gemini.js
159
- // oauth2.js is at: .../node_modules/gemini-cli/src/oauth2.js or similar
160
- const binDir = dirname(realBin);
161
- const packageDir = dirname(binDir); // go up from bin/
162
- // Search for oauth2.js in common locations
163
- const candidates = [
164
- join(packageDir, 'src', 'oauth2.js'),
165
- join(packageDir, 'dist', 'oauth2.js'),
166
- join(packageDir, 'lib', 'oauth2.js'),
167
- join(packageDir, 'oauth2.js'),
168
- ];
169
- let oauthContent = null;
170
- for (const c of candidates) {
171
- if (existsSync(c)) {
172
- oauthContent = readFileSync(c, 'utf-8');
173
- break;
174
- }
175
- }
176
- // Also try searching recursively in the package dir for any file containing 'client_id'
177
- if (!oauthContent) {
178
- // Try common JS bundle locations — first oauth-named files, then all .js
179
- const searchDirs = [packageDir];
180
- for (const searchDir of searchDirs) {
181
- if (!existsSync(searchDir))
182
- continue;
183
- const entries = readdirSync(searchDir, { recursive: true });
184
- for (const entry of entries) {
185
- const fullPath = join(searchDir, entry);
186
- if (typeof entry === 'string' && (entry.endsWith('.js') || entry.endsWith('.mjs')) && entry.includes('oauth')) {
187
- try {
188
- oauthContent = readFileSync(fullPath, 'utf-8');
189
- break;
190
- }
191
- catch { /* skip unreadable */ }
192
- }
193
- }
194
- if (oauthContent)
195
- break;
196
- }
197
- }
198
- if (!oauthContent) {
199
- console.log('[hypermem-vector] Could not find oauth2.js in Gemini CLI package');
200
- }
201
- // Regex out client_id and client_secret from oauth file
202
- if (oauthContent) {
203
- const idMatch = oauthContent.match(/client_id["'\s:=]+["']([^"']+)["']/i);
204
- const secretMatch = oauthContent.match(/client_secret["'\s:=]+["']([^"']+)["']/i);
205
- if (idMatch?.[1] && secretMatch?.[1]) {
206
- return { clientId: idMatch[1], clientSecret: secretMatch[1] };
207
- }
208
- }
209
- // Fallback: scan all bundle JS files for Google OAuth client_id pattern
210
- // Bundled CLIs (e.g. @google/gemini-cli) split credentials across chunks
211
- const bundleDir = join(packageDir, 'bundle');
212
- if (existsSync(bundleDir)) {
213
- const googleIdRe = /["']([\d]+-[a-z0-9]+\.apps\.googleusercontent\.com)["']/;
214
- const clientSecretRe = /client_secret["'\s:=]+["']([^"']+)["']/i;
215
- // Also match bundled patterns: secret alongside or near client_id
216
- const inlineSecretRe = /["'](GOCSPX-[^"']+)["']/;
217
- let foundId = null;
218
- let foundSecret = null;
219
- const bundleFiles = readdirSync(bundleDir)
220
- .filter(f => f.endsWith('.js') || f.endsWith('.mjs'))
221
- .sort();
222
- for (const file of bundleFiles) {
223
- try {
224
- const content = readFileSync(join(bundleDir, file), 'utf-8');
225
- if (!foundId) {
226
- const m = content.match(googleIdRe);
227
- if (m)
228
- foundId = m[1];
229
- }
230
- if (!foundSecret) {
231
- const m = content.match(clientSecretRe) || content.match(inlineSecretRe);
232
- if (m)
233
- foundSecret = m[1];
234
- }
235
- if (foundId && foundSecret)
236
- break;
237
- }
238
- catch { /* skip */ }
239
- }
240
- if (foundId && foundSecret) {
241
- return { clientId: foundId, clientSecret: foundSecret };
242
- }
243
- }
244
- console.log('[hypermem-vector] Could not extract client_id/client_secret from Gemini CLI');
245
- return null;
246
- }
247
- catch (err) {
248
- console.log('[hypermem-vector] Error extracting Gemini CLI credentials:', err);
249
- return null;
250
- }
251
- }
252
- /**
253
- * Resolve a Gemini OAuth access token from OpenClaw's secrets store.
254
- *
255
- * Reads ~/.openclaw/secrets/secrets.json, finds the google-gemini-cli credential,
256
- * refreshes if expired, and caches in memory.
257
- */
258
- async function resolveGeminiOAuthToken() {
259
- // Return cached token if still valid (with 60s buffer)
260
- if (_geminiTokenCache && Date.now() < _geminiTokenCache.expiresAt - 60_000) {
261
- return _geminiTokenCache.accessToken;
262
- }
263
- const secretsPath = join(process.env.HOME ?? '/root', '.openclaw', 'secrets', 'secrets.json');
264
- if (!existsSync(secretsPath)) {
265
- console.log('[hypermem-vector] Secrets file not found:', secretsPath);
266
- return null;
267
- }
268
- let secrets;
269
- try {
270
- secrets = JSON.parse(readFileSync(secretsPath, 'utf-8'));
271
- }
272
- catch (err) {
273
- console.log('[hypermem-vector] Failed to parse secrets.json:', err);
274
- return null;
275
- }
276
- // Search for google-gemini-cli credential across all agents
277
- let credential = null;
278
- let credentialPath = []; // path segments for writing back
279
- const agents = secrets.agents;
280
- if (agents && typeof agents === 'object') {
281
- for (const agentId of Object.keys(agents)) {
282
- const profiles = agents[agentId]?.['auth-profiles']?.profiles;
283
- if (!profiles || typeof profiles !== 'object')
284
- continue;
285
- for (const profileKey of Object.keys(profiles)) {
286
- if (profileKey.startsWith('google-gemini-cli:')) {
287
- credential = profiles[profileKey];
288
- credentialPath = ['agents', agentId, 'auth-profiles', 'profiles', profileKey];
289
- break;
290
- }
291
- }
292
- if (credential)
293
- break;
294
- }
295
- }
296
- if (!credential) {
297
- console.log('[hypermem-vector] No google-gemini-cli credential found in secrets.json');
298
- return null;
299
- }
300
- // Check if token is still valid (with 60s buffer)
301
- if (Date.now() < credential.expires - 60_000) {
302
- _geminiTokenCache = { accessToken: credential.access, expiresAt: credential.expires };
303
- return credential.access;
304
- }
305
- // Token expired, refresh it
306
- console.log('[hypermem-vector] Gemini OAuth token expired, refreshing...');
307
- const cliCreds = resolveGeminiCliCredentials();
308
- if (!cliCreds) {
309
- console.log('[hypermem-vector] Cannot refresh: no CLI credentials available. Set GEMINI_CLI_OAUTH_CLIENT_ID and GEMINI_CLI_OAUTH_CLIENT_SECRET env vars.');
310
- return null;
311
- }
312
- try {
313
- const refreshResponse = await fetch('https://oauth2.googleapis.com/token', {
314
- method: 'POST',
315
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
316
- body: new URLSearchParams({
317
- client_id: cliCreds.clientId,
318
- client_secret: cliCreds.clientSecret,
319
- refresh_token: credential.refresh,
320
- grant_type: 'refresh_token',
321
- }),
322
- });
323
- if (!refreshResponse.ok) {
324
- const body = await refreshResponse.text().catch(() => '');
325
- console.log(`[hypermem-vector] OAuth refresh failed: ${refreshResponse.status} ${refreshResponse.statusText} — ${body}`);
326
- return null;
327
- }
328
- const tokenData = await refreshResponse.json();
329
- const newExpires = Date.now() + tokenData.expires_in * 1000;
330
- // Write updated token back to secrets.json
331
- try {
332
- // Re-read to avoid clobbering concurrent changes
333
- const freshSecrets = JSON.parse(readFileSync(secretsPath, 'utf-8'));
334
- let target = freshSecrets;
335
- for (let i = 0; i < credentialPath.length - 1; i++) {
336
- target = target[credentialPath[i]];
337
- }
338
- const lastKey = credentialPath[credentialPath.length - 1];
339
- if (target[lastKey]) {
340
- target[lastKey].access = tokenData.access_token;
341
- target[lastKey].expires = newExpires;
342
- }
343
- writeFileSync(secretsPath, JSON.stringify(freshSecrets, null, 2), 'utf-8');
344
- }
345
- catch (writeErr) {
346
- console.log('[hypermem-vector] Warning: refreshed token but failed to write back to secrets.json:', writeErr);
347
- }
348
- _geminiTokenCache = { accessToken: tokenData.access_token, expiresAt: newExpires };
349
- return tokenData.access_token;
350
- }
351
- catch (err) {
352
- console.log('[hypermem-vector] OAuth token refresh error:', err);
353
- return null;
354
- }
355
- }
356
- /**
357
- * L2-normalize a vector in place.
358
- * Gemini pre-normalizes at native dimensions but lower outputDimensionality may not be unit-length.
359
- */
360
- function l2Normalize(vec) {
361
- let sumSq = 0;
362
- for (let i = 0; i < vec.length; i++)
363
- sumSq += vec[i] * vec[i];
364
- if (sumSq === 0)
365
- return vec;
366
- const norm = Math.sqrt(sumSq);
367
- if (Math.abs(norm - 1.0) < 1e-6)
368
- return vec; // already unit-length
369
- for (let i = 0; i < vec.length; i++)
370
- vec[i] /= norm;
371
- return vec;
372
- }
373
- /**
374
- * Generate embeddings via Google Gemini Embedding API.
375
- * Uses batchEmbedContents endpoint, respects config.batchSize (max 100).
376
- * Auth: OAuth token from secrets store, or API key via config/env.
377
- */
378
- async function generateGeminiEmbeddings(texts, config, taskType) {
379
- const baseUrl = config.geminiBaseUrl ?? 'https://generativelanguage.googleapis.com';
380
- const model = config.model;
381
- const effectiveTaskType = taskType ?? config.geminiIndexTaskType ?? 'RETRIEVAL_DOCUMENT';
382
- const results = [];
383
- // Resolve auth: API key takes precedence (simpler), then OAuth
384
- const apiKey = config.geminiApiKey ?? process.env.GEMINI_EMBEDDING_API_KEY ?? process.env.GEMINI_API_KEY ?? process.env.GOOGLE_API_KEY ?? null;
385
- let oauthToken = null;
386
- if (!apiKey) {
387
- oauthToken = await resolveGeminiOAuthToken();
388
- if (!oauthToken) {
389
- throw new Error('[hypermem] Gemini embedding provider requires authentication. ' +
390
- 'Set geminiApiKey in config, GEMINI_EMBEDDING_API_KEY env var, or configure a google-gemini-cli OAuth credential in OpenClaw secrets.');
391
- }
392
- }
393
- const effectiveBatchSize = Math.min(config.batchSize, 100); // Gemini hard limit
394
- for (let i = 0; i < texts.length; i += effectiveBatchSize) {
395
- const batch = texts.slice(i, i + effectiveBatchSize);
396
- const requests = batch.map(text => ({
397
- model: `models/${model}`,
398
- content: { parts: [{ text }] },
399
- taskType: effectiveTaskType,
400
- outputDimensionality: config.dimensions,
401
- }));
402
- let url;
403
- const headers = { 'Content-Type': 'application/json' };
404
- if (apiKey) {
405
- url = `${baseUrl}/v1beta/models/${model}:batchEmbedContents?key=${apiKey}`;
406
- }
407
- else {
408
- url = `${baseUrl}/v1beta/models/${model}:batchEmbedContents`;
409
- headers['Authorization'] = `Bearer ${oauthToken}`;
410
- }
411
- const controller = new AbortController();
412
- const timer = setTimeout(() => controller.abort(), config.timeout);
413
- let retried = false;
414
- const doRequest = async () => {
415
- const response = await fetch(url, {
416
- method: 'POST',
417
- headers,
418
- body: JSON.stringify({ requests }),
419
- signal: controller.signal,
420
- });
421
- if (response.status === 401 && !retried && !apiKey) {
422
- // OAuth token may have been refreshed by another process; re-resolve once
423
- retried = true;
424
- _geminiTokenCache = null; // force re-read
425
- const freshToken = await resolveGeminiOAuthToken();
426
- if (freshToken) {
427
- oauthToken = freshToken;
428
- headers['Authorization'] = `Bearer ${oauthToken}`;
429
- return doRequest();
430
- }
431
- }
432
- if (!response.ok) {
433
- const body = await response.text().catch(() => '');
434
- throw new Error(`Gemini embedding failed: ${response.status} ${response.statusText} — ${body}`);
435
- }
436
- const data = await response.json();
437
- for (const item of data.embeddings) {
438
- if (item.values.length !== config.dimensions) {
439
- throw new Error(`Gemini embedding dimension mismatch: expected ${config.dimensions}, got ${item.values.length}. ` +
440
- 'If you changed models or dimensions, re-index via hypermem reindex.');
441
- }
442
- const vec = new Float32Array(item.values);
443
- // L2 normalize as safety net for reduced dimensions
444
- l2Normalize(vec);
445
- results.push(vec);
446
- }
447
- };
448
- try {
449
- await doRequest();
450
- }
451
- finally {
452
- clearTimeout(timer);
453
- }
454
- }
455
- return results;
456
- }
457
- /**
458
- * Generate embeddings via Ollama API.
459
- * Supports single and batch embedding.
460
- * Results are cached per text hash — cache hits skip the Ollama call entirely.
461
- */
462
- export async function generateEmbeddings(texts, config = DEFAULT_EMBEDDING_CONFIG) {
463
- // 'none' provider: explicit no-op — semantic search disabled, FTS5 fallback only
464
- if (config.provider === 'none')
465
- return [];
466
- // Apply provider-specific defaults when provider is 'openai' and fields are at Ollama defaults
467
- if (config.provider === 'openai') {
468
- // Merge: OpenAI defaults fill in any unset fields, user-supplied values always win
469
- config = {
470
- ...DEFAULT_EMBEDDING_CONFIG,
471
- ...config,
472
- model: config.model !== DEFAULT_EMBEDDING_CONFIG.model ? config.model : OPENAI_DEFAULTS.model,
473
- dimensions: config.dimensions !== DEFAULT_EMBEDDING_CONFIG.dimensions ? config.dimensions : OPENAI_DEFAULTS.dimensions,
474
- batchSize: config.batchSize !== DEFAULT_EMBEDDING_CONFIG.batchSize ? config.batchSize : OPENAI_DEFAULTS.batchSize,
475
- };
476
- // OpenAI path — no LRU cache (responses are billed; caching at this layer
477
- // adds complexity without proportional benefit given async background use).
478
- return generateOpenAIEmbeddings(texts, config);
479
- }
480
- if (config.provider === 'gemini') {
481
- config = {
482
- ...DEFAULT_EMBEDDING_CONFIG,
483
- ...config,
484
- model: config.model !== DEFAULT_EMBEDDING_CONFIG.model ? config.model : GEMINI_DEFAULTS.model,
485
- dimensions: config.dimensions !== DEFAULT_EMBEDDING_CONFIG.dimensions ? config.dimensions : GEMINI_DEFAULTS.dimensions,
486
- batchSize: config.batchSize !== DEFAULT_EMBEDDING_CONFIG.batchSize ? config.batchSize : GEMINI_DEFAULTS.batchSize,
487
- };
488
- // Gemini path — no LRU cache (same rationale as OpenAI: billed API calls,
489
- // background indexing context, minimal benefit from this-layer caching).
490
- return generateGeminiEmbeddings(texts, config);
491
- }
492
- if (texts.length === 0)
493
- return [];
494
- const maxSize = Math.min(config.cacheSize ?? DEFAULT_EMBEDDING_CONFIG.cacheSize ?? 128, 10_000 // Hard cap: prevent unbounded memory growth from operator misconfiguration
495
- );
496
- const results = new Array(texts.length).fill(null);
497
- // Check cache first — build list of texts that need Ollama calls
498
- const uncachedIndices = [];
499
- for (let i = 0; i < texts.length; i++) {
500
- const key = simpleHash(texts[i]);
501
- const cached = _embeddingCache.get(key);
502
- if (cached) {
503
- results[i] = cached.embedding;
504
- }
505
- else {
506
- uncachedIndices.push(i);
507
- }
508
- }
509
- if (uncachedIndices.length === 0) {
510
- return results;
511
- }
512
- // Fetch uncached texts from Ollama in batches
513
- const uncachedTexts = uncachedIndices.map(i => texts[i]);
514
- const ollamaResults = [];
515
- // Ollama /api/embed supports batch via `input` array
516
- for (let i = 0; i < uncachedTexts.length; i += config.batchSize) {
517
- const batch = uncachedTexts.slice(i, i + config.batchSize);
518
- const controller = new AbortController();
519
- const timer = setTimeout(() => controller.abort(), config.timeout);
520
- try {
521
- const response = await fetch(`${config.ollamaUrl}/api/embed`, {
522
- method: 'POST',
523
- headers: { 'Content-Type': 'application/json' },
524
- body: JSON.stringify({
525
- model: config.model,
526
- input: batch,
527
- }),
528
- signal: controller.signal,
529
- });
530
- if (!response.ok) {
531
- throw new Error(`Ollama embedding failed: ${response.status} ${response.statusText}`);
532
- }
533
- const data = await response.json();
534
- for (const embedding of data.embeddings) {
535
- if (embedding.length !== config.dimensions) {
536
- throw new Error(`Embedding dimension mismatch: expected ${config.dimensions}, got ${embedding.length}`);
537
- }
538
- ollamaResults.push(new Float32Array(embedding));
539
- }
540
- }
541
- finally {
542
- clearTimeout(timer);
543
- }
544
- }
545
- // Populate cache and fill results array
546
- for (let j = 0; j < uncachedIndices.length; j++) {
547
- const origIdx = uncachedIndices[j];
548
- const embedding = ollamaResults[j];
549
- results[origIdx] = embedding;
550
- cachePut(simpleHash(texts[origIdx]), embedding, maxSize);
551
- }
552
- return results;
553
- }
554
- /**
555
- * Serialize a Float32Array to Uint8Array for sqlite-vec binding.
556
- */
557
- function vecToBytes(vec) {
558
- return new Uint8Array(vec.buffer, vec.byteOffset, vec.byteLength);
559
- }
560
- /**
561
- * VectorStore — manages vector indexes in an agent's vector database.
562
- *
563
- * The vector DB (vectors.db) stores vec0 virtual tables and the index map.
564
- * Source content (facts, knowledge, episodes) lives in the library DB.
565
- * The VectorStore needs both: vectorDb for indexes, libraryDb for content.
566
- */
567
- export class VectorStore {
568
- db; // vectors.db
569
- libraryDb; // library.db for source content
570
- config;
571
- constructor(db, config, libraryDb) {
572
- this.db = db;
573
- this.libraryDb = libraryDb || null;
574
- this.config = { ...DEFAULT_EMBEDDING_CONFIG, ...config };
575
- }
576
- /**
577
- * Create vector index tables if they don't exist.
578
- * Safe to call multiple times (idempotent).
579
- */
580
- ensureTables() {
581
- const dim = this.config.dimensions;
582
- // Vector index for facts
583
- this.db.exec(`
584
- CREATE VIRTUAL TABLE IF NOT EXISTS vec_facts
585
- USING vec0(embedding float[${dim}])
586
- `);
587
- // Vector index for knowledge
588
- this.db.exec(`
589
- CREATE VIRTUAL TABLE IF NOT EXISTS vec_knowledge
590
- USING vec0(embedding float[${dim}])
591
- `);
592
- // Vector index for episodes
593
- this.db.exec(`
594
- CREATE VIRTUAL TABLE IF NOT EXISTS vec_episodes
595
- USING vec0(embedding float[${dim}])
596
- `);
597
- // Vector index for session registry (library DB)
598
- // This is created separately via ensureSessionRegistryTable()
599
- // Mapping table: links vec rowids to source table rows
600
- // Using a single mapping table for all vec tables
601
- this.db.exec(`
602
- CREATE TABLE IF NOT EXISTS vec_index_map (
603
- id INTEGER PRIMARY KEY AUTOINCREMENT,
604
- source_table TEXT NOT NULL,
605
- source_id INTEGER NOT NULL,
606
- vec_table TEXT NOT NULL,
607
- content_hash TEXT NOT NULL,
608
- indexed_at TEXT NOT NULL,
609
- UNIQUE(source_table, source_id)
610
- )
611
- `);
612
- this.db.exec('CREATE INDEX IF NOT EXISTS idx_vec_map_source ON vec_index_map(source_table, source_id)');
613
- this.db.exec('CREATE INDEX IF NOT EXISTS idx_vec_map_vec ON vec_index_map(vec_table, id)');
614
- }
615
- /**
616
- * Index a single content item. Generates embedding and stores in vec table.
617
- * Skips if content hasn't changed (based on hash).
618
- */
619
- /** Allowlisted source tables for vector indexing. Prevents SQL injection via table name interpolation. */
620
- static ALLOWED_SOURCE_TABLES = new Set(['facts', 'knowledge', 'episodes', 'sessions']);
621
- validateSourceTable(sourceTable) {
622
- if (!VectorStore.ALLOWED_SOURCE_TABLES.has(sourceTable)) {
623
- throw new Error(`Invalid sourceTable: "${sourceTable}". Must be one of: ${[...VectorStore.ALLOWED_SOURCE_TABLES].join(', ')}`);
624
- }
625
- }
626
- async indexItem(sourceTable, sourceId, content, domain) {
627
- this.validateSourceTable(sourceTable);
628
- const vecTable = `vec_${sourceTable}`;
629
- const contentHash = simpleHash(content);
630
- // Check if already indexed with same content
631
- const existing = this.db
632
- .prepare('SELECT id, content_hash FROM vec_index_map WHERE source_table = ? AND source_id = ?')
633
- .get(sourceTable, sourceId);
634
- if (existing && existing.content_hash === contentHash) {
635
- return false; // Already indexed, content unchanged
636
- }
637
- // Generate embedding
638
- const [embedding] = await generateEmbeddings([content], this.config);
639
- const bytes = vecToBytes(embedding);
640
- if (existing) {
641
- // Update: delete old vector, insert new
642
- this.db.prepare(`DELETE FROM ${vecTable} WHERE rowid = CAST(? AS INTEGER)`).run(existing.id);
643
- this.db.prepare(`INSERT INTO ${vecTable}(rowid, embedding) VALUES (CAST(? AS INTEGER), ?)`).run(existing.id, bytes);
644
- this.db
645
- .prepare('UPDATE vec_index_map SET content_hash = ?, indexed_at = ? WHERE id = ?')
646
- .run(contentHash, new Date().toISOString(), existing.id);
647
- }
648
- else {
649
- // Insert new mapping row first to get the rowid
650
- const mapResult = this.db
651
- .prepare('INSERT INTO vec_index_map (source_table, source_id, vec_table, content_hash, indexed_at) VALUES (?, ?, ?, ?, ?)')
652
- .run(sourceTable, sourceId, vecTable, contentHash, new Date().toISOString());
653
- const mapRowId = Number(mapResult.lastInsertRowid);
654
- // Insert vector with matching rowid
655
- this.db.prepare(`INSERT INTO ${vecTable}(rowid, embedding) VALUES (CAST(? AS INTEGER), ?)`).run(mapRowId, bytes);
656
- }
657
- return true;
658
- }
659
- /**
660
- * Batch index multiple items. More efficient than individual calls.
661
- */
662
- async indexBatch(items) {
663
- let indexed = 0;
664
- let skipped = 0;
665
- // Validate all source tables before processing any items
666
- for (const item of items) {
667
- this.validateSourceTable(item.sourceTable);
668
- }
669
- // Filter out already-indexed items
670
- const toIndex = [];
671
- for (const item of items) {
672
- const contentHash = simpleHash(item.content);
673
- const existing = this.db
674
- .prepare('SELECT content_hash FROM vec_index_map WHERE source_table = ? AND source_id = ?')
675
- .get(item.sourceTable, item.sourceId);
676
- if (existing && existing.content_hash === contentHash) {
677
- skipped++;
678
- }
679
- else {
680
- toIndex.push(item);
681
- }
682
- }
683
- if (toIndex.length === 0)
684
- return { indexed, skipped };
685
- // Batch generate embeddings
686
- const texts = toIndex.map(item => item.content);
687
- const embeddings = await generateEmbeddings(texts, this.config);
688
- // Insert in a transaction
689
- this.db.exec('BEGIN');
690
- try {
691
- for (let i = 0; i < toIndex.length; i++) {
692
- const item = toIndex[i];
693
- const embedding = embeddings[i];
694
- const vecTable = `vec_${item.sourceTable}`;
695
- const contentHash = simpleHash(item.content);
696
- const bytes = vecToBytes(embedding);
697
- // Check for existing mapping (might need update vs insert)
698
- const existing = this.db
699
- .prepare('SELECT id FROM vec_index_map WHERE source_table = ? AND source_id = ?')
700
- .get(item.sourceTable, item.sourceId);
701
- if (existing) {
702
- this.db.prepare(`DELETE FROM ${vecTable} WHERE rowid = CAST(? AS INTEGER)`).run(existing.id);
703
- this.db.prepare(`INSERT INTO ${vecTable}(rowid, embedding) VALUES (CAST(? AS INTEGER), ?)`).run(existing.id, bytes);
704
- this.db
705
- .prepare('UPDATE vec_index_map SET content_hash = ?, indexed_at = ? WHERE id = ?')
706
- .run(contentHash, new Date().toISOString(), existing.id);
707
- }
708
- else {
709
- const mapResult = this.db
710
- .prepare('INSERT INTO vec_index_map (source_table, source_id, vec_table, content_hash, indexed_at) VALUES (?, ?, ?, ?, ?)')
711
- .run(item.sourceTable, item.sourceId, vecTable, contentHash, new Date().toISOString());
712
- const mapRowId = Number(mapResult.lastInsertRowid);
713
- this.db.prepare(`INSERT INTO ${vecTable}(rowid, embedding) VALUES (CAST(? AS INTEGER), ?)`).run(mapRowId, bytes);
714
- }
715
- indexed++;
716
- }
717
- this.db.exec('COMMIT');
718
- }
719
- catch (err) {
720
- this.db.exec('ROLLBACK');
721
- throw err;
722
- }
723
- return { indexed, skipped };
724
- }
725
- /**
726
- * Semantic KNN search across one or all vector tables.
727
- *
728
- * @param precomputedEmbedding — optional pre-computed embedding for the query.
729
- * When provided, skips the Ollama call entirely. The precomputed embedding
730
- * is still inserted into the LRU cache so subsequent identical queries hit.
731
- */
732
- async search(query, opts) {
733
- const limit = opts?.limit || 10;
734
- const tables = opts?.tables || ['facts', 'knowledge', 'episodes'];
735
- // Validate all table names before any SQL construction
736
- for (const table of tables) {
737
- this.validateSourceTable(table);
738
- }
739
- // Use precomputed embedding if provided, otherwise call Ollama
740
- let queryEmbedding;
741
- if (opts?.precomputedEmbedding) {
742
- queryEmbedding = opts.precomputedEmbedding;
743
- // Populate LRU cache so subsequent queries for the same text hit
744
- const maxSize = this.config.cacheSize ?? 128;
745
- cachePut(simpleHash(query), queryEmbedding, maxSize);
746
- }
747
- else {
748
- [queryEmbedding] = await generateEmbeddings([query], this.config);
749
- }
750
- const queryBytes = vecToBytes(queryEmbedding);
751
- const results = [];
752
- for (const table of tables) {
753
- const vecTable = `vec_${table}`;
754
- // Check if the vec table exists
755
- const tableExists = this.db
756
- .prepare("SELECT count(*) as cnt FROM sqlite_master WHERE type='table' AND name=?")
757
- .get(vecTable);
758
- if (!tableExists || tableExists.cnt === 0)
759
- continue;
760
- // KNN query
761
- const rows = this.db
762
- .prepare(`SELECT rowid, distance
763
- FROM ${vecTable}
764
- WHERE embedding MATCH ?
765
- ORDER BY distance
766
- LIMIT ?`)
767
- .all(queryBytes, limit);
768
- for (const row of rows) {
769
- if (opts?.maxDistance !== undefined && row.distance > opts.maxDistance)
770
- continue;
771
- // Look up source from mapping table
772
- const mapping = this.db
773
- .prepare('SELECT source_table, source_id FROM vec_index_map WHERE id = ?')
774
- .get(row.rowid);
775
- if (!mapping)
776
- continue;
777
- // Fetch actual content from source table
778
- const sourceContent = this.getSourceContent(mapping.source_table, mapping.source_id);
779
- if (!sourceContent)
780
- continue;
781
- results.push({
782
- rowid: row.rowid,
783
- distance: row.distance,
784
- sourceTable: mapping.source_table,
785
- sourceId: mapping.source_id,
786
- content: sourceContent.content,
787
- domain: sourceContent.domain,
788
- agentId: sourceContent.agentId,
789
- metadata: sourceContent.metadata,
790
- });
791
- }
792
- }
793
- // Sort all results by distance (cross-table)
794
- results.sort((a, b) => a.distance - b.distance);
795
- return results.slice(0, limit);
796
- }
797
- /**
798
- * Get content from a source table by id.
799
- */
800
- getSourceContent(table, id) {
801
- // Source content lives in the library DB (facts, knowledge, episodes)
802
- // or in the vector DB itself (if old schema). Try library first.
803
- const sourceDb = this.libraryDb || this.db;
804
- switch (table) {
805
- case 'facts': {
806
- const row = sourceDb
807
- .prepare('SELECT content, domain, agent_id FROM facts WHERE id = ? AND superseded_by IS NULL')
808
- .get(id);
809
- return row ? { content: row.content, domain: row.domain, agentId: row.agent_id } : null;
810
- }
811
- case 'knowledge': {
812
- const row = sourceDb
813
- .prepare('SELECT content, domain, agent_id, key FROM knowledge WHERE id = ? AND superseded_by IS NULL')
814
- .get(id);
815
- return row
816
- ? { content: row.content, domain: row.domain, agentId: row.agent_id, metadata: row.key }
817
- : null;
818
- }
819
- case 'episodes': {
820
- const row = sourceDb
821
- .prepare('SELECT summary, event_type, agent_id, participants FROM episodes WHERE id = ?')
822
- .get(id);
823
- return row
824
- ? {
825
- content: row.summary,
826
- domain: row.event_type,
827
- agentId: row.agent_id,
828
- metadata: row.participants,
829
- }
830
- : null;
831
- }
832
- default:
833
- return null;
834
- }
835
- }
836
- /**
837
- * Index all un-indexed content in the agent's database.
838
- * Called by the background indexer.
839
- */
840
- async indexAll(agentId) {
841
- const items = [];
842
- const sourceDb = this.libraryDb || this.db;
843
- // Count already-indexed items for accurate skip reporting
844
- const alreadyIndexed = this.db
845
- .prepare('SELECT COUNT(*) as cnt FROM vec_index_map')
846
- .get().cnt;
847
- // Get IDs already indexed (in vector DB)
848
- const indexedFacts = new Set(this.db.prepare("SELECT source_id FROM vec_index_map WHERE source_table = 'facts'")
849
- .all().map(r => r.source_id));
850
- const indexedKnowledge = new Set(this.db.prepare("SELECT source_id FROM vec_index_map WHERE source_table = 'knowledge'")
851
- .all().map(r => r.source_id));
852
- const indexedEpisodes = new Set(this.db.prepare("SELECT source_id FROM vec_index_map WHERE source_table = 'episodes'")
853
- .all().map(r => r.source_id));
854
- // Collect un-indexed facts from library DB
855
- const facts = sourceDb
856
- .prepare('SELECT id, content, domain FROM facts WHERE agent_id = ? AND superseded_by IS NULL')
857
- .all(agentId);
858
- for (const f of facts) {
859
- if (!indexedFacts.has(f.id)) {
860
- items.push({ sourceTable: 'facts', sourceId: f.id, content: f.content });
861
- }
862
- }
863
- // Collect un-indexed knowledge from library DB
864
- const knowledge = sourceDb
865
- .prepare('SELECT id, content, domain, key FROM knowledge WHERE agent_id = ? AND superseded_by IS NULL')
866
- .all(agentId);
867
- for (const k of knowledge) {
868
- if (!indexedKnowledge.has(k.id)) {
869
- items.push({
870
- sourceTable: 'knowledge',
871
- sourceId: k.id,
872
- content: `${k.key}: ${k.content}`,
873
- });
874
- }
875
- }
876
- // Collect un-indexed episodes from library DB
877
- const episodes = sourceDb
878
- .prepare('SELECT id, summary, event_type FROM episodes WHERE agent_id = ?')
879
- .all(agentId);
880
- for (const e of episodes) {
881
- if (!indexedEpisodes.has(e.id)) {
882
- items.push({ sourceTable: 'episodes', sourceId: e.id, content: e.summary });
883
- }
884
- }
885
- if (items.length === 0) {
886
- return { indexed: 0, skipped: alreadyIndexed };
887
- }
888
- const result = await this.indexBatch(items);
889
- return { indexed: result.indexed, skipped: result.skipped + alreadyIndexed };
890
- }
891
- /**
892
- * Remove vector index entries for deleted source rows.
893
- */
894
- pruneOrphans() {
895
- let pruned = 0;
896
- const sourceDb = this.libraryDb || this.db;
897
- for (const table of ['facts', 'knowledge', 'episodes']) {
898
- // Get all indexed IDs for this table
899
- const indexed = this.db
900
- .prepare('SELECT id, vec_table, source_id FROM vec_index_map WHERE source_table = ?')
901
- .all(table);
902
- for (const entry of indexed) {
903
- // Check if source still exists in library DB
904
- const exists = sourceDb
905
- .prepare(`SELECT 1 FROM ${table} WHERE id = ?`)
906
- .get(entry.source_id);
907
- if (!exists) {
908
- this.db.prepare(`DELETE FROM ${entry.vec_table} WHERE rowid = CAST(? AS INTEGER)`).run(entry.id);
909
- this.db.prepare('DELETE FROM vec_index_map WHERE id = ?').run(entry.id);
910
- pruned++;
911
- }
912
- }
913
- }
914
- return pruned;
915
- }
916
- /**
917
- * Remove the vector index entry for a single source item.
918
- *
919
- * Deletes both the vec table row and the vec_index_map entry for the given
920
- * (sourceTable, sourceId) pair. Used by the background indexer for immediate
921
- * point-in-time removal when a supersedes relationship is detected.
922
- *
923
- * @returns true if an entry was found and removed, false if nothing was indexed.
924
- */
925
- removeItem(sourceTable, sourceId) {
926
- this.validateSourceTable(sourceTable);
927
- const entry = this.db
928
- .prepare('SELECT id, vec_table FROM vec_index_map WHERE source_table = ? AND source_id = ?')
929
- .get(sourceTable, sourceId);
930
- if (!entry)
931
- return false;
932
- this.db.prepare(`DELETE FROM ${entry.vec_table} WHERE rowid = CAST(? AS INTEGER)`).run(entry.id);
933
- this.db.prepare('DELETE FROM vec_index_map WHERE id = ?').run(entry.id);
934
- return true;
935
- }
936
- /**
937
- * Check whether a source item already has a vector in the index.
938
- * Used by the episode backfill to skip already-vectorized entries.
939
- */
940
- hasItem(sourceTable, sourceId) {
941
- this.validateSourceTable(sourceTable);
942
- const row = this.db
943
- .prepare('SELECT 1 FROM vec_index_map WHERE source_table = ? AND source_id = ? LIMIT 1')
944
- .get(sourceTable, sourceId);
945
- return row !== undefined;
946
- }
947
- /**
948
- * Tombstone vector entries for superseded facts and knowledge.
949
- *
950
- * When fact A is superseded by fact B (facts.superseded_by = B.id), the old
951
- * vector for A should not surface in semantic recall. Without this, recalled
952
- * context can include contradicted/outdated facts alongside their replacements.
953
- *
954
- * Strategy: find all indexed facts/knowledge with superseded_by IS NOT NULL
955
- * and delete their vec_index_map entries + vec table rows. The source row
956
- * stays in library.db (audit trail) but disappears from recall.
957
- *
958
- * @returns Number of vector entries tombstoned.
959
- */
960
- tombstoneSuperseded() {
961
- const sourceDb = this.libraryDb || this.db;
962
- let tombstoned = 0;
963
- for (const table of ['facts', 'knowledge']) {
964
- // Find all indexed entries whose source row has been superseded
965
- const indexed = this.db
966
- .prepare('SELECT vim.id, vim.vec_table, vim.source_id FROM vec_index_map vim WHERE vim.source_table = ?')
967
- .all(table);
968
- for (const entry of indexed) {
969
- const row = sourceDb
970
- .prepare(`SELECT superseded_by FROM ${table} WHERE id = ?`)
971
- .get(entry.source_id);
972
- if (row?.superseded_by != null) {
973
- // Remove from vector table
974
- this.db.prepare(`DELETE FROM ${entry.vec_table} WHERE rowid = CAST(? AS INTEGER)`).run(entry.id);
975
- // Remove from index map
976
- this.db.prepare('DELETE FROM vec_index_map WHERE id = ?').run(entry.id);
977
- tombstoned++;
978
- }
979
- }
980
- }
981
- if (tombstoned > 0) {
982
- console.log(`[hypermem-vector] tombstoneSuperseded: removed ${tombstoned} stale vector entries`);
983
- }
984
- return tombstoned;
985
- }
986
- /**
987
- * Get index statistics.
988
- */
989
- getStats() {
990
- // Guard: vec_index_map may not exist yet if ensureTables() hasn't been called
991
- // (e.g. openclaw status calls getStats via memory-plugin before first agent session)
992
- const tableExists = this.db
993
- .prepare("SELECT 1 FROM sqlite_master WHERE type='table' AND name='vec_index_map' LIMIT 1")
994
- .get();
995
- if (!tableExists) {
996
- return { totalVectors: 0, tableBreakdown: {}, lastIndexedAt: null };
997
- }
998
- const breakdown = {};
999
- let total = 0;
1000
- for (const table of ['facts', 'knowledge', 'episodes']) {
1001
- const count = this.db
1002
- .prepare('SELECT COUNT(*) as cnt FROM vec_index_map WHERE source_table = ?')
1003
- .get(table);
1004
- breakdown[table] = count.cnt;
1005
- total += count.cnt;
1006
- }
1007
- const lastIndexed = this.db
1008
- .prepare('SELECT MAX(indexed_at) as last_at FROM vec_index_map')
1009
- .get();
1010
- return {
1011
- totalVectors: total,
1012
- tableBreakdown: breakdown,
1013
- lastIndexedAt: lastIndexed.last_at,
1014
- };
1015
- }
1016
- }
1017
- /**
1018
- * SHA-256 content hash for change detection and deduplication.
1019
- * Replaces the prior 32-bit rolling hash which had collision risk on large corpora.
1020
- */
1021
- function simpleHash(str) {
1022
- return createHash('sha256').update(str).digest('hex').slice(0, 16);
1023
- }
1024
- /**
1025
- * Create vector tables in a library database for session registry search.
1026
- */
1027
- export function ensureSessionVecTable(db, dimensions = 768) {
1028
- db.exec(`
1029
- CREATE VIRTUAL TABLE IF NOT EXISTS vec_sessions
1030
- USING vec0(embedding float[${dimensions}])
1031
- `);
1032
- db.exec(`
1033
- CREATE TABLE IF NOT EXISTS vec_session_map (
1034
- id INTEGER PRIMARY KEY AUTOINCREMENT,
1035
- session_id TEXT NOT NULL UNIQUE,
1036
- content_hash TEXT NOT NULL,
1037
- indexed_at TEXT NOT NULL
1038
- )
1039
- `);
1040
- }
1041
- //# sourceMappingURL=vector-store.js.map