@psiclawops/hypermem 0.9.0 → 0.9.1

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