@psiclawops/hypermem 0.8.5 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (933) hide show
  1. package/ARCHITECTURE.md +2 -2
  2. package/CHANGELOG.md +36 -1
  3. package/INSTALL.md +132 -9
  4. package/README.md +119 -272
  5. package/bench/README.md +42 -0
  6. package/bench/data-access-bench.mjs +380 -0
  7. package/bin/hypermem-bench.mjs +2 -0
  8. package/bin/hypermem-doctor.mjs +412 -0
  9. package/bin/hypermem-model-audit.mjs +339 -0
  10. package/bin/hypermem-status.mjs +491 -70
  11. package/docs/DIAGNOSTICS.md +205 -0
  12. package/docs/INTEGRATION_VALIDATION.md +186 -0
  13. package/docs/MIGRATION.md +9 -6
  14. package/docs/MIGRATION_GUIDE.md +125 -101
  15. package/docs/ROADMAP.md +247 -20
  16. package/docs/TUNING.md +19 -5
  17. package/install.sh +152 -401
  18. package/memory-plugin/LICENSE +190 -0
  19. package/memory-plugin/README.md +20 -0
  20. package/memory-plugin/package.json +3 -3
  21. package/package.json +19 -4
  22. package/plugin/LICENSE +190 -0
  23. package/plugin/README.md +20 -0
  24. package/plugin/package.json +4 -4
  25. package/scripts/install-runtime.mjs +12 -1
  26. package/dist/background-indexer.d.ts +0 -161
  27. package/dist/background-indexer.d.ts.map +0 -1
  28. package/dist/background-indexer.js +0 -1263
  29. package/dist/budget-policy.d.ts +0 -22
  30. package/dist/budget-policy.d.ts.map +0 -1
  31. package/dist/budget-policy.js +0 -27
  32. package/dist/cache.d.ts +0 -147
  33. package/dist/cache.d.ts.map +0 -1
  34. package/dist/cache.js +0 -569
  35. package/dist/compaction-fence.d.ts +0 -97
  36. package/dist/compaction-fence.d.ts.map +0 -1
  37. package/dist/compaction-fence.js +0 -174
  38. package/dist/compositor-utils.d.ts +0 -31
  39. package/dist/compositor-utils.d.ts.map +0 -1
  40. package/dist/compositor-utils.js +0 -47
  41. package/dist/compositor.d.ts +0 -394
  42. package/dist/compositor.d.ts.map +0 -1
  43. package/dist/compositor.js +0 -3632
  44. package/dist/content-hash.d.ts +0 -43
  45. package/dist/content-hash.d.ts.map +0 -1
  46. package/dist/content-hash.js +0 -75
  47. package/dist/content-type-classifier.d.ts +0 -41
  48. package/dist/content-type-classifier.d.ts.map +0 -1
  49. package/dist/content-type-classifier.js +0 -181
  50. package/dist/context-backfill.d.ts +0 -46
  51. package/dist/context-backfill.d.ts.map +0 -1
  52. package/dist/context-backfill.js +0 -113
  53. package/dist/context-store.d.ts +0 -131
  54. package/dist/context-store.d.ts.map +0 -1
  55. package/dist/context-store.js +0 -279
  56. package/dist/contradiction-audit-store.d.ts +0 -54
  57. package/dist/contradiction-audit-store.d.ts.map +0 -1
  58. package/dist/contradiction-audit-store.js +0 -88
  59. package/dist/contradiction-detector.d.ts +0 -78
  60. package/dist/contradiction-detector.d.ts.map +0 -1
  61. package/dist/contradiction-detector.js +0 -362
  62. package/dist/contradiction-resolution-policy.d.ts +0 -21
  63. package/dist/contradiction-resolution-policy.d.ts.map +0 -1
  64. package/dist/contradiction-resolution-policy.js +0 -17
  65. package/dist/cross-agent.d.ts +0 -74
  66. package/dist/cross-agent.d.ts.map +0 -1
  67. package/dist/cross-agent.js +0 -271
  68. package/dist/db.d.ts +0 -131
  69. package/dist/db.d.ts.map +0 -1
  70. package/dist/db.js +0 -410
  71. package/dist/degradation.d.ts +0 -102
  72. package/dist/degradation.d.ts.map +0 -1
  73. package/dist/degradation.js +0 -141
  74. package/dist/desired-state-store.d.ts +0 -100
  75. package/dist/desired-state-store.d.ts.map +0 -1
  76. package/dist/desired-state-store.js +0 -222
  77. package/dist/doc-chunk-store.d.ts +0 -140
  78. package/dist/doc-chunk-store.d.ts.map +0 -1
  79. package/dist/doc-chunk-store.js +0 -391
  80. package/dist/doc-chunker.d.ts +0 -99
  81. package/dist/doc-chunker.d.ts.map +0 -1
  82. package/dist/doc-chunker.js +0 -324
  83. package/dist/dreaming-promoter.d.ts +0 -124
  84. package/dist/dreaming-promoter.d.ts.map +0 -1
  85. package/dist/dreaming-promoter.js +0 -447
  86. package/dist/episode-store.d.ts +0 -49
  87. package/dist/episode-store.d.ts.map +0 -1
  88. package/dist/episode-store.js +0 -135
  89. package/dist/expertise-store.d.ts +0 -129
  90. package/dist/expertise-store.d.ts.map +0 -1
  91. package/dist/expertise-store.js +0 -342
  92. package/dist/fact-store.d.ts +0 -90
  93. package/dist/fact-store.d.ts.map +0 -1
  94. package/dist/fact-store.js +0 -283
  95. package/dist/fleet-store.d.ts +0 -144
  96. package/dist/fleet-store.d.ts.map +0 -1
  97. package/dist/fleet-store.js +0 -276
  98. package/dist/fos-mod.d.ts +0 -178
  99. package/dist/fos-mod.d.ts.map +0 -1
  100. package/dist/fos-mod.js +0 -416
  101. package/dist/hybrid-retrieval.d.ts +0 -64
  102. package/dist/hybrid-retrieval.d.ts.map +0 -1
  103. package/dist/hybrid-retrieval.js +0 -344
  104. package/dist/image-eviction.d.ts +0 -49
  105. package/dist/image-eviction.d.ts.map +0 -1
  106. package/dist/image-eviction.js +0 -251
  107. package/dist/index.d.ts +0 -718
  108. package/dist/index.d.ts.map +0 -1
  109. package/dist/index.js +0 -1469
  110. package/dist/keystone-scorer.d.ts +0 -51
  111. package/dist/keystone-scorer.d.ts.map +0 -1
  112. package/dist/keystone-scorer.js +0 -52
  113. package/dist/knowledge-graph.d.ts +0 -110
  114. package/dist/knowledge-graph.d.ts.map +0 -1
  115. package/dist/knowledge-graph.js +0 -305
  116. package/dist/knowledge-lint.d.ts +0 -31
  117. package/dist/knowledge-lint.d.ts.map +0 -1
  118. package/dist/knowledge-lint.js +0 -155
  119. package/dist/knowledge-store.d.ts +0 -72
  120. package/dist/knowledge-store.d.ts.map +0 -1
  121. package/dist/knowledge-store.js +0 -247
  122. package/dist/library-schema.d.ts +0 -27
  123. package/dist/library-schema.d.ts.map +0 -1
  124. package/dist/library-schema.js +0 -1343
  125. package/dist/message-store.d.ts +0 -181
  126. package/dist/message-store.d.ts.map +0 -1
  127. package/dist/message-store.js +0 -573
  128. package/dist/metrics-dashboard.d.ts +0 -114
  129. package/dist/metrics-dashboard.d.ts.map +0 -1
  130. package/dist/metrics-dashboard.js +0 -260
  131. package/dist/obsidian-exporter.d.ts +0 -57
  132. package/dist/obsidian-exporter.d.ts.map +0 -1
  133. package/dist/obsidian-exporter.js +0 -274
  134. package/dist/obsidian-watcher.d.ts +0 -147
  135. package/dist/obsidian-watcher.d.ts.map +0 -1
  136. package/dist/obsidian-watcher.js +0 -403
  137. package/dist/open-domain.d.ts +0 -46
  138. package/dist/open-domain.d.ts.map +0 -1
  139. package/dist/open-domain.js +0 -125
  140. package/dist/preference-store.d.ts +0 -54
  141. package/dist/preference-store.d.ts.map +0 -1
  142. package/dist/preference-store.js +0 -109
  143. package/dist/preservation-gate.d.ts +0 -82
  144. package/dist/preservation-gate.d.ts.map +0 -1
  145. package/dist/preservation-gate.js +0 -150
  146. package/dist/proactive-pass.d.ts +0 -63
  147. package/dist/proactive-pass.d.ts.map +0 -1
  148. package/dist/proactive-pass.js +0 -293
  149. package/dist/profiles.d.ts +0 -46
  150. package/dist/profiles.d.ts.map +0 -1
  151. package/dist/profiles.js +0 -262
  152. package/dist/provider-translator.d.ts +0 -50
  153. package/dist/provider-translator.d.ts.map +0 -1
  154. package/dist/provider-translator.js +0 -403
  155. package/dist/rate-limiter.d.ts +0 -76
  156. package/dist/rate-limiter.d.ts.map +0 -1
  157. package/dist/rate-limiter.js +0 -179
  158. package/dist/repair-tool-pairs.d.ts +0 -38
  159. package/dist/repair-tool-pairs.d.ts.map +0 -1
  160. package/dist/repair-tool-pairs.js +0 -209
  161. package/dist/replay-recovery.d.ts +0 -29
  162. package/dist/replay-recovery.d.ts.map +0 -1
  163. package/dist/replay-recovery.js +0 -82
  164. package/dist/reranker.d.ts +0 -95
  165. package/dist/reranker.d.ts.map +0 -1
  166. package/dist/reranker.js +0 -308
  167. package/dist/retrieval-policy.d.ts +0 -51
  168. package/dist/retrieval-policy.d.ts.map +0 -1
  169. package/dist/retrieval-policy.js +0 -77
  170. package/dist/schema.d.ts +0 -15
  171. package/dist/schema.d.ts.map +0 -1
  172. package/dist/schema.js +0 -300
  173. package/dist/secret-scanner.d.ts +0 -51
  174. package/dist/secret-scanner.d.ts.map +0 -1
  175. package/dist/secret-scanner.js +0 -248
  176. package/dist/seed.d.ts +0 -108
  177. package/dist/seed.d.ts.map +0 -1
  178. package/dist/seed.js +0 -177
  179. package/dist/session-flusher.d.ts +0 -53
  180. package/dist/session-flusher.d.ts.map +0 -1
  181. package/dist/session-flusher.js +0 -69
  182. package/dist/session-topic-map.d.ts +0 -41
  183. package/dist/session-topic-map.d.ts.map +0 -1
  184. package/dist/session-topic-map.js +0 -77
  185. package/dist/spawn-context.d.ts +0 -54
  186. package/dist/spawn-context.d.ts.map +0 -1
  187. package/dist/spawn-context.js +0 -159
  188. package/dist/system-store.d.ts +0 -73
  189. package/dist/system-store.d.ts.map +0 -1
  190. package/dist/system-store.js +0 -182
  191. package/dist/temporal-store.d.ts +0 -81
  192. package/dist/temporal-store.d.ts.map +0 -1
  193. package/dist/temporal-store.js +0 -149
  194. package/dist/tool-artifact-store.d.ts +0 -98
  195. package/dist/tool-artifact-store.d.ts.map +0 -1
  196. package/dist/tool-artifact-store.js +0 -244
  197. package/dist/topic-detector.d.ts +0 -35
  198. package/dist/topic-detector.d.ts.map +0 -1
  199. package/dist/topic-detector.js +0 -249
  200. package/dist/topic-store.d.ts +0 -51
  201. package/dist/topic-store.d.ts.map +0 -1
  202. package/dist/topic-store.js +0 -175
  203. package/dist/topic-synthesizer.d.ts +0 -51
  204. package/dist/topic-synthesizer.d.ts.map +0 -1
  205. package/dist/topic-synthesizer.js +0 -316
  206. package/dist/trigger-registry.d.ts +0 -63
  207. package/dist/trigger-registry.d.ts.map +0 -1
  208. package/dist/trigger-registry.js +0 -163
  209. package/dist/types.d.ts +0 -815
  210. package/dist/types.d.ts.map +0 -1
  211. package/dist/types.js +0 -9
  212. package/dist/vector-store.d.ts +0 -180
  213. package/dist/vector-store.d.ts.map +0 -1
  214. package/dist/vector-store.js +0 -1041
  215. package/dist/version.d.ts +0 -34
  216. package/dist/version.d.ts.map +0 -1
  217. package/dist/version.js +0 -34
  218. package/dist/wiki-page-emitter.d.ts +0 -65
  219. package/dist/wiki-page-emitter.d.ts.map +0 -1
  220. package/dist/wiki-page-emitter.js +0 -258
  221. package/dist/work-store.d.ts +0 -112
  222. package/dist/work-store.d.ts.map +0 -1
  223. package/dist/work-store.js +0 -273
  224. package/memory-plugin/dist/index.d.ts +0 -24
  225. package/memory-plugin/dist/index.d.ts.map +0 -1
  226. package/memory-plugin/dist/index.js +0 -300
  227. package/memory-plugin/dist/index.js.map +0 -1
  228. package/node_modules/sqlite-vec/README.md +0 -1
  229. package/node_modules/sqlite-vec/index.cjs +0 -46
  230. package/node_modules/sqlite-vec/index.d.ts +0 -17
  231. package/node_modules/sqlite-vec/index.mjs +0 -47
  232. package/node_modules/sqlite-vec/package.json +0 -1
  233. package/node_modules/sqlite-vec-linux-x64/README.md +0 -1
  234. package/node_modules/sqlite-vec-linux-x64/package.json +0 -1
  235. package/node_modules/sqlite-vec-linux-x64/vec0.so +0 -0
  236. package/node_modules/zod/LICENSE +0 -21
  237. package/node_modules/zod/README.md +0 -208
  238. package/node_modules/zod/index.cjs +0 -33
  239. package/node_modules/zod/index.d.cts +0 -4
  240. package/node_modules/zod/index.d.ts +0 -4
  241. package/node_modules/zod/index.js +0 -4
  242. package/node_modules/zod/locales/index.cjs +0 -17
  243. package/node_modules/zod/locales/index.d.cts +0 -1
  244. package/node_modules/zod/locales/index.d.ts +0 -1
  245. package/node_modules/zod/locales/index.js +0 -1
  246. package/node_modules/zod/locales/package.json +0 -6
  247. package/node_modules/zod/mini/index.cjs +0 -32
  248. package/node_modules/zod/mini/index.d.cts +0 -3
  249. package/node_modules/zod/mini/index.d.ts +0 -3
  250. package/node_modules/zod/mini/index.js +0 -3
  251. package/node_modules/zod/mini/package.json +0 -6
  252. package/node_modules/zod/package.json +0 -135
  253. package/node_modules/zod/src/index.ts +0 -4
  254. package/node_modules/zod/src/locales/index.ts +0 -1
  255. package/node_modules/zod/src/mini/index.ts +0 -3
  256. package/node_modules/zod/src/v3/ZodError.ts +0 -330
  257. package/node_modules/zod/src/v3/benchmarks/datetime.ts +0 -58
  258. package/node_modules/zod/src/v3/benchmarks/discriminatedUnion.ts +0 -80
  259. package/node_modules/zod/src/v3/benchmarks/index.ts +0 -59
  260. package/node_modules/zod/src/v3/benchmarks/ipv4.ts +0 -57
  261. package/node_modules/zod/src/v3/benchmarks/object.ts +0 -69
  262. package/node_modules/zod/src/v3/benchmarks/primitives.ts +0 -162
  263. package/node_modules/zod/src/v3/benchmarks/realworld.ts +0 -63
  264. package/node_modules/zod/src/v3/benchmarks/string.ts +0 -55
  265. package/node_modules/zod/src/v3/benchmarks/union.ts +0 -80
  266. package/node_modules/zod/src/v3/errors.ts +0 -13
  267. package/node_modules/zod/src/v3/external.ts +0 -6
  268. package/node_modules/zod/src/v3/helpers/enumUtil.ts +0 -17
  269. package/node_modules/zod/src/v3/helpers/errorUtil.ts +0 -8
  270. package/node_modules/zod/src/v3/helpers/parseUtil.ts +0 -176
  271. package/node_modules/zod/src/v3/helpers/partialUtil.ts +0 -34
  272. package/node_modules/zod/src/v3/helpers/typeAliases.ts +0 -2
  273. package/node_modules/zod/src/v3/helpers/util.ts +0 -224
  274. package/node_modules/zod/src/v3/index.ts +0 -4
  275. package/node_modules/zod/src/v3/locales/en.ts +0 -124
  276. package/node_modules/zod/src/v3/standard-schema.ts +0 -113
  277. package/node_modules/zod/src/v3/tests/Mocker.ts +0 -54
  278. package/node_modules/zod/src/v3/tests/all-errors.test.ts +0 -157
  279. package/node_modules/zod/src/v3/tests/anyunknown.test.ts +0 -28
  280. package/node_modules/zod/src/v3/tests/array.test.ts +0 -71
  281. package/node_modules/zod/src/v3/tests/async-parsing.test.ts +0 -388
  282. package/node_modules/zod/src/v3/tests/async-refinements.test.ts +0 -46
  283. package/node_modules/zod/src/v3/tests/base.test.ts +0 -29
  284. package/node_modules/zod/src/v3/tests/bigint.test.ts +0 -55
  285. package/node_modules/zod/src/v3/tests/branded.test.ts +0 -53
  286. package/node_modules/zod/src/v3/tests/catch.test.ts +0 -220
  287. package/node_modules/zod/src/v3/tests/coerce.test.ts +0 -133
  288. package/node_modules/zod/src/v3/tests/complex.test.ts +0 -70
  289. package/node_modules/zod/src/v3/tests/custom.test.ts +0 -31
  290. package/node_modules/zod/src/v3/tests/date.test.ts +0 -32
  291. package/node_modules/zod/src/v3/tests/deepmasking.test.ts +0 -186
  292. package/node_modules/zod/src/v3/tests/default.test.ts +0 -112
  293. package/node_modules/zod/src/v3/tests/description.test.ts +0 -33
  294. package/node_modules/zod/src/v3/tests/discriminated-unions.test.ts +0 -315
  295. package/node_modules/zod/src/v3/tests/enum.test.ts +0 -80
  296. package/node_modules/zod/src/v3/tests/error.test.ts +0 -551
  297. package/node_modules/zod/src/v3/tests/firstparty.test.ts +0 -87
  298. package/node_modules/zod/src/v3/tests/firstpartyschematypes.test.ts +0 -21
  299. package/node_modules/zod/src/v3/tests/function.test.ts +0 -261
  300. package/node_modules/zod/src/v3/tests/generics.test.ts +0 -48
  301. package/node_modules/zod/src/v3/tests/instanceof.test.ts +0 -37
  302. package/node_modules/zod/src/v3/tests/intersection.test.ts +0 -110
  303. package/node_modules/zod/src/v3/tests/language-server.source.ts +0 -76
  304. package/node_modules/zod/src/v3/tests/language-server.test.ts +0 -207
  305. package/node_modules/zod/src/v3/tests/literal.test.ts +0 -36
  306. package/node_modules/zod/src/v3/tests/map.test.ts +0 -110
  307. package/node_modules/zod/src/v3/tests/masking.test.ts +0 -4
  308. package/node_modules/zod/src/v3/tests/mocker.test.ts +0 -19
  309. package/node_modules/zod/src/v3/tests/nan.test.ts +0 -24
  310. package/node_modules/zod/src/v3/tests/nativeEnum.test.ts +0 -87
  311. package/node_modules/zod/src/v3/tests/nullable.test.ts +0 -42
  312. package/node_modules/zod/src/v3/tests/number.test.ts +0 -176
  313. package/node_modules/zod/src/v3/tests/object-augmentation.test.ts +0 -29
  314. package/node_modules/zod/src/v3/tests/object-in-es5-env.test.ts +0 -29
  315. package/node_modules/zod/src/v3/tests/object.test.ts +0 -434
  316. package/node_modules/zod/src/v3/tests/optional.test.ts +0 -42
  317. package/node_modules/zod/src/v3/tests/parseUtil.test.ts +0 -23
  318. package/node_modules/zod/src/v3/tests/parser.test.ts +0 -41
  319. package/node_modules/zod/src/v3/tests/partials.test.ts +0 -243
  320. package/node_modules/zod/src/v3/tests/pickomit.test.ts +0 -111
  321. package/node_modules/zod/src/v3/tests/pipeline.test.ts +0 -29
  322. package/node_modules/zod/src/v3/tests/preprocess.test.ts +0 -186
  323. package/node_modules/zod/src/v3/tests/primitive.test.ts +0 -440
  324. package/node_modules/zod/src/v3/tests/promise.test.ts +0 -90
  325. package/node_modules/zod/src/v3/tests/readonly.test.ts +0 -194
  326. package/node_modules/zod/src/v3/tests/record.test.ts +0 -171
  327. package/node_modules/zod/src/v3/tests/recursive.test.ts +0 -197
  328. package/node_modules/zod/src/v3/tests/refine.test.ts +0 -313
  329. package/node_modules/zod/src/v3/tests/safeparse.test.ts +0 -27
  330. package/node_modules/zod/src/v3/tests/set.test.ts +0 -142
  331. package/node_modules/zod/src/v3/tests/standard-schema.test.ts +0 -83
  332. package/node_modules/zod/src/v3/tests/string.test.ts +0 -916
  333. package/node_modules/zod/src/v3/tests/transformer.test.ts +0 -233
  334. package/node_modules/zod/src/v3/tests/tuple.test.ts +0 -90
  335. package/node_modules/zod/src/v3/tests/unions.test.ts +0 -57
  336. package/node_modules/zod/src/v3/tests/validations.test.ts +0 -133
  337. package/node_modules/zod/src/v3/tests/void.test.ts +0 -15
  338. package/node_modules/zod/src/v3/types.ts +0 -5138
  339. package/node_modules/zod/src/v4/classic/checks.ts +0 -32
  340. package/node_modules/zod/src/v4/classic/coerce.ts +0 -27
  341. package/node_modules/zod/src/v4/classic/compat.ts +0 -70
  342. package/node_modules/zod/src/v4/classic/errors.ts +0 -82
  343. package/node_modules/zod/src/v4/classic/external.ts +0 -51
  344. package/node_modules/zod/src/v4/classic/from-json-schema.ts +0 -643
  345. package/node_modules/zod/src/v4/classic/index.ts +0 -5
  346. package/node_modules/zod/src/v4/classic/iso.ts +0 -90
  347. package/node_modules/zod/src/v4/classic/parse.ts +0 -82
  348. package/node_modules/zod/src/v4/classic/schemas.ts +0 -2409
  349. package/node_modules/zod/src/v4/classic/tests/anyunknown.test.ts +0 -26
  350. package/node_modules/zod/src/v4/classic/tests/apply.test.ts +0 -59
  351. package/node_modules/zod/src/v4/classic/tests/array.test.ts +0 -264
  352. package/node_modules/zod/src/v4/classic/tests/assignability.test.ts +0 -210
  353. package/node_modules/zod/src/v4/classic/tests/async-parsing.test.ts +0 -381
  354. package/node_modules/zod/src/v4/classic/tests/async-refinements.test.ts +0 -68
  355. package/node_modules/zod/src/v4/classic/tests/base.test.ts +0 -7
  356. package/node_modules/zod/src/v4/classic/tests/bigint.test.ts +0 -54
  357. package/node_modules/zod/src/v4/classic/tests/brand.test.ts +0 -106
  358. package/node_modules/zod/src/v4/classic/tests/catch.test.ts +0 -276
  359. package/node_modules/zod/src/v4/classic/tests/coalesce.test.ts +0 -20
  360. package/node_modules/zod/src/v4/classic/tests/codec-examples.test.ts +0 -573
  361. package/node_modules/zod/src/v4/classic/tests/codec.test.ts +0 -562
  362. package/node_modules/zod/src/v4/classic/tests/coerce.test.ts +0 -160
  363. package/node_modules/zod/src/v4/classic/tests/continuability.test.ts +0 -374
  364. package/node_modules/zod/src/v4/classic/tests/custom.test.ts +0 -40
  365. package/node_modules/zod/src/v4/classic/tests/date.test.ts +0 -62
  366. package/node_modules/zod/src/v4/classic/tests/datetime.test.ts +0 -302
  367. package/node_modules/zod/src/v4/classic/tests/default.test.ts +0 -365
  368. package/node_modules/zod/src/v4/classic/tests/describe-meta-checks.test.ts +0 -27
  369. package/node_modules/zod/src/v4/classic/tests/description.test.ts +0 -32
  370. package/node_modules/zod/src/v4/classic/tests/discriminated-unions.test.ts +0 -661
  371. package/node_modules/zod/src/v4/classic/tests/enum.test.ts +0 -285
  372. package/node_modules/zod/src/v4/classic/tests/error-utils.test.ts +0 -595
  373. package/node_modules/zod/src/v4/classic/tests/error.test.ts +0 -711
  374. package/node_modules/zod/src/v4/classic/tests/file.test.ts +0 -96
  375. package/node_modules/zod/src/v4/classic/tests/firstparty.test.ts +0 -179
  376. package/node_modules/zod/src/v4/classic/tests/fix-json-issue.test.ts +0 -26
  377. package/node_modules/zod/src/v4/classic/tests/from-json-schema.test.ts +0 -734
  378. package/node_modules/zod/src/v4/classic/tests/function.test.ts +0 -360
  379. package/node_modules/zod/src/v4/classic/tests/generics.test.ts +0 -72
  380. package/node_modules/zod/src/v4/classic/tests/hash.test.ts +0 -68
  381. package/node_modules/zod/src/v4/classic/tests/index.test.ts +0 -939
  382. package/node_modules/zod/src/v4/classic/tests/instanceof.test.ts +0 -60
  383. package/node_modules/zod/src/v4/classic/tests/intersection.test.ts +0 -198
  384. package/node_modules/zod/src/v4/classic/tests/json.test.ts +0 -109
  385. package/node_modules/zod/src/v4/classic/tests/lazy.test.ts +0 -227
  386. package/node_modules/zod/src/v4/classic/tests/literal.test.ts +0 -117
  387. package/node_modules/zod/src/v4/classic/tests/map.test.ts +0 -330
  388. package/node_modules/zod/src/v4/classic/tests/nan.test.ts +0 -21
  389. package/node_modules/zod/src/v4/classic/tests/nested-refine.test.ts +0 -168
  390. package/node_modules/zod/src/v4/classic/tests/nonoptional.test.ts +0 -101
  391. package/node_modules/zod/src/v4/classic/tests/nullable.test.ts +0 -22
  392. package/node_modules/zod/src/v4/classic/tests/number.test.ts +0 -270
  393. package/node_modules/zod/src/v4/classic/tests/object.test.ts +0 -640
  394. package/node_modules/zod/src/v4/classic/tests/optional.test.ts +0 -223
  395. package/node_modules/zod/src/v4/classic/tests/partial.test.ts +0 -427
  396. package/node_modules/zod/src/v4/classic/tests/pickomit.test.ts +0 -211
  397. package/node_modules/zod/src/v4/classic/tests/pipe.test.ts +0 -101
  398. package/node_modules/zod/src/v4/classic/tests/prefault.test.ts +0 -74
  399. package/node_modules/zod/src/v4/classic/tests/preprocess.test.ts +0 -282
  400. package/node_modules/zod/src/v4/classic/tests/primitive.test.ts +0 -175
  401. package/node_modules/zod/src/v4/classic/tests/promise.test.ts +0 -81
  402. package/node_modules/zod/src/v4/classic/tests/prototypes.test.ts +0 -23
  403. package/node_modules/zod/src/v4/classic/tests/readonly.test.ts +0 -252
  404. package/node_modules/zod/src/v4/classic/tests/record.test.ts +0 -632
  405. package/node_modules/zod/src/v4/classic/tests/recursive-types.test.ts +0 -582
  406. package/node_modules/zod/src/v4/classic/tests/refine.test.ts +0 -570
  407. package/node_modules/zod/src/v4/classic/tests/registries.test.ts +0 -243
  408. package/node_modules/zod/src/v4/classic/tests/set.test.ts +0 -181
  409. package/node_modules/zod/src/v4/classic/tests/standard-schema.test.ts +0 -134
  410. package/node_modules/zod/src/v4/classic/tests/string-formats.test.ts +0 -125
  411. package/node_modules/zod/src/v4/classic/tests/string.test.ts +0 -1175
  412. package/node_modules/zod/src/v4/classic/tests/stringbool.test.ts +0 -106
  413. package/node_modules/zod/src/v4/classic/tests/template-literal.test.ts +0 -771
  414. package/node_modules/zod/src/v4/classic/tests/to-json-schema-methods.test.ts +0 -438
  415. package/node_modules/zod/src/v4/classic/tests/to-json-schema.test.ts +0 -2990
  416. package/node_modules/zod/src/v4/classic/tests/transform.test.ts +0 -361
  417. package/node_modules/zod/src/v4/classic/tests/tuple.test.ts +0 -183
  418. package/node_modules/zod/src/v4/classic/tests/union.test.ts +0 -219
  419. package/node_modules/zod/src/v4/classic/tests/url.test.ts +0 -13
  420. package/node_modules/zod/src/v4/classic/tests/validations.test.ts +0 -283
  421. package/node_modules/zod/src/v4/classic/tests/void.test.ts +0 -12
  422. package/node_modules/zod/src/v4/core/api.ts +0 -1798
  423. package/node_modules/zod/src/v4/core/checks.ts +0 -1293
  424. package/node_modules/zod/src/v4/core/config.ts +0 -15
  425. package/node_modules/zod/src/v4/core/core.ts +0 -138
  426. package/node_modules/zod/src/v4/core/doc.ts +0 -44
  427. package/node_modules/zod/src/v4/core/errors.ts +0 -448
  428. package/node_modules/zod/src/v4/core/index.ts +0 -16
  429. package/node_modules/zod/src/v4/core/json-schema-generator.ts +0 -126
  430. package/node_modules/zod/src/v4/core/json-schema-processors.ts +0 -667
  431. package/node_modules/zod/src/v4/core/json-schema.ts +0 -147
  432. package/node_modules/zod/src/v4/core/parse.ts +0 -195
  433. package/node_modules/zod/src/v4/core/regexes.ts +0 -183
  434. package/node_modules/zod/src/v4/core/registries.ts +0 -105
  435. package/node_modules/zod/src/v4/core/schemas.ts +0 -4538
  436. package/node_modules/zod/src/v4/core/standard-schema.ts +0 -159
  437. package/node_modules/zod/src/v4/core/tests/extend.test.ts +0 -59
  438. package/node_modules/zod/src/v4/core/tests/index.test.ts +0 -46
  439. package/node_modules/zod/src/v4/core/tests/locales/be.test.ts +0 -124
  440. package/node_modules/zod/src/v4/core/tests/locales/en.test.ts +0 -22
  441. package/node_modules/zod/src/v4/core/tests/locales/es.test.ts +0 -181
  442. package/node_modules/zod/src/v4/core/tests/locales/he.test.ts +0 -379
  443. package/node_modules/zod/src/v4/core/tests/locales/nl.test.ts +0 -46
  444. package/node_modules/zod/src/v4/core/tests/locales/ru.test.ts +0 -128
  445. package/node_modules/zod/src/v4/core/tests/locales/tr.test.ts +0 -69
  446. package/node_modules/zod/src/v4/core/tests/locales/uz.test.ts +0 -83
  447. package/node_modules/zod/src/v4/core/tests/record-constructor.test.ts +0 -67
  448. package/node_modules/zod/src/v4/core/tests/recursive-tuples.test.ts +0 -45
  449. package/node_modules/zod/src/v4/core/to-json-schema.ts +0 -613
  450. package/node_modules/zod/src/v4/core/util.ts +0 -966
  451. package/node_modules/zod/src/v4/core/versions.ts +0 -5
  452. package/node_modules/zod/src/v4/core/zsf.ts +0 -323
  453. package/node_modules/zod/src/v4/index.ts +0 -4
  454. package/node_modules/zod/src/v4/locales/ar.ts +0 -115
  455. package/node_modules/zod/src/v4/locales/az.ts +0 -111
  456. package/node_modules/zod/src/v4/locales/be.ts +0 -176
  457. package/node_modules/zod/src/v4/locales/bg.ts +0 -128
  458. package/node_modules/zod/src/v4/locales/ca.ts +0 -116
  459. package/node_modules/zod/src/v4/locales/cs.ts +0 -118
  460. package/node_modules/zod/src/v4/locales/da.ts +0 -123
  461. package/node_modules/zod/src/v4/locales/de.ts +0 -116
  462. package/node_modules/zod/src/v4/locales/en.ts +0 -119
  463. package/node_modules/zod/src/v4/locales/eo.ts +0 -118
  464. package/node_modules/zod/src/v4/locales/es.ts +0 -141
  465. package/node_modules/zod/src/v4/locales/fa.ts +0 -126
  466. package/node_modules/zod/src/v4/locales/fi.ts +0 -121
  467. package/node_modules/zod/src/v4/locales/fr-CA.ts +0 -116
  468. package/node_modules/zod/src/v4/locales/fr.ts +0 -116
  469. package/node_modules/zod/src/v4/locales/he.ts +0 -246
  470. package/node_modules/zod/src/v4/locales/hu.ts +0 -117
  471. package/node_modules/zod/src/v4/locales/hy.ts +0 -164
  472. package/node_modules/zod/src/v4/locales/id.ts +0 -115
  473. package/node_modules/zod/src/v4/locales/index.ts +0 -49
  474. package/node_modules/zod/src/v4/locales/is.ts +0 -119
  475. package/node_modules/zod/src/v4/locales/it.ts +0 -116
  476. package/node_modules/zod/src/v4/locales/ja.ts +0 -114
  477. package/node_modules/zod/src/v4/locales/ka.ts +0 -123
  478. package/node_modules/zod/src/v4/locales/kh.ts +0 -7
  479. package/node_modules/zod/src/v4/locales/km.ts +0 -119
  480. package/node_modules/zod/src/v4/locales/ko.ts +0 -121
  481. package/node_modules/zod/src/v4/locales/lt.ts +0 -239
  482. package/node_modules/zod/src/v4/locales/mk.ts +0 -118
  483. package/node_modules/zod/src/v4/locales/ms.ts +0 -115
  484. package/node_modules/zod/src/v4/locales/nl.ts +0 -121
  485. package/node_modules/zod/src/v4/locales/no.ts +0 -116
  486. package/node_modules/zod/src/v4/locales/ota.ts +0 -117
  487. package/node_modules/zod/src/v4/locales/pl.ts +0 -118
  488. package/node_modules/zod/src/v4/locales/ps.ts +0 -126
  489. package/node_modules/zod/src/v4/locales/pt.ts +0 -116
  490. package/node_modules/zod/src/v4/locales/ru.ts +0 -176
  491. package/node_modules/zod/src/v4/locales/sl.ts +0 -118
  492. package/node_modules/zod/src/v4/locales/sv.ts +0 -119
  493. package/node_modules/zod/src/v4/locales/ta.ts +0 -118
  494. package/node_modules/zod/src/v4/locales/th.ts +0 -119
  495. package/node_modules/zod/src/v4/locales/tr.ts +0 -111
  496. package/node_modules/zod/src/v4/locales/ua.ts +0 -7
  497. package/node_modules/zod/src/v4/locales/uk.ts +0 -117
  498. package/node_modules/zod/src/v4/locales/ur.ts +0 -119
  499. package/node_modules/zod/src/v4/locales/uz.ts +0 -116
  500. package/node_modules/zod/src/v4/locales/vi.ts +0 -117
  501. package/node_modules/zod/src/v4/locales/yo.ts +0 -124
  502. package/node_modules/zod/src/v4/locales/zh-CN.ts +0 -116
  503. package/node_modules/zod/src/v4/locales/zh-TW.ts +0 -115
  504. package/node_modules/zod/src/v4/mini/checks.ts +0 -32
  505. package/node_modules/zod/src/v4/mini/coerce.ts +0 -27
  506. package/node_modules/zod/src/v4/mini/external.ts +0 -40
  507. package/node_modules/zod/src/v4/mini/index.ts +0 -3
  508. package/node_modules/zod/src/v4/mini/iso.ts +0 -66
  509. package/node_modules/zod/src/v4/mini/parse.ts +0 -14
  510. package/node_modules/zod/src/v4/mini/schemas.ts +0 -1916
  511. package/node_modules/zod/src/v4/mini/tests/apply.test.ts +0 -24
  512. package/node_modules/zod/src/v4/mini/tests/assignability.test.ts +0 -129
  513. package/node_modules/zod/src/v4/mini/tests/brand.test.ts +0 -94
  514. package/node_modules/zod/src/v4/mini/tests/checks.test.ts +0 -144
  515. package/node_modules/zod/src/v4/mini/tests/codec.test.ts +0 -529
  516. package/node_modules/zod/src/v4/mini/tests/computed.test.ts +0 -36
  517. package/node_modules/zod/src/v4/mini/tests/error.test.ts +0 -22
  518. package/node_modules/zod/src/v4/mini/tests/functions.test.ts +0 -5
  519. package/node_modules/zod/src/v4/mini/tests/index.test.ts +0 -963
  520. package/node_modules/zod/src/v4/mini/tests/number.test.ts +0 -95
  521. package/node_modules/zod/src/v4/mini/tests/object.test.ts +0 -227
  522. package/node_modules/zod/src/v4/mini/tests/prototypes.test.ts +0 -43
  523. package/node_modules/zod/src/v4/mini/tests/recursive-types.test.ts +0 -275
  524. package/node_modules/zod/src/v4/mini/tests/standard-schema.test.ts +0 -50
  525. package/node_modules/zod/src/v4/mini/tests/string.test.ts +0 -347
  526. package/node_modules/zod/src/v4-mini/index.ts +0 -3
  527. package/node_modules/zod/v3/ZodError.cjs +0 -138
  528. package/node_modules/zod/v3/ZodError.d.cts +0 -164
  529. package/node_modules/zod/v3/ZodError.d.ts +0 -164
  530. package/node_modules/zod/v3/ZodError.js +0 -133
  531. package/node_modules/zod/v3/errors.cjs +0 -17
  532. package/node_modules/zod/v3/errors.d.cts +0 -5
  533. package/node_modules/zod/v3/errors.d.ts +0 -5
  534. package/node_modules/zod/v3/errors.js +0 -9
  535. package/node_modules/zod/v3/external.cjs +0 -22
  536. package/node_modules/zod/v3/external.d.cts +0 -6
  537. package/node_modules/zod/v3/external.d.ts +0 -6
  538. package/node_modules/zod/v3/external.js +0 -6
  539. package/node_modules/zod/v3/helpers/enumUtil.cjs +0 -2
  540. package/node_modules/zod/v3/helpers/enumUtil.d.cts +0 -8
  541. package/node_modules/zod/v3/helpers/enumUtil.d.ts +0 -8
  542. package/node_modules/zod/v3/helpers/enumUtil.js +0 -1
  543. package/node_modules/zod/v3/helpers/errorUtil.cjs +0 -9
  544. package/node_modules/zod/v3/helpers/errorUtil.d.cts +0 -9
  545. package/node_modules/zod/v3/helpers/errorUtil.d.ts +0 -9
  546. package/node_modules/zod/v3/helpers/errorUtil.js +0 -6
  547. package/node_modules/zod/v3/helpers/parseUtil.cjs +0 -124
  548. package/node_modules/zod/v3/helpers/parseUtil.d.cts +0 -78
  549. package/node_modules/zod/v3/helpers/parseUtil.d.ts +0 -78
  550. package/node_modules/zod/v3/helpers/parseUtil.js +0 -109
  551. package/node_modules/zod/v3/helpers/partialUtil.cjs +0 -2
  552. package/node_modules/zod/v3/helpers/partialUtil.d.cts +0 -8
  553. package/node_modules/zod/v3/helpers/partialUtil.d.ts +0 -8
  554. package/node_modules/zod/v3/helpers/partialUtil.js +0 -1
  555. package/node_modules/zod/v3/helpers/typeAliases.cjs +0 -2
  556. package/node_modules/zod/v3/helpers/typeAliases.d.cts +0 -2
  557. package/node_modules/zod/v3/helpers/typeAliases.d.ts +0 -2
  558. package/node_modules/zod/v3/helpers/typeAliases.js +0 -1
  559. package/node_modules/zod/v3/helpers/util.cjs +0 -137
  560. package/node_modules/zod/v3/helpers/util.d.cts +0 -85
  561. package/node_modules/zod/v3/helpers/util.d.ts +0 -85
  562. package/node_modules/zod/v3/helpers/util.js +0 -133
  563. package/node_modules/zod/v3/index.cjs +0 -33
  564. package/node_modules/zod/v3/index.d.cts +0 -4
  565. package/node_modules/zod/v3/index.d.ts +0 -4
  566. package/node_modules/zod/v3/index.js +0 -4
  567. package/node_modules/zod/v3/locales/en.cjs +0 -112
  568. package/node_modules/zod/v3/locales/en.d.cts +0 -3
  569. package/node_modules/zod/v3/locales/en.d.ts +0 -3
  570. package/node_modules/zod/v3/locales/en.js +0 -109
  571. package/node_modules/zod/v3/package.json +0 -6
  572. package/node_modules/zod/v3/standard-schema.cjs +0 -2
  573. package/node_modules/zod/v3/standard-schema.d.cts +0 -102
  574. package/node_modules/zod/v3/standard-schema.d.ts +0 -102
  575. package/node_modules/zod/v3/standard-schema.js +0 -1
  576. package/node_modules/zod/v3/types.cjs +0 -3777
  577. package/node_modules/zod/v3/types.d.cts +0 -1034
  578. package/node_modules/zod/v3/types.d.ts +0 -1034
  579. package/node_modules/zod/v3/types.js +0 -3695
  580. package/node_modules/zod/v4/classic/checks.cjs +0 -33
  581. package/node_modules/zod/v4/classic/checks.d.cts +0 -1
  582. package/node_modules/zod/v4/classic/checks.d.ts +0 -1
  583. package/node_modules/zod/v4/classic/checks.js +0 -1
  584. package/node_modules/zod/v4/classic/coerce.cjs +0 -47
  585. package/node_modules/zod/v4/classic/coerce.d.cts +0 -17
  586. package/node_modules/zod/v4/classic/coerce.d.ts +0 -17
  587. package/node_modules/zod/v4/classic/coerce.js +0 -17
  588. package/node_modules/zod/v4/classic/compat.cjs +0 -61
  589. package/node_modules/zod/v4/classic/compat.d.cts +0 -50
  590. package/node_modules/zod/v4/classic/compat.d.ts +0 -50
  591. package/node_modules/zod/v4/classic/compat.js +0 -31
  592. package/node_modules/zod/v4/classic/errors.cjs +0 -74
  593. package/node_modules/zod/v4/classic/errors.d.cts +0 -30
  594. package/node_modules/zod/v4/classic/errors.d.ts +0 -30
  595. package/node_modules/zod/v4/classic/errors.js +0 -48
  596. package/node_modules/zod/v4/classic/external.cjs +0 -73
  597. package/node_modules/zod/v4/classic/external.d.cts +0 -15
  598. package/node_modules/zod/v4/classic/external.d.ts +0 -15
  599. package/node_modules/zod/v4/classic/external.js +0 -20
  600. package/node_modules/zod/v4/classic/from-json-schema.cjs +0 -610
  601. package/node_modules/zod/v4/classic/from-json-schema.d.cts +0 -12
  602. package/node_modules/zod/v4/classic/from-json-schema.d.ts +0 -12
  603. package/node_modules/zod/v4/classic/from-json-schema.js +0 -584
  604. package/node_modules/zod/v4/classic/index.cjs +0 -33
  605. package/node_modules/zod/v4/classic/index.d.cts +0 -4
  606. package/node_modules/zod/v4/classic/index.d.ts +0 -4
  607. package/node_modules/zod/v4/classic/index.js +0 -4
  608. package/node_modules/zod/v4/classic/iso.cjs +0 -60
  609. package/node_modules/zod/v4/classic/iso.d.cts +0 -22
  610. package/node_modules/zod/v4/classic/iso.d.ts +0 -22
  611. package/node_modules/zod/v4/classic/iso.js +0 -30
  612. package/node_modules/zod/v4/classic/package.json +0 -6
  613. package/node_modules/zod/v4/classic/parse.cjs +0 -41
  614. package/node_modules/zod/v4/classic/parse.d.cts +0 -31
  615. package/node_modules/zod/v4/classic/parse.d.ts +0 -31
  616. package/node_modules/zod/v4/classic/parse.js +0 -15
  617. package/node_modules/zod/v4/classic/schemas.cjs +0 -1272
  618. package/node_modules/zod/v4/classic/schemas.d.cts +0 -739
  619. package/node_modules/zod/v4/classic/schemas.d.ts +0 -739
  620. package/node_modules/zod/v4/classic/schemas.js +0 -1157
  621. package/node_modules/zod/v4/core/api.cjs +0 -1222
  622. package/node_modules/zod/v4/core/api.d.cts +0 -304
  623. package/node_modules/zod/v4/core/api.d.ts +0 -304
  624. package/node_modules/zod/v4/core/api.js +0 -1082
  625. package/node_modules/zod/v4/core/checks.cjs +0 -601
  626. package/node_modules/zod/v4/core/checks.d.cts +0 -278
  627. package/node_modules/zod/v4/core/checks.d.ts +0 -278
  628. package/node_modules/zod/v4/core/checks.js +0 -575
  629. package/node_modules/zod/v4/core/core.cjs +0 -83
  630. package/node_modules/zod/v4/core/core.d.cts +0 -70
  631. package/node_modules/zod/v4/core/core.d.ts +0 -70
  632. package/node_modules/zod/v4/core/core.js +0 -76
  633. package/node_modules/zod/v4/core/doc.cjs +0 -39
  634. package/node_modules/zod/v4/core/doc.d.cts +0 -14
  635. package/node_modules/zod/v4/core/doc.d.ts +0 -14
  636. package/node_modules/zod/v4/core/doc.js +0 -35
  637. package/node_modules/zod/v4/core/errors.cjs +0 -213
  638. package/node_modules/zod/v4/core/errors.d.cts +0 -220
  639. package/node_modules/zod/v4/core/errors.d.ts +0 -220
  640. package/node_modules/zod/v4/core/errors.js +0 -182
  641. package/node_modules/zod/v4/core/index.cjs +0 -47
  642. package/node_modules/zod/v4/core/index.d.cts +0 -16
  643. package/node_modules/zod/v4/core/index.d.ts +0 -16
  644. package/node_modules/zod/v4/core/index.js +0 -16
  645. package/node_modules/zod/v4/core/json-schema-generator.cjs +0 -99
  646. package/node_modules/zod/v4/core/json-schema-generator.d.cts +0 -65
  647. package/node_modules/zod/v4/core/json-schema-generator.d.ts +0 -65
  648. package/node_modules/zod/v4/core/json-schema-generator.js +0 -95
  649. package/node_modules/zod/v4/core/json-schema-processors.cjs +0 -648
  650. package/node_modules/zod/v4/core/json-schema-processors.d.cts +0 -49
  651. package/node_modules/zod/v4/core/json-schema-processors.d.ts +0 -49
  652. package/node_modules/zod/v4/core/json-schema-processors.js +0 -605
  653. package/node_modules/zod/v4/core/json-schema.cjs +0 -2
  654. package/node_modules/zod/v4/core/json-schema.d.cts +0 -88
  655. package/node_modules/zod/v4/core/json-schema.d.ts +0 -88
  656. package/node_modules/zod/v4/core/json-schema.js +0 -1
  657. package/node_modules/zod/v4/core/package.json +0 -6
  658. package/node_modules/zod/v4/core/parse.cjs +0 -131
  659. package/node_modules/zod/v4/core/parse.d.cts +0 -49
  660. package/node_modules/zod/v4/core/parse.d.ts +0 -49
  661. package/node_modules/zod/v4/core/parse.js +0 -93
  662. package/node_modules/zod/v4/core/regexes.cjs +0 -166
  663. package/node_modules/zod/v4/core/regexes.d.cts +0 -79
  664. package/node_modules/zod/v4/core/regexes.d.ts +0 -79
  665. package/node_modules/zod/v4/core/regexes.js +0 -133
  666. package/node_modules/zod/v4/core/registries.cjs +0 -56
  667. package/node_modules/zod/v4/core/registries.d.cts +0 -35
  668. package/node_modules/zod/v4/core/registries.d.ts +0 -35
  669. package/node_modules/zod/v4/core/registries.js +0 -51
  670. package/node_modules/zod/v4/core/schemas.cjs +0 -2124
  671. package/node_modules/zod/v4/core/schemas.d.cts +0 -1146
  672. package/node_modules/zod/v4/core/schemas.d.ts +0 -1146
  673. package/node_modules/zod/v4/core/schemas.js +0 -2093
  674. package/node_modules/zod/v4/core/standard-schema.cjs +0 -2
  675. package/node_modules/zod/v4/core/standard-schema.d.cts +0 -126
  676. package/node_modules/zod/v4/core/standard-schema.d.ts +0 -126
  677. package/node_modules/zod/v4/core/standard-schema.js +0 -1
  678. package/node_modules/zod/v4/core/to-json-schema.cjs +0 -446
  679. package/node_modules/zod/v4/core/to-json-schema.d.cts +0 -114
  680. package/node_modules/zod/v4/core/to-json-schema.d.ts +0 -114
  681. package/node_modules/zod/v4/core/to-json-schema.js +0 -437
  682. package/node_modules/zod/v4/core/util.cjs +0 -710
  683. package/node_modules/zod/v4/core/util.d.cts +0 -199
  684. package/node_modules/zod/v4/core/util.d.ts +0 -199
  685. package/node_modules/zod/v4/core/util.js +0 -651
  686. package/node_modules/zod/v4/core/versions.cjs +0 -8
  687. package/node_modules/zod/v4/core/versions.d.cts +0 -5
  688. package/node_modules/zod/v4/core/versions.d.ts +0 -5
  689. package/node_modules/zod/v4/core/versions.js +0 -5
  690. package/node_modules/zod/v4/index.cjs +0 -22
  691. package/node_modules/zod/v4/index.d.cts +0 -3
  692. package/node_modules/zod/v4/index.d.ts +0 -3
  693. package/node_modules/zod/v4/index.js +0 -3
  694. package/node_modules/zod/v4/locales/ar.cjs +0 -133
  695. package/node_modules/zod/v4/locales/ar.d.cts +0 -5
  696. package/node_modules/zod/v4/locales/ar.d.ts +0 -4
  697. package/node_modules/zod/v4/locales/ar.js +0 -106
  698. package/node_modules/zod/v4/locales/az.cjs +0 -132
  699. package/node_modules/zod/v4/locales/az.d.cts +0 -5
  700. package/node_modules/zod/v4/locales/az.d.ts +0 -4
  701. package/node_modules/zod/v4/locales/az.js +0 -105
  702. package/node_modules/zod/v4/locales/be.cjs +0 -183
  703. package/node_modules/zod/v4/locales/be.d.cts +0 -5
  704. package/node_modules/zod/v4/locales/be.d.ts +0 -4
  705. package/node_modules/zod/v4/locales/be.js +0 -156
  706. package/node_modules/zod/v4/locales/bg.cjs +0 -147
  707. package/node_modules/zod/v4/locales/bg.d.cts +0 -5
  708. package/node_modules/zod/v4/locales/bg.d.ts +0 -4
  709. package/node_modules/zod/v4/locales/bg.js +0 -120
  710. package/node_modules/zod/v4/locales/ca.cjs +0 -134
  711. package/node_modules/zod/v4/locales/ca.d.cts +0 -5
  712. package/node_modules/zod/v4/locales/ca.d.ts +0 -4
  713. package/node_modules/zod/v4/locales/ca.js +0 -107
  714. package/node_modules/zod/v4/locales/cs.cjs +0 -138
  715. package/node_modules/zod/v4/locales/cs.d.cts +0 -5
  716. package/node_modules/zod/v4/locales/cs.d.ts +0 -4
  717. package/node_modules/zod/v4/locales/cs.js +0 -111
  718. package/node_modules/zod/v4/locales/da.cjs +0 -142
  719. package/node_modules/zod/v4/locales/da.d.cts +0 -5
  720. package/node_modules/zod/v4/locales/da.d.ts +0 -4
  721. package/node_modules/zod/v4/locales/da.js +0 -115
  722. package/node_modules/zod/v4/locales/de.cjs +0 -135
  723. package/node_modules/zod/v4/locales/de.d.cts +0 -5
  724. package/node_modules/zod/v4/locales/de.d.ts +0 -4
  725. package/node_modules/zod/v4/locales/de.js +0 -108
  726. package/node_modules/zod/v4/locales/en.cjs +0 -136
  727. package/node_modules/zod/v4/locales/en.d.cts +0 -5
  728. package/node_modules/zod/v4/locales/en.d.ts +0 -4
  729. package/node_modules/zod/v4/locales/en.js +0 -109
  730. package/node_modules/zod/v4/locales/eo.cjs +0 -136
  731. package/node_modules/zod/v4/locales/eo.d.cts +0 -5
  732. package/node_modules/zod/v4/locales/eo.d.ts +0 -4
  733. package/node_modules/zod/v4/locales/eo.js +0 -109
  734. package/node_modules/zod/v4/locales/es.cjs +0 -159
  735. package/node_modules/zod/v4/locales/es.d.cts +0 -5
  736. package/node_modules/zod/v4/locales/es.d.ts +0 -4
  737. package/node_modules/zod/v4/locales/es.js +0 -132
  738. package/node_modules/zod/v4/locales/fa.cjs +0 -141
  739. package/node_modules/zod/v4/locales/fa.d.cts +0 -5
  740. package/node_modules/zod/v4/locales/fa.d.ts +0 -4
  741. package/node_modules/zod/v4/locales/fa.js +0 -114
  742. package/node_modules/zod/v4/locales/fi.cjs +0 -139
  743. package/node_modules/zod/v4/locales/fi.d.cts +0 -5
  744. package/node_modules/zod/v4/locales/fi.d.ts +0 -4
  745. package/node_modules/zod/v4/locales/fi.js +0 -112
  746. package/node_modules/zod/v4/locales/fr-CA.cjs +0 -134
  747. package/node_modules/zod/v4/locales/fr-CA.d.cts +0 -5
  748. package/node_modules/zod/v4/locales/fr-CA.d.ts +0 -4
  749. package/node_modules/zod/v4/locales/fr-CA.js +0 -107
  750. package/node_modules/zod/v4/locales/fr.cjs +0 -135
  751. package/node_modules/zod/v4/locales/fr.d.cts +0 -5
  752. package/node_modules/zod/v4/locales/fr.d.ts +0 -4
  753. package/node_modules/zod/v4/locales/fr.js +0 -108
  754. package/node_modules/zod/v4/locales/he.cjs +0 -241
  755. package/node_modules/zod/v4/locales/he.d.cts +0 -5
  756. package/node_modules/zod/v4/locales/he.d.ts +0 -4
  757. package/node_modules/zod/v4/locales/he.js +0 -214
  758. package/node_modules/zod/v4/locales/hu.cjs +0 -135
  759. package/node_modules/zod/v4/locales/hu.d.cts +0 -5
  760. package/node_modules/zod/v4/locales/hu.d.ts +0 -4
  761. package/node_modules/zod/v4/locales/hu.js +0 -108
  762. package/node_modules/zod/v4/locales/hy.cjs +0 -174
  763. package/node_modules/zod/v4/locales/hy.d.cts +0 -5
  764. package/node_modules/zod/v4/locales/hy.d.ts +0 -4
  765. package/node_modules/zod/v4/locales/hy.js +0 -147
  766. package/node_modules/zod/v4/locales/id.cjs +0 -133
  767. package/node_modules/zod/v4/locales/id.d.cts +0 -5
  768. package/node_modules/zod/v4/locales/id.d.ts +0 -4
  769. package/node_modules/zod/v4/locales/id.js +0 -106
  770. package/node_modules/zod/v4/locales/index.cjs +0 -104
  771. package/node_modules/zod/v4/locales/index.d.cts +0 -49
  772. package/node_modules/zod/v4/locales/index.d.ts +0 -49
  773. package/node_modules/zod/v4/locales/index.js +0 -49
  774. package/node_modules/zod/v4/locales/is.cjs +0 -136
  775. package/node_modules/zod/v4/locales/is.d.cts +0 -5
  776. package/node_modules/zod/v4/locales/is.d.ts +0 -4
  777. package/node_modules/zod/v4/locales/is.js +0 -109
  778. package/node_modules/zod/v4/locales/it.cjs +0 -135
  779. package/node_modules/zod/v4/locales/it.d.cts +0 -5
  780. package/node_modules/zod/v4/locales/it.d.ts +0 -4
  781. package/node_modules/zod/v4/locales/it.js +0 -108
  782. package/node_modules/zod/v4/locales/ja.cjs +0 -134
  783. package/node_modules/zod/v4/locales/ja.d.cts +0 -5
  784. package/node_modules/zod/v4/locales/ja.d.ts +0 -4
  785. package/node_modules/zod/v4/locales/ja.js +0 -107
  786. package/node_modules/zod/v4/locales/ka.cjs +0 -139
  787. package/node_modules/zod/v4/locales/ka.d.cts +0 -5
  788. package/node_modules/zod/v4/locales/ka.d.ts +0 -4
  789. package/node_modules/zod/v4/locales/ka.js +0 -112
  790. package/node_modules/zod/v4/locales/kh.cjs +0 -12
  791. package/node_modules/zod/v4/locales/kh.d.cts +0 -5
  792. package/node_modules/zod/v4/locales/kh.d.ts +0 -5
  793. package/node_modules/zod/v4/locales/kh.js +0 -5
  794. package/node_modules/zod/v4/locales/km.cjs +0 -137
  795. package/node_modules/zod/v4/locales/km.d.cts +0 -5
  796. package/node_modules/zod/v4/locales/km.d.ts +0 -4
  797. package/node_modules/zod/v4/locales/km.js +0 -110
  798. package/node_modules/zod/v4/locales/ko.cjs +0 -138
  799. package/node_modules/zod/v4/locales/ko.d.cts +0 -5
  800. package/node_modules/zod/v4/locales/ko.d.ts +0 -4
  801. package/node_modules/zod/v4/locales/ko.js +0 -111
  802. package/node_modules/zod/v4/locales/lt.cjs +0 -230
  803. package/node_modules/zod/v4/locales/lt.d.cts +0 -5
  804. package/node_modules/zod/v4/locales/lt.d.ts +0 -4
  805. package/node_modules/zod/v4/locales/lt.js +0 -203
  806. package/node_modules/zod/v4/locales/mk.cjs +0 -136
  807. package/node_modules/zod/v4/locales/mk.d.cts +0 -5
  808. package/node_modules/zod/v4/locales/mk.d.ts +0 -4
  809. package/node_modules/zod/v4/locales/mk.js +0 -109
  810. package/node_modules/zod/v4/locales/ms.cjs +0 -134
  811. package/node_modules/zod/v4/locales/ms.d.cts +0 -5
  812. package/node_modules/zod/v4/locales/ms.d.ts +0 -4
  813. package/node_modules/zod/v4/locales/ms.js +0 -107
  814. package/node_modules/zod/v4/locales/nl.cjs +0 -137
  815. package/node_modules/zod/v4/locales/nl.d.cts +0 -5
  816. package/node_modules/zod/v4/locales/nl.d.ts +0 -4
  817. package/node_modules/zod/v4/locales/nl.js +0 -110
  818. package/node_modules/zod/v4/locales/no.cjs +0 -135
  819. package/node_modules/zod/v4/locales/no.d.cts +0 -5
  820. package/node_modules/zod/v4/locales/no.d.ts +0 -4
  821. package/node_modules/zod/v4/locales/no.js +0 -108
  822. package/node_modules/zod/v4/locales/ota.cjs +0 -136
  823. package/node_modules/zod/v4/locales/ota.d.cts +0 -5
  824. package/node_modules/zod/v4/locales/ota.d.ts +0 -4
  825. package/node_modules/zod/v4/locales/ota.js +0 -109
  826. package/node_modules/zod/v4/locales/package.json +0 -6
  827. package/node_modules/zod/v4/locales/pl.cjs +0 -136
  828. package/node_modules/zod/v4/locales/pl.d.cts +0 -5
  829. package/node_modules/zod/v4/locales/pl.d.ts +0 -4
  830. package/node_modules/zod/v4/locales/pl.js +0 -109
  831. package/node_modules/zod/v4/locales/ps.cjs +0 -141
  832. package/node_modules/zod/v4/locales/ps.d.cts +0 -5
  833. package/node_modules/zod/v4/locales/ps.d.ts +0 -4
  834. package/node_modules/zod/v4/locales/ps.js +0 -114
  835. package/node_modules/zod/v4/locales/pt.cjs +0 -135
  836. package/node_modules/zod/v4/locales/pt.d.cts +0 -5
  837. package/node_modules/zod/v4/locales/pt.d.ts +0 -4
  838. package/node_modules/zod/v4/locales/pt.js +0 -108
  839. package/node_modules/zod/v4/locales/ru.cjs +0 -183
  840. package/node_modules/zod/v4/locales/ru.d.cts +0 -5
  841. package/node_modules/zod/v4/locales/ru.d.ts +0 -4
  842. package/node_modules/zod/v4/locales/ru.js +0 -156
  843. package/node_modules/zod/v4/locales/sl.cjs +0 -136
  844. package/node_modules/zod/v4/locales/sl.d.cts +0 -5
  845. package/node_modules/zod/v4/locales/sl.d.ts +0 -4
  846. package/node_modules/zod/v4/locales/sl.js +0 -109
  847. package/node_modules/zod/v4/locales/sv.cjs +0 -137
  848. package/node_modules/zod/v4/locales/sv.d.cts +0 -5
  849. package/node_modules/zod/v4/locales/sv.d.ts +0 -4
  850. package/node_modules/zod/v4/locales/sv.js +0 -110
  851. package/node_modules/zod/v4/locales/ta.cjs +0 -137
  852. package/node_modules/zod/v4/locales/ta.d.cts +0 -5
  853. package/node_modules/zod/v4/locales/ta.d.ts +0 -4
  854. package/node_modules/zod/v4/locales/ta.js +0 -110
  855. package/node_modules/zod/v4/locales/th.cjs +0 -137
  856. package/node_modules/zod/v4/locales/th.d.cts +0 -5
  857. package/node_modules/zod/v4/locales/th.d.ts +0 -4
  858. package/node_modules/zod/v4/locales/th.js +0 -110
  859. package/node_modules/zod/v4/locales/tr.cjs +0 -132
  860. package/node_modules/zod/v4/locales/tr.d.cts +0 -5
  861. package/node_modules/zod/v4/locales/tr.d.ts +0 -4
  862. package/node_modules/zod/v4/locales/tr.js +0 -105
  863. package/node_modules/zod/v4/locales/ua.cjs +0 -12
  864. package/node_modules/zod/v4/locales/ua.d.cts +0 -5
  865. package/node_modules/zod/v4/locales/ua.d.ts +0 -5
  866. package/node_modules/zod/v4/locales/ua.js +0 -5
  867. package/node_modules/zod/v4/locales/uk.cjs +0 -135
  868. package/node_modules/zod/v4/locales/uk.d.cts +0 -5
  869. package/node_modules/zod/v4/locales/uk.d.ts +0 -4
  870. package/node_modules/zod/v4/locales/uk.js +0 -108
  871. package/node_modules/zod/v4/locales/ur.cjs +0 -137
  872. package/node_modules/zod/v4/locales/ur.d.cts +0 -5
  873. package/node_modules/zod/v4/locales/ur.d.ts +0 -4
  874. package/node_modules/zod/v4/locales/ur.js +0 -110
  875. package/node_modules/zod/v4/locales/uz.cjs +0 -136
  876. package/node_modules/zod/v4/locales/uz.d.cts +0 -5
  877. package/node_modules/zod/v4/locales/uz.d.ts +0 -4
  878. package/node_modules/zod/v4/locales/uz.js +0 -109
  879. package/node_modules/zod/v4/locales/vi.cjs +0 -135
  880. package/node_modules/zod/v4/locales/vi.d.cts +0 -5
  881. package/node_modules/zod/v4/locales/vi.d.ts +0 -4
  882. package/node_modules/zod/v4/locales/vi.js +0 -108
  883. package/node_modules/zod/v4/locales/yo.cjs +0 -134
  884. package/node_modules/zod/v4/locales/yo.d.cts +0 -5
  885. package/node_modules/zod/v4/locales/yo.d.ts +0 -4
  886. package/node_modules/zod/v4/locales/yo.js +0 -107
  887. package/node_modules/zod/v4/locales/zh-CN.cjs +0 -136
  888. package/node_modules/zod/v4/locales/zh-CN.d.cts +0 -5
  889. package/node_modules/zod/v4/locales/zh-CN.d.ts +0 -4
  890. package/node_modules/zod/v4/locales/zh-CN.js +0 -109
  891. package/node_modules/zod/v4/locales/zh-TW.cjs +0 -134
  892. package/node_modules/zod/v4/locales/zh-TW.d.cts +0 -5
  893. package/node_modules/zod/v4/locales/zh-TW.d.ts +0 -4
  894. package/node_modules/zod/v4/locales/zh-TW.js +0 -107
  895. package/node_modules/zod/v4/mini/checks.cjs +0 -34
  896. package/node_modules/zod/v4/mini/checks.d.cts +0 -1
  897. package/node_modules/zod/v4/mini/checks.d.ts +0 -1
  898. package/node_modules/zod/v4/mini/checks.js +0 -1
  899. package/node_modules/zod/v4/mini/coerce.cjs +0 -52
  900. package/node_modules/zod/v4/mini/coerce.d.cts +0 -7
  901. package/node_modules/zod/v4/mini/coerce.d.ts +0 -7
  902. package/node_modules/zod/v4/mini/coerce.js +0 -22
  903. package/node_modules/zod/v4/mini/external.cjs +0 -63
  904. package/node_modules/zod/v4/mini/external.d.cts +0 -12
  905. package/node_modules/zod/v4/mini/external.d.ts +0 -12
  906. package/node_modules/zod/v4/mini/external.js +0 -14
  907. package/node_modules/zod/v4/mini/index.cjs +0 -32
  908. package/node_modules/zod/v4/mini/index.d.cts +0 -3
  909. package/node_modules/zod/v4/mini/index.d.ts +0 -3
  910. package/node_modules/zod/v4/mini/index.js +0 -3
  911. package/node_modules/zod/v4/mini/iso.cjs +0 -64
  912. package/node_modules/zod/v4/mini/iso.d.cts +0 -22
  913. package/node_modules/zod/v4/mini/iso.d.ts +0 -22
  914. package/node_modules/zod/v4/mini/iso.js +0 -34
  915. package/node_modules/zod/v4/mini/package.json +0 -6
  916. package/node_modules/zod/v4/mini/parse.cjs +0 -16
  917. package/node_modules/zod/v4/mini/parse.d.cts +0 -1
  918. package/node_modules/zod/v4/mini/parse.d.ts +0 -1
  919. package/node_modules/zod/v4/mini/parse.js +0 -1
  920. package/node_modules/zod/v4/mini/schemas.cjs +0 -1046
  921. package/node_modules/zod/v4/mini/schemas.d.cts +0 -427
  922. package/node_modules/zod/v4/mini/schemas.d.ts +0 -427
  923. package/node_modules/zod/v4/mini/schemas.js +0 -925
  924. package/node_modules/zod/v4/package.json +0 -6
  925. package/node_modules/zod/v4-mini/index.cjs +0 -32
  926. package/node_modules/zod/v4-mini/index.d.cts +0 -3
  927. package/node_modules/zod/v4-mini/index.d.ts +0 -3
  928. package/node_modules/zod/v4-mini/index.js +0 -3
  929. package/node_modules/zod/v4-mini/package.json +0 -6
  930. package/plugin/dist/index.d.ts +0 -179
  931. package/plugin/dist/index.d.ts.map +0 -1
  932. package/plugin/dist/index.js +0 -3209
  933. package/plugin/dist/index.js.map +0 -1
