@psiclawops/hypermem 0.9.1 → 0.9.2

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 (914) hide show
  1. package/CHANGELOG.md +8 -1
  2. package/INSTALL.md +9 -0
  3. package/dist/adaptive-lifecycle.d.ts +81 -0
  4. package/dist/adaptive-lifecycle.d.ts.map +1 -0
  5. package/dist/adaptive-lifecycle.js +190 -0
  6. package/dist/background-indexer.d.ts +161 -0
  7. package/dist/background-indexer.d.ts.map +1 -0
  8. package/dist/background-indexer.js +1263 -0
  9. package/dist/budget-policy.d.ts +22 -0
  10. package/dist/budget-policy.d.ts.map +1 -0
  11. package/dist/budget-policy.js +32 -0
  12. package/dist/cache.d.ts +148 -0
  13. package/dist/cache.d.ts.map +1 -0
  14. package/dist/cache.js +571 -0
  15. package/dist/compaction-fence.d.ts +97 -0
  16. package/dist/compaction-fence.d.ts.map +1 -0
  17. package/dist/compaction-fence.js +174 -0
  18. package/dist/composition-snapshot-integrity.d.ts +36 -0
  19. package/dist/composition-snapshot-integrity.d.ts.map +1 -0
  20. package/dist/composition-snapshot-integrity.js +131 -0
  21. package/dist/composition-snapshot-runtime.d.ts +59 -0
  22. package/dist/composition-snapshot-runtime.d.ts.map +1 -0
  23. package/dist/composition-snapshot-runtime.js +250 -0
  24. package/dist/composition-snapshot-store.d.ts +44 -0
  25. package/dist/composition-snapshot-store.d.ts.map +1 -0
  26. package/dist/composition-snapshot-store.js +117 -0
  27. package/dist/compositor.d.ts +518 -0
  28. package/dist/compositor.d.ts.map +1 -0
  29. package/dist/compositor.js +4280 -0
  30. package/dist/content-type-classifier.d.ts +41 -0
  31. package/dist/content-type-classifier.d.ts.map +1 -0
  32. package/dist/content-type-classifier.js +181 -0
  33. package/dist/context-backfill.d.ts +46 -0
  34. package/dist/context-backfill.d.ts.map +1 -0
  35. package/dist/context-backfill.js +113 -0
  36. package/dist/context-store.d.ts +131 -0
  37. package/dist/context-store.d.ts.map +1 -0
  38. package/dist/context-store.js +279 -0
  39. package/dist/contradiction-audit-store.d.ts +54 -0
  40. package/dist/contradiction-audit-store.d.ts.map +1 -0
  41. package/dist/contradiction-audit-store.js +88 -0
  42. package/dist/contradiction-detector.d.ts +78 -0
  43. package/dist/contradiction-detector.d.ts.map +1 -0
  44. package/dist/contradiction-detector.js +362 -0
  45. package/dist/contradiction-resolution-policy.d.ts +21 -0
  46. package/dist/contradiction-resolution-policy.d.ts.map +1 -0
  47. package/dist/contradiction-resolution-policy.js +17 -0
  48. package/dist/cross-agent.d.ts +74 -0
  49. package/dist/cross-agent.d.ts.map +1 -0
  50. package/dist/cross-agent.js +271 -0
  51. package/dist/db.d.ts +131 -0
  52. package/dist/db.d.ts.map +1 -0
  53. package/dist/db.js +410 -0
  54. package/dist/degradation.d.ts +102 -0
  55. package/dist/degradation.d.ts.map +1 -0
  56. package/dist/degradation.js +141 -0
  57. package/dist/desired-state-store.d.ts +100 -0
  58. package/dist/desired-state-store.d.ts.map +1 -0
  59. package/dist/desired-state-store.js +222 -0
  60. package/dist/doc-chunk-store.d.ts +159 -0
  61. package/dist/doc-chunk-store.d.ts.map +1 -0
  62. package/dist/doc-chunk-store.js +441 -0
  63. package/dist/doc-chunker.d.ts +99 -0
  64. package/dist/doc-chunker.d.ts.map +1 -0
  65. package/dist/doc-chunker.js +324 -0
  66. package/dist/dreaming-promoter.d.ts +124 -0
  67. package/dist/dreaming-promoter.d.ts.map +1 -0
  68. package/dist/dreaming-promoter.js +447 -0
  69. package/dist/episode-store.d.ts +49 -0
  70. package/dist/episode-store.d.ts.map +1 -0
  71. package/dist/episode-store.js +135 -0
  72. package/dist/expertise-store.d.ts +129 -0
  73. package/dist/expertise-store.d.ts.map +1 -0
  74. package/dist/expertise-store.js +342 -0
  75. package/dist/fact-store.d.ts +90 -0
  76. package/dist/fact-store.d.ts.map +1 -0
  77. package/dist/fact-store.js +283 -0
  78. package/dist/fleet-store.d.ts +144 -0
  79. package/dist/fleet-store.d.ts.map +1 -0
  80. package/dist/fleet-store.js +276 -0
  81. package/dist/fos-mod.d.ts +178 -0
  82. package/dist/fos-mod.d.ts.map +1 -0
  83. package/dist/fos-mod.js +416 -0
  84. package/dist/hybrid-retrieval.d.ts +102 -0
  85. package/dist/hybrid-retrieval.d.ts.map +1 -0
  86. package/dist/hybrid-retrieval.js +429 -0
  87. package/dist/image-eviction.d.ts +49 -0
  88. package/dist/image-eviction.d.ts.map +1 -0
  89. package/dist/image-eviction.js +251 -0
  90. package/dist/index.d.ts +735 -0
  91. package/dist/index.d.ts.map +1 -0
  92. package/dist/index.js +1542 -0
  93. package/dist/keystone-scorer.d.ts +51 -0
  94. package/dist/keystone-scorer.d.ts.map +1 -0
  95. package/dist/keystone-scorer.js +52 -0
  96. package/dist/knowledge-graph.d.ts +110 -0
  97. package/dist/knowledge-graph.d.ts.map +1 -0
  98. package/dist/knowledge-graph.js +305 -0
  99. package/dist/knowledge-lint.d.ts +31 -0
  100. package/dist/knowledge-lint.d.ts.map +1 -0
  101. package/dist/knowledge-lint.js +155 -0
  102. package/dist/knowledge-store.d.ts +75 -0
  103. package/dist/knowledge-store.d.ts.map +1 -0
  104. package/dist/knowledge-store.js +270 -0
  105. package/dist/library-schema.d.ts +31 -0
  106. package/dist/library-schema.d.ts.map +1 -0
  107. package/dist/library-schema.js +1357 -0
  108. package/dist/message-store.d.ts +181 -0
  109. package/dist/message-store.d.ts.map +1 -0
  110. package/dist/message-store.js +577 -0
  111. package/dist/metrics-dashboard.d.ts +131 -0
  112. package/dist/metrics-dashboard.d.ts.map +1 -0
  113. package/dist/metrics-dashboard.js +298 -0
  114. package/dist/obsidian-exporter.d.ts +57 -0
  115. package/dist/obsidian-exporter.d.ts.map +1 -0
  116. package/dist/obsidian-exporter.js +274 -0
  117. package/dist/obsidian-watcher.d.ts +147 -0
  118. package/dist/obsidian-watcher.d.ts.map +1 -0
  119. package/dist/obsidian-watcher.js +403 -0
  120. package/dist/open-domain.d.ts +46 -0
  121. package/dist/open-domain.d.ts.map +1 -0
  122. package/dist/open-domain.js +125 -0
  123. package/dist/preference-store.d.ts +54 -0
  124. package/dist/preference-store.d.ts.map +1 -0
  125. package/dist/preference-store.js +109 -0
  126. package/dist/preservation-gate.d.ts +82 -0
  127. package/dist/preservation-gate.d.ts.map +1 -0
  128. package/dist/preservation-gate.js +150 -0
  129. package/dist/proactive-pass.d.ts +63 -0
  130. package/dist/proactive-pass.d.ts.map +1 -0
  131. package/dist/proactive-pass.js +293 -0
  132. package/dist/profiles.d.ts +46 -0
  133. package/dist/profiles.d.ts.map +1 -0
  134. package/dist/profiles.js +262 -0
  135. package/dist/provider-translator.d.ts +50 -0
  136. package/dist/provider-translator.d.ts.map +1 -0
  137. package/dist/provider-translator.js +403 -0
  138. package/dist/rate-limiter.d.ts +76 -0
  139. package/dist/rate-limiter.d.ts.map +1 -0
  140. package/dist/rate-limiter.js +179 -0
  141. package/dist/repair-tool-pairs.d.ts +38 -0
  142. package/dist/repair-tool-pairs.d.ts.map +1 -0
  143. package/dist/repair-tool-pairs.js +209 -0
  144. package/dist/replay-recovery.d.ts +29 -0
  145. package/dist/replay-recovery.d.ts.map +1 -0
  146. package/dist/replay-recovery.js +82 -0
  147. package/dist/reranker.d.ts +95 -0
  148. package/dist/reranker.d.ts.map +1 -0
  149. package/dist/reranker.js +308 -0
  150. package/dist/retrieval-policy.d.ts +51 -0
  151. package/dist/retrieval-policy.d.ts.map +1 -0
  152. package/dist/retrieval-policy.js +77 -0
  153. package/dist/schema.d.ts +15 -0
  154. package/dist/schema.d.ts.map +1 -0
  155. package/dist/schema.js +327 -0
  156. package/dist/secret-scanner.d.ts +51 -0
  157. package/dist/secret-scanner.d.ts.map +1 -0
  158. package/dist/secret-scanner.js +248 -0
  159. package/dist/seed.d.ts +108 -0
  160. package/dist/seed.d.ts.map +1 -0
  161. package/dist/seed.js +179 -0
  162. package/dist/session-flusher.d.ts +53 -0
  163. package/dist/session-flusher.d.ts.map +1 -0
  164. package/dist/session-flusher.js +69 -0
  165. package/dist/session-topic-map.d.ts +41 -0
  166. package/dist/session-topic-map.d.ts.map +1 -0
  167. package/dist/session-topic-map.js +77 -0
  168. package/dist/spawn-context.d.ts +54 -0
  169. package/dist/spawn-context.d.ts.map +1 -0
  170. package/dist/spawn-context.js +159 -0
  171. package/dist/system-store.d.ts +73 -0
  172. package/dist/system-store.d.ts.map +1 -0
  173. package/dist/system-store.js +182 -0
  174. package/dist/temporal-store.d.ts +81 -0
  175. package/dist/temporal-store.d.ts.map +1 -0
  176. package/dist/temporal-store.js +149 -0
  177. package/dist/tool-artifact-store.d.ts +98 -0
  178. package/dist/tool-artifact-store.d.ts.map +1 -0
  179. package/dist/tool-artifact-store.js +244 -0
  180. package/dist/topic-detector.d.ts +35 -0
  181. package/dist/topic-detector.d.ts.map +1 -0
  182. package/dist/topic-detector.js +249 -0
  183. package/dist/topic-store.d.ts +51 -0
  184. package/dist/topic-store.d.ts.map +1 -0
  185. package/dist/topic-store.js +175 -0
  186. package/dist/topic-synthesizer.d.ts +71 -0
  187. package/dist/topic-synthesizer.d.ts.map +1 -0
  188. package/dist/topic-synthesizer.js +426 -0
  189. package/dist/trigger-registry.d.ts +63 -0
  190. package/dist/trigger-registry.d.ts.map +1 -0
  191. package/dist/trigger-registry.js +171 -0
  192. package/dist/types.d.ts +1085 -0
  193. package/dist/types.d.ts.map +1 -0
  194. package/dist/types.js +9 -0
  195. package/dist/vector-store.d.ts +180 -0
  196. package/dist/vector-store.d.ts.map +1 -0
  197. package/dist/vector-store.js +1041 -0
  198. package/dist/version.d.ts +34 -0
  199. package/dist/version.d.ts.map +1 -0
  200. package/dist/version.js +44 -0
  201. package/dist/wiki-page-emitter.d.ts +65 -0
  202. package/dist/wiki-page-emitter.d.ts.map +1 -0
  203. package/dist/wiki-page-emitter.js +258 -0
  204. package/dist/work-store.d.ts +112 -0
  205. package/dist/work-store.d.ts.map +1 -0
  206. package/dist/work-store.js +273 -0
  207. package/docs/MEMORY_MD_AUTHORING.md +3 -3
  208. package/docs/ROADMAP.md +2 -2
  209. package/install.sh +34 -0
  210. package/memory-plugin/package.json +5 -3
  211. package/node_modules/sqlite-vec/README.md +1 -0
  212. package/node_modules/sqlite-vec/index.cjs +46 -0
  213. package/node_modules/sqlite-vec/index.d.ts +17 -0
  214. package/node_modules/sqlite-vec/index.mjs +47 -0
  215. package/node_modules/sqlite-vec/package.json +1 -0
  216. package/node_modules/sqlite-vec-linux-x64/README.md +1 -0
  217. package/node_modules/sqlite-vec-linux-x64/package.json +1 -0
  218. package/node_modules/sqlite-vec-linux-x64/vec0.so +0 -0
  219. package/node_modules/zod/LICENSE +21 -0
  220. package/node_modules/zod/README.md +208 -0
  221. package/node_modules/zod/index.cjs +33 -0
  222. package/node_modules/zod/index.d.cts +4 -0
  223. package/node_modules/zod/index.d.ts +4 -0
  224. package/node_modules/zod/index.js +4 -0
  225. package/node_modules/zod/locales/index.cjs +17 -0
  226. package/node_modules/zod/locales/index.d.cts +1 -0
  227. package/node_modules/zod/locales/index.d.ts +1 -0
  228. package/node_modules/zod/locales/index.js +1 -0
  229. package/node_modules/zod/locales/package.json +6 -0
  230. package/node_modules/zod/mini/index.cjs +32 -0
  231. package/node_modules/zod/mini/index.d.cts +3 -0
  232. package/node_modules/zod/mini/index.d.ts +3 -0
  233. package/node_modules/zod/mini/index.js +3 -0
  234. package/node_modules/zod/mini/package.json +6 -0
  235. package/node_modules/zod/package.json +135 -0
  236. package/node_modules/zod/src/index.ts +4 -0
  237. package/node_modules/zod/src/locales/index.ts +1 -0
  238. package/node_modules/zod/src/mini/index.ts +3 -0
  239. package/node_modules/zod/src/v3/ZodError.ts +330 -0
  240. package/node_modules/zod/src/v3/benchmarks/datetime.ts +58 -0
  241. package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +80 -0
  242. package/node_modules/zod/src/v3/benchmarks/index.ts +59 -0
  243. package/node_modules/zod/src/v3/benchmarks/ipv4.ts +57 -0
  244. package/node_modules/zod/src/v3/benchmarks/object.ts +69 -0
  245. package/node_modules/zod/src/v3/benchmarks/primitives.ts +162 -0
  246. package/node_modules/zod/src/v3/benchmarks/realworld.ts +63 -0
  247. package/node_modules/zod/src/v3/benchmarks/string.ts +55 -0
  248. package/node_modules/zod/src/v3/benchmarks/union.ts +80 -0
  249. package/node_modules/zod/src/v3/errors.ts +13 -0
  250. package/node_modules/zod/src/v3/external.ts +6 -0
  251. package/node_modules/zod/src/v3/helpers/enumUtil.ts +17 -0
  252. package/node_modules/zod/src/v3/helpers/errorUtil.ts +8 -0
  253. package/node_modules/zod/src/v3/helpers/parseUtil.ts +176 -0
  254. package/node_modules/zod/src/v3/helpers/partialUtil.ts +34 -0
  255. package/node_modules/zod/src/v3/helpers/typeAliases.ts +2 -0
  256. package/node_modules/zod/src/v3/helpers/util.ts +224 -0
  257. package/node_modules/zod/src/v3/index.ts +4 -0
  258. package/node_modules/zod/src/v3/locales/en.ts +124 -0
  259. package/node_modules/zod/src/v3/standard-schema.ts +113 -0
  260. package/node_modules/zod/src/v3/tests/Mocker.ts +54 -0
  261. package/node_modules/zod/src/v3/tests/all-errors.test.ts +157 -0
  262. package/node_modules/zod/src/v3/tests/anyunknown.test.ts +28 -0
  263. package/node_modules/zod/src/v3/tests/array.test.ts +71 -0
  264. package/node_modules/zod/src/v3/tests/async-parsing.test.ts +388 -0
  265. package/node_modules/zod/src/v3/tests/async-refinements.test.ts +46 -0
  266. package/node_modules/zod/src/v3/tests/base.test.ts +29 -0
  267. package/node_modules/zod/src/v3/tests/bigint.test.ts +55 -0
  268. package/node_modules/zod/src/v3/tests/branded.test.ts +53 -0
  269. package/node_modules/zod/src/v3/tests/catch.test.ts +220 -0
  270. package/node_modules/zod/src/v3/tests/coerce.test.ts +133 -0
  271. package/node_modules/zod/src/v3/tests/complex.test.ts +70 -0
  272. package/node_modules/zod/src/v3/tests/custom.test.ts +31 -0
  273. package/node_modules/zod/src/v3/tests/date.test.ts +32 -0
  274. package/node_modules/zod/src/v3/tests/deepmasking.test.ts +186 -0
  275. package/node_modules/zod/src/v3/tests/default.test.ts +112 -0
  276. package/node_modules/zod/src/v3/tests/description.test.ts +33 -0
  277. package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +315 -0
  278. package/node_modules/zod/src/v3/tests/enum.test.ts +80 -0
  279. package/node_modules/zod/src/v3/tests/error.test.ts +551 -0
  280. package/node_modules/zod/src/v3/tests/firstparty.test.ts +87 -0
  281. package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +21 -0
  282. package/node_modules/zod/src/v3/tests/function.test.ts +261 -0
  283. package/node_modules/zod/src/v3/tests/generics.test.ts +48 -0
  284. package/node_modules/zod/src/v3/tests/instanceof.test.ts +37 -0
  285. package/node_modules/zod/src/v3/tests/intersection.test.ts +110 -0
  286. package/node_modules/zod/src/v3/tests/language-server.source.ts +76 -0
  287. package/node_modules/zod/src/v3/tests/language-server.test.ts +207 -0
  288. package/node_modules/zod/src/v3/tests/literal.test.ts +36 -0
  289. package/node_modules/zod/src/v3/tests/map.test.ts +110 -0
  290. package/node_modules/zod/src/v3/tests/masking.test.ts +4 -0
  291. package/node_modules/zod/src/v3/tests/mocker.test.ts +19 -0
  292. package/node_modules/zod/src/v3/tests/nan.test.ts +24 -0
  293. package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +87 -0
  294. package/node_modules/zod/src/v3/tests/nullable.test.ts +42 -0
  295. package/node_modules/zod/src/v3/tests/number.test.ts +176 -0
  296. package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +29 -0
  297. package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +29 -0
  298. package/node_modules/zod/src/v3/tests/object.test.ts +434 -0
  299. package/node_modules/zod/src/v3/tests/optional.test.ts +42 -0
  300. package/node_modules/zod/src/v3/tests/parseUtil.test.ts +23 -0
  301. package/node_modules/zod/src/v3/tests/parser.test.ts +41 -0
  302. package/node_modules/zod/src/v3/tests/partials.test.ts +243 -0
  303. package/node_modules/zod/src/v3/tests/pickomit.test.ts +111 -0
  304. package/node_modules/zod/src/v3/tests/pipeline.test.ts +29 -0
  305. package/node_modules/zod/src/v3/tests/preprocess.test.ts +186 -0
  306. package/node_modules/zod/src/v3/tests/primitive.test.ts +440 -0
  307. package/node_modules/zod/src/v3/tests/promise.test.ts +90 -0
  308. package/node_modules/zod/src/v3/tests/readonly.test.ts +194 -0
  309. package/node_modules/zod/src/v3/tests/record.test.ts +171 -0
  310. package/node_modules/zod/src/v3/tests/recursive.test.ts +197 -0
  311. package/node_modules/zod/src/v3/tests/refine.test.ts +313 -0
  312. package/node_modules/zod/src/v3/tests/safeparse.test.ts +27 -0
  313. package/node_modules/zod/src/v3/tests/set.test.ts +142 -0
  314. package/node_modules/zod/src/v3/tests/standard-schema.test.ts +83 -0
  315. package/node_modules/zod/src/v3/tests/string.test.ts +916 -0
  316. package/node_modules/zod/src/v3/tests/transformer.test.ts +233 -0
  317. package/node_modules/zod/src/v3/tests/tuple.test.ts +90 -0
  318. package/node_modules/zod/src/v3/tests/unions.test.ts +57 -0
  319. package/node_modules/zod/src/v3/tests/validations.test.ts +133 -0
  320. package/node_modules/zod/src/v3/tests/void.test.ts +15 -0
  321. package/node_modules/zod/src/v3/types.ts +5138 -0
  322. package/node_modules/zod/src/v4/classic/checks.ts +32 -0
  323. package/node_modules/zod/src/v4/classic/coerce.ts +27 -0
  324. package/node_modules/zod/src/v4/classic/compat.ts +70 -0
  325. package/node_modules/zod/src/v4/classic/errors.ts +82 -0
  326. package/node_modules/zod/src/v4/classic/external.ts +51 -0
  327. package/node_modules/zod/src/v4/classic/from-json-schema.ts +643 -0
  328. package/node_modules/zod/src/v4/classic/index.ts +5 -0
  329. package/node_modules/zod/src/v4/classic/iso.ts +90 -0
  330. package/node_modules/zod/src/v4/classic/parse.ts +82 -0
  331. package/node_modules/zod/src/v4/classic/schemas.ts +2409 -0
  332. package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +26 -0
  333. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +59 -0
  334. package/node_modules/zod/src/v4/classic/tests/array.test.ts +264 -0
  335. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +210 -0
  336. package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +381 -0
  337. package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +68 -0
  338. package/node_modules/zod/src/v4/classic/tests/base.test.ts +7 -0
  339. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +54 -0
  340. package/node_modules/zod/src/v4/classic/tests/brand.test.ts +106 -0
  341. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +276 -0
  342. package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +20 -0
  343. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +573 -0
  344. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +562 -0
  345. package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +160 -0
  346. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +374 -0
  347. package/node_modules/zod/src/v4/classic/tests/custom.test.ts +40 -0
  348. package/node_modules/zod/src/v4/classic/tests/date.test.ts +62 -0
  349. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +302 -0
  350. package/node_modules/zod/src/v4/classic/tests/default.test.ts +365 -0
  351. package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +27 -0
  352. package/node_modules/zod/src/v4/classic/tests/description.test.ts +32 -0
  353. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +661 -0
  354. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +285 -0
  355. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +595 -0
  356. package/node_modules/zod/src/v4/classic/tests/error.test.ts +711 -0
  357. package/node_modules/zod/src/v4/classic/tests/file.test.ts +96 -0
  358. package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +179 -0
  359. package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +26 -0
  360. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +734 -0
  361. package/node_modules/zod/src/v4/classic/tests/function.test.ts +360 -0
  362. package/node_modules/zod/src/v4/classic/tests/generics.test.ts +72 -0
  363. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +68 -0
  364. package/node_modules/zod/src/v4/classic/tests/index.test.ts +939 -0
  365. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +60 -0
  366. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +198 -0
  367. package/node_modules/zod/src/v4/classic/tests/json.test.ts +109 -0
  368. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +227 -0
  369. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +117 -0
  370. package/node_modules/zod/src/v4/classic/tests/map.test.ts +330 -0
  371. package/node_modules/zod/src/v4/classic/tests/nan.test.ts +21 -0
  372. package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +168 -0
  373. package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +101 -0
  374. package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +22 -0
  375. package/node_modules/zod/src/v4/classic/tests/number.test.ts +270 -0
  376. package/node_modules/zod/src/v4/classic/tests/object.test.ts +640 -0
  377. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +223 -0
  378. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +427 -0
  379. package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +211 -0
  380. package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +101 -0
  381. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +74 -0
  382. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +282 -0
  383. package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +175 -0
  384. package/node_modules/zod/src/v4/classic/tests/promise.test.ts +81 -0
  385. package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +23 -0
  386. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +252 -0
  387. package/node_modules/zod/src/v4/classic/tests/record.test.ts +632 -0
  388. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +582 -0
  389. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +570 -0
  390. package/node_modules/zod/src/v4/classic/tests/registries.test.ts +243 -0
  391. package/node_modules/zod/src/v4/classic/tests/set.test.ts +181 -0
  392. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +134 -0
  393. package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +125 -0
  394. package/node_modules/zod/src/v4/classic/tests/string.test.ts +1175 -0
  395. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +106 -0
  396. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +771 -0
  397. package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +438 -0
  398. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +2990 -0
  399. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +361 -0
  400. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +183 -0
  401. package/node_modules/zod/src/v4/classic/tests/union.test.ts +219 -0
  402. package/node_modules/zod/src/v4/classic/tests/url.test.ts +13 -0
  403. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +283 -0
  404. package/node_modules/zod/src/v4/classic/tests/void.test.ts +12 -0
  405. package/node_modules/zod/src/v4/core/api.ts +1798 -0
  406. package/node_modules/zod/src/v4/core/checks.ts +1293 -0
  407. package/node_modules/zod/src/v4/core/config.ts +15 -0
  408. package/node_modules/zod/src/v4/core/core.ts +138 -0
  409. package/node_modules/zod/src/v4/core/doc.ts +44 -0
  410. package/node_modules/zod/src/v4/core/errors.ts +448 -0
  411. package/node_modules/zod/src/v4/core/index.ts +16 -0
  412. package/node_modules/zod/src/v4/core/json-schema-generator.ts +126 -0
  413. package/node_modules/zod/src/v4/core/json-schema-processors.ts +667 -0
  414. package/node_modules/zod/src/v4/core/json-schema.ts +147 -0
  415. package/node_modules/zod/src/v4/core/parse.ts +195 -0
  416. package/node_modules/zod/src/v4/core/regexes.ts +183 -0
  417. package/node_modules/zod/src/v4/core/registries.ts +105 -0
  418. package/node_modules/zod/src/v4/core/schemas.ts +4538 -0
  419. package/node_modules/zod/src/v4/core/standard-schema.ts +159 -0
  420. package/node_modules/zod/src/v4/core/tests/extend.test.ts +59 -0
  421. package/node_modules/zod/src/v4/core/tests/index.test.ts +46 -0
  422. package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +124 -0
  423. package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +22 -0
  424. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +181 -0
  425. package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +379 -0
  426. package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +46 -0
  427. package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +128 -0
  428. package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +69 -0
  429. package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +83 -0
  430. package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +67 -0
  431. package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +45 -0
  432. package/node_modules/zod/src/v4/core/to-json-schema.ts +613 -0
  433. package/node_modules/zod/src/v4/core/util.ts +966 -0
  434. package/node_modules/zod/src/v4/core/versions.ts +5 -0
  435. package/node_modules/zod/src/v4/core/zsf.ts +323 -0
  436. package/node_modules/zod/src/v4/index.ts +4 -0
  437. package/node_modules/zod/src/v4/locales/ar.ts +115 -0
  438. package/node_modules/zod/src/v4/locales/az.ts +111 -0
  439. package/node_modules/zod/src/v4/locales/be.ts +176 -0
  440. package/node_modules/zod/src/v4/locales/bg.ts +128 -0
  441. package/node_modules/zod/src/v4/locales/ca.ts +116 -0
  442. package/node_modules/zod/src/v4/locales/cs.ts +118 -0
  443. package/node_modules/zod/src/v4/locales/da.ts +123 -0
  444. package/node_modules/zod/src/v4/locales/de.ts +116 -0
  445. package/node_modules/zod/src/v4/locales/en.ts +119 -0
  446. package/node_modules/zod/src/v4/locales/eo.ts +118 -0
  447. package/node_modules/zod/src/v4/locales/es.ts +141 -0
  448. package/node_modules/zod/src/v4/locales/fa.ts +126 -0
  449. package/node_modules/zod/src/v4/locales/fi.ts +121 -0
  450. package/node_modules/zod/src/v4/locales/fr-CA.ts +116 -0
  451. package/node_modules/zod/src/v4/locales/fr.ts +116 -0
  452. package/node_modules/zod/src/v4/locales/he.ts +246 -0
  453. package/node_modules/zod/src/v4/locales/hu.ts +117 -0
  454. package/node_modules/zod/src/v4/locales/hy.ts +164 -0
  455. package/node_modules/zod/src/v4/locales/id.ts +115 -0
  456. package/node_modules/zod/src/v4/locales/index.ts +49 -0
  457. package/node_modules/zod/src/v4/locales/is.ts +119 -0
  458. package/node_modules/zod/src/v4/locales/it.ts +116 -0
  459. package/node_modules/zod/src/v4/locales/ja.ts +114 -0
  460. package/node_modules/zod/src/v4/locales/ka.ts +123 -0
  461. package/node_modules/zod/src/v4/locales/kh.ts +7 -0
  462. package/node_modules/zod/src/v4/locales/km.ts +119 -0
  463. package/node_modules/zod/src/v4/locales/ko.ts +121 -0
  464. package/node_modules/zod/src/v4/locales/lt.ts +239 -0
  465. package/node_modules/zod/src/v4/locales/mk.ts +118 -0
  466. package/node_modules/zod/src/v4/locales/ms.ts +115 -0
  467. package/node_modules/zod/src/v4/locales/nl.ts +121 -0
  468. package/node_modules/zod/src/v4/locales/no.ts +116 -0
  469. package/node_modules/zod/src/v4/locales/ota.ts +117 -0
  470. package/node_modules/zod/src/v4/locales/pl.ts +118 -0
  471. package/node_modules/zod/src/v4/locales/ps.ts +126 -0
  472. package/node_modules/zod/src/v4/locales/pt.ts +116 -0
  473. package/node_modules/zod/src/v4/locales/ru.ts +176 -0
  474. package/node_modules/zod/src/v4/locales/sl.ts +118 -0
  475. package/node_modules/zod/src/v4/locales/sv.ts +119 -0
  476. package/node_modules/zod/src/v4/locales/ta.ts +118 -0
  477. package/node_modules/zod/src/v4/locales/th.ts +119 -0
  478. package/node_modules/zod/src/v4/locales/tr.ts +111 -0
  479. package/node_modules/zod/src/v4/locales/ua.ts +7 -0
  480. package/node_modules/zod/src/v4/locales/uk.ts +117 -0
  481. package/node_modules/zod/src/v4/locales/ur.ts +119 -0
  482. package/node_modules/zod/src/v4/locales/uz.ts +116 -0
  483. package/node_modules/zod/src/v4/locales/vi.ts +117 -0
  484. package/node_modules/zod/src/v4/locales/yo.ts +124 -0
  485. package/node_modules/zod/src/v4/locales/zh-CN.ts +116 -0
  486. package/node_modules/zod/src/v4/locales/zh-TW.ts +115 -0
  487. package/node_modules/zod/src/v4/mini/checks.ts +32 -0
  488. package/node_modules/zod/src/v4/mini/coerce.ts +27 -0
  489. package/node_modules/zod/src/v4/mini/external.ts +40 -0
  490. package/node_modules/zod/src/v4/mini/index.ts +3 -0
  491. package/node_modules/zod/src/v4/mini/iso.ts +66 -0
  492. package/node_modules/zod/src/v4/mini/parse.ts +14 -0
  493. package/node_modules/zod/src/v4/mini/schemas.ts +1916 -0
  494. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +24 -0
  495. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +129 -0
  496. package/node_modules/zod/src/v4/mini/tests/brand.test.ts +94 -0
  497. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +144 -0
  498. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +529 -0
  499. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +36 -0
  500. package/node_modules/zod/src/v4/mini/tests/error.test.ts +22 -0
  501. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +5 -0
  502. package/node_modules/zod/src/v4/mini/tests/index.test.ts +963 -0
  503. package/node_modules/zod/src/v4/mini/tests/number.test.ts +95 -0
  504. package/node_modules/zod/src/v4/mini/tests/object.test.ts +227 -0
  505. package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +43 -0
  506. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +275 -0
  507. package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +50 -0
  508. package/node_modules/zod/src/v4/mini/tests/string.test.ts +347 -0
  509. package/node_modules/zod/src/v4-mini/index.ts +3 -0
  510. package/node_modules/zod/v3/ZodError.cjs +138 -0
  511. package/node_modules/zod/v3/ZodError.d.cts +164 -0
  512. package/node_modules/zod/v3/ZodError.d.ts +164 -0
  513. package/node_modules/zod/v3/ZodError.js +133 -0
  514. package/node_modules/zod/v3/errors.cjs +17 -0
  515. package/node_modules/zod/v3/errors.d.cts +5 -0
  516. package/node_modules/zod/v3/errors.d.ts +5 -0
  517. package/node_modules/zod/v3/errors.js +9 -0
  518. package/node_modules/zod/v3/external.cjs +22 -0
  519. package/node_modules/zod/v3/external.d.cts +6 -0
  520. package/node_modules/zod/v3/external.d.ts +6 -0
  521. package/node_modules/zod/v3/external.js +6 -0
  522. package/node_modules/zod/v3/helpers/enumUtil.cjs +2 -0
  523. package/node_modules/zod/v3/helpers/enumUtil.d.cts +8 -0
  524. package/node_modules/zod/v3/helpers/enumUtil.d.ts +8 -0
  525. package/node_modules/zod/v3/helpers/enumUtil.js +1 -0
  526. package/node_modules/zod/v3/helpers/errorUtil.cjs +9 -0
  527. package/node_modules/zod/v3/helpers/errorUtil.d.cts +9 -0
  528. package/node_modules/zod/v3/helpers/errorUtil.d.ts +9 -0
  529. package/node_modules/zod/v3/helpers/errorUtil.js +6 -0
  530. package/node_modules/zod/v3/helpers/parseUtil.cjs +124 -0
  531. package/node_modules/zod/v3/helpers/parseUtil.d.cts +78 -0
  532. package/node_modules/zod/v3/helpers/parseUtil.d.ts +78 -0
  533. package/node_modules/zod/v3/helpers/parseUtil.js +109 -0
  534. package/node_modules/zod/v3/helpers/partialUtil.cjs +2 -0
  535. package/node_modules/zod/v3/helpers/partialUtil.d.cts +8 -0
  536. package/node_modules/zod/v3/helpers/partialUtil.d.ts +8 -0
  537. package/node_modules/zod/v3/helpers/partialUtil.js +1 -0
  538. package/node_modules/zod/v3/helpers/typeAliases.cjs +2 -0
  539. package/node_modules/zod/v3/helpers/typeAliases.d.cts +2 -0
  540. package/node_modules/zod/v3/helpers/typeAliases.d.ts +2 -0
  541. package/node_modules/zod/v3/helpers/typeAliases.js +1 -0
  542. package/node_modules/zod/v3/helpers/util.cjs +137 -0
  543. package/node_modules/zod/v3/helpers/util.d.cts +85 -0
  544. package/node_modules/zod/v3/helpers/util.d.ts +85 -0
  545. package/node_modules/zod/v3/helpers/util.js +133 -0
  546. package/node_modules/zod/v3/index.cjs +33 -0
  547. package/node_modules/zod/v3/index.d.cts +4 -0
  548. package/node_modules/zod/v3/index.d.ts +4 -0
  549. package/node_modules/zod/v3/index.js +4 -0
  550. package/node_modules/zod/v3/locales/en.cjs +112 -0
  551. package/node_modules/zod/v3/locales/en.d.cts +3 -0
  552. package/node_modules/zod/v3/locales/en.d.ts +3 -0
  553. package/node_modules/zod/v3/locales/en.js +109 -0
  554. package/node_modules/zod/v3/package.json +6 -0
  555. package/node_modules/zod/v3/standard-schema.cjs +2 -0
  556. package/node_modules/zod/v3/standard-schema.d.cts +102 -0
  557. package/node_modules/zod/v3/standard-schema.d.ts +102 -0
  558. package/node_modules/zod/v3/standard-schema.js +1 -0
  559. package/node_modules/zod/v3/types.cjs +3777 -0
  560. package/node_modules/zod/v3/types.d.cts +1034 -0
  561. package/node_modules/zod/v3/types.d.ts +1034 -0
  562. package/node_modules/zod/v3/types.js +3695 -0
  563. package/node_modules/zod/v4/classic/checks.cjs +33 -0
  564. package/node_modules/zod/v4/classic/checks.d.cts +1 -0
  565. package/node_modules/zod/v4/classic/checks.d.ts +1 -0
  566. package/node_modules/zod/v4/classic/checks.js +1 -0
  567. package/node_modules/zod/v4/classic/coerce.cjs +47 -0
  568. package/node_modules/zod/v4/classic/coerce.d.cts +17 -0
  569. package/node_modules/zod/v4/classic/coerce.d.ts +17 -0
  570. package/node_modules/zod/v4/classic/coerce.js +17 -0
  571. package/node_modules/zod/v4/classic/compat.cjs +61 -0
  572. package/node_modules/zod/v4/classic/compat.d.cts +50 -0
  573. package/node_modules/zod/v4/classic/compat.d.ts +50 -0
  574. package/node_modules/zod/v4/classic/compat.js +31 -0
  575. package/node_modules/zod/v4/classic/errors.cjs +74 -0
  576. package/node_modules/zod/v4/classic/errors.d.cts +30 -0
  577. package/node_modules/zod/v4/classic/errors.d.ts +30 -0
  578. package/node_modules/zod/v4/classic/errors.js +48 -0
  579. package/node_modules/zod/v4/classic/external.cjs +73 -0
  580. package/node_modules/zod/v4/classic/external.d.cts +15 -0
  581. package/node_modules/zod/v4/classic/external.d.ts +15 -0
  582. package/node_modules/zod/v4/classic/external.js +20 -0
  583. package/node_modules/zod/v4/classic/from-json-schema.cjs +610 -0
  584. package/node_modules/zod/v4/classic/from-json-schema.d.cts +12 -0
  585. package/node_modules/zod/v4/classic/from-json-schema.d.ts +12 -0
  586. package/node_modules/zod/v4/classic/from-json-schema.js +584 -0
  587. package/node_modules/zod/v4/classic/index.cjs +33 -0
  588. package/node_modules/zod/v4/classic/index.d.cts +4 -0
  589. package/node_modules/zod/v4/classic/index.d.ts +4 -0
  590. package/node_modules/zod/v4/classic/index.js +4 -0
  591. package/node_modules/zod/v4/classic/iso.cjs +60 -0
  592. package/node_modules/zod/v4/classic/iso.d.cts +22 -0
  593. package/node_modules/zod/v4/classic/iso.d.ts +22 -0
  594. package/node_modules/zod/v4/classic/iso.js +30 -0
  595. package/node_modules/zod/v4/classic/package.json +6 -0
  596. package/node_modules/zod/v4/classic/parse.cjs +41 -0
  597. package/node_modules/zod/v4/classic/parse.d.cts +31 -0
  598. package/node_modules/zod/v4/classic/parse.d.ts +31 -0
  599. package/node_modules/zod/v4/classic/parse.js +15 -0
  600. package/node_modules/zod/v4/classic/schemas.cjs +1272 -0
  601. package/node_modules/zod/v4/classic/schemas.d.cts +739 -0
  602. package/node_modules/zod/v4/classic/schemas.d.ts +739 -0
  603. package/node_modules/zod/v4/classic/schemas.js +1157 -0
  604. package/node_modules/zod/v4/core/api.cjs +1222 -0
  605. package/node_modules/zod/v4/core/api.d.cts +304 -0
  606. package/node_modules/zod/v4/core/api.d.ts +304 -0
  607. package/node_modules/zod/v4/core/api.js +1082 -0
  608. package/node_modules/zod/v4/core/checks.cjs +601 -0
  609. package/node_modules/zod/v4/core/checks.d.cts +278 -0
  610. package/node_modules/zod/v4/core/checks.d.ts +278 -0
  611. package/node_modules/zod/v4/core/checks.js +575 -0
  612. package/node_modules/zod/v4/core/core.cjs +83 -0
  613. package/node_modules/zod/v4/core/core.d.cts +70 -0
  614. package/node_modules/zod/v4/core/core.d.ts +70 -0
  615. package/node_modules/zod/v4/core/core.js +76 -0
  616. package/node_modules/zod/v4/core/doc.cjs +39 -0
  617. package/node_modules/zod/v4/core/doc.d.cts +14 -0
  618. package/node_modules/zod/v4/core/doc.d.ts +14 -0
  619. package/node_modules/zod/v4/core/doc.js +35 -0
  620. package/node_modules/zod/v4/core/errors.cjs +213 -0
  621. package/node_modules/zod/v4/core/errors.d.cts +220 -0
  622. package/node_modules/zod/v4/core/errors.d.ts +220 -0
  623. package/node_modules/zod/v4/core/errors.js +182 -0
  624. package/node_modules/zod/v4/core/index.cjs +47 -0
  625. package/node_modules/zod/v4/core/index.d.cts +16 -0
  626. package/node_modules/zod/v4/core/index.d.ts +16 -0
  627. package/node_modules/zod/v4/core/index.js +16 -0
  628. package/node_modules/zod/v4/core/json-schema-generator.cjs +99 -0
  629. package/node_modules/zod/v4/core/json-schema-generator.d.cts +65 -0
  630. package/node_modules/zod/v4/core/json-schema-generator.d.ts +65 -0
  631. package/node_modules/zod/v4/core/json-schema-generator.js +95 -0
  632. package/node_modules/zod/v4/core/json-schema-processors.cjs +648 -0
  633. package/node_modules/zod/v4/core/json-schema-processors.d.cts +49 -0
  634. package/node_modules/zod/v4/core/json-schema-processors.d.ts +49 -0
  635. package/node_modules/zod/v4/core/json-schema-processors.js +605 -0
  636. package/node_modules/zod/v4/core/json-schema.cjs +2 -0
  637. package/node_modules/zod/v4/core/json-schema.d.cts +88 -0
  638. package/node_modules/zod/v4/core/json-schema.d.ts +88 -0
  639. package/node_modules/zod/v4/core/json-schema.js +1 -0
  640. package/node_modules/zod/v4/core/package.json +6 -0
  641. package/node_modules/zod/v4/core/parse.cjs +131 -0
  642. package/node_modules/zod/v4/core/parse.d.cts +49 -0
  643. package/node_modules/zod/v4/core/parse.d.ts +49 -0
  644. package/node_modules/zod/v4/core/parse.js +93 -0
  645. package/node_modules/zod/v4/core/regexes.cjs +166 -0
  646. package/node_modules/zod/v4/core/regexes.d.cts +79 -0
  647. package/node_modules/zod/v4/core/regexes.d.ts +79 -0
  648. package/node_modules/zod/v4/core/regexes.js +133 -0
  649. package/node_modules/zod/v4/core/registries.cjs +56 -0
  650. package/node_modules/zod/v4/core/registries.d.cts +35 -0
  651. package/node_modules/zod/v4/core/registries.d.ts +35 -0
  652. package/node_modules/zod/v4/core/registries.js +51 -0
  653. package/node_modules/zod/v4/core/schemas.cjs +2124 -0
  654. package/node_modules/zod/v4/core/schemas.d.cts +1146 -0
  655. package/node_modules/zod/v4/core/schemas.d.ts +1146 -0
  656. package/node_modules/zod/v4/core/schemas.js +2093 -0
  657. package/node_modules/zod/v4/core/standard-schema.cjs +2 -0
  658. package/node_modules/zod/v4/core/standard-schema.d.cts +126 -0
  659. package/node_modules/zod/v4/core/standard-schema.d.ts +126 -0
  660. package/node_modules/zod/v4/core/standard-schema.js +1 -0
  661. package/node_modules/zod/v4/core/to-json-schema.cjs +446 -0
  662. package/node_modules/zod/v4/core/to-json-schema.d.cts +114 -0
  663. package/node_modules/zod/v4/core/to-json-schema.d.ts +114 -0
  664. package/node_modules/zod/v4/core/to-json-schema.js +437 -0
  665. package/node_modules/zod/v4/core/util.cjs +710 -0
  666. package/node_modules/zod/v4/core/util.d.cts +199 -0
  667. package/node_modules/zod/v4/core/util.d.ts +199 -0
  668. package/node_modules/zod/v4/core/util.js +651 -0
  669. package/node_modules/zod/v4/core/versions.cjs +8 -0
  670. package/node_modules/zod/v4/core/versions.d.cts +5 -0
  671. package/node_modules/zod/v4/core/versions.d.ts +5 -0
  672. package/node_modules/zod/v4/core/versions.js +5 -0
  673. package/node_modules/zod/v4/index.cjs +22 -0
  674. package/node_modules/zod/v4/index.d.cts +3 -0
  675. package/node_modules/zod/v4/index.d.ts +3 -0
  676. package/node_modules/zod/v4/index.js +3 -0
  677. package/node_modules/zod/v4/locales/ar.cjs +133 -0
  678. package/node_modules/zod/v4/locales/ar.d.cts +5 -0
  679. package/node_modules/zod/v4/locales/ar.d.ts +4 -0
  680. package/node_modules/zod/v4/locales/ar.js +106 -0
  681. package/node_modules/zod/v4/locales/az.cjs +132 -0
  682. package/node_modules/zod/v4/locales/az.d.cts +5 -0
  683. package/node_modules/zod/v4/locales/az.d.ts +4 -0
  684. package/node_modules/zod/v4/locales/az.js +105 -0
  685. package/node_modules/zod/v4/locales/be.cjs +183 -0
  686. package/node_modules/zod/v4/locales/be.d.cts +5 -0
  687. package/node_modules/zod/v4/locales/be.d.ts +4 -0
  688. package/node_modules/zod/v4/locales/be.js +156 -0
  689. package/node_modules/zod/v4/locales/bg.cjs +147 -0
  690. package/node_modules/zod/v4/locales/bg.d.cts +5 -0
  691. package/node_modules/zod/v4/locales/bg.d.ts +4 -0
  692. package/node_modules/zod/v4/locales/bg.js +120 -0
  693. package/node_modules/zod/v4/locales/ca.cjs +134 -0
  694. package/node_modules/zod/v4/locales/ca.d.cts +5 -0
  695. package/node_modules/zod/v4/locales/ca.d.ts +4 -0
  696. package/node_modules/zod/v4/locales/ca.js +107 -0
  697. package/node_modules/zod/v4/locales/cs.cjs +138 -0
  698. package/node_modules/zod/v4/locales/cs.d.cts +5 -0
  699. package/node_modules/zod/v4/locales/cs.d.ts +4 -0
  700. package/node_modules/zod/v4/locales/cs.js +111 -0
  701. package/node_modules/zod/v4/locales/da.cjs +142 -0
  702. package/node_modules/zod/v4/locales/da.d.cts +5 -0
  703. package/node_modules/zod/v4/locales/da.d.ts +4 -0
  704. package/node_modules/zod/v4/locales/da.js +115 -0
  705. package/node_modules/zod/v4/locales/de.cjs +135 -0
  706. package/node_modules/zod/v4/locales/de.d.cts +5 -0
  707. package/node_modules/zod/v4/locales/de.d.ts +4 -0
  708. package/node_modules/zod/v4/locales/de.js +108 -0
  709. package/node_modules/zod/v4/locales/en.cjs +136 -0
  710. package/node_modules/zod/v4/locales/en.d.cts +5 -0
  711. package/node_modules/zod/v4/locales/en.d.ts +4 -0
  712. package/node_modules/zod/v4/locales/en.js +109 -0
  713. package/node_modules/zod/v4/locales/eo.cjs +136 -0
  714. package/node_modules/zod/v4/locales/eo.d.cts +5 -0
  715. package/node_modules/zod/v4/locales/eo.d.ts +4 -0
  716. package/node_modules/zod/v4/locales/eo.js +109 -0
  717. package/node_modules/zod/v4/locales/es.cjs +159 -0
  718. package/node_modules/zod/v4/locales/es.d.cts +5 -0
  719. package/node_modules/zod/v4/locales/es.d.ts +4 -0
  720. package/node_modules/zod/v4/locales/es.js +132 -0
  721. package/node_modules/zod/v4/locales/fa.cjs +141 -0
  722. package/node_modules/zod/v4/locales/fa.d.cts +5 -0
  723. package/node_modules/zod/v4/locales/fa.d.ts +4 -0
  724. package/node_modules/zod/v4/locales/fa.js +114 -0
  725. package/node_modules/zod/v4/locales/fi.cjs +139 -0
  726. package/node_modules/zod/v4/locales/fi.d.cts +5 -0
  727. package/node_modules/zod/v4/locales/fi.d.ts +4 -0
  728. package/node_modules/zod/v4/locales/fi.js +112 -0
  729. package/node_modules/zod/v4/locales/fr-CA.cjs +134 -0
  730. package/node_modules/zod/v4/locales/fr-CA.d.cts +5 -0
  731. package/node_modules/zod/v4/locales/fr-CA.d.ts +4 -0
  732. package/node_modules/zod/v4/locales/fr-CA.js +107 -0
  733. package/node_modules/zod/v4/locales/fr.cjs +135 -0
  734. package/node_modules/zod/v4/locales/fr.d.cts +5 -0
  735. package/node_modules/zod/v4/locales/fr.d.ts +4 -0
  736. package/node_modules/zod/v4/locales/fr.js +108 -0
  737. package/node_modules/zod/v4/locales/he.cjs +241 -0
  738. package/node_modules/zod/v4/locales/he.d.cts +5 -0
  739. package/node_modules/zod/v4/locales/he.d.ts +4 -0
  740. package/node_modules/zod/v4/locales/he.js +214 -0
  741. package/node_modules/zod/v4/locales/hu.cjs +135 -0
  742. package/node_modules/zod/v4/locales/hu.d.cts +5 -0
  743. package/node_modules/zod/v4/locales/hu.d.ts +4 -0
  744. package/node_modules/zod/v4/locales/hu.js +108 -0
  745. package/node_modules/zod/v4/locales/hy.cjs +174 -0
  746. package/node_modules/zod/v4/locales/hy.d.cts +5 -0
  747. package/node_modules/zod/v4/locales/hy.d.ts +4 -0
  748. package/node_modules/zod/v4/locales/hy.js +147 -0
  749. package/node_modules/zod/v4/locales/id.cjs +133 -0
  750. package/node_modules/zod/v4/locales/id.d.cts +5 -0
  751. package/node_modules/zod/v4/locales/id.d.ts +4 -0
  752. package/node_modules/zod/v4/locales/id.js +106 -0
  753. package/node_modules/zod/v4/locales/index.cjs +104 -0
  754. package/node_modules/zod/v4/locales/index.d.cts +49 -0
  755. package/node_modules/zod/v4/locales/index.d.ts +49 -0
  756. package/node_modules/zod/v4/locales/index.js +49 -0
  757. package/node_modules/zod/v4/locales/is.cjs +136 -0
  758. package/node_modules/zod/v4/locales/is.d.cts +5 -0
  759. package/node_modules/zod/v4/locales/is.d.ts +4 -0
  760. package/node_modules/zod/v4/locales/is.js +109 -0
  761. package/node_modules/zod/v4/locales/it.cjs +135 -0
  762. package/node_modules/zod/v4/locales/it.d.cts +5 -0
  763. package/node_modules/zod/v4/locales/it.d.ts +4 -0
  764. package/node_modules/zod/v4/locales/it.js +108 -0
  765. package/node_modules/zod/v4/locales/ja.cjs +134 -0
  766. package/node_modules/zod/v4/locales/ja.d.cts +5 -0
  767. package/node_modules/zod/v4/locales/ja.d.ts +4 -0
  768. package/node_modules/zod/v4/locales/ja.js +107 -0
  769. package/node_modules/zod/v4/locales/ka.cjs +139 -0
  770. package/node_modules/zod/v4/locales/ka.d.cts +5 -0
  771. package/node_modules/zod/v4/locales/ka.d.ts +4 -0
  772. package/node_modules/zod/v4/locales/ka.js +112 -0
  773. package/node_modules/zod/v4/locales/kh.cjs +12 -0
  774. package/node_modules/zod/v4/locales/kh.d.cts +5 -0
  775. package/node_modules/zod/v4/locales/kh.d.ts +5 -0
  776. package/node_modules/zod/v4/locales/kh.js +5 -0
  777. package/node_modules/zod/v4/locales/km.cjs +137 -0
  778. package/node_modules/zod/v4/locales/km.d.cts +5 -0
  779. package/node_modules/zod/v4/locales/km.d.ts +4 -0
  780. package/node_modules/zod/v4/locales/km.js +110 -0
  781. package/node_modules/zod/v4/locales/ko.cjs +138 -0
  782. package/node_modules/zod/v4/locales/ko.d.cts +5 -0
  783. package/node_modules/zod/v4/locales/ko.d.ts +4 -0
  784. package/node_modules/zod/v4/locales/ko.js +111 -0
  785. package/node_modules/zod/v4/locales/lt.cjs +230 -0
  786. package/node_modules/zod/v4/locales/lt.d.cts +5 -0
  787. package/node_modules/zod/v4/locales/lt.d.ts +4 -0
  788. package/node_modules/zod/v4/locales/lt.js +203 -0
  789. package/node_modules/zod/v4/locales/mk.cjs +136 -0
  790. package/node_modules/zod/v4/locales/mk.d.cts +5 -0
  791. package/node_modules/zod/v4/locales/mk.d.ts +4 -0
  792. package/node_modules/zod/v4/locales/mk.js +109 -0
  793. package/node_modules/zod/v4/locales/ms.cjs +134 -0
  794. package/node_modules/zod/v4/locales/ms.d.cts +5 -0
  795. package/node_modules/zod/v4/locales/ms.d.ts +4 -0
  796. package/node_modules/zod/v4/locales/ms.js +107 -0
  797. package/node_modules/zod/v4/locales/nl.cjs +137 -0
  798. package/node_modules/zod/v4/locales/nl.d.cts +5 -0
  799. package/node_modules/zod/v4/locales/nl.d.ts +4 -0
  800. package/node_modules/zod/v4/locales/nl.js +110 -0
  801. package/node_modules/zod/v4/locales/no.cjs +135 -0
  802. package/node_modules/zod/v4/locales/no.d.cts +5 -0
  803. package/node_modules/zod/v4/locales/no.d.ts +4 -0
  804. package/node_modules/zod/v4/locales/no.js +108 -0
  805. package/node_modules/zod/v4/locales/ota.cjs +136 -0
  806. package/node_modules/zod/v4/locales/ota.d.cts +5 -0
  807. package/node_modules/zod/v4/locales/ota.d.ts +4 -0
  808. package/node_modules/zod/v4/locales/ota.js +109 -0
  809. package/node_modules/zod/v4/locales/package.json +6 -0
  810. package/node_modules/zod/v4/locales/pl.cjs +136 -0
  811. package/node_modules/zod/v4/locales/pl.d.cts +5 -0
  812. package/node_modules/zod/v4/locales/pl.d.ts +4 -0
  813. package/node_modules/zod/v4/locales/pl.js +109 -0
  814. package/node_modules/zod/v4/locales/ps.cjs +141 -0
  815. package/node_modules/zod/v4/locales/ps.d.cts +5 -0
  816. package/node_modules/zod/v4/locales/ps.d.ts +4 -0
  817. package/node_modules/zod/v4/locales/ps.js +114 -0
  818. package/node_modules/zod/v4/locales/pt.cjs +135 -0
  819. package/node_modules/zod/v4/locales/pt.d.cts +5 -0
  820. package/node_modules/zod/v4/locales/pt.d.ts +4 -0
  821. package/node_modules/zod/v4/locales/pt.js +108 -0
  822. package/node_modules/zod/v4/locales/ru.cjs +183 -0
  823. package/node_modules/zod/v4/locales/ru.d.cts +5 -0
  824. package/node_modules/zod/v4/locales/ru.d.ts +4 -0
  825. package/node_modules/zod/v4/locales/ru.js +156 -0
  826. package/node_modules/zod/v4/locales/sl.cjs +136 -0
  827. package/node_modules/zod/v4/locales/sl.d.cts +5 -0
  828. package/node_modules/zod/v4/locales/sl.d.ts +4 -0
  829. package/node_modules/zod/v4/locales/sl.js +109 -0
  830. package/node_modules/zod/v4/locales/sv.cjs +137 -0
  831. package/node_modules/zod/v4/locales/sv.d.cts +5 -0
  832. package/node_modules/zod/v4/locales/sv.d.ts +4 -0
  833. package/node_modules/zod/v4/locales/sv.js +110 -0
  834. package/node_modules/zod/v4/locales/ta.cjs +137 -0
  835. package/node_modules/zod/v4/locales/ta.d.cts +5 -0
  836. package/node_modules/zod/v4/locales/ta.d.ts +4 -0
  837. package/node_modules/zod/v4/locales/ta.js +110 -0
  838. package/node_modules/zod/v4/locales/th.cjs +137 -0
  839. package/node_modules/zod/v4/locales/th.d.cts +5 -0
  840. package/node_modules/zod/v4/locales/th.d.ts +4 -0
  841. package/node_modules/zod/v4/locales/th.js +110 -0
  842. package/node_modules/zod/v4/locales/tr.cjs +132 -0
  843. package/node_modules/zod/v4/locales/tr.d.cts +5 -0
  844. package/node_modules/zod/v4/locales/tr.d.ts +4 -0
  845. package/node_modules/zod/v4/locales/tr.js +105 -0
  846. package/node_modules/zod/v4/locales/ua.cjs +12 -0
  847. package/node_modules/zod/v4/locales/ua.d.cts +5 -0
  848. package/node_modules/zod/v4/locales/ua.d.ts +5 -0
  849. package/node_modules/zod/v4/locales/ua.js +5 -0
  850. package/node_modules/zod/v4/locales/uk.cjs +135 -0
  851. package/node_modules/zod/v4/locales/uk.d.cts +5 -0
  852. package/node_modules/zod/v4/locales/uk.d.ts +4 -0
  853. package/node_modules/zod/v4/locales/uk.js +108 -0
  854. package/node_modules/zod/v4/locales/ur.cjs +137 -0
  855. package/node_modules/zod/v4/locales/ur.d.cts +5 -0
  856. package/node_modules/zod/v4/locales/ur.d.ts +4 -0
  857. package/node_modules/zod/v4/locales/ur.js +110 -0
  858. package/node_modules/zod/v4/locales/uz.cjs +136 -0
  859. package/node_modules/zod/v4/locales/uz.d.cts +5 -0
  860. package/node_modules/zod/v4/locales/uz.d.ts +4 -0
  861. package/node_modules/zod/v4/locales/uz.js +109 -0
  862. package/node_modules/zod/v4/locales/vi.cjs +135 -0
  863. package/node_modules/zod/v4/locales/vi.d.cts +5 -0
  864. package/node_modules/zod/v4/locales/vi.d.ts +4 -0
  865. package/node_modules/zod/v4/locales/vi.js +108 -0
  866. package/node_modules/zod/v4/locales/yo.cjs +134 -0
  867. package/node_modules/zod/v4/locales/yo.d.cts +5 -0
  868. package/node_modules/zod/v4/locales/yo.d.ts +4 -0
  869. package/node_modules/zod/v4/locales/yo.js +107 -0
  870. package/node_modules/zod/v4/locales/zh-CN.cjs +136 -0
  871. package/node_modules/zod/v4/locales/zh-CN.d.cts +5 -0
  872. package/node_modules/zod/v4/locales/zh-CN.d.ts +4 -0
  873. package/node_modules/zod/v4/locales/zh-CN.js +109 -0
  874. package/node_modules/zod/v4/locales/zh-TW.cjs +134 -0
  875. package/node_modules/zod/v4/locales/zh-TW.d.cts +5 -0
  876. package/node_modules/zod/v4/locales/zh-TW.d.ts +4 -0
  877. package/node_modules/zod/v4/locales/zh-TW.js +107 -0
  878. package/node_modules/zod/v4/mini/checks.cjs +34 -0
  879. package/node_modules/zod/v4/mini/checks.d.cts +1 -0
  880. package/node_modules/zod/v4/mini/checks.d.ts +1 -0
  881. package/node_modules/zod/v4/mini/checks.js +1 -0
  882. package/node_modules/zod/v4/mini/coerce.cjs +52 -0
  883. package/node_modules/zod/v4/mini/coerce.d.cts +7 -0
  884. package/node_modules/zod/v4/mini/coerce.d.ts +7 -0
  885. package/node_modules/zod/v4/mini/coerce.js +22 -0
  886. package/node_modules/zod/v4/mini/external.cjs +63 -0
  887. package/node_modules/zod/v4/mini/external.d.cts +12 -0
  888. package/node_modules/zod/v4/mini/external.d.ts +12 -0
  889. package/node_modules/zod/v4/mini/external.js +14 -0
  890. package/node_modules/zod/v4/mini/index.cjs +32 -0
  891. package/node_modules/zod/v4/mini/index.d.cts +3 -0
  892. package/node_modules/zod/v4/mini/index.d.ts +3 -0
  893. package/node_modules/zod/v4/mini/index.js +3 -0
  894. package/node_modules/zod/v4/mini/iso.cjs +64 -0
  895. package/node_modules/zod/v4/mini/iso.d.cts +22 -0
  896. package/node_modules/zod/v4/mini/iso.d.ts +22 -0
  897. package/node_modules/zod/v4/mini/iso.js +34 -0
  898. package/node_modules/zod/v4/mini/package.json +6 -0
  899. package/node_modules/zod/v4/mini/parse.cjs +16 -0
  900. package/node_modules/zod/v4/mini/parse.d.cts +1 -0
  901. package/node_modules/zod/v4/mini/parse.d.ts +1 -0
  902. package/node_modules/zod/v4/mini/parse.js +1 -0
  903. package/node_modules/zod/v4/mini/schemas.cjs +1046 -0
  904. package/node_modules/zod/v4/mini/schemas.d.cts +427 -0
  905. package/node_modules/zod/v4/mini/schemas.d.ts +427 -0
  906. package/node_modules/zod/v4/mini/schemas.js +925 -0
  907. package/node_modules/zod/v4/package.json +6 -0
  908. package/node_modules/zod/v4-mini/index.cjs +32 -0
  909. package/node_modules/zod/v4-mini/index.d.cts +3 -0
  910. package/node_modules/zod/v4-mini/index.d.ts +3 -0
  911. package/node_modules/zod/v4-mini/index.js +3 -0
  912. package/node_modules/zod/v4-mini/package.json +6 -0
  913. package/package.json +3 -1
  914. package/plugin/package.json +6 -4
