squish-memory 1.0.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (704) hide show
  1. package/.env.example +146 -0
  2. package/CHANGELOG.md +202 -0
  3. package/README.md +192 -287
  4. package/{scripts → bin}/dependency-manager.mjs +217 -217
  5. package/{scripts → bin}/detect-clients.mjs +78 -78
  6. package/bin/install-interactive.mjs +321 -0
  7. package/bin/squish-mcp.mjs +46 -0
  8. package/bin/squish.mjs +33 -0
  9. package/config/mcp-migration-map.json +1 -6
  10. package/config/mcp-mode-semantics.json +10 -12
  11. package/config/mcp-remote-auth.json +3 -26
  12. package/config/mcp-universal.schema.json +5 -35
  13. package/config/settings.json +78 -22
  14. package/config.js +5 -0
  15. package/config.ts +218 -0
  16. package/core/adapters/config/claude-code.ts +133 -0
  17. package/core/adapters/config/cursor.ts +90 -0
  18. package/core/adapters/config/opencode.ts +89 -0
  19. package/core/adapters/config/windsurf.ts +90 -0
  20. package/core/adapters/index.ts +102 -0
  21. package/core/adapters/timeline.ts +116 -0
  22. package/core/adapters/types.ts +166 -0
  23. package/core/agent-preferences.ts +140 -0
  24. package/core/algorithms/analytics/token-estimator.ts +216 -0
  25. package/core/algorithms/detection/hash-filters.ts +260 -0
  26. package/core/algorithms/detection/semantic-ranker.ts +194 -0
  27. package/core/algorithms/detection/two-stage-detector.ts +421 -0
  28. package/core/algorithms/handlers/approve-merge.ts +215 -0
  29. package/core/algorithms/handlers/detect-duplicates.ts +192 -0
  30. package/core/algorithms/handlers/get-stats.ts +132 -0
  31. package/core/algorithms/handlers/list-proposals.ts +130 -0
  32. package/core/algorithms/handlers/preview-merge.ts +139 -0
  33. package/core/algorithms/handlers/reject-merge.ts +93 -0
  34. package/core/algorithms/handlers/reverse-merge.ts +155 -0
  35. package/core/algorithms/index.ts +39 -0
  36. package/core/algorithms/operations/cache-maintenance.ts +182 -0
  37. package/core/algorithms/safety/safety-checks.ts +256 -0
  38. package/core/algorithms/strategies/merge-strategies.ts +381 -0
  39. package/core/algorithms/types.ts +140 -0
  40. package/core/algorithms/utils/response-builder.ts +61 -0
  41. package/core/associations.ts +363 -0
  42. package/core/beliefs/decay.ts +289 -0
  43. package/core/beliefs/extractor.ts +131 -0
  44. package/core/beliefs/store.ts +557 -0
  45. package/core/beliefs/types.ts +38 -0
  46. package/core/commands/mcp-server.ts +5 -0
  47. package/core/compression.ts +177 -0
  48. package/core/config.js +2 -0
  49. package/core/consolidation.ts +330 -0
  50. package/core/context/agent-context.ts +388 -0
  51. package/core/context/context-paging.ts +449 -0
  52. package/core/context/context-window.ts +234 -0
  53. package/core/context/context.ts +35 -0
  54. package/core/embeddings/embeddings.ts +616 -0
  55. package/core/embeddings/google-multimodal.ts +200 -0
  56. package/core/embeddings/local-embeddings.ts +12 -0
  57. package/core/embeddings/qmd-client.ts +495 -0
  58. package/core/embeddings/transformers-local.ts +261 -0
  59. package/core/embeddings.js +4 -0
  60. package/core/error-handling.ts +206 -0
  61. package/core/external +219 -0
  62. package/core/graph/entity-deduplicator.ts +232 -0
  63. package/core/graph/graph-builder.ts +257 -0
  64. package/core/graph/graph-traversal.ts +490 -0
  65. package/core/graph/index.ts +24 -0
  66. package/core/graph/llm-entity-extractor.ts +402 -0
  67. package/core/graph/multi-hop-retrieval.ts +317 -0
  68. package/core/graph/relationship-extractor.ts +465 -0
  69. package/core/hooks/agent-hooks.ts +653 -0
  70. package/core/hooks/auto-tagger.ts +149 -0
  71. package/core/hooks/capture-filter.ts +169 -0
  72. package/core/hot-cache.ts +388 -0
  73. package/core/index.ts +10 -0
  74. package/core/ingestion/agent-memory.ts +167 -0
  75. package/core/ingestion/core-memory.ts +326 -0
  76. package/core/ingestion/learnings.ts +260 -0
  77. package/core/ingestion/signal-engine.ts +266 -0
  78. package/core/integrations/obsidian-vault.ts +197 -0
  79. package/core/layers/generator.ts +115 -0
  80. package/core/lib/db-client.ts +168 -0
  81. package/core/lib/parse-embedding.ts +59 -0
  82. package/core/lib/schemas.ts +102 -0
  83. package/core/lib/types.ts +49 -0
  84. package/core/lib/utils.ts +151 -0
  85. package/core/lib/validation.ts +180 -0
  86. package/core/lifecycle.ts +353 -0
  87. package/core/logger.ts +59 -0
  88. package/core/memory/bridge-discovery.ts +395 -0
  89. package/core/memory/categorizer.ts +390 -0
  90. package/core/memory/conflict-detector.ts +62 -0
  91. package/core/memory/consolidation.ts +372 -0
  92. package/core/memory/context-collector.ts +75 -0
  93. package/core/memory/contradiction-resolver.ts +494 -0
  94. package/core/memory/edit-workflow.ts +174 -0
  95. package/core/memory/entity-extractor.ts +426 -0
  96. package/core/memory/entity-resolver.ts +89 -0
  97. package/core/memory/explain.ts +112 -0
  98. package/core/memory/fact-deriver.ts +300 -0
  99. package/core/memory/fact-extractor.ts +120 -0
  100. package/core/memory/feedback-tracker.ts +200 -0
  101. package/core/memory/hooks.ts +230 -0
  102. package/core/memory/hybrid-retrieval.ts +65 -0
  103. package/core/memory/hybrid-scorer.ts +325 -0
  104. package/core/memory/hybrid-search.ts +748 -0
  105. package/core/memory/importance.ts +319 -0
  106. package/core/memory/index.ts +11 -0
  107. package/core/memory/loader.ts +178 -0
  108. package/core/memory/markdown/markdown-storage.ts +318 -0
  109. package/core/memory/memories.ts +565 -0
  110. package/core/memory/memory-lifecycle.ts +51 -0
  111. package/core/memory/memory-manager.ts +53 -0
  112. package/core/memory/migrate.ts +173 -0
  113. package/core/memory/normalization.ts +30 -0
  114. package/core/memory/path-strengthener.ts +211 -0
  115. package/core/memory/progressive-disclosure.ts +392 -0
  116. package/core/memory/query-processor.ts +130 -0
  117. package/core/memory/query-rewriter.ts +153 -0
  118. package/core/memory/response-analyzer.ts +81 -0
  119. package/core/memory/retrieval-feedback.ts +276 -0
  120. package/core/memory/serialization.ts +83 -0
  121. package/core/memory/stale-cleaner.ts +147 -0
  122. package/core/memory/stats.ts +181 -0
  123. package/core/memory/telemetry.ts +392 -0
  124. package/core/memory/temporal-facts.ts +356 -0
  125. package/core/memory/temporal-parser.ts +477 -0
  126. package/core/memory/trigger-detector.ts +104 -0
  127. package/core/memory/write-gate.ts +288 -0
  128. package/core/places/index.ts +14 -0
  129. package/core/places/memory-places.ts +339 -0
  130. package/core/places/places.ts +406 -0
  131. package/core/places/rules.ts +308 -0
  132. package/core/places/walking.ts +192 -0
  133. package/core/projects +89 -0
  134. package/core/projects.ts +131 -0
  135. package/core/redis.ts +82 -0
  136. package/core/responses.ts +187 -0
  137. package/core/runtime/trust-report.ts +195 -0
  138. package/core/runtime/trust-state.ts +360 -0
  139. package/core/scheduler/cron-scheduler.ts +581 -0
  140. package/core/scheduler/heartbeat.ts +91 -0
  141. package/core/scheduler/index.ts +8 -0
  142. package/core/scheduler/job-runner.ts +197 -0
  143. package/core/search/conversations.ts +166 -0
  144. package/core/search/entities.ts +46 -0
  145. package/core/search/folder-context.ts +154 -0
  146. package/core/search/graph-boost.ts +22 -0
  147. package/core/search/index.ts +4 -0
  148. package/core/search/qmd-wrapper.ts +84 -0
  149. package/core/security/encrypt.ts +51 -0
  150. package/core/security/governance.ts +102 -0
  151. package/core/security/privacy.ts +108 -0
  152. package/core/security/secret-detector.ts +122 -0
  153. package/core/session/auto-load.ts +160 -0
  154. package/core/session/entity-tracker.ts +363 -0
  155. package/core/session/index.ts +7 -0
  156. package/core/session/reference-resolver.ts +158 -0
  157. package/core/session/self-iteration-job.ts +478 -0
  158. package/core/session/session-hooks.ts +69 -0
  159. package/core/session/types.ts +36 -0
  160. package/core/session/working-set.ts +275 -0
  161. package/core/snapshots/cleanup.ts +13 -0
  162. package/core/snapshots/comparison.ts +59 -0
  163. package/core/snapshots/creation.ts +139 -0
  164. package/core/snapshots/retrieval.ts +44 -0
  165. package/core/snapshots/stats.ts +63 -0
  166. package/core/storage/cache.ts +241 -0
  167. package/core/storage/database.ts +23 -0
  168. package/core/summarization/cleanup.ts +13 -0
  169. package/core/summarization/queries.ts +32 -0
  170. package/core/summarization/stats.ts +64 -0
  171. package/core/summarization/strategies.ts +52 -0
  172. package/core/summarization.ts +248 -0
  173. package/core/temporal-facts.ts +244 -0
  174. package/core/tracing/collector.ts +470 -0
  175. package/core/tracing/visualizer.ts +195 -0
  176. package/core/utils/cleanup-operations.ts +50 -0
  177. package/core/utils/content-extraction.ts +95 -0
  178. package/core/utils/filter-builder.ts +56 -0
  179. package/core/utils/history-traversal.ts +63 -0
  180. package/core/utils/memory-operations.ts +56 -0
  181. package/core/utils/query-operations.ts +83 -0
  182. package/core/utils/summarization-helpers.ts +45 -0
  183. package/core/utils/temporal-queries.ts +39 -0
  184. package/core/utils/vector-operations.ts +135 -0
  185. package/core/utils/version-management.ts +74 -0
  186. package/core/worker.ts +324 -0
  187. package/db/adapter.ts +215 -0
  188. package/db/bootstrap.ts +1055 -0
  189. package/db/drizzle/migrations/0000_needy_cerebro.sql +402 -0
  190. package/db/drizzle/migrations/meta/0000_snapshot.json +3451 -0
  191. package/db/drizzle/migrations/meta/_journal.json +13 -0
  192. package/db/drizzle/schema-sqlite.ts +1032 -0
  193. package/db/drizzle/schema.ts +1128 -0
  194. package/db/drizzle.config.ts +12 -0
  195. package/db/index.ts +83 -0
  196. package/db/init.sql +5 -0
  197. package/db/migrations/associations.ts +35 -0
  198. package/db/migrations/beliefs.ts +89 -0
  199. package/db/migrations/core-memory.ts +35 -0
  200. package/db/migrations/fts.ts +59 -0
  201. package/db/migrations/index.ts +54 -0
  202. package/db/migrations/indexes.ts +36 -0
  203. package/db/migrations/learnings.ts +34 -0
  204. package/db/migrations/maintenance.ts +68 -0
  205. package/db/migrations/memories.ts +22 -0
  206. package/db/migrations/memory-places.ts +35 -0
  207. package/db/migrations/places.ts +49 -0
  208. package/db/migrations/projects.ts +21 -0
  209. package/db/migrations/tier-conversion.ts +24 -0
  210. package/db/neon.ts +22 -0
  211. package/db/schema/beliefs.ts +50 -0
  212. package/db/schema/generator.ts +159 -0
  213. package/db/schema/index.ts +58 -0
  214. package/db/schema/learnings.ts +32 -0
  215. package/db/schema/memories.ts +83 -0
  216. package/db/schema/projects.ts +33 -0
  217. package/db/schema.ts +13 -0
  218. package/db/supabase.ts +27 -0
  219. package/dist/config.d.ts +61 -14
  220. package/dist/config.js +159 -139
  221. package/dist/core/adapters/config/claude-code.d.ts +45 -0
  222. package/dist/core/adapters/config/claude-code.js +113 -0
  223. package/dist/core/adapters/config/cursor.d.ts +26 -0
  224. package/dist/core/adapters/config/cursor.js +74 -0
  225. package/dist/core/adapters/config/opencode.d.ts +23 -0
  226. package/dist/core/adapters/config/opencode.js +73 -0
  227. package/dist/core/adapters/config/windsurf.d.ts +26 -0
  228. package/dist/core/adapters/config/windsurf.js +74 -0
  229. package/dist/core/adapters/index.d.ts +45 -0
  230. package/dist/core/adapters/index.js +84 -0
  231. package/dist/core/adapters/scripts/install-adapter.d.ts +19 -0
  232. package/dist/core/adapters/scripts/install-adapter.js +149 -0
  233. package/dist/core/adapters/timeline.d.ts +23 -0
  234. package/dist/core/adapters/timeline.js +88 -0
  235. package/dist/core/adapters/types.d.ts +137 -0
  236. package/dist/core/adapters/types.js +50 -0
  237. package/dist/core/agent-preferences.d.ts +16 -0
  238. package/dist/core/agent-preferences.js +124 -0
  239. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.d.ts +1 -1
  240. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.js +3 -3
  241. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.d.ts +1 -1
  242. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.js +1 -1
  243. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.d.ts +1 -1
  244. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.js +7 -10
  245. package/dist/{algorithms → core/algorithms}/handlers/approve-merge.js +4 -4
  246. package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.js +3 -3
  247. package/dist/{algorithms → core/algorithms}/handlers/get-stats.js +3 -3
  248. package/dist/{algorithms → core/algorithms}/handlers/list-proposals.js +3 -3
  249. package/dist/{algorithms → core/algorithms}/handlers/preview-merge.js +3 -3
  250. package/dist/{algorithms → core/algorithms}/handlers/reject-merge.js +3 -3
  251. package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.js +3 -3
  252. package/dist/core/algorithms/index.d.ts +21 -0
  253. package/dist/core/algorithms/index.js +26 -0
  254. package/dist/core/algorithms/operations/cache-maintenance.d.ts +12 -0
  255. package/dist/core/algorithms/operations/cache-maintenance.js +157 -0
  256. package/dist/{algorithms → core/algorithms}/safety/safety-checks.d.ts +2 -6
  257. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.d.ts +19 -1
  258. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.js +74 -123
  259. package/dist/core/algorithms/types.d.ts +125 -0
  260. package/dist/core/algorithms/types.js +5 -0
  261. package/dist/core/associations.d.ts +3 -2
  262. package/dist/core/associations.js +37 -2
  263. package/dist/core/autosave.d.ts +19 -0
  264. package/dist/core/autosave.js +16 -0
  265. package/dist/core/beliefs/decay.d.ts +27 -0
  266. package/dist/core/beliefs/decay.js +217 -0
  267. package/dist/core/beliefs/extractor.d.ts +9 -0
  268. package/dist/core/beliefs/extractor.js +113 -0
  269. package/dist/core/beliefs/store.d.ts +46 -0
  270. package/dist/core/beliefs/store.js +466 -0
  271. package/dist/core/beliefs/types.d.ts +28 -0
  272. package/dist/core/beliefs/types.js +2 -0
  273. package/dist/core/commands/mcp-server.d.ts +2 -0
  274. package/dist/core/commands/mcp-server.js +6 -0
  275. package/dist/core/commands/remember.d.ts +24 -0
  276. package/dist/core/commands/remember.js +144 -0
  277. package/dist/core/compression.d.ts +45 -0
  278. package/dist/core/compression.js +160 -0
  279. package/dist/core/context/agent-context.d.ts +106 -0
  280. package/dist/core/context/agent-context.js +274 -0
  281. package/dist/core/{context-paging.d.ts → context/context-paging.d.ts} +2 -12
  282. package/dist/core/{context-paging.js → context/context-paging.js} +19 -39
  283. package/dist/core/context/context-window.d.ts +40 -0
  284. package/dist/core/context/context-window.js +177 -0
  285. package/dist/core/context/context.js +22 -0
  286. package/dist/core/embeddings/embeddings.d.ts +29 -0
  287. package/dist/core/embeddings/embeddings.js +546 -0
  288. package/dist/core/embeddings/google-multimodal.js +6 -2
  289. package/dist/core/embeddings/local-embeddings.d.ts +11 -0
  290. package/dist/core/embeddings/local-embeddings.js +11 -0
  291. package/dist/core/embeddings/qmd-client.js +1 -1
  292. package/dist/core/embeddings/transformers-local.d.ts +64 -0
  293. package/dist/core/embeddings/transformers-local.js +213 -0
  294. package/dist/core/embeddings.d.ts +1 -28
  295. package/dist/core/embeddings.js +2 -401
  296. package/dist/core/error-handling.d.ts +63 -0
  297. package/dist/core/error-handling.js +173 -0
  298. package/dist/core/graph/entity-deduplicator.d.ts +24 -0
  299. package/dist/core/graph/entity-deduplicator.js +183 -0
  300. package/dist/core/graph/graph-builder.d.ts +46 -0
  301. package/dist/core/graph/graph-builder.js +174 -0
  302. package/dist/core/graph/graph-traversal.d.ts +80 -0
  303. package/dist/core/graph/graph-traversal.js +315 -0
  304. package/dist/core/graph/index.d.ts +19 -0
  305. package/dist/core/graph/index.js +13 -0
  306. package/dist/core/graph/llm-entity-extractor.d.ts +49 -0
  307. package/dist/core/graph/llm-entity-extractor.js +313 -0
  308. package/dist/core/graph/multi-hop-retrieval.d.ts +48 -0
  309. package/dist/core/graph/multi-hop-retrieval.js +215 -0
  310. package/dist/core/graph/relationship-extractor.d.ts +48 -0
  311. package/dist/core/graph/relationship-extractor.js +351 -0
  312. package/dist/core/hooks/agent-hooks.d.ts +83 -0
  313. package/dist/core/hooks/agent-hooks.js +521 -0
  314. package/dist/core/hooks/auto-tagger.d.ts +19 -0
  315. package/dist/core/hooks/auto-tagger.js +155 -0
  316. package/dist/core/hooks/capture-filter.d.ts +41 -0
  317. package/dist/core/hooks/capture-filter.js +128 -0
  318. package/dist/core/hot-cache.d.ts +86 -0
  319. package/dist/core/hot-cache.js +285 -0
  320. package/dist/core/index.d.ts +9 -9
  321. package/dist/core/index.js +9 -12
  322. package/dist/core/{agent-memory.js → ingestion/agent-memory.js} +5 -7
  323. package/dist/core/{core-memory.d.ts → ingestion/core-memory.d.ts} +2 -2
  324. package/dist/core/{core-memory.js → ingestion/core-memory.js} +7 -7
  325. package/dist/core/ingestion/learnings.d.ts +57 -0
  326. package/dist/core/ingestion/learnings.js +205 -0
  327. package/dist/core/ingestion/signal-engine.d.ts +41 -0
  328. package/dist/core/ingestion/signal-engine.js +201 -0
  329. package/dist/core/integrations/obsidian-vault.d.ts +31 -0
  330. package/dist/core/integrations/obsidian-vault.js +156 -0
  331. package/dist/core/lib/db-client.d.ts +114 -0
  332. package/dist/core/lib/db-client.js +130 -0
  333. package/dist/core/lib/parse-embedding.d.ts +9 -0
  334. package/dist/core/lib/parse-embedding.js +58 -0
  335. package/dist/core/lib/schemas.d.ts +132 -0
  336. package/dist/core/lib/schemas.js +87 -0
  337. package/dist/core/lib/types.d.ts +45 -0
  338. package/dist/core/lib/types.js +6 -0
  339. package/dist/core/{utils.d.ts → lib/utils.d.ts} +5 -0
  340. package/dist/core/lib/utils.js +145 -0
  341. package/dist/core/lib/validation.d.ts +38 -0
  342. package/dist/core/lib/validation.js +151 -0
  343. package/dist/core/lifecycle.d.ts +7 -1
  344. package/dist/core/lifecycle.js +152 -42
  345. package/dist/core/logger.d.ts +1 -0
  346. package/dist/core/logger.js +13 -1
  347. package/dist/core/mcp/tools.d.ts +0 -2
  348. package/dist/core/mcp/tools.js +35 -90
  349. package/dist/core/mcp/types.d.ts +25 -253
  350. package/dist/core/mcp/types.js +2 -2
  351. package/dist/core/memory/categorizer.js +2 -0
  352. package/dist/core/memory/conflict-detector.js +1 -1
  353. package/dist/core/memory/consolidation.d.ts +1 -10
  354. package/dist/core/memory/consolidation.js +4 -39
  355. package/dist/core/memory/context-collector.js +1 -1
  356. package/dist/core/memory/edit-workflow.js +1 -1
  357. package/dist/core/memory/entity-extractor.d.ts +4 -0
  358. package/dist/core/memory/entity-extractor.js +30 -16
  359. package/dist/core/memory/entity-resolver.js +7 -7
  360. package/dist/core/memory/explain.d.ts +18 -0
  361. package/dist/core/memory/explain.js +92 -0
  362. package/dist/core/memory/fact-deriver.d.ts +31 -0
  363. package/dist/core/memory/fact-deriver.js +236 -0
  364. package/dist/core/memory/fact-extractor.js +12 -12
  365. package/dist/core/memory/feedback-tracker.js +1 -1
  366. package/dist/core/memory/hooks.d.ts +88 -0
  367. package/dist/core/memory/hooks.js +174 -0
  368. package/dist/core/memory/hybrid-retrieval.d.ts +14 -16
  369. package/dist/core/memory/hybrid-retrieval.js +25 -127
  370. package/dist/core/memory/hybrid-scorer.js +6 -23
  371. package/dist/core/memory/hybrid-search.d.ts +9 -11
  372. package/dist/core/memory/hybrid-search.js +496 -273
  373. package/dist/core/memory/importance.d.ts +2 -24
  374. package/dist/core/memory/importance.js +7 -91
  375. package/dist/core/memory/index.d.ts +1 -0
  376. package/dist/core/memory/index.js +1 -0
  377. package/dist/core/memory/loader.d.ts +31 -0
  378. package/dist/core/memory/loader.js +141 -0
  379. package/dist/core/memory/markdown/markdown-storage.d.ts +72 -0
  380. package/dist/core/memory/markdown/markdown-storage.js +243 -0
  381. package/dist/core/memory/memories.d.ts +23 -19
  382. package/dist/core/memory/memories.js +243 -228
  383. package/dist/core/memory/memory-lifecycle.d.ts +8 -0
  384. package/dist/core/memory/memory-lifecycle.js +47 -0
  385. package/dist/core/memory/migrate.d.ts +21 -0
  386. package/dist/core/memory/migrate.js +134 -0
  387. package/dist/core/memory/normalization.d.ts +7 -0
  388. package/dist/core/memory/normalization.js +26 -0
  389. package/dist/core/memory/path-strengthener.d.ts +39 -0
  390. package/dist/core/memory/path-strengthener.js +150 -0
  391. package/dist/core/memory/progressive-disclosure.js +1 -1
  392. package/dist/core/memory/query-processor.js +37 -3
  393. package/dist/core/memory/query-rewriter.js +9 -9
  394. package/dist/core/memory/retrieval-feedback.d.ts +70 -0
  395. package/dist/core/memory/retrieval-feedback.js +213 -0
  396. package/dist/core/memory/serialization.d.ts +4 -0
  397. package/dist/core/memory/serialization.js +49 -0
  398. package/dist/core/memory/stale-cleaner.d.ts +26 -0
  399. package/dist/core/memory/stale-cleaner.js +97 -0
  400. package/dist/core/memory/stats.d.ts +15 -0
  401. package/dist/core/memory/stats.js +69 -13
  402. package/dist/core/memory/temporal-facts.js +21 -0
  403. package/dist/core/memory/trigger-detector.d.ts +8 -1
  404. package/dist/core/memory/trigger-detector.js +42 -5
  405. package/dist/core/memory/write-gate.js +1 -1
  406. package/dist/core/places/index.d.ts +14 -0
  407. package/dist/core/places/index.js +14 -0
  408. package/dist/core/places/memory-places.d.ts +68 -0
  409. package/dist/core/places/memory-places.js +261 -0
  410. package/dist/core/places/places.d.ts +88 -0
  411. package/dist/core/places/places.js +314 -0
  412. package/dist/core/places/rules.d.ts +74 -0
  413. package/dist/core/places/rules.js +240 -0
  414. package/dist/core/places/walking.d.ts +56 -0
  415. package/dist/core/places/walking.js +121 -0
  416. package/dist/core/projects.d.ts +5 -0
  417. package/dist/core/projects.js +47 -18
  418. package/dist/core/responses.d.ts +96 -0
  419. package/dist/core/responses.js +122 -0
  420. package/dist/core/runtime/trust-report.d.ts +102 -0
  421. package/dist/core/runtime/trust-report.js +107 -0
  422. package/dist/core/runtime/trust-state.d.ts +12 -0
  423. package/dist/core/runtime/trust-state.js +309 -0
  424. package/dist/core/scheduler/cron-scheduler.d.ts +1 -1
  425. package/dist/core/scheduler/cron-scheduler.js +193 -10
  426. package/dist/core/scheduler/index.d.ts +1 -1
  427. package/dist/core/scheduler/index.js +1 -1
  428. package/dist/core/scheduler/job-runner.js +2 -2
  429. package/dist/core/search/conversations.js +40 -42
  430. package/dist/core/search/entities.js +6 -9
  431. package/dist/core/search/graph-boost.d.ts +7 -0
  432. package/dist/core/search/graph-boost.js +23 -0
  433. package/dist/core/search/qmd-wrapper.d.ts +36 -0
  434. package/dist/core/search/qmd-wrapper.js +58 -0
  435. package/dist/core/security/encrypt.d.ts +6 -0
  436. package/dist/core/security/encrypt.js +47 -0
  437. package/dist/core/{governance.d.ts → security/governance.d.ts} +6 -1
  438. package/dist/core/security/governance.js +79 -0
  439. package/dist/core/session/auto-load.js +34 -9
  440. package/dist/core/session/entity-tracker.d.ts +62 -0
  441. package/dist/core/session/entity-tracker.js +287 -0
  442. package/dist/core/session/index.d.ts +1 -1
  443. package/dist/core/session/index.js +1 -1
  444. package/dist/core/session/reference-resolver.d.ts +26 -0
  445. package/dist/core/session/reference-resolver.js +121 -0
  446. package/dist/core/{session-hooks → session}/self-iteration-job.d.ts +15 -0
  447. package/dist/core/{session-hooks → session}/self-iteration-job.js +195 -90
  448. package/dist/core/session/working-set.d.ts +50 -0
  449. package/dist/core/session/working-set.js +212 -0
  450. package/dist/core/snapshots/creation.d.ts +2 -8
  451. package/dist/core/snapshots/creation.js +3 -12
  452. package/dist/core/{cache.js → storage/cache.js} +2 -2
  453. package/dist/core/utils/memory-operations.js +1 -1
  454. package/dist/core/utils/summarization-helpers.d.ts +0 -4
  455. package/dist/core/utils/summarization-helpers.js +1 -6
  456. package/dist/core/utils/vector-operations.d.ts +71 -0
  457. package/dist/core/utils/vector-operations.js +129 -0
  458. package/dist/db/adapter.d.ts +3 -3
  459. package/dist/db/adapter.js +99 -88
  460. package/dist/db/bootstrap.d.ts +2 -0
  461. package/dist/db/bootstrap.js +921 -674
  462. package/dist/{drizzle → db/drizzle}/schema-sqlite.d.ts +775 -25
  463. package/dist/{drizzle → db/drizzle}/schema-sqlite.js +170 -24
  464. package/dist/{drizzle → db/drizzle}/schema.d.ts +731 -32
  465. package/dist/{drizzle → db/drizzle}/schema.js +192 -32
  466. package/dist/db/drizzle.config.d.ts +3 -0
  467. package/dist/db/drizzle.config.js +12 -0
  468. package/dist/db/index.d.ts +1 -5
  469. package/dist/db/index.js +51 -8
  470. package/dist/db/migrations/associations.d.ts +6 -0
  471. package/dist/db/migrations/associations.js +29 -0
  472. package/dist/db/migrations/beliefs.d.ts +10 -0
  473. package/dist/db/migrations/beliefs.js +76 -0
  474. package/dist/db/migrations/core-memory.d.ts +6 -0
  475. package/dist/db/migrations/core-memory.js +29 -0
  476. package/dist/db/migrations/fts.d.ts +6 -0
  477. package/dist/db/migrations/fts.js +52 -0
  478. package/dist/db/migrations/index.d.ts +25 -0
  479. package/dist/db/migrations/index.js +51 -0
  480. package/dist/db/migrations/indexes.d.ts +6 -0
  481. package/dist/db/migrations/indexes.js +30 -0
  482. package/dist/db/migrations/learnings.d.ts +7 -0
  483. package/dist/db/migrations/learnings.js +26 -0
  484. package/dist/db/migrations/maintenance.d.ts +6 -0
  485. package/dist/db/migrations/maintenance.js +61 -0
  486. package/dist/db/migrations/memories.d.ts +7 -0
  487. package/dist/db/migrations/memories.js +16 -0
  488. package/dist/db/migrations/memory-places.d.ts +6 -0
  489. package/dist/db/migrations/memory-places.js +29 -0
  490. package/dist/db/migrations/places.d.ts +6 -0
  491. package/dist/db/migrations/places.js +43 -0
  492. package/dist/db/migrations/projects.d.ts +3 -0
  493. package/dist/db/migrations/projects.js +13 -0
  494. package/dist/db/migrations/tier-conversion.d.ts +7 -0
  495. package/dist/db/migrations/tier-conversion.js +20 -0
  496. package/dist/db/neon.d.ts +8 -0
  497. package/dist/db/neon.js +20 -0
  498. package/dist/db/schema/beliefs.d.ts +9 -0
  499. package/dist/db/schema/beliefs.js +46 -0
  500. package/dist/db/schema/generator.d.ts +38 -0
  501. package/dist/db/schema/generator.js +108 -0
  502. package/dist/db/schema/index.d.ts +39 -0
  503. package/dist/db/schema/index.js +51 -0
  504. package/dist/db/schema/learnings.d.ts +7 -0
  505. package/dist/db/schema/learnings.js +30 -0
  506. package/dist/db/schema/memories.d.ts +7 -0
  507. package/dist/db/schema/memories.js +81 -0
  508. package/dist/db/schema/projects.d.ts +4 -0
  509. package/dist/db/schema/projects.js +31 -0
  510. package/dist/db/schema/tables/context-sessions.d.ts +9 -0
  511. package/dist/db/schema/tables/context-sessions.js +37 -0
  512. package/dist/db/schema/tables/conversations.d.ts +9 -0
  513. package/dist/db/schema/tables/conversations.js +47 -0
  514. package/dist/db/schema/tables/core-memory.d.ts +9 -0
  515. package/dist/db/schema/tables/core-memory.js +41 -0
  516. package/dist/db/schema/tables/entities.d.ts +9 -0
  517. package/dist/db/schema/tables/entities.js +39 -0
  518. package/dist/db/schema/tables/entity-relations.d.ts +9 -0
  519. package/dist/db/schema/tables/entity-relations.js +31 -0
  520. package/dist/db/schema/tables/learnings.d.ts +9 -0
  521. package/dist/db/schema/tables/learnings.js +66 -0
  522. package/dist/db/schema/tables/memories.d.ts +9 -0
  523. package/dist/db/schema/tables/memories.js +161 -0
  524. package/dist/db/schema/tables/memory-associations.d.ts +9 -0
  525. package/dist/db/schema/tables/memory-associations.js +39 -0
  526. package/dist/db/schema/tables/memory-hash-cache.d.ts +9 -0
  527. package/dist/db/schema/tables/memory-hash-cache.js +29 -0
  528. package/dist/db/schema/tables/memory-merge-history.d.ts +9 -0
  529. package/dist/db/schema/tables/memory-merge-history.js +33 -0
  530. package/dist/db/schema/tables/memory-merge-proposals.d.ts +9 -0
  531. package/dist/db/schema/tables/memory-merge-proposals.js +39 -0
  532. package/dist/db/schema/tables/messages.d.ts +9 -0
  533. package/dist/db/schema/tables/messages.js +41 -0
  534. package/dist/db/schema/tables/namespaces.d.ts +9 -0
  535. package/dist/db/schema/tables/namespaces.js +37 -0
  536. package/dist/db/schema/tables/projects.d.ts +9 -0
  537. package/dist/db/schema/tables/projects.js +31 -0
  538. package/dist/db/schema/tables/users.d.ts +9 -0
  539. package/dist/db/schema/tables/users.js +27 -0
  540. package/dist/db/schema.d.ts +1 -1
  541. package/dist/db/schema.js +2 -2
  542. package/dist/db/supabase.d.ts +9 -0
  543. package/dist/db/supabase.js +24 -0
  544. package/dist/packages/mcp/src/index.d.ts +3 -0
  545. package/dist/packages/mcp/src/index.js +733 -0
  546. package/mcp.json.example +8 -0
  547. package/package.json +132 -173
  548. package/packages/cli/package.json +22 -0
  549. package/packages/cli/src/commands/clean.ts +68 -0
  550. package/packages/cli/src/commands/context.ts +79 -0
  551. package/packages/cli/src/commands/doctor.ts +357 -0
  552. package/packages/cli/src/commands/forget.ts +72 -0
  553. package/packages/cli/src/commands/health.ts +36 -0
  554. package/packages/cli/src/commands/inspect.ts +41 -0
  555. package/packages/cli/src/commands/link.ts +50 -0
  556. package/packages/cli/src/commands/migrate.ts +93 -0
  557. package/packages/cli/src/commands/recall.ts +99 -0
  558. package/packages/cli/src/commands/recent.ts +57 -0
  559. package/packages/cli/src/commands/remember.ts +139 -0
  560. package/packages/cli/src/commands/run.ts +58 -0
  561. package/packages/cli/src/commands/stale.ts +43 -0
  562. package/packages/cli/src/commands/stats.ts +42 -0
  563. package/packages/cli/src/index.ts +57 -0
  564. package/packages/cli/tsconfig.json +24 -0
  565. package/packages/mcp/package.json +26 -0
  566. package/packages/mcp/src/index.ts +877 -0
  567. package/packages/mcp/tsconfig.json +20 -0
  568. package/skills/squish-memory/SKILL.md +107 -114
  569. package/skills/squish-memory/install.sh +3 -3
  570. package/skills/squish-memory/{claude-desktop.json → references/claude-desktop.json} +12 -12
  571. package/skills/squish-memory/{openclaw.json → references/openclaw.json} +13 -13
  572. package/skills/squish-memory/{opencode.json → references/opencode.json} +14 -14
  573. package/.claude-plugin/marketplace.json +0 -20
  574. package/.claude-plugin/plugin.json +0 -32
  575. package/.env.mcp.example +0 -60
  576. package/.mcp.json +0 -11
  577. package/QUICK-START.md +0 -71
  578. package/bin/squish-add.mjs +0 -32
  579. package/bin/squish-rm.mjs +0 -21
  580. package/commands/context-paging.md +0 -51
  581. package/commands/context-status.md +0 -22
  582. package/commands/context.md +0 -5
  583. package/commands/core-memory.md +0 -56
  584. package/commands/health.md +0 -5
  585. package/commands/init.md +0 -39
  586. package/commands/merge.md +0 -113
  587. package/commands/observe.md +0 -5
  588. package/commands/recall.md +0 -5
  589. package/commands/remember.md +0 -11
  590. package/commands/search.md +0 -10
  591. package/config/mcp-cli-fallback-policy.json +0 -22
  592. package/config/mcp.json +0 -38
  593. package/config/plugin-manifest.json +0 -152
  594. package/config/plugin-manifest.schema.json +0 -244
  595. package/config/remote-memory-policy.json +0 -32
  596. package/dist/api/web/index.d.ts +0 -3
  597. package/dist/api/web/index.js +0 -4
  598. package/dist/api/web/web-server.d.ts +0 -3
  599. package/dist/api/web/web-server.js +0 -6
  600. package/dist/api/web/web.d.ts +0 -4
  601. package/dist/api/web/web.js +0 -639
  602. package/dist/commands/managed-sync.d.ts +0 -10
  603. package/dist/commands/managed-sync.js +0 -64
  604. package/dist/commands/mcp-server.d.ts +0 -3
  605. package/dist/commands/mcp-server.js +0 -393
  606. package/dist/core/context.js +0 -24
  607. package/dist/core/governance.js +0 -64
  608. package/dist/core/local-embeddings.d.ts +0 -6
  609. package/dist/core/local-embeddings.js +0 -20
  610. package/dist/core/namespaces/index.d.ts +0 -71
  611. package/dist/core/namespaces/index.js +0 -305
  612. package/dist/core/namespaces/uri-parser.d.ts +0 -31
  613. package/dist/core/namespaces/uri-parser.js +0 -74
  614. package/dist/core/observations.d.ts +0 -26
  615. package/dist/core/observations.js +0 -110
  616. package/dist/core/requirements.d.ts +0 -20
  617. package/dist/core/requirements.js +0 -35
  618. package/dist/core/search/qmd-search.d.ts +0 -61
  619. package/dist/core/search/qmd-search.js +0 -178
  620. package/dist/core/snapshots.d.ts +0 -29
  621. package/dist/core/snapshots.js +0 -220
  622. package/dist/core/sync/qmd-sync.d.ts +0 -106
  623. package/dist/core/sync/qmd-sync.js +0 -213
  624. package/dist/core/utils.js +0 -74
  625. package/dist/index.d.ts +0 -19
  626. package/dist/index.js +0 -997
  627. package/generated/mcp/manifest.json +0 -23
  628. package/generated/mcp/mcp-servers.json +0 -25
  629. package/generated/mcp/mcporter.json +0 -34
  630. package/generated/mcp/openclaw-memory-qmd.json +0 -17
  631. package/generated/mcp/runtime.json +0 -12
  632. package/hooks/hooks.json +0 -52
  633. package/hooks/post-tool-use.js +0 -26
  634. package/hooks/session-end.js +0 -28
  635. package/hooks/session-start.js +0 -33
  636. package/hooks/user-prompt-submit.js +0 -26
  637. package/hooks/utils.js +0 -153
  638. package/npx-installer.js +0 -208
  639. package/packages/plugin-claude-code/README.md +0 -73
  640. package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +0 -35
  641. package/packages/plugin-claude-code/dist/plugin-wrapper.js +0 -191
  642. package/packages/plugin-claude-code/package.json +0 -31
  643. package/packages/plugin-openclaw/README.md +0 -70
  644. package/packages/plugin-openclaw/dist/index.d.ts +0 -49
  645. package/packages/plugin-openclaw/dist/index.js +0 -262
  646. package/packages/plugin-openclaw/openclaw.plugin.json +0 -94
  647. package/packages/plugin-openclaw/package.json +0 -31
  648. package/packages/plugin-opencode/install.mjs +0 -217
  649. package/packages/plugin-opencode/package.json +0 -21
  650. package/plugin.json +0 -32
  651. package/scripts/build-release.sh +0 -36
  652. package/scripts/check-secrets.js +0 -132
  653. package/scripts/db/check-db.mjs +0 -88
  654. package/scripts/db/fix-all-columns.mjs +0 -52
  655. package/scripts/db/fix-schema-all.mjs +0 -55
  656. package/scripts/db/fix-schema-full.mjs +0 -46
  657. package/scripts/db/fix-schema.mjs +0 -38
  658. package/scripts/db/init-db.mjs +0 -13
  659. package/scripts/db/recreate-db.mjs +0 -14
  660. package/scripts/generate-mcp.mjs +0 -264
  661. package/scripts/github-release.sh +0 -77
  662. package/scripts/init-dirs.mjs +0 -13
  663. package/scripts/install-interactive.mjs +0 -677
  664. package/scripts/install-mcp.mjs +0 -116
  665. package/scripts/install-plugin.mjs +0 -415
  666. package/scripts/install-web.sh +0 -120
  667. package/scripts/install.mjs +0 -340
  668. package/scripts/openclaw-bootstrap.mjs +0 -127
  669. package/scripts/package-release.sh +0 -71
  670. package/scripts/remote-preflight.mjs +0 -62
  671. package/scripts/squish-fallback.mjs +0 -132
  672. package/scripts/test/test-all-systems.mjs +0 -139
  673. package/scripts/test/test-memory-system.mjs +0 -139
  674. package/scripts/test/test-v0.5.0.mjs +0 -210
  675. package/scripts/test-interactive.mjs +0 -131
  676. package/scripts/verify-mcp.mjs +0 -214
  677. package/skills/memory-guide/SKILL.md +0 -332
  678. package/skills/squish-cli/SKILL.md +0 -240
  679. package/skills/squish-mcp/SKILL.md +0 -355
  680. package/skills/squish-memory/install.mjs +0 -335
  681. package/skills/squish-memory/skill.json +0 -32
  682. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.d.ts +0 -0
  683. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.js +0 -0
  684. /package/dist/{algorithms → core/algorithms}/handlers/approve-merge.d.ts +0 -0
  685. /package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.d.ts +0 -0
  686. /package/dist/{algorithms → core/algorithms}/handlers/get-stats.d.ts +0 -0
  687. /package/dist/{algorithms → core/algorithms}/handlers/list-proposals.d.ts +0 -0
  688. /package/dist/{algorithms → core/algorithms}/handlers/preview-merge.d.ts +0 -0
  689. /package/dist/{algorithms → core/algorithms}/handlers/reject-merge.d.ts +0 -0
  690. /package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.d.ts +0 -0
  691. /package/dist/{algorithms → core/algorithms}/safety/safety-checks.js +0 -0
  692. /package/dist/{algorithms → core/algorithms}/utils/response-builder.d.ts +0 -0
  693. /package/dist/{algorithms → core/algorithms}/utils/response-builder.js +0 -0
  694. /package/dist/core/{context.d.ts → context/context.d.ts} +0 -0
  695. /package/dist/core/{agent-memory.d.ts → ingestion/agent-memory.d.ts} +0 -0
  696. /package/dist/core/{privacy.d.ts → security/privacy.d.ts} +0 -0
  697. /package/dist/core/{privacy.js → security/privacy.js} +0 -0
  698. /package/dist/core/{secret-detector.d.ts → security/secret-detector.d.ts} +0 -0
  699. /package/dist/core/{secret-detector.js → security/secret-detector.js} +0 -0
  700. /package/dist/core/{session-hooks → session}/session-hooks.d.ts +0 -0
  701. /package/dist/core/{session-hooks → session}/session-hooks.js +0 -0
  702. /package/dist/core/{cache.d.ts → storage/cache.d.ts} +0 -0
  703. /package/dist/core/{database.d.ts → storage/database.d.ts} +0 -0
  704. /package/dist/core/{database.js → storage/database.js} +0 -0
