squish-memory 1.1.5 → 1.2.0

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 (499) hide show
  1. package/.env.example +32 -16
  2. package/CHANGELOG.md +147 -0
  3. package/README.md +120 -78
  4. package/{scripts → bin}/dependency-manager.mjs +217 -217
  5. package/{scripts → bin}/detect-clients.mjs +78 -78
  6. package/bin/install-interactive.mjs +321 -0
  7. package/bin/squish-mcp.mjs +46 -0
  8. package/bin/squish.mjs +33 -0
  9. package/config/mcp-migration-map.json +1 -6
  10. package/config/mcp-mode-semantics.json +19 -23
  11. package/config/mcp-remote-auth.json +3 -26
  12. package/config/mcp-universal.schema.json +5 -35
  13. package/config/settings.json +107 -52
  14. package/config.js +5 -0
  15. package/config.ts +218 -0
  16. package/core/adapters/config/claude-code.ts +133 -0
  17. package/core/adapters/config/cursor.ts +90 -0
  18. package/core/adapters/config/opencode.ts +89 -0
  19. package/core/adapters/config/windsurf.ts +90 -0
  20. package/core/adapters/index.ts +102 -0
  21. package/core/adapters/timeline.ts +116 -0
  22. package/core/adapters/types.ts +166 -0
  23. package/core/agent-preferences.ts +140 -0
  24. package/core/algorithms/analytics/token-estimator.ts +216 -0
  25. package/core/algorithms/detection/hash-filters.ts +260 -0
  26. package/core/algorithms/detection/semantic-ranker.ts +194 -0
  27. package/core/algorithms/detection/two-stage-detector.ts +421 -0
  28. package/core/algorithms/handlers/approve-merge.ts +215 -0
  29. package/core/algorithms/handlers/detect-duplicates.ts +192 -0
  30. package/core/algorithms/handlers/get-stats.ts +132 -0
  31. package/core/algorithms/handlers/list-proposals.ts +130 -0
  32. package/core/algorithms/handlers/preview-merge.ts +139 -0
  33. package/core/algorithms/handlers/reject-merge.ts +93 -0
  34. package/core/algorithms/handlers/reverse-merge.ts +155 -0
  35. package/core/algorithms/index.ts +39 -0
  36. package/core/algorithms/operations/cache-maintenance.ts +182 -0
  37. package/core/algorithms/safety/safety-checks.ts +256 -0
  38. package/core/algorithms/strategies/merge-strategies.ts +381 -0
  39. package/core/algorithms/types.ts +140 -0
  40. package/core/algorithms/utils/response-builder.ts +61 -0
  41. package/core/associations.ts +363 -0
  42. package/core/beliefs/decay.ts +289 -0
  43. package/core/beliefs/extractor.ts +131 -0
  44. package/core/beliefs/store.ts +557 -0
  45. package/core/beliefs/types.ts +38 -0
  46. package/core/commands/mcp-server.ts +5 -0
  47. package/core/compression.ts +177 -0
  48. package/core/config.js +2 -0
  49. package/core/consolidation.ts +330 -0
  50. package/core/context/agent-context.ts +388 -0
  51. package/core/context/context-paging.ts +449 -0
  52. package/core/context/context-window.ts +234 -0
  53. package/core/context/context.ts +35 -0
  54. package/core/embeddings/embeddings.ts +616 -0
  55. package/core/embeddings/google-multimodal.ts +200 -0
  56. package/{dist/core/local-embeddings.js → core/embeddings/local-embeddings.ts} +12 -11
  57. package/core/embeddings/qmd-client.ts +495 -0
  58. package/core/embeddings/transformers-local.ts +261 -0
  59. package/core/embeddings.js +4 -0
  60. package/core/error-handling.ts +206 -0
  61. package/core/external +219 -0
  62. package/core/graph/entity-deduplicator.ts +232 -0
  63. package/core/graph/graph-builder.ts +257 -0
  64. package/core/graph/graph-traversal.ts +490 -0
  65. package/core/graph/index.ts +24 -0
  66. package/core/graph/llm-entity-extractor.ts +402 -0
  67. package/core/graph/multi-hop-retrieval.ts +317 -0
  68. package/core/graph/relationship-extractor.ts +465 -0
  69. package/core/hooks/agent-hooks.ts +653 -0
  70. package/core/hooks/auto-tagger.ts +149 -0
  71. package/core/hooks/capture-filter.ts +169 -0
  72. package/core/hot-cache.ts +388 -0
  73. package/core/index.ts +10 -0
  74. package/core/ingestion/agent-memory.ts +167 -0
  75. package/core/ingestion/core-memory.ts +326 -0
  76. package/core/ingestion/learnings.ts +260 -0
  77. package/core/ingestion/signal-engine.ts +266 -0
  78. package/core/integrations/obsidian-vault.ts +197 -0
  79. package/core/layers/generator.ts +115 -0
  80. package/core/lib/db-client.ts +168 -0
  81. package/core/lib/parse-embedding.ts +59 -0
  82. package/core/lib/schemas.ts +102 -0
  83. package/core/lib/types.ts +49 -0
  84. package/core/lib/utils.ts +151 -0
  85. package/core/lib/validation.ts +180 -0
  86. package/core/lifecycle.ts +353 -0
  87. package/core/logger.ts +59 -0
  88. package/core/memory/bridge-discovery.ts +395 -0
  89. package/core/memory/categorizer.ts +390 -0
  90. package/core/memory/conflict-detector.ts +62 -0
  91. package/core/memory/consolidation.ts +372 -0
  92. package/core/memory/context-collector.ts +75 -0
  93. package/core/memory/contradiction-resolver.ts +494 -0
  94. package/core/memory/edit-workflow.ts +174 -0
  95. package/core/memory/entity-extractor.ts +426 -0
  96. package/core/memory/entity-resolver.ts +89 -0
  97. package/core/memory/explain.ts +112 -0
  98. package/core/memory/fact-deriver.ts +300 -0
  99. package/core/memory/fact-extractor.ts +120 -0
  100. package/core/memory/feedback-tracker.ts +200 -0
  101. package/core/memory/hooks.ts +230 -0
  102. package/core/memory/hybrid-retrieval.ts +65 -0
  103. package/core/memory/hybrid-scorer.ts +325 -0
  104. package/core/memory/hybrid-search.ts +748 -0
  105. package/core/memory/importance.ts +319 -0
  106. package/core/memory/index.ts +11 -0
  107. package/core/memory/loader.ts +178 -0
  108. package/core/memory/markdown/markdown-storage.ts +318 -0
  109. package/core/memory/memories.ts +565 -0
  110. package/core/memory/memory-lifecycle.ts +51 -0
  111. package/core/memory/memory-manager.ts +53 -0
  112. package/core/memory/migrate.ts +173 -0
  113. package/core/memory/normalization.ts +30 -0
  114. package/core/memory/path-strengthener.ts +211 -0
  115. package/core/memory/progressive-disclosure.ts +392 -0
  116. package/core/memory/query-processor.ts +130 -0
  117. package/core/memory/query-rewriter.ts +153 -0
  118. package/core/memory/response-analyzer.ts +81 -0
  119. package/core/memory/retrieval-feedback.ts +276 -0
  120. package/core/memory/serialization.ts +83 -0
  121. package/core/memory/stale-cleaner.ts +147 -0
  122. package/core/memory/stats.ts +181 -0
  123. package/core/memory/telemetry.ts +392 -0
  124. package/core/memory/temporal-facts.ts +356 -0
  125. package/core/memory/temporal-parser.ts +477 -0
  126. package/core/memory/trigger-detector.ts +104 -0
  127. package/core/memory/write-gate.ts +288 -0
  128. package/core/places/index.ts +14 -0
  129. package/core/places/memory-places.ts +339 -0
  130. package/core/places/places.ts +406 -0
  131. package/core/places/rules.ts +308 -0
  132. package/core/places/walking.ts +192 -0
  133. package/core/projects +89 -0
  134. package/core/projects.ts +131 -0
  135. package/core/redis.ts +82 -0
  136. package/core/responses.ts +187 -0
  137. package/core/runtime/trust-report.ts +195 -0
  138. package/core/runtime/trust-state.ts +360 -0
  139. package/core/scheduler/cron-scheduler.ts +581 -0
  140. package/core/scheduler/heartbeat.ts +91 -0
  141. package/core/scheduler/index.ts +8 -0
  142. package/core/scheduler/job-runner.ts +197 -0
  143. package/core/search/conversations.ts +166 -0
  144. package/core/search/entities.ts +46 -0
  145. package/core/search/folder-context.ts +154 -0
  146. package/core/search/graph-boost.ts +22 -0
  147. package/core/search/index.ts +4 -0
  148. package/core/search/qmd-wrapper.ts +84 -0
  149. package/core/security/encrypt.ts +51 -0
  150. package/core/security/governance.ts +102 -0
  151. package/core/security/privacy.ts +108 -0
  152. package/core/security/secret-detector.ts +122 -0
  153. package/core/session/auto-load.ts +160 -0
  154. package/core/session/entity-tracker.ts +363 -0
  155. package/core/session/index.ts +7 -0
  156. package/core/session/reference-resolver.ts +158 -0
  157. package/core/session/self-iteration-job.ts +478 -0
  158. package/core/session/session-hooks.ts +69 -0
  159. package/core/session/types.ts +36 -0
  160. package/core/session/working-set.ts +275 -0
  161. package/core/snapshots/cleanup.ts +13 -0
  162. package/core/snapshots/comparison.ts +59 -0
  163. package/core/snapshots/creation.ts +139 -0
  164. package/core/snapshots/retrieval.ts +44 -0
  165. package/core/snapshots/stats.ts +63 -0
  166. package/core/storage/cache.ts +241 -0
  167. package/core/storage/database.ts +23 -0
  168. package/core/summarization/cleanup.ts +13 -0
  169. package/core/summarization/queries.ts +32 -0
  170. package/core/summarization/stats.ts +64 -0
  171. package/core/summarization/strategies.ts +52 -0
  172. package/core/summarization.ts +248 -0
  173. package/core/temporal-facts.ts +244 -0
  174. package/core/tracing/collector.ts +470 -0
  175. package/core/tracing/visualizer.ts +195 -0
  176. package/core/utils/cleanup-operations.ts +50 -0
  177. package/core/utils/content-extraction.ts +95 -0
  178. package/core/utils/filter-builder.ts +56 -0
  179. package/core/utils/history-traversal.ts +63 -0
  180. package/core/utils/memory-operations.ts +56 -0
  181. package/core/utils/query-operations.ts +83 -0
  182. package/core/utils/summarization-helpers.ts +45 -0
  183. package/core/utils/temporal-queries.ts +39 -0
  184. package/core/utils/vector-operations.ts +135 -0
  185. package/core/utils/version-management.ts +74 -0
  186. package/core/worker.ts +324 -0
  187. package/db/adapter.ts +215 -0
  188. package/db/bootstrap.ts +1055 -0
  189. package/db/drizzle/migrations/0000_needy_cerebro.sql +402 -0
  190. package/db/drizzle/migrations/meta/0000_snapshot.json +3451 -0
  191. package/db/drizzle/migrations/meta/_journal.json +13 -0
  192. package/db/drizzle/schema-sqlite.ts +1032 -0
  193. package/db/drizzle/schema.ts +1128 -0
  194. package/db/drizzle.config.ts +12 -0
  195. package/db/index.ts +83 -0
  196. package/db/init.sql +5 -0
  197. package/db/migrations/associations.ts +35 -0
  198. package/db/migrations/beliefs.ts +89 -0
  199. package/db/migrations/core-memory.ts +35 -0
  200. package/db/migrations/fts.ts +59 -0
  201. package/db/migrations/index.ts +54 -0
  202. package/db/migrations/indexes.ts +36 -0
  203. package/db/migrations/learnings.ts +34 -0
  204. package/db/migrations/maintenance.ts +68 -0
  205. package/db/migrations/memories.ts +22 -0
  206. package/db/migrations/memory-places.ts +35 -0
  207. package/db/migrations/places.ts +49 -0
  208. package/db/migrations/projects.ts +21 -0
  209. package/db/migrations/tier-conversion.ts +24 -0
  210. package/db/neon.ts +22 -0
  211. package/db/schema/beliefs.ts +50 -0
  212. package/db/schema/generator.ts +159 -0
  213. package/db/schema/index.ts +58 -0
  214. package/db/schema/learnings.ts +32 -0
  215. package/db/schema/memories.ts +83 -0
  216. package/db/schema/projects.ts +33 -0
  217. package/db/schema.ts +13 -0
  218. package/db/supabase.ts +27 -0
  219. package/dist/config.d.ts +40 -17
  220. package/dist/config.js +150 -198
  221. package/dist/core/adapters/types.d.ts +13 -33
  222. package/dist/core/adapters/types.js +1 -1
  223. package/dist/core/agent-preferences.d.ts +16 -0
  224. package/dist/core/agent-preferences.js +124 -0
  225. package/dist/core/algorithms/safety/safety-checks.d.ts +1 -5
  226. package/dist/core/algorithms/types.d.ts +0 -8
  227. package/dist/core/associations.d.ts +3 -1
  228. package/dist/core/associations.js +37 -1
  229. package/dist/core/beliefs/decay.d.ts +27 -0
  230. package/dist/core/beliefs/decay.js +217 -0
  231. package/dist/core/beliefs/extractor.d.ts +9 -0
  232. package/dist/core/beliefs/extractor.js +113 -0
  233. package/dist/core/beliefs/store.d.ts +46 -0
  234. package/dist/core/beliefs/store.js +466 -0
  235. package/dist/core/beliefs/types.d.ts +28 -0
  236. package/dist/core/beliefs/types.js +2 -0
  237. package/dist/core/commands/mcp-server.d.ts +0 -1
  238. package/dist/core/commands/mcp-server.js +4 -737
  239. package/dist/core/commands/remember.d.ts +24 -0
  240. package/dist/core/commands/remember.js +144 -0
  241. package/dist/core/{toon.d.ts → compression.d.ts} +6 -4
  242. package/dist/core/{toon.js → compression.js} +8 -8
  243. package/dist/core/context/agent-context.js +1 -1
  244. package/dist/core/embeddings/embeddings.d.ts +29 -0
  245. package/dist/core/embeddings/embeddings.js +546 -0
  246. package/dist/core/embeddings/google-multimodal.js +6 -2
  247. package/dist/core/{local-embeddings.d.ts → embeddings/local-embeddings.d.ts} +1 -1
  248. package/dist/core/embeddings/local-embeddings.js +11 -0
  249. package/dist/core/embeddings/qmd-client.js +1 -1
  250. package/dist/core/embeddings/transformers-local.d.ts +64 -0
  251. package/dist/core/embeddings/transformers-local.js +213 -0
  252. package/dist/core/embeddings.d.ts +1 -28
  253. package/dist/core/embeddings.js +2 -453
  254. package/dist/core/graph/entity-deduplicator.d.ts +24 -0
  255. package/dist/core/graph/entity-deduplicator.js +183 -0
  256. package/dist/core/graph/graph-builder.d.ts +46 -0
  257. package/dist/core/graph/graph-builder.js +174 -0
  258. package/dist/core/graph/graph-traversal.d.ts +80 -0
  259. package/dist/core/graph/graph-traversal.js +315 -0
  260. package/dist/core/graph/index.d.ts +19 -0
  261. package/dist/core/graph/index.js +13 -0
  262. package/dist/core/graph/llm-entity-extractor.d.ts +49 -0
  263. package/dist/core/graph/llm-entity-extractor.js +313 -0
  264. package/dist/core/graph/multi-hop-retrieval.d.ts +48 -0
  265. package/dist/core/graph/multi-hop-retrieval.js +215 -0
  266. package/dist/core/graph/relationship-extractor.d.ts +48 -0
  267. package/dist/core/graph/relationship-extractor.js +351 -0
  268. package/dist/core/hooks/agent-hooks.d.ts +10 -1
  269. package/dist/core/hooks/agent-hooks.js +301 -24
  270. package/dist/core/hot-cache.d.ts +86 -0
  271. package/dist/core/hot-cache.js +285 -0
  272. package/dist/core/index.d.ts +9 -9
  273. package/dist/core/index.js +9 -12
  274. package/dist/core/ingestion/core-memory.d.ts +2 -2
  275. package/dist/core/ingestion/core-memory.js +3 -3
  276. package/dist/core/ingestion/learnings.js +3 -0
  277. package/dist/core/ingestion/signal-engine.d.ts +41 -0
  278. package/dist/core/ingestion/signal-engine.js +201 -0
  279. package/dist/core/{obsidian-vault.d.ts → integrations/obsidian-vault.d.ts} +2 -1
  280. package/dist/core/{obsidian-vault.js → integrations/obsidian-vault.js} +69 -7
  281. package/dist/core/lib/parse-embedding.d.ts +9 -0
  282. package/dist/core/lib/parse-embedding.js +58 -0
  283. package/dist/core/lib/schemas.d.ts +57 -54
  284. package/dist/core/lib/types.d.ts +45 -0
  285. package/dist/core/lib/types.js +6 -0
  286. package/dist/core/lib/utils.d.ts +4 -0
  287. package/dist/core/lib/utils.js +55 -0
  288. package/dist/core/lifecycle.d.ts +0 -1
  289. package/dist/core/lifecycle.js +13 -23
  290. package/dist/core/logger.d.ts +1 -0
  291. package/dist/core/logger.js +14 -8
  292. package/dist/core/mcp/tools.d.ts +0 -2
  293. package/dist/core/mcp/tools.js +0 -87
  294. package/dist/core/mcp/types.d.ts +25 -253
  295. package/dist/core/mcp/types.js +2 -2
  296. package/dist/core/memory/categorizer.js +1 -0
  297. package/dist/core/memory/consolidation.js +2 -28
  298. package/dist/core/memory/entity-extractor.d.ts +4 -0
  299. package/dist/core/memory/entity-extractor.js +30 -16
  300. package/dist/core/memory/explain.d.ts +18 -0
  301. package/dist/core/memory/explain.js +92 -0
  302. package/dist/core/memory/fact-deriver.d.ts +31 -0
  303. package/dist/core/memory/fact-deriver.js +236 -0
  304. package/dist/core/memory/hybrid-retrieval.d.ts +14 -16
  305. package/dist/core/memory/hybrid-retrieval.js +25 -127
  306. package/dist/core/memory/hybrid-scorer.js +6 -23
  307. package/dist/core/memory/hybrid-search.d.ts +10 -7
  308. package/dist/core/memory/hybrid-search.js +458 -221
  309. package/dist/core/memory/importance.d.ts +0 -17
  310. package/dist/core/memory/importance.js +1 -58
  311. package/dist/core/memory/index.d.ts +1 -0
  312. package/dist/core/memory/index.js +1 -0
  313. package/dist/core/memory/memories.d.ts +13 -17
  314. package/dist/core/memory/memories.js +78 -75
  315. package/dist/core/memory/memory-lifecycle.d.ts +2 -2
  316. package/dist/core/memory/memory-lifecycle.js +10 -18
  317. package/dist/core/memory/normalization.d.ts +1 -16
  318. package/dist/core/memory/path-strengthener.d.ts +39 -0
  319. package/dist/core/memory/path-strengthener.js +150 -0
  320. package/dist/core/memory/query-processor.js +37 -3
  321. package/dist/core/memory/retrieval-feedback.d.ts +70 -0
  322. package/dist/core/memory/retrieval-feedback.js +213 -0
  323. package/dist/core/memory/stale-cleaner.d.ts +26 -0
  324. package/dist/core/memory/stale-cleaner.js +97 -0
  325. package/dist/core/memory/stats.d.ts +10 -0
  326. package/dist/core/memory/stats.js +8 -3
  327. package/dist/core/memory/trigger-detector.d.ts +8 -1
  328. package/dist/core/memory/trigger-detector.js +42 -5
  329. package/dist/core/places/index.d.ts +1 -1
  330. package/dist/core/places/index.js +1 -1
  331. package/dist/core/places/places.d.ts +13 -13
  332. package/dist/core/places/places.js +27 -27
  333. package/dist/core/places/rules.js +23 -23
  334. package/dist/core/places/walking.d.ts +3 -3
  335. package/dist/core/places/walking.js +7 -7
  336. package/dist/core/projects.js +8 -0
  337. package/dist/core/runtime/trust-report.d.ts +102 -0
  338. package/dist/core/runtime/trust-report.js +107 -0
  339. package/dist/core/runtime/trust-state.d.ts +12 -0
  340. package/dist/core/runtime/trust-state.js +309 -0
  341. package/dist/core/scheduler/cron-scheduler.d.ts +1 -1
  342. package/dist/core/scheduler/cron-scheduler.js +164 -3
  343. package/dist/core/scheduler/job-runner.js +1 -1
  344. package/dist/core/search/qmd-wrapper.d.ts +36 -0
  345. package/dist/core/search/qmd-wrapper.js +58 -0
  346. package/dist/core/session/auto-load.js +28 -3
  347. package/dist/core/session/entity-tracker.d.ts +62 -0
  348. package/dist/core/session/entity-tracker.js +287 -0
  349. package/dist/core/session/reference-resolver.d.ts +26 -0
  350. package/dist/core/session/reference-resolver.js +121 -0
  351. package/dist/core/session/self-iteration-job.d.ts +15 -0
  352. package/dist/core/session/self-iteration-job.js +163 -58
  353. package/dist/core/session/working-set.d.ts +50 -0
  354. package/dist/core/session/working-set.js +212 -0
  355. package/dist/core/snapshots/creation.d.ts +2 -8
  356. package/dist/core/snapshots/creation.js +3 -12
  357. package/dist/core/utils/summarization-helpers.d.ts +0 -4
  358. package/dist/core/utils/summarization-helpers.js +1 -6
  359. package/dist/db/bootstrap.d.ts +2 -0
  360. package/dist/db/bootstrap.js +229 -280
  361. package/dist/db/drizzle/schema-sqlite.d.ts +702 -1
  362. package/dist/db/drizzle/schema-sqlite.js +83 -4
  363. package/dist/db/drizzle/schema.d.ts +653 -1
  364. package/dist/db/drizzle/schema.js +93 -4
  365. package/dist/db/migrations/associations.d.ts +6 -0
  366. package/dist/db/migrations/associations.js +29 -0
  367. package/dist/db/migrations/beliefs.d.ts +10 -0
  368. package/dist/db/migrations/beliefs.js +76 -0
  369. package/dist/db/migrations/core-memory.d.ts +6 -0
  370. package/dist/db/migrations/core-memory.js +29 -0
  371. package/dist/db/migrations/fts.d.ts +6 -0
  372. package/dist/db/migrations/fts.js +52 -0
  373. package/dist/db/migrations/index.d.ts +25 -0
  374. package/dist/db/migrations/index.js +51 -0
  375. package/dist/db/migrations/indexes.d.ts +6 -0
  376. package/dist/db/migrations/indexes.js +30 -0
  377. package/dist/db/migrations/learnings.d.ts +7 -0
  378. package/dist/db/migrations/learnings.js +26 -0
  379. package/dist/db/migrations/maintenance.d.ts +6 -0
  380. package/dist/db/migrations/maintenance.js +61 -0
  381. package/dist/db/migrations/memories.d.ts +7 -0
  382. package/dist/db/migrations/memories.js +16 -0
  383. package/dist/db/migrations/memory-places.d.ts +6 -0
  384. package/dist/db/migrations/memory-places.js +29 -0
  385. package/dist/db/migrations/places.d.ts +6 -0
  386. package/dist/db/migrations/places.js +43 -0
  387. package/dist/db/migrations/projects.d.ts +3 -0
  388. package/dist/db/migrations/projects.js +13 -0
  389. package/dist/db/migrations/tier-conversion.d.ts +7 -0
  390. package/dist/db/migrations/tier-conversion.js +20 -0
  391. package/dist/db/schema/beliefs.d.ts +9 -0
  392. package/dist/db/schema/beliefs.js +46 -0
  393. package/dist/db/schema/generator.d.ts +38 -0
  394. package/dist/db/schema/generator.js +108 -0
  395. package/dist/db/schema/index.d.ts +19 -20
  396. package/dist/db/schema/index.js +25 -79
  397. package/dist/db/schema/learnings.d.ts +7 -0
  398. package/dist/db/schema/learnings.js +30 -0
  399. package/dist/db/schema/memories.d.ts +7 -0
  400. package/dist/db/schema/memories.js +81 -0
  401. package/dist/db/schema/projects.d.ts +4 -0
  402. package/dist/db/schema/projects.js +31 -0
  403. package/dist/packages/mcp/src/index.d.ts +3 -0
  404. package/dist/packages/mcp/src/index.js +733 -0
  405. package/mcp.json.example +8 -11
  406. package/package.json +57 -76
  407. package/packages/cli/package.json +22 -0
  408. package/packages/cli/src/commands/clean.ts +68 -0
  409. package/packages/cli/src/commands/context.ts +79 -0
  410. package/packages/cli/src/commands/doctor.ts +357 -0
  411. package/packages/cli/src/commands/forget.ts +72 -0
  412. package/packages/cli/src/commands/health.ts +36 -0
  413. package/packages/cli/src/commands/inspect.ts +41 -0
  414. package/packages/cli/src/commands/link.ts +50 -0
  415. package/packages/cli/src/commands/migrate.ts +93 -0
  416. package/packages/cli/src/commands/recall.ts +99 -0
  417. package/packages/cli/src/commands/recent.ts +57 -0
  418. package/packages/cli/src/commands/remember.ts +139 -0
  419. package/packages/cli/src/commands/run.ts +58 -0
  420. package/packages/cli/src/commands/stale.ts +43 -0
  421. package/packages/cli/src/commands/stats.ts +42 -0
  422. package/packages/cli/src/index.ts +57 -0
  423. package/packages/cli/tsconfig.json +24 -0
  424. package/packages/mcp/package.json +26 -0
  425. package/packages/mcp/src/index.ts +877 -0
  426. package/packages/mcp/tsconfig.json +20 -0
  427. package/skills/squish-memory/SKILL.md +38 -35
  428. package/skills/squish-memory/{scripts/install.sh → install.sh} +1 -1
  429. package/skills/squish-memory/references/claude-desktop.json +12 -0
  430. package/skills/squish-memory/references/openclaw.json +13 -0
  431. package/skills/squish-memory/references/opencode.json +14 -0
  432. package/config/hooks/claude-code-hooks.json +0 -39
  433. package/config/hooks/cursor-hooks.json +0 -30
  434. package/config/hooks/opencode-hooks.json +0 -30
  435. package/config/hooks/windsurf-hooks.json +0 -30
  436. package/config/mcp-cli-fallback-policy.json +0 -22
  437. package/config/mcp.json +0 -38
  438. package/config/plugin-manifest.json +0 -101
  439. package/config/plugin-manifest.schema.json +0 -244
  440. package/config/plugin.json +0 -32
  441. package/config/remote-memory-policy.json +0 -32
  442. package/core/commands/context-paging.md +0 -51
  443. package/core/commands/context-status.md +0 -22
  444. package/core/commands/context.md +0 -5
  445. package/core/commands/core-memory.md +0 -56
  446. package/core/commands/health.md +0 -5
  447. package/core/commands/init.md +0 -39
  448. package/core/commands/merge.md +0 -113
  449. package/core/commands/recall.md +0 -5
  450. package/core/commands/remember.md +0 -11
  451. package/core/commands/search.md +0 -10
  452. package/dist/core/commands/managed-sync.d.ts +0 -10
  453. package/dist/core/commands/managed-sync.js +0 -64
  454. package/dist/core/external-folder/index.d.ts +0 -102
  455. package/dist/core/external-folder/index.js +0 -294
  456. package/dist/core/namespaces/index.d.ts +0 -71
  457. package/dist/core/namespaces/index.js +0 -305
  458. package/dist/core/namespaces/uri-parser.d.ts +0 -31
  459. package/dist/core/namespaces/uri-parser.js +0 -74
  460. package/dist/core/search/qmd-search.d.ts +0 -61
  461. package/dist/core/search/qmd-search.js +0 -178
  462. package/dist/core/session-hooks/self-iteration-job.d.ts +0 -20
  463. package/dist/core/session-hooks/self-iteration-job.js +0 -282
  464. package/dist/core/session-hooks/session-hooks.d.ts +0 -18
  465. package/dist/core/session-hooks/session-hooks.js +0 -58
  466. package/dist/core/snapshots.d.ts +0 -29
  467. package/dist/core/snapshots.js +0 -220
  468. package/dist/core/sync/qmd-sync.d.ts +0 -94
  469. package/dist/core/sync/qmd-sync.js +0 -201
  470. package/dist/index.d.ts +0 -7
  471. package/dist/index.js +0 -1677
  472. package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
  473. package/dist/webui/server.d.ts +0 -5
  474. package/dist/webui/server.js +0 -642
  475. package/generated/mcp/manifest.json +0 -23
  476. package/generated/mcp/mcp-servers.json +0 -25
  477. package/generated/mcp/mcporter.json +0 -34
  478. package/generated/mcp/openclaw-memory-qmd.json +0 -17
  479. package/generated/mcp/runtime.json +0 -12
  480. package/scripts/README.md +0 -60
  481. package/scripts/build-release.sh +0 -36
  482. package/scripts/check-secrets.js +0 -132
  483. package/scripts/copy-runtime-assets.mjs +0 -26
  484. package/scripts/generate-mcp.mjs +0 -264
  485. package/scripts/github-release.sh +0 -77
  486. package/scripts/init-dirs.mjs +0 -13
  487. package/scripts/install-claude-code.sh +0 -85
  488. package/scripts/install-cursor.sh +0 -56
  489. package/scripts/install-hooks.sh +0 -73
  490. package/scripts/install-interactive.mjs +0 -357
  491. package/scripts/install-opencode.sh +0 -75
  492. package/scripts/install-plugin.mjs +0 -415
  493. package/scripts/install-windsurf.sh +0 -67
  494. package/scripts/remote-preflight.mjs +0 -62
  495. package/scripts/squish-fallback.mjs +0 -132
  496. package/scripts/test-interactive.mjs +0 -131
  497. package/scripts/verify-mcp.mjs +0 -214
  498. package/skills/squish-memory/scripts/install.mjs +0 -335
  499. package/skills/squish-memory/write_skill.js +0 -2
