squish-memory 1.1.5 → 1.2.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 (646) 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 +44 -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/{dist/core/algorithms/index.js → core/algorithms/index.ts} +39 -26
  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/{dist/core/lib/db-client.d.ts → core/lib/db-client.ts} +168 -114
  81. package/core/lib/parse-embedding.ts +59 -0
  82. package/{dist/core/lib/schemas.js → core/lib/schemas.ts} +102 -87
  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/{dist/core/memory/index.js → core/memory/index.ts} +11 -10
  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/{dist/core/places/index.js → core/places/index.ts} +12 -12
  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 +590 -0
  140. package/core/scheduler/heartbeat.ts +91 -0
  141. package/{dist/core/scheduler/index.js → core/scheduler/index.ts} +8 -8
  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/{dist/core/search/index.js → core/search/index.ts} +4 -5
  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/{dist/core/session/index.js → core/session/index.ts} +7 -7
  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/{dist/core/snapshots/cleanup.js → core/snapshots/cleanup.ts} +13 -12
  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/{dist/core/summarization/cleanup.js → core/summarization/cleanup.ts} +13 -12
  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/{dist/core/utils/vector-operations.js → core/utils/vector-operations.ts} +135 -129
  185. package/core/utils/version-management.ts +74 -0
  186. package/core/worker.ts +333 -0
  187. package/db/adapter.ts +215 -0
  188. package/{dist/db/bootstrap.js → db/bootstrap.ts} +388 -418
  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/mcp.json.example +8 -11
  220. package/package.json +140 -159
  221. package/packages/cli/package.json +22 -0
  222. package/packages/cli/src/commands/clean.ts +68 -0
  223. package/packages/cli/src/commands/context.ts +79 -0
  224. package/packages/cli/src/commands/doctor.ts +357 -0
  225. package/packages/cli/src/commands/forget.ts +72 -0
  226. package/packages/cli/src/commands/health.ts +36 -0
  227. package/packages/cli/src/commands/inspect.ts +41 -0
  228. package/packages/cli/src/commands/link.ts +50 -0
  229. package/packages/cli/src/commands/migrate.ts +93 -0
  230. package/packages/cli/src/commands/recall.ts +99 -0
  231. package/packages/cli/src/commands/recent.ts +57 -0
  232. package/packages/cli/src/commands/remember.ts +139 -0
  233. package/packages/cli/src/commands/run.ts +58 -0
  234. package/packages/cli/src/commands/stale.ts +43 -0
  235. package/packages/cli/src/commands/stats.ts +42 -0
  236. package/packages/cli/src/index.ts +57 -0
  237. package/packages/cli/tsconfig.json +24 -0
  238. package/packages/mcp/package.json +26 -0
  239. package/packages/mcp/src/index.ts +940 -0
  240. package/packages/mcp/tsconfig.json +20 -0
  241. package/skills/squish-memory/SKILL.md +38 -35
  242. package/skills/squish-memory/{scripts/install.sh → install.sh} +1 -1
  243. package/skills/squish-memory/references/claude-desktop.json +12 -0
  244. package/skills/squish-memory/references/openclaw.json +13 -0
  245. package/skills/squish-memory/references/opencode.json +14 -0
  246. package/config/hooks/claude-code-hooks.json +0 -39
  247. package/config/hooks/cursor-hooks.json +0 -30
  248. package/config/hooks/opencode-hooks.json +0 -30
  249. package/config/hooks/windsurf-hooks.json +0 -30
  250. package/config/mcp-cli-fallback-policy.json +0 -22
  251. package/config/mcp.json +0 -38
  252. package/config/plugin-manifest.json +0 -101
  253. package/config/plugin-manifest.schema.json +0 -244
  254. package/config/plugin.json +0 -32
  255. package/config/remote-memory-policy.json +0 -32
  256. package/core/commands/context-paging.md +0 -51
  257. package/core/commands/context-status.md +0 -22
  258. package/core/commands/context.md +0 -5
  259. package/core/commands/core-memory.md +0 -56
  260. package/core/commands/health.md +0 -5
  261. package/core/commands/init.md +0 -39
  262. package/core/commands/merge.md +0 -113
  263. package/core/commands/recall.md +0 -5
  264. package/core/commands/remember.md +0 -11
  265. package/core/commands/search.md +0 -10
  266. package/dist/config.d.ts +0 -83
  267. package/dist/config.js +0 -242
  268. package/dist/core/adapters/config/claude-code.d.ts +0 -45
  269. package/dist/core/adapters/config/claude-code.js +0 -113
  270. package/dist/core/adapters/config/cursor.d.ts +0 -26
  271. package/dist/core/adapters/config/cursor.js +0 -74
  272. package/dist/core/adapters/config/opencode.d.ts +0 -23
  273. package/dist/core/adapters/config/opencode.js +0 -73
  274. package/dist/core/adapters/config/windsurf.d.ts +0 -26
  275. package/dist/core/adapters/config/windsurf.js +0 -74
  276. package/dist/core/adapters/index.d.ts +0 -45
  277. package/dist/core/adapters/index.js +0 -84
  278. package/dist/core/adapters/scripts/install-adapter.d.ts +0 -19
  279. package/dist/core/adapters/scripts/install-adapter.js +0 -149
  280. package/dist/core/adapters/timeline.d.ts +0 -23
  281. package/dist/core/adapters/timeline.js +0 -88
  282. package/dist/core/adapters/types.d.ts +0 -157
  283. package/dist/core/adapters/types.js +0 -50
  284. package/dist/core/algorithms/analytics/token-estimator.d.ts +0 -50
  285. package/dist/core/algorithms/analytics/token-estimator.js +0 -154
  286. package/dist/core/algorithms/detection/hash-filters.d.ts +0 -47
  287. package/dist/core/algorithms/detection/hash-filters.js +0 -190
  288. package/dist/core/algorithms/detection/semantic-ranker.d.ts +0 -32
  289. package/dist/core/algorithms/detection/semantic-ranker.js +0 -118
  290. package/dist/core/algorithms/detection/two-stage-detector.d.ts +0 -52
  291. package/dist/core/algorithms/detection/two-stage-detector.js +0 -299
  292. package/dist/core/algorithms/handlers/approve-merge.d.ts +0 -22
  293. package/dist/core/algorithms/handlers/approve-merge.js +0 -179
  294. package/dist/core/algorithms/handlers/detect-duplicates.d.ts +0 -47
  295. package/dist/core/algorithms/handlers/detect-duplicates.js +0 -145
  296. package/dist/core/algorithms/handlers/get-stats.d.ts +0 -39
  297. package/dist/core/algorithms/handlers/get-stats.js +0 -88
  298. package/dist/core/algorithms/handlers/list-proposals.d.ts +0 -45
  299. package/dist/core/algorithms/handlers/list-proposals.js +0 -83
  300. package/dist/core/algorithms/handlers/preview-merge.d.ts +0 -39
  301. package/dist/core/algorithms/handlers/preview-merge.js +0 -93
  302. package/dist/core/algorithms/handlers/reject-merge.d.ts +0 -28
  303. package/dist/core/algorithms/handlers/reject-merge.js +0 -69
  304. package/dist/core/algorithms/handlers/reverse-merge.d.ts +0 -21
  305. package/dist/core/algorithms/handlers/reverse-merge.js +0 -121
  306. package/dist/core/algorithms/index.d.ts +0 -21
  307. package/dist/core/algorithms/operations/cache-maintenance.d.ts +0 -12
  308. package/dist/core/algorithms/operations/cache-maintenance.js +0 -157
  309. package/dist/core/algorithms/safety/safety-checks.d.ts +0 -22
  310. package/dist/core/algorithms/safety/safety-checks.js +0 -179
  311. package/dist/core/algorithms/strategies/merge-strategies.d.ts +0 -50
  312. package/dist/core/algorithms/strategies/merge-strategies.js +0 -288
  313. package/dist/core/algorithms/types.d.ts +0 -133
  314. package/dist/core/algorithms/types.js +0 -5
  315. package/dist/core/algorithms/utils/response-builder.d.ts +0 -28
  316. package/dist/core/algorithms/utils/response-builder.js +0 -37
  317. package/dist/core/associations.d.ts +0 -31
  318. package/dist/core/associations.js +0 -248
  319. package/dist/core/autosave.d.ts +0 -19
  320. package/dist/core/autosave.js +0 -16
  321. package/dist/core/commands/managed-sync.d.ts +0 -10
  322. package/dist/core/commands/managed-sync.js +0 -64
  323. package/dist/core/commands/mcp-server.d.ts +0 -3
  324. package/dist/core/commands/mcp-server.js +0 -739
  325. package/dist/core/consolidation.d.ts +0 -37
  326. package/dist/core/consolidation.js +0 -248
  327. package/dist/core/context/agent-context.d.ts +0 -106
  328. package/dist/core/context/agent-context.js +0 -274
  329. package/dist/core/context/context-paging.d.ts +0 -80
  330. package/dist/core/context/context-paging.js +0 -328
  331. package/dist/core/context/context-window.d.ts +0 -40
  332. package/dist/core/context/context-window.js +0 -177
  333. package/dist/core/context/context.d.ts +0 -7
  334. package/dist/core/context/context.js +0 -22
  335. package/dist/core/embeddings/google-multimodal.d.ts +0 -14
  336. package/dist/core/embeddings/google-multimodal.js +0 -142
  337. package/dist/core/embeddings/qmd-client.d.ts +0 -136
  338. package/dist/core/embeddings/qmd-client.js +0 -403
  339. package/dist/core/embeddings.d.ts +0 -29
  340. package/dist/core/embeddings.js +0 -454
  341. package/dist/core/error-handling.d.ts +0 -63
  342. package/dist/core/error-handling.js +0 -173
  343. package/dist/core/external-folder/index.d.ts +0 -102
  344. package/dist/core/external-folder/index.js +0 -294
  345. package/dist/core/hooks/agent-hooks.d.ts +0 -74
  346. package/dist/core/hooks/agent-hooks.js +0 -244
  347. package/dist/core/hooks/auto-tagger.d.ts +0 -19
  348. package/dist/core/hooks/auto-tagger.js +0 -155
  349. package/dist/core/hooks/capture-filter.d.ts +0 -41
  350. package/dist/core/hooks/capture-filter.js +0 -128
  351. package/dist/core/index.d.ts +0 -10
  352. package/dist/core/index.js +0 -14
  353. package/dist/core/ingestion/agent-memory.d.ts +0 -22
  354. package/dist/core/ingestion/agent-memory.js +0 -109
  355. package/dist/core/ingestion/core-memory.d.ts +0 -78
  356. package/dist/core/ingestion/core-memory.js +0 -226
  357. package/dist/core/ingestion/learnings.d.ts +0 -57
  358. package/dist/core/ingestion/learnings.js +0 -202
  359. package/dist/core/layers/generator.d.ts +0 -25
  360. package/dist/core/layers/generator.js +0 -76
  361. package/dist/core/lib/db-client.js +0 -130
  362. package/dist/core/lib/schemas.d.ts +0 -129
  363. package/dist/core/lib/utils.d.ts +0 -14
  364. package/dist/core/lib/utils.js +0 -90
  365. package/dist/core/lib/validation.d.ts +0 -38
  366. package/dist/core/lib/validation.js +0 -151
  367. package/dist/core/lifecycle.d.ts +0 -26
  368. package/dist/core/lifecycle.js +0 -302
  369. package/dist/core/local-embeddings.d.ts +0 -11
  370. package/dist/core/logger.d.ts +0 -16
  371. package/dist/core/logger.js +0 -40
  372. package/dist/core/mcp/client.d.ts +0 -17
  373. package/dist/core/mcp/client.js +0 -101
  374. package/dist/core/mcp/index.d.ts +0 -6
  375. package/dist/core/mcp/index.js +0 -6
  376. package/dist/core/mcp/server.d.ts +0 -18
  377. package/dist/core/mcp/server.js +0 -157
  378. package/dist/core/mcp/standalone-server.d.ts +0 -13
  379. package/dist/core/mcp/standalone-server.js +0 -46
  380. package/dist/core/mcp/tools.d.ts +0 -9
  381. package/dist/core/mcp/tools.js +0 -365
  382. package/dist/core/mcp/types.d.ts +0 -315
  383. package/dist/core/mcp/types.js +0 -48
  384. package/dist/core/memory/bridge-discovery.d.ts +0 -50
  385. package/dist/core/memory/bridge-discovery.js +0 -291
  386. package/dist/core/memory/categorizer.d.ts +0 -27
  387. package/dist/core/memory/categorizer.js +0 -305
  388. package/dist/core/memory/conflict-detector.d.ts +0 -7
  389. package/dist/core/memory/conflict-detector.js +0 -43
  390. package/dist/core/memory/consolidation.d.ts +0 -42
  391. package/dist/core/memory/consolidation.js +0 -303
  392. package/dist/core/memory/context-collector.d.ts +0 -10
  393. package/dist/core/memory/context-collector.js +0 -56
  394. package/dist/core/memory/contradiction-resolver.d.ts +0 -40
  395. package/dist/core/memory/contradiction-resolver.js +0 -368
  396. package/dist/core/memory/edit-workflow.d.ts +0 -19
  397. package/dist/core/memory/edit-workflow.js +0 -120
  398. package/dist/core/memory/entity-extractor.d.ts +0 -33
  399. package/dist/core/memory/entity-extractor.js +0 -336
  400. package/dist/core/memory/entity-resolver.d.ts +0 -23
  401. package/dist/core/memory/entity-resolver.js +0 -64
  402. package/dist/core/memory/fact-extractor.d.ts +0 -24
  403. package/dist/core/memory/fact-extractor.js +0 -89
  404. package/dist/core/memory/feedback-tracker.d.ts +0 -12
  405. package/dist/core/memory/feedback-tracker.js +0 -155
  406. package/dist/core/memory/hooks.d.ts +0 -88
  407. package/dist/core/memory/hooks.js +0 -174
  408. package/dist/core/memory/hybrid-retrieval.d.ts +0 -29
  409. package/dist/core/memory/hybrid-retrieval.js +0 -139
  410. package/dist/core/memory/hybrid-scorer.d.ts +0 -40
  411. package/dist/core/memory/hybrid-scorer.js +0 -284
  412. package/dist/core/memory/hybrid-search.d.ts +0 -20
  413. package/dist/core/memory/hybrid-search.js +0 -359
  414. package/dist/core/memory/importance.d.ts +0 -63
  415. package/dist/core/memory/importance.js +0 -298
  416. package/dist/core/memory/index.d.ts +0 -8
  417. package/dist/core/memory/loader.d.ts +0 -31
  418. package/dist/core/memory/loader.js +0 -141
  419. package/dist/core/memory/markdown/markdown-storage.d.ts +0 -72
  420. package/dist/core/memory/markdown/markdown-storage.js +0 -243
  421. package/dist/core/memory/memories.d.ts +0 -47
  422. package/dist/core/memory/memories.js +0 -449
  423. package/dist/core/memory/memory-lifecycle.d.ts +0 -8
  424. package/dist/core/memory/memory-lifecycle.js +0 -55
  425. package/dist/core/memory/memory-manager.d.ts +0 -15
  426. package/dist/core/memory/memory-manager.js +0 -46
  427. package/dist/core/memory/migrate.d.ts +0 -21
  428. package/dist/core/memory/migrate.js +0 -134
  429. package/dist/core/memory/normalization.d.ts +0 -22
  430. package/dist/core/memory/normalization.js +0 -26
  431. package/dist/core/memory/progressive-disclosure.d.ts +0 -43
  432. package/dist/core/memory/progressive-disclosure.js +0 -280
  433. package/dist/core/memory/query-processor.d.ts +0 -21
  434. package/dist/core/memory/query-processor.js +0 -72
  435. package/dist/core/memory/query-rewriter.d.ts +0 -13
  436. package/dist/core/memory/query-rewriter.js +0 -118
  437. package/dist/core/memory/response-analyzer.d.ts +0 -9
  438. package/dist/core/memory/response-analyzer.js +0 -61
  439. package/dist/core/memory/serialization.d.ts +0 -10
  440. package/dist/core/memory/serialization.js +0 -84
  441. package/dist/core/memory/stats.d.ts +0 -22
  442. package/dist/core/memory/stats.js +0 -138
  443. package/dist/core/memory/telemetry.d.ts +0 -69
  444. package/dist/core/memory/telemetry.js +0 -313
  445. package/dist/core/memory/temporal-facts.d.ts +0 -41
  446. package/dist/core/memory/temporal-facts.js +0 -283
  447. package/dist/core/memory/temporal-parser.d.ts +0 -32
  448. package/dist/core/memory/temporal-parser.js +0 -385
  449. package/dist/core/memory/trigger-detector.d.ts +0 -14
  450. package/dist/core/memory/trigger-detector.js +0 -42
  451. package/dist/core/memory/write-gate.d.ts +0 -54
  452. package/dist/core/memory/write-gate.js +0 -210
  453. package/dist/core/namespaces/index.d.ts +0 -71
  454. package/dist/core/namespaces/index.js +0 -305
  455. package/dist/core/namespaces/uri-parser.d.ts +0 -31
  456. package/dist/core/namespaces/uri-parser.js +0 -74
  457. package/dist/core/obsidian-vault.d.ts +0 -30
  458. package/dist/core/obsidian-vault.js +0 -94
  459. package/dist/core/places/index.d.ts +0 -14
  460. package/dist/core/places/memory-places.d.ts +0 -68
  461. package/dist/core/places/memory-places.js +0 -261
  462. package/dist/core/places/places.d.ts +0 -88
  463. package/dist/core/places/places.js +0 -314
  464. package/dist/core/places/rules.d.ts +0 -74
  465. package/dist/core/places/rules.js +0 -240
  466. package/dist/core/places/walking.d.ts +0 -56
  467. package/dist/core/places/walking.js +0 -121
  468. package/dist/core/projects.d.ts +0 -17
  469. package/dist/core/projects.js +0 -108
  470. package/dist/core/redis.d.ts +0 -11
  471. package/dist/core/redis.js +0 -69
  472. package/dist/core/responses.d.ts +0 -96
  473. package/dist/core/responses.js +0 -122
  474. package/dist/core/scheduler/cron-scheduler.d.ts +0 -32
  475. package/dist/core/scheduler/cron-scheduler.js +0 -332
  476. package/dist/core/scheduler/heartbeat.d.ts +0 -11
  477. package/dist/core/scheduler/heartbeat.js +0 -73
  478. package/dist/core/scheduler/index.d.ts +0 -8
  479. package/dist/core/scheduler/job-runner.d.ts +0 -11
  480. package/dist/core/scheduler/job-runner.js +0 -164
  481. package/dist/core/search/conversations.d.ts +0 -25
  482. package/dist/core/search/conversations.js +0 -110
  483. package/dist/core/search/entities.d.ts +0 -12
  484. package/dist/core/search/entities.js +0 -31
  485. package/dist/core/search/folder-context.d.ts +0 -25
  486. package/dist/core/search/folder-context.js +0 -119
  487. package/dist/core/search/graph-boost.d.ts +0 -7
  488. package/dist/core/search/graph-boost.js +0 -23
  489. package/dist/core/search/index.d.ts +0 -4
  490. package/dist/core/search/qmd-search.d.ts +0 -61
  491. package/dist/core/search/qmd-search.js +0 -178
  492. package/dist/core/security/encrypt.d.ts +0 -6
  493. package/dist/core/security/encrypt.js +0 -47
  494. package/dist/core/security/governance.d.ts +0 -26
  495. package/dist/core/security/governance.js +0 -79
  496. package/dist/core/security/privacy.d.ts +0 -23
  497. package/dist/core/security/privacy.js +0 -82
  498. package/dist/core/security/secret-detector.d.ts +0 -32
  499. package/dist/core/security/secret-detector.js +0 -88
  500. package/dist/core/session/auto-load.d.ts +0 -6
  501. package/dist/core/session/auto-load.js +0 -119
  502. package/dist/core/session/index.d.ts +0 -7
  503. package/dist/core/session/self-iteration-job.d.ts +0 -20
  504. package/dist/core/session/self-iteration-job.js +0 -282
  505. package/dist/core/session/session-hooks.d.ts +0 -18
  506. package/dist/core/session/session-hooks.js +0 -58
  507. package/dist/core/session/types.d.ts +0 -26
  508. package/dist/core/session/types.js +0 -10
  509. package/dist/core/session-hooks/self-iteration-job.d.ts +0 -20
  510. package/dist/core/session-hooks/self-iteration-job.js +0 -282
  511. package/dist/core/session-hooks/session-hooks.d.ts +0 -18
  512. package/dist/core/session-hooks/session-hooks.js +0 -58
  513. package/dist/core/snapshots/cleanup.d.ts +0 -9
  514. package/dist/core/snapshots/comparison.d.ts +0 -19
  515. package/dist/core/snapshots/comparison.js +0 -43
  516. package/dist/core/snapshots/creation.d.ts +0 -19
  517. package/dist/core/snapshots/creation.js +0 -126
  518. package/dist/core/snapshots/retrieval.d.ts +0 -7
  519. package/dist/core/snapshots/retrieval.js +0 -41
  520. package/dist/core/snapshots/stats.d.ts +0 -11
  521. package/dist/core/snapshots/stats.js +0 -52
  522. package/dist/core/snapshots.d.ts +0 -29
  523. package/dist/core/snapshots.js +0 -220
  524. package/dist/core/storage/cache.d.ts +0 -13
  525. package/dist/core/storage/cache.js +0 -202
  526. package/dist/core/storage/database.d.ts +0 -12
  527. package/dist/core/storage/database.js +0 -12
  528. package/dist/core/summarization/cleanup.d.ts +0 -9
  529. package/dist/core/summarization/queries.d.ts +0 -9
  530. package/dist/core/summarization/queries.js +0 -28
  531. package/dist/core/summarization/stats.d.ts +0 -14
  532. package/dist/core/summarization/stats.js +0 -52
  533. package/dist/core/summarization/strategies.d.ts +0 -24
  534. package/dist/core/summarization/strategies.js +0 -28
  535. package/dist/core/summarization.d.ts +0 -37
  536. package/dist/core/summarization.js +0 -188
  537. package/dist/core/sync/qmd-sync.d.ts +0 -94
  538. package/dist/core/sync/qmd-sync.js +0 -201
  539. package/dist/core/temporal-facts.d.ts +0 -54
  540. package/dist/core/temporal-facts.js +0 -193
  541. package/dist/core/toon.d.ts +0 -43
  542. package/dist/core/toon.js +0 -160
  543. package/dist/core/tracing/collector.d.ts +0 -111
  544. package/dist/core/tracing/collector.js +0 -350
  545. package/dist/core/tracing/visualizer.d.ts +0 -32
  546. package/dist/core/tracing/visualizer.js +0 -165
  547. package/dist/core/utils/cleanup-operations.d.ts +0 -13
  548. package/dist/core/utils/cleanup-operations.js +0 -44
  549. package/dist/core/utils/content-extraction.d.ts +0 -19
  550. package/dist/core/utils/content-extraction.js +0 -75
  551. package/dist/core/utils/filter-builder.d.ts +0 -13
  552. package/dist/core/utils/filter-builder.js +0 -44
  553. package/dist/core/utils/history-traversal.d.ts +0 -13
  554. package/dist/core/utils/history-traversal.js +0 -50
  555. package/dist/core/utils/memory-operations.d.ts +0 -17
  556. package/dist/core/utils/memory-operations.js +0 -43
  557. package/dist/core/utils/query-operations.d.ts +0 -18
  558. package/dist/core/utils/query-operations.js +0 -65
  559. package/dist/core/utils/summarization-helpers.d.ts +0 -21
  560. package/dist/core/utils/summarization-helpers.js +0 -38
  561. package/dist/core/utils/temporal-queries.d.ts +0 -13
  562. package/dist/core/utils/temporal-queries.js +0 -27
  563. package/dist/core/utils/vector-operations.d.ts +0 -71
  564. package/dist/core/utils/version-management.d.ts +0 -9
  565. package/dist/core/utils/version-management.js +0 -61
  566. package/dist/core/worker.d.ts +0 -82
  567. package/dist/core/worker.js +0 -272
  568. package/dist/db/adapter.d.ts +0 -7
  569. package/dist/db/adapter.js +0 -175
  570. package/dist/db/bootstrap.d.ts +0 -9
  571. package/dist/db/drizzle/schema-sqlite.d.ts +0 -4837
  572. package/dist/db/drizzle/schema-sqlite.js +0 -684
  573. package/dist/db/drizzle/schema.d.ts +0 -4082
  574. package/dist/db/drizzle/schema.js +0 -770
  575. package/dist/db/drizzle.config.d.ts +0 -3
  576. package/dist/db/drizzle.config.js +0 -12
  577. package/dist/db/index.d.ts +0 -7
  578. package/dist/db/index.js +0 -89
  579. package/dist/db/neon.d.ts +0 -8
  580. package/dist/db/neon.js +0 -20
  581. package/dist/db/schema/index.d.ts +0 -40
  582. package/dist/db/schema/index.js +0 -105
  583. package/dist/db/schema/tables/context-sessions.d.ts +0 -9
  584. package/dist/db/schema/tables/context-sessions.js +0 -37
  585. package/dist/db/schema/tables/conversations.d.ts +0 -9
  586. package/dist/db/schema/tables/conversations.js +0 -47
  587. package/dist/db/schema/tables/core-memory.d.ts +0 -9
  588. package/dist/db/schema/tables/core-memory.js +0 -41
  589. package/dist/db/schema/tables/entities.d.ts +0 -9
  590. package/dist/db/schema/tables/entities.js +0 -39
  591. package/dist/db/schema/tables/entity-relations.d.ts +0 -9
  592. package/dist/db/schema/tables/entity-relations.js +0 -31
  593. package/dist/db/schema/tables/learnings.d.ts +0 -9
  594. package/dist/db/schema/tables/learnings.js +0 -66
  595. package/dist/db/schema/tables/memories.d.ts +0 -9
  596. package/dist/db/schema/tables/memories.js +0 -161
  597. package/dist/db/schema/tables/memory-associations.d.ts +0 -9
  598. package/dist/db/schema/tables/memory-associations.js +0 -39
  599. package/dist/db/schema/tables/memory-hash-cache.d.ts +0 -9
  600. package/dist/db/schema/tables/memory-hash-cache.js +0 -29
  601. package/dist/db/schema/tables/memory-merge-history.d.ts +0 -9
  602. package/dist/db/schema/tables/memory-merge-history.js +0 -33
  603. package/dist/db/schema/tables/memory-merge-proposals.d.ts +0 -9
  604. package/dist/db/schema/tables/memory-merge-proposals.js +0 -39
  605. package/dist/db/schema/tables/messages.d.ts +0 -9
  606. package/dist/db/schema/tables/messages.js +0 -41
  607. package/dist/db/schema/tables/namespaces.d.ts +0 -9
  608. package/dist/db/schema/tables/namespaces.js +0 -37
  609. package/dist/db/schema/tables/projects.d.ts +0 -9
  610. package/dist/db/schema/tables/projects.js +0 -31
  611. package/dist/db/schema/tables/users.d.ts +0 -9
  612. package/dist/db/schema/tables/users.js +0 -27
  613. package/dist/db/schema.d.ts +0 -3
  614. package/dist/db/schema.js +0 -11
  615. package/dist/db/supabase.d.ts +0 -9
  616. package/dist/db/supabase.js +0 -24
  617. package/dist/index.d.ts +0 -7
  618. package/dist/index.js +0 -1677
  619. package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
  620. package/dist/webui/server.d.ts +0 -5
  621. package/dist/webui/server.js +0 -642
  622. package/generated/mcp/manifest.json +0 -23
  623. package/generated/mcp/mcp-servers.json +0 -25
  624. package/generated/mcp/mcporter.json +0 -34
  625. package/generated/mcp/openclaw-memory-qmd.json +0 -17
  626. package/generated/mcp/runtime.json +0 -12
  627. package/scripts/README.md +0 -60
  628. package/scripts/build-release.sh +0 -36
  629. package/scripts/check-secrets.js +0 -132
  630. package/scripts/copy-runtime-assets.mjs +0 -26
  631. package/scripts/generate-mcp.mjs +0 -264
  632. package/scripts/github-release.sh +0 -77
  633. package/scripts/init-dirs.mjs +0 -13
  634. package/scripts/install-claude-code.sh +0 -85
  635. package/scripts/install-cursor.sh +0 -56
  636. package/scripts/install-hooks.sh +0 -73
  637. package/scripts/install-interactive.mjs +0 -357
  638. package/scripts/install-opencode.sh +0 -75
  639. package/scripts/install-plugin.mjs +0 -415
  640. package/scripts/install-windsurf.sh +0 -67
  641. package/scripts/remote-preflight.mjs +0 -62
  642. package/scripts/squish-fallback.mjs +0 -132
  643. package/scripts/test-interactive.mjs +0 -131
  644. package/scripts/verify-mcp.mjs +0 -214
  645. package/skills/squish-memory/scripts/install.mjs +0 -335
  646. package/skills/squish-memory/write_skill.js +0 -2