package/dist/index.js ADDED
@@ -0,0 +1,1542 @@
1
+ /**
2
+ * hypermem — Agent-Centric Memory & Context Composition Engine
3
+ *
4
+ * @module @psiclawops/hypermem
5
+ *
6
+ * Architecture:
7
+ * L1: CacheLayer — SQLite `:memory:` hot session working memory
8
+ * L2: messages.db — per-agent conversation log (rotatable)
9
+ * L3: vectors.db — per-agent semantic search index (reconstructable)
10
+ * L4: library.db — fleet-wide structured knowledge (crown jewel)
11
+ */
12
+ export { ENGINE_VERSION, MIN_NODE_VERSION, MIN_REDIS_VERSION, SQLITE_VEC_VERSION, MAIN_SCHEMA_VERSION, LIBRARY_SCHEMA_VERSION_EXPORT, HYPERMEM_COMPAT_VERSION, SCHEMA_COMPAT } from './version.js';
13
+ export { DatabaseManager } from './db.js';
14
+ export { MessageStore } from './message-store.js';
15
+ export { ToolArtifactStore } from './tool-artifact-store.js';
16
+ export { FactStore } from './fact-store.js';
17
+ export { KnowledgeStore } from './knowledge-store.js';
18
+ export { TopicStore } from './topic-store.js';
19
+ export { EpisodeStore } from './episode-store.js';
20
+ export { PreferenceStore } from './preference-store.js';
21
+ export { FleetStore } from './fleet-store.js';
22
+ export { SystemStore } from './system-store.js';
23
+ export { WorkStore } from './work-store.js';
24
+ export { ensureContextSchema, getActiveContext, getOrCreateActiveContext, updateContextHead, archiveContext, rotateSessionContext, getContextById, getArchivedContexts, getArchivedContext, getContextLineage, getForkChildren } from './context-store.js';
25
+ export { DesiredStateStore } from './desired-state-store.js';
26
+ export { ExpertiseStore } from './expertise-store.js';
27
+ export { evictStaleContent, DEFAULT_EVICTION_CONFIG } from './image-eviction.js';
28
+ export { KnowledgeGraph } from './knowledge-graph.js';
29
+ export { RateLimiter, createRateLimitedEmbedder } from './rate-limiter.js';
30
+ export { CacheLayer } from './cache.js';
31
+ export { TRIM_SOFT_TARGET, TRIM_GROWTH_THRESHOLD, TRIM_HEADROOM_FRACTION, TRIM_BUDGET_POLICY, resolveTrimBudgets, } from './budget-policy.js';
32
+ export { resolveAdaptiveLifecyclePolicy, } from './adaptive-lifecycle.js';
33
+ // ── Phase C0.2: Canonical degradation contracts ───────────────────────────────
34
+ export {
35
+ // Reason enum + all values
36
+ DEGRADATION_REASONS, DEGRADATION_LIMITS, isDegradationReason, isReplayState,
37
+ // Tool-chain stub
38
+ formatToolChainStub, parseToolChainStub, isToolChainStub,
39
+ // Artifact reference
40
+ formatArtifactRef, parseArtifactRef, isArtifactRef,
41
+ // Replay marker
42
+ formatReplayMarker, parseReplayMarker, isReplayMarker,
43
+ // Generic detector
44
+ isDegradedContent, } from './degradation.js';
45
+ export { REPLAY_RECOVERY_POLICY, decideReplayRecovery, isColdRedisReplay, isReplayRecovered, } from './replay-recovery.js';
46
+ export { Compositor, applyToolGradientToWindow, canPersistReshapedHistory, OPENCLAW_BOOTSTRAP_FILES, resolveToolChainEjections } from './compositor.js';
47
+ // Sprint 3 + Sprint 4: depth estimator, session classifier, unified pressure signal
48
+ export { classifySessionType, estimateObservedMsgDensity, computeAdaptiveHistoryDepth, computeUnifiedPressure, PRESSURE_SOURCE } from './compositor.js';
49
+ export { TRIGGER_REGISTRY, TRIGGER_REGISTRY_VERSION, TRIGGER_REGISTRY_HASH, DEFAULT_TRIGGERS, matchTriggers, } from './trigger-registry.js';
50
+ export { canonicalizeSnapshotJson, hashSnapshotJson, parseSnapshotSlotsJson, isInlineSnapshotSlotPayload, computeInlineIntegrityHash, attachInlineIntegrityHash, computeSlotsIntegrityHash, verifySnapshotSlotsIntegrity, } from './composition-snapshot-integrity.js';
51
+ export { insertCompositionSnapshot, listCompositionSnapshots, getCompositionSnapshot, verifyCompositionSnapshot, getLatestValidCompositionSnapshot, } from './composition-snapshot-store.js';
52
+ export { ensureCompactionFenceSchema, updateCompactionFence, getCompactionFence, getCompactionEligibility, getCompactableMessages, } from './compaction-fence.js';
53
+ export { verifyPreservation, verifyPreservationFromVectors, } from './preservation-gate.js';
54
+ export { toProviderFormat, fromProviderFormat, userMessageToNeutral, toolResultsToNeutral, normalizeToolCallId, generateToolCallId, detectProvider, repairToolCallPairs, } from './provider-translator.js';
55
+ export { migrate, SCHEMA_VERSION } from './schema.js';
56
+ export { migrateLibrary, LIBRARY_SCHEMA_VERSION } from './library-schema.js';
57
+ export { VectorStore, generateEmbeddings } from './vector-store.js';
58
+ export { hybridSearch, buildFtsQuery } from './hybrid-retrieval.js';
59
+ export { createReranker, ZeroEntropyReranker, OpenRouterReranker, OllamaReranker, } from './reranker.js';
60
+ export { ContradictionDetector } from './contradiction-detector.js';
61
+ export { DocChunkStore } from './doc-chunk-store.js';
62
+ export { WorkspaceSeeder, seedWorkspace } from './seed.js';
63
+ export { chunkMarkdown, chunkFile, inferCollection, hashContent, ACA_COLLECTIONS } from './doc-chunker.js';
64
+ export { crossAgentQuery, canAccess, visibilityFilter, defaultOrgRegistry, buildOrgRegistryFromDb, loadOrgRegistryFromDb, } from './cross-agent.js';
65
+ export { BackgroundIndexer, createIndexer } from './background-indexer.js';
66
+ export { runDreamingPromoter, runDreamingPassForFleet, resolveAgentWorkspacePath, DEFAULT_DREAMER_CONFIG, } from './dreaming-promoter.js';
67
+ export { TopicSynthesizer } from './topic-synthesizer.js';
68
+ export { WikiPageEmitter } from './wiki-page-emitter.js';
69
+ export { lintKnowledge } from './knowledge-lint.js';
70
+ export { buildSpawnContext } from './spawn-context.js';
71
+ export { runNoiseSweep, runToolDecay } from './proactive-pass.js';
72
+ export { classifyContentType, signalWeight, isSignalBearing, SIGNAL_WEIGHT } from './content-type-classifier.js';
73
+ export { detectTopicShift, stripMessageMetadata } from './topic-detector.js';
74
+ export { SessionTopicMap } from './session-topic-map.js';
75
+ export { getActiveFOS, matchMOD, renderFOS, renderMOD, recordOutputMetrics, } from './fos-mod.js';
76
+ import { DatabaseManager } from './db.js';
77
+ import { MessageStore } from './message-store.js';
78
+ import { FactStore } from './fact-store.js';
79
+ import { KnowledgeStore } from './knowledge-store.js';
80
+ import { TopicStore } from './topic-store.js';
81
+ import { EpisodeStore } from './episode-store.js';
82
+ import { PreferenceStore } from './preference-store.js';
83
+ import { FleetStore } from './fleet-store.js';
84
+ import { SystemStore } from './system-store.js';
85
+ import { WorkStore } from './work-store.js';
86
+ import { KnowledgeGraph } from './knowledge-graph.js';
87
+ import { DesiredStateStore } from './desired-state-store.js';
88
+ import { CacheLayer } from './cache.js';
89
+ import { Compositor } from './compositor.js';
90
+ import { getArchivedContexts } from './context-store.js';
91
+ import { VectorStore } from './vector-store.js';
92
+ import { userMessageToNeutral, fromProviderFormat } from './provider-translator.js';
93
+ import { stripMessageMetadata } from './topic-detector.js';
94
+ import { DocChunkStore } from './doc-chunk-store.js';
95
+ import { WorkspaceSeeder } from './seed.js';
96
+ import { crossAgentQuery, buildOrgRegistryFromDb } from './cross-agent.js';
97
+ import fs from 'node:fs';
98
+ import path from 'node:path';
99
+ import os from 'node:os';
100
+ const DEFAULT_CONFIG = {
101
+ enabled: true,
102
+ dataDir: path.join(process.env.HOME || os.homedir(), '.openclaw', 'hypermem'),
103
+ cache: {
104
+ keyPrefix: 'hm:',
105
+ sessionTTL: 14400, // 4 hours — system/identity/meta slots
106
+ historyTTL: 604800, // 7 days — extended for ClawCanvas display
107
+ },
108
+ compositor: {
109
+ // TUNE-010 (2026-04-02): Raised from 65000 → 90000.
110
+ // TUNE-008 dropped to 65k as a tool-loop overflow band-aid. The real fix
111
+ // (tool-loop pass-through guard in assemble()) means tool turns don't
112
+ // re-run composition, so 90k is safe — leaves ~30k headroom for in-flight
113
+ // tool results on a 120k window. Budget is better spent on context quality.
114
+ defaultTokenBudget: 90000,
115
+ maxHistoryMessages: 1000,
116
+ maxFacts: 28,
117
+ maxCrossSessionContext: 6000,
118
+ maxRecentToolPairs: 3,
119
+ maxProseToolPairs: 10,
120
+ warmHistoryBudgetFraction: 0.4,
121
+ },
122
+ indexer: {
123
+ enabled: true,
124
+ factExtractionMode: 'tiered',
125
+ topicDormantAfter: '24h',
126
+ topicClosedAfter: '7d',
127
+ factDecayRate: 0.01,
128
+ episodeSignificanceThreshold: 0.5,
129
+ periodicInterval: 300000,
130
+ batchSize: 128,
131
+ maxMessagesPerTick: 500,
132
+ },
133
+ embedding: {
134
+ provider: 'ollama',
135
+ ollamaUrl: 'http://localhost:11434',
136
+ model: 'nomic-embed-text',
137
+ dimensions: 768,
138
+ timeout: 10000,
139
+ batchSize: 32,
140
+ },
141
+ };
142
+ function escapeRegExp(value) {
143
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
144
+ }
145
+ function normalizeAgentId(value) {
146
+ return value
147
+ .trim()
148
+ .toLowerCase()
149
+ .replace(/[^a-z0-9]+/g, '-')
150
+ .replace(/^-+|-+$/g, '');
151
+ }
152
+ function parseIdentityField(markdown, label) {
153
+ const pattern = new RegExp(`^\\s*-\\s+\\*\\*${escapeRegExp(label)}:\\*\\*\\s*(.+?)\\s*$`, 'mi');
154
+ const match = markdown.match(pattern);
155
+ return match?.[1]?.trim() || null;
156
+ }
157
+ function parseSoulName(markdown) {
158
+ const anchor = markdown.match(/You are \*\*([^*]+)\*\*/);
159
+ if (anchor?.[1])
160
+ return anchor[1].trim();
161
+ const heading = markdown.match(/^#\s+SOUL\.md\s+[—-]\s+([^,\n]+)/m);
162
+ return heading?.[1]?.trim() || null;
163
+ }
164
+ function parseSoulRole(markdown) {
165
+ const anchor = markdown.match(/You are \*\*[^*]+\*\*\s+[—-]\s+([^\.\n]+)/);
166
+ return anchor?.[1]?.trim() || null;
167
+ }
168
+ function inferTierFromRole(role) {
169
+ const lower = (role || '').toLowerCase();
170
+ if (!lower)
171
+ return 'unknown';
172
+ if (lower.includes('council') || lower.includes(' seat'))
173
+ return 'council';
174
+ if (lower.includes('director'))
175
+ return 'director';
176
+ if (lower.includes('specialist') || lower.includes('aide-de-camp'))
177
+ return 'specialist';
178
+ return 'unknown';
179
+ }
180
+ function parseReportTargets(raw) {
181
+ if (!raw)
182
+ return [];
183
+ const stripped = raw.replace(/\([^)]*\)/g, ' ');
184
+ const parts = stripped
185
+ .split(/\s*(?:\+|,|\/|&|\band\b)\s*/i)
186
+ .map(part => normalizeAgentId(part))
187
+ .filter(Boolean);
188
+ return [...new Set(parts)];
189
+ }
190
+ function mergeStartupCandidate(target, partial) {
191
+ const existing = target.get(partial.agentId);
192
+ if (!existing) {
193
+ target.set(partial.agentId, {
194
+ agentId: partial.agentId,
195
+ displayName: partial.displayName || partial.agentId,
196
+ tier: partial.tier || 'unknown',
197
+ orgId: partial.orgId ?? null,
198
+ reportsTo: partial.reportsTo ?? null,
199
+ reportTargets: partial.reportTargets ? [...partial.reportTargets] : [],
200
+ metadata: partial.metadata ?? null,
201
+ });
202
+ return;
203
+ }
204
+ if (partial.displayName && existing.displayName === existing.agentId) {
205
+ existing.displayName = partial.displayName;
206
+ }
207
+ if (partial.tier && existing.tier === 'unknown') {
208
+ existing.tier = partial.tier;
209
+ }
210
+ if (partial.orgId && !existing.orgId) {
211
+ existing.orgId = partial.orgId;
212
+ }
213
+ if (partial.reportsTo && !existing.reportsTo) {
214
+ existing.reportsTo = partial.reportsTo;
215
+ }
216
+ if (partial.reportTargets?.length) {
217
+ existing.reportTargets = [...new Set([...existing.reportTargets, ...partial.reportTargets])];
218
+ }
219
+ if (partial.metadata) {
220
+ existing.metadata = { ...(existing.metadata ?? {}), ...partial.metadata };
221
+ }
222
+ }
223
+ function discoverStartupFleetCandidates(dbManager, opts = {}) {
224
+ const homeDir = process.env.HOME || os.homedir();
225
+ const workspaceRoots = opts.workspaceRoots ?? [
226
+ path.join(homeDir, '.openclaw', 'workspace-' + 'council'),
227
+ path.join(homeDir, '.openclaw', 'workspace'),
228
+ ];
229
+ const candidates = new Map();
230
+ for (const root of workspaceRoots) {
231
+ if (!fs.existsSync(root))
232
+ continue;
233
+ let entries = [];
234
+ try {
235
+ entries = fs.readdirSync(root, { withFileTypes: true });
236
+ }
237
+ catch {
238
+ continue;
239
+ }
240
+ for (const entry of entries) {
241
+ if (!entry.isDirectory())
242
+ continue;
243
+ const workspacePath = path.join(root, entry.name);
244
+ const identityPath = path.join(workspacePath, 'IDENTITY.md');
245
+ const soulPath = path.join(workspacePath, 'SOUL.md');
246
+ if (!fs.existsSync(identityPath) && !fs.existsSync(soulPath))
247
+ continue;
248
+ let identityText = '';
249
+ let soulText = '';
250
+ try {
251
+ if (fs.existsSync(identityPath))
252
+ identityText = fs.readFileSync(identityPath, 'utf8');
253
+ }
254
+ catch { }
255
+ try {
256
+ if (fs.existsSync(soulPath))
257
+ soulText = fs.readFileSync(soulPath, 'utf8');
258
+ }
259
+ catch { }
260
+ const displayName = parseIdentityField(identityText, 'Name') ||
261
+ parseSoulName(soulText) ||
262
+ entry.name;
263
+ const role = parseIdentityField(identityText, 'Role') ||
264
+ parseSoulRole(soulText) ||
265
+ null;
266
+ const reportTargets = parseReportTargets(parseIdentityField(identityText, 'Reports to'));
267
+ const agentId = normalizeAgentId(entry.name || displayName);
268
+ if (!agentId)
269
+ continue;
270
+ mergeStartupCandidate(candidates, {
271
+ agentId,
272
+ displayName,
273
+ tier: inferTierFromRole(role),
274
+ reportTargets,
275
+ metadata: {
276
+ startupSeed: {
277
+ source: 'workspace-identity',
278
+ workspacePath,
279
+ reportsToRaw: reportTargets,
280
+ },
281
+ },
282
+ });
283
+ }
284
+ }
285
+ if (opts.includeMessageDbAgents !== false) {
286
+ for (const agentId of dbManager.listAgents()) {
287
+ mergeStartupCandidate(candidates, {
288
+ agentId,
289
+ displayName: agentId,
290
+ tier: 'unknown',
291
+ metadata: {
292
+ startupSeed: {
293
+ source: 'message-db',
294
+ },
295
+ },
296
+ });
297
+ }
298
+ }
299
+ const resolved = [...candidates.values()];
300
+ const knownIds = new Set(resolved.map(candidate => candidate.agentId));
301
+ const councilIds = new Set(resolved
302
+ .filter(candidate => candidate.tier === 'council')
303
+ .map(candidate => candidate.agentId));
304
+ for (const candidate of resolved) {
305
+ const preferredLead = candidate.reportTargets.find(target => councilIds.has(target)) ||
306
+ candidate.reportTargets.find(target => knownIds.has(target)) ||
307
+ null;
308
+ if (candidate.tier === 'council' && !candidate.orgId) {
309
+ candidate.orgId = `${candidate.agentId}-org`;
310
+ }
311
+ if (candidate.tier === 'director' && preferredLead) {
312
+ candidate.reportsTo = preferredLead;
313
+ if (!candidate.orgId) {
314
+ candidate.orgId = `${preferredLead}-org`;
315
+ }
316
+ }
317
+ if (!candidate.reportsTo && preferredLead && candidate.tier !== 'director') {
318
+ candidate.reportsTo = preferredLead;
319
+ }
320
+ // Null out reportsTo if it points outside the known fleet (e.g. a human operator ID)
321
+ if (candidate.reportsTo && !knownIds.has(candidate.reportsTo)) {
322
+ candidate.reportsTo = null;
323
+ }
324
+ candidate.metadata = {
325
+ ...(candidate.metadata ?? {}),
326
+ startupSeed: {
327
+ ...(candidate.metadata ?? {}).startupSeed,
328
+ derivedOrgId: candidate.orgId,
329
+ derivedReportsTo: candidate.reportsTo,
330
+ },
331
+ };
332
+ }
333
+ return resolved.sort((a, b) => a.agentId.localeCompare(b.agentId));
334
+ }
335
+ /**
336
+ * hypermem — the main API facade.
337
+ *
338
+ * Usage:
339
+ * const hm = await hypermem.create({ dataDir: '~/.openclaw/hypermem' });
340
+ * await hm.record('agent1', 'agent:agent1:webchat:main', userMsg);
341
+ * const result = await hm.compose({ agentId: 'agent1', sessionKey: '...', ... });
342
+ */
343
+ export class HyperMem {
344
+ dbManager;
345
+ cache;
346
+ compositor;
347
+ config;
348
+ // Per-dataDir singleton registry. Multiple plugins (context-engine + memory)
349
+ // load this package independently, but they must share a single HyperMem
350
+ // instance per dataDir to avoid dual sqlite-vec init, dual fleet seeding,
351
+ // and conflicting embedding configs against the same SQLite database.
352
+ //
353
+ // Backed by globalThis so the registry survives even if Node ends up loading
354
+ // this module twice (e.g. via differing symlink/realpath resolution from two
355
+ // sibling plugin packages). Module-scope state alone would not deduplicate
356
+ // across two module instances.
357
+ static _instances = (() => {
358
+ const key = '__psiclawops_hypermem_instances__';
359
+ const g = globalThis;
360
+ const existing = g[key];
361
+ if (existing instanceof Map)
362
+ return existing;
363
+ const fresh = new Map();
364
+ g[key] = fresh;
365
+ return fresh;
366
+ })();
367
+ constructor(config) {
368
+ this.config = config;
369
+ this.dbManager = new DatabaseManager({ dataDir: config.dataDir });
370
+ this.cache = new CacheLayer(config.cache);
371
+ this.compositor = new Compositor({
372
+ cache: this.cache,
373
+ vectorStore: null, // Set after create() when vector DB is available
374
+ libraryDb: null, // Set after create() when library DB is available
375
+ }, config.compositor);
376
+ }
377
+ /**
378
+ * Get the active vector store, if initialized.
379
+ * Used by the plugin to wire embeddings into the background indexer.
380
+ */
381
+ getVectorStore() {
382
+ return this.compositor.vectorStore;
383
+ }
384
+ /**
385
+ * Create and initialize a hypermem instance.
386
+ *
387
+ * Singleton-per-dataDir: callers that pass the same absolute dataDir share
388
+ * one instance. The first caller's full config wins; later callers get the
389
+ * existing instance regardless of what config they passed. Plugins should
390
+ * load the user config file (~/.openclaw/hypermem/config.json) themselves
391
+ * so whichever plugin races first still produces a fully-configured instance.
392
+ */
393
+ static async create(config) {
394
+ const merged = {
395
+ ...DEFAULT_CONFIG,
396
+ ...config,
397
+ cache: { ...DEFAULT_CONFIG.cache, ...config?.cache },
398
+ compositor: { ...DEFAULT_CONFIG.compositor, ...config?.compositor },
399
+ indexer: { ...DEFAULT_CONFIG.indexer, ...config?.indexer },
400
+ embedding: {
401
+ ...DEFAULT_CONFIG.embedding,
402
+ ...config?.embedding,
403
+ },
404
+ };
405
+ const dataDirKey = path.resolve(merged.dataDir);
406
+ const existing = HyperMem._instances.get(dataDirKey);
407
+ if (existing) {
408
+ return existing;
409
+ }
410
+ const initPromise = HyperMem._initializeInstance(merged);
411
+ HyperMem._instances.set(dataDirKey, initPromise);
412
+ try {
413
+ return await initPromise;
414
+ }
415
+ catch (err) {
416
+ // Don't cache failed inits; let the next caller retry.
417
+ HyperMem._instances.delete(dataDirKey);
418
+ throw err;
419
+ }
420
+ }
421
+ static async _initializeInstance(merged) {
422
+ const hm = new HyperMem(merged);
423
+ const cacheOk = await hm.cache.connect();
424
+ if (cacheOk) {
425
+ console.log('[hypermem] Cache connected');
426
+ }
427
+ else {
428
+ console.warn('[hypermem] Cache unavailable — running in SQLite-only mode');
429
+ }
430
+ // ── Vector store init ─────────────────────────────────────
431
+ // Attempt to wire up sqlite-vec + nomic-embed-text for semantic recall.
432
+ // Non-fatal: if sqlite-vec isn't available or Ollama is down,
433
+ // hybridSearch() continues in FTS5-only mode.
434
+ // The vector store is shared (not per-agent) — facts/episodes from all agents
435
+ // are indexed together, keyed by (source_table, source_id).
436
+ if (merged.embedding.provider === 'none') {
437
+ console.log('[hypermem] Embedding provider: none — semantic search disabled, using FTS5 fallback');
438
+ }
439
+ else {
440
+ try {
441
+ const vectorDb = hm.dbManager.getSharedVectorDb();
442
+ if (vectorDb) {
443
+ const vs = new VectorStore(vectorDb, merged.embedding, hm.dbManager.getLibraryDb());
444
+ vs.ensureTables();
445
+ hm.compositor.setVectorStore(vs);
446
+ // Provider label: detect openrouter via base URL when provider is the
447
+ // OpenAI-compatible adapter; otherwise echo the configured provider so
448
+ // logs never imply ollama/nomic when something else is actually wired.
449
+ const providerLabel = merged.embedding.provider === 'openai'
450
+ ? (merged.embedding.openaiBaseUrl?.includes('openrouter') ? 'openrouter' : 'openai')
451
+ : merged.embedding.provider;
452
+ const modelLabel = merged.embedding.model ?? '(default)';
453
+ const dimsLabel = merged.embedding.dimensions ? `${merged.embedding.dimensions}d` : 'unknown-dims';
454
+ console.log(`[hypermem] Vector store initialized (sqlite-vec + ${providerLabel}/${modelLabel} ${dimsLabel})`);
455
+ }
456
+ else {
457
+ console.warn('[hypermem] sqlite-vec unavailable — semantic recall in FTS5-only mode');
458
+ }
459
+ }
460
+ catch (err) {
461
+ console.warn('[hypermem] Vector store init failed (non-fatal):', err.message);
462
+ }
463
+ }
464
+ // ── Reranker init ─────────────────────────────────────────
465
+ // Reranker is optional; when config.reranker is omitted or provider is
466
+ // 'none', the compositor receives null and hybridSearch skips the rerank
467
+ // hook. On provider errors, hybridSearch falls back to RRF ordering.
468
+ if (merged.reranker && merged.reranker.provider !== 'none') {
469
+ try {
470
+ const { createReranker } = await import('./reranker.js');
471
+ const rr = createReranker(merged.reranker);
472
+ if (rr) {
473
+ hm.compositor.setReranker(rr);
474
+ console.log(`[hypermem] Reranker enabled: provider=${rr.name}`);
475
+ }
476
+ else {
477
+ console.log(`[hypermem] Reranker configured (${merged.reranker.provider}) but no API key resolved — RRF-only`);
478
+ }
479
+ }
480
+ catch (err) {
481
+ console.warn('[hypermem] Reranker init failed (non-fatal):', err.message);
482
+ }
483
+ }
484
+ const autoStartupFleetSeeding = merged.startupFleetSeeding !== false &&
485
+ !path.resolve(merged.dataDir).startsWith(path.resolve(os.tmpdir()) + path.sep);
486
+ if (autoStartupFleetSeeding) {
487
+ try {
488
+ const startupSeed = await hm.seedFleetAgentsOnStartup();
489
+ if (startupSeed.discovered > 0) {
490
+ console.log(`[hypermem] Startup fleet seed: ${startupSeed.inserted} inserted, ` +
491
+ `${startupSeed.updated} updated, ${startupSeed.skipped} unchanged, ` +
492
+ `${startupSeed.orgsCreated} orgs, ${startupSeed.hydratedAgents} cached`);
493
+ }
494
+ }
495
+ catch (err) {
496
+ console.warn('[hypermem] Startup fleet seed failed (non-fatal):', err.message);
497
+ }
498
+ }
499
+ return hm;
500
+ }
501
+ // ─── Core API (L2: Message DB) ──────────────────────────────
502
+ /**
503
+ * Record a user message.
504
+ */
505
+ async recordUserMessage(agentId, sessionKey, content, opts) {
506
+ const db = this.dbManager.getMessageDb(agentId);
507
+ this.dbManager.ensureAgent(agentId);
508
+ const store = new MessageStore(db);
509
+ const conversation = store.getOrCreateConversation(agentId, sessionKey, {
510
+ channelType: opts?.channelType,
511
+ channelId: opts?.channelId,
512
+ provider: opts?.provider,
513
+ model: opts?.model,
514
+ });
515
+ let contextId;
516
+ try {
517
+ const { getOrCreateActiveContext } = await import('./context-store.js');
518
+ const ctx = getOrCreateActiveContext(db, agentId, sessionKey, conversation.id);
519
+ contextId = ctx.id;
520
+ }
521
+ catch (_) { /* context wiring is best-effort in Phase 1 */ }
522
+ const neutral = userMessageToNeutral(stripMessageMetadata(content));
523
+ const stored = store.recordMessage(conversation.id, agentId, neutral, {
524
+ tokenCount: opts?.tokenCount,
525
+ isHeartbeat: opts?.isHeartbeat,
526
+ contextId,
527
+ });
528
+ await this.cache.pushHistory(agentId, sessionKey, [stored], this.config.compositor.maxHistoryMessages);
529
+ await this.cache.touchSession(agentId, sessionKey);
530
+ return stored;
531
+ }
532
+ /**
533
+ * Record an assistant response.
534
+ */
535
+ async recordAssistantMessage(agentId, sessionKey, message, opts) {
536
+ const db = this.dbManager.getMessageDb(agentId);
537
+ const store = new MessageStore(db);
538
+ const conversation = store.getConversation(sessionKey);
539
+ if (!conversation) {
540
+ throw new Error(`No conversation found for session ${sessionKey}`);
541
+ }
542
+ let contextId;
543
+ try {
544
+ const { getOrCreateActiveContext } = await import('./context-store.js');
545
+ const ctx = getOrCreateActiveContext(db, agentId, sessionKey, conversation.id);
546
+ contextId = ctx.id;
547
+ }
548
+ catch (_) { /* context wiring is best-effort in Phase 1 */ }
549
+ const stored = store.recordMessage(conversation.id, agentId, message, {
550
+ tokenCount: opts?.tokenCount,
551
+ contextId,
552
+ });
553
+ await this.cache.pushHistory(agentId, sessionKey, [stored], this.config.compositor.maxHistoryMessages);
554
+ await this.cache.touchSession(agentId, sessionKey);
555
+ return stored;
556
+ }
557
+ /**
558
+ * Record a raw provider response, converting to neutral format.
559
+ */
560
+ async recordProviderResponse(agentId, sessionKey, response, provider, opts) {
561
+ const neutral = fromProviderFormat(response, provider);
562
+ return this.recordAssistantMessage(agentId, sessionKey, neutral, opts);
563
+ }
564
+ /**
565
+ * Compose context for an LLM call.
566
+ */
567
+ async compose(request) {
568
+ const db = this.dbManager.getMessageDb(request.agentId);
569
+ const libraryDb = this.dbManager.getLibraryDb();
570
+ return this.compositor.compose(request, db, libraryDb);
571
+ }
572
+ // ─── Tool Artifacts (L2: per-agent, schema v9) ───────────────────
573
+ /**
574
+ * Persist a full tool result payload and return the durable record.
575
+ * Used by the plugin wave-guard to capture payloads before stubbing the
576
+ * transcript. Dedupes by content hash within the (agentId, sessionKey)
577
+ * scope — identical payloads bump ref_count on the existing row.
578
+ */
579
+ async recordToolArtifact(agentId, sessionKey, input) {
580
+ const db = this.dbManager.getMessageDb(agentId);
581
+ this.dbManager.ensureAgent(agentId);
582
+ const { ToolArtifactStore } = await import('./tool-artifact-store.js');
583
+ const store = new ToolArtifactStore(db);
584
+ return store.put({ ...input, agentId, sessionKey });
585
+ }
586
+ /** Fetch a tool artifact by id. Returns null if unknown. */
587
+ async getToolArtifact(agentId, artifactId) {
588
+ const db = this.dbManager.getMessageDb(agentId);
589
+ const { ToolArtifactStore } = await import('./tool-artifact-store.js');
590
+ const store = new ToolArtifactStore(db);
591
+ const record = store.get(artifactId);
592
+ if (record)
593
+ store.touch(artifactId);
594
+ return record;
595
+ }
596
+ /** List tool artifacts for a specific turn. */
597
+ async listToolArtifactsByTurn(agentId, sessionKey, turnId) {
598
+ const db = this.dbManager.getMessageDb(agentId);
599
+ const { ToolArtifactStore } = await import('./tool-artifact-store.js');
600
+ const store = new ToolArtifactStore(db);
601
+ return store.listByTurn(sessionKey, turnId);
602
+ }
603
+ // ─── Archived Mining (L2: Messages) ─────────────────────────
604
+ /**
605
+ * List archived or forked contexts for an agent.
606
+ *
607
+ * Operator-safe enumeration path. This is the approved archived-context
608
+ * listing surface. Active composition remains separate.
609
+ */
610
+ listArchivedContexts(agentId, opts) {
611
+ const db = this.dbManager.getMessageDb(agentId);
612
+ return getArchivedContexts(db, agentId, opts);
613
+ }
614
+ /**
615
+ * Mine a single archived or forked context through the archived-mining
616
+ * surface. This does not widen active composition.
617
+ */
618
+ mineArchivedContext(agentId, query) {
619
+ const db = this.dbManager.getMessageDb(agentId);
620
+ const store = new MessageStore(db);
621
+ return store.mineArchivedContext(query);
622
+ }
623
+ /**
624
+ * Mine multiple archived or forked contexts through the capped archived-
625
+ * mining surface. This does not expose raw DAG helpers and does not widen
626
+ * active composition.
627
+ */
628
+ mineArchivedContexts(agentId, contextIds, opts) {
629
+ const db = this.dbManager.getMessageDb(agentId);
630
+ const store = new MessageStore(db);
631
+ return store.mineArchivedContexts(contextIds, opts);
632
+ }
633
+ /**
634
+ * Warm a session from SQLite into Redis.
635
+ */
636
+ async warm(agentId, sessionKey, opts) {
637
+ const db = this.dbManager.getMessageDb(agentId);
638
+ const libraryDb = this.dbManager.getLibraryDb();
639
+ await this.compositor.warmSession(agentId, sessionKey, db, { ...opts, libraryDb });
640
+ }
641
+ /**
642
+ * Recompute the Redis hot history view from SQLite and re-apply tool gradient.
643
+ */
644
+ async refreshRedisGradient(agentId, sessionKey, tokenBudget, historyDepth, trimSoftTarget) {
645
+ const db = this.dbManager.getMessageDb(agentId);
646
+ await this.compositor.refreshRedisGradient(agentId, sessionKey, db, tokenBudget, historyDepth, trimSoftTarget);
647
+ }
648
+ /**
649
+ * Full-text search across all messages for an agent.
650
+ */
651
+ search(agentId, query, limit = 20) {
652
+ const db = this.dbManager.getMessageDb(agentId);
653
+ const store = new MessageStore(db);
654
+ return store.searchMessages(agentId, query, limit);
655
+ }
656
+ /**
657
+ * Get or create a conversation.
658
+ */
659
+ getOrCreateConversation(agentId, sessionKey, opts) {
660
+ const db = this.dbManager.getMessageDb(agentId);
661
+ this.dbManager.ensureAgent(agentId);
662
+ const store = new MessageStore(db);
663
+ return store.getOrCreateConversation(agentId, sessionKey, opts);
664
+ }
665
+ /**
666
+ * List all agents with databases.
667
+ */
668
+ listAgents() {
669
+ return this.dbManager.listAgents();
670
+ }
671
+ // ─── Facts (L4: Library) ────────────────────────────────────
672
+ /**
673
+ * Add a fact.
674
+ */
675
+ addFact(agentId, content, opts) {
676
+ const db = this.dbManager.getLibraryDb();
677
+ const store = new FactStore(db);
678
+ return store.addFact(agentId, content, opts);
679
+ }
680
+ /**
681
+ * Get active facts for an agent.
682
+ */
683
+ getActiveFacts(agentId, opts) {
684
+ const db = this.dbManager.getLibraryDb();
685
+ const store = new FactStore(db);
686
+ return store.getActiveFacts(agentId, opts);
687
+ }
688
+ // ─── Knowledge (L4: Library) ────────────────────────────────
689
+ /**
690
+ * Add/update knowledge.
691
+ */
692
+ upsertKnowledge(agentId, domain, key, content, opts) {
693
+ const db = this.dbManager.getLibraryDb();
694
+ const store = new KnowledgeStore(db);
695
+ return store.upsert(agentId, domain, key, content, opts);
696
+ }
697
+ /**
698
+ * Get active knowledge, optionally filtered by domain.
699
+ */
700
+ getKnowledge(agentId, opts) {
701
+ const db = this.dbManager.getLibraryDb();
702
+ const store = new KnowledgeStore(db);
703
+ return store.getActive(agentId, opts);
704
+ }
705
+ // ─── Topics (L4: Library) ───────────────────────────────────
706
+ /**
707
+ * Create a topic.
708
+ */
709
+ createTopic(agentId, name, description) {
710
+ const db = this.dbManager.getLibraryDb();
711
+ const store = new TopicStore(db);
712
+ return store.create(agentId, name, description);
713
+ }
714
+ /**
715
+ * Get active topics.
716
+ */
717
+ getActiveTopics(agentId, limit = 20) {
718
+ const db = this.dbManager.getLibraryDb();
719
+ const store = new TopicStore(db);
720
+ return store.getActive(agentId, limit);
721
+ }
722
+ // ─── Episodes (L4: Library) ─────────────────────────────────
723
+ /**
724
+ * Record an episode.
725
+ */
726
+ recordEpisode(agentId, eventType, summary, opts) {
727
+ const db = this.dbManager.getLibraryDb();
728
+ const store = new EpisodeStore(db);
729
+ return store.record(agentId, eventType, summary, opts);
730
+ }
731
+ /**
732
+ * Get recent episodes.
733
+ */
734
+ getRecentEpisodes(agentId, opts) {
735
+ const db = this.dbManager.getLibraryDb();
736
+ const store = new EpisodeStore(db);
737
+ return store.getRecent(agentId, opts);
738
+ }
739
+ // ─── Preferences (L4: Library) ──────────────────────────────
740
+ /**
741
+ * Set a preference.
742
+ */
743
+ setPreference(subject, key, value, opts) {
744
+ const db = this.dbManager.getLibraryDb();
745
+ const store = new PreferenceStore(db);
746
+ return store.set(subject, key, value, opts);
747
+ }
748
+ /**
749
+ * Get a preference.
750
+ */
751
+ getPreference(subject, key, domain) {
752
+ const db = this.dbManager.getLibraryDb();
753
+ const store = new PreferenceStore(db);
754
+ return store.get(subject, key, domain);
755
+ }
756
+ /**
757
+ * Get all preferences for a subject.
758
+ */
759
+ getPreferences(subject, domain) {
760
+ const db = this.dbManager.getLibraryDb();
761
+ const store = new PreferenceStore(db);
762
+ return store.getForSubject(subject, domain);
763
+ }
764
+ // ─── Fleet Registry (L4: Library) ───────────────────────────
765
+ /**
766
+ * Register or update a fleet agent. Invalidates cache.
767
+ */
768
+ upsertFleetAgent(id, data) {
769
+ const db = this.dbManager.getLibraryDb();
770
+ const store = new FleetStore(db);
771
+ const result = store.upsertAgent(id, data);
772
+ // Invalidate cache — fire and forget
773
+ this.cache.invalidateFleetAgent(id).catch(() => { });
774
+ return result;
775
+ }
776
+ /**
777
+ * Get a fleet agent. Cache-aside: check Redis first, fall back to SQLite.
778
+ */
779
+ async getFleetAgentCached(id) {
780
+ // Try cache first
781
+ const cached = await this.cache.getCachedFleetAgent(id);
782
+ if (cached)
783
+ return cached;
784
+ // Fall back to SQLite
785
+ const agent = this.getFleetAgent(id);
786
+ if (agent) {
787
+ // Warm cache — fire and forget
788
+ this.cache.cacheFleetAgent(id, agent).catch(() => { });
789
+ }
790
+ return agent;
791
+ }
792
+ /**
793
+ * Get a fleet agent (synchronous, SQLite only).
794
+ */
795
+ getFleetAgent(id) {
796
+ const db = this.dbManager.getLibraryDb();
797
+ const store = new FleetStore(db);
798
+ return store.getAgent(id);
799
+ }
800
+ /**
801
+ * List fleet agents.
802
+ */
803
+ listFleetAgents(opts) {
804
+ const db = this.dbManager.getLibraryDb();
805
+ const store = new FleetStore(db);
806
+ return store.listAgents(opts);
807
+ }
808
+ /**
809
+ * Register or update a fleet org.
810
+ */
811
+ upsertFleetOrg(id, data) {
812
+ const db = this.dbManager.getLibraryDb();
813
+ const store = new FleetStore(db);
814
+ return store.upsertOrg(id, data);
815
+ }
816
+ /**
817
+ * List fleet orgs.
818
+ */
819
+ listFleetOrgs() {
820
+ const db = this.dbManager.getLibraryDb();
821
+ const store = new FleetStore(db);
822
+ return store.listOrgs();
823
+ }
824
+ // ─── Agent Capabilities (L4: Library) ────────────────────────
825
+ /**
826
+ * Register or update a capability for an agent.
827
+ */
828
+ upsertCapability(agentId, cap) {
829
+ const db = this.dbManager.getLibraryDb();
830
+ const store = new FleetStore(db);
831
+ return store.upsertCapability(agentId, cap);
832
+ }
833
+ /**
834
+ * Bulk-sync capabilities of a given type for an agent.
835
+ * Marks capabilities not in the list as 'removed'.
836
+ */
837
+ syncCapabilities(agentId, capType, caps) {
838
+ const db = this.dbManager.getLibraryDb();
839
+ const store = new FleetStore(db);
840
+ store.syncCapabilities(agentId, capType, caps);
841
+ }
842
+ /**
843
+ * Get capabilities for an agent, optionally filtered by type.
844
+ */
845
+ getAgentCapabilities(agentId, capType) {
846
+ const db = this.dbManager.getLibraryDb();
847
+ const store = new FleetStore(db);
848
+ return store.getAgentCapabilities(agentId, capType);
849
+ }
850
+ /**
851
+ * Find agents that have a specific capability.
852
+ */
853
+ findAgentsByCapability(capType, name) {
854
+ const db = this.dbManager.getLibraryDb();
855
+ const store = new FleetStore(db);
856
+ return store.findByCapability(capType, name);
857
+ }
858
+ // ─── System Registry (L4: Library) ──────────────────────────
859
+ /**
860
+ * Set a system state value.
861
+ */
862
+ setSystemState(category, key, value, opts) {
863
+ const db = this.dbManager.getLibraryDb();
864
+ const store = new SystemStore(db);
865
+ return store.set(category, key, value, opts);
866
+ }
867
+ /**
868
+ * Get a system state value.
869
+ */
870
+ getSystemState(category, key) {
871
+ const db = this.dbManager.getLibraryDb();
872
+ const store = new SystemStore(db);
873
+ return store.get(category, key);
874
+ }
875
+ /**
876
+ * Get all state in a category.
877
+ */
878
+ getSystemCategory(category) {
879
+ const db = this.dbManager.getLibraryDb();
880
+ const store = new SystemStore(db);
881
+ return store.getCategory(category);
882
+ }
883
+ // ─── Work Items (L4: Library) ───────────────────────────────
884
+ /**
885
+ * Create a work item.
886
+ */
887
+ createWorkItem(data) {
888
+ const db = this.dbManager.getLibraryDb();
889
+ const store = new WorkStore(db);
890
+ return store.create(data);
891
+ }
892
+ /**
893
+ * Update work item status.
894
+ */
895
+ updateWorkStatus(id, status, agentId, comment) {
896
+ const db = this.dbManager.getLibraryDb();
897
+ const store = new WorkStore(db);
898
+ return store.updateStatus(id, status, agentId, comment);
899
+ }
900
+ /**
901
+ * Get active work for an agent.
902
+ */
903
+ getAgentWork(agentId, status) {
904
+ const db = this.dbManager.getLibraryDb();
905
+ const store = new WorkStore(db);
906
+ return store.getAgentWork(agentId, status);
907
+ }
908
+ /**
909
+ * Get the fleet kanban board.
910
+ */
911
+ getFleetKanban(opts) {
912
+ const db = this.dbManager.getLibraryDb();
913
+ const store = new WorkStore(db);
914
+ return store.getKanban(opts);
915
+ }
916
+ /**
917
+ * Get work item stats.
918
+ */
919
+ getWorkStats(opts) {
920
+ const db = this.dbManager.getLibraryDb();
921
+ const store = new WorkStore(db);
922
+ return store.getStats(opts);
923
+ }
924
+ /**
925
+ * Get blocked work items.
926
+ */
927
+ getBlockedWork() {
928
+ const db = this.dbManager.getLibraryDb();
929
+ const store = new WorkStore(db);
930
+ return store.getBlocked();
931
+ }
932
+ // ─── Agent Desired State (L4: Library) ──────────────────────
933
+ /**
934
+ * Set desired configuration for an agent.
935
+ */
936
+ setDesiredState(agentId, configKey, desiredValue, opts) {
937
+ const db = this.dbManager.getLibraryDb();
938
+ const store = new DesiredStateStore(db);
939
+ const result = store.setDesired(agentId, configKey, desiredValue, opts);
940
+ // Invalidate cache — desired state change affects fleet view
941
+ this.cache.invalidateFleetAgent(agentId).catch(() => { });
942
+ return result;
943
+ }
944
+ /**
945
+ * Report actual runtime value for drift detection. Invalidates cache.
946
+ */
947
+ reportActualState(agentId, configKey, actualValue) {
948
+ const db = this.dbManager.getLibraryDb();
949
+ const store = new DesiredStateStore(db);
950
+ const result = store.reportActual(agentId, configKey, actualValue);
951
+ this.cache.invalidateFleetAgent(agentId).catch(() => { });
952
+ return result;
953
+ }
954
+ /**
955
+ * Bulk report actual state (e.g., on session startup / heartbeat). Invalidates cache.
956
+ */
957
+ reportActualStateBulk(agentId, actuals) {
958
+ const db = this.dbManager.getLibraryDb();
959
+ const store = new DesiredStateStore(db);
960
+ const result = store.reportActualBulk(agentId, actuals);
961
+ this.cache.invalidateFleetAgent(agentId).catch(() => { });
962
+ return result;
963
+ }
964
+ /**
965
+ * Get all desired state for an agent.
966
+ */
967
+ getDesiredState(agentId) {
968
+ const db = this.dbManager.getLibraryDb();
969
+ const store = new DesiredStateStore(db);
970
+ return store.getAgentState(agentId);
971
+ }
972
+ /**
973
+ * Get desired state as a flat config map.
974
+ */
975
+ getDesiredConfig(agentId) {
976
+ const db = this.dbManager.getLibraryDb();
977
+ const store = new DesiredStateStore(db);
978
+ return store.getAgentConfig(agentId);
979
+ }
980
+ /**
981
+ * Get all drifted entries across the fleet.
982
+ */
983
+ getDriftedState() {
984
+ const db = this.dbManager.getLibraryDb();
985
+ const store = new DesiredStateStore(db);
986
+ return store.getDrifted();
987
+ }
988
+ /**
989
+ * Get fleet-wide view of a specific config key.
990
+ */
991
+ getFleetConfigKey(configKey) {
992
+ const db = this.dbManager.getLibraryDb();
993
+ const store = new DesiredStateStore(db);
994
+ return store.getFleetConfig(configKey);
995
+ }
996
+ /**
997
+ * Get config change history.
998
+ */
999
+ getConfigHistory(agentId, configKey, limit) {
1000
+ const db = this.dbManager.getLibraryDb();
1001
+ const store = new DesiredStateStore(db);
1002
+ return store.getHistory(agentId, configKey, limit);
1003
+ }
1004
+ /**
1005
+ * Get fleet drift summary.
1006
+ */
1007
+ getDriftSummary() {
1008
+ const db = this.dbManager.getLibraryDb();
1009
+ const store = new DesiredStateStore(db);
1010
+ return store.getDriftSummary();
1011
+ }
1012
+ // ─── Knowledge Graph (L4: Library) ──────────────────────────
1013
+ /**
1014
+ * Add a directed link between two entities.
1015
+ */
1016
+ addKnowledgeLink(fromType, fromId, toType, toId, linkType) {
1017
+ const db = this.dbManager.getLibraryDb();
1018
+ const graph = new KnowledgeGraph(db);
1019
+ return graph.addLink(fromType, fromId, toType, toId, linkType);
1020
+ }
1021
+ /**
1022
+ * Remove a specific link.
1023
+ */
1024
+ removeKnowledgeLink(fromType, fromId, toType, toId, linkType) {
1025
+ const db = this.dbManager.getLibraryDb();
1026
+ const graph = new KnowledgeGraph(db);
1027
+ return graph.removeLink(fromType, fromId, toType, toId, linkType);
1028
+ }
1029
+ /**
1030
+ * Get all links for an entity (both directions).
1031
+ */
1032
+ getEntityLinks(type, id) {
1033
+ const db = this.dbManager.getLibraryDb();
1034
+ const graph = new KnowledgeGraph(db);
1035
+ return graph.getLinks(type, id);
1036
+ }
1037
+ /**
1038
+ * Traverse the knowledge graph from a starting entity.
1039
+ * BFS with bounded depth and result count.
1040
+ */
1041
+ traverseGraph(startType, startId, opts) {
1042
+ const db = this.dbManager.getLibraryDb();
1043
+ const graph = new KnowledgeGraph(db);
1044
+ return graph.traverse(startType, startId, opts);
1045
+ }
1046
+ /**
1047
+ * Find the shortest path between two entities.
1048
+ */
1049
+ findGraphPath(fromType, fromId, toType, toId, maxDepth) {
1050
+ const db = this.dbManager.getLibraryDb();
1051
+ const graph = new KnowledgeGraph(db);
1052
+ return graph.findPath(fromType, fromId, toType, toId, maxDepth);
1053
+ }
1054
+ /**
1055
+ * Get the most connected entities.
1056
+ */
1057
+ getMostConnectedEntities(opts) {
1058
+ const db = this.dbManager.getLibraryDb();
1059
+ const graph = new KnowledgeGraph(db);
1060
+ return graph.getMostConnected(opts);
1061
+ }
1062
+ /**
1063
+ * Get knowledge graph statistics.
1064
+ */
1065
+ getGraphStats() {
1066
+ const db = this.dbManager.getLibraryDb();
1067
+ const graph = new KnowledgeGraph(db);
1068
+ return {
1069
+ totalLinks: graph.getTotalLinks(),
1070
+ byType: graph.getLinkStats(),
1071
+ };
1072
+ }
1073
+ // ─── Vector / Semantic Search (L3: Vectors DB) ──────────────
1074
+ /**
1075
+ * Semantic search across an agent's indexed memory.
1076
+ */
1077
+ async semanticSearch(agentId, query, opts) {
1078
+ const db = this.dbManager.getVectorDb(agentId);
1079
+ if (!db) {
1080
+ console.warn('[hypermem] Semantic search unavailable — sqlite-vec not loaded');
1081
+ return [];
1082
+ }
1083
+ const libraryDb = this.dbManager.getLibraryDb();
1084
+ const vs = new VectorStore(db, this.config.embedding, libraryDb);
1085
+ return vs.search(query, opts);
1086
+ }
1087
+ /**
1088
+ * Index all un-indexed content for an agent.
1089
+ */
1090
+ async indexAgent(agentId) {
1091
+ const db = this.dbManager.getVectorDb(agentId);
1092
+ if (!db)
1093
+ return { indexed: 0, skipped: 0, tombstoned: 0 };
1094
+ const libraryDb = this.dbManager.getLibraryDb();
1095
+ const vs = new VectorStore(db, this.config.embedding, libraryDb);
1096
+ vs.ensureTables();
1097
+ const result = await vs.indexAll(agentId);
1098
+ // Tombstone superseded facts/knowledge so they don't surface in recall
1099
+ const tombstoned = vs.tombstoneSuperseded();
1100
+ return { ...result, tombstoned };
1101
+ }
1102
+ /**
1103
+ * Get vector index statistics.
1104
+ */
1105
+ getVectorStats(agentId) {
1106
+ const db = this.dbManager.getVectorDb(agentId);
1107
+ if (!db)
1108
+ return null;
1109
+ const libraryDb = this.dbManager.getLibraryDb();
1110
+ const vs = new VectorStore(db, this.config.embedding, libraryDb);
1111
+ return vs.getStats();
1112
+ }
1113
+ /**
1114
+ * Prune orphaned vector entries.
1115
+ */
1116
+ pruneVectorOrphans(agentId) {
1117
+ const db = this.dbManager.getVectorDb(agentId);
1118
+ if (!db)
1119
+ return 0;
1120
+ const libraryDb = this.dbManager.getLibraryDb();
1121
+ const vs = new VectorStore(db, this.config.embedding, libraryDb);
1122
+ return vs.pruneOrphans();
1123
+ }
1124
+ // ─── Session Cursor (dual-read: Redis → SQLite fallback) ──────
1125
+ /**
1126
+ * Get the session cursor for an agent+session.
1127
+ * Reads from Redis first; falls back to SQLite if Redis returns null
1128
+ * (e.g. after eviction or restart). This is the P1.3 durability guarantee.
1129
+ */
1130
+ async getSessionCursor(agentId, sessionKey) {
1131
+ // Try Redis first (hot path)
1132
+ const redisCursor = await this.cache.getCursor(agentId, sessionKey);
1133
+ if (redisCursor)
1134
+ return redisCursor;
1135
+ // Fallback to SQLite
1136
+ const db = this.dbManager.getMessageDb(agentId);
1137
+ if (!db)
1138
+ return null;
1139
+ const row = db.prepare(`
1140
+ SELECT cursor_last_sent_id, cursor_last_sent_index, cursor_last_sent_at,
1141
+ cursor_window_size, cursor_token_count
1142
+ FROM conversations
1143
+ WHERE session_key = ? AND cursor_last_sent_id IS NOT NULL
1144
+ `).get(sessionKey);
1145
+ if (!row || row.cursor_last_sent_id == null)
1146
+ return null;
1147
+ const cursor = {
1148
+ lastSentId: row.cursor_last_sent_id,
1149
+ lastSentIndex: row.cursor_last_sent_index,
1150
+ lastSentAt: row.cursor_last_sent_at,
1151
+ windowSize: row.cursor_window_size,
1152
+ tokenCount: row.cursor_token_count,
1153
+ };
1154
+ // Re-warm Redis so subsequent reads are fast
1155
+ try {
1156
+ await this.cache.setCursor(agentId, sessionKey, cursor);
1157
+ }
1158
+ catch {
1159
+ // Best-effort re-warm
1160
+ }
1161
+ return cursor;
1162
+ }
1163
+ // ─── Message Rotation (L2: Messages) ────────────────────────
1164
+ /**
1165
+ * Get the size of an agent's active messages.db in bytes.
1166
+ */
1167
+ getMessageDbSize(agentId) {
1168
+ return this.dbManager.getMessageDbSize(agentId);
1169
+ }
1170
+ /**
1171
+ * Check if an agent's message database needs rotation.
1172
+ */
1173
+ shouldRotate(agentId, opts) {
1174
+ return this.dbManager.shouldRotate(agentId, opts);
1175
+ }
1176
+ /**
1177
+ * Rotate an agent's message database.
1178
+ * Returns the path to the rotated file, or null if no active DB exists.
1179
+ */
1180
+ rotateMessageDb(agentId) {
1181
+ return this.dbManager.rotateMessageDb(agentId);
1182
+ }
1183
+ /**
1184
+ * List rotated message DB files for an agent.
1185
+ */
1186
+ listRotatedDbs(agentId) {
1187
+ return this.dbManager.listRotatedDbs(agentId);
1188
+ }
1189
+ /**
1190
+ * Check and auto-rotate all agents' message databases.
1191
+ * Call on heartbeat/startup.
1192
+ * Returns agents that were rotated.
1193
+ */
1194
+ autoRotate(opts) {
1195
+ const agents = this.dbManager.listAgents();
1196
+ const rotated = [];
1197
+ for (const agentId of agents) {
1198
+ const check = this.shouldRotate(agentId, opts);
1199
+ if (check) {
1200
+ const rotatedPath = this.rotateMessageDb(agentId);
1201
+ if (rotatedPath) {
1202
+ rotated.push({
1203
+ agentId,
1204
+ reason: `${check.reason}: ${check.current} > ${check.threshold}`,
1205
+ rotatedTo: rotatedPath,
1206
+ });
1207
+ }
1208
+ }
1209
+ }
1210
+ return rotated;
1211
+ }
1212
+ // ─── Session Registry (L4: Library) ─────────────────────────
1213
+ /**
1214
+ * Register a session start.
1215
+ */
1216
+ registerSession(sessionKey, agentId, opts) {
1217
+ const db = this.dbManager.getLibraryDb();
1218
+ const now = new Date().toISOString();
1219
+ const existing = db
1220
+ .prepare('SELECT id FROM session_registry WHERE id = ?')
1221
+ .get(sessionKey);
1222
+ if (existing) {
1223
+ db.prepare('UPDATE session_registry SET status = ?, started_at = ? WHERE id = ?')
1224
+ .run('active', now, sessionKey);
1225
+ }
1226
+ else {
1227
+ db.prepare(`INSERT INTO session_registry (id, agent_id, channel, channel_type, started_at, status)
1228
+ VALUES (?, ?, ?, ?, ?, 'active')`).run(sessionKey, agentId, opts?.channel || null, opts?.channelType || null, now);
1229
+ }
1230
+ db.prepare('INSERT INTO session_events (session_id, event_type, timestamp, payload) VALUES (?, ?, ?, ?)').run(sessionKey, 'start', now, JSON.stringify({ channel: opts?.channel, channelType: opts?.channelType }));
1231
+ }
1232
+ /**
1233
+ * Record a session event.
1234
+ */
1235
+ recordSessionEvent(sessionKey, eventType, payload) {
1236
+ const db = this.dbManager.getLibraryDb();
1237
+ db.prepare('INSERT INTO session_events (session_id, event_type, timestamp, payload) VALUES (?, ?, ?, ?)').run(sessionKey, eventType, new Date().toISOString(), payload ? JSON.stringify(payload) : null);
1238
+ if (eventType === 'decision') {
1239
+ db.prepare('UPDATE session_registry SET decisions_made = decisions_made + 1 WHERE id = ?').run(sessionKey);
1240
+ }
1241
+ else if (eventType === 'fact_extracted') {
1242
+ db.prepare('UPDATE session_registry SET facts_extracted = facts_extracted + 1 WHERE id = ?').run(sessionKey);
1243
+ }
1244
+ }
1245
+ /**
1246
+ * Close a session.
1247
+ */
1248
+ closeSession(sessionKey, summary) {
1249
+ const db = this.dbManager.getLibraryDb();
1250
+ const now = new Date().toISOString();
1251
+ db.prepare('UPDATE session_registry SET status = ?, ended_at = ?, summary = ? WHERE id = ?').run('completed', now, summary || null, sessionKey);
1252
+ db.prepare('INSERT INTO session_events (session_id, event_type, timestamp) VALUES (?, ?, ?)').run(sessionKey, 'completion', now);
1253
+ }
1254
+ /**
1255
+ * Query sessions.
1256
+ */
1257
+ querySessions(opts) {
1258
+ const db = this.dbManager.getLibraryDb();
1259
+ const conditions = [];
1260
+ const params = [];
1261
+ if (opts?.agentId) {
1262
+ conditions.push('agent_id = ?');
1263
+ params.push(opts.agentId);
1264
+ }
1265
+ if (opts?.status) {
1266
+ conditions.push('status = ?');
1267
+ params.push(opts.status);
1268
+ }
1269
+ if (opts?.since) {
1270
+ conditions.push('started_at >= ?');
1271
+ params.push(opts.since);
1272
+ }
1273
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';
1274
+ return db
1275
+ .prepare(`SELECT * FROM session_registry ${where} ORDER BY started_at DESC LIMIT ?`)
1276
+ .all(...params, opts?.limit || 50);
1277
+ }
1278
+ /**
1279
+ * Get session events.
1280
+ */
1281
+ getSessionEvents(sessionKey, limit = 50) {
1282
+ const db = this.dbManager.getLibraryDb();
1283
+ return db
1284
+ .prepare('SELECT * FROM session_events WHERE session_id = ? ORDER BY timestamp DESC LIMIT ?')
1285
+ .all(sessionKey, limit);
1286
+ }
1287
+ // ─── Cross-Agent Queries ─────────────────────────────────────
1288
+ /**
1289
+ * Query another agent's memory with visibility-scoped access.
1290
+ */
1291
+ queryAgent(requesterId, targetAgentId, opts, registry) {
1292
+ return crossAgentQuery(this.dbManager, {
1293
+ requesterId,
1294
+ targetAgentId,
1295
+ memoryType: opts?.memoryType || 'facts',
1296
+ domain: opts?.domain,
1297
+ limit: opts?.limit,
1298
+ }, registry || buildOrgRegistryFromDb(this.dbManager.getLibraryDb()));
1299
+ }
1300
+ /**
1301
+ * Query fleet-wide visible memory.
1302
+ */
1303
+ queryFleet(requesterId, opts, registry) {
1304
+ const reg = registry || buildOrgRegistryFromDb(this.dbManager.getLibraryDb());
1305
+ const results = [];
1306
+ // Query all agents from the fleet registry
1307
+ const libraryDb = this.dbManager.getLibraryDb();
1308
+ const agents = libraryDb
1309
+ .prepare("SELECT id FROM fleet_agents WHERE status = 'active'")
1310
+ .all();
1311
+ for (const agent of agents) {
1312
+ if (agent.id === requesterId)
1313
+ continue;
1314
+ try {
1315
+ const agentResults = this.queryAgent(requesterId, agent.id, opts, reg);
1316
+ results.push(...agentResults);
1317
+ }
1318
+ catch {
1319
+ // Skip agents we can't query (not in registry)
1320
+ }
1321
+ }
1322
+ return results;
1323
+ }
1324
+ // ─── Document Chunks (L4: Library) ──────────────────────────
1325
+ /**
1326
+ * Index chunks from a parsed set of DocChunk objects.
1327
+ * Atomic: replaces all chunks for the source in one transaction.
1328
+ */
1329
+ indexDocChunks(chunks) {
1330
+ const db = this.dbManager.getLibraryDb();
1331
+ const store = new DocChunkStore(db);
1332
+ return store.indexChunks(chunks);
1333
+ }
1334
+ /**
1335
+ * Query doc chunks by collection with optional keyword/scope/agent filters.
1336
+ */
1337
+ queryDocChunks(query) {
1338
+ const db = this.dbManager.getLibraryDb();
1339
+ const store = new DocChunkStore(db);
1340
+ return store.queryChunks(query);
1341
+ }
1342
+ /**
1343
+ * Seed all ACA files from a workspace directory into the doc chunk index.
1344
+ * Idempotent: skips files whose source hash hasn't changed.
1345
+ * Force re-index with opts.force = true.
1346
+ */
1347
+ async seedWorkspace(workspaceDir, opts = {}) {
1348
+ const db = this.dbManager.getLibraryDb();
1349
+ const seeder = new WorkspaceSeeder(db);
1350
+ return seeder.seedWorkspace(workspaceDir, opts);
1351
+ }
1352
+ /**
1353
+ * Seed a single file into the doc chunk index.
1354
+ */
1355
+ seedFile(filePath, collection, opts = {}) {
1356
+ const db = this.dbManager.getLibraryDb();
1357
+ const seeder = new WorkspaceSeeder(db);
1358
+ return seeder.seedFile(filePath, collection, opts);
1359
+ }
1360
+ /**
1361
+ * Get stats about the current doc chunk index.
1362
+ */
1363
+ getDocIndexStats() {
1364
+ const db = this.dbManager.getLibraryDb();
1365
+ const store = new DocChunkStore(db);
1366
+ return store.getStats();
1367
+ }
1368
+ /**
1369
+ * List indexed sources (what files have been seeded and their hashes).
1370
+ */
1371
+ listDocSources(opts) {
1372
+ const db = this.dbManager.getLibraryDb();
1373
+ const store = new DocChunkStore(db);
1374
+ return store.listSources(opts);
1375
+ }
1376
+ // ─── Fleet Startup Seeding + Cache Hydration ────────────────
1377
+ /**
1378
+ * Seed fleet agents from known workspace identity files and existing
1379
+ * message-db agent directories, then optionally hydrate the Redis fleet cache.
1380
+ *
1381
+ * The sweep is idempotent: existing rows are only updated when startup-discovered
1382
+ * values differ, so repeated boots do not duplicate or churn fleet rows.
1383
+ */
1384
+ async seedFleetAgentsOnStartup(opts = {}) {
1385
+ const db = this.dbManager.getLibraryDb();
1386
+ const store = new FleetStore(db);
1387
+ const discovered = discoverStartupFleetCandidates(this.dbManager, opts);
1388
+ let inserted = 0;
1389
+ let updated = 0;
1390
+ let skipped = 0;
1391
+ let orgsCreated = 0;
1392
+ for (const candidate of discovered) {
1393
+ const existing = store.getAgent(candidate.agentId);
1394
+ const mergedMetadata = {
1395
+ ...(existing?.metadata ?? {}),
1396
+ ...(candidate.metadata ?? {}),
1397
+ };
1398
+ if (!existing) {
1399
+ store.upsertAgent(candidate.agentId, {
1400
+ displayName: candidate.displayName,
1401
+ tier: candidate.tier,
1402
+ orgId: candidate.orgId ?? undefined,
1403
+ reportsTo: candidate.reportsTo ?? undefined,
1404
+ status: 'active',
1405
+ metadata: Object.keys(mergedMetadata).length > 0 ? mergedMetadata : undefined,
1406
+ });
1407
+ inserted++;
1408
+ continue;
1409
+ }
1410
+ const patch = {};
1411
+ if (candidate.displayName && candidate.displayName !== existing.displayName) {
1412
+ patch.displayName = candidate.displayName;
1413
+ }
1414
+ if (candidate.tier && candidate.tier !== 'unknown' && candidate.tier !== existing.tier) {
1415
+ patch.tier = candidate.tier;
1416
+ }
1417
+ if (candidate.orgId && candidate.orgId !== existing.orgId) {
1418
+ patch.orgId = candidate.orgId;
1419
+ }
1420
+ if (candidate.reportsTo && candidate.reportsTo !== existing.reportsTo) {
1421
+ patch.reportsTo = candidate.reportsTo;
1422
+ }
1423
+ if (JSON.stringify(mergedMetadata) !== JSON.stringify(existing.metadata ?? {})) {
1424
+ patch.metadata = mergedMetadata;
1425
+ }
1426
+ if (Object.keys(patch).length === 0) {
1427
+ skipped++;
1428
+ continue;
1429
+ }
1430
+ store.upsertAgent(candidate.agentId, patch);
1431
+ updated++;
1432
+ }
1433
+ for (const candidate of discovered) {
1434
+ if (!candidate.orgId)
1435
+ continue;
1436
+ if (store.getOrg(candidate.orgId))
1437
+ continue;
1438
+ if (candidate.tier !== 'council')
1439
+ continue;
1440
+ store.upsertOrg(candidate.orgId, {
1441
+ name: `${candidate.displayName} Org`,
1442
+ leadAgentId: candidate.agentId,
1443
+ });
1444
+ orgsCreated++;
1445
+ }
1446
+ let hydratedAgents = 0;
1447
+ let hydratedSummary = false;
1448
+ if (opts.hydrateCache !== false) {
1449
+ const hydrated = await this.hydrateFleetCache();
1450
+ hydratedAgents = hydrated.agents;
1451
+ hydratedSummary = hydrated.summary;
1452
+ }
1453
+ return {
1454
+ discovered: discovered.length,
1455
+ inserted,
1456
+ updated,
1457
+ skipped,
1458
+ orgsCreated,
1459
+ hydratedAgents,
1460
+ hydratedSummary,
1461
+ };
1462
+ }
1463
+ /**
1464
+ * Hydrate the Redis fleet cache from library.db.
1465
+ * Call on gateway startup to warm the cache for dashboard queries.
1466
+ *
1467
+ * Populates:
1468
+ * - Per-agent profiles (fleet registry + capabilities + desired state)
1469
+ * - Fleet summary (counts, drift status)
1470
+ */
1471
+ async hydrateFleetCache() {
1472
+ if (!this.cache.isConnected)
1473
+ return { agents: 0, summary: false };
1474
+ const db = this.dbManager.getLibraryDb();
1475
+ const fleetStore = new FleetStore(db);
1476
+ const desiredStore = new DesiredStateStore(db);
1477
+ const agents = fleetStore.listAgents();
1478
+ let hydrated = 0;
1479
+ for (const agent of agents) {
1480
+ try {
1481
+ // Build a composite profile for each agent
1482
+ const capabilities = fleetStore.getAgentCapabilities(agent.id);
1483
+ const desiredState = desiredStore.getAgentState(agent.id);
1484
+ const desiredConfig = desiredStore.getAgentConfig(agent.id);
1485
+ const composite = {
1486
+ ...agent,
1487
+ capabilities: capabilities.map(c => ({ capType: c.capType, name: c.name, version: c.version })),
1488
+ desiredState: desiredState.map(d => ({
1489
+ configKey: d.configKey,
1490
+ desiredValue: d.desiredValue,
1491
+ actualValue: d.actualValue,
1492
+ driftStatus: d.driftStatus,
1493
+ })),
1494
+ desiredConfig,
1495
+ };
1496
+ await this.cache.cacheFleetAgent(agent.id, composite);
1497
+ hydrated++;
1498
+ }
1499
+ catch (err) {
1500
+ const message = err instanceof Error ? err.message : String(err);
1501
+ console.warn(`[hypermem] Failed to cache agent ${agent.id}: ${message}`);
1502
+ }
1503
+ }
1504
+ // Cache fleet summary
1505
+ try {
1506
+ const driftSummary = desiredStore.getDriftSummary();
1507
+ const summary = {
1508
+ totalAgents: agents.length,
1509
+ activeAgents: agents.filter(a => a.status === 'active').length,
1510
+ tiers: {
1511
+ council: agents.filter(a => a.tier === 'council').length,
1512
+ director: agents.filter(a => a.tier === 'director').length,
1513
+ specialist: agents.filter(a => a.tier === 'specialist').length,
1514
+ },
1515
+ drift: driftSummary,
1516
+ hydratedAt: new Date().toISOString(),
1517
+ };
1518
+ await this.cache.cacheFleetSummary(summary);
1519
+ }
1520
+ catch {
1521
+ return { agents: hydrated, summary: false };
1522
+ }
1523
+ return { agents: hydrated, summary: true };
1524
+ }
1525
+ // ─── Lifecycle ───────────────────────────────────────────────
1526
+ /**
1527
+ * Clean shutdown.
1528
+ */
1529
+ async close() {
1530
+ await this.cache.disconnect();
1531
+ this.dbManager.close();
1532
+ }
1533
+ }
1534
+ export default HyperMem;
1535
+ export { SessionFlusher, flushSession } from './session-flusher.js';
1536
+ export { importVault, watchVault, parseObsidianNote, parseFrontmatter, extractWikilinks, extractTags, cleanObsidianMarkdown } from './obsidian-watcher.js';
1537
+ export { exportToVault } from './obsidian-exporter.js';
1538
+ export { collectMetrics, formatMetricsSummary } from './metrics-dashboard.js';
1539
+ export { getProfile, mergeProfile, PROFILES, lightProfile, standardProfile, fullProfile, extendedProfile, minimalProfile, richProfile } from './profiles.js';
1540
+ export { renderStarterFOS, resolveOutputTier } from './fos-mod.js';
1541
+ export { repairToolPairs } from './repair-tool-pairs.js';
1542
+ //# sourceMappingURL=index.js.map