@@ -130,7 +130,7 @@ export const memories = pgTable('memories', {
130
130
  namespacePath: text('namespace_path'),
131
131
  // v1.1.5: Places support (spatial memory organization)
132
132
  placeId: uuid('place_id').references(() => places.id, { onDelete: 'set null' }),
133
- placeLociIndex: integer('place_loci_index'),
133
+ placeSortOrder: integer('place_sort_order'),
134
134
  // v0.4.3: Layer support
135
135
  hasL0Abstract: boolean('has_l0_abstract').default(false),
136
136
  hasL1Overview: boolean('has_l1_overview').default(false),
@@ -255,6 +255,24 @@ export const learnings = pgTable('learnings', {
255
255
  index('learnings_private_idx').on(table.isPrivate),
256
256
  index('learnings_memory_idx').on(table.memoryId),
257
257
  ]);
258
+ /**
259
+ * Agent Preferences - learned agent preferences from learnings
260
+ * Enables agents to evolve and remember preferences over time
261
+ */
262
+ export const agentPreferences = pgTable('agent_preferences', {
263
+ id: uuid('id').primaryKey().defaultRandom(),
264
+ projectId: uuid('project_id').references(() => projects.id, { onDelete: 'cascade' }).notNull(),
265
+ key: text('key').notNull(), // e.g., "prefer_bun", "prefer_typescript"
266
+ value: text('value').notNull(), // e.g., "bun", "true"
267
+ sourceMemoryId: uuid('source_memory_id').references(() => memories.id, { onDelete: 'set null' }),
268
+ confidence: numeric('confidence', { precision: 3, scale: 2 }).default('0.5'), // 0.00 to 1.00
269
+ usageCount: integer('usage_count').default(1),
270
+ lastUpdated: timestamp('last_updated').defaultNow().notNull(),
271
+ createdAt: timestamp('created_at').defaultNow().notNull(),
272
+ }, (table) => [
273
+ index('agent_preferences_project_idx').on(table.projectId),
274
+ index('agent_preferences_key_idx').on(table.key),
275
+ ]);
258
276
  /**
259
277
  * Entities - knowledge graph nodes
260
278
  */
@@ -292,7 +310,7 @@ export const namespaces = pgTable('namespaces', {
292
310
  index('namespaces_parent_idx').on(table.parentId),
293
311
  ]);
294
312
  /**
295
- * Places - Spatial memory organization (Method of Loci)
313
+ * Places - Spatial memory organization
296
314
  */
297
315
  export const places = pgTable('places', {
298
316
  id: uuid('id').primaryKey().defaultRandom(),
@@ -300,7 +318,7 @@ export const places = pgTable('places', {
300
318
  name: text('name').notNull(),
301
319
  placeType: text('place_type').notNull(),
302
320
  parentId: uuid('parent_id').references(() => places.id, { onDelete: 'set null' }),
303
- lociIndex: integer('loci_index').default(0),
321
+ sortOrder: integer('sort_order').default(0),
304
322
  positionX: integer('position_x').default(0),
305
323
  positionY: integer('position_y').default(0),
306
324
  description: text('description'),
@@ -312,7 +330,7 @@ export const places = pgTable('places', {
312
330
  index('places_project_idx').on(table.projectId),
313
331
  index('places_type_idx').on(table.placeType),
314
332
  index('places_parent_idx').on(table.parentId),
315
- index('places_loci_idx').on(table.projectId, table.lociIndex),
333
+ index('places_sort_order_idx').on(table.projectId, table.sortOrder),
316
334
  ]);
317
335
  /**
318
336
  * Memory-Place assignments
@@ -675,6 +693,16 @@ export const learningsRelations = relations(learnings, ({ one }) => ({
675
693
  references: [memories.id],
676
694
  }),
677
695
  }));
696
+ export const agentPreferencesRelations = relations(agentPreferences, ({ one }) => ({
697
+ project: one(projects, {
698
+ fields: [agentPreferences.projectId],
699
+ references: [projects.id],
700
+ }),
701
+ sourceMemory: one(memories, {
702
+ fields: [agentPreferences.sourceMemoryId],
703
+ references: [memories.id],
704
+ }),
705
+ }));
678
706
  export const messagesRelations = relations(messages, ({ one }) => ({
679
707
  conversation: one(conversations, {
680
708
  fields: [messages.conversationId],
@@ -767,4 +795,65 @@ export const memoryHashCacheRelations = relations(memoryHashCache, ({ one }) =>
767
795
  references: [projects.id],
768
796
  }),
769
797
  }));
798
+ // Belief Systems - Derived Beliefs from Memory
799
+ // ============================================================================
800
+ /**
801
+ * Beliefs - Derived semantic beliefs extracted from memories
802
+ * Represents inferred decisions, preferences, constraints, failure causes
803
+ */
804
+ export const beliefs = pgTable('beliefs', {
805
+ id: uuid('id').primaryKey().defaultRandom(),
806
+ projectId: uuid('project_id').references(() => projects.id, { onDelete: 'cascade' }),
807
+ // Belief identification
808
+ beliefType: text('belief_type').notNull(),
809
+ statement: text('statement').notNull(),
810
+ normalizedKey: text('normalized_key').notNull(),
811
+ // Confidence and decay
812
+ confidence: integer('confidence').default(50), // 0-100
813
+ beliefDecayRate: integer('belief_decay_rate').default(30), // days half-life
814
+ lastConfirmedAt: timestamp('last_confirmed_at'),
815
+ sourceCount: integer('source_count').default(1),
816
+ // Status
817
+ status: text('status').default('active'),
818
+ // Context and evidence
819
+ reason: text('reason'),
820
+ context: text('context'),
821
+ evidenceSummary: text('evidence_summary'),
822
+ // Metadata (stores edges, derivation info)
823
+ metadata: jsonb('metadata'),
824
+ createdAt: timestamp('created_at').defaultNow().notNull(),
825
+ updatedAt: timestamp('updated_at').defaultNow().notNull(),
826
+ }, (table) => [
827
+ index('beliefs_project_idx').on(table.projectId),
828
+ index('beliefs_type_idx').on(table.beliefType),
829
+ index('beliefs_status_idx').on(table.status),
830
+ index('beliefs_confidence_idx').on(table.confidence),
831
+ index('beliefs_normalized_key_idx').on(table.normalizedKey),
832
+ ]);
833
+ /**
834
+ * Belief Memory Sources - Links beliefs to source memories
835
+ */
836
+ export const beliefMemorySources = pgTable('belief_memory_sources', {
837
+ id: uuid('id').primaryKey().defaultRandom(),
838
+ beliefId: uuid('belief_id').references(() => beliefs.id, { onDelete: 'cascade' }).notNull(),
839
+ memoryId: uuid('memory_id').references(() => memories.id, { onDelete: 'cascade' }).notNull(),
840
+ createdAt: timestamp('created_at').defaultNow().notNull(),
841
+ }, (table) => [
842
+ index('belief_sources_belief_idx').on(table.beliefId),
843
+ index('belief_sources_memory_idx').on(table.memoryId),
844
+ ]);
845
+ /**
846
+ * Belief Edges - Relationships between beliefs
847
+ */
848
+ export const beliefEdges = pgTable('belief_edges', {
849
+ id: uuid('id').primaryKey().defaultRandom(),
850
+ fromBeliefId: uuid('from_belief_id').references(() => beliefs.id, { onDelete: 'cascade' }).notNull(),
851
+ toBeliefId: uuid('to_belief_id').references(() => beliefs.id, { onDelete: 'cascade' }).notNull(),
852
+ edgeType: text('edge_type').notNull(),
853
+ metadata: jsonb('metadata'),
854
+ createdAt: timestamp('created_at').defaultNow().notNull(),
855
+ }, (table) => [
856
+ index('belief_edges_from_idx').on(table.fromBeliefId),
857
+ index('belief_edges_to_idx').on(table.toBeliefId),
858
+ ]);
770
859
  //# sourceMappingURL=schema.js.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Memory associations table migrations
3
+ */
4
+ import type { Database } from 'better-sqlite3';
5
+ export declare function runAssociationsMigrations(sqlite: Database): Promise<void>;
6
+ //# sourceMappingURL=associations.d.ts.map
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Memory associations table migrations
3
+ */
4
+ import { logger } from '../../core/logger.js';
5
+ export async function runAssociationsMigrations(sqlite) {
6
+ const associationsTableCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='memory_associations'").get();
7
+ if (!associationsTableCheck)
8
+ return;
9
+ const associationsInfo = sqlite.prepare("PRAGMA table_info(memory_associations)").all();
10
+ const existingAssociationsColumns = new Set(associationsInfo.map(col => col.name));
11
+ const associationsMigrations = [
12
+ { col: 'metadata', sql: 'ALTER TABLE memory_associations ADD COLUMN metadata TEXT' },
13
+ ];
14
+ for (const migration of associationsMigrations) {
15
+ if (!existingAssociationsColumns.has(migration.col)) {
16
+ try {
17
+ sqlite.exec(migration.sql);
18
+ logger.info(`Migration: Added column ${migration.col} to memory_associations table`);
19
+ }
20
+ catch (error) {
21
+ const msg = error instanceof Error ? error.message : String(error);
22
+ if (!msg.includes('duplicate column name')) {
23
+ throw new Error(`Migration failed for memory_associations.${migration.col}: ${msg}`);
24
+ }
25
+ }
26
+ }
27
+ }
28
+ }
29
+ //# sourceMappingURL=associations.js.map
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Beliefs table migrations
3
+ * Uses schema definitions to generate migrations
4
+ *
5
+ * For existing databases without beliefs table (pre-v1.2.0), creates the table.
6
+ * Then runs column migrations for all belief-related tables.
7
+ */
8
+ import type { Database } from 'better-sqlite3';
9
+ export declare function runBeliefMigrations(sqlite: Database): Promise<void>;
10
+ //# sourceMappingURL=beliefs.d.ts.map
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Beliefs table migrations
3
+ * Uses schema definitions to generate migrations
4
+ *
5
+ * For existing databases without beliefs table (pre-v1.2.0), creates the table.
6
+ * Then runs column migrations for all belief-related tables.
7
+ */
8
+ import { migrateTable } from '../schema/generator.js';
9
+ import { beliefsSchema, beliefMemorySourcesSchema, beliefEdgesSchema } from '../schema/beliefs.js';
10
+ import { logger } from '../../core/logger.js';
11
+ export async function runBeliefMigrations(sqlite) {
12
+ // Check if beliefs table exists at all (for existing databases pre-v1.2.0)
13
+ const beliefsCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='beliefs'").get();
14
+ if (!beliefsCheck) {
15
+ // Create beliefs table for existing databases upgrading to v1.2.0
16
+ logger.info('Migration: Creating beliefs table for existing database');
17
+ try {
18
+ sqlite.exec(`
19
+ CREATE TABLE IF NOT EXISTS beliefs (
20
+ id TEXT PRIMARY KEY,
21
+ project_id TEXT,
22
+ belief_type TEXT NOT NULL,
23
+ statement TEXT NOT NULL,
24
+ normalized_key TEXT NOT NULL,
25
+ confidence REAL DEFAULT 0.5,
26
+ belief_decay_rate INTEGER DEFAULT 30,
27
+ last_confirmed_at INTEGER,
28
+ source_count INTEGER DEFAULT 1,
29
+ status TEXT DEFAULT 'active',
30
+ reason TEXT,
31
+ context TEXT,
32
+ evidence_summary TEXT,
33
+ metadata TEXT,
34
+ created_at INTEGER,
35
+ updated_at INTEGER,
36
+ UNIQUE(project_id, normalized_key)
37
+ )
38
+ `);
39
+ }
40
+ catch (error) {
41
+ const msg = error instanceof Error ? error.message : String(error);
42
+ logger.warn(`Migration: Could not create beliefs table: ${msg}`);
43
+ }
44
+ }
45
+ const beliefSourcesCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='belief_memory_sources'").get();
46
+ if (!beliefSourcesCheck) {
47
+ sqlite.exec(`
48
+ CREATE TABLE IF NOT EXISTS belief_memory_sources (
49
+ id TEXT PRIMARY KEY,
50
+ belief_id TEXT,
51
+ memory_id TEXT,
52
+ created_at INTEGER,
53
+ UNIQUE(belief_id, memory_id)
54
+ )
55
+ `);
56
+ }
57
+ const beliefEdgesCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='belief_edges'").get();
58
+ if (!beliefEdgesCheck) {
59
+ sqlite.exec(`
60
+ CREATE TABLE IF NOT EXISTS belief_edges (
61
+ id TEXT PRIMARY KEY,
62
+ from_belief_id TEXT,
63
+ to_belief_id TEXT,
64
+ edge_type TEXT NOT NULL,
65
+ metadata TEXT,
66
+ created_at INTEGER,
67
+ UNIQUE(from_belief_id, to_belief_id, edge_type)
68
+ )
69
+ `);
70
+ }
71
+ // Run column migrations - adds missing columns to existing tables
72
+ await migrateTable(sqlite, beliefsSchema);
73
+ await migrateTable(sqlite, beliefMemorySourcesSchema);
74
+ await migrateTable(sqlite, beliefEdgesSchema);
75
+ }
76
+ //# sourceMappingURL=beliefs.js.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Core memory table migrations
3
+ */
4
+ import type { Database } from 'better-sqlite3';
5
+ export declare function runCoreMemoryMigrations(sqlite: Database): Promise<void>;
6
+ //# sourceMappingURL=core-memory.d.ts.map
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Core memory table migrations
3
+ */
4
+ import { logger } from '../../core/logger.js';
5
+ export async function runCoreMemoryMigrations(sqlite) {
6
+ const coreMemoryTableCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='core_memory'").get();
7
+ if (!coreMemoryTableCheck)
8
+ return;
9
+ const coreMemoryInfo = sqlite.prepare("PRAGMA table_info(core_memory)").all();
10
+ const existingCoreMemoryColumns = new Set(coreMemoryInfo.map(col => col.name));
11
+ const coreMemoryMigrations = [
12
+ { col: 'tokens_estimate', sql: 'ALTER TABLE core_memory ADD COLUMN tokens_estimate INTEGER DEFAULT 0 NOT NULL' },
13
+ ];
14
+ for (const migration of coreMemoryMigrations) {
15
+ if (!existingCoreMemoryColumns.has(migration.col)) {
16
+ try {
17
+ sqlite.exec(migration.sql);
18
+ logger.info(`Migration: Added column ${migration.col} to core_memory table`);
19
+ }
20
+ catch (error) {
21
+ const msg = error instanceof Error ? error.message : String(error);
22
+ if (!msg.includes('duplicate column name')) {
23
+ throw new Error(`Migration failed for core_memory.${migration.col}: ${msg}`);
24
+ }
25
+ }
26
+ }
27
+ }
28
+ }
29
+ //# sourceMappingURL=core-memory.js.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * FTS (Full-Text Search) table migrations
3
+ */
4
+ import type { Database } from 'better-sqlite3';
5
+ export declare function runFtsMigrations(sqlite: Database): Promise<void>;
6
+ //# sourceMappingURL=fts.d.ts.map
@@ -0,0 +1,52 @@
1
+ /**
2
+ * FTS (Full-Text Search) table migrations
3
+ */
4
+ import { logger } from '../../core/logger.js';
5
+ export async function runFtsMigrations(sqlite) {
6
+ const ftsTableCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='memories_fts'").get();
7
+ if (!ftsTableCheck)
8
+ return;
9
+ const ftsInfo = sqlite.prepare("PRAGMA table_info(memories_fts)").all();
10
+ const existingFtsColumns = new Set(ftsInfo.map(col => col.name));
11
+ if (!existingFtsColumns.has('summary') && existingFtsColumns.has('tags')) {
12
+ logger.info('Migration: Recreating memories_fts table to add summary column...');
13
+ try {
14
+ sqlite.exec('DROP TRIGGER IF EXISTS memories_ai');
15
+ sqlite.exec('DROP TRIGGER IF EXISTS memories_ad');
16
+ sqlite.exec('DROP TRIGGER IF EXISTS memories_au');
17
+ sqlite.exec('DROP TABLE IF EXISTS memories_fts');
18
+ sqlite.exec(`
19
+ CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(
20
+ content,
21
+ tags,
22
+ summary,
23
+ content='memories',
24
+ content_rowid='rowid'
25
+ );
26
+
27
+ CREATE TRIGGER IF NOT EXISTS memories_ai AFTER INSERT ON memories BEGIN
28
+ INSERT INTO memories_fts(rowid, content, tags, summary)
29
+ VALUES (new.rowid, new.content, COALESCE(new.tags, ''), COALESCE(new.summary, ''));
30
+ END;
31
+
32
+ CREATE TRIGGER IF NOT EXISTS memories_ad AFTER DELETE ON memories BEGIN
33
+ INSERT INTO memories_fts(memories_fts, rowid, content, tags, summary)
34
+ VALUES ('delete', old.rowid, old.content, COALESCE(old.tags, ''), COALESCE(old.summary, ''));
35
+ END;
36
+
37
+ CREATE TRIGGER IF NOT EXISTS memories_au AFTER UPDATE ON memories BEGIN
38
+ INSERT INTO memories_fts(memories_fts, rowid, content, tags, summary)
39
+ VALUES ('delete', old.rowid, old.content, COALESCE(old.tags, ''), COALESCE(old.summary, ''));
40
+ INSERT INTO memories_fts(rowid, content, tags, summary)
41
+ VALUES (new.rowid, new.content, COALESCE(new.tags, ''), COALESCE(new.summary, ''));
42
+ END;
43
+ `);
44
+ logger.info('Migration: Recreated memories_fts table with summary column');
45
+ }
46
+ catch (error) {
47
+ const msg = error instanceof Error ? error.message : String(error);
48
+ logger.warn(`Migration: Could not recreate memories_fts table: ${msg}`);
49
+ }
50
+ }
51
+ }
52
+ //# sourceMappingURL=fts.js.map
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Migration runner - imports and runs all migrations
3
+ *
4
+ * Usage:
5
+ * import { runAllMigrations } from './migrations/index.js';
6
+ * await runAllMigrations(sqlite);
7
+ */
8
+ import type { Database } from 'better-sqlite3';
9
+ /**
10
+ * Run all v1.2.0 migrations in order
11
+ */
12
+ export declare function runAllMigrations(sqlite: Database): Promise<void>;
13
+ export { runPlacesMigrations } from './places.js';
14
+ export { runProjectMigrations } from './projects.js';
15
+ export { runMemoriesMigrations } from './memories.js';
16
+ export { runLearningsMigrations } from './learnings.js';
17
+ export { runCoreMemoryMigrations } from './core-memory.js';
18
+ export { runAssociationsMigrations } from './associations.js';
19
+ export { runMemoryPlacesMigrations } from './memory-places.js';
20
+ export { runIndexMigrations } from './indexes.js';
21
+ export { runFtsMigrations } from './fts.js';
22
+ export { runMaintenanceMigrations } from './maintenance.js';
23
+ export { runBeliefMigrations } from './beliefs.js';
24
+ export { runTierConversion } from './tier-conversion.js';
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Migration runner - imports and runs all migrations
3
+ *
4
+ * Usage:
5
+ * import { runAllMigrations } from './migrations/index.js';
6
+ * await runAllMigrations(sqlite);
7
+ */
8
+ import { runPlacesMigrations } from './places.js';
9
+ import { runProjectMigrations } from './projects.js';
10
+ import { runMemoriesMigrations } from './memories.js';
11
+ import { runLearningsMigrations } from './learnings.js';
12
+ import { runCoreMemoryMigrations } from './core-memory.js';
13
+ import { runAssociationsMigrations } from './associations.js';
14
+ import { runMemoryPlacesMigrations } from './memory-places.js';
15
+ import { runIndexMigrations } from './indexes.js';
16
+ import { runFtsMigrations } from './fts.js';
17
+ import { runMaintenanceMigrations } from './maintenance.js';
18
+ import { runBeliefMigrations } from './beliefs.js';
19
+ import { runTierConversion } from './tier-conversion.js';
20
+ /**
21
+ * Run all v1.2.0 migrations in order
22
+ */
23
+ export async function runAllMigrations(sqlite) {
24
+ // Run each migration in dependency order
25
+ await runProjectMigrations(sqlite);
26
+ await runPlacesMigrations(sqlite);
27
+ await runMemoriesMigrations(sqlite);
28
+ await runLearningsMigrations(sqlite);
29
+ await runCoreMemoryMigrations(sqlite);
30
+ await runAssociationsMigrations(sqlite);
31
+ await runMemoryPlacesMigrations(sqlite);
32
+ await runIndexMigrations(sqlite);
33
+ await runFtsMigrations(sqlite);
34
+ await runMaintenanceMigrations(sqlite);
35
+ await runBeliefMigrations(sqlite);
36
+ await runTierConversion(sqlite);
37
+ }
38
+ // Re-export for direct usage if needed
39
+ export { runPlacesMigrations } from './places.js';
40
+ export { runProjectMigrations } from './projects.js';
41
+ export { runMemoriesMigrations } from './memories.js';
42
+ export { runLearningsMigrations } from './learnings.js';
43
+ export { runCoreMemoryMigrations } from './core-memory.js';
44
+ export { runAssociationsMigrations } from './associations.js';
45
+ export { runMemoryPlacesMigrations } from './memory-places.js';
46
+ export { runIndexMigrations } from './indexes.js';
47
+ export { runFtsMigrations } from './fts.js';
48
+ export { runMaintenanceMigrations } from './maintenance.js';
49
+ export { runBeliefMigrations } from './beliefs.js';
50
+ export { runTierConversion } from './tier-conversion.js';
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Learnings index migrations
3
+ */
4
+ import type { Database } from 'better-sqlite3';
5
+ export declare function runIndexMigrations(sqlite: Database): Promise<void>;
6
+ //# sourceMappingURL=indexes.d.ts.map
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Learnings index migrations
3
+ */
4
+ import { logger } from '../../core/logger.js';
5
+ export async function runIndexMigrations(sqlite) {
6
+ const learningsTableCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='learnings'").get();
7
+ if (!learningsTableCheck)
8
+ return;
9
+ const existingIndexes = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='learnings'").all();
10
+ const existingIndexNames = new Set(existingIndexes.map(idx => idx.name));
11
+ const indexMigrations = [
12
+ { name: 'learnings_folder_idx', sql: 'CREATE INDEX IF NOT EXISTS learnings_folder_idx ON learnings(folder_path)' },
13
+ { name: 'learnings_relevance_idx', sql: 'CREATE INDEX IF NOT EXISTS learnings_relevance_idx ON learnings(relevance_score)' },
14
+ { name: 'learnings_private_idx', sql: 'CREATE INDEX IF NOT EXISTS learnings_private_idx ON learnings(is_private)' },
15
+ { name: 'learnings_memory_idx', sql: 'CREATE INDEX IF NOT EXISTS learnings_memory_idx ON learnings(memory_id)' },
16
+ ];
17
+ for (const idx of indexMigrations) {
18
+ if (!existingIndexNames.has(idx.name)) {
19
+ try {
20
+ sqlite.exec(idx.sql);
21
+ logger.info(`Migration: Added index ${idx.name} to learnings table`);
22
+ }
23
+ catch (error) {
24
+ const msg = error instanceof Error ? error.message : String(error);
25
+ logger.warn(`Index migration note for ${idx.name}: ${msg}`);
26
+ }
27
+ }
28
+ }
29
+ }
30
+ //# sourceMappingURL=indexes.js.map
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Learnings table migrations
3
+ * Uses schema definitions to generate migrations
4
+ */
5
+ import type { Database } from 'better-sqlite3';
6
+ export declare function runLearningsMigrations(sqlite: Database): Promise<void>;
7
+ //# sourceMappingURL=learnings.d.ts.map
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Learnings table migrations
3
+ * Uses schema definitions to generate migrations
4
+ */
5
+ import { migrateTable } from '../schema/generator.js';
6
+ import { learningsSchema } from '../schema/learnings.js';
7
+ import { logger } from '../../core/logger.js';
8
+ export async function runLearningsMigrations(sqlite) {
9
+ // Handle table rename: observations -> learnings
10
+ const observationsCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='observations'").get();
11
+ const learningsCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='learnings'").get();
12
+ if (observationsCheck && !learningsCheck) {
13
+ try {
14
+ sqlite.exec("ALTER TABLE observations RENAME TO learnings");
15
+ logger.info('Migration: Renamed observations table to learnings');
16
+ }
17
+ catch (error) {
18
+ const msg = error instanceof Error ? error.message : String(error);
19
+ logger.warn(`Migration: Could not rename observations to learnings: ${msg}`);
20
+ }
21
+ }
22
+ if (!learningsCheck)
23
+ return;
24
+ await migrateTable(sqlite, learningsSchema);
25
+ }
26
+ //# sourceMappingURL=learnings.js.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Maintenance jobs table migrations
3
+ */
4
+ import type { Database } from 'better-sqlite3';
5
+ export declare function runMaintenanceMigrations(sqlite: Database): Promise<void>;
6
+ //# sourceMappingURL=maintenance.d.ts.map
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Maintenance jobs table migrations
3
+ */
4
+ import { logger } from '../../core/logger.js';
5
+ export async function runMaintenanceMigrations(sqlite) {
6
+ const maintenanceJobsTableCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='maintenance_jobs'").get();
7
+ if (!maintenanceJobsTableCheck)
8
+ return;
9
+ const maintenanceJobsInfo = sqlite.prepare("PRAGMA table_info(maintenance_jobs)").all();
10
+ const existingMaintenanceJobsColumns = new Set(maintenanceJobsInfo.map(col => col.name));
11
+ // Check if table has wrong schema (camelCase columns from bug in earlier version)
12
+ const hasCamelCaseColumns = existingMaintenanceJobsColumns.has('jobName') ||
13
+ existingMaintenanceJobsColumns.has('jobType') ||
14
+ existingMaintenanceJobsColumns.has('cronExpression');
15
+ if (hasCamelCaseColumns) {
16
+ logger.warn('Maintenance jobs table has incorrect schema (camelCase columns). Recreating...');
17
+ try {
18
+ sqlite.exec('DROP TABLE IF EXISTS maintenance_jobs');
19
+ logger.info('Dropped malformed maintenance_jobs table. It will be recreated with correct schema.');
20
+ }
21
+ catch (error) {
22
+ logger.error('Failed to recreate maintenance_jobs table:', error);
23
+ }
24
+ return;
25
+ }
26
+ const maintenanceJobsMigrations = [
27
+ { col: 'schedule', sql: 'ALTER TABLE maintenance_jobs DROP COLUMN schedule' },
28
+ { col: 'cron_expression', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN cron_expression TEXT' },
29
+ { col: 'last_run_at', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN last_run_at INTEGER' },
30
+ { col: 'last_run_duration', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN last_run_duration INTEGER' },
31
+ { col: 'last_run_status', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN last_run_status TEXT' },
32
+ { col: 'last_run_error', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN last_run_error TEXT' },
33
+ { col: 'total_runs', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN total_runs INTEGER DEFAULT 0' },
34
+ { col: 'success_count', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN success_count INTEGER DEFAULT 0' },
35
+ { col: 'failure_count', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN failure_count INTEGER DEFAULT 0' },
36
+ { col: 'job_config', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN job_config TEXT' },
37
+ { col: 'next_run_at', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN next_run_at INTEGER' },
38
+ { col: 'run_count', sql: 'ALTER TABLE maintenance_jobs DROP COLUMN run_count' },
39
+ ];
40
+ for (const migration of maintenanceJobsMigrations) {
41
+ const shouldRun = migration.sql.startsWith('ALTER TABLE maintenance_jobs DROP COLUMN')
42
+ ? existingMaintenanceJobsColumns.has(migration.col)
43
+ : !existingMaintenanceJobsColumns.has(migration.col);
44
+ if (shouldRun) {
45
+ try {
46
+ sqlite.exec(migration.sql);
47
+ logger.info(`Migration: ${migration.col} on maintenance_jobs table`);
48
+ }
49
+ catch (error) {
50
+ const msg = error instanceof Error ? error.message : String(error);
51
+ if (msg.includes('duplicate column name') || msg.includes('no such column')) {
52
+ logger.debug(`Migration skipped for ${migration.col}: ${msg.includes('duplicate column name') ? 'column already exists' : 'column does not exist'}`);
53
+ }
54
+ else {
55
+ throw new Error(`Migration failed for maintenance_jobs.${migration.col}: ${msg}`);
56
+ }
57
+ }
58
+ }
59
+ }
60
+ }
61
+ //# sourceMappingURL=maintenance.js.map
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Memories table migrations
3
+ * Uses schema definitions to generate migrations
4
+ */
5
+ import type { Database } from 'better-sqlite3';
6
+ export declare function runMemoriesMigrations(sqlite: Database): Promise<void>;
7
+ //# sourceMappingURL=memories.d.ts.map
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Memories table migrations
3
+ * Uses schema definitions to generate migrations
4
+ */
5
+ import { migrateTable } from '../schema/generator.js';
6
+ import { memoriesSchema } from '../schema/memories.js';
7
+ import { logger } from '../../core/logger.js';
8
+ export async function runMemoriesMigrations(sqlite) {
9
+ const tableCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='memories'").get();
10
+ if (!tableCheck) {
11
+ logger.debug('Memories table does not exist yet, skipping migrations');
12
+ return;
13
+ }
14
+ await migrateTable(sqlite, memoriesSchema);
15
+ }
16
+ //# sourceMappingURL=memories.js.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Memory places table migrations
3
+ */
4
+ import type { Database } from 'better-sqlite3';
5
+ export declare function runMemoryPlacesMigrations(sqlite: Database): Promise<void>;
6
+ //# sourceMappingURL=memory-places.d.ts.map
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Memory places table migrations
3
+ */
4
+ import { logger } from '../../core/logger.js';
5
+ export async function runMemoryPlacesMigrations(sqlite) {
6
+ const memoryPlacesTableCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='memory_places'").get();
7
+ if (!memoryPlacesTableCheck)
8
+ return;
9
+ const memoryPlacesInfo = sqlite.prepare("PRAGMA table_info(memory_places)").all();
10
+ const existingMemoryPlacesColumns = new Set(memoryPlacesInfo.map(col => col.name));
11
+ const memoryPlacesMigrations = [
12
+ { col: 'place_sort_order', sql: 'ALTER TABLE memory_places ADD COLUMN place_sort_order INTEGER DEFAULT 0' },
13
+ ];
14
+ for (const migration of memoryPlacesMigrations) {
15
+ if (!existingMemoryPlacesColumns.has(migration.col)) {
16
+ try {
17
+ sqlite.exec(migration.sql);
18
+ logger.info(`Migration: Added column ${migration.col} to memory_places table`);
19
+ }
20
+ catch (error) {
21
+ const msg = error instanceof Error ? error.message : String(error);
22
+ if (!msg.includes('duplicate column name')) {
23
+ logger.warn(`Migration note for memory_places.${migration.col}: ${msg}`);
24
+ }
25
+ }
26
+ }
27
+ }
28
+ }
29
+ //# sourceMappingURL=memory-places.js.map