@@ -0,0 +1,12 @@
1
+ import { defineConfig } from 'drizzle-kit';
2
+
3
+ export default defineConfig({
4
+ schema: './drizzle/schema.ts',
5
+ out: './drizzle/migrations',
6
+ dialect: 'postgresql',
7
+ dbCredentials: {
8
+ url: process.env.DATABASE_URL || 'postgres://squish:squish_dev@localhost:5432/squish',
9
+ },
10
+ verbose: true,
11
+ strict: true,
12
+ });
package/db/index.ts ADDED
@@ -0,0 +1,83 @@
1
+ import { createDb } from './adapter.js';
2
+ import { config } from '../config.js';
3
+ import { logger } from '../core/logger.js';
4
+ import { isDatabaseUnavailableError } from '../core/lib/utils.js';
5
+
6
+ // Use any for db to avoid type conflicts between different drivers
7
+ // The actual type will be determined at runtime based on mode
8
+ let db: any = null;
9
+ let dbError: string | null = null;
10
+
11
+ export async function getDb() {
12
+ if (dbError) {
13
+ throw new Error(dbError);
14
+ }
15
+
16
+ if (!db) {
17
+ try {
18
+ // Priority: remote (user's Supabase/Neon) > team (PostgreSQL) > local (SQLite)
19
+ if (config.isRemoteMode) {
20
+ if (config.remoteBackend === 'neon' && config.neonProjectId && config.neonServiceKey) {
21
+ const { createNeonClient } = await import('./neon.js');
22
+ db = await createNeonClient();
23
+ } else if (config.supabaseUrl && config.supabaseKey) {
24
+ const { createSupabaseClient } = await import('./supabase.js');
25
+ db = await createSupabaseClient();
26
+ } else {
27
+ throw new Error('Remote backend not configured (need SUPABASE_URL or NEON_PROJECT_ID)');
28
+ }
29
+ } else if (config.isTeamMode) {
30
+ // Team mode: PostgreSQL (or Supabase/Neon if explicitly configured)
31
+ if (config.teamBackend === 'supabase' && config.supabaseUrl && config.supabaseKey) {
32
+ const { createSupabaseClient } = await import('./supabase.js');
33
+ db = await createSupabaseClient();
34
+ } else if (config.teamBackend === 'neon' && config.neonProjectId && config.neonServiceKey) {
35
+ const { createNeonClient } = await import('./neon.js');
36
+ db = await createNeonClient();
37
+ } else {
38
+ db = await createDb();
39
+ }
40
+ } else {
41
+ // Local mode: SQLite
42
+ db = await createDb();
43
+ }
44
+ } catch (error) {
45
+ dbError = error instanceof Error ? error.message : 'Database initialization failed';
46
+ throw new Error(dbError);
47
+ }
48
+ }
49
+ return db;
50
+ }
51
+
52
+ export async function checkDatabaseHealth(): Promise<boolean> {
53
+ try {
54
+ const database = await getDb();
55
+
56
+ const dbClient = (database as any).$client ?? database;
57
+ if (dbClient && typeof dbClient.query === 'function') {
58
+ await dbClient.query('SELECT 1');
59
+ } else if (dbClient && typeof dbClient.exec === 'function') {
60
+ dbClient.exec('SELECT 1');
61
+ } else if (dbClient && typeof dbClient.prepare === 'function') {
62
+ const statement = dbClient.prepare('SELECT 1');
63
+ if (typeof statement.get === 'function') {
64
+ statement.get();
65
+ } else if (typeof statement.step === 'function') {
66
+ statement.step();
67
+ }
68
+ if (typeof statement.free === 'function') {
69
+ statement.free();
70
+ }
71
+ }
72
+ return true;
73
+ } catch (error: any) {
74
+ if (isDatabaseUnavailableError(error)) {
75
+ return false;
76
+ }
77
+ logger.error('Database health check failed', error);
78
+ return false;
79
+ }
80
+ }
81
+
82
+ export { config };
83
+ export { createDb };
package/db/init.sql ADDED
@@ -0,0 +1,5 @@
1
+ -- Enable pgvector extension
2
+ CREATE EXTENSION IF NOT EXISTS vector;
3
+
4
+ -- Enable full-text search
5
+ CREATE EXTENSION IF NOT EXISTS pg_trgm;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Memory associations table migrations
3
+ */
4
+
5
+ import type { Database } from 'better-sqlite3';
6
+ import { logger } from '../../core/logger.js';
7
+
8
+ export async function runAssociationsMigrations(sqlite: Database): Promise<void> {
9
+ const associationsTableCheck = sqlite.prepare(
10
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='memory_associations'"
11
+ ).get() as { name: string } | undefined;
12
+
13
+ if (!associationsTableCheck) return;
14
+
15
+ const associationsInfo = sqlite.prepare("PRAGMA table_info(memory_associations)").all() as Array<{ name: string }>;
16
+ const existingAssociationsColumns = new Set(associationsInfo.map(col => col.name));
17
+
18
+ const associationsMigrations = [
19
+ { col: 'metadata', sql: 'ALTER TABLE memory_associations ADD COLUMN metadata TEXT' },
20
+ ];
21
+
22
+ for (const migration of associationsMigrations) {
23
+ if (!existingAssociationsColumns.has(migration.col)) {
24
+ try {
25
+ sqlite.exec(migration.sql);
26
+ logger.info(`Migration: Added column ${migration.col} to memory_associations table`);
27
+ } catch (error) {
28
+ const msg = error instanceof Error ? error.message : String(error);
29
+ if (!msg.includes('duplicate column name')) {
30
+ throw new Error(`Migration failed for memory_associations.${migration.col}: ${msg}`);
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,89 @@
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
+
9
+ import type { Database } from 'better-sqlite3';
10
+ import { migrateTable } from '../schema/generator.js';
11
+ import { beliefsSchema, beliefMemorySourcesSchema, beliefEdgesSchema } from '../schema/beliefs.js';
12
+ import { logger } from '../../core/logger.js';
13
+
14
+ export async function runBeliefMigrations(sqlite: Database): Promise<void> {
15
+ // Check if beliefs table exists at all (for existing databases pre-v1.2.0)
16
+ const beliefsCheck = sqlite.prepare(
17
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='beliefs'"
18
+ ).get() as { name: string } | undefined;
19
+
20
+ if (!beliefsCheck) {
21
+ // Create beliefs table for existing databases upgrading to v1.2.0
22
+ logger.info('Migration: Creating beliefs table for existing database');
23
+ try {
24
+ sqlite.exec(`
25
+ CREATE TABLE IF NOT EXISTS beliefs (
26
+ id TEXT PRIMARY KEY,
27
+ project_id TEXT,
28
+ belief_type TEXT NOT NULL,
29
+ statement TEXT NOT NULL,
30
+ normalized_key TEXT NOT NULL,
31
+ confidence REAL DEFAULT 0.5,
32
+ belief_decay_rate INTEGER DEFAULT 30,
33
+ last_confirmed_at INTEGER,
34
+ source_count INTEGER DEFAULT 1,
35
+ status TEXT DEFAULT 'active',
36
+ reason TEXT,
37
+ context TEXT,
38
+ evidence_summary TEXT,
39
+ metadata TEXT,
40
+ created_at INTEGER,
41
+ updated_at INTEGER,
42
+ UNIQUE(project_id, normalized_key)
43
+ )
44
+ `);
45
+ } catch (error) {
46
+ const msg = error instanceof Error ? error.message : String(error);
47
+ logger.warn(`Migration: Could not create beliefs table: ${msg}`);
48
+ }
49
+ }
50
+
51
+ const beliefSourcesCheck = sqlite.prepare(
52
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='belief_memory_sources'"
53
+ ).get() as { name: string } | undefined;
54
+
55
+ if (!beliefSourcesCheck) {
56
+ sqlite.exec(`
57
+ CREATE TABLE IF NOT EXISTS belief_memory_sources (
58
+ id TEXT PRIMARY KEY,
59
+ belief_id TEXT,
60
+ memory_id TEXT,
61
+ created_at INTEGER,
62
+ UNIQUE(belief_id, memory_id)
63
+ )
64
+ `);
65
+ }
66
+
67
+ const beliefEdgesCheck = sqlite.prepare(
68
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='belief_edges'"
69
+ ).get() as { name: string } | undefined;
70
+
71
+ if (!beliefEdgesCheck) {
72
+ sqlite.exec(`
73
+ CREATE TABLE IF NOT EXISTS belief_edges (
74
+ id TEXT PRIMARY KEY,
75
+ from_belief_id TEXT,
76
+ to_belief_id TEXT,
77
+ edge_type TEXT NOT NULL,
78
+ metadata TEXT,
79
+ created_at INTEGER,
80
+ UNIQUE(from_belief_id, to_belief_id, edge_type)
81
+ )
82
+ `);
83
+ }
84
+
85
+ // Run column migrations - adds missing columns to existing tables
86
+ await migrateTable(sqlite, beliefsSchema);
87
+ await migrateTable(sqlite, beliefMemorySourcesSchema);
88
+ await migrateTable(sqlite, beliefEdgesSchema);
89
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Core memory table migrations
3
+ */
4
+
5
+ import type { Database } from 'better-sqlite3';
6
+ import { logger } from '../../core/logger.js';
7
+
8
+ export async function runCoreMemoryMigrations(sqlite: Database): Promise<void> {
9
+ const coreMemoryTableCheck = sqlite.prepare(
10
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='core_memory'"
11
+ ).get() as { name: string } | undefined;
12
+
13
+ if (!coreMemoryTableCheck) return;
14
+
15
+ const coreMemoryInfo = sqlite.prepare("PRAGMA table_info(core_memory)").all() as Array<{ name: string }>;
16
+ const existingCoreMemoryColumns = new Set(coreMemoryInfo.map(col => col.name));
17
+
18
+ const coreMemoryMigrations = [
19
+ { col: 'tokens_estimate', sql: 'ALTER TABLE core_memory ADD COLUMN tokens_estimate INTEGER DEFAULT 0 NOT NULL' },
20
+ ];
21
+
22
+ for (const migration of coreMemoryMigrations) {
23
+ if (!existingCoreMemoryColumns.has(migration.col)) {
24
+ try {
25
+ sqlite.exec(migration.sql);
26
+ logger.info(`Migration: Added column ${migration.col} to core_memory table`);
27
+ } catch (error) {
28
+ const msg = error instanceof Error ? error.message : String(error);
29
+ if (!msg.includes('duplicate column name')) {
30
+ throw new Error(`Migration failed for core_memory.${migration.col}: ${msg}`);
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,59 @@
1
+ /**
2
+ * FTS (Full-Text Search) table migrations
3
+ */
4
+
5
+ import type { Database } from 'better-sqlite3';
6
+ import { logger } from '../../core/logger.js';
7
+
8
+ export async function runFtsMigrations(sqlite: Database): Promise<void> {
9
+ const ftsTableCheck = sqlite.prepare(
10
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='memories_fts'"
11
+ ).get() as { name: string } | undefined;
12
+
13
+ if (!ftsTableCheck) return;
14
+
15
+ const ftsInfo = sqlite.prepare("PRAGMA table_info(memories_fts)").all() as Array<{ name: string }>;
16
+ const existingFtsColumns = new Set(ftsInfo.map(col => col.name));
17
+
18
+ if (!existingFtsColumns.has('summary') && existingFtsColumns.has('tags')) {
19
+ logger.info('Migration: Recreating memories_fts table to add summary column...');
20
+ try {
21
+ sqlite.exec('DROP TRIGGER IF EXISTS memories_ai');
22
+ sqlite.exec('DROP TRIGGER IF EXISTS memories_ad');
23
+ sqlite.exec('DROP TRIGGER IF EXISTS memories_au');
24
+ sqlite.exec('DROP TABLE IF EXISTS memories_fts');
25
+
26
+ sqlite.exec(`
27
+ CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(
28
+ content,
29
+ tags,
30
+ summary,
31
+ content='memories',
32
+ content_rowid='rowid'
33
+ );
34
+
35
+ CREATE TRIGGER IF NOT EXISTS memories_ai AFTER INSERT ON memories BEGIN
36
+ INSERT INTO memories_fts(rowid, content, tags, summary)
37
+ VALUES (new.rowid, new.content, COALESCE(new.tags, ''), COALESCE(new.summary, ''));
38
+ END;
39
+
40
+ CREATE TRIGGER IF NOT EXISTS memories_ad AFTER DELETE ON memories BEGIN
41
+ INSERT INTO memories_fts(memories_fts, rowid, content, tags, summary)
42
+ VALUES ('delete', old.rowid, old.content, COALESCE(old.tags, ''), COALESCE(old.summary, ''));
43
+ END;
44
+
45
+ CREATE TRIGGER IF NOT EXISTS memories_au AFTER UPDATE ON memories BEGIN
46
+ INSERT INTO memories_fts(memories_fts, rowid, content, tags, summary)
47
+ VALUES ('delete', old.rowid, old.content, COALESCE(old.tags, ''), COALESCE(old.summary, ''));
48
+ INSERT INTO memories_fts(rowid, content, tags, summary)
49
+ VALUES (new.rowid, new.content, COALESCE(new.tags, ''), COALESCE(new.summary, ''));
50
+ END;
51
+ `);
52
+
53
+ logger.info('Migration: Recreated memories_fts table with summary column');
54
+ } catch (error) {
55
+ const msg = error instanceof Error ? error.message : String(error);
56
+ logger.warn(`Migration: Could not recreate memories_fts table: ${msg}`);
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,54 @@
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
+
9
+ import type { Database } from 'better-sqlite3';
10
+ import { runPlacesMigrations } from './places.js';
11
+ import { runProjectMigrations } from './projects.js';
12
+ import { runMemoriesMigrations } from './memories.js';
13
+ import { runLearningsMigrations } from './learnings.js';
14
+ import { runCoreMemoryMigrations } from './core-memory.js';
15
+ import { runAssociationsMigrations } from './associations.js';
16
+ import { runMemoryPlacesMigrations } from './memory-places.js';
17
+ import { runIndexMigrations } from './indexes.js';
18
+ import { runFtsMigrations } from './fts.js';
19
+ import { runMaintenanceMigrations } from './maintenance.js';
20
+ import { runBeliefMigrations } from './beliefs.js';
21
+ import { runTierConversion } from './tier-conversion.js';
22
+
23
+ /**
24
+ * Run all v1.2.0 migrations in order
25
+ */
26
+ export async function runAllMigrations(sqlite: Database): Promise<void> {
27
+ // Run each migration in dependency order
28
+ await runProjectMigrations(sqlite);
29
+ await runPlacesMigrations(sqlite);
30
+ await runMemoriesMigrations(sqlite);
31
+ await runLearningsMigrations(sqlite);
32
+ await runCoreMemoryMigrations(sqlite);
33
+ await runAssociationsMigrations(sqlite);
34
+ await runMemoryPlacesMigrations(sqlite);
35
+ await runIndexMigrations(sqlite);
36
+ await runFtsMigrations(sqlite);
37
+ await runMaintenanceMigrations(sqlite);
38
+ await runBeliefMigrations(sqlite);
39
+ await runTierConversion(sqlite);
40
+ }
41
+
42
+ // Re-export for direct usage if needed
43
+ export { runPlacesMigrations } from './places.js';
44
+ export { runProjectMigrations } from './projects.js';
45
+ export { runMemoriesMigrations } from './memories.js';
46
+ export { runLearningsMigrations } from './learnings.js';
47
+ export { runCoreMemoryMigrations } from './core-memory.js';
48
+ export { runAssociationsMigrations } from './associations.js';
49
+ export { runMemoryPlacesMigrations } from './memory-places.js';
50
+ export { runIndexMigrations } from './indexes.js';
51
+ export { runFtsMigrations } from './fts.js';
52
+ export { runMaintenanceMigrations } from './maintenance.js';
53
+ export { runBeliefMigrations } from './beliefs.js';
54
+ export { runTierConversion } from './tier-conversion.js';
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Learnings index migrations
3
+ */
4
+
5
+ import type { Database } from 'better-sqlite3';
6
+ import { logger } from '../../core/logger.js';
7
+
8
+ export async function runIndexMigrations(sqlite: Database): Promise<void> {
9
+ const learningsTableCheck = sqlite.prepare(
10
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='learnings'"
11
+ ).get() as { name: string } | undefined;
12
+
13
+ if (!learningsTableCheck) return;
14
+
15
+ const existingIndexes = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='learnings'").all() as Array<{ name: string }>;
16
+ const existingIndexNames = new Set(existingIndexes.map(idx => idx.name));
17
+
18
+ const indexMigrations = [
19
+ { name: 'learnings_folder_idx', sql: 'CREATE INDEX IF NOT EXISTS learnings_folder_idx ON learnings(folder_path)' },
20
+ { name: 'learnings_relevance_idx', sql: 'CREATE INDEX IF NOT EXISTS learnings_relevance_idx ON learnings(relevance_score)' },
21
+ { name: 'learnings_private_idx', sql: 'CREATE INDEX IF NOT EXISTS learnings_private_idx ON learnings(is_private)' },
22
+ { name: 'learnings_memory_idx', sql: 'CREATE INDEX IF NOT EXISTS learnings_memory_idx ON learnings(memory_id)' },
23
+ ];
24
+
25
+ for (const idx of indexMigrations) {
26
+ if (!existingIndexNames.has(idx.name)) {
27
+ try {
28
+ sqlite.exec(idx.sql);
29
+ logger.info(`Migration: Added index ${idx.name} to learnings table`);
30
+ } catch (error) {
31
+ const msg = error instanceof Error ? error.message : String(error);
32
+ logger.warn(`Index migration note for ${idx.name}: ${msg}`);
33
+ }
34
+ }
35
+ }
36
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Learnings table migrations
3
+ * Uses schema definitions to generate migrations
4
+ */
5
+
6
+ import type { Database } from 'better-sqlite3';
7
+ import { migrateTable } from '../schema/generator.js';
8
+ import { learningsSchema } from '../schema/learnings.js';
9
+ import { logger } from '../../core/logger.js';
10
+
11
+ export async function runLearningsMigrations(sqlite: Database): Promise<void> {
12
+ // Handle table rename: observations -> learnings
13
+ const observationsCheck = sqlite.prepare(
14
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='observations'"
15
+ ).get() as { name: string } | undefined;
16
+
17
+ const learningsCheck = sqlite.prepare(
18
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='learnings'"
19
+ ).get() as { name: string } | undefined;
20
+
21
+ if (observationsCheck && !learningsCheck) {
22
+ try {
23
+ sqlite.exec("ALTER TABLE observations RENAME TO learnings");
24
+ logger.info('Migration: Renamed observations table to learnings');
25
+ } catch (error) {
26
+ const msg = error instanceof Error ? error.message : String(error);
27
+ logger.warn(`Migration: Could not rename observations to learnings: ${msg}`);
28
+ }
29
+ }
30
+
31
+ if (!learningsCheck) return;
32
+
33
+ await migrateTable(sqlite, learningsSchema);
34
+ }
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Maintenance jobs table migrations
3
+ */
4
+
5
+ import type { Database } from 'better-sqlite3';
6
+ import { logger } from '../../core/logger.js';
7
+
8
+ export async function runMaintenanceMigrations(sqlite: Database): Promise<void> {
9
+ const maintenanceJobsTableCheck = sqlite.prepare(
10
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='maintenance_jobs'"
11
+ ).get() as { name: string } | undefined;
12
+
13
+ if (!maintenanceJobsTableCheck) return;
14
+
15
+ const maintenanceJobsInfo = sqlite.prepare("PRAGMA table_info(maintenance_jobs)").all() as Array<{ name: string }>;
16
+ const existingMaintenanceJobsColumns = new Set(maintenanceJobsInfo.map(col => col.name));
17
+
18
+ // Check if table has wrong schema (camelCase columns from bug in earlier version)
19
+ const hasCamelCaseColumns = existingMaintenanceJobsColumns.has('jobName') ||
20
+ existingMaintenanceJobsColumns.has('jobType') ||
21
+ existingMaintenanceJobsColumns.has('cronExpression');
22
+
23
+ if (hasCamelCaseColumns) {
24
+ logger.warn('Maintenance jobs table has incorrect schema (camelCase columns). Recreating...');
25
+ try {
26
+ sqlite.exec('DROP TABLE IF EXISTS maintenance_jobs');
27
+ logger.info('Dropped malformed maintenance_jobs table. It will be recreated with correct schema.');
28
+ } catch (error) {
29
+ logger.error('Failed to recreate maintenance_jobs table:', error);
30
+ }
31
+ return;
32
+ }
33
+
34
+ const maintenanceJobsMigrations = [
35
+ { col: 'schedule', sql: 'ALTER TABLE maintenance_jobs DROP COLUMN schedule' },
36
+ { col: 'cron_expression', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN cron_expression TEXT' },
37
+ { col: 'last_run_at', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN last_run_at INTEGER' },
38
+ { col: 'last_run_duration', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN last_run_duration INTEGER' },
39
+ { col: 'last_run_status', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN last_run_status TEXT' },
40
+ { col: 'last_run_error', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN last_run_error TEXT' },
41
+ { col: 'total_runs', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN total_runs INTEGER DEFAULT 0' },
42
+ { col: 'success_count', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN success_count INTEGER DEFAULT 0' },
43
+ { col: 'failure_count', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN failure_count INTEGER DEFAULT 0' },
44
+ { col: 'job_config', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN job_config TEXT' },
45
+ { col: 'next_run_at', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN next_run_at INTEGER' },
46
+ { col: 'run_count', sql: 'ALTER TABLE maintenance_jobs DROP COLUMN run_count' },
47
+ ];
48
+
49
+ for (const migration of maintenanceJobsMigrations) {
50
+ const shouldRun = migration.sql.startsWith('ALTER TABLE maintenance_jobs DROP COLUMN')
51
+ ? existingMaintenanceJobsColumns.has(migration.col)
52
+ : !existingMaintenanceJobsColumns.has(migration.col);
53
+
54
+ if (shouldRun) {
55
+ try {
56
+ sqlite.exec(migration.sql);
57
+ logger.info(`Migration: ${migration.col} on maintenance_jobs table`);
58
+ } catch (error) {
59
+ const msg = error instanceof Error ? error.message : String(error);
60
+ if (msg.includes('duplicate column name') || msg.includes('no such column')) {
61
+ logger.debug(`Migration skipped for ${migration.col}: ${msg.includes('duplicate column name') ? 'column already exists' : 'column does not exist'}`);
62
+ } else {
63
+ throw new Error(`Migration failed for maintenance_jobs.${migration.col}: ${msg}`);
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Memories table migrations
3
+ * Uses schema definitions to generate migrations
4
+ */
5
+
6
+ import type { Database } from 'better-sqlite3';
7
+ import { migrateTable } from '../schema/generator.js';
8
+ import { memoriesSchema } from '../schema/memories.js';
9
+ import { logger } from '../../core/logger.js';
10
+
11
+ export async function runMemoriesMigrations(sqlite: Database): Promise<void> {
12
+ const tableCheck = sqlite.prepare(
13
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='memories'"
14
+ ).get() as { name: string } | undefined;
15
+
16
+ if (!tableCheck) {
17
+ logger.debug('Memories table does not exist yet, skipping migrations');
18
+ return;
19
+ }
20
+
21
+ await migrateTable(sqlite, memoriesSchema);
22
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Memory places table migrations
3
+ */
4
+
5
+ import type { Database } from 'better-sqlite3';
6
+ import { logger } from '../../core/logger.js';
7
+
8
+ export async function runMemoryPlacesMigrations(sqlite: Database): Promise<void> {
9
+ const memoryPlacesTableCheck = sqlite.prepare(
10
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='memory_places'"
11
+ ).get() as { name: string } | undefined;
12
+
13
+ if (!memoryPlacesTableCheck) return;
14
+
15
+ const memoryPlacesInfo = sqlite.prepare("PRAGMA table_info(memory_places)").all() as Array<{ name: string }>;
16
+ const existingMemoryPlacesColumns = new Set(memoryPlacesInfo.map(col => col.name));
17
+
18
+ const memoryPlacesMigrations = [
19
+ { col: 'place_sort_order', sql: 'ALTER TABLE memory_places ADD COLUMN place_sort_order INTEGER DEFAULT 0' },
20
+ ];
21
+
22
+ for (const migration of memoryPlacesMigrations) {
23
+ if (!existingMemoryPlacesColumns.has(migration.col)) {
24
+ try {
25
+ sqlite.exec(migration.sql);
26
+ logger.info(`Migration: Added column ${migration.col} to memory_places table`);
27
+ } catch (error) {
28
+ const msg = error instanceof Error ? error.message : String(error);
29
+ if (!msg.includes('duplicate column name')) {
30
+ logger.warn(`Migration note for memory_places.${migration.col}: ${msg}`);
31
+ }
32
+ }
33
+ }
34
+ }
35
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Places table migrations
3
+ */
4
+
5
+ import type { Database } from 'better-sqlite3';
6
+ import { logger } from '../../core/logger.js';
7
+
8
+ export async function runPlacesMigrations(sqlite: Database): Promise<void> {
9
+ const placesTableCheck = sqlite.prepare(
10
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='places'"
11
+ ).get() as { name: string } | undefined;
12
+
13
+ if (!placesTableCheck) return;
14
+
15
+ const placesInfo = sqlite.prepare("PRAGMA table_info(places)").all() as Array<{ name: string }>;
16
+ const placesColumns = new Set(placesInfo.map(col => col.name));
17
+
18
+ const placesMigrations = [
19
+ { col: 'sort_order', sql: 'ALTER TABLE places ADD COLUMN sort_order INTEGER DEFAULT 0' },
20
+ { col: 'loci_index', sql: '' },
21
+ ];
22
+
23
+ for (const migration of placesMigrations) {
24
+ if (migration.col === 'loci_index') {
25
+ if (placesColumns.has('loci_index') && !placesColumns.has('sort_order')) {
26
+ try {
27
+ sqlite.exec("UPDATE places SET sort_order = loci_index WHERE sort_order = 0 OR sort_order IS NULL");
28
+ logger.info('Migration: Copied loci_index data to sort_order');
29
+ } catch (error) {
30
+ const errMsg = error instanceof Error ? error.message : String(error);
31
+ logger.warn(`Migration: Could not copy loci_index data: ${errMsg}`);
32
+ }
33
+ }
34
+ continue;
35
+ }
36
+
37
+ if (!placesColumns.has(migration.col)) {
38
+ try {
39
+ sqlite.exec(migration.sql);
40
+ logger.info(`Migration: Added column ${migration.col} to places table`);
41
+ } catch (error) {
42
+ const msg = error instanceof Error ? error.message : String(error);
43
+ if (!msg.includes('duplicate column name')) {
44
+ throw new Error(`Migration failed for places.${migration.col}: ${msg}`);
45
+ }
46
+ }
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,21 @@
1
+ import type { Database } from 'better-sqlite3';
2
+ import { migrateTable } from '../schema/generator.js';
3
+ import { projectsSchema, usersSchema } from '../schema/projects.js';
4
+
5
+ export async function runProjectMigrations(sqlite: Database): Promise<void> {
6
+ const projectCheck = sqlite.prepare(
7
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='projects'"
8
+ ).get() as { name: string } | undefined;
9
+
10
+ if (projectCheck) {
11
+ await migrateTable(sqlite, projectsSchema);
12
+ }
13
+
14
+ const userCheck = sqlite.prepare(
15
+ "SELECT name FROM sqlite_master WHERE type='table' AND name='users'"
16
+ ).get() as { name: string } | undefined;
17
+
18
+ if (userCheck) {
19
+ await migrateTable(sqlite, usersSchema);
20
+ }
21
+ }