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,357 @@
1
+ /**
2
+ * Squish Doctor Command
3
+ *
4
+ * Diagnose and fix common Squish issues automatically.
5
+ *
6
+ * Usage:
7
+ * squish doctor # Run diagnostics
8
+ * squish doctor --fix # Auto-fix issues
9
+ * squish doctor --migrate # Force run database migrations
10
+ */
11
+
12
+ import { Command } from 'commander';
13
+ import fs from 'node:fs';
14
+ import path from 'node:path';
15
+ import { getDataDir, config } from '../../../../config.js';
16
+ import { createDb, getDb } from '../../../../db/index.js';
17
+ import { buildHealthState } from '../../../../core/runtime/trust-state.js';
18
+ import { formatHealthReport } from '../../../../core/runtime/trust-report.js';
19
+
20
+ interface DiagnosticResult {
21
+ name: string;
22
+ status: 'ok' | 'degraded' | 'broken';
23
+ message: string;
24
+ fix?: string;
25
+ }
26
+
27
+ export function registerDoctorCommand(program: Command) {
28
+ program
29
+ .command('doctor')
30
+ .description('Diagnose and fix Squish issues')
31
+ .option('-f, --fix', 'Auto-fix issues when possible')
32
+ .option('-m, --migrate', 'Force run database migrations')
33
+ .option('-v, --verbose', 'Show detailed output')
34
+ .option('-p, --project <project>', 'Project path')
35
+ .option('--json', 'Emit machine-readable output', false)
36
+ .action(async (options) => {
37
+ const previousQuiet = process.env.SQUISH_QUIET;
38
+ if (options.json) {
39
+ process.env.SQUISH_QUIET = '1';
40
+ }
41
+ try {
42
+ await runDoctorDiagnostics(options);
43
+ } finally {
44
+ if (options.json) {
45
+ if (previousQuiet === undefined) {
46
+ delete process.env.SQUISH_QUIET;
47
+ } else {
48
+ process.env.SQUISH_QUIET = previousQuiet;
49
+ }
50
+ }
51
+ }
52
+ });
53
+ }
54
+
55
+ async function runDoctorDiagnostics(options: { fix?: boolean; migrate?: boolean; verbose?: boolean; project?: string; json?: boolean }) {
56
+ const results: DiagnosticResult[] = [];
57
+ const dataDir = getDataDir();
58
+
59
+ // Check 1: Data directory exists
60
+ const diagnostic1 = await checkDataDirectory(dataDir);
61
+ results.push(diagnostic1);
62
+
63
+ // Check 2: Database file
64
+ const diagnostic2 = await checkDatabaseFile(dataDir);
65
+ results.push(diagnostic2);
66
+
67
+ // Check 3: Schema version (if database exists)
68
+ if (diagnostic2.status !== 'fail') {
69
+ const diagnostic3 = await checkSchemaVersion(options.migrate || false);
70
+ results.push(diagnostic3);
71
+ }
72
+
73
+ // Check 4: Config valid
74
+ const diagnostic4 = checkConfig();
75
+ results.push(diagnostic4);
76
+
77
+ // Check 5: bin/ files exist
78
+ const diagnostic5 = checkBinFiles();
79
+ results.push(diagnostic5);
80
+
81
+ let health;
82
+ try {
83
+ health = await buildHealthState(options.project);
84
+ } catch (error: any) {
85
+ health = {
86
+ severity: 'degraded' as const,
87
+ currentProject: options.project || process.cwd(),
88
+ checks: [
89
+ {
90
+ name: 'runtime health',
91
+ status: 'degraded' as const,
92
+ detail: `Skipped until schema is readable: ${error.message}`,
93
+ },
94
+ ],
95
+ nextStep: 'Run `squish doctor --migrate` to repair the local schema, then rerun diagnostics.',
96
+ };
97
+ }
98
+
99
+ const combinedSeverity = [health.severity, ...results.map((result) => result.status)].includes('broken')
100
+ ? 'broken'
101
+ : ([health.severity, ...results.map((result) => result.status)].includes('degraded') ? 'degraded' : 'ok');
102
+ const nextStep =
103
+ health.nextStep ??
104
+ results.find((result) => result.fix)?.fix ??
105
+ (options.fix ? 'Apply the suggested fixes, then rerun `squish doctor`.' : null);
106
+
107
+ const combined = {
108
+ severity: combinedSeverity as 'ok' | 'degraded' | 'broken',
109
+ currentProject: health.currentProject,
110
+ checks: health.checks,
111
+ diagnostics: results.map((result) => ({
112
+ name: result.name,
113
+ status: result.status,
114
+ detail: result.message,
115
+ fix: result.fix,
116
+ })),
117
+ nextStep,
118
+ };
119
+
120
+ if (options.json) {
121
+ console.log(JSON.stringify({ ok: combined.severity !== 'broken', ...combined }, null, 2));
122
+ process.exit(combined.severity === 'broken' ? 1 : 0);
123
+ }
124
+
125
+ console.log('\n=== Squish Doctor v1.2.0 ===\n');
126
+ console.log(formatHealthReport({
127
+ severity: combined.severity,
128
+ currentProject: combined.currentProject,
129
+ checks: combined.checks,
130
+ diagnostics: combined.diagnostics,
131
+ nextStep: combined.nextStep,
132
+ }));
133
+
134
+ if (options.verbose) {
135
+ console.log('\nDiagnostic detail');
136
+ for (const result of results) {
137
+ console.log(`- ${result.name}: ${result.message}`);
138
+ if (result.fix) {
139
+ console.log(` fix: ${result.fix}`);
140
+ }
141
+ }
142
+ }
143
+
144
+ process.exit(combined.severity === 'broken' ? 1 : 0);
145
+ }
146
+
147
+ async function checkDataDirectory(dataDir: string): Promise<DiagnosticResult> {
148
+ try {
149
+ if (!fs.existsSync(dataDir)) {
150
+ // Try to create it
151
+ fs.mkdirSync(dataDir, { recursive: true });
152
+ return { name: 'data directory', status: 'ok', message: 'Created data directory' };
153
+ }
154
+ return { name: 'data directory', status: 'ok', message: dataDir };
155
+ } catch (error) {
156
+ return { name: 'data directory', status: 'broken', message: 'Cannot access data directory', fix: 'Check file permissions' };
157
+ }
158
+ }
159
+
160
+ async function checkDatabaseFile(dataDir: string): Promise<DiagnosticResult> {
161
+ const dbPath = path.join(dataDir, 'squish.db');
162
+
163
+ try {
164
+ if (!fs.existsSync(dbPath)) {
165
+ return { name: 'database file', status: 'degraded', message: 'Database not found (will be created on first use)', fix: 'Run any squish command to create the local database.' };
166
+ }
167
+ return { name: 'database file', status: 'ok', message: dbPath };
168
+ } catch (error) {
169
+ return { name: 'database file', status: 'broken', message: 'Cannot access database file', fix: 'Check file permissions' };
170
+ }
171
+ }
172
+
173
+ async function checkSchemaVersion(forceMigrate: boolean): Promise<DiagnosticResult> {
174
+ let dbClient: any;
175
+ try {
176
+ dbClient = await getDb();
177
+ } catch (error) {
178
+ if (!config.isTeamMode) {
179
+ return checkSqliteSchemaDirect(forceMigrate);
180
+ }
181
+ return { name: 'schema version', status: 'degraded', message: 'Cannot connect to database (no driver available)' };
182
+ }
183
+ if (!dbClient) {
184
+ return { name: 'schema version', status: 'degraded', message: 'Cannot connect to database (no driver available)' };
185
+ }
186
+
187
+ // Check for required tables
188
+ const requiredTables = [
189
+ 'memories',
190
+ 'learnings',
191
+ 'projects',
192
+ 'users',
193
+ 'conversations',
194
+ 'messages',
195
+ 'entities',
196
+ 'core_memory',
197
+ 'context_sessions',
198
+ 'memory_associations',
199
+ 'namespaces',
200
+ 'maintenance_jobs',
201
+ 'places',
202
+ 'memory_places',
203
+ 'place_rules',
204
+ 'session_summaries',
205
+ 'beliefs',
206
+ 'belief_memory_sources',
207
+ 'belief_edges',
208
+ ];
209
+
210
+ // Get SQLite vs Postgres client handling
211
+ const dbAny = dbClient as any;
212
+ const isSqlite = typeof dbAny.exec === 'function';
213
+
214
+ let existingTables: string[] = [];
215
+ if (isSqlite) {
216
+ const tables = dbAny.prepare("SELECT name FROM sqlite_master WHERE type='table'").all() as Array<{name: string}>;
217
+ existingTables = tables.map(t => t.name);
218
+ } else {
219
+ // Postgres
220
+ try {
221
+ const result = await dbAny.query("SELECT tablename FROM pg_tables WHERE schemaname = 'public'");
222
+ existingTables = result.rows?.map((r: any) => r.tablename) ?? [];
223
+ } catch {
224
+ existingTables = [];
225
+ }
226
+ }
227
+
228
+ const missingTables = requiredTables.filter(t => !existingTables.includes(t));
229
+
230
+ // If forceMigrate or missing tables, run migrations
231
+ if (forceMigrate || missingTables.length > 0) {
232
+ try {
233
+ // Import bootstrap functions
234
+ const { ensureSqliteSchema } = await import('../../../../db/bootstrap.js');
235
+ const { getSchemaVersion } = await import('../../../../db/bootstrap.js');
236
+
237
+ if (isSqlite) {
238
+ await ensureSqliteSchema(dbAny);
239
+ const version = await getSchemaVersion(dbAny);
240
+ return {
241
+ name: 'schema version',
242
+ status: 'ok',
243
+ message: `Migrations applied. Schema: ${version}`
244
+ };
245
+ }
246
+
247
+ return { name: 'schema version', status: 'ok', message: 'Database schema OK' };
248
+ } catch (error) {
249
+ const msg = error instanceof Error ? error.message : String(error);
250
+ return {
251
+ name: 'schema version',
252
+ status: 'degraded',
253
+ message: `Migration note: ${msg}`,
254
+ fix: 'Run "squish doctor --migrate" to retry'
255
+ };
256
+ }
257
+ }
258
+
259
+ return { name: 'schema version', status: 'ok', message: `Tables OK (${existingTables.length})` };
260
+ }
261
+
262
+ async function checkSqliteSchemaDirect(forceMigrate: boolean): Promise<DiagnosticResult> {
263
+ const dbPath = path.join(getDataDir(), 'squish.db');
264
+
265
+ try {
266
+ const sqliteModule = await import('bun:sqlite');
267
+ const sqlite = new sqliteModule.default(dbPath);
268
+ try {
269
+ const tables = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table'").all() as Array<{ name: string }>;
270
+ const existingTables = tables.map((table) => table.name);
271
+ const requiredTables = [
272
+ 'memories',
273
+ 'learnings',
274
+ 'projects',
275
+ 'users',
276
+ 'conversations',
277
+ 'messages',
278
+ 'entities',
279
+ 'core_memory',
280
+ 'context_sessions',
281
+ 'memory_associations',
282
+ 'namespaces',
283
+ 'maintenance_jobs',
284
+ 'places',
285
+ 'memory_places',
286
+ 'place_rules',
287
+ 'session_summaries',
288
+ 'beliefs',
289
+ 'belief_memory_sources',
290
+ 'belief_edges',
291
+ ];
292
+ const missingTables = requiredTables.filter((table) => !existingTables.includes(table));
293
+
294
+ if (forceMigrate || missingTables.length > 0) {
295
+ const { ensureSqliteSchema, getSchemaVersion } = await import('../../../../db/bootstrap.js');
296
+ await ensureSqliteSchema(sqlite as any);
297
+ const version = await getSchemaVersion(sqlite as any);
298
+ return {
299
+ name: 'schema version',
300
+ status: 'ok',
301
+ message: `Migrations applied. Schema: ${version}`,
302
+ };
303
+ }
304
+
305
+ return { name: 'schema version', status: 'ok', message: `Tables OK (${existingTables.length})` };
306
+ } finally {
307
+ sqlite.close();
308
+ }
309
+ } catch (error) {
310
+ const msg = error instanceof Error ? error.message : String(error);
311
+ return {
312
+ name: 'schema version',
313
+ status: 'degraded',
314
+ message: `Migration note: ${msg}`,
315
+ fix: 'Run "squish doctor --migrate" to retry',
316
+ };
317
+ }
318
+ }
319
+
320
+ function checkConfig(): DiagnosticResult {
321
+ try {
322
+ // Basic config validation
323
+ const dataDir = getDataDir();
324
+ const embeddingsProvider = config.embeddingsProvider;
325
+
326
+ return {
327
+ name: 'configuration',
328
+ status: 'ok',
329
+ message: `Provider: ${embeddingsProvider}, Data: ${dataDir}`
330
+ };
331
+ } catch (error) {
332
+ return { name: 'configuration', status: 'broken', message: 'Config validation failed', fix: 'Check config.ts' };
333
+ }
334
+ }
335
+
336
+ function checkBinFiles(): DiagnosticResult {
337
+ const binDir = path.join(process.cwd(), 'bin');
338
+
339
+ try {
340
+ const files = ['squish.mjs', 'squish-mcp.mjs', 'install-interactive.mjs'];
341
+ const missing: string[] = [];
342
+
343
+ for (const file of files) {
344
+ if (!fs.existsSync(path.join(binDir, file))) {
345
+ missing.push(file);
346
+ }
347
+ }
348
+
349
+ if (missing.length > 0) {
350
+ return { name: 'cli binaries', status: 'broken', message: `Missing: ${missing.join(', ')}` };
351
+ }
352
+
353
+ return { name: 'cli binaries', status: 'ok', message: 'All binaries present' };
354
+ } catch (error) {
355
+ return { name: 'cli binaries', status: 'broken', message: 'Cannot check binaries', fix: 'Reinstall squish-memory' };
356
+ }
357
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Forget Command - Delete memory
3
+ *
4
+ * Usage: squish forget <memoryId> [--confirm] [--older-than "30 days"]
5
+ */
6
+
7
+ import { Command } from 'commander';
8
+ import { eq } from 'drizzle-orm';
9
+ import { getDbClient } from '../../../../core/lib/db-client.js';
10
+ import { search } from '../../../../core/memory/memories.js';
11
+ import { filterByDateRange } from '../../../../core/lib/utils.js';
12
+
13
+ export function registerForgetCommand(program: Command) {
14
+ program
15
+ .command('forget <memoryId>')
16
+ .description('Delete memory (single or bulk with --older-than --search)')
17
+ .option('--older-than <period>', 'Bulk delete memories older than')
18
+ .option('--search <query>', 'Search query to match specific memories')
19
+ .option('--type <type>', 'Filter by memory type')
20
+ .option('--confirm', 'Actually delete (default is dry-run)', false)
21
+ .option('-l, --limit <number>', 'Max memories to delete', '100')
22
+ .option('-p, --project <project>', 'Project path', process.cwd())
23
+ .action(async (memoryId: string, options: any) => {
24
+ try {
25
+ const { db, schema } = await getDbClient();
26
+
27
+ if (memoryId && memoryId !== 'all') {
28
+ await db.delete(schema.memories).where(eq(schema.memories.id, memoryId));
29
+ console.log(JSON.stringify({ ok: true, deleted: 1, memoryId }));
30
+ return;
31
+ }
32
+
33
+ if (!options.olderThan && !options.search) {
34
+ console.error(JSON.stringify({
35
+ ok: false,
36
+ error: 'Provide memoryId or use --older-than / --search for bulk delete'
37
+ }));
38
+ process.exit(1);
39
+ }
40
+
41
+ const results = await search({
42
+ query: options.search || '',
43
+ project: options.project,
44
+ limit: parseInt(options.limit) || 100,
45
+ type: options.type
46
+ });
47
+
48
+ let filtered = results;
49
+ if (options.olderThan) {
50
+ filtered = filterByDateRange(results, '', options.olderThan);
51
+ }
52
+
53
+ const deleted = [];
54
+ if (options.confirm) {
55
+ for (const mem of filtered) {
56
+ await db.delete(schema.memories).where(eq(schema.memories.id, mem.id));
57
+ deleted.push(mem.id);
58
+ }
59
+ }
60
+
61
+ console.log(JSON.stringify({
62
+ ok: true,
63
+ matched: filtered.length,
64
+ deleted: deleted.length,
65
+ dryRun: !options.confirm
66
+ }, null, 2));
67
+ } catch (error: any) {
68
+ console.error(JSON.stringify({ ok: false, error: error.message }));
69
+ process.exit(1);
70
+ }
71
+ });
72
+ }
@@ -0,0 +1,36 @@
1
+ import { Command } from 'commander';
2
+ import { buildHealthState } from '../../../../core/runtime/trust-state.js';
3
+ import { formatHealthReport } from '../../../../core/runtime/trust-report.js';
4
+
5
+ export function registerHealthCommand(program: Command) {
6
+ program
7
+ .command('health')
8
+ .description('Show runtime health for the current project')
9
+ .option('-p, --project <project>', 'Project path')
10
+ .option('--json', 'Emit machine-readable output', false)
11
+ .action(async (options: any) => {
12
+ const previousQuiet = process.env.SQUISH_QUIET;
13
+ if (options.json) {
14
+ process.env.SQUISH_QUIET = '1';
15
+ }
16
+ try {
17
+ const health = await buildHealthState(options.project);
18
+ if (options.json) {
19
+ console.log(JSON.stringify({ ok: true, ...health }, null, 2));
20
+ return;
21
+ }
22
+ console.log(formatHealthReport(health));
23
+ } catch (error: any) {
24
+ console.error(JSON.stringify({ ok: false, error: error.message }));
25
+ process.exit(1);
26
+ } finally {
27
+ if (options.json) {
28
+ if (previousQuiet === undefined) {
29
+ delete process.env.SQUISH_QUIET;
30
+ } else {
31
+ process.env.SQUISH_QUIET = previousQuiet;
32
+ }
33
+ }
34
+ }
35
+ });
36
+ }
@@ -0,0 +1,41 @@
1
+ import { Command } from 'commander';
2
+ import { buildInspectState } from '../../../../core/runtime/trust-state.js';
3
+ import { formatInspectReport } from '../../../../core/runtime/trust-report.js';
4
+
5
+ export function registerInspectCommand(program: Command) {
6
+ program
7
+ .command('inspect <id>')
8
+ .description('Inspect how and why a memory was stored')
9
+ .option('-P, --pretty', 'Human-friendly output', false)
10
+ .option('--json', 'Emit machine-readable output', false)
11
+ .action(async (id: string, options: any) => {
12
+ const previousQuiet = process.env.SQUISH_QUIET;
13
+ if (options.json) {
14
+ process.env.SQUISH_QUIET = '1';
15
+ }
16
+ try {
17
+ const inspection = await buildInspectState(id);
18
+ if (!inspection) {
19
+ console.error(JSON.stringify({ ok: false, error: 'Memory not found' }));
20
+ process.exit(1);
21
+ }
22
+
23
+ if (options.json) {
24
+ console.log(JSON.stringify({ ok: true, inspection }, null, 2));
25
+ } else {
26
+ console.log(formatInspectReport(inspection));
27
+ }
28
+ } catch (error: any) {
29
+ console.error(JSON.stringify({ ok: false, error: error.message }));
30
+ process.exit(1);
31
+ } finally {
32
+ if (options.json) {
33
+ if (previousQuiet === undefined) {
34
+ delete process.env.SQUISH_QUIET;
35
+ } else {
36
+ process.env.SQUISH_QUIET = previousQuiet;
37
+ }
38
+ }
39
+ }
40
+ });
41
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Link Command - Manage memory associations
3
+ *
4
+ * Usage: squish link find <memoryId> [--depth 2]
5
+ * squish link add <fromId> <toId> [--type relates_to]
6
+ */
7
+
8
+ import { Command } from 'commander';
9
+ import { createAssociation, getRelatedMemories } from '../../../../core/associations.js';
10
+
11
+ export function registerLinkCommand(program: Command) {
12
+ program
13
+ .command('link <action> [args...]')
14
+ .description('Manage links (find/add/list)')
15
+ .option('-d, --depth <number>', 'Graph traversal depth', '2')
16
+ .option('-t, --type <type>', 'Association type', 'relates_to')
17
+ .option('-w, --weight <number>', 'Association weight', '0.5')
18
+ .action(async (action: string, args: string[], options: any) => {
19
+ try {
20
+ if (action === 'find' && args[0]) {
21
+ const related = await getRelatedMemories(args[0], options.depth * 5);
22
+ console.log(JSON.stringify({ ok: true, count: related.length, related }, null, 2));
23
+ } else if (action === 'add' && args[0] && args[1]) {
24
+ await createAssociation(args[0], args[1], options.type as any, options.weight);
25
+
26
+ // Auto-update knowledge graph (fire-and-forget)
27
+ try {
28
+ const { addMemoryToGraph } = await import('../../../../core/graph/graph-builder.js');
29
+ const [result1, result2] = await Promise.all([
30
+ addMemoryToGraph(args[0]).catch(() => null),
31
+ addMemoryToGraph(args[1]).catch(() => null)
32
+ ]);
33
+ if (result1 || result2) {
34
+ console.error(`[Graph] Updated graph for linked memories`);
35
+ }
36
+ } catch (e) {
37
+ // Ignore graph errors
38
+ }
39
+
40
+ console.log(JSON.stringify({ ok: true, action: 'created', from: args[0], to: args[1], type: options.type }));
41
+ } else {
42
+ console.log(JSON.stringify({ ok: false, error: 'Usage: squish link find <id> OR squish link add <from> <to>' }));
43
+ process.exit(1);
44
+ }
45
+ } catch (error: any) {
46
+ console.error(JSON.stringify({ ok: false, error: error.message }));
47
+ process.exit(1);
48
+ }
49
+ });
50
+ }
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Migrate Command - Migrate memories between .squish directories
3
+ *
4
+ * Usage: squish migrate <source-path> [--target <path>] [--delete-source] [--dry-run]
5
+ */
6
+
7
+ import { Command } from 'commander';
8
+ import { migrateMemories, type MigrateResult } from '../../../../core/memory/migrate.js';
9
+ import { existsSync } from 'fs';
10
+ import { join } from 'path';
11
+
12
+ export function registerMigrateCommand(program: Command) {
13
+ program
14
+ .command('migrate <source>')
15
+ .description('Migrate memories from one .squish directory to another (unify multiple .squish folders)')
16
+ .option('-t, --target <path>', 'Target .squish directory (default: current directory)', process.cwd())
17
+ .option('-d, --delete-source', 'Delete source directory after successful migration (requires --yes)')
18
+ .option('-y, --yes', 'Skip confirmation prompts')
19
+ .option('-n, --dry-run', 'Preview migration without making changes', false)
20
+ .action(async (source: string, options: any) => {
21
+ const target = options.target || process.cwd();
22
+ const dryRun = options.dryRun || false;
23
+ const deleteSource = options.deleteSource || false;
24
+ const confirmed = options.yes || false;
25
+
26
+ // Validate paths
27
+ if (!existsSync(source)) {
28
+ console.error(`Error: Source directory does not exist: ${source}`);
29
+ process.exit(1);
30
+ }
31
+
32
+ const sourceDbPath = join(source, 'squish.db');
33
+ const targetDbPath = join(target, 'squish.db');
34
+
35
+ if (!existsSync(sourceDbPath)) {
36
+ console.error(`Error: Source is not a .squish directory (no squish.db found): ${source}`);
37
+ process.exit(1);
38
+ }
39
+
40
+ if (!existsSync(targetDbPath)) {
41
+ console.error(`Error: Target is not a .squish directory (no squish.db found): ${target}`);
42
+ process.exit(1);
43
+ }
44
+
45
+ // Show plan
46
+ console.log('\n=== Migration Plan ===');
47
+ console.log(`Source: ${source}`);
48
+ console.log(`Target: ${target}`);
49
+ console.log(`Dry-run: ${dryRun ? 'YES (no changes)' : 'NO'}`);
50
+ console.log(`Delete source: ${deleteSource ? 'YES (after success)' : 'NO'}`);
51
+
52
+ if (!confirmed && !dryRun) {
53
+ console.log('\nThis will copy ALL memories from source to target.');
54
+ console.log('The source directory will NOT be deleted unless you also pass --delete-source');
55
+ console.log('Use --yes to confirm or --dry-run to preview.\n');
56
+ process.exit(1);
57
+ }
58
+
59
+ try {
60
+ console.log('\nMigrating...\n');
61
+
62
+ const result: MigrateResult = await migrateMemories(source, target, {
63
+ dryRun,
64
+ deleteSource,
65
+ });
66
+
67
+ console.log('=== Migration Result ===');
68
+ console.log(`Memories copied: ${result.memoriesCopied}`);
69
+ console.log(`Learnings copied: ${result.observationsCopied}`);
70
+ console.log(`Associations copied: ${result.associationsCopied}`);
71
+ console.log(`Projects mapped: ${result.projectsMapped}`);
72
+
73
+ if (deleteSource && !dryRun && result.sourceDeleted) {
74
+ console.log(`Source deleted: YES`);
75
+ } else if (deleteSource && !dryRun && !result.sourceDeleted) {
76
+ console.log(`Source deleted: NO (manual deletion required)`);
77
+ } else if (deleteSource && dryRun) {
78
+ console.log(`Source would be deleted after confirmation`);
79
+ }
80
+
81
+ console.log(`\n${result.message}`);
82
+
83
+ if (result.memoriesCopied > 0 && !dryRun) {
84
+ console.log('\nTip: After verifying the migration worked, you can manually delete the source directory:');
85
+ console.log(` rm -rf ${source}`);
86
+ }
87
+
88
+ } catch (error) {
89
+ console.error(`Migration failed:`, error instanceof Error ? error.message : error);
90
+ process.exit(1);
91
+ }
92
+ });
93
+ }