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
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Capture Filter - Smart filtering of tool usage
3
+ *
4
+ * Don't capture everything - filter out noise.
5
+ * Only capture meaningful actions that warrant memory.
6
+ */
7
+ /** Tool categories for capture */
8
+ export type ToolCategory = 'reading' | 'modification' | 'command' | 'commit' | 'testing' | 'search' | 'planning' | 'other';
9
+ /** Capture decision */
10
+ export interface CaptureDecision {
11
+ shouldCapture: boolean;
12
+ reason?: string;
13
+ priority: 'high' | 'medium' | 'low';
14
+ }
15
+ /**
16
+ * Check if a tool should be captured
17
+ *
18
+ * Rules:
19
+ * - Write, Edit, MultiEdit → capture (modification)
20
+ * - Bash with commit → capture (commit)
21
+ * - Bash with test → capture (testing)
22
+ * - Task → capture (planning)
23
+ * - Read, Glob, grep → skip (reading - too noisy)
24
+ */
25
+ export declare function shouldCaptureTool(toolName: string): boolean;
26
+ /**
27
+ * Get detailed capture decision
28
+ */
29
+ export declare function getCaptureDecision(toolName: string): CaptureDecision;
30
+ /**
31
+ * Check if Bash command should be captured based on content
32
+ */
33
+ export declare function shouldCaptureBashCommand(command: string): {
34
+ capture: boolean;
35
+ reason: string;
36
+ };
37
+ /**
38
+ * Categorize tool for tagging
39
+ */
40
+ export declare function categorizeTool(toolName: string): ToolCategory;
41
+ //# sourceMappingURL=capture-filter.d.ts.map
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Capture Filter - Smart filtering of tool usage
3
+ *
4
+ * Don't capture everything - filter out noise.
5
+ * Only capture meaningful actions that warrant memory.
6
+ */
7
+ /**
8
+ * Check if a tool should be captured
9
+ *
10
+ * Rules:
11
+ * - Write, Edit, MultiEdit → capture (modification)
12
+ * - Bash with commit → capture (commit)
13
+ * - Bash with test → capture (testing)
14
+ * - Task → capture (planning)
15
+ * - Read, Glob, grep → skip (reading - too noisy)
16
+ */
17
+ export function shouldCaptureTool(toolName) {
18
+ const decision = getCaptureDecision(toolName);
19
+ return decision.shouldCapture;
20
+ }
21
+ /**
22
+ * Get detailed capture decision
23
+ */
24
+ export function getCaptureDecision(toolName) {
25
+ const tool = toolName.toLowerCase();
26
+ // High priority - always capture
27
+ if (['write', 'edit', 'multiedit'].includes(tool)) {
28
+ return {
29
+ shouldCapture: true,
30
+ reason: 'File modification',
31
+ priority: 'high',
32
+ };
33
+ }
34
+ // Command with specific patterns
35
+ if (tool === 'bash') {
36
+ // Let the caller check the command for commit/test patterns
37
+ return {
38
+ shouldCapture: true, // Will be filtered by content check
39
+ reason: 'Command execution',
40
+ priority: 'medium',
41
+ };
42
+ }
43
+ // Task operations
44
+ if (['task', 'todowrite'].includes(tool)) {
45
+ return {
46
+ shouldCapture: true,
47
+ reason: 'Task/planning activity',
48
+ priority: 'high',
49
+ };
50
+ }
51
+ // Skip noisy tools
52
+ if (['read', 'glob', 'grep', 'websearch', 'webfetch', 'codesearch'].includes(tool)) {
53
+ return {
54
+ shouldCapture: false,
55
+ reason: 'Reading/search tool - too noisy',
56
+ priority: 'low',
57
+ };
58
+ }
59
+ // Skip other common noise
60
+ if (['bash'].includes(tool)) {
61
+ return {
62
+ shouldCapture: false, // Too noisy without filtering
63
+ reason: 'General command - filtered',
64
+ priority: 'low',
65
+ };
66
+ }
67
+ // Default: don't capture unknown tools
68
+ return {
69
+ shouldCapture: false,
70
+ reason: 'Unknown tool',
71
+ priority: 'low',
72
+ };
73
+ }
74
+ /**
75
+ * Check if Bash command should be captured based on content
76
+ */
77
+ export function shouldCaptureBashCommand(command) {
78
+ const cmd = command.toLowerCase();
79
+ // Git commits - HIGH priority
80
+ if (cmd.includes('git commit') || cmd.includes('git add') && cmd.includes('git commit')) {
81
+ return { capture: true, reason: 'Git commit' };
82
+ }
83
+ // Tests - HIGH priority
84
+ if (cmd.includes('test') || cmd.includes('jest') || cmd.includes('vitest') ||
85
+ cmd.includes('pytest') || cmd.includes('bun test')) {
86
+ return { capture: true, reason: 'Test execution' };
87
+ }
88
+ // Build/compile - MEDIUM priority
89
+ if (cmd.includes('build') || cmd.includes('compile') || cmd.includes('tsc') ||
90
+ cmd.includes('bun build') || cmd.includes('npm run build')) {
91
+ return { capture: true, reason: 'Build/compile' };
92
+ }
93
+ // Installation - LOW priority
94
+ if (cmd.includes('npm install') || cmd.includes('bun install') ||
95
+ cmd.includes('pip install') || cmd.includes('yarn add')) {
96
+ return { capture: false, reason: 'Package installation - too noisy' };
97
+ }
98
+ // Git operations (non-commit) - LOW priority
99
+ if (cmd.includes('git') && !cmd.includes('commit')) {
100
+ return { capture: false, reason: 'Git operations - not commits' };
101
+ }
102
+ // File operations - MEDIUM priority
103
+ if (cmd.includes('mkdir') || cmd.includes('touch') || cmd.includes('rm ')) {
104
+ return { capture: true, reason: 'File operation' };
105
+ }
106
+ // Default - don't capture
107
+ return { capture: false, reason: 'General command' };
108
+ }
109
+ /**
110
+ * Categorize tool for tagging
111
+ */
112
+ export function categorizeTool(toolName) {
113
+ const tool = toolName.toLowerCase();
114
+ if (['write', 'edit', 'multiedit'].includes(tool)) {
115
+ return 'modification';
116
+ }
117
+ if (tool === 'bash') {
118
+ return 'command';
119
+ }
120
+ if (['read', 'glob', 'grep', 'websearch', 'webfetch'].includes(tool)) {
121
+ return 'reading';
122
+ }
123
+ if (['task', 'todowrite', 'todo-read'].includes(tool)) {
124
+ return 'planning';
125
+ }
126
+ return 'other';
127
+ }
128
+ //# sourceMappingURL=capture-filter.js.map
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Hot Cache - Persistent session context (Karpathy-style)
3
+ *
4
+ * Implements the "hot.md" layer from LLM Wiki pattern:
5
+ * - ~500 words persistent session context
6
+ * - Survives restart (unlike session working set)
7
+ * - Auto-updates on session events
8
+ * - Deduplication and stale detection
9
+ */
10
+ export interface HotCacheEntry {
11
+ id: string;
12
+ content: string;
13
+ hash: string;
14
+ createdAt: number;
15
+ lastReferencedAt: number;
16
+ referenceCount: number;
17
+ tags?: string[];
18
+ }
19
+ export interface HotCache {
20
+ version: string;
21
+ projectPath: string;
22
+ entries: HotCacheEntry[];
23
+ lastUpdated: number;
24
+ staleEntries: string[];
25
+ }
26
+ /**
27
+ * Load hot cache from disk (or create new)
28
+ */
29
+ export declare function loadHotCache(projectPath?: string): Promise<HotCache>;
30
+ /**
31
+ * Save hot cache to disk
32
+ */
33
+ export declare function saveHotCache(cache: HotCache): Promise<void>;
34
+ /**
35
+ * Add an entry to hot cache (with deduplication)
36
+ */
37
+ export declare function addToHotCache(content: string, options?: {
38
+ projectPath?: string;
39
+ tags?: string[];
40
+ reference?: boolean;
41
+ }): Promise<HotCache>;
42
+ /**
43
+ * Get hot cache summary for context
44
+ * Returns markdown-formatted summary of recent entries
45
+ */
46
+ export declare function getHotCacheSummary(options?: {
47
+ projectPath?: string;
48
+ maxEntries?: number;
49
+ }): Promise<string>;
50
+ /**
51
+ * Reference an existing hot cache entry (prevents staleness)
52
+ */
53
+ export declare function referenceHotCacheEntry(entryId: string, projectPath?: string): Promise<boolean>;
54
+ /**
55
+ * Remove stale entries from hot cache
56
+ */
57
+ export declare function cleanStaleEntries(projectPath?: string): Promise<number>;
58
+ /**
59
+ * Add session context to hot cache
60
+ * Called from session hooks with key session information
61
+ */
62
+ export declare function addSessionContextToHotCache(sessionInfo: {
63
+ activeFiles?: string[];
64
+ commands?: string[];
65
+ failures?: string[];
66
+ decisions?: string[];
67
+ hypotheses?: string[];
68
+ }, projectPath?: string): Promise<HotCache>;
69
+ /**
70
+ * Get all hot cache entries (for advanced use)
71
+ */
72
+ export declare function getHotCacheEntries(projectPath?: string): Promise<HotCacheEntry[]>;
73
+ /**
74
+ * Clear hot cache (dangerous - use with caution)
75
+ */
76
+ export declare function clearHotCache(projectPath?: string): Promise<void>;
77
+ /**
78
+ * Get hot cache statistics
79
+ */
80
+ export declare function getHotCacheStats(projectPath?: string): Promise<{
81
+ entries: number;
82
+ staleEntries: number;
83
+ oldestEntry: number | null;
84
+ newestEntry: number | null;
85
+ }>;
86
+ //# sourceMappingURL=hot-cache.d.ts.map
@@ -0,0 +1,285 @@
1
+ /**
2
+ * Hot Cache - Persistent session context (Karpathy-style)
3
+ *
4
+ * Implements the "hot.md" layer from LLM Wiki pattern:
5
+ * - ~500 words persistent session context
6
+ * - Survives restart (unlike session working set)
7
+ * - Auto-updates on session events
8
+ * - Deduplication and stale detection
9
+ */
10
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
11
+ import { join } from 'path';
12
+ import { createHash } from 'crypto';
13
+ import { logger } from '../logger.js';
14
+ import { getProjectPath } from '../projects.js';
15
+ const HOT_CACHE_VERSION = '1.0.0';
16
+ const MAX_HOT_CACHE_SIZE = 500; // ~500 words max
17
+ const STALE_THRESHOLD_DAYS = 7; // Flag as stale after 7 days
18
+ const STALE_REFERENCE_COUNT = 3; // Minimum refs before considering stale
19
+ let hotCacheInstance = null;
20
+ /**
21
+ * Get the hot cache file path for a project
22
+ */
23
+ function getHotCachePath(projectPath) {
24
+ return join(projectPath, '.squish', 'hot-cache.json');
25
+ }
26
+ /**
27
+ * Ensure .squish directory exists
28
+ */
29
+ async function ensureSquishDir(projectPath) {
30
+ const squishDir = join(projectPath, '.squish');
31
+ if (!existsSync(squishDir)) {
32
+ mkdirSync(squishDir, { recursive: true });
33
+ }
34
+ return squishDir;
35
+ }
36
+ /**
37
+ * Create content hash for deduplication
38
+ */
39
+ function hashContent(content) {
40
+ return createHash('sha256').update(content.trim()).digest('hex').slice(0, 12);
41
+ }
42
+ /**
43
+ * Load hot cache from disk (or create new)
44
+ */
45
+ export async function loadHotCache(projectPath) {
46
+ const path = projectPath || await getProjectPath();
47
+ if (!path) {
48
+ return createEmptyHotCache('');
49
+ }
50
+ const cachePath = getHotCachePath(path);
51
+ try {
52
+ if (existsSync(cachePath)) {
53
+ const content = readFileSync(cachePath, 'utf-8');
54
+ const cache = JSON.parse(content);
55
+ // Clean stale entries on load
56
+ cache.staleEntries = identifyStaleEntries(cache.entries);
57
+ // Remove very stale entries (>14 days)
58
+ cache.entries = cache.entries.filter(entry => {
59
+ const ageDays = (Date.now() - entry.lastReferencedAt) / (24 * 60 * 60 * 1000);
60
+ return ageDays < 14;
61
+ });
62
+ logger.info('[HotCache] Loaded', { entries: cache.entries.length, path });
63
+ return cache;
64
+ }
65
+ }
66
+ catch (error) {
67
+ logger.warn('[HotCache] Load failed, creating new', { error });
68
+ }
69
+ return createEmptyHotCache(path);
70
+ }
71
+ /**
72
+ * Create empty hot cache
73
+ */
74
+ function createEmptyHotCache(projectPath) {
75
+ return {
76
+ version: HOT_CACHE_VERSION,
77
+ projectPath,
78
+ entries: [],
79
+ lastUpdated: Date.now(),
80
+ staleEntries: [],
81
+ };
82
+ }
83
+ /**
84
+ * Identify stale entries (>7 days without enough references)
85
+ */
86
+ function identifyStaleEntries(entries) {
87
+ const stale = [];
88
+ const now = Date.now();
89
+ for (const entry of entries) {
90
+ const daysSinceRef = (now - entry.lastReferencedAt) / (24 * 60 * 60 * 1000);
91
+ if (daysSinceRef > STALE_THRESHOLD_DAYS && entry.referenceCount < STALE_REFERENCE_COUNT) {
92
+ stale.push(entry.id);
93
+ }
94
+ }
95
+ return stale;
96
+ }
97
+ /**
98
+ * Save hot cache to disk
99
+ */
100
+ export async function saveHotCache(cache) {
101
+ const cachePath = getHotCachePath(cache.projectPath);
102
+ try {
103
+ await ensureSquishDir(cache.projectPath);
104
+ writeFileSync(cachePath, JSON.stringify(cache, null, 2), 'utf-8');
105
+ cache.lastUpdated = Date.now();
106
+ }
107
+ catch (error) {
108
+ logger.error('[HotCache] Save failed', { error });
109
+ }
110
+ }
111
+ /**
112
+ * Add an entry to hot cache (with deduplication)
113
+ */
114
+ export async function addToHotCache(content, options) {
115
+ const path = options?.projectPath || await getProjectPath();
116
+ if (!path) {
117
+ return createEmptyHotCache('');
118
+ }
119
+ const cache = await loadHotCache(path);
120
+ const contentHash = hashContent(content);
121
+ // Check for duplicate by hash
122
+ const existingIndex = cache.entries.findIndex(e => e.hash === contentHash);
123
+ if (existingIndex >= 0) {
124
+ // Update reference info for duplicate
125
+ cache.entries[existingIndex].lastReferencedAt = Date.now();
126
+ cache.entries[existingIndex].referenceCount++;
127
+ await saveHotCache(cache);
128
+ logger.debug('[HotCache] Updated existing entry reference', { hash: contentHash });
129
+ return cache;
130
+ }
131
+ // Add new entry
132
+ const newEntry = {
133
+ id: `hot-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
134
+ content: content.slice(0, 500), // Limit individual entry size
135
+ hash: contentHash,
136
+ createdAt: Date.now(),
137
+ lastReferencedAt: Date.now(),
138
+ referenceCount: 1,
139
+ tags: options?.tags,
140
+ };
141
+ cache.entries.push(newEntry);
142
+ // Trim if over max size (remove oldest entries)
143
+ if (cache.entries.length > MAX_HOT_CACHE_SIZE) {
144
+ cache.entries = cache.entries
145
+ .sort((a, b) => b.lastReferencedAt - a.lastReferencedAt)
146
+ .slice(0, MAX_HOT_CACHE_SIZE);
147
+ }
148
+ await saveHotCache(cache);
149
+ logger.info('[HotCache] Added new entry', { entries: cache.entries.length });
150
+ return cache;
151
+ }
152
+ /**
153
+ * Get hot cache summary for context
154
+ * Returns markdown-formatted summary of recent entries
155
+ */
156
+ export async function getHotCacheSummary(options) {
157
+ const path = options?.projectPath || await getProjectPath();
158
+ if (!path)
159
+ return '';
160
+ const cache = await loadHotCache(path);
161
+ if (cache.entries.length === 0) {
162
+ return '## Hot Cache\n\nNo active hot memories yet.\n';
163
+ }
164
+ const maxEntries = options?.maxEntries || 10;
165
+ const recentEntries = cache.entries
166
+ .sort((a, b) => b.lastReferencedAt - a.lastReferencedAt)
167
+ .slice(0, maxEntries);
168
+ const lines = ['## Hot Cache\n'];
169
+ for (const entry of recentEntries) {
170
+ const date = new Date(entry.lastReferencedAt).toISOString().split('T')[0];
171
+ const stale = cache.staleEntries.includes(entry.id) ? ' [STALE]' : '';
172
+ lines.push(`- ${entry.content.slice(0, 100)}${entry.content.length > 100 ? '...' : ''}${stale} (${date})`);
173
+ }
174
+ if (cache.staleEntries.length > 0) {
175
+ lines.push(`\n* ${cache.staleEntries.length} entries flagged as stale (consider cleaning)*`);
176
+ }
177
+ return lines.join('\n');
178
+ }
179
+ /**
180
+ * Reference an existing hot cache entry (prevents staleness)
181
+ */
182
+ export async function referenceHotCacheEntry(entryId, projectPath) {
183
+ const path = projectPath || await getProjectPath();
184
+ if (!path)
185
+ return false;
186
+ const cache = await loadHotCache(path);
187
+ const entry = cache.entries.find(e => e.id === entryId);
188
+ if (entry) {
189
+ entry.lastReferencedAt = Date.now();
190
+ entry.referenceCount++;
191
+ await saveHotCache(cache);
192
+ return true;
193
+ }
194
+ return false;
195
+ }
196
+ /**
197
+ * Remove stale entries from hot cache
198
+ */
199
+ export async function cleanStaleEntries(projectPath) {
200
+ const path = projectPath || await getProjectPath();
201
+ if (!path)
202
+ return 0;
203
+ const cache = await loadHotCache(path);
204
+ const staleIdSet = new Set(cache.staleEntries);
205
+ const originalCount = cache.entries.length;
206
+ cache.entries = cache.entries.filter(e => !staleIdSet.has(e.id));
207
+ cache.staleEntries = [];
208
+ await saveHotCache(cache);
209
+ const removed = originalCount - cache.entries.length;
210
+ logger.info('[HotCache] Cleaned stale entries', { removed });
211
+ return removed;
212
+ }
213
+ /**
214
+ * Add session context to hot cache
215
+ * Called from session hooks with key session information
216
+ */
217
+ export async function addSessionContextToHotCache(sessionInfo, projectPath) {
218
+ const path = projectPath || await getProjectPath();
219
+ if (!path)
220
+ return createEmptyHotCache('');
221
+ // Build context entries from session info
222
+ const entries = [];
223
+ if (sessionInfo.activeFiles?.length) {
224
+ entries.push(`Active files: ${sessionInfo.activeFiles.join(', ')}`);
225
+ }
226
+ if (sessionInfo.commands?.length) {
227
+ entries.push(`Recent commands: ${sessionInfo.commands.slice(-3).join('; ')}`);
228
+ }
229
+ if (sessionInfo.failures?.length) {
230
+ entries.push(`Recent failures: ${sessionInfo.failures.slice(-2).join('; ')}`);
231
+ }
232
+ if (sessionInfo.decisions?.length) {
233
+ entries.push(`Decisions: ${sessionInfo.decisions.join('; ')}`);
234
+ }
235
+ if (sessionInfo.hypotheses?.length) {
236
+ entries.push(`Hypotheses: ${sessionInfo.hypotheses.slice(-2).join('; ')}`);
237
+ }
238
+ // Add each entry to hot cache
239
+ let cache = await loadHotCache(path);
240
+ for (const entry of entries) {
241
+ cache = await addToHotCache(entry, { projectPath: path });
242
+ }
243
+ return cache;
244
+ }
245
+ /**
246
+ * Get all hot cache entries (for advanced use)
247
+ */
248
+ export async function getHotCacheEntries(projectPath) {
249
+ const path = projectPath || await getProjectPath();
250
+ if (!path)
251
+ return [];
252
+ const cache = await loadHotCache(path);
253
+ return cache.entries;
254
+ }
255
+ /**
256
+ * Clear hot cache (dangerous - use with caution)
257
+ */
258
+ export async function clearHotCache(projectPath) {
259
+ const path = projectPath || await getProjectPath();
260
+ if (!path)
261
+ return;
262
+ const cache = createEmptyHotCache(path);
263
+ await saveHotCache(cache);
264
+ logger.info('[HotCache] Cleared');
265
+ }
266
+ /**
267
+ * Get hot cache statistics
268
+ */
269
+ export async function getHotCacheStats(projectPath) {
270
+ const path = projectPath || await getProjectPath();
271
+ if (!path)
272
+ return { entries: 0, staleEntries: 0, oldestEntry: null, newestEntry: null };
273
+ const cache = await loadHotCache(path);
274
+ if (cache.entries.length === 0) {
275
+ return { entries: 0, staleEntries: 0, oldestEntry: null, newestEntry: null };
276
+ }
277
+ const timestamps = cache.entries.map(e => e.createdAt);
278
+ return {
279
+ entries: cache.entries.length,
280
+ staleEntries: cache.staleEntries.length,
281
+ oldestEntry: Math.min(...timestamps),
282
+ newestEntry: Math.max(...timestamps),
283
+ };
284
+ }
285
+ //# sourceMappingURL=hot-cache.js.map
@@ -1,10 +1,10 @@
1
- export * from './cache.js';
2
- export * from './context.js';
3
- export * from './database.js';
4
- export * from './embeddings.js';
5
- export * from './observations.js';
6
- export * from './privacy.js';
7
- export * from './projects.js';
8
- export * from './secret-detector.js';
9
- export * from './worker.js';
1
+ export * from './storage/cache';
2
+ export * from './context/context';
3
+ export * from './storage/database';
4
+ export * from './embeddings';
5
+ export * from './ingestion/learnings';
6
+ export * from './security/privacy';
7
+ export * from './projects';
8
+ export * from './security/secret-detector';
9
+ export * from './worker';
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1,14 +1,11 @@
1
1
  // Shared services - Core utilities and services
2
- export * from './cache.js';
3
- export * from './context.js';
4
- export * from './database.js';
5
- export * from './embeddings.js';
6
- // Note: local-embeddings exports duplicate of embeddings, import directly when needed
7
- // export * from './local-embeddings.js';
8
- export * from './observations.js';
9
- export * from './privacy.js';
10
- export * from './projects.js';
11
- // Note: redis exports duplicates of cache, import directly when needed
12
- export * from './secret-detector.js';
13
- export * from './worker.js';
2
+ export * from './storage/cache';
3
+ export * from './context/context';
4
+ export * from './storage/database';
5
+ export * from './embeddings';
6
+ export * from './ingestion/learnings';
7
+ export * from './security/privacy';
8
+ export * from './projects';
9
+ export * from './security/secret-detector';
10
+ export * from './worker';
14
11
  //# sourceMappingURL=index.js.map
@@ -4,11 +4,11 @@
4
4
  */
5
5
  import { and, eq } from 'drizzle-orm';
6
6
  import { randomUUID } from 'crypto';
7
- import { getDb } from '../db/index.js';
8
- import { getSchema } from '../db/schema.js';
9
- import { config } from '../config.js';
10
- import { getEmbedding } from './embeddings.js';
11
- import { logger } from './logger.js';
7
+ import { getDb } from '../../db/index.js';
8
+ import { getSchema } from '../../db/schema.js';
9
+ import { config } from '../../config.js';
10
+ import { getEmbedding } from '../embeddings.js';
11
+ import { logger } from '../logger.js';
12
12
  /**
13
13
  * Store a memory with agent context
14
14
  */
@@ -53,9 +53,7 @@ export async function storeAgentMemory(content, context, options = {}) {
53
53
  throw error;
54
54
  }
55
55
  }
56
- // ============================================================================
57
56
  // Helper Functions
58
- // ============================================================================
59
57
  function calculateReadScope(context, visibility) {
60
58
  switch (visibility) {
61
59
  case 'private':
@@ -68,11 +68,11 @@ export declare function getCoreMemoryStats(projectId: string): Promise<{
68
68
  }>;
69
69
  /**
70
70
  * Estimate token count from text (rough approximation: 1 token ≈ 4 chars)
71
+ * Import from context-window.ts - single source of truth
71
72
  */
72
- export declare function estimateTokens(text: string): number;
73
+ export { estimateTokens } from '../context/context-window.js';
73
74
  /**
74
75
  * Get core memory formatted for context injection
75
76
  */
76
77
  export declare function formatCoreMemoryForInjection(projectId: string): Promise<string>;
77
- export {};
78
78
  //# sourceMappingURL=core-memory.d.ts.map
@@ -5,10 +5,11 @@
5
5
  * This memory is automatically injected into every agent interaction.
6
6
  */
7
7
  import { eq, and, sql } from 'drizzle-orm';
8
- import { getDb } from '../db/index.js';
9
- import { getSchema } from '../db/schema.js';
10
- import { createDatabaseClient } from './database.js';
11
- import config from '../config.js';
8
+ import { getDb } from '../../db/index.js';
9
+ import { getSchema } from '../../db/schema.js';
10
+ import { createDatabaseClient } from '../storage/database.js';
11
+ import config from '../../config.js';
12
+ import { estimateTokens } from '../context/context-window.js';
12
13
  // Use configurable limits from environment
13
14
  const MAX_TOTAL_SIZE_BYTES = config.coreMemoryTotalBytes;
14
15
  const MAX_SECTION_SIZE_BYTES = config.coreMemorySectionBytes;
@@ -188,10 +189,9 @@ export async function getCoreMemoryStats(projectId) {
188
189
  }
189
190
  /**
190
191
  * Estimate token count from text (rough approximation: 1 token ≈ 4 chars)
192
+ * Import from context-window.ts - single source of truth
191
193
  */
192
- export function estimateTokens(text) {
193
- return Math.ceil(text.length / 4);
194
- }
194
+ export { estimateTokens } from '../context/context-window.js';
195
195
  /**
196
196
  * Get core memory formatted for context injection
197
197
  */