@@ -1,1343 +0,0 @@
1
- /**
2
- * hypermem Library Schema — Fleet-Wide Structured Knowledge
3
- *
4
- * Single database: ~/.openclaw/hypermem/library.db
5
- * The "crown jewel" — durable, backed up, low-write-frequency.
6
- *
7
- * Collections:
8
- * 1. Library entries (versioned docs, specs, reference material)
9
- * 2. Facts (agent-learned truths)
10
- * 3. Preferences (behavioral patterns)
11
- * 4. Knowledge (structured domain knowledge, supersedable)
12
- * 5. Episodes (significant events)
13
- * 6. Fleet registry (agents, orgs)
14
- * 7. System registry (server state, config)
15
- * 8. Session registry (lifecycle tracking)
16
- * 9. Work items (fleet kanban)
17
- * 10. Topics (cross-session thread tracking)
18
- */
19
- import { DatabaseSync } from 'node:sqlite';
20
- import { mkdirSync, renameSync, existsSync } from 'node:fs';
21
- import { join as pathJoin, dirname } from 'node:path';
22
- export const LIBRARY_SCHEMA_VERSION = 19;
23
- function nowIso() {
24
- return new Date().toISOString();
25
- }
26
- // ── V1: Original library + subscriptions + changelog ──────────
27
- function applyV1Schema(db) {
28
- db.exec(`
29
- CREATE TABLE IF NOT EXISTS library_entries (
30
- id INTEGER PRIMARY KEY AUTOINCREMENT,
31
- domain TEXT NOT NULL,
32
- key TEXT NOT NULL,
33
- content TEXT NOT NULL,
34
- content_hash TEXT,
35
- version INTEGER DEFAULT 1,
36
- source TEXT,
37
- agent_id TEXT,
38
- visibility TEXT DEFAULT 'fleet',
39
- tags TEXT,
40
- created_at TEXT NOT NULL,
41
- updated_at TEXT NOT NULL,
42
- superseded_at TEXT,
43
- superseded_by INTEGER,
44
- UNIQUE(domain, key, version)
45
- )
46
- `);
47
- db.exec('CREATE INDEX IF NOT EXISTS idx_lib_entries_domain ON library_entries(domain, key)');
48
- db.exec('CREATE INDEX IF NOT EXISTS idx_lib_entries_active ON library_entries(domain, key, superseded_by)');
49
- db.exec(`
50
- CREATE TABLE IF NOT EXISTS library_changelog (
51
- id INTEGER PRIMARY KEY AUTOINCREMENT,
52
- library_entry_id INTEGER NOT NULL REFERENCES library_entries(id),
53
- change_type TEXT NOT NULL,
54
- changed_by TEXT NOT NULL,
55
- diff_summary TEXT,
56
- version INTEGER NOT NULL,
57
- created_at TEXT NOT NULL
58
- )
59
- `);
60
- db.exec('CREATE INDEX IF NOT EXISTS idx_lib_changelog_item ON library_changelog(library_entry_id, created_at DESC)');
61
- db.exec(`
62
- CREATE TABLE IF NOT EXISTS library_subscriptions (
63
- id INTEGER PRIMARY KEY AUTOINCREMENT,
64
- agent_id TEXT NOT NULL,
65
- domain TEXT,
66
- item_type TEXT,
67
- created_at TEXT NOT NULL,
68
- UNIQUE(agent_id, domain, item_type)
69
- )
70
- `);
71
- // FTS on library content
72
- db.exec(`
73
- CREATE VIRTUAL TABLE IF NOT EXISTS library_fts USING fts5(
74
- key,
75
- content,
76
- content='library_entries',
77
- content_rowid='id'
78
- )
79
- `);
80
- db.exec(`
81
- CREATE TRIGGER IF NOT EXISTS lib_fts_ai AFTER INSERT ON library_entries BEGIN
82
- INSERT INTO library_fts(rowid, key, content) VALUES (new.id, new.key, new.content);
83
- END
84
- `);
85
- db.exec(`
86
- CREATE TRIGGER IF NOT EXISTS lib_fts_ad AFTER DELETE ON library_entries BEGIN
87
- INSERT INTO library_fts(library_fts, rowid, key, content) VALUES('delete', old.id, old.key, old.content);
88
- END
89
- `);
90
- db.exec(`
91
- CREATE TRIGGER IF NOT EXISTS lib_fts_au AFTER UPDATE ON library_entries BEGIN
92
- INSERT INTO library_fts(library_fts, rowid, key, content) VALUES('delete', old.id, old.key, old.content);
93
- INSERT INTO library_fts(rowid, key, content) VALUES (new.id, new.key, new.content);
94
- END
95
- `);
96
- }
97
- // ── V2: Session registry ──────────────────────────────────────
98
- function applyV2SessionRegistry(db) {
99
- db.exec(`
100
- CREATE TABLE IF NOT EXISTS session_registry (
101
- id TEXT PRIMARY KEY,
102
- agent_id TEXT NOT NULL,
103
- channel TEXT,
104
- channel_type TEXT,
105
- started_at TEXT NOT NULL,
106
- ended_at TEXT,
107
- status TEXT DEFAULT 'active',
108
- summary TEXT,
109
- decisions_made INTEGER DEFAULT 0,
110
- facts_extracted INTEGER DEFAULT 0,
111
- messages_count INTEGER DEFAULT 0
112
- )
113
- `);
114
- db.exec('CREATE INDEX IF NOT EXISTS idx_session_agent ON session_registry(agent_id, status, started_at DESC)');
115
- db.exec('CREATE INDEX IF NOT EXISTS idx_session_status ON session_registry(status, started_at DESC)');
116
- db.exec(`
117
- CREATE TABLE IF NOT EXISTS session_events (
118
- id INTEGER PRIMARY KEY AUTOINCREMENT,
119
- session_id TEXT NOT NULL REFERENCES session_registry(id),
120
- event_type TEXT NOT NULL,
121
- timestamp TEXT NOT NULL,
122
- payload TEXT
123
- )
124
- `);
125
- db.exec('CREATE INDEX IF NOT EXISTS idx_session_events ON session_events(session_id, timestamp DESC)');
126
- db.exec('CREATE INDEX IF NOT EXISTS idx_session_events_type ON session_events(event_type, timestamp DESC)');
127
- db.exec(`
128
- CREATE VIRTUAL TABLE IF NOT EXISTS session_fts USING fts5(
129
- summary,
130
- content='session_registry',
131
- content_rowid='rowid'
132
- )
133
- `);
134
- }
135
- // ── V3: Centralized collections ───────────────────────────────
136
- // Facts, preferences, knowledge, episodes, topics move here from per-agent DBs.
137
- // Fleet registry, system registry, work items are new.
138
- function applyV3Collections(db) {
139
- // ── Facts (agent-learned truths) ──
140
- db.exec(`
141
- CREATE TABLE IF NOT EXISTS facts (
142
- id INTEGER PRIMARY KEY AUTOINCREMENT,
143
- agent_id TEXT NOT NULL,
144
- scope TEXT NOT NULL DEFAULT 'agent',
145
- domain TEXT,
146
- content TEXT NOT NULL,
147
- confidence REAL DEFAULT 1.0,
148
- visibility TEXT NOT NULL DEFAULT 'private',
149
- source_type TEXT DEFAULT 'conversation',
150
- source_session_key TEXT,
151
- source_ref TEXT,
152
- created_at TEXT NOT NULL,
153
- updated_at TEXT NOT NULL,
154
- expires_at TEXT,
155
- superseded_by INTEGER,
156
- decay_score REAL DEFAULT 0.0,
157
- valid_from TEXT,
158
- invalid_at TEXT
159
- )
160
- `);
161
- db.exec('CREATE INDEX IF NOT EXISTS idx_facts_agent ON facts(agent_id, scope, domain)');
162
- db.exec('CREATE INDEX IF NOT EXISTS idx_facts_visibility ON facts(visibility, agent_id)');
163
- db.exec('CREATE INDEX IF NOT EXISTS idx_facts_active ON facts(agent_id, superseded_by, decay_score, confidence DESC)');
164
- db.exec('CREATE INDEX IF NOT EXISTS idx_facts_temporal_validity ON facts(agent_id, valid_from, invalid_at)');
165
- db.exec(`
166
- CREATE VIRTUAL TABLE IF NOT EXISTS facts_fts USING fts5(
167
- content,
168
- domain,
169
- content='facts',
170
- content_rowid='id'
171
- )
172
- `);
173
- db.exec(`
174
- CREATE TRIGGER IF NOT EXISTS facts_fts_ai AFTER INSERT ON facts BEGIN
175
- INSERT INTO facts_fts(rowid, content, domain) VALUES (new.id, new.content, new.domain);
176
- END
177
- `);
178
- db.exec(`
179
- CREATE TRIGGER IF NOT EXISTS facts_fts_ad AFTER DELETE ON facts BEGIN
180
- INSERT INTO facts_fts(facts_fts, rowid, content, domain) VALUES('delete', old.id, old.content, old.domain);
181
- END
182
- `);
183
- db.exec(`
184
- CREATE TRIGGER IF NOT EXISTS facts_fts_au AFTER UPDATE ON facts BEGIN
185
- INSERT INTO facts_fts(facts_fts, rowid, content, domain) VALUES('delete', old.id, old.content, old.domain);
186
- INSERT INTO facts_fts(rowid, content, domain) VALUES (new.id, new.content, new.domain);
187
- END
188
- `);
189
- // ── Preferences (behavioral patterns) ──
190
- db.exec(`
191
- CREATE TABLE IF NOT EXISTS preferences (
192
- id INTEGER PRIMARY KEY AUTOINCREMENT,
193
- subject TEXT NOT NULL,
194
- domain TEXT NOT NULL DEFAULT 'general',
195
- key TEXT NOT NULL,
196
- value TEXT NOT NULL,
197
- agent_id TEXT NOT NULL,
198
- confidence REAL DEFAULT 1.0,
199
- visibility TEXT NOT NULL DEFAULT 'fleet',
200
- source_type TEXT DEFAULT 'observation',
201
- source_ref TEXT,
202
- created_at TEXT NOT NULL,
203
- updated_at TEXT NOT NULL,
204
- UNIQUE(subject, domain, key)
205
- )
206
- `);
207
- db.exec('CREATE INDEX IF NOT EXISTS idx_prefs_subject ON preferences(subject, domain)');
208
- db.exec('CREATE INDEX IF NOT EXISTS idx_prefs_agent ON preferences(agent_id)');
209
- // ── Knowledge (structured domain knowledge, supersedable) ──
210
- db.exec(`
211
- CREATE TABLE IF NOT EXISTS knowledge (
212
- id INTEGER PRIMARY KEY AUTOINCREMENT,
213
- agent_id TEXT NOT NULL,
214
- domain TEXT NOT NULL,
215
- key TEXT NOT NULL,
216
- content TEXT NOT NULL,
217
- confidence REAL DEFAULT 1.0,
218
- visibility TEXT NOT NULL DEFAULT 'private',
219
- source_type TEXT NOT NULL DEFAULT 'manual',
220
- source_ref TEXT,
221
- created_at TEXT NOT NULL,
222
- updated_at TEXT NOT NULL,
223
- expires_at TEXT,
224
- superseded_by INTEGER,
225
- UNIQUE(agent_id, domain, key)
226
- )
227
- `);
228
- db.exec('CREATE INDEX IF NOT EXISTS idx_knowledge_agent ON knowledge(agent_id, domain)');
229
- db.exec('CREATE INDEX IF NOT EXISTS idx_knowledge_visibility ON knowledge(visibility, agent_id)');
230
- db.exec(`
231
- CREATE VIRTUAL TABLE IF NOT EXISTS knowledge_fts USING fts5(
232
- key,
233
- content,
234
- domain,
235
- content='knowledge',
236
- content_rowid='id'
237
- )
238
- `);
239
- db.exec(`
240
- CREATE TRIGGER IF NOT EXISTS knowledge_fts_ai AFTER INSERT ON knowledge BEGIN
241
- INSERT INTO knowledge_fts(rowid, key, content, domain) VALUES (new.id, new.key, new.content, new.domain);
242
- END
243
- `);
244
- db.exec(`
245
- CREATE TRIGGER IF NOT EXISTS knowledge_fts_ad AFTER DELETE ON knowledge BEGIN
246
- INSERT INTO knowledge_fts(knowledge_fts, rowid, key, content, domain) VALUES('delete', old.id, old.key, old.content, old.domain);
247
- END
248
- `);
249
- db.exec(`
250
- CREATE TRIGGER IF NOT EXISTS knowledge_fts_au AFTER UPDATE ON knowledge BEGIN
251
- INSERT INTO knowledge_fts(knowledge_fts, rowid, key, content, domain) VALUES('delete', old.id, old.key, old.content, old.domain);
252
- INSERT INTO knowledge_fts(rowid, key, content, domain) VALUES (new.id, new.key, new.content, new.domain);
253
- END
254
- `);
255
- // ── Knowledge relationships (DAG edges) ──
256
- db.exec(`
257
- CREATE TABLE IF NOT EXISTS knowledge_links (
258
- id INTEGER PRIMARY KEY AUTOINCREMENT,
259
- from_type TEXT NOT NULL,
260
- from_id INTEGER NOT NULL,
261
- to_type TEXT NOT NULL,
262
- to_id INTEGER NOT NULL,
263
- link_type TEXT NOT NULL,
264
- created_at TEXT NOT NULL,
265
- UNIQUE(from_type, from_id, to_type, to_id, link_type)
266
- )
267
- `);
268
- db.exec('CREATE INDEX IF NOT EXISTS idx_klinks_from ON knowledge_links(from_type, from_id)');
269
- db.exec('CREATE INDEX IF NOT EXISTS idx_klinks_to ON knowledge_links(to_type, to_id)');
270
- // ── Episodes (significant events) ──
271
- db.exec(`
272
- CREATE TABLE IF NOT EXISTS episodes (
273
- id INTEGER PRIMARY KEY AUTOINCREMENT,
274
- agent_id TEXT NOT NULL,
275
- event_type TEXT NOT NULL,
276
- summary TEXT NOT NULL,
277
- significance REAL NOT NULL DEFAULT 0.5,
278
- visibility TEXT NOT NULL DEFAULT 'org',
279
- participants TEXT,
280
- session_key TEXT,
281
- created_at TEXT NOT NULL,
282
- decay_score REAL DEFAULT 0.0
283
- )
284
- `);
285
- db.exec('CREATE INDEX IF NOT EXISTS idx_episodes_agent ON episodes(agent_id, significance DESC, created_at DESC)');
286
- db.exec('CREATE INDEX IF NOT EXISTS idx_episodes_visibility ON episodes(visibility, agent_id)');
287
- db.exec(`
288
- CREATE VIRTUAL TABLE IF NOT EXISTS episodes_fts USING fts5(
289
- summary,
290
- event_type,
291
- content='episodes',
292
- content_rowid='id'
293
- )
294
- `);
295
- db.exec(`
296
- CREATE TRIGGER IF NOT EXISTS episodes_fts_ai AFTER INSERT ON episodes BEGIN
297
- INSERT INTO episodes_fts(rowid, summary, event_type) VALUES (new.id, new.summary, new.event_type);
298
- END
299
- `);
300
- db.exec(`
301
- CREATE TRIGGER IF NOT EXISTS episodes_fts_ad AFTER DELETE ON episodes BEGIN
302
- INSERT INTO episodes_fts(episodes_fts, rowid, summary, event_type) VALUES('delete', old.id, old.summary, old.event_type);
303
- END
304
- `);
305
- db.exec(`
306
- CREATE TRIGGER IF NOT EXISTS episodes_fts_au AFTER UPDATE ON episodes BEGIN
307
- INSERT INTO episodes_fts(episodes_fts, rowid, summary, event_type) VALUES('delete', old.id, old.summary, old.event_type);
308
- INSERT INTO episodes_fts(rowid, summary, event_type) VALUES (new.id, new.summary, new.event_type);
309
- END
310
- `);
311
- // ── Topics (cross-session thread tracking) ──
312
- db.exec(`
313
- CREATE TABLE IF NOT EXISTS topics (
314
- id INTEGER PRIMARY KEY AUTOINCREMENT,
315
- agent_id TEXT NOT NULL,
316
- name TEXT NOT NULL,
317
- description TEXT,
318
- status TEXT DEFAULT 'active',
319
- visibility TEXT NOT NULL DEFAULT 'org',
320
- last_session_key TEXT,
321
- message_count INTEGER DEFAULT 0,
322
- created_at TEXT NOT NULL,
323
- updated_at TEXT NOT NULL
324
- )
325
- `);
326
- db.exec('CREATE INDEX IF NOT EXISTS idx_topics_agent ON topics(agent_id, status, updated_at DESC)');
327
- db.exec('CREATE UNIQUE INDEX IF NOT EXISTS idx_topics_dedup ON topics(agent_id, lower(name))');
328
- // ── Fleet registry ──
329
- db.exec(`
330
- CREATE TABLE IF NOT EXISTS fleet_agents (
331
- id TEXT PRIMARY KEY,
332
- display_name TEXT NOT NULL,
333
- tier TEXT NOT NULL DEFAULT 'unknown',
334
- org_id TEXT,
335
- reports_to TEXT,
336
- domains TEXT,
337
- session_keys TEXT,
338
- status TEXT DEFAULT 'active',
339
- last_seen TEXT,
340
- created_at TEXT NOT NULL,
341
- updated_at TEXT NOT NULL,
342
- metadata TEXT
343
- )
344
- `);
345
- db.exec('CREATE INDEX IF NOT EXISTS idx_fleet_agents_tier ON fleet_agents(tier, status)');
346
- db.exec('CREATE INDEX IF NOT EXISTS idx_fleet_agents_org ON fleet_agents(org_id)');
347
- db.exec(`
348
- CREATE TABLE IF NOT EXISTS fleet_orgs (
349
- id TEXT PRIMARY KEY,
350
- name TEXT NOT NULL,
351
- lead_agent_id TEXT REFERENCES fleet_agents(id),
352
- mission TEXT,
353
- created_at TEXT NOT NULL
354
- )
355
- `);
356
- // ── System registry ──
357
- db.exec(`
358
- CREATE TABLE IF NOT EXISTS system_state (
359
- id INTEGER PRIMARY KEY AUTOINCREMENT,
360
- category TEXT NOT NULL,
361
- key TEXT NOT NULL,
362
- value TEXT NOT NULL,
363
- updated_at TEXT NOT NULL,
364
- updated_by TEXT,
365
- ttl TEXT,
366
- UNIQUE(category, key)
367
- )
368
- `);
369
- db.exec('CREATE INDEX IF NOT EXISTS idx_system_state_cat ON system_state(category)');
370
- db.exec(`
371
- CREATE TABLE IF NOT EXISTS system_events (
372
- id INTEGER PRIMARY KEY AUTOINCREMENT,
373
- category TEXT NOT NULL,
374
- key TEXT NOT NULL,
375
- event_type TEXT NOT NULL,
376
- old_value TEXT,
377
- new_value TEXT,
378
- agent_id TEXT,
379
- created_at TEXT NOT NULL,
380
- metadata TEXT
381
- )
382
- `);
383
- db.exec('CREATE INDEX IF NOT EXISTS idx_system_events ON system_events(category, key, created_at DESC)');
384
- // ── Work items (fleet kanban) ──
385
- db.exec(`
386
- CREATE TABLE IF NOT EXISTS work_items (
387
- id TEXT PRIMARY KEY,
388
- title TEXT NOT NULL,
389
- description TEXT,
390
- status TEXT NOT NULL DEFAULT 'incoming',
391
- priority INTEGER NOT NULL DEFAULT 3,
392
- agent_id TEXT,
393
- created_by TEXT NOT NULL,
394
- domain TEXT,
395
- parent_id TEXT,
396
- blocked_by TEXT,
397
- session_key TEXT,
398
- created_at TEXT NOT NULL,
399
- updated_at TEXT NOT NULL,
400
- started_at TEXT,
401
- completed_at TEXT,
402
- due_at TEXT,
403
- metadata TEXT
404
- )
405
- `);
406
- db.exec('CREATE INDEX IF NOT EXISTS idx_work_status ON work_items(status, priority)');
407
- db.exec('CREATE INDEX IF NOT EXISTS idx_work_agent ON work_items(agent_id, status)');
408
- db.exec('CREATE INDEX IF NOT EXISTS idx_work_domain ON work_items(domain, status)');
409
- db.exec('CREATE INDEX IF NOT EXISTS idx_work_parent ON work_items(parent_id)');
410
- db.exec(`
411
- CREATE TABLE IF NOT EXISTS work_events (
412
- id INTEGER PRIMARY KEY AUTOINCREMENT,
413
- work_item_id TEXT NOT NULL REFERENCES work_items(id),
414
- event_type TEXT NOT NULL,
415
- old_status TEXT,
416
- new_status TEXT,
417
- agent_id TEXT,
418
- comment TEXT,
419
- created_at TEXT NOT NULL
420
- )
421
- `);
422
- db.exec('CREATE INDEX IF NOT EXISTS idx_work_events ON work_events(work_item_id, created_at DESC)');
423
- db.exec(`
424
- CREATE VIRTUAL TABLE IF NOT EXISTS work_items_fts USING fts5(
425
- title,
426
- description,
427
- content='work_items',
428
- content_rowid='rowid'
429
- )
430
- `);
431
- db.exec(`
432
- CREATE TRIGGER IF NOT EXISTS work_fts_ai AFTER INSERT ON work_items BEGIN
433
- INSERT INTO work_items_fts(rowid, title, description) VALUES (new.rowid, new.title, new.description);
434
- END
435
- `);
436
- db.exec(`
437
- CREATE TRIGGER IF NOT EXISTS work_fts_ad AFTER DELETE ON work_items BEGIN
438
- INSERT INTO work_items_fts(work_items_fts, rowid, title, description) VALUES('delete', old.rowid, old.title, old.description);
439
- END
440
- `);
441
- db.exec(`
442
- CREATE TRIGGER IF NOT EXISTS work_fts_au AFTER UPDATE ON work_items BEGIN
443
- INSERT INTO work_items_fts(work_items_fts, rowid, title, description) VALUES('delete', old.rowid, old.title, old.description);
444
- INSERT INTO work_items_fts(rowid, title, description) VALUES (new.rowid, new.title, new.description);
445
- END
446
- `);
447
- }
448
- // ── V4: Agent capabilities ────────────────────────────────────
449
- // Skills, tools, MCP servers registered per agent for fleet-wide discoverability.
450
- function applyV4Capabilities(db) {
451
- // Add capabilities column to fleet_agents
452
- db.exec('ALTER TABLE fleet_agents ADD COLUMN capabilities TEXT');
453
- // Structured capabilities table for queryable skill/tool lookups
454
- db.exec(`
455
- CREATE TABLE IF NOT EXISTS agent_capabilities (
456
- id INTEGER PRIMARY KEY AUTOINCREMENT,
457
- agent_id TEXT NOT NULL REFERENCES fleet_agents(id),
458
- cap_type TEXT NOT NULL,
459
- name TEXT NOT NULL,
460
- version TEXT,
461
- source TEXT,
462
- config TEXT,
463
- status TEXT DEFAULT 'active',
464
- last_verified TEXT,
465
- created_at TEXT NOT NULL,
466
- updated_at TEXT NOT NULL,
467
- UNIQUE(agent_id, cap_type, name)
468
- )
469
- `);
470
- db.exec('CREATE INDEX IF NOT EXISTS idx_agent_caps_agent ON agent_capabilities(agent_id, cap_type)');
471
- db.exec('CREATE INDEX IF NOT EXISTS idx_agent_caps_type ON agent_capabilities(cap_type, name)');
472
- db.exec('CREATE INDEX IF NOT EXISTS idx_agent_caps_status ON agent_capabilities(status, cap_type)');
473
- }
474
- // ── V5: Agent desired state ───────────────────────────────────
475
- // Stores intended configuration for each agent: model, thinking, provider, etc.
476
- // Enables drift detection (desired vs actual) and fleet-wide config visibility.
477
- function applyV5DesiredState(db) {
478
- db.exec(`
479
- CREATE TABLE IF NOT EXISTS agent_desired_state (
480
- id INTEGER PRIMARY KEY AUTOINCREMENT,
481
- agent_id TEXT NOT NULL,
482
- config_key TEXT NOT NULL,
483
- desired_value TEXT NOT NULL,
484
- actual_value TEXT,
485
- source TEXT NOT NULL DEFAULT 'operator',
486
- set_by TEXT,
487
- drift_status TEXT DEFAULT 'unknown',
488
- last_checked TEXT,
489
- created_at TEXT NOT NULL,
490
- updated_at TEXT NOT NULL,
491
- notes TEXT,
492
- UNIQUE(agent_id, config_key)
493
- )
494
- `);
495
- db.exec('CREATE INDEX IF NOT EXISTS idx_desired_agent ON agent_desired_state(agent_id)');
496
- db.exec('CREATE INDEX IF NOT EXISTS idx_desired_drift ON agent_desired_state(drift_status)');
497
- db.exec('CREATE INDEX IF NOT EXISTS idx_desired_key ON agent_desired_state(config_key)');
498
- // Change log for desired state modifications
499
- db.exec(`
500
- CREATE TABLE IF NOT EXISTS agent_config_events (
501
- id INTEGER PRIMARY KEY AUTOINCREMENT,
502
- agent_id TEXT NOT NULL,
503
- config_key TEXT NOT NULL,
504
- event_type TEXT NOT NULL,
505
- old_value TEXT,
506
- new_value TEXT,
507
- changed_by TEXT,
508
- created_at TEXT NOT NULL
509
- )
510
- `);
511
- db.exec('CREATE INDEX IF NOT EXISTS idx_config_events_agent ON agent_config_events(agent_id, config_key, created_at DESC)');
512
- }
513
- // ── V6: Document chunks ───────────────────────────────────────
514
- // Stores chunked ACA workspace documents for semantic retrieval.
515
- // Enables ACA offload: governance docs, identity files, memory → demand-loaded.
516
- //
517
- // Key design:
518
- // - Each chunk has a source_hash — atomic re-indexing via hash-based swap
519
- // - collection path mirrors ACA_COLLECTIONS (governance/policy, etc.)
520
- // - scope: shared-fleet | per-tier | per-agent
521
- // - FTS5 virtual table for keyword fallback when no embedder configured
522
- function applyV6DocChunks(db) {
523
- db.exec(`
524
- CREATE TABLE IF NOT EXISTS doc_chunks (
525
- id TEXT PRIMARY KEY,
526
- collection TEXT NOT NULL,
527
- section_path TEXT NOT NULL,
528
- depth INTEGER NOT NULL DEFAULT 2,
529
- content TEXT NOT NULL,
530
- token_estimate INTEGER NOT NULL DEFAULT 0,
531
- source_hash TEXT NOT NULL,
532
- source_path TEXT NOT NULL,
533
- scope TEXT NOT NULL DEFAULT 'shared-fleet',
534
- tier TEXT,
535
- agent_id TEXT,
536
- parent_path TEXT,
537
- created_at TEXT NOT NULL,
538
- updated_at TEXT NOT NULL
539
- )
540
- `);
541
- db.exec('CREATE INDEX IF NOT EXISTS idx_doc_chunks_collection ON doc_chunks(collection, scope)');
542
- db.exec('CREATE INDEX IF NOT EXISTS idx_doc_chunks_agent ON doc_chunks(agent_id, collection)');
543
- db.exec('CREATE INDEX IF NOT EXISTS idx_doc_chunks_hash ON doc_chunks(source_hash)');
544
- db.exec('CREATE INDEX IF NOT EXISTS idx_doc_chunks_source ON doc_chunks(source_path)');
545
- // Source file tracking: one row per indexed file
546
- // Used to detect when a file has changed and needs re-indexing
547
- db.exec(`
548
- CREATE TABLE IF NOT EXISTS doc_sources (
549
- source_path TEXT NOT NULL,
550
- collection TEXT NOT NULL,
551
- scope TEXT NOT NULL DEFAULT 'shared-fleet',
552
- agent_id TEXT,
553
- source_hash TEXT NOT NULL,
554
- chunk_count INTEGER NOT NULL DEFAULT 0,
555
- indexed_at TEXT NOT NULL,
556
- PRIMARY KEY (source_path, collection)
557
- )
558
- `);
559
- db.exec('CREATE INDEX IF NOT EXISTS idx_doc_sources_collection ON doc_sources(collection)');
560
- db.exec('CREATE INDEX IF NOT EXISTS idx_doc_sources_agent ON doc_sources(agent_id)');
561
- // FTS5 for keyword-based fallback retrieval
562
- db.exec(`
563
- CREATE VIRTUAL TABLE IF NOT EXISTS doc_chunks_fts USING fts5(
564
- content,
565
- section_path,
566
- collection,
567
- content='doc_chunks',
568
- content_rowid='rowid'
569
- )
570
- `);
571
- db.exec(`
572
- CREATE TRIGGER IF NOT EXISTS doc_chunks_fts_ai AFTER INSERT ON doc_chunks BEGIN
573
- INSERT INTO doc_chunks_fts(rowid, content, section_path, collection)
574
- VALUES (new.rowid, new.content, new.section_path, new.collection);
575
- END
576
- `);
577
- db.exec(`
578
- CREATE TRIGGER IF NOT EXISTS doc_chunks_fts_ad AFTER DELETE ON doc_chunks BEGIN
579
- INSERT INTO doc_chunks_fts(doc_chunks_fts, rowid, content, section_path, collection)
580
- VALUES ('delete', old.rowid, old.content, old.section_path, old.collection);
581
- END
582
- `);
583
- db.exec(`
584
- CREATE TRIGGER IF NOT EXISTS doc_chunks_fts_au AFTER UPDATE ON doc_chunks BEGIN
585
- INSERT INTO doc_chunks_fts(doc_chunks_fts, rowid, content, section_path, collection)
586
- VALUES ('delete', old.rowid, old.content, old.section_path, old.collection);
587
- INSERT INTO doc_chunks_fts(rowid, content, section_path, collection)
588
- VALUES (new.rowid, new.content, new.section_path, new.collection);
589
- END
590
- `);
591
- }
592
- // ── V7: Fix knowledge versioning ─────────────────────────────
593
- // The V1 knowledge table had UNIQUE(agent_id, domain, key) which prevented
594
- // true versioning — upsert would overwrite in-place, creating self-superseding rows.
595
- //
596
- // V7 recreates the knowledge table with:
597
- // - version INTEGER NOT NULL DEFAULT 1
598
- // - UNIQUE(agent_id, domain, key, version) — allows multiple versions per key
599
- // - Preserves existing data (current rows become version 1)
600
- function applyV7KnowledgeVersioning(db) {
601
- // Rename existing table
602
- db.exec('ALTER TABLE knowledge RENAME TO knowledge_v6');
603
- // Create new table with versioned unique constraint
604
- db.exec(`
605
- CREATE TABLE knowledge (
606
- id INTEGER PRIMARY KEY AUTOINCREMENT,
607
- agent_id TEXT NOT NULL,
608
- domain TEXT NOT NULL,
609
- key TEXT NOT NULL,
610
- version INTEGER NOT NULL DEFAULT 1,
611
- content TEXT NOT NULL,
612
- confidence REAL NOT NULL DEFAULT 1.0,
613
- visibility TEXT NOT NULL DEFAULT 'private',
614
- source_type TEXT NOT NULL DEFAULT 'manual',
615
- source_ref TEXT,
616
- created_at TEXT NOT NULL,
617
- updated_at TEXT NOT NULL,
618
- expires_at TEXT,
619
- superseded_by INTEGER,
620
- UNIQUE(agent_id, domain, key, version)
621
- )
622
- `);
623
- // Recreate indexes
624
- db.exec('CREATE INDEX IF NOT EXISTS idx_knowledge_agent ON knowledge(agent_id, domain, key)');
625
- db.exec('CREATE INDEX IF NOT EXISTS idx_knowledge_active ON knowledge(agent_id, superseded_by)');
626
- // Migrate existing data (all become version 1, preserve visibility)
627
- db.exec(`
628
- INSERT INTO knowledge (id, agent_id, domain, key, version, content, confidence, visibility,
629
- source_type, source_ref, created_at, updated_at, expires_at, superseded_by)
630
- SELECT id, agent_id, domain, key, 1, content, confidence,
631
- COALESCE(visibility, 'private'),
632
- source_type, source_ref, created_at, updated_at, expires_at, superseded_by
633
- FROM knowledge_v6
634
- `);
635
- // Drop old table
636
- db.exec('DROP TABLE knowledge_v6');
637
- // Recreate FTS5 virtual table (was created in V3 but references knowledge)
638
- // FTS tables can't be migrated — drop and recreate
639
- try {
640
- db.exec('DROP TABLE IF EXISTS knowledge_fts');
641
- }
642
- catch { /* ignore */ }
643
- db.exec(`
644
- CREATE VIRTUAL TABLE IF NOT EXISTS knowledge_fts USING fts5(
645
- content,
646
- domain,
647
- key,
648
- content='knowledge',
649
- content_rowid='id'
650
- )
651
- `);
652
- // Repopulate FTS index from migrated data
653
- db.exec(`INSERT INTO knowledge_fts(rowid, content, domain, key) SELECT id, content, domain, key FROM knowledge`);
654
- // Recreate triggers
655
- db.exec(`
656
- CREATE TRIGGER IF NOT EXISTS knowledge_fts_ai AFTER INSERT ON knowledge BEGIN
657
- INSERT INTO knowledge_fts(rowid, content, domain, key) VALUES (new.id, new.content, new.domain, new.key);
658
- END
659
- `);
660
- db.exec(`
661
- CREATE TRIGGER IF NOT EXISTS knowledge_fts_au AFTER UPDATE ON knowledge BEGIN
662
- INSERT INTO knowledge_fts(knowledge_fts, rowid, content, domain, key) VALUES('delete', old.id, old.content, old.domain, old.key);
663
- INSERT INTO knowledge_fts(rowid, content, domain, key) VALUES (new.id, new.content, new.domain, new.key);
664
- END
665
- `);
666
- db.exec(`
667
- CREATE TRIGGER IF NOT EXISTS knowledge_fts_ad AFTER DELETE ON knowledge BEGIN
668
- INSERT INTO knowledge_fts(knowledge_fts, rowid, content, domain, key) VALUES('delete', old.id, old.content, old.domain, old.key);
669
- END
670
- `);
671
- }
672
- // ── V9: Add session_key to doc_chunks ───────────────────────
673
- // Enables ephemeral session-scoped doc chunks for subagent context inheritance.
674
- // Chunks stored with a session_key are transient — clearSessionChunks() removes them.
675
- function applyV9DocChunkSessionKey(db) {
676
- const cols = db.prepare('PRAGMA table_info(doc_chunks)').all()
677
- .map(r => r.name);
678
- if (!cols.includes('session_key')) {
679
- db.exec('ALTER TABLE doc_chunks ADD COLUMN session_key TEXT');
680
- }
681
- db.exec('CREATE INDEX IF NOT EXISTS idx_doc_chunks_session ON doc_chunks(session_key) WHERE session_key IS NOT NULL');
682
- }
683
- // ── V8: Add source_message_id to episodes ───────────────────
684
- function applyV8EpisodeSourceMessageId(db) {
685
- // ALTER TABLE ADD COLUMN is safe — existing rows get NULL for new column
686
- const cols = db.prepare('PRAGMA table_info(episodes)').all()
687
- .map(r => r.name);
688
- if (!cols.includes('source_message_id')) {
689
- db.exec('ALTER TABLE episodes ADD COLUMN source_message_id INTEGER');
690
- }
691
- db.exec('CREATE INDEX IF NOT EXISTS idx_episodes_source_msg ON episodes(agent_id, source_message_id)');
692
- }
693
- // ── V12: FOS / MOD tables + builtin seed data ──────────────
694
- function applyV12FosMod(db) {
695
- // fleet_output_standard: fleet-wide output formatting standards
696
- db.exec(`
697
- CREATE TABLE IF NOT EXISTS fleet_output_standard (
698
- id TEXT PRIMARY KEY,
699
- name TEXT NOT NULL,
700
- directives TEXT NOT NULL,
701
- task_variants TEXT DEFAULT '{}',
702
- token_budget INTEGER DEFAULT 250,
703
- active INTEGER DEFAULT 0,
704
- source TEXT DEFAULT 'builtin',
705
- version INTEGER DEFAULT 1,
706
- last_validated_at TEXT,
707
- created_at TEXT NOT NULL,
708
- updated_at TEXT NOT NULL
709
- )
710
- `);
711
- // model_output_directives: per-model corrections and calibration
712
- db.exec(`
713
- CREATE TABLE IF NOT EXISTS model_output_directives (
714
- id TEXT PRIMARY KEY,
715
- match_pattern TEXT NOT NULL,
716
- priority INTEGER DEFAULT 0,
717
- corrections TEXT NOT NULL,
718
- calibration TEXT NOT NULL,
719
- task_overrides TEXT DEFAULT '{}',
720
- token_budget INTEGER DEFAULT 150,
721
- version INTEGER DEFAULT 1,
722
- source TEXT DEFAULT 'builtin',
723
- enabled INTEGER DEFAULT 1,
724
- last_validated_at TEXT,
725
- created_at TEXT NOT NULL,
726
- updated_at TEXT NOT NULL
727
- )
728
- `);
729
- // output_metrics: per-request telemetry for drift analytics
730
- db.exec(`
731
- CREATE TABLE IF NOT EXISTS output_metrics (
732
- id TEXT PRIMARY KEY,
733
- timestamp TEXT NOT NULL,
734
- agent_id TEXT NOT NULL,
735
- session_key TEXT NOT NULL,
736
- model_id TEXT NOT NULL,
737
- provider TEXT NOT NULL,
738
- fos_version INTEGER,
739
- mod_version INTEGER,
740
- mod_id TEXT,
741
- task_type TEXT,
742
- output_tokens INTEGER NOT NULL,
743
- input_tokens INTEGER,
744
- cache_read_tokens INTEGER,
745
- corrections_fired TEXT DEFAULT '[]',
746
- latency_ms INTEGER,
747
- created_at TEXT NOT NULL
748
- )
749
- `);
750
- db.exec('CREATE INDEX IF NOT EXISTS idx_output_metrics_model ON output_metrics(model_id, timestamp)');
751
- db.exec('CREATE INDEX IF NOT EXISTS idx_output_metrics_agent ON output_metrics(agent_id, timestamp)');
752
- // ── Seed builtin FOS profile ──
753
- const now = nowIso();
754
- const fosDirectives = JSON.stringify({
755
- structural: [
756
- 'Lead with the answer. Conclusion first, reasoning after.',
757
- 'Headers earn their place. Under 200 words: no headers.',
758
- 'Lists cap at 7 items. Technical enumerations exempt.',
759
- 'One metaphor lands. Two is the limit.',
760
- ],
761
- anti_patterns: [
762
- 'No sycophantic openings: Great question, Certainly, Absolutely, Of course',
763
- 'No em dashes',
764
- 'No preamble restating the question',
765
- 'No: Let me know if you need anything else',
766
- 'No AI vocabulary: delve, tapestry, pivotal, fostering, garner, underscore, vibrant, leverage, noteworthy, realm',
767
- 'No unverifiable references — don\'t cite "you mentioned earlier" or "as discussed" without a direct quote',
768
- 'No claiming actions completed without tool results to back them up',
769
- 'No attributing statements to people without quoting the actual message',
770
- ],
771
- density_targets: {
772
- simple: '1-3 sentences',
773
- analysis: '200-500 words',
774
- code: 'code first, explain only non-obvious parts',
775
- },
776
- voice: [
777
- 'Every sentence states a fact, makes a decision, or advances an argument',
778
- 'Numbers over adjectives',
779
- 'Vary sentence length deliberately',
780
- 'Match confidence to evidence: facts zero hedges, inference one hedge max',
781
- ],
782
- });
783
- const fosVariants = JSON.stringify({
784
- 'council-deliberation': {
785
- density_target: '400-800 words. Depth over brevity.',
786
- structure: 'Headers required. Position statement, risk assessment, confidence, action.',
787
- },
788
- 'code-generation': {
789
- density_target: 'Minimize prose. Code is the deliverable.',
790
- list_cap: 'DISABLED',
791
- },
792
- 'quick-answer': {
793
- density_target: '1-3 sentences.',
794
- structure: 'No headers. No lists unless the answer is genuinely a list.',
795
- },
796
- });
797
- const existingFos = db.prepare("SELECT id FROM fleet_output_standard WHERE id = 'psiclawops-default'").get();
798
- if (!existingFos) {
799
- db.prepare(`
800
- INSERT INTO fleet_output_standard (id, name, directives, task_variants, token_budget, active, source, version, created_at, updated_at)
801
- VALUES ('psiclawops-default', 'PsiClawOps Default', ?, ?, 250, 1, 'builtin', 1, ?, ?)
802
- `).run(fosDirectives, fosVariants, now, now);
803
- }
804
- // ── Seed builtin MOD profiles ──
805
- const mods = [
806
- {
807
- id: 'gpt-5.4',
808
- match_pattern: 'gpt-5.4*',
809
- priority: 10,
810
- corrections: JSON.stringify([
811
- { id: 'plan-loop', rule: 'If 2+ responses without concrete output, execute immediately. Ship partial.', severity: 'hard' },
812
- { id: 'first-person-opening', rule: 'Do not open with I.', severity: 'medium' },
813
- { id: 'throat-clearing', rule: 'No preamble before the answer.', severity: 'medium' },
814
- { id: 'conditional-hedging', rule: 'Decision questions: answer + 1-2 reasons. No if-X-then-Y branching.', severity: 'medium' },
815
- ]),
816
- calibration: JSON.stringify([
817
- { id: 'verbosity-offset', fos_target: 'analysis: 200-500 words', model_tendency: '~600 words vs Opus baseline', adjustment: 'Actively compress. Your natural output is ~2x the target. Cut first drafts in half.' },
818
- { id: 'list-length-offset', fos_target: '7 items max', model_tendency: 'defaults to 12-15 items', adjustment: 'After drafting a list, cut the bottom half.' },
819
- ]),
820
- },
821
- {
822
- id: 'claude-opus-4.6',
823
- match_pattern: 'claude-opus-4*',
824
- priority: 10,
825
- corrections: JSON.stringify([
826
- { id: 'over-structuring', rule: 'Resist adding headers and sections to short answers.', severity: 'medium' },
827
- { id: 'premature-enumeration', rule: "Don't list when prose works. Lists require 3+ genuinely distinct items.", severity: 'medium' },
828
- ]),
829
- calibration: JSON.stringify([
830
- { id: 'verbosity-offset', fos_target: 'analysis: 200-500 words', model_tendency: '1.1x target', adjustment: 'Near target. Minor compression on detailed analysis.' },
831
- ]),
832
- },
833
- {
834
- id: 'claude-sonnet-4.6',
835
- match_pattern: 'claude-sonnet-4*',
836
- priority: 10,
837
- corrections: JSON.stringify([
838
- { id: 'caveat-frontloading', rule: "Don't open with caveats. State the answer, then caveats if needed.", severity: 'medium' },
839
- { id: 'safety-hedging', rule: 'Minimize safety qualifiers on unambiguous requests.', severity: 'medium' },
840
- ]),
841
- calibration: JSON.stringify([
842
- { id: 'verbosity-offset', fos_target: 'analysis: 200-500 words', model_tendency: '1.3x target', adjustment: 'Compress by ~25%. Cut qualifications and restatements.' },
843
- ]),
844
- },
845
- {
846
- id: 'gemini-3.1',
847
- match_pattern: 'gemini-3.1*',
848
- priority: 10,
849
- corrections: JSON.stringify([
850
- { id: 'numbered-list-default', rule: "Don't default to numbered lists. Use prose unless order matters.", severity: 'hard' },
851
- { id: 'source-attribution-noise', rule: 'Skip attribution boilerplate unless sourcing is specifically requested.', severity: 'medium' },
852
- ]),
853
- calibration: JSON.stringify([
854
- { id: 'list-length-offset', fos_target: '7 items max', model_tendency: '1.5x target', adjustment: 'Cut lists to 7 items. Merge or drop the rest.' },
855
- ]),
856
- },
857
- {
858
- id: 'default',
859
- match_pattern: '*',
860
- priority: 0,
861
- corrections: JSON.stringify([]),
862
- calibration: JSON.stringify([]),
863
- },
864
- ];
865
- for (const mod of mods) {
866
- const existing = db.prepare('SELECT id FROM model_output_directives WHERE id = ?').get(mod.id);
867
- if (!existing) {
868
- db.prepare(`
869
- INSERT INTO model_output_directives (id, match_pattern, priority, corrections, calibration, task_overrides, token_budget, version, source, enabled, created_at, updated_at)
870
- VALUES (?, ?, ?, ?, ?, '{}', 150, 1, 'builtin', 1, ?, ?)
871
- `).run(mod.id, mod.match_pattern, mod.priority, mod.corrections, mod.calibration, now, now);
872
- }
873
- }
874
- }
875
- // ── Repair utility ───────────────────────────────────────────
876
- // Safe to call BEFORE opening the main DB connection.
877
- // Handles the case where library.db has duplicate topics AND B-tree corruption,
878
- // making in-place DELETE impossible.
879
- //
880
- // Strategy:
881
- // 1. Detect duplicates (read-only: works on corrupt DBs)
882
- // 2. VACUUM INTO temp file (writes to a new clean file)
883
- // 3. Dedup + integrity check in temp
884
- // 4. Backup original via VACUUM INTO backups dir
885
- // 5. Atomic rename temp → original
886
- export function repairLibraryDb(dbPath) {
887
- if (!existsSync(dbPath)) {
888
- return { repaired: false, message: `DB not found at ${dbPath}. Nothing to repair.` };
889
- }
890
- const backupsDir = pathJoin(dirname(dbPath), 'backups');
891
- const ts = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
892
- const tempPath = `${dbPath}.repair-${ts}.sqlite`;
893
- const backupPath = pathJoin(backupsDir, `library.db.pre-repair-${ts}.sqlite`);
894
- const src = new DatabaseSync(dbPath);
895
- // Step 1: detect duplicates
896
- const dupeRow = src.prepare(`
897
- SELECT COUNT(*) AS cnt FROM (
898
- SELECT agent_id, lower(name) FROM topics
899
- GROUP BY agent_id, lower(name) HAVING COUNT(*) > 1
900
- )
901
- `).get();
902
- if (dupeRow.cnt === 0) {
903
- src.close();
904
- return { repaired: false, message: 'No duplicate topics found. No repair needed.' };
905
- }
906
- console.log(`[hypermem-repair] ${dupeRow.cnt} duplicate topic group(s) found. Starting repair...`);
907
- // Step 2: VACUUM INTO temp (reads clean pages, writes fresh file)
908
- try {
909
- src.exec(`VACUUM INTO '${tempPath}'`);
910
- }
911
- catch (err) {
912
- src.close();
913
- throw new Error(`[hypermem-repair] VACUUM INTO failed: ${err.message}. Cannot auto-repair.`);
914
- }
915
- src.close();
916
- // Step 3: dedup + verify in temp
917
- const tmp = new DatabaseSync(tempPath);
918
- try {
919
- tmp.exec(`
920
- DELETE FROM topics WHERE id IN (
921
- WITH ranked AS (
922
- SELECT id, ROW_NUMBER() OVER (
923
- PARTITION BY agent_id, lower(name)
924
- ORDER BY updated_at DESC, created_at DESC, id DESC
925
- ) AS rn FROM topics
926
- )
927
- SELECT id FROM ranked WHERE rn > 1
928
- )
929
- `);
930
- tmp.exec('CREATE UNIQUE INDEX IF NOT EXISTS idx_topics_dedup ON topics(agent_id, lower(name))');
931
- const integ = tmp.prepare('PRAGMA integrity_check').get();
932
- if (integ.integrity_check !== 'ok') {
933
- throw new Error(`Repaired DB failed integrity check: ${integ.integrity_check}`);
934
- }
935
- }
936
- finally {
937
- tmp.close();
938
- }
939
- // Step 4: backup original
940
- mkdirSync(backupsDir, { recursive: true });
941
- let savedBackup = false;
942
- try {
943
- const srcForBackup = new DatabaseSync(dbPath);
944
- srcForBackup.exec(`VACUUM INTO '${backupPath}'`);
945
- srcForBackup.close();
946
- savedBackup = true;
947
- console.log(`[hypermem-repair] Backup saved → ${backupPath}`);
948
- }
949
- catch {
950
- console.warn('[hypermem-repair] Could not save backup, proceeding with repair anyway.');
951
- }
952
- // Step 5: atomic swap
953
- renameSync(tempPath, dbPath);
954
- const msg = [
955
- `Repair complete. ${dupeRow.cnt} duplicate topic group(s) removed.`,
956
- savedBackup ? `Original backed up to: ${backupPath}` : 'Note: backup could not be saved.',
957
- ].join(' ');
958
- console.log(`[hypermem-repair] ${msg}`);
959
- return { repaired: true, backupPath: savedBackup ? backupPath : undefined, message: msg };
960
- }
961
- // ── Migration runner ──────────────────────────────────────────
962
- export function migrateLibrary(db, engineVersion) {
963
- db.exec(`
964
- CREATE TABLE IF NOT EXISTS schema_version (
965
- version INTEGER PRIMARY KEY,
966
- applied_at TEXT NOT NULL
967
- )
968
- `);
969
- const row = db
970
- .prepare('SELECT MAX(version) AS version FROM schema_version')
971
- .get();
972
- const currentVersion = typeof row?.version === 'number' ? row.version : 0;
973
- if (currentVersion > LIBRARY_SCHEMA_VERSION) {
974
- console.warn(`[hypermem-library] Database schema version (${currentVersion}) is newer than this engine (${LIBRARY_SCHEMA_VERSION}).`);
975
- return;
976
- }
977
- if (currentVersion < 1) {
978
- applyV1Schema(db);
979
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
980
- .run(1, nowIso());
981
- }
982
- if (currentVersion < 2) {
983
- applyV2SessionRegistry(db);
984
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
985
- .run(2, nowIso());
986
- }
987
- if (currentVersion < 3) {
988
- applyV3Collections(db);
989
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
990
- .run(3, nowIso());
991
- }
992
- if (currentVersion < 4) {
993
- applyV4Capabilities(db);
994
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
995
- .run(4, nowIso());
996
- }
997
- if (currentVersion < 5) {
998
- applyV5DesiredState(db);
999
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
1000
- .run(5, nowIso());
1001
- }
1002
- if (currentVersion < 6) {
1003
- applyV6DocChunks(db);
1004
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
1005
- .run(6, nowIso());
1006
- }
1007
- if (currentVersion < 7) {
1008
- applyV7KnowledgeVersioning(db);
1009
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
1010
- .run(7, nowIso());
1011
- }
1012
- if (currentVersion < 8) {
1013
- applyV8EpisodeSourceMessageId(db);
1014
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
1015
- .run(8, nowIso());
1016
- }
1017
- if (currentVersion < 9) {
1018
- applyV9DocChunkSessionKey(db);
1019
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
1020
- .run(9, nowIso());
1021
- }
1022
- if (currentVersion < 10) {
1023
- db.exec(`
1024
- CREATE TABLE IF NOT EXISTS meta (
1025
- key TEXT PRIMARY KEY,
1026
- value TEXT NOT NULL,
1027
- updated_at TEXT NOT NULL
1028
- )
1029
- `);
1030
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
1031
- .run(10, nowIso());
1032
- }
1033
- // ── V11: Topics FTS + indexer watermarks ──────────────────
1034
- // topics_fts was missing from V3 (topics table was created without FTS).
1035
- // indexer_watermarks tracks per-agent indexer progress for resumable indexing.
1036
- if (currentVersion < 11) {
1037
- db.exec(`
1038
- CREATE VIRTUAL TABLE IF NOT EXISTS topics_fts USING fts5(
1039
- name,
1040
- description,
1041
- content='topics',
1042
- content_rowid='id'
1043
- )
1044
- `);
1045
- db.exec(`
1046
- CREATE TRIGGER IF NOT EXISTS topics_fts_ai AFTER INSERT ON topics BEGIN
1047
- INSERT INTO topics_fts(rowid, name, description) VALUES (new.id, new.name, new.description);
1048
- END
1049
- `);
1050
- db.exec(`
1051
- CREATE TRIGGER IF NOT EXISTS topics_fts_ad AFTER DELETE ON topics BEGIN
1052
- INSERT INTO topics_fts(topics_fts, rowid, name, description) VALUES('delete', old.id, old.name, old.description);
1053
- END
1054
- `);
1055
- db.exec(`
1056
- CREATE TRIGGER IF NOT EXISTS topics_fts_au AFTER UPDATE ON topics BEGIN
1057
- INSERT INTO topics_fts(topics_fts, rowid, name, description) VALUES('delete', old.id, old.name, old.description);
1058
- INSERT INTO topics_fts(rowid, name, description) VALUES (new.id, new.name, new.description);
1059
- END
1060
- `);
1061
- db.exec(`
1062
- CREATE TABLE IF NOT EXISTS indexer_watermarks (
1063
- agent_id TEXT PRIMARY KEY,
1064
- last_message_id INTEGER NOT NULL DEFAULT 0,
1065
- last_run_at TEXT NOT NULL
1066
- )
1067
- `);
1068
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
1069
- .run(11, nowIso());
1070
- }
1071
- // ── V12: FOS/MOD tables + builtin seed data ──────────────
1072
- // fleet_output_standard: fleet-wide output standards
1073
- // model_output_directives: per-model correction & calibration profiles
1074
- // output_metrics: per-request telemetry for drift analytics
1075
- if (currentVersion < 12) {
1076
- applyV12FosMod(db);
1077
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
1078
- .run(12, nowIso());
1079
- }
1080
- // ── V13: Temporal index ──────────────────────────────────────────────────
1081
- // Maps fact_id → occurred_at (unix ms). Initially backfilled from created_at
1082
- // (ingest time as proxy). Enables time-range retrieval for LoCoMo temporal
1083
- // questions without vector similarity.
1084
- if (currentVersion < 13) {
1085
- db.exec(`
1086
- CREATE TABLE IF NOT EXISTS temporal_index (
1087
- fact_id INTEGER PRIMARY KEY REFERENCES facts(id) ON DELETE CASCADE,
1088
- agent_id TEXT NOT NULL,
1089
- occurred_at INTEGER NOT NULL,
1090
- ingest_at INTEGER NOT NULL,
1091
- time_ref TEXT,
1092
- confidence REAL NOT NULL DEFAULT 0.5
1093
- )
1094
- `);
1095
- db.exec('CREATE INDEX IF NOT EXISTS idx_temporal_agent_time ON temporal_index(agent_id, occurred_at DESC)');
1096
- db.exec('CREATE INDEX IF NOT EXISTS idx_temporal_occurred ON temporal_index(occurred_at DESC)');
1097
- // Backfill existing facts using created_at as occurred_at proxy
1098
- db.exec(`
1099
- INSERT OR IGNORE INTO temporal_index (fact_id, agent_id, occurred_at, ingest_at, confidence)
1100
- SELECT
1101
- id,
1102
- agent_id,
1103
- CAST((julianday(created_at) - 2440587.5) * 86400000 AS INTEGER),
1104
- CAST((julianday(created_at) - 2440587.5) * 86400000 AS INTEGER),
1105
- 0.5
1106
- FROM facts
1107
- WHERE superseded_by IS NULL
1108
- `);
1109
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
1110
- .run(13, nowIso());
1111
- }
1112
- // ── V14: Temporal validity columns on facts ──────────────────────────
1113
- // valid_from / invalid_at enable "what was true on date X?" queries.
1114
- if (currentVersion < 14) {
1115
- try {
1116
- db.exec('ALTER TABLE facts ADD COLUMN valid_from TEXT');
1117
- }
1118
- catch { /* already exists */ }
1119
- try {
1120
- db.exec('ALTER TABLE facts ADD COLUMN invalid_at TEXT');
1121
- }
1122
- catch { /* already exists */ }
1123
- try {
1124
- db.exec('CREATE INDEX IF NOT EXISTS idx_facts_temporal_validity ON facts(agent_id, valid_from, invalid_at)');
1125
- }
1126
- catch { /* already exists */ }
1127
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
1128
- .run(14, nowIso());
1129
- }
1130
- // ── V15: Expertise tables (domain expertise patterns) ──────────────
1131
- // expertise_observations: raw learnings from conversations, pipelines, reviews
1132
- // expertise_patterns: graduated observations with confirming evidence
1133
- // expertise_evidence: links observations to patterns (confirms/contradicts)
1134
- if (currentVersion < 15) {
1135
- db.exec(`
1136
- CREATE TABLE IF NOT EXISTS expertise_observations (
1137
- id INTEGER PRIMARY KEY AUTOINCREMENT,
1138
- agent_id TEXT NOT NULL,
1139
- domain TEXT NOT NULL,
1140
- context TEXT,
1141
- observation_text TEXT NOT NULL,
1142
- source_type TEXT NOT NULL DEFAULT 'conversation',
1143
- source_ref TEXT,
1144
- created_at TEXT NOT NULL
1145
- )
1146
- `);
1147
- db.exec('CREATE INDEX IF NOT EXISTS idx_expertise_obs_agent ON expertise_observations(agent_id, domain)');
1148
- db.exec(`
1149
- CREATE TABLE IF NOT EXISTS expertise_patterns (
1150
- id INTEGER PRIMARY KEY AUTOINCREMENT,
1151
- agent_id TEXT NOT NULL,
1152
- domain TEXT NOT NULL,
1153
- pattern_text TEXT NOT NULL,
1154
- confidence REAL DEFAULT 0.7,
1155
- frequency INTEGER DEFAULT 1,
1156
- first_seen TEXT NOT NULL,
1157
- last_confirmed TEXT NOT NULL,
1158
- invalidated_at TEXT,
1159
- invalidation_reason TEXT,
1160
- decay_score REAL DEFAULT 0.0,
1161
- updated_at TEXT
1162
- )
1163
- `);
1164
- db.exec('CREATE INDEX IF NOT EXISTS idx_expertise_patterns_agent ON expertise_patterns(agent_id, domain, invalidated_at)');
1165
- db.exec('CREATE INDEX IF NOT EXISTS idx_expertise_patterns_active ON expertise_patterns(agent_id, invalidated_at, confidence DESC)');
1166
- db.exec(`
1167
- CREATE TABLE IF NOT EXISTS expertise_evidence (
1168
- observation_id INTEGER NOT NULL,
1169
- pattern_id INTEGER NOT NULL,
1170
- relationship TEXT NOT NULL CHECK(relationship IN ('confirms', 'contradicts')),
1171
- created_at TEXT NOT NULL,
1172
- PRIMARY KEY (observation_id, pattern_id)
1173
- )
1174
- `);
1175
- db.exec('CREATE INDEX IF NOT EXISTS idx_expertise_evidence_pattern ON expertise_evidence(pattern_id, relationship)');
1176
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
1177
- .run(15, nowIso());
1178
- }
1179
- if (currentVersion < 16) {
1180
- // contradiction_audits table — tracks detected contradictions for review
1181
- db.exec(`
1182
- CREATE TABLE IF NOT EXISTS contradiction_audits (
1183
- id INTEGER PRIMARY KEY AUTOINCREMENT,
1184
- agent_id TEXT NOT NULL,
1185
- entity_type TEXT NOT NULL CHECK(entity_type IN ('fact')),
1186
- new_content TEXT NOT NULL,
1187
- new_domain TEXT,
1188
- existing_fact_id INTEGER NOT NULL,
1189
- existing_content TEXT NOT NULL,
1190
- similarity_score REAL NOT NULL,
1191
- contradiction_score REAL NOT NULL,
1192
- reason TEXT NOT NULL,
1193
- detector TEXT NOT NULL DEFAULT 'heuristic_v1',
1194
- suggested_resolution TEXT NOT NULL DEFAULT 'review',
1195
- source_ref TEXT,
1196
- status TEXT NOT NULL DEFAULT 'pending' CHECK(status IN ('pending', 'accepted', 'dismissed')),
1197
- resolution_notes TEXT,
1198
- created_at TEXT NOT NULL,
1199
- resolved_at TEXT
1200
- )
1201
- `);
1202
- db.exec('CREATE INDEX IF NOT EXISTS idx_contradiction_audits_agent_status ON contradiction_audits(agent_id, status, created_at DESC)');
1203
- db.exec('CREATE INDEX IF NOT EXISTS idx_contradiction_audits_existing_fact ON contradiction_audits(existing_fact_id, status)');
1204
- db.exec('CREATE INDEX IF NOT EXISTS idx_contradiction_audits_agent ON contradiction_audits(agent_id, created_at DESC)');
1205
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
1206
- .run(16, nowIso());
1207
- }
1208
- if (currentVersion < 17) {
1209
- // Stamp v17 — previously applied by an older engine build alongside contradiction_audits.
1210
- // No additional DDL needed; the table was already created in v16.
1211
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
1212
- .run(17, nowIso());
1213
- }
1214
- if (currentVersion < 18) {
1215
- // V18: collapse duplicate topics, then enforce unique constraint.
1216
- //
1217
- // Safety pattern for existing users who may have both duplicates AND B-tree corruption
1218
- // (e.g. from a WAL desync during a gateway crash):
1219
- // 1. Detect duplicates up front (read-only — works even on malformed DBs)
1220
- // 2. If dupes found: VACUUM INTO a backup file first (reads clean pages, writes new file)
1221
- // 3. Attempt in-place DELETE (works on healthy DBs)
1222
- // 4. If DELETE fails: throw a clear error pointing to the backup + repair command
1223
- const dupeCheck = db.prepare(`
1224
- SELECT COUNT(*) AS cnt FROM (
1225
- SELECT agent_id, lower(name) FROM topics
1226
- GROUP BY agent_id, lower(name) HAVING COUNT(*) > 1
1227
- )
1228
- `).get();
1229
- let v18BackupPath;
1230
- if (dupeCheck.cnt > 0) {
1231
- // Auto-backup via VACUUM INTO before any writes.
1232
- // VACUUM INTO reads clean pages and writes to a new file — works even on marginally
1233
- // corrupt DBs where regular writes fail.
1234
- const home = process.env['HOME'] ?? process.env['USERPROFILE'] ?? '';
1235
- const backupsDir = pathJoin(home, '.openclaw', 'hypermem', 'backups');
1236
- const ts = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
1237
- v18BackupPath = pathJoin(backupsDir, `library.db.v18-pre-dedup-${ts}.sqlite`);
1238
- try {
1239
- mkdirSync(backupsDir, { recursive: true });
1240
- db.exec(`VACUUM INTO '${v18BackupPath}'`);
1241
- console.log(`[hypermem-library] V18: backup saved → ${v18BackupPath}`);
1242
- }
1243
- catch (e) {
1244
- console.warn(`[hypermem-library] V18: backup failed (${e.message}), proceeding without backup`);
1245
- v18BackupPath = undefined;
1246
- }
1247
- try {
1248
- db.exec(`
1249
- DELETE FROM topics
1250
- WHERE id IN (
1251
- WITH ranked AS (
1252
- SELECT
1253
- id,
1254
- ROW_NUMBER() OVER (
1255
- PARTITION BY agent_id, lower(name)
1256
- ORDER BY updated_at DESC, created_at DESC, id DESC
1257
- ) AS rn
1258
- FROM topics
1259
- )
1260
- SELECT id FROM ranked WHERE rn > 1
1261
- )
1262
- `);
1263
- }
1264
- catch (err) {
1265
- const backupMsg = v18BackupPath
1266
- ? `A VACUUM backup was saved to:\n ${v18BackupPath}\nRun: hypermem repair-library to recover automatically.`
1267
- : 'Run: hypermem repair-library to recover.';
1268
- throw new Error(`[hypermem-library] V18 migration: failed to deduplicate topics (${err.message}).\n` +
1269
- `Your library.db has ${dupeCheck.cnt} duplicate topic group(s) that could not be removed in-place.\n` +
1270
- `This usually indicates B-tree corruption from a previous gateway crash.\n` +
1271
- backupMsg);
1272
- }
1273
- }
1274
- db.exec('CREATE UNIQUE INDEX IF NOT EXISTS idx_topics_dedup ON topics(agent_id, lower(name))');
1275
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
1276
- .run(18, nowIso());
1277
- }
1278
- if (currentVersion < 19) {
1279
- // V19: Extend contradiction_audits status CHECK constraint to include
1280
- // auto-resolution values. SQLite cannot ALTER CHECK constraints — recreate
1281
- // the table with the new constraint, preserving all existing rows.
1282
- // Use an explicit column list (not SELECT *) to guard against column drift.
1283
- db.exec(`
1284
- CREATE TABLE contradiction_audits_v19 (
1285
- id INTEGER PRIMARY KEY AUTOINCREMENT,
1286
- agent_id TEXT NOT NULL,
1287
- entity_type TEXT NOT NULL CHECK(entity_type IN ('fact')),
1288
- new_content TEXT NOT NULL,
1289
- new_domain TEXT,
1290
- existing_fact_id INTEGER NOT NULL,
1291
- existing_content TEXT NOT NULL,
1292
- similarity_score REAL NOT NULL,
1293
- contradiction_score REAL NOT NULL,
1294
- reason TEXT NOT NULL,
1295
- detector TEXT NOT NULL DEFAULT 'heuristic_v1',
1296
- suggested_resolution TEXT NOT NULL DEFAULT 'review',
1297
- source_ref TEXT,
1298
- status TEXT NOT NULL DEFAULT 'pending'
1299
- CHECK(status IN ('pending', 'accepted', 'dismissed', 'auto-superseded', 'auto-invalidated')),
1300
- resolution_notes TEXT,
1301
- created_at TEXT NOT NULL,
1302
- resolved_at TEXT
1303
- );
1304
- INSERT INTO contradiction_audits_v19
1305
- (id, agent_id, entity_type, new_content, new_domain, existing_fact_id,
1306
- existing_content, similarity_score, contradiction_score, reason,
1307
- detector, suggested_resolution, source_ref, status, resolution_notes,
1308
- created_at, resolved_at)
1309
- SELECT
1310
- id, agent_id, entity_type, new_content, new_domain, existing_fact_id,
1311
- existing_content, similarity_score, contradiction_score, reason,
1312
- detector, suggested_resolution, source_ref, status, resolution_notes,
1313
- created_at, resolved_at
1314
- FROM contradiction_audits;
1315
- DROP TABLE contradiction_audits;
1316
- ALTER TABLE contradiction_audits_v19 RENAME TO contradiction_audits;
1317
- `);
1318
- db.exec('CREATE INDEX IF NOT EXISTS idx_contradiction_audits_agent_status ON contradiction_audits(agent_id, status, created_at DESC)');
1319
- db.exec('CREATE INDEX IF NOT EXISTS idx_contradiction_audits_existing_fact ON contradiction_audits(existing_fact_id, status)');
1320
- db.exec('CREATE INDEX IF NOT EXISTS idx_contradiction_audits_agent ON contradiction_audits(agent_id, created_at DESC)');
1321
- db.prepare('INSERT INTO schema_version (version, applied_at) VALUES (?, ?)')
1322
- .run(19, nowIso());
1323
- }
1324
- // Always ensure meta exists before stamping the running engine version.
1325
- // Some legacy/stale DBs reached schema >=10 without the V10 migration having
1326
- // actually created the table, which would make startup fail with
1327
- // "no such table: meta" during an otherwise unrelated init path.
1328
- db.exec(`
1329
- CREATE TABLE IF NOT EXISTS meta (
1330
- key TEXT PRIMARY KEY,
1331
- value TEXT NOT NULL,
1332
- updated_at TEXT NOT NULL
1333
- )
1334
- `);
1335
- // Always stamp the running engine version so any query can surface it.
1336
- if (engineVersion) {
1337
- db.prepare(`
1338
- INSERT INTO meta (key, value, updated_at) VALUES ('engine_version', ?, ?)
1339
- ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at
1340
- `).run(engineVersion, nowIso());
1341
- }
1342
- }
1343
- //# sourceMappingURL=library-schema.js.map