@@ -2,10 +2,10 @@ import { and, desc, eq, gte, lte } from 'drizzle-orm';
2
2
  import { getDb } from '../../db/index.js';
3
3
  import { getSchema } from '../../db/schema.js';
4
4
  import { config } from '../../config.js';
5
- import { getProjectByPath } from '../../core/projects.js';
6
- import { fromSqliteJson } from '../../core/memory/serialization.js';
7
- import { createDatabaseClient } from '../../core/database.js';
8
- import { normalizeTimestamp, clampLimit } from '../../core/utils.js';
5
+ import { requireProject } from '../../core/projects.js';
6
+ import { deserializeMetadata } from '../../core/memory/serialization.js';
7
+ import { createDatabaseClient } from '../storage/database.js';
8
+ import { normalizeTimestamp, clampLimit } from '../lib/utils.js';
9
9
  export async function searchConversations(input) {
10
10
  const limit = clampLimit(input.limit, 5, 1, 50);
11
11
  if (config.isTeamMode) {
@@ -19,10 +19,8 @@ export async function getRecentConversations(input) {
19
19
  const limit = clampLimit(input.n, 3, 1, 50);
20
20
  const whereParts = [];
21
21
  if (input.project) {
22
- const project = await getProjectByPath(input.project);
23
- if (project) {
24
- whereParts.push(eq(schema.conversations.projectId, project.id));
25
- }
22
+ const project = await requireProject(input.project);
23
+ whereParts.push(eq(schema.conversations.projectId, project.id));
26
24
  }
27
25
  if (input.before) {
28
26
  whereParts.push(lte(schema.conversations.startedAt, new Date(input.before)));
@@ -46,24 +44,24 @@ async function searchConversationsSqlite(input, limit) {
46
44
  params.push(input.role);
47
45
  }
48
46
  params.push(limit);
49
- const statement = sqlite.prepare(`
50
- SELECT DISTINCT
51
- c.id as id,
52
- c.project_id as projectId,
53
- c.session_id as sessionId,
54
- c.title as title,
55
- c.summary as summary,
56
- c.message_count as messageCount,
57
- c.token_count as tokenCount,
58
- c.started_at as startedAt,
59
- c.ended_at as endedAt,
60
- c.metadata as metadata
61
- FROM conversations c
62
- JOIN messages m ON m.conversation_id = c.id
63
- JOIN messages_fts ON messages_fts.rowid = m.rowid
64
- WHERE ${where}
65
- ORDER BY c.started_at DESC
66
- LIMIT ?
47
+ const statement = sqlite.prepare(`
48
+ SELECT DISTINCT
49
+ c.id as id,
50
+ c.project_id as projectId,
51
+ c.session_id as sessionId,
52
+ c.title as title,
53
+ c.summary as summary,
54
+ c.message_count as messageCount,
55
+ c.token_count as tokenCount,
56
+ c.started_at as startedAt,
57
+ c.ended_at as endedAt,
58
+ c.metadata as metadata
59
+ FROM conversations c
60
+ JOIN messages m ON m.conversation_id = c.id
61
+ JOIN messages_fts ON messages_fts.rowid = m.rowid
62
+ WHERE ${where}
63
+ ORDER BY c.started_at DESC
64
+ LIMIT ?
67
65
  `);
68
66
  const rows = statement.all(...params);
69
67
  return rows.map((row) => normalizeConversation(row));
@@ -77,26 +75,26 @@ async function searchConversationsPostgres(input, limit) {
77
75
  whereParts.push(`m.role = $${values.length}`);
78
76
  }
79
77
  values.push(limit);
80
- const rows = await db.$client.query(`SELECT DISTINCT ON (c.id)
81
- c.id as "id",
82
- c.project_id as "projectId",
83
- c.session_id as "sessionId",
84
- c.title as "title",
85
- c.summary as "summary",
86
- c.message_count as "messageCount",
87
- c.token_count as "tokenCount",
88
- c.started_at as "startedAt",
89
- c.ended_at as "endedAt",
90
- c.metadata as "metadata"
91
- FROM conversations c
92
- JOIN messages m ON m.conversation_id = c.id
93
- WHERE ${whereParts.join(' AND ')}
94
- ORDER BY c.id, c.started_at DESC
78
+ const rows = await db.$client.query(`SELECT DISTINCT ON (c.id)
79
+ c.id as "id",
80
+ c.project_id as "projectId",
81
+ c.session_id as "sessionId",
82
+ c.title as "title",
83
+ c.summary as "summary",
84
+ c.message_count as "messageCount",
85
+ c.token_count as "tokenCount",
86
+ c.started_at as "startedAt",
87
+ c.ended_at as "endedAt",
88
+ c.metadata as "metadata"
89
+ FROM conversations c
90
+ JOIN messages m ON m.conversation_id = c.id
91
+ WHERE ${whereParts.join(' AND ')}
92
+ ORDER BY c.id, c.started_at DESC
95
93
  LIMIT $${values.length}`, values);
96
94
  return rows.rows.map((row) => normalizeConversation(row));
97
95
  }
98
96
  function normalizeConversation(row) {
99
- const metadata = config.isTeamMode ? row.metadata : fromSqliteJson(row.metadata ?? null);
97
+ const metadata = deserializeMetadata(row.metadata ?? null);
100
98
  return {
101
99
  id: row.id,
102
100
  projectId: row.projectId ?? row.project_id ?? null,
@@ -1,17 +1,14 @@
1
1
  import { desc, eq } from 'drizzle-orm';
2
2
  import { getDb } from '../../db/index.js';
3
3
  import { getSchema } from '../../db/schema.js';
4
- import { config } from '../../config.js';
5
- import { getProjectByPath } from '../../core/projects.js';
6
- import { fromSqliteJson } from '../../core/memory/serialization.js';
7
- import { createDatabaseClient } from '../../core/database.js';
8
- import { normalizeTimestamp } from '../../core/utils.js';
4
+ import { requireProject } from '../../core/projects.js';
5
+ import { deserializeMetadata } from '../../core/memory/serialization.js';
6
+ import { createDatabaseClient } from '../storage/database.js';
7
+ import { normalizeTimestamp } from '../lib/utils.js';
9
8
  export async function getEntitiesForProject(projectPath, limit) {
10
9
  const db = createDatabaseClient(await getDb());
11
10
  const schema = await getSchema();
12
- const project = await getProjectByPath(projectPath);
13
- if (!project)
14
- return [];
11
+ const project = await requireProject(projectPath);
15
12
  const rows = await db.select().from(schema.entities)
16
13
  .where(eq(schema.entities.projectId, project.id))
17
14
  .orderBy(desc(schema.entities.createdAt))
@@ -19,7 +16,7 @@ export async function getEntitiesForProject(projectPath, limit) {
19
16
  return rows.map((row) => normalizeEntity(row));
20
17
  }
21
18
  function normalizeEntity(row) {
22
- const properties = config.isTeamMode ? row.properties : fromSqliteJson(row.properties ?? null);
19
+ const properties = deserializeMetadata(row.properties ?? null);
23
20
  return {
24
21
  id: row.id,
25
22
  projectId: row.projectId ?? row.project_id ?? null,
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Compute a simple graph boost for a set of memory IDs.
3
+ * For each memory, sum (weight * coactivationCount) of outgoing associations.
4
+ * Returns a map from memoryId to boost value (default 0).
5
+ */
6
+ export declare function computeGraphBoost(memoryIds: string[]): Promise<Record<string, number>>;
7
+ //# sourceMappingURL=graph-boost.d.ts.map
@@ -0,0 +1,23 @@
1
+ import { getDb } from '../../db/index.js';
2
+ import { memoryAssociations } from '../../db/drizzle/schema.js';
3
+ import { inArray } from 'drizzle-orm';
4
+ /**
5
+ * Compute a simple graph boost for a set of memory IDs.
6
+ * For each memory, sum (weight * coactivationCount) of outgoing associations.
7
+ * Returns a map from memoryId to boost value (default 0).
8
+ */
9
+ export async function computeGraphBoost(memoryIds) {
10
+ const boost = {};
11
+ if (memoryIds.length === 0)
12
+ return boost;
13
+ const db = await getDb();
14
+ // @ts-ignore - drizzle overload
15
+ const rows = await db.select().from(memoryAssociations).where(inArray(memoryAssociations.fromMemoryId, memoryIds));
16
+ for (const row of rows) {
17
+ const from = row.fromMemoryId;
18
+ const val = (row.weight ?? 0) * (row.coactivationCount ?? 0);
19
+ boost[from] = (boost[from] ?? 0) + val;
20
+ }
21
+ return boost;
22
+ }
23
+ //# sourceMappingURL=graph-boost.js.map
@@ -0,0 +1,36 @@
1
+ import { type QMDSearchResult } from '../embeddings/qmd-client.js';
2
+ export type { QMDSearchResult };
3
+ export interface QMDStatus {
4
+ indexHealth: string;
5
+ documentCount: number;
6
+ collections?: Array<{
7
+ name: string;
8
+ path: string;
9
+ documentCount: number;
10
+ }>;
11
+ }
12
+ export declare function isAvailable(): Promise<boolean>;
13
+ export declare function search(query: string, options?: {
14
+ collection?: string;
15
+ limit?: number;
16
+ minScore?: number;
17
+ }): Promise<QMDSearchResult[]>;
18
+ export declare function vsearch(query: string, options?: {
19
+ collection?: string;
20
+ limit?: number;
21
+ minScore?: number;
22
+ }): Promise<QMDSearchResult[]>;
23
+ export declare function query(queryText: string, options?: {
24
+ collection?: string;
25
+ limit?: number;
26
+ minScore?: number;
27
+ }): Promise<QMDSearchResult[]>;
28
+ export declare function get(pathOrDocid: string, options?: {
29
+ full?: boolean;
30
+ maxBytes?: number;
31
+ }): Promise<string>;
32
+ export declare function status(): Promise<QMDStatus | null>;
33
+ export declare function embed(): Promise<number[] | null>;
34
+ export declare function ensureWikiDir(projectPath: string): Promise<string>;
35
+ export declare function close(): Promise<void>;
36
+ //# sourceMappingURL=qmd-wrapper.d.ts.map
@@ -0,0 +1,58 @@
1
+ import { getQMDClient } from '../embeddings/qmd-client.js';
2
+ export async function isAvailable() {
3
+ const client = await getQMDClient();
4
+ return client.isAvailable();
5
+ }
6
+ export async function search(query, options = {}) {
7
+ const client = await getQMDClient();
8
+ if (!(await client.isAvailable()))
9
+ return [];
10
+ return client.search({ query, ...options });
11
+ }
12
+ export async function vsearch(query, options = {}) {
13
+ const client = await getQMDClient();
14
+ if (!(await client.isAvailable()))
15
+ return [];
16
+ return client.vsearch({ query, ...options });
17
+ }
18
+ export async function query(queryText, options = {}) {
19
+ const client = await getQMDClient();
20
+ if (!(await client.isAvailable()))
21
+ return [];
22
+ return client.query({ query: queryText, ...options });
23
+ }
24
+ export async function get(pathOrDocid, options = {}) {
25
+ const client = await getQMDClient();
26
+ if (!(await client.isAvailable()))
27
+ return '';
28
+ return client.get({ pathOrDocid, ...options });
29
+ }
30
+ export async function status() {
31
+ const client = await getQMDClient();
32
+ if (!(await client.isAvailable()))
33
+ return null;
34
+ const result = await client.status();
35
+ if (!result)
36
+ return null;
37
+ return {
38
+ indexHealth: result.indexHealth,
39
+ documentCount: result.collections.reduce((sum, collection) => sum + collection.documentCount, 0),
40
+ collections: result.collections,
41
+ };
42
+ }
43
+ export async function embed() {
44
+ return null;
45
+ }
46
+ export async function ensureWikiDir(projectPath) {
47
+ const { join } = await import('path');
48
+ const { mkdirSync, existsSync } = await import('fs');
49
+ const wikiDir = join(projectPath, '.squish', 'wiki');
50
+ if (!existsSync(wikiDir))
51
+ mkdirSync(wikiDir, { recursive: true });
52
+ return wikiDir;
53
+ }
54
+ export async function close() {
55
+ const client = await getQMDClient();
56
+ await client.disconnect();
57
+ }
58
+ //# sourceMappingURL=qmd-wrapper.js.map
@@ -0,0 +1,6 @@
1
+ export declare function encrypt(plain: string, passphrase?: string): {
2
+ ciphertext: string;
3
+ nonce: string;
4
+ };
5
+ export declare function decrypt(ciphertext: string, nonceB64: string, passphrase?: string): string;
6
+ //# sourceMappingURL=encrypt.d.ts.map
@@ -0,0 +1,47 @@
1
+ import { randomBytes, pbkdf2Sync, createCipheriv, createDecipheriv } from 'crypto';
2
+ import { config } from '../../config.js';
3
+ const ITERATIONS = 100_000;
4
+ const KEY_LEN = 32; // 256-bit
5
+ const DIGEST = 'sha256';
6
+ const ALGO = 'aes-256-gcm';
7
+ const NONCE_LEN = 12;
8
+ /**
9
+ * Derive a symmetric key from the passphrase and a salt.
10
+ * The salt is stored in `.squish/salt` (plain text) and is generated once.
11
+ */
12
+ function getSalt() {
13
+ const fs = require('fs');
14
+ const path = require('path');
15
+ const saltPath = path.join(config.dataDir, 'salt');
16
+ if (!fs.existsSync(saltPath)) {
17
+ const salt = randomBytes(16).toString('hex');
18
+ fs.writeFileSync(saltPath, salt);
19
+ return Buffer.from(salt, 'hex');
20
+ }
21
+ return Buffer.from(fs.readFileSync(saltPath, 'utf-8'), 'hex');
22
+ }
23
+ function deriveKey(passphrase) {
24
+ const salt = getSalt();
25
+ return pbkdf2Sync(passphrase, salt, ITERATIONS, KEY_LEN, DIGEST);
26
+ }
27
+ export function encrypt(plain, passphrase) {
28
+ const key = deriveKey(passphrase || config.encryptionPassphrase);
29
+ const nonce = randomBytes(NONCE_LEN);
30
+ const cipher = createCipheriv(ALGO, key, nonce);
31
+ const encrypted = Buffer.concat([cipher.update(plain, 'utf8'), cipher.final()]);
32
+ const tag = cipher.getAuthTag();
33
+ const ciphertext = Buffer.concat([encrypted, tag]).toString('base64');
34
+ return { ciphertext, nonce: nonce.toString('base64') };
35
+ }
36
+ export function decrypt(ciphertext, nonceB64, passphrase) {
37
+ const key = deriveKey(passphrase || config.encryptionPassphrase);
38
+ const nonce = Buffer.from(nonceB64, 'base64');
39
+ const data = Buffer.from(ciphertext, 'base64');
40
+ const tag = data.slice(data.length - 16);
41
+ const encrypted = data.slice(0, data.length - 16);
42
+ const decipher = createDecipheriv(ALGO, key, nonce);
43
+ decipher.setAuthTag(tag);
44
+ const decrypted = Buffer.concat([decipher.update(encrypted), decipher.final()]);
45
+ return decrypted.toString('utf8');
46
+ }
47
+ //# sourceMappingURL=encrypt.js.map
@@ -16,6 +16,11 @@ export declare function pinMemory(memoryId: string): Promise<void>;
16
16
  export declare function unpinMemory(memoryId: string): Promise<void>;
17
17
  /**
18
18
  * Get all pinned memories for auto-injection into context
19
+ * Works regardless of governance settings - pinned memories should always be accessible
19
20
  */
20
- export declare function getPinnedMemories(): Promise<any[]>;
21
+ export declare function getPinnedMemories(projectId?: string): Promise<any[]>;
22
+ /**
23
+ * Get pinned memories formatted for context injection
24
+ */
25
+ export declare function getPinnedMemoriesForContext(projectId?: string): Promise<string[]>;
21
26
  //# sourceMappingURL=governance.d.ts.map
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Memory Governance
3
+ * Implements protection, pinning, and immutability rules
4
+ */
5
+ import { eq } from 'drizzle-orm';
6
+ import { getDb } from '../../db/index.js';
7
+ import { getSchema } from '../../db/schema.js';
8
+ import { performMemoryOperation } from '../utils/memory-operations.js';
9
+ import { logger } from '../logger.js';
10
+ import { createDatabaseClient } from '../storage/database.js';
11
+ /**
12
+ * Mark a memory as protected (cannot be evicted)
13
+ */
14
+ export async function protectMemory(memoryId, reason) {
15
+ await performMemoryOperation(memoryId, {
16
+ name: 'protecting memory',
17
+ updates: {
18
+ isProtected: true,
19
+ metadata: { protectionReason: reason, protectedAt: new Date().toISOString() },
20
+ },
21
+ });
22
+ }
23
+ /**
24
+ * Pin a memory for automatic injection into context
25
+ */
26
+ export async function pinMemory(memoryId) {
27
+ const db = createDatabaseClient(await getDb());
28
+ const schema = await getSchema();
29
+ await db
30
+ .update(schema.memories)
31
+ .set({
32
+ isPinned: true,
33
+ importanceScore: 100,
34
+ lastImportanceRecalc: new Date(),
35
+ })
36
+ .where(eq(schema.memories.id, memoryId));
37
+ }
38
+ /**
39
+ * Unpin a memory
40
+ */
41
+ export async function unpinMemory(memoryId) {
42
+ const db = createDatabaseClient(await getDb());
43
+ const schema = await getSchema();
44
+ await db
45
+ .update(schema.memories)
46
+ .set({
47
+ isPinned: false,
48
+ lastImportanceRecalc: new Date(),
49
+ })
50
+ .where(eq(schema.memories.id, memoryId));
51
+ }
52
+ /**
53
+ * Get all pinned memories for auto-injection into context
54
+ * Works regardless of governance settings - pinned memories should always be accessible
55
+ */
56
+ export async function getPinnedMemories(projectId) {
57
+ try {
58
+ const db = await getDb();
59
+ const schema = await getSchema();
60
+ let query = db
61
+ .select()
62
+ .from(schema.memories)
63
+ .where(eq(schema.memories.isPinned, true))
64
+ .limit(50);
65
+ return await query;
66
+ }
67
+ catch (error) {
68
+ logger.error('Error retrieving pinned memories', error);
69
+ return [];
70
+ }
71
+ }
72
+ /**
73
+ * Get pinned memories formatted for context injection
74
+ */
75
+ export async function getPinnedMemoriesForContext(projectId) {
76
+ const pinned = await getPinnedMemories(projectId);
77
+ return pinned.map(m => `[Pinned] ${m.content?.substring(0, 500) || '(no content)'}`);
78
+ }
79
+ //# sourceMappingURL=governance.js.map
@@ -1,14 +1,14 @@
1
1
  /** Session Auto-Load - Automatically load context when MCP session initializes */
2
2
  import { logger } from '../logger.js';
3
3
  import { config } from '../../config.js';
4
- import { initializeCoreMemory, getCoreMemory } from '../core-memory.js';
5
- import { searchMemories } from '../memory/memories.js';
6
- import { getProjectContext } from '../context.js';
7
- import { ensureProject } from '../projects.js';
4
+ import { initializeCoreMemory, getCoreMemory } from '../ingestion/core-memory.js';
5
+ import { search } from '../memory/memories.js';
6
+ import { getProjectContext } from '../context/context.js';
7
+ import { getOrCreateProject } from '../projects.js';
8
8
  import { DEFAULT_AUTO_LOAD_CONFIG } from './types.js';
9
- function estimateTokens(text) {
10
- return Math.ceil(text.length / 4);
11
- }
9
+ import { estimateTokens } from '../context/context-window.js';
10
+ import { getLatestProjectWorkingSetSummary } from './working-set.js';
11
+ import { getHotCacheSummary } from '../hot-cache.js';
12
12
  export async function performAutoLoad(projectPath, customConfig) {
13
13
  const startTime = Date.now();
14
14
  const cfg = { ...DEFAULT_AUTO_LOAD_CONFIG, ...customConfig };
@@ -26,13 +26,38 @@ export async function performAutoLoad(projectPath, customConfig) {
26
26
  return result;
27
27
  }
28
28
  try {
29
- const project = await ensureProject(projectPath);
29
+ const project = await getOrCreateProject(projectPath);
30
30
  if (!project) {
31
31
  result.warnings.push(`Failed to create/find project: ${projectPath}`);
32
32
  result.duration = Date.now() - startTime;
33
33
  return result;
34
34
  }
35
35
  const projectId = project.id;
36
+ try {
37
+ const workingSetSummary = await getLatestProjectWorkingSetSummary(projectPath);
38
+ if (workingSetSummary) {
39
+ result.tokensUsed += estimateTokens(workingSetSummary);
40
+ }
41
+ }
42
+ catch (error) {
43
+ const msg = error instanceof Error ? error.message : String(error);
44
+ result.warnings.push(`Failed to load session working set: ${msg}`);
45
+ }
46
+ // NEW: Load persistent hot cache (Karpathy-style, survives restart)
47
+ if (cfg.includeCoreMemory) {
48
+ try {
49
+ const hotCacheSummary = await getHotCacheSummary({ projectPath, maxEntries: 5 });
50
+ if (hotCacheSummary) {
51
+ result.tokensUsed += estimateTokens(hotCacheSummary);
52
+ logger.info('[AutoLoad] Hot cache loaded from persistent storage');
53
+ }
54
+ }
55
+ catch (error) {
56
+ const msg = error instanceof Error ? error.message : String(error);
57
+ result.warnings.push(`Failed to load hot cache: ${msg}`);
58
+ logger.warn(`[AutoLoad] Failed to load hot cache: ${msg}`);
59
+ }
60
+ }
36
61
  if (cfg.includeCoreMemory) {
37
62
  try {
38
63
  await initializeCoreMemory(projectId);
@@ -52,7 +77,7 @@ export async function performAutoLoad(projectPath, customConfig) {
52
77
  }
53
78
  if (cfg.includeRecentMemories && cfg.recentMemoryCount > 0) {
54
79
  try {
55
- const recentMemories = await searchMemories({
80
+ const recentMemories = await search({
56
81
  query: '',
57
82
  project: projectPath,
58
83
  limit: cfg.recentMemoryCount,
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Session Entity Tracker
3
+ *
4
+ * Tracks "active" entities in conversation sessions to enable
5
+ * reference resolution (e.g., resolving "she" to "Alice").
6
+ */
7
+ export interface SessionEntity {
8
+ entityId: string;
9
+ entityName: string;
10
+ entityType: string;
11
+ mentionCount: number;
12
+ lastMentionedAt: Date;
13
+ salience: number;
14
+ }
15
+ export interface SessionEntityMap {
16
+ sessionId: string;
17
+ entities: Map<string, SessionEntity>;
18
+ updatedAt: Date;
19
+ }
20
+ /**
21
+ * Track an entity mention in a session.
22
+ * Updates salience based on recency and frequency.
23
+ */
24
+ export declare function trackEntityInSession(sessionId: string, entityId: string, entityName: string, entityType: string): void;
25
+ /**
26
+ * Get active entities for a session, sorted by salience.
27
+ * Applies time-based decay to salience scores.
28
+ */
29
+ export declare function getActiveSessionEntities(sessionId: string, options?: {
30
+ limit?: number;
31
+ minSalience?: number;
32
+ entityTypes?: string[];
33
+ }): SessionEntity[];
34
+ /**
35
+ * Resolve a reference (pronoun, definite reference) to an entity in the session.
36
+ * Returns the most salient entity matching the reference type.
37
+ */
38
+ export declare function resolveReference(sessionId: string, reference: string): SessionEntity | null;
39
+ /**
40
+ * Clear session entities (e.g., when a session ends).
41
+ */
42
+ export declare function clearSessionEntities(sessionId: string): void;
43
+ /**
44
+ * Get all active sessions.
45
+ */
46
+ export declare function getActiveSessions(): string[];
47
+ /**
48
+ * Decay all session entities (call periodically).
49
+ * Reduces salience of all entities across all sessions.
50
+ */
51
+ export declare function decayAllSessionEntities(): void;
52
+ /**
53
+ * Persist session entities to the database for durability.
54
+ * Called periodically or on session end.
55
+ */
56
+ export declare function persistSessionEntities(sessionId: string): Promise<void>;
57
+ /**
58
+ * Load session entities from the database.
59
+ * Called when a session starts.
60
+ */
61
+ export declare function loadSessionEntities(sessionId: string): Promise<void>;
62
+ //# sourceMappingURL=entity-tracker.d.ts.map