@psiclawops/hypermem 0.8.5 → 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 (933) hide show
  1. package/ARCHITECTURE.md +2 -2
  2. package/CHANGELOG.md +36 -1
  3. package/INSTALL.md +132 -9
  4. package/README.md +119 -272
  5. package/bench/README.md +42 -0
  6. package/bench/data-access-bench.mjs +380 -0
  7. package/bin/hypermem-bench.mjs +2 -0
  8. package/bin/hypermem-doctor.mjs +412 -0
  9. package/bin/hypermem-model-audit.mjs +339 -0
  10. package/bin/hypermem-status.mjs +491 -70
  11. package/docs/DIAGNOSTICS.md +205 -0
  12. package/docs/INTEGRATION_VALIDATION.md +186 -0
  13. package/docs/MIGRATION.md +9 -6
  14. package/docs/MIGRATION_GUIDE.md +125 -101
  15. package/docs/ROADMAP.md +247 -20
  16. package/docs/TUNING.md +19 -5
  17. package/install.sh +152 -401
  18. package/memory-plugin/LICENSE +190 -0
  19. package/memory-plugin/README.md +20 -0
  20. package/memory-plugin/package.json +3 -3
  21. package/package.json +19 -4
  22. package/plugin/LICENSE +190 -0
  23. package/plugin/README.md +20 -0
  24. package/plugin/package.json +4 -4
  25. package/scripts/install-runtime.mjs +12 -1
  26. package/dist/background-indexer.d.ts +0 -161
  27. package/dist/background-indexer.d.ts.map +0 -1
  28. package/dist/background-indexer.js +0 -1263
  29. package/dist/budget-policy.d.ts +0 -22
  30. package/dist/budget-policy.d.ts.map +0 -1
  31. package/dist/budget-policy.js +0 -27
  32. package/dist/cache.d.ts +0 -147
  33. package/dist/cache.d.ts.map +0 -1
  34. package/dist/cache.js +0 -569
  35. package/dist/compaction-fence.d.ts +0 -97
  36. package/dist/compaction-fence.d.ts.map +0 -1
  37. package/dist/compaction-fence.js +0 -174
  38. package/dist/compositor-utils.d.ts +0 -31
  39. package/dist/compositor-utils.d.ts.map +0 -1
  40. package/dist/compositor-utils.js +0 -47
  41. package/dist/compositor.d.ts +0 -394
  42. package/dist/compositor.d.ts.map +0 -1
  43. package/dist/compositor.js +0 -3632
  44. package/dist/content-hash.d.ts +0 -43
  45. package/dist/content-hash.d.ts.map +0 -1
  46. package/dist/content-hash.js +0 -75
  47. package/dist/content-type-classifier.d.ts +0 -41
  48. package/dist/content-type-classifier.d.ts.map +0 -1
  49. package/dist/content-type-classifier.js +0 -181
  50. package/dist/context-backfill.d.ts +0 -46
  51. package/dist/context-backfill.d.ts.map +0 -1
  52. package/dist/context-backfill.js +0 -113
  53. package/dist/context-store.d.ts +0 -131
  54. package/dist/context-store.d.ts.map +0 -1
  55. package/dist/context-store.js +0 -279
  56. package/dist/contradiction-audit-store.d.ts +0 -54
  57. package/dist/contradiction-audit-store.d.ts.map +0 -1
  58. package/dist/contradiction-audit-store.js +0 -88
  59. package/dist/contradiction-detector.d.ts +0 -78
  60. package/dist/contradiction-detector.d.ts.map +0 -1
  61. package/dist/contradiction-detector.js +0 -362
  62. package/dist/contradiction-resolution-policy.d.ts +0 -21
  63. package/dist/contradiction-resolution-policy.d.ts.map +0 -1
  64. package/dist/contradiction-resolution-policy.js +0 -17
  65. package/dist/cross-agent.d.ts +0 -74
  66. package/dist/cross-agent.d.ts.map +0 -1
  67. package/dist/cross-agent.js +0 -271
  68. package/dist/db.d.ts +0 -131
  69. package/dist/db.d.ts.map +0 -1
  70. package/dist/db.js +0 -410
  71. package/dist/degradation.d.ts +0 -102
  72. package/dist/degradation.d.ts.map +0 -1
  73. package/dist/degradation.js +0 -141
  74. package/dist/desired-state-store.d.ts +0 -100
  75. package/dist/desired-state-store.d.ts.map +0 -1
  76. package/dist/desired-state-store.js +0 -222
  77. package/dist/doc-chunk-store.d.ts +0 -140
  78. package/dist/doc-chunk-store.d.ts.map +0 -1
  79. package/dist/doc-chunk-store.js +0 -391
  80. package/dist/doc-chunker.d.ts +0 -99
  81. package/dist/doc-chunker.d.ts.map +0 -1
  82. package/dist/doc-chunker.js +0 -324
  83. package/dist/dreaming-promoter.d.ts +0 -124
  84. package/dist/dreaming-promoter.d.ts.map +0 -1
  85. package/dist/dreaming-promoter.js +0 -447
  86. package/dist/episode-store.d.ts +0 -49
  87. package/dist/episode-store.d.ts.map +0 -1
  88. package/dist/episode-store.js +0 -135
  89. package/dist/expertise-store.d.ts +0 -129
  90. package/dist/expertise-store.d.ts.map +0 -1
  91. package/dist/expertise-store.js +0 -342
  92. package/dist/fact-store.d.ts +0 -90
  93. package/dist/fact-store.d.ts.map +0 -1
  94. package/dist/fact-store.js +0 -283
  95. package/dist/fleet-store.d.ts +0 -144
  96. package/dist/fleet-store.d.ts.map +0 -1
  97. package/dist/fleet-store.js +0 -276
  98. package/dist/fos-mod.d.ts +0 -178
  99. package/dist/fos-mod.d.ts.map +0 -1
  100. package/dist/fos-mod.js +0 -416
  101. package/dist/hybrid-retrieval.d.ts +0 -64
  102. package/dist/hybrid-retrieval.d.ts.map +0 -1
  103. package/dist/hybrid-retrieval.js +0 -344
  104. package/dist/image-eviction.d.ts +0 -49
  105. package/dist/image-eviction.d.ts.map +0 -1
  106. package/dist/image-eviction.js +0 -251
  107. package/dist/index.d.ts +0 -718
  108. package/dist/index.d.ts.map +0 -1
  109. package/dist/index.js +0 -1469
  110. package/dist/keystone-scorer.d.ts +0 -51
  111. package/dist/keystone-scorer.d.ts.map +0 -1
  112. package/dist/keystone-scorer.js +0 -52
  113. package/dist/knowledge-graph.d.ts +0 -110
  114. package/dist/knowledge-graph.d.ts.map +0 -1
  115. package/dist/knowledge-graph.js +0 -305
  116. package/dist/knowledge-lint.d.ts +0 -31
  117. package/dist/knowledge-lint.d.ts.map +0 -1
  118. package/dist/knowledge-lint.js +0 -155
  119. package/dist/knowledge-store.d.ts +0 -72
  120. package/dist/knowledge-store.d.ts.map +0 -1
  121. package/dist/knowledge-store.js +0 -247
  122. package/dist/library-schema.d.ts +0 -27
  123. package/dist/library-schema.d.ts.map +0 -1
  124. package/dist/library-schema.js +0 -1343
  125. package/dist/message-store.d.ts +0 -181
  126. package/dist/message-store.d.ts.map +0 -1
  127. package/dist/message-store.js +0 -573
  128. package/dist/metrics-dashboard.d.ts +0 -114
  129. package/dist/metrics-dashboard.d.ts.map +0 -1
  130. package/dist/metrics-dashboard.js +0 -260
  131. package/dist/obsidian-exporter.d.ts +0 -57
  132. package/dist/obsidian-exporter.d.ts.map +0 -1
  133. package/dist/obsidian-exporter.js +0 -274
  134. package/dist/obsidian-watcher.d.ts +0 -147
  135. package/dist/obsidian-watcher.d.ts.map +0 -1
  136. package/dist/obsidian-watcher.js +0 -403
  137. package/dist/open-domain.d.ts +0 -46
  138. package/dist/open-domain.d.ts.map +0 -1
  139. package/dist/open-domain.js +0 -125
  140. package/dist/preference-store.d.ts +0 -54
  141. package/dist/preference-store.d.ts.map +0 -1
  142. package/dist/preference-store.js +0 -109
  143. package/dist/preservation-gate.d.ts +0 -82
  144. package/dist/preservation-gate.d.ts.map +0 -1
  145. package/dist/preservation-gate.js +0 -150
  146. package/dist/proactive-pass.d.ts +0 -63
  147. package/dist/proactive-pass.d.ts.map +0 -1
  148. package/dist/proactive-pass.js +0 -293
  149. package/dist/profiles.d.ts +0 -46
  150. package/dist/profiles.d.ts.map +0 -1
  151. package/dist/profiles.js +0 -262
  152. package/dist/provider-translator.d.ts +0 -50
  153. package/dist/provider-translator.d.ts.map +0 -1
  154. package/dist/provider-translator.js +0 -403
  155. package/dist/rate-limiter.d.ts +0 -76
  156. package/dist/rate-limiter.d.ts.map +0 -1
  157. package/dist/rate-limiter.js +0 -179
  158. package/dist/repair-tool-pairs.d.ts +0 -38
  159. package/dist/repair-tool-pairs.d.ts.map +0 -1
  160. package/dist/repair-tool-pairs.js +0 -209
  161. package/dist/replay-recovery.d.ts +0 -29
  162. package/dist/replay-recovery.d.ts.map +0 -1
  163. package/dist/replay-recovery.js +0 -82
  164. package/dist/reranker.d.ts +0 -95
  165. package/dist/reranker.d.ts.map +0 -1
  166. package/dist/reranker.js +0 -308
  167. package/dist/retrieval-policy.d.ts +0 -51
  168. package/dist/retrieval-policy.d.ts.map +0 -1
  169. package/dist/retrieval-policy.js +0 -77
  170. package/dist/schema.d.ts +0 -15
  171. package/dist/schema.d.ts.map +0 -1
  172. package/dist/schema.js +0 -300
  173. package/dist/secret-scanner.d.ts +0 -51
  174. package/dist/secret-scanner.d.ts.map +0 -1
  175. package/dist/secret-scanner.js +0 -248
  176. package/dist/seed.d.ts +0 -108
  177. package/dist/seed.d.ts.map +0 -1
  178. package/dist/seed.js +0 -177
  179. package/dist/session-flusher.d.ts +0 -53
  180. package/dist/session-flusher.d.ts.map +0 -1
  181. package/dist/session-flusher.js +0 -69
  182. package/dist/session-topic-map.d.ts +0 -41
  183. package/dist/session-topic-map.d.ts.map +0 -1
  184. package/dist/session-topic-map.js +0 -77
  185. package/dist/spawn-context.d.ts +0 -54
  186. package/dist/spawn-context.d.ts.map +0 -1
  187. package/dist/spawn-context.js +0 -159
  188. package/dist/system-store.d.ts +0 -73
  189. package/dist/system-store.d.ts.map +0 -1
  190. package/dist/system-store.js +0 -182
  191. package/dist/temporal-store.d.ts +0 -81
  192. package/dist/temporal-store.d.ts.map +0 -1
  193. package/dist/temporal-store.js +0 -149
  194. package/dist/tool-artifact-store.d.ts +0 -98
  195. package/dist/tool-artifact-store.d.ts.map +0 -1
  196. package/dist/tool-artifact-store.js +0 -244
  197. package/dist/topic-detector.d.ts +0 -35
  198. package/dist/topic-detector.d.ts.map +0 -1
  199. package/dist/topic-detector.js +0 -249
  200. package/dist/topic-store.d.ts +0 -51
  201. package/dist/topic-store.d.ts.map +0 -1
  202. package/dist/topic-store.js +0 -175
  203. package/dist/topic-synthesizer.d.ts +0 -51
  204. package/dist/topic-synthesizer.d.ts.map +0 -1
  205. package/dist/topic-synthesizer.js +0 -316
  206. package/dist/trigger-registry.d.ts +0 -63
  207. package/dist/trigger-registry.d.ts.map +0 -1
  208. package/dist/trigger-registry.js +0 -163
  209. package/dist/types.d.ts +0 -815
  210. package/dist/types.d.ts.map +0 -1
  211. package/dist/types.js +0 -9
  212. package/dist/vector-store.d.ts +0 -180
  213. package/dist/vector-store.d.ts.map +0 -1
  214. package/dist/vector-store.js +0 -1041
  215. package/dist/version.d.ts +0 -34
  216. package/dist/version.d.ts.map +0 -1
  217. package/dist/version.js +0 -34
  218. package/dist/wiki-page-emitter.d.ts +0 -65
  219. package/dist/wiki-page-emitter.d.ts.map +0 -1
  220. package/dist/wiki-page-emitter.js +0 -258
  221. package/dist/work-store.d.ts +0 -112
  222. package/dist/work-store.d.ts.map +0 -1
  223. package/dist/work-store.js +0 -273
  224. package/memory-plugin/dist/index.d.ts +0 -24
  225. package/memory-plugin/dist/index.d.ts.map +0 -1
  226. package/memory-plugin/dist/index.js +0 -300
  227. package/memory-plugin/dist/index.js.map +0 -1
  228. package/node_modules/sqlite-vec/README.md +0 -1
  229. package/node_modules/sqlite-vec/index.cjs +0 -46
  230. package/node_modules/sqlite-vec/index.d.ts +0 -17
  231. package/node_modules/sqlite-vec/index.mjs +0 -47
  232. package/node_modules/sqlite-vec/package.json +0 -1
  233. package/node_modules/sqlite-vec-linux-x64/README.md +0 -1
  234. package/node_modules/sqlite-vec-linux-x64/package.json +0 -1
  235. package/node_modules/sqlite-vec-linux-x64/vec0.so +0 -0
  236. package/node_modules/zod/LICENSE +0 -21
  237. package/node_modules/zod/README.md +0 -208
  238. package/node_modules/zod/index.cjs +0 -33
  239. package/node_modules/zod/index.d.cts +0 -4
  240. package/node_modules/zod/index.d.ts +0 -4
  241. package/node_modules/zod/index.js +0 -4
  242. package/node_modules/zod/locales/index.cjs +0 -17
  243. package/node_modules/zod/locales/index.d.cts +0 -1
  244. package/node_modules/zod/locales/index.d.ts +0 -1
  245. package/node_modules/zod/locales/index.js +0 -1
  246. package/node_modules/zod/locales/package.json +0 -6
  247. package/node_modules/zod/mini/index.cjs +0 -32
  248. package/node_modules/zod/mini/index.d.cts +0 -3
  249. package/node_modules/zod/mini/index.d.ts +0 -3
  250. package/node_modules/zod/mini/index.js +0 -3
  251. package/node_modules/zod/mini/package.json +0 -6
  252. package/node_modules/zod/package.json +0 -135
  253. package/node_modules/zod/src/index.ts +0 -4
  254. package/node_modules/zod/src/locales/index.ts +0 -1
  255. package/node_modules/zod/src/mini/index.ts +0 -3
  256. package/node_modules/zod/src/v3/ZodError.ts +0 -330
  257. package/node_modules/zod/src/v3/benchmarks/datetime.ts +0 -58
  258. package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +0 -80
  259. package/node_modules/zod/src/v3/benchmarks/index.ts +0 -59
  260. package/node_modules/zod/src/v3/benchmarks/ipv4.ts +0 -57
  261. package/node_modules/zod/src/v3/benchmarks/object.ts +0 -69
  262. package/node_modules/zod/src/v3/benchmarks/primitives.ts +0 -162
  263. package/node_modules/zod/src/v3/benchmarks/realworld.ts +0 -63
  264. package/node_modules/zod/src/v3/benchmarks/string.ts +0 -55
  265. package/node_modules/zod/src/v3/benchmarks/union.ts +0 -80
  266. package/node_modules/zod/src/v3/errors.ts +0 -13
  267. package/node_modules/zod/src/v3/external.ts +0 -6
  268. package/node_modules/zod/src/v3/helpers/enumUtil.ts +0 -17
  269. package/node_modules/zod/src/v3/helpers/errorUtil.ts +0 -8
  270. package/node_modules/zod/src/v3/helpers/parseUtil.ts +0 -176
  271. package/node_modules/zod/src/v3/helpers/partialUtil.ts +0 -34
  272. package/node_modules/zod/src/v3/helpers/typeAliases.ts +0 -2
  273. package/node_modules/zod/src/v3/helpers/util.ts +0 -224
  274. package/node_modules/zod/src/v3/index.ts +0 -4
  275. package/node_modules/zod/src/v3/locales/en.ts +0 -124
  276. package/node_modules/zod/src/v3/standard-schema.ts +0 -113
  277. package/node_modules/zod/src/v3/tests/Mocker.ts +0 -54
  278. package/node_modules/zod/src/v3/tests/all-errors.test.ts +0 -157
  279. package/node_modules/zod/src/v3/tests/anyunknown.test.ts +0 -28
  280. package/node_modules/zod/src/v3/tests/array.test.ts +0 -71
  281. package/node_modules/zod/src/v3/tests/async-parsing.test.ts +0 -388
  282. package/node_modules/zod/src/v3/tests/async-refinements.test.ts +0 -46
  283. package/node_modules/zod/src/v3/tests/base.test.ts +0 -29
  284. package/node_modules/zod/src/v3/tests/bigint.test.ts +0 -55
  285. package/node_modules/zod/src/v3/tests/branded.test.ts +0 -53
  286. package/node_modules/zod/src/v3/tests/catch.test.ts +0 -220
  287. package/node_modules/zod/src/v3/tests/coerce.test.ts +0 -133
  288. package/node_modules/zod/src/v3/tests/complex.test.ts +0 -70
  289. package/node_modules/zod/src/v3/tests/custom.test.ts +0 -31
  290. package/node_modules/zod/src/v3/tests/date.test.ts +0 -32
  291. package/node_modules/zod/src/v3/tests/deepmasking.test.ts +0 -186
  292. package/node_modules/zod/src/v3/tests/default.test.ts +0 -112
  293. package/node_modules/zod/src/v3/tests/description.test.ts +0 -33
  294. package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +0 -315
  295. package/node_modules/zod/src/v3/tests/enum.test.ts +0 -80
  296. package/node_modules/zod/src/v3/tests/error.test.ts +0 -551
  297. package/node_modules/zod/src/v3/tests/firstparty.test.ts +0 -87
  298. package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +0 -21
  299. package/node_modules/zod/src/v3/tests/function.test.ts +0 -261
  300. package/node_modules/zod/src/v3/tests/generics.test.ts +0 -48
  301. package/node_modules/zod/src/v3/tests/instanceof.test.ts +0 -37
  302. package/node_modules/zod/src/v3/tests/intersection.test.ts +0 -110
  303. package/node_modules/zod/src/v3/tests/language-server.source.ts +0 -76
  304. package/node_modules/zod/src/v3/tests/language-server.test.ts +0 -207
  305. package/node_modules/zod/src/v3/tests/literal.test.ts +0 -36
  306. package/node_modules/zod/src/v3/tests/map.test.ts +0 -110
  307. package/node_modules/zod/src/v3/tests/masking.test.ts +0 -4
  308. package/node_modules/zod/src/v3/tests/mocker.test.ts +0 -19
  309. package/node_modules/zod/src/v3/tests/nan.test.ts +0 -24
  310. package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +0 -87
  311. package/node_modules/zod/src/v3/tests/nullable.test.ts +0 -42
  312. package/node_modules/zod/src/v3/tests/number.test.ts +0 -176
  313. package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +0 -29
  314. package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +0 -29
  315. package/node_modules/zod/src/v3/tests/object.test.ts +0 -434
  316. package/node_modules/zod/src/v3/tests/optional.test.ts +0 -42
  317. package/node_modules/zod/src/v3/tests/parseUtil.test.ts +0 -23
  318. package/node_modules/zod/src/v3/tests/parser.test.ts +0 -41
  319. package/node_modules/zod/src/v3/tests/partials.test.ts +0 -243
  320. package/node_modules/zod/src/v3/tests/pickomit.test.ts +0 -111
  321. package/node_modules/zod/src/v3/tests/pipeline.test.ts +0 -29
  322. package/node_modules/zod/src/v3/tests/preprocess.test.ts +0 -186
  323. package/node_modules/zod/src/v3/tests/primitive.test.ts +0 -440
  324. package/node_modules/zod/src/v3/tests/promise.test.ts +0 -90
  325. package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -194
  326. package/node_modules/zod/src/v3/tests/record.test.ts +0 -171
  327. package/node_modules/zod/src/v3/tests/recursive.test.ts +0 -197
  328. package/node_modules/zod/src/v3/tests/refine.test.ts +0 -313
  329. package/node_modules/zod/src/v3/tests/safeparse.test.ts +0 -27
  330. package/node_modules/zod/src/v3/tests/set.test.ts +0 -142
  331. package/node_modules/zod/src/v3/tests/standard-schema.test.ts +0 -83
  332. package/node_modules/zod/src/v3/tests/string.test.ts +0 -916
  333. package/node_modules/zod/src/v3/tests/transformer.test.ts +0 -233
  334. package/node_modules/zod/src/v3/tests/tuple.test.ts +0 -90
  335. package/node_modules/zod/src/v3/tests/unions.test.ts +0 -57
  336. package/node_modules/zod/src/v3/tests/validations.test.ts +0 -133
  337. package/node_modules/zod/src/v3/tests/void.test.ts +0 -15
  338. package/node_modules/zod/src/v3/types.ts +0 -5138
  339. package/node_modules/zod/src/v4/classic/checks.ts +0 -32
  340. package/node_modules/zod/src/v4/classic/coerce.ts +0 -27
  341. package/node_modules/zod/src/v4/classic/compat.ts +0 -70
  342. package/node_modules/zod/src/v4/classic/errors.ts +0 -82
  343. package/node_modules/zod/src/v4/classic/external.ts +0 -51
  344. package/node_modules/zod/src/v4/classic/from-json-schema.ts +0 -643
  345. package/node_modules/zod/src/v4/classic/index.ts +0 -5
  346. package/node_modules/zod/src/v4/classic/iso.ts +0 -90
  347. package/node_modules/zod/src/v4/classic/parse.ts +0 -82
  348. package/node_modules/zod/src/v4/classic/schemas.ts +0 -2409
  349. package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +0 -26
  350. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +0 -59
  351. package/node_modules/zod/src/v4/classic/tests/array.test.ts +0 -264
  352. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +0 -210
  353. package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +0 -381
  354. package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +0 -68
  355. package/node_modules/zod/src/v4/classic/tests/base.test.ts +0 -7
  356. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +0 -54
  357. package/node_modules/zod/src/v4/classic/tests/brand.test.ts +0 -106
  358. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +0 -276
  359. package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +0 -20
  360. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +0 -573
  361. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +0 -562
  362. package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +0 -160
  363. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +0 -374
  364. package/node_modules/zod/src/v4/classic/tests/custom.test.ts +0 -40
  365. package/node_modules/zod/src/v4/classic/tests/date.test.ts +0 -62
  366. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +0 -302
  367. package/node_modules/zod/src/v4/classic/tests/default.test.ts +0 -365
  368. package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +0 -27
  369. package/node_modules/zod/src/v4/classic/tests/description.test.ts +0 -32
  370. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +0 -661
  371. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +0 -285
  372. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +0 -595
  373. package/node_modules/zod/src/v4/classic/tests/error.test.ts +0 -711
  374. package/node_modules/zod/src/v4/classic/tests/file.test.ts +0 -96
  375. package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +0 -179
  376. package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +0 -26
  377. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +0 -734
  378. package/node_modules/zod/src/v4/classic/tests/function.test.ts +0 -360
  379. package/node_modules/zod/src/v4/classic/tests/generics.test.ts +0 -72
  380. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +0 -68
  381. package/node_modules/zod/src/v4/classic/tests/index.test.ts +0 -939
  382. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +0 -60
  383. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +0 -198
  384. package/node_modules/zod/src/v4/classic/tests/json.test.ts +0 -109
  385. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +0 -227
  386. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +0 -117
  387. package/node_modules/zod/src/v4/classic/tests/map.test.ts +0 -330
  388. package/node_modules/zod/src/v4/classic/tests/nan.test.ts +0 -21
  389. package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +0 -168
  390. package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +0 -101
  391. package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +0 -22
  392. package/node_modules/zod/src/v4/classic/tests/number.test.ts +0 -270
  393. package/node_modules/zod/src/v4/classic/tests/object.test.ts +0 -640
  394. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +0 -223
  395. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +0 -427
  396. package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +0 -211
  397. package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +0 -101
  398. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +0 -74
  399. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +0 -282
  400. package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +0 -175
  401. package/node_modules/zod/src/v4/classic/tests/promise.test.ts +0 -81
  402. package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +0 -23
  403. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -252
  404. package/node_modules/zod/src/v4/classic/tests/record.test.ts +0 -632
  405. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +0 -582
  406. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +0 -570
  407. package/node_modules/zod/src/v4/classic/tests/registries.test.ts +0 -243
  408. package/node_modules/zod/src/v4/classic/tests/set.test.ts +0 -181
  409. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +0 -134
  410. package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +0 -125
  411. package/node_modules/zod/src/v4/classic/tests/string.test.ts +0 -1175
  412. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +0 -106
  413. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +0 -771
  414. package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +0 -438
  415. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +0 -2990
  416. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +0 -361
  417. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +0 -183
  418. package/node_modules/zod/src/v4/classic/tests/union.test.ts +0 -219
  419. package/node_modules/zod/src/v4/classic/tests/url.test.ts +0 -13
  420. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +0 -283
  421. package/node_modules/zod/src/v4/classic/tests/void.test.ts +0 -12
  422. package/node_modules/zod/src/v4/core/api.ts +0 -1798
  423. package/node_modules/zod/src/v4/core/checks.ts +0 -1293
  424. package/node_modules/zod/src/v4/core/config.ts +0 -15
  425. package/node_modules/zod/src/v4/core/core.ts +0 -138
  426. package/node_modules/zod/src/v4/core/doc.ts +0 -44
  427. package/node_modules/zod/src/v4/core/errors.ts +0 -448
  428. package/node_modules/zod/src/v4/core/index.ts +0 -16
  429. package/node_modules/zod/src/v4/core/json-schema-generator.ts +0 -126
  430. package/node_modules/zod/src/v4/core/json-schema-processors.ts +0 -667
  431. package/node_modules/zod/src/v4/core/json-schema.ts +0 -147
  432. package/node_modules/zod/src/v4/core/parse.ts +0 -195
  433. package/node_modules/zod/src/v4/core/regexes.ts +0 -183
  434. package/node_modules/zod/src/v4/core/registries.ts +0 -105
  435. package/node_modules/zod/src/v4/core/schemas.ts +0 -4538
  436. package/node_modules/zod/src/v4/core/standard-schema.ts +0 -159
  437. package/node_modules/zod/src/v4/core/tests/extend.test.ts +0 -59
  438. package/node_modules/zod/src/v4/core/tests/index.test.ts +0 -46
  439. package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +0 -124
  440. package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +0 -22
  441. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +0 -181
  442. package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +0 -379
  443. package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +0 -46
  444. package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +0 -128
  445. package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +0 -69
  446. package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +0 -83
  447. package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +0 -67
  448. package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +0 -45
  449. package/node_modules/zod/src/v4/core/to-json-schema.ts +0 -613
  450. package/node_modules/zod/src/v4/core/util.ts +0 -966
  451. package/node_modules/zod/src/v4/core/versions.ts +0 -5
  452. package/node_modules/zod/src/v4/core/zsf.ts +0 -323
  453. package/node_modules/zod/src/v4/index.ts +0 -4
  454. package/node_modules/zod/src/v4/locales/ar.ts +0 -115
  455. package/node_modules/zod/src/v4/locales/az.ts +0 -111
  456. package/node_modules/zod/src/v4/locales/be.ts +0 -176
  457. package/node_modules/zod/src/v4/locales/bg.ts +0 -128
  458. package/node_modules/zod/src/v4/locales/ca.ts +0 -116
  459. package/node_modules/zod/src/v4/locales/cs.ts +0 -118
  460. package/node_modules/zod/src/v4/locales/da.ts +0 -123
  461. package/node_modules/zod/src/v4/locales/de.ts +0 -116
  462. package/node_modules/zod/src/v4/locales/en.ts +0 -119
  463. package/node_modules/zod/src/v4/locales/eo.ts +0 -118
  464. package/node_modules/zod/src/v4/locales/es.ts +0 -141
  465. package/node_modules/zod/src/v4/locales/fa.ts +0 -126
  466. package/node_modules/zod/src/v4/locales/fi.ts +0 -121
  467. package/node_modules/zod/src/v4/locales/fr-CA.ts +0 -116
  468. package/node_modules/zod/src/v4/locales/fr.ts +0 -116
  469. package/node_modules/zod/src/v4/locales/he.ts +0 -246
  470. package/node_modules/zod/src/v4/locales/hu.ts +0 -117
  471. package/node_modules/zod/src/v4/locales/hy.ts +0 -164
  472. package/node_modules/zod/src/v4/locales/id.ts +0 -115
  473. package/node_modules/zod/src/v4/locales/index.ts +0 -49
  474. package/node_modules/zod/src/v4/locales/is.ts +0 -119
  475. package/node_modules/zod/src/v4/locales/it.ts +0 -116
  476. package/node_modules/zod/src/v4/locales/ja.ts +0 -114
  477. package/node_modules/zod/src/v4/locales/ka.ts +0 -123
  478. package/node_modules/zod/src/v4/locales/kh.ts +0 -7
  479. package/node_modules/zod/src/v4/locales/km.ts +0 -119
  480. package/node_modules/zod/src/v4/locales/ko.ts +0 -121
  481. package/node_modules/zod/src/v4/locales/lt.ts +0 -239
  482. package/node_modules/zod/src/v4/locales/mk.ts +0 -118
  483. package/node_modules/zod/src/v4/locales/ms.ts +0 -115
  484. package/node_modules/zod/src/v4/locales/nl.ts +0 -121
  485. package/node_modules/zod/src/v4/locales/no.ts +0 -116
  486. package/node_modules/zod/src/v4/locales/ota.ts +0 -117
  487. package/node_modules/zod/src/v4/locales/pl.ts +0 -118
  488. package/node_modules/zod/src/v4/locales/ps.ts +0 -126
  489. package/node_modules/zod/src/v4/locales/pt.ts +0 -116
  490. package/node_modules/zod/src/v4/locales/ru.ts +0 -176
  491. package/node_modules/zod/src/v4/locales/sl.ts +0 -118
  492. package/node_modules/zod/src/v4/locales/sv.ts +0 -119
  493. package/node_modules/zod/src/v4/locales/ta.ts +0 -118
  494. package/node_modules/zod/src/v4/locales/th.ts +0 -119
  495. package/node_modules/zod/src/v4/locales/tr.ts +0 -111
  496. package/node_modules/zod/src/v4/locales/ua.ts +0 -7
  497. package/node_modules/zod/src/v4/locales/uk.ts +0 -117
  498. package/node_modules/zod/src/v4/locales/ur.ts +0 -119
  499. package/node_modules/zod/src/v4/locales/uz.ts +0 -116
  500. package/node_modules/zod/src/v4/locales/vi.ts +0 -117
  501. package/node_modules/zod/src/v4/locales/yo.ts +0 -124
  502. package/node_modules/zod/src/v4/locales/zh-CN.ts +0 -116
  503. package/node_modules/zod/src/v4/locales/zh-TW.ts +0 -115
  504. package/node_modules/zod/src/v4/mini/checks.ts +0 -32
  505. package/node_modules/zod/src/v4/mini/coerce.ts +0 -27
  506. package/node_modules/zod/src/v4/mini/external.ts +0 -40
  507. package/node_modules/zod/src/v4/mini/index.ts +0 -3
  508. package/node_modules/zod/src/v4/mini/iso.ts +0 -66
  509. package/node_modules/zod/src/v4/mini/parse.ts +0 -14
  510. package/node_modules/zod/src/v4/mini/schemas.ts +0 -1916
  511. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +0 -24
  512. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +0 -129
  513. package/node_modules/zod/src/v4/mini/tests/brand.test.ts +0 -94
  514. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +0 -144
  515. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +0 -529
  516. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +0 -36
  517. package/node_modules/zod/src/v4/mini/tests/error.test.ts +0 -22
  518. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +0 -5
  519. package/node_modules/zod/src/v4/mini/tests/index.test.ts +0 -963
  520. package/node_modules/zod/src/v4/mini/tests/number.test.ts +0 -95
  521. package/node_modules/zod/src/v4/mini/tests/object.test.ts +0 -227
  522. package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +0 -43
  523. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +0 -275
  524. package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +0 -50
  525. package/node_modules/zod/src/v4/mini/tests/string.test.ts +0 -347
  526. package/node_modules/zod/src/v4-mini/index.ts +0 -3
  527. package/node_modules/zod/v3/ZodError.cjs +0 -138
  528. package/node_modules/zod/v3/ZodError.d.cts +0 -164
  529. package/node_modules/zod/v3/ZodError.d.ts +0 -164
  530. package/node_modules/zod/v3/ZodError.js +0 -133
  531. package/node_modules/zod/v3/errors.cjs +0 -17
  532. package/node_modules/zod/v3/errors.d.cts +0 -5
  533. package/node_modules/zod/v3/errors.d.ts +0 -5
  534. package/node_modules/zod/v3/errors.js +0 -9
  535. package/node_modules/zod/v3/external.cjs +0 -22
  536. package/node_modules/zod/v3/external.d.cts +0 -6
  537. package/node_modules/zod/v3/external.d.ts +0 -6
  538. package/node_modules/zod/v3/external.js +0 -6
  539. package/node_modules/zod/v3/helpers/enumUtil.cjs +0 -2
  540. package/node_modules/zod/v3/helpers/enumUtil.d.cts +0 -8
  541. package/node_modules/zod/v3/helpers/enumUtil.d.ts +0 -8
  542. package/node_modules/zod/v3/helpers/enumUtil.js +0 -1
  543. package/node_modules/zod/v3/helpers/errorUtil.cjs +0 -9
  544. package/node_modules/zod/v3/helpers/errorUtil.d.cts +0 -9
  545. package/node_modules/zod/v3/helpers/errorUtil.d.ts +0 -9
  546. package/node_modules/zod/v3/helpers/errorUtil.js +0 -6
  547. package/node_modules/zod/v3/helpers/parseUtil.cjs +0 -124
  548. package/node_modules/zod/v3/helpers/parseUtil.d.cts +0 -78
  549. package/node_modules/zod/v3/helpers/parseUtil.d.ts +0 -78
  550. package/node_modules/zod/v3/helpers/parseUtil.js +0 -109
  551. package/node_modules/zod/v3/helpers/partialUtil.cjs +0 -2
  552. package/node_modules/zod/v3/helpers/partialUtil.d.cts +0 -8
  553. package/node_modules/zod/v3/helpers/partialUtil.d.ts +0 -8
  554. package/node_modules/zod/v3/helpers/partialUtil.js +0 -1
  555. package/node_modules/zod/v3/helpers/typeAliases.cjs +0 -2
  556. package/node_modules/zod/v3/helpers/typeAliases.d.cts +0 -2
  557. package/node_modules/zod/v3/helpers/typeAliases.d.ts +0 -2
  558. package/node_modules/zod/v3/helpers/typeAliases.js +0 -1
  559. package/node_modules/zod/v3/helpers/util.cjs +0 -137
  560. package/node_modules/zod/v3/helpers/util.d.cts +0 -85
  561. package/node_modules/zod/v3/helpers/util.d.ts +0 -85
  562. package/node_modules/zod/v3/helpers/util.js +0 -133
  563. package/node_modules/zod/v3/index.cjs +0 -33
  564. package/node_modules/zod/v3/index.d.cts +0 -4
  565. package/node_modules/zod/v3/index.d.ts +0 -4
  566. package/node_modules/zod/v3/index.js +0 -4
  567. package/node_modules/zod/v3/locales/en.cjs +0 -112
  568. package/node_modules/zod/v3/locales/en.d.cts +0 -3
  569. package/node_modules/zod/v3/locales/en.d.ts +0 -3
  570. package/node_modules/zod/v3/locales/en.js +0 -109
  571. package/node_modules/zod/v3/package.json +0 -6
  572. package/node_modules/zod/v3/standard-schema.cjs +0 -2
  573. package/node_modules/zod/v3/standard-schema.d.cts +0 -102
  574. package/node_modules/zod/v3/standard-schema.d.ts +0 -102
  575. package/node_modules/zod/v3/standard-schema.js +0 -1
  576. package/node_modules/zod/v3/types.cjs +0 -3777
  577. package/node_modules/zod/v3/types.d.cts +0 -1034
  578. package/node_modules/zod/v3/types.d.ts +0 -1034
  579. package/node_modules/zod/v3/types.js +0 -3695
  580. package/node_modules/zod/v4/classic/checks.cjs +0 -33
  581. package/node_modules/zod/v4/classic/checks.d.cts +0 -1
  582. package/node_modules/zod/v4/classic/checks.d.ts +0 -1
  583. package/node_modules/zod/v4/classic/checks.js +0 -1
  584. package/node_modules/zod/v4/classic/coerce.cjs +0 -47
  585. package/node_modules/zod/v4/classic/coerce.d.cts +0 -17
  586. package/node_modules/zod/v4/classic/coerce.d.ts +0 -17
  587. package/node_modules/zod/v4/classic/coerce.js +0 -17
  588. package/node_modules/zod/v4/classic/compat.cjs +0 -61
  589. package/node_modules/zod/v4/classic/compat.d.cts +0 -50
  590. package/node_modules/zod/v4/classic/compat.d.ts +0 -50
  591. package/node_modules/zod/v4/classic/compat.js +0 -31
  592. package/node_modules/zod/v4/classic/errors.cjs +0 -74
  593. package/node_modules/zod/v4/classic/errors.d.cts +0 -30
  594. package/node_modules/zod/v4/classic/errors.d.ts +0 -30
  595. package/node_modules/zod/v4/classic/errors.js +0 -48
  596. package/node_modules/zod/v4/classic/external.cjs +0 -73
  597. package/node_modules/zod/v4/classic/external.d.cts +0 -15
  598. package/node_modules/zod/v4/classic/external.d.ts +0 -15
  599. package/node_modules/zod/v4/classic/external.js +0 -20
  600. package/node_modules/zod/v4/classic/from-json-schema.cjs +0 -610
  601. package/node_modules/zod/v4/classic/from-json-schema.d.cts +0 -12
  602. package/node_modules/zod/v4/classic/from-json-schema.d.ts +0 -12
  603. package/node_modules/zod/v4/classic/from-json-schema.js +0 -584
  604. package/node_modules/zod/v4/classic/index.cjs +0 -33
  605. package/node_modules/zod/v4/classic/index.d.cts +0 -4
  606. package/node_modules/zod/v4/classic/index.d.ts +0 -4
  607. package/node_modules/zod/v4/classic/index.js +0 -4
  608. package/node_modules/zod/v4/classic/iso.cjs +0 -60
  609. package/node_modules/zod/v4/classic/iso.d.cts +0 -22
  610. package/node_modules/zod/v4/classic/iso.d.ts +0 -22
  611. package/node_modules/zod/v4/classic/iso.js +0 -30
  612. package/node_modules/zod/v4/classic/package.json +0 -6
  613. package/node_modules/zod/v4/classic/parse.cjs +0 -41
  614. package/node_modules/zod/v4/classic/parse.d.cts +0 -31
  615. package/node_modules/zod/v4/classic/parse.d.ts +0 -31
  616. package/node_modules/zod/v4/classic/parse.js +0 -15
  617. package/node_modules/zod/v4/classic/schemas.cjs +0 -1272
  618. package/node_modules/zod/v4/classic/schemas.d.cts +0 -739
  619. package/node_modules/zod/v4/classic/schemas.d.ts +0 -739
  620. package/node_modules/zod/v4/classic/schemas.js +0 -1157
  621. package/node_modules/zod/v4/core/api.cjs +0 -1222
  622. package/node_modules/zod/v4/core/api.d.cts +0 -304
  623. package/node_modules/zod/v4/core/api.d.ts +0 -304
  624. package/node_modules/zod/v4/core/api.js +0 -1082
  625. package/node_modules/zod/v4/core/checks.cjs +0 -601
  626. package/node_modules/zod/v4/core/checks.d.cts +0 -278
  627. package/node_modules/zod/v4/core/checks.d.ts +0 -278
  628. package/node_modules/zod/v4/core/checks.js +0 -575
  629. package/node_modules/zod/v4/core/core.cjs +0 -83
  630. package/node_modules/zod/v4/core/core.d.cts +0 -70
  631. package/node_modules/zod/v4/core/core.d.ts +0 -70
  632. package/node_modules/zod/v4/core/core.js +0 -76
  633. package/node_modules/zod/v4/core/doc.cjs +0 -39
  634. package/node_modules/zod/v4/core/doc.d.cts +0 -14
  635. package/node_modules/zod/v4/core/doc.d.ts +0 -14
  636. package/node_modules/zod/v4/core/doc.js +0 -35
  637. package/node_modules/zod/v4/core/errors.cjs +0 -213
  638. package/node_modules/zod/v4/core/errors.d.cts +0 -220
  639. package/node_modules/zod/v4/core/errors.d.ts +0 -220
  640. package/node_modules/zod/v4/core/errors.js +0 -182
  641. package/node_modules/zod/v4/core/index.cjs +0 -47
  642. package/node_modules/zod/v4/core/index.d.cts +0 -16
  643. package/node_modules/zod/v4/core/index.d.ts +0 -16
  644. package/node_modules/zod/v4/core/index.js +0 -16
  645. package/node_modules/zod/v4/core/json-schema-generator.cjs +0 -99
  646. package/node_modules/zod/v4/core/json-schema-generator.d.cts +0 -65
  647. package/node_modules/zod/v4/core/json-schema-generator.d.ts +0 -65
  648. package/node_modules/zod/v4/core/json-schema-generator.js +0 -95
  649. package/node_modules/zod/v4/core/json-schema-processors.cjs +0 -648
  650. package/node_modules/zod/v4/core/json-schema-processors.d.cts +0 -49
  651. package/node_modules/zod/v4/core/json-schema-processors.d.ts +0 -49
  652. package/node_modules/zod/v4/core/json-schema-processors.js +0 -605
  653. package/node_modules/zod/v4/core/json-schema.cjs +0 -2
  654. package/node_modules/zod/v4/core/json-schema.d.cts +0 -88
  655. package/node_modules/zod/v4/core/json-schema.d.ts +0 -88
  656. package/node_modules/zod/v4/core/json-schema.js +0 -1
  657. package/node_modules/zod/v4/core/package.json +0 -6
  658. package/node_modules/zod/v4/core/parse.cjs +0 -131
  659. package/node_modules/zod/v4/core/parse.d.cts +0 -49
  660. package/node_modules/zod/v4/core/parse.d.ts +0 -49
  661. package/node_modules/zod/v4/core/parse.js +0 -93
  662. package/node_modules/zod/v4/core/regexes.cjs +0 -166
  663. package/node_modules/zod/v4/core/regexes.d.cts +0 -79
  664. package/node_modules/zod/v4/core/regexes.d.ts +0 -79
  665. package/node_modules/zod/v4/core/regexes.js +0 -133
  666. package/node_modules/zod/v4/core/registries.cjs +0 -56
  667. package/node_modules/zod/v4/core/registries.d.cts +0 -35
  668. package/node_modules/zod/v4/core/registries.d.ts +0 -35
  669. package/node_modules/zod/v4/core/registries.js +0 -51
  670. package/node_modules/zod/v4/core/schemas.cjs +0 -2124
  671. package/node_modules/zod/v4/core/schemas.d.cts +0 -1146
  672. package/node_modules/zod/v4/core/schemas.d.ts +0 -1146
  673. package/node_modules/zod/v4/core/schemas.js +0 -2093
  674. package/node_modules/zod/v4/core/standard-schema.cjs +0 -2
  675. package/node_modules/zod/v4/core/standard-schema.d.cts +0 -126
  676. package/node_modules/zod/v4/core/standard-schema.d.ts +0 -126
  677. package/node_modules/zod/v4/core/standard-schema.js +0 -1
  678. package/node_modules/zod/v4/core/to-json-schema.cjs +0 -446
  679. package/node_modules/zod/v4/core/to-json-schema.d.cts +0 -114
  680. package/node_modules/zod/v4/core/to-json-schema.d.ts +0 -114
  681. package/node_modules/zod/v4/core/to-json-schema.js +0 -437
  682. package/node_modules/zod/v4/core/util.cjs +0 -710
  683. package/node_modules/zod/v4/core/util.d.cts +0 -199
  684. package/node_modules/zod/v4/core/util.d.ts +0 -199
  685. package/node_modules/zod/v4/core/util.js +0 -651
  686. package/node_modules/zod/v4/core/versions.cjs +0 -8
  687. package/node_modules/zod/v4/core/versions.d.cts +0 -5
  688. package/node_modules/zod/v4/core/versions.d.ts +0 -5
  689. package/node_modules/zod/v4/core/versions.js +0 -5
  690. package/node_modules/zod/v4/index.cjs +0 -22
  691. package/node_modules/zod/v4/index.d.cts +0 -3
  692. package/node_modules/zod/v4/index.d.ts +0 -3
  693. package/node_modules/zod/v4/index.js +0 -3
  694. package/node_modules/zod/v4/locales/ar.cjs +0 -133
  695. package/node_modules/zod/v4/locales/ar.d.cts +0 -5
  696. package/node_modules/zod/v4/locales/ar.d.ts +0 -4
  697. package/node_modules/zod/v4/locales/ar.js +0 -106
  698. package/node_modules/zod/v4/locales/az.cjs +0 -132
  699. package/node_modules/zod/v4/locales/az.d.cts +0 -5
  700. package/node_modules/zod/v4/locales/az.d.ts +0 -4
  701. package/node_modules/zod/v4/locales/az.js +0 -105
  702. package/node_modules/zod/v4/locales/be.cjs +0 -183
  703. package/node_modules/zod/v4/locales/be.d.cts +0 -5
  704. package/node_modules/zod/v4/locales/be.d.ts +0 -4
  705. package/node_modules/zod/v4/locales/be.js +0 -156
  706. package/node_modules/zod/v4/locales/bg.cjs +0 -147
  707. package/node_modules/zod/v4/locales/bg.d.cts +0 -5
  708. package/node_modules/zod/v4/locales/bg.d.ts +0 -4
  709. package/node_modules/zod/v4/locales/bg.js +0 -120
  710. package/node_modules/zod/v4/locales/ca.cjs +0 -134
  711. package/node_modules/zod/v4/locales/ca.d.cts +0 -5
  712. package/node_modules/zod/v4/locales/ca.d.ts +0 -4
  713. package/node_modules/zod/v4/locales/ca.js +0 -107
  714. package/node_modules/zod/v4/locales/cs.cjs +0 -138
  715. package/node_modules/zod/v4/locales/cs.d.cts +0 -5
  716. package/node_modules/zod/v4/locales/cs.d.ts +0 -4
  717. package/node_modules/zod/v4/locales/cs.js +0 -111
  718. package/node_modules/zod/v4/locales/da.cjs +0 -142
  719. package/node_modules/zod/v4/locales/da.d.cts +0 -5
  720. package/node_modules/zod/v4/locales/da.d.ts +0 -4
  721. package/node_modules/zod/v4/locales/da.js +0 -115
  722. package/node_modules/zod/v4/locales/de.cjs +0 -135
  723. package/node_modules/zod/v4/locales/de.d.cts +0 -5
  724. package/node_modules/zod/v4/locales/de.d.ts +0 -4
  725. package/node_modules/zod/v4/locales/de.js +0 -108
  726. package/node_modules/zod/v4/locales/en.cjs +0 -136
  727. package/node_modules/zod/v4/locales/en.d.cts +0 -5
  728. package/node_modules/zod/v4/locales/en.d.ts +0 -4
  729. package/node_modules/zod/v4/locales/en.js +0 -109
  730. package/node_modules/zod/v4/locales/eo.cjs +0 -136
  731. package/node_modules/zod/v4/locales/eo.d.cts +0 -5
  732. package/node_modules/zod/v4/locales/eo.d.ts +0 -4
  733. package/node_modules/zod/v4/locales/eo.js +0 -109
  734. package/node_modules/zod/v4/locales/es.cjs +0 -159
  735. package/node_modules/zod/v4/locales/es.d.cts +0 -5
  736. package/node_modules/zod/v4/locales/es.d.ts +0 -4
  737. package/node_modules/zod/v4/locales/es.js +0 -132
  738. package/node_modules/zod/v4/locales/fa.cjs +0 -141
  739. package/node_modules/zod/v4/locales/fa.d.cts +0 -5
  740. package/node_modules/zod/v4/locales/fa.d.ts +0 -4
  741. package/node_modules/zod/v4/locales/fa.js +0 -114
  742. package/node_modules/zod/v4/locales/fi.cjs +0 -139
  743. package/node_modules/zod/v4/locales/fi.d.cts +0 -5
  744. package/node_modules/zod/v4/locales/fi.d.ts +0 -4
  745. package/node_modules/zod/v4/locales/fi.js +0 -112
  746. package/node_modules/zod/v4/locales/fr-CA.cjs +0 -134
  747. package/node_modules/zod/v4/locales/fr-CA.d.cts +0 -5
  748. package/node_modules/zod/v4/locales/fr-CA.d.ts +0 -4
  749. package/node_modules/zod/v4/locales/fr-CA.js +0 -107
  750. package/node_modules/zod/v4/locales/fr.cjs +0 -135
  751. package/node_modules/zod/v4/locales/fr.d.cts +0 -5
  752. package/node_modules/zod/v4/locales/fr.d.ts +0 -4
  753. package/node_modules/zod/v4/locales/fr.js +0 -108
  754. package/node_modules/zod/v4/locales/he.cjs +0 -241
  755. package/node_modules/zod/v4/locales/he.d.cts +0 -5
  756. package/node_modules/zod/v4/locales/he.d.ts +0 -4
  757. package/node_modules/zod/v4/locales/he.js +0 -214
  758. package/node_modules/zod/v4/locales/hu.cjs +0 -135
  759. package/node_modules/zod/v4/locales/hu.d.cts +0 -5
  760. package/node_modules/zod/v4/locales/hu.d.ts +0 -4
  761. package/node_modules/zod/v4/locales/hu.js +0 -108
  762. package/node_modules/zod/v4/locales/hy.cjs +0 -174
  763. package/node_modules/zod/v4/locales/hy.d.cts +0 -5
  764. package/node_modules/zod/v4/locales/hy.d.ts +0 -4
  765. package/node_modules/zod/v4/locales/hy.js +0 -147
  766. package/node_modules/zod/v4/locales/id.cjs +0 -133
  767. package/node_modules/zod/v4/locales/id.d.cts +0 -5
  768. package/node_modules/zod/v4/locales/id.d.ts +0 -4
  769. package/node_modules/zod/v4/locales/id.js +0 -106
  770. package/node_modules/zod/v4/locales/index.cjs +0 -104
  771. package/node_modules/zod/v4/locales/index.d.cts +0 -49
  772. package/node_modules/zod/v4/locales/index.d.ts +0 -49
  773. package/node_modules/zod/v4/locales/index.js +0 -49
  774. package/node_modules/zod/v4/locales/is.cjs +0 -136
  775. package/node_modules/zod/v4/locales/is.d.cts +0 -5
  776. package/node_modules/zod/v4/locales/is.d.ts +0 -4
  777. package/node_modules/zod/v4/locales/is.js +0 -109
  778. package/node_modules/zod/v4/locales/it.cjs +0 -135
  779. package/node_modules/zod/v4/locales/it.d.cts +0 -5
  780. package/node_modules/zod/v4/locales/it.d.ts +0 -4
  781. package/node_modules/zod/v4/locales/it.js +0 -108
  782. package/node_modules/zod/v4/locales/ja.cjs +0 -134
  783. package/node_modules/zod/v4/locales/ja.d.cts +0 -5
  784. package/node_modules/zod/v4/locales/ja.d.ts +0 -4
  785. package/node_modules/zod/v4/locales/ja.js +0 -107
  786. package/node_modules/zod/v4/locales/ka.cjs +0 -139
  787. package/node_modules/zod/v4/locales/ka.d.cts +0 -5
  788. package/node_modules/zod/v4/locales/ka.d.ts +0 -4
  789. package/node_modules/zod/v4/locales/ka.js +0 -112
  790. package/node_modules/zod/v4/locales/kh.cjs +0 -12
  791. package/node_modules/zod/v4/locales/kh.d.cts +0 -5
  792. package/node_modules/zod/v4/locales/kh.d.ts +0 -5
  793. package/node_modules/zod/v4/locales/kh.js +0 -5
  794. package/node_modules/zod/v4/locales/km.cjs +0 -137
  795. package/node_modules/zod/v4/locales/km.d.cts +0 -5
  796. package/node_modules/zod/v4/locales/km.d.ts +0 -4
  797. package/node_modules/zod/v4/locales/km.js +0 -110
  798. package/node_modules/zod/v4/locales/ko.cjs +0 -138
  799. package/node_modules/zod/v4/locales/ko.d.cts +0 -5
  800. package/node_modules/zod/v4/locales/ko.d.ts +0 -4
  801. package/node_modules/zod/v4/locales/ko.js +0 -111
  802. package/node_modules/zod/v4/locales/lt.cjs +0 -230
  803. package/node_modules/zod/v4/locales/lt.d.cts +0 -5
  804. package/node_modules/zod/v4/locales/lt.d.ts +0 -4
  805. package/node_modules/zod/v4/locales/lt.js +0 -203
  806. package/node_modules/zod/v4/locales/mk.cjs +0 -136
  807. package/node_modules/zod/v4/locales/mk.d.cts +0 -5
  808. package/node_modules/zod/v4/locales/mk.d.ts +0 -4
  809. package/node_modules/zod/v4/locales/mk.js +0 -109
  810. package/node_modules/zod/v4/locales/ms.cjs +0 -134
  811. package/node_modules/zod/v4/locales/ms.d.cts +0 -5
  812. package/node_modules/zod/v4/locales/ms.d.ts +0 -4
  813. package/node_modules/zod/v4/locales/ms.js +0 -107
  814. package/node_modules/zod/v4/locales/nl.cjs +0 -137
  815. package/node_modules/zod/v4/locales/nl.d.cts +0 -5
  816. package/node_modules/zod/v4/locales/nl.d.ts +0 -4
  817. package/node_modules/zod/v4/locales/nl.js +0 -110
  818. package/node_modules/zod/v4/locales/no.cjs +0 -135
  819. package/node_modules/zod/v4/locales/no.d.cts +0 -5
  820. package/node_modules/zod/v4/locales/no.d.ts +0 -4
  821. package/node_modules/zod/v4/locales/no.js +0 -108
  822. package/node_modules/zod/v4/locales/ota.cjs +0 -136
  823. package/node_modules/zod/v4/locales/ota.d.cts +0 -5
  824. package/node_modules/zod/v4/locales/ota.d.ts +0 -4
  825. package/node_modules/zod/v4/locales/ota.js +0 -109
  826. package/node_modules/zod/v4/locales/package.json +0 -6
  827. package/node_modules/zod/v4/locales/pl.cjs +0 -136
  828. package/node_modules/zod/v4/locales/pl.d.cts +0 -5
  829. package/node_modules/zod/v4/locales/pl.d.ts +0 -4
  830. package/node_modules/zod/v4/locales/pl.js +0 -109
  831. package/node_modules/zod/v4/locales/ps.cjs +0 -141
  832. package/node_modules/zod/v4/locales/ps.d.cts +0 -5
  833. package/node_modules/zod/v4/locales/ps.d.ts +0 -4
  834. package/node_modules/zod/v4/locales/ps.js +0 -114
  835. package/node_modules/zod/v4/locales/pt.cjs +0 -135
  836. package/node_modules/zod/v4/locales/pt.d.cts +0 -5
  837. package/node_modules/zod/v4/locales/pt.d.ts +0 -4
  838. package/node_modules/zod/v4/locales/pt.js +0 -108
  839. package/node_modules/zod/v4/locales/ru.cjs +0 -183
  840. package/node_modules/zod/v4/locales/ru.d.cts +0 -5
  841. package/node_modules/zod/v4/locales/ru.d.ts +0 -4
  842. package/node_modules/zod/v4/locales/ru.js +0 -156
  843. package/node_modules/zod/v4/locales/sl.cjs +0 -136
  844. package/node_modules/zod/v4/locales/sl.d.cts +0 -5
  845. package/node_modules/zod/v4/locales/sl.d.ts +0 -4
  846. package/node_modules/zod/v4/locales/sl.js +0 -109
  847. package/node_modules/zod/v4/locales/sv.cjs +0 -137
  848. package/node_modules/zod/v4/locales/sv.d.cts +0 -5
  849. package/node_modules/zod/v4/locales/sv.d.ts +0 -4
  850. package/node_modules/zod/v4/locales/sv.js +0 -110
  851. package/node_modules/zod/v4/locales/ta.cjs +0 -137
  852. package/node_modules/zod/v4/locales/ta.d.cts +0 -5
  853. package/node_modules/zod/v4/locales/ta.d.ts +0 -4
  854. package/node_modules/zod/v4/locales/ta.js +0 -110
  855. package/node_modules/zod/v4/locales/th.cjs +0 -137
  856. package/node_modules/zod/v4/locales/th.d.cts +0 -5
  857. package/node_modules/zod/v4/locales/th.d.ts +0 -4
  858. package/node_modules/zod/v4/locales/th.js +0 -110
  859. package/node_modules/zod/v4/locales/tr.cjs +0 -132
  860. package/node_modules/zod/v4/locales/tr.d.cts +0 -5
  861. package/node_modules/zod/v4/locales/tr.d.ts +0 -4
  862. package/node_modules/zod/v4/locales/tr.js +0 -105
  863. package/node_modules/zod/v4/locales/ua.cjs +0 -12
  864. package/node_modules/zod/v4/locales/ua.d.cts +0 -5
  865. package/node_modules/zod/v4/locales/ua.d.ts +0 -5
  866. package/node_modules/zod/v4/locales/ua.js +0 -5
  867. package/node_modules/zod/v4/locales/uk.cjs +0 -135
  868. package/node_modules/zod/v4/locales/uk.d.cts +0 -5
  869. package/node_modules/zod/v4/locales/uk.d.ts +0 -4
  870. package/node_modules/zod/v4/locales/uk.js +0 -108
  871. package/node_modules/zod/v4/locales/ur.cjs +0 -137
  872. package/node_modules/zod/v4/locales/ur.d.cts +0 -5
  873. package/node_modules/zod/v4/locales/ur.d.ts +0 -4
  874. package/node_modules/zod/v4/locales/ur.js +0 -110
  875. package/node_modules/zod/v4/locales/uz.cjs +0 -136
  876. package/node_modules/zod/v4/locales/uz.d.cts +0 -5
  877. package/node_modules/zod/v4/locales/uz.d.ts +0 -4
  878. package/node_modules/zod/v4/locales/uz.js +0 -109
  879. package/node_modules/zod/v4/locales/vi.cjs +0 -135
  880. package/node_modules/zod/v4/locales/vi.d.cts +0 -5
  881. package/node_modules/zod/v4/locales/vi.d.ts +0 -4
  882. package/node_modules/zod/v4/locales/vi.js +0 -108
  883. package/node_modules/zod/v4/locales/yo.cjs +0 -134
  884. package/node_modules/zod/v4/locales/yo.d.cts +0 -5
  885. package/node_modules/zod/v4/locales/yo.d.ts +0 -4
  886. package/node_modules/zod/v4/locales/yo.js +0 -107
  887. package/node_modules/zod/v4/locales/zh-CN.cjs +0 -136
  888. package/node_modules/zod/v4/locales/zh-CN.d.cts +0 -5
  889. package/node_modules/zod/v4/locales/zh-CN.d.ts +0 -4
  890. package/node_modules/zod/v4/locales/zh-CN.js +0 -109
  891. package/node_modules/zod/v4/locales/zh-TW.cjs +0 -134
  892. package/node_modules/zod/v4/locales/zh-TW.d.cts +0 -5
  893. package/node_modules/zod/v4/locales/zh-TW.d.ts +0 -4
  894. package/node_modules/zod/v4/locales/zh-TW.js +0 -107
  895. package/node_modules/zod/v4/mini/checks.cjs +0 -34
  896. package/node_modules/zod/v4/mini/checks.d.cts +0 -1
  897. package/node_modules/zod/v4/mini/checks.d.ts +0 -1
  898. package/node_modules/zod/v4/mini/checks.js +0 -1
  899. package/node_modules/zod/v4/mini/coerce.cjs +0 -52
  900. package/node_modules/zod/v4/mini/coerce.d.cts +0 -7
  901. package/node_modules/zod/v4/mini/coerce.d.ts +0 -7
  902. package/node_modules/zod/v4/mini/coerce.js +0 -22
  903. package/node_modules/zod/v4/mini/external.cjs +0 -63
  904. package/node_modules/zod/v4/mini/external.d.cts +0 -12
  905. package/node_modules/zod/v4/mini/external.d.ts +0 -12
  906. package/node_modules/zod/v4/mini/external.js +0 -14
  907. package/node_modules/zod/v4/mini/index.cjs +0 -32
  908. package/node_modules/zod/v4/mini/index.d.cts +0 -3
  909. package/node_modules/zod/v4/mini/index.d.ts +0 -3
  910. package/node_modules/zod/v4/mini/index.js +0 -3
  911. package/node_modules/zod/v4/mini/iso.cjs +0 -64
  912. package/node_modules/zod/v4/mini/iso.d.cts +0 -22
  913. package/node_modules/zod/v4/mini/iso.d.ts +0 -22
  914. package/node_modules/zod/v4/mini/iso.js +0 -34
  915. package/node_modules/zod/v4/mini/package.json +0 -6
  916. package/node_modules/zod/v4/mini/parse.cjs +0 -16
  917. package/node_modules/zod/v4/mini/parse.d.cts +0 -1
  918. package/node_modules/zod/v4/mini/parse.d.ts +0 -1
  919. package/node_modules/zod/v4/mini/parse.js +0 -1
  920. package/node_modules/zod/v4/mini/schemas.cjs +0 -1046
  921. package/node_modules/zod/v4/mini/schemas.d.cts +0 -427
  922. package/node_modules/zod/v4/mini/schemas.d.ts +0 -427
  923. package/node_modules/zod/v4/mini/schemas.js +0 -925
  924. package/node_modules/zod/v4/package.json +0 -6
  925. package/node_modules/zod/v4-mini/index.cjs +0 -32
  926. package/node_modules/zod/v4-mini/index.d.cts +0 -3
  927. package/node_modules/zod/v4-mini/index.d.ts +0 -3
  928. package/node_modules/zod/v4-mini/index.js +0 -3
  929. package/node_modules/zod/v4-mini/package.json +0 -6
  930. package/plugin/dist/index.d.ts +0 -179
  931. package/plugin/dist/index.d.ts.map +0 -1
  932. package/plugin/dist/index.js +0 -3209
  933. 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