squish-memory 1.1.5 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (646) hide show
  1. package/.env.example +32 -16
  2. package/CHANGELOG.md +147 -0
  3. package/README.md +120 -78
  4. package/{scripts → bin}/dependency-manager.mjs +217 -217
  5. package/{scripts → bin}/detect-clients.mjs +78 -78
  6. package/bin/install-interactive.mjs +321 -0
  7. package/bin/squish-mcp.mjs +44 -0
  8. package/bin/squish.mjs +33 -0
  9. package/config/mcp-migration-map.json +1 -6
  10. package/config/mcp-mode-semantics.json +19 -23
  11. package/config/mcp-remote-auth.json +3 -26
  12. package/config/mcp-universal.schema.json +5 -35
  13. package/config/settings.json +107 -52
  14. package/config.js +5 -0
  15. package/config.ts +218 -0
  16. package/core/adapters/config/claude-code.ts +133 -0
  17. package/core/adapters/config/cursor.ts +90 -0
  18. package/core/adapters/config/opencode.ts +89 -0
  19. package/core/adapters/config/windsurf.ts +90 -0
  20. package/core/adapters/index.ts +102 -0
  21. package/core/adapters/timeline.ts +116 -0
  22. package/core/adapters/types.ts +166 -0
  23. package/core/agent-preferences.ts +140 -0
  24. package/core/algorithms/analytics/token-estimator.ts +216 -0
  25. package/core/algorithms/detection/hash-filters.ts +260 -0
  26. package/core/algorithms/detection/semantic-ranker.ts +194 -0
  27. package/core/algorithms/detection/two-stage-detector.ts +421 -0
  28. package/core/algorithms/handlers/approve-merge.ts +215 -0
  29. package/core/algorithms/handlers/detect-duplicates.ts +192 -0
  30. package/core/algorithms/handlers/get-stats.ts +132 -0
  31. package/core/algorithms/handlers/list-proposals.ts +130 -0
  32. package/core/algorithms/handlers/preview-merge.ts +139 -0
  33. package/core/algorithms/handlers/reject-merge.ts +93 -0
  34. package/core/algorithms/handlers/reverse-merge.ts +155 -0
  35. package/{dist/core/algorithms/index.js → core/algorithms/index.ts} +39 -26
  36. package/core/algorithms/operations/cache-maintenance.ts +182 -0
  37. package/core/algorithms/safety/safety-checks.ts +256 -0
  38. package/core/algorithms/strategies/merge-strategies.ts +381 -0
  39. package/core/algorithms/types.ts +140 -0
  40. package/core/algorithms/utils/response-builder.ts +61 -0
  41. package/core/associations.ts +363 -0
  42. package/core/beliefs/decay.ts +289 -0
  43. package/core/beliefs/extractor.ts +131 -0
  44. package/core/beliefs/store.ts +557 -0
  45. package/core/beliefs/types.ts +38 -0
  46. package/core/commands/mcp-server.ts +5 -0
  47. package/core/compression.ts +177 -0
  48. package/core/config.js +2 -0
  49. package/core/consolidation.ts +330 -0
  50. package/core/context/agent-context.ts +388 -0
  51. package/core/context/context-paging.ts +449 -0
  52. package/core/context/context-window.ts +234 -0
  53. package/core/context/context.ts +35 -0
  54. package/core/embeddings/embeddings.ts +616 -0
  55. package/core/embeddings/google-multimodal.ts +200 -0
  56. package/{dist/core/local-embeddings.js → core/embeddings/local-embeddings.ts} +12 -11
  57. package/core/embeddings/qmd-client.ts +495 -0
  58. package/core/embeddings/transformers-local.ts +261 -0
  59. package/core/embeddings.js +4 -0
  60. package/core/error-handling.ts +206 -0
  61. package/core/external +219 -0
  62. package/core/graph/entity-deduplicator.ts +232 -0
  63. package/core/graph/graph-builder.ts +257 -0
  64. package/core/graph/graph-traversal.ts +490 -0
  65. package/core/graph/index.ts +24 -0
  66. package/core/graph/llm-entity-extractor.ts +402 -0
  67. package/core/graph/multi-hop-retrieval.ts +317 -0
  68. package/core/graph/relationship-extractor.ts +465 -0
  69. package/core/hooks/agent-hooks.ts +653 -0
  70. package/core/hooks/auto-tagger.ts +149 -0
  71. package/core/hooks/capture-filter.ts +169 -0
  72. package/core/hot-cache.ts +388 -0
  73. package/core/index.ts +10 -0
  74. package/core/ingestion/agent-memory.ts +167 -0
  75. package/core/ingestion/core-memory.ts +326 -0
  76. package/core/ingestion/learnings.ts +260 -0
  77. package/core/ingestion/signal-engine.ts +266 -0
  78. package/core/integrations/obsidian-vault.ts +197 -0
  79. package/core/layers/generator.ts +115 -0
  80. package/{dist/core/lib/db-client.d.ts → core/lib/db-client.ts} +168 -114
  81. package/core/lib/parse-embedding.ts +59 -0
  82. package/{dist/core/lib/schemas.js → core/lib/schemas.ts} +102 -87
  83. package/core/lib/types.ts +49 -0
  84. package/core/lib/utils.ts +151 -0
  85. package/core/lib/validation.ts +180 -0
  86. package/core/lifecycle.ts +353 -0
  87. package/core/logger.ts +59 -0
  88. package/core/memory/bridge-discovery.ts +395 -0
  89. package/core/memory/categorizer.ts +390 -0
  90. package/core/memory/conflict-detector.ts +62 -0
  91. package/core/memory/consolidation.ts +372 -0
  92. package/core/memory/context-collector.ts +75 -0
  93. package/core/memory/contradiction-resolver.ts +494 -0
  94. package/core/memory/edit-workflow.ts +174 -0
  95. package/core/memory/entity-extractor.ts +426 -0
  96. package/core/memory/entity-resolver.ts +89 -0
  97. package/core/memory/explain.ts +112 -0
  98. package/core/memory/fact-deriver.ts +300 -0
  99. package/core/memory/fact-extractor.ts +120 -0
  100. package/core/memory/feedback-tracker.ts +200 -0
  101. package/core/memory/hooks.ts +230 -0
  102. package/core/memory/hybrid-retrieval.ts +65 -0
  103. package/core/memory/hybrid-scorer.ts +325 -0
  104. package/core/memory/hybrid-search.ts +748 -0
  105. package/core/memory/importance.ts +319 -0
  106. package/{dist/core/memory/index.js → core/memory/index.ts} +11 -10
  107. package/core/memory/loader.ts +178 -0
  108. package/core/memory/markdown/markdown-storage.ts +318 -0
  109. package/core/memory/memories.ts +565 -0
  110. package/core/memory/memory-lifecycle.ts +51 -0
  111. package/core/memory/memory-manager.ts +53 -0
  112. package/core/memory/migrate.ts +173 -0
  113. package/core/memory/normalization.ts +30 -0
  114. package/core/memory/path-strengthener.ts +211 -0
  115. package/core/memory/progressive-disclosure.ts +392 -0
  116. package/core/memory/query-processor.ts +130 -0
  117. package/core/memory/query-rewriter.ts +153 -0
  118. package/core/memory/response-analyzer.ts +81 -0
  119. package/core/memory/retrieval-feedback.ts +276 -0
  120. package/core/memory/serialization.ts +83 -0
  121. package/core/memory/stale-cleaner.ts +147 -0
  122. package/core/memory/stats.ts +181 -0
  123. package/core/memory/telemetry.ts +392 -0
  124. package/core/memory/temporal-facts.ts +356 -0
  125. package/core/memory/temporal-parser.ts +477 -0
  126. package/core/memory/trigger-detector.ts +104 -0
  127. package/core/memory/write-gate.ts +288 -0
  128. package/{dist/core/places/index.js → core/places/index.ts} +12 -12
  129. package/core/places/memory-places.ts +339 -0
  130. package/core/places/places.ts +406 -0
  131. package/core/places/rules.ts +308 -0
  132. package/core/places/walking.ts +192 -0
  133. package/core/projects +89 -0
  134. package/core/projects.ts +131 -0
  135. package/core/redis.ts +82 -0
  136. package/core/responses.ts +187 -0
  137. package/core/runtime/trust-report.ts +195 -0
  138. package/core/runtime/trust-state.ts +360 -0
  139. package/core/scheduler/cron-scheduler.ts +590 -0
  140. package/core/scheduler/heartbeat.ts +91 -0
  141. package/{dist/core/scheduler/index.js → core/scheduler/index.ts} +8 -8
  142. package/core/scheduler/job-runner.ts +197 -0
  143. package/core/search/conversations.ts +166 -0
  144. package/core/search/entities.ts +46 -0
  145. package/core/search/folder-context.ts +154 -0
  146. package/core/search/graph-boost.ts +22 -0
  147. package/{dist/core/search/index.js → core/search/index.ts} +4 -5
  148. package/core/search/qmd-wrapper.ts +84 -0
  149. package/core/security/encrypt.ts +51 -0
  150. package/core/security/governance.ts +102 -0
  151. package/core/security/privacy.ts +108 -0
  152. package/core/security/secret-detector.ts +122 -0
  153. package/core/session/auto-load.ts +160 -0
  154. package/core/session/entity-tracker.ts +363 -0
  155. package/{dist/core/session/index.js → core/session/index.ts} +7 -7
  156. package/core/session/reference-resolver.ts +158 -0
  157. package/core/session/self-iteration-job.ts +478 -0
  158. package/core/session/session-hooks.ts +69 -0
  159. package/core/session/types.ts +36 -0
  160. package/core/session/working-set.ts +275 -0
  161. package/{dist/core/snapshots/cleanup.js → core/snapshots/cleanup.ts} +13 -12
  162. package/core/snapshots/comparison.ts +59 -0
  163. package/core/snapshots/creation.ts +139 -0
  164. package/core/snapshots/retrieval.ts +44 -0
  165. package/core/snapshots/stats.ts +63 -0
  166. package/core/storage/cache.ts +241 -0
  167. package/core/storage/database.ts +23 -0
  168. package/{dist/core/summarization/cleanup.js → core/summarization/cleanup.ts} +13 -12
  169. package/core/summarization/queries.ts +32 -0
  170. package/core/summarization/stats.ts +64 -0
  171. package/core/summarization/strategies.ts +52 -0
  172. package/core/summarization.ts +248 -0
  173. package/core/temporal-facts.ts +244 -0
  174. package/core/tracing/collector.ts +470 -0
  175. package/core/tracing/visualizer.ts +195 -0
  176. package/core/utils/cleanup-operations.ts +50 -0
  177. package/core/utils/content-extraction.ts +95 -0
  178. package/core/utils/filter-builder.ts +56 -0
  179. package/core/utils/history-traversal.ts +63 -0
  180. package/core/utils/memory-operations.ts +56 -0
  181. package/core/utils/query-operations.ts +83 -0
  182. package/core/utils/summarization-helpers.ts +45 -0
  183. package/core/utils/temporal-queries.ts +39 -0
  184. package/{dist/core/utils/vector-operations.js → core/utils/vector-operations.ts} +135 -129
  185. package/core/utils/version-management.ts +74 -0
  186. package/core/worker.ts +333 -0
  187. package/db/adapter.ts +215 -0
  188. package/{dist/db/bootstrap.js → db/bootstrap.ts} +388 -418
  189. package/db/drizzle/migrations/0000_needy_cerebro.sql +402 -0
  190. package/db/drizzle/migrations/meta/0000_snapshot.json +3451 -0
  191. package/db/drizzle/migrations/meta/_journal.json +13 -0
  192. package/db/drizzle/schema-sqlite.ts +1032 -0
  193. package/db/drizzle/schema.ts +1128 -0
  194. package/db/drizzle.config.ts +12 -0
  195. package/db/index.ts +83 -0
  196. package/db/init.sql +5 -0
  197. package/db/migrations/associations.ts +35 -0
  198. package/db/migrations/beliefs.ts +89 -0
  199. package/db/migrations/core-memory.ts +35 -0
  200. package/db/migrations/fts.ts +59 -0
  201. package/db/migrations/index.ts +54 -0
  202. package/db/migrations/indexes.ts +36 -0
  203. package/db/migrations/learnings.ts +34 -0
  204. package/db/migrations/maintenance.ts +68 -0
  205. package/db/migrations/memories.ts +22 -0
  206. package/db/migrations/memory-places.ts +35 -0
  207. package/db/migrations/places.ts +49 -0
  208. package/db/migrations/projects.ts +21 -0
  209. package/db/migrations/tier-conversion.ts +24 -0
  210. package/db/neon.ts +22 -0
  211. package/db/schema/beliefs.ts +50 -0
  212. package/db/schema/generator.ts +159 -0
  213. package/db/schema/index.ts +58 -0
  214. package/db/schema/learnings.ts +32 -0
  215. package/db/schema/memories.ts +83 -0
  216. package/db/schema/projects.ts +33 -0
  217. package/db/schema.ts +13 -0
  218. package/db/supabase.ts +27 -0
  219. package/mcp.json.example +8 -11
  220. package/package.json +140 -159
  221. package/packages/cli/package.json +22 -0
  222. package/packages/cli/src/commands/clean.ts +68 -0
  223. package/packages/cli/src/commands/context.ts +79 -0
  224. package/packages/cli/src/commands/doctor.ts +357 -0
  225. package/packages/cli/src/commands/forget.ts +72 -0
  226. package/packages/cli/src/commands/health.ts +36 -0
  227. package/packages/cli/src/commands/inspect.ts +41 -0
  228. package/packages/cli/src/commands/link.ts +50 -0
  229. package/packages/cli/src/commands/migrate.ts +93 -0
  230. package/packages/cli/src/commands/recall.ts +99 -0
  231. package/packages/cli/src/commands/recent.ts +57 -0
  232. package/packages/cli/src/commands/remember.ts +139 -0
  233. package/packages/cli/src/commands/run.ts +58 -0
  234. package/packages/cli/src/commands/stale.ts +43 -0
  235. package/packages/cli/src/commands/stats.ts +42 -0
  236. package/packages/cli/src/index.ts +57 -0
  237. package/packages/cli/tsconfig.json +24 -0
  238. package/packages/mcp/package.json +26 -0
  239. package/packages/mcp/src/index.ts +940 -0
  240. package/packages/mcp/tsconfig.json +20 -0
  241. package/skills/squish-memory/SKILL.md +38 -35
  242. package/skills/squish-memory/{scripts/install.sh → install.sh} +1 -1
  243. package/skills/squish-memory/references/claude-desktop.json +12 -0
  244. package/skills/squish-memory/references/openclaw.json +13 -0
  245. package/skills/squish-memory/references/opencode.json +14 -0
  246. package/config/hooks/claude-code-hooks.json +0 -39
  247. package/config/hooks/cursor-hooks.json +0 -30
  248. package/config/hooks/opencode-hooks.json +0 -30
  249. package/config/hooks/windsurf-hooks.json +0 -30
  250. package/config/mcp-cli-fallback-policy.json +0 -22
  251. package/config/mcp.json +0 -38
  252. package/config/plugin-manifest.json +0 -101
  253. package/config/plugin-manifest.schema.json +0 -244
  254. package/config/plugin.json +0 -32
  255. package/config/remote-memory-policy.json +0 -32
  256. package/core/commands/context-paging.md +0 -51
  257. package/core/commands/context-status.md +0 -22
  258. package/core/commands/context.md +0 -5
  259. package/core/commands/core-memory.md +0 -56
  260. package/core/commands/health.md +0 -5
  261. package/core/commands/init.md +0 -39
  262. package/core/commands/merge.md +0 -113
  263. package/core/commands/recall.md +0 -5
  264. package/core/commands/remember.md +0 -11
  265. package/core/commands/search.md +0 -10
  266. package/dist/config.d.ts +0 -83
  267. package/dist/config.js +0 -242
  268. package/dist/core/adapters/config/claude-code.d.ts +0 -45
  269. package/dist/core/adapters/config/claude-code.js +0 -113
  270. package/dist/core/adapters/config/cursor.d.ts +0 -26
  271. package/dist/core/adapters/config/cursor.js +0 -74
  272. package/dist/core/adapters/config/opencode.d.ts +0 -23
  273. package/dist/core/adapters/config/opencode.js +0 -73
  274. package/dist/core/adapters/config/windsurf.d.ts +0 -26
  275. package/dist/core/adapters/config/windsurf.js +0 -74
  276. package/dist/core/adapters/index.d.ts +0 -45
  277. package/dist/core/adapters/index.js +0 -84
  278. package/dist/core/adapters/scripts/install-adapter.d.ts +0 -19
  279. package/dist/core/adapters/scripts/install-adapter.js +0 -149
  280. package/dist/core/adapters/timeline.d.ts +0 -23
  281. package/dist/core/adapters/timeline.js +0 -88
  282. package/dist/core/adapters/types.d.ts +0 -157
  283. package/dist/core/adapters/types.js +0 -50
  284. package/dist/core/algorithms/analytics/token-estimator.d.ts +0 -50
  285. package/dist/core/algorithms/analytics/token-estimator.js +0 -154
  286. package/dist/core/algorithms/detection/hash-filters.d.ts +0 -47
  287. package/dist/core/algorithms/detection/hash-filters.js +0 -190
  288. package/dist/core/algorithms/detection/semantic-ranker.d.ts +0 -32
  289. package/dist/core/algorithms/detection/semantic-ranker.js +0 -118
  290. package/dist/core/algorithms/detection/two-stage-detector.d.ts +0 -52
  291. package/dist/core/algorithms/detection/two-stage-detector.js +0 -299
  292. package/dist/core/algorithms/handlers/approve-merge.d.ts +0 -22
  293. package/dist/core/algorithms/handlers/approve-merge.js +0 -179
  294. package/dist/core/algorithms/handlers/detect-duplicates.d.ts +0 -47
  295. package/dist/core/algorithms/handlers/detect-duplicates.js +0 -145
  296. package/dist/core/algorithms/handlers/get-stats.d.ts +0 -39
  297. package/dist/core/algorithms/handlers/get-stats.js +0 -88
  298. package/dist/core/algorithms/handlers/list-proposals.d.ts +0 -45
  299. package/dist/core/algorithms/handlers/list-proposals.js +0 -83
  300. package/dist/core/algorithms/handlers/preview-merge.d.ts +0 -39
  301. package/dist/core/algorithms/handlers/preview-merge.js +0 -93
  302. package/dist/core/algorithms/handlers/reject-merge.d.ts +0 -28
  303. package/dist/core/algorithms/handlers/reject-merge.js +0 -69
  304. package/dist/core/algorithms/handlers/reverse-merge.d.ts +0 -21
  305. package/dist/core/algorithms/handlers/reverse-merge.js +0 -121
  306. package/dist/core/algorithms/index.d.ts +0 -21
  307. package/dist/core/algorithms/operations/cache-maintenance.d.ts +0 -12
  308. package/dist/core/algorithms/operations/cache-maintenance.js +0 -157
  309. package/dist/core/algorithms/safety/safety-checks.d.ts +0 -22
  310. package/dist/core/algorithms/safety/safety-checks.js +0 -179
  311. package/dist/core/algorithms/strategies/merge-strategies.d.ts +0 -50
  312. package/dist/core/algorithms/strategies/merge-strategies.js +0 -288
  313. package/dist/core/algorithms/types.d.ts +0 -133
  314. package/dist/core/algorithms/types.js +0 -5
  315. package/dist/core/algorithms/utils/response-builder.d.ts +0 -28
  316. package/dist/core/algorithms/utils/response-builder.js +0 -37
  317. package/dist/core/associations.d.ts +0 -31
  318. package/dist/core/associations.js +0 -248
  319. package/dist/core/autosave.d.ts +0 -19
  320. package/dist/core/autosave.js +0 -16
  321. package/dist/core/commands/managed-sync.d.ts +0 -10
  322. package/dist/core/commands/managed-sync.js +0 -64
  323. package/dist/core/commands/mcp-server.d.ts +0 -3
  324. package/dist/core/commands/mcp-server.js +0 -739
  325. package/dist/core/consolidation.d.ts +0 -37
  326. package/dist/core/consolidation.js +0 -248
  327. package/dist/core/context/agent-context.d.ts +0 -106
  328. package/dist/core/context/agent-context.js +0 -274
  329. package/dist/core/context/context-paging.d.ts +0 -80
  330. package/dist/core/context/context-paging.js +0 -328
  331. package/dist/core/context/context-window.d.ts +0 -40
  332. package/dist/core/context/context-window.js +0 -177
  333. package/dist/core/context/context.d.ts +0 -7
  334. package/dist/core/context/context.js +0 -22
  335. package/dist/core/embeddings/google-multimodal.d.ts +0 -14
  336. package/dist/core/embeddings/google-multimodal.js +0 -142
  337. package/dist/core/embeddings/qmd-client.d.ts +0 -136
  338. package/dist/core/embeddings/qmd-client.js +0 -403
  339. package/dist/core/embeddings.d.ts +0 -29
  340. package/dist/core/embeddings.js +0 -454
  341. package/dist/core/error-handling.d.ts +0 -63
  342. package/dist/core/error-handling.js +0 -173
  343. package/dist/core/external-folder/index.d.ts +0 -102
  344. package/dist/core/external-folder/index.js +0 -294
  345. package/dist/core/hooks/agent-hooks.d.ts +0 -74
  346. package/dist/core/hooks/agent-hooks.js +0 -244
  347. package/dist/core/hooks/auto-tagger.d.ts +0 -19
  348. package/dist/core/hooks/auto-tagger.js +0 -155
  349. package/dist/core/hooks/capture-filter.d.ts +0 -41
  350. package/dist/core/hooks/capture-filter.js +0 -128
  351. package/dist/core/index.d.ts +0 -10
  352. package/dist/core/index.js +0 -14
  353. package/dist/core/ingestion/agent-memory.d.ts +0 -22
  354. package/dist/core/ingestion/agent-memory.js +0 -109
  355. package/dist/core/ingestion/core-memory.d.ts +0 -78
  356. package/dist/core/ingestion/core-memory.js +0 -226
  357. package/dist/core/ingestion/learnings.d.ts +0 -57
  358. package/dist/core/ingestion/learnings.js +0 -202
  359. package/dist/core/layers/generator.d.ts +0 -25
  360. package/dist/core/layers/generator.js +0 -76
  361. package/dist/core/lib/db-client.js +0 -130
  362. package/dist/core/lib/schemas.d.ts +0 -129
  363. package/dist/core/lib/utils.d.ts +0 -14
  364. package/dist/core/lib/utils.js +0 -90
  365. package/dist/core/lib/validation.d.ts +0 -38
  366. package/dist/core/lib/validation.js +0 -151
  367. package/dist/core/lifecycle.d.ts +0 -26
  368. package/dist/core/lifecycle.js +0 -302
  369. package/dist/core/local-embeddings.d.ts +0 -11
  370. package/dist/core/logger.d.ts +0 -16
  371. package/dist/core/logger.js +0 -40
  372. package/dist/core/mcp/client.d.ts +0 -17
  373. package/dist/core/mcp/client.js +0 -101
  374. package/dist/core/mcp/index.d.ts +0 -6
  375. package/dist/core/mcp/index.js +0 -6
  376. package/dist/core/mcp/server.d.ts +0 -18
  377. package/dist/core/mcp/server.js +0 -157
  378. package/dist/core/mcp/standalone-server.d.ts +0 -13
  379. package/dist/core/mcp/standalone-server.js +0 -46
  380. package/dist/core/mcp/tools.d.ts +0 -9
  381. package/dist/core/mcp/tools.js +0 -365
  382. package/dist/core/mcp/types.d.ts +0 -315
  383. package/dist/core/mcp/types.js +0 -48
  384. package/dist/core/memory/bridge-discovery.d.ts +0 -50
  385. package/dist/core/memory/bridge-discovery.js +0 -291
  386. package/dist/core/memory/categorizer.d.ts +0 -27
  387. package/dist/core/memory/categorizer.js +0 -305
  388. package/dist/core/memory/conflict-detector.d.ts +0 -7
  389. package/dist/core/memory/conflict-detector.js +0 -43
  390. package/dist/core/memory/consolidation.d.ts +0 -42
  391. package/dist/core/memory/consolidation.js +0 -303
  392. package/dist/core/memory/context-collector.d.ts +0 -10
  393. package/dist/core/memory/context-collector.js +0 -56
  394. package/dist/core/memory/contradiction-resolver.d.ts +0 -40
  395. package/dist/core/memory/contradiction-resolver.js +0 -368
  396. package/dist/core/memory/edit-workflow.d.ts +0 -19
  397. package/dist/core/memory/edit-workflow.js +0 -120
  398. package/dist/core/memory/entity-extractor.d.ts +0 -33
  399. package/dist/core/memory/entity-extractor.js +0 -336
  400. package/dist/core/memory/entity-resolver.d.ts +0 -23
  401. package/dist/core/memory/entity-resolver.js +0 -64
  402. package/dist/core/memory/fact-extractor.d.ts +0 -24
  403. package/dist/core/memory/fact-extractor.js +0 -89
  404. package/dist/core/memory/feedback-tracker.d.ts +0 -12
  405. package/dist/core/memory/feedback-tracker.js +0 -155
  406. package/dist/core/memory/hooks.d.ts +0 -88
  407. package/dist/core/memory/hooks.js +0 -174
  408. package/dist/core/memory/hybrid-retrieval.d.ts +0 -29
  409. package/dist/core/memory/hybrid-retrieval.js +0 -139
  410. package/dist/core/memory/hybrid-scorer.d.ts +0 -40
  411. package/dist/core/memory/hybrid-scorer.js +0 -284
  412. package/dist/core/memory/hybrid-search.d.ts +0 -20
  413. package/dist/core/memory/hybrid-search.js +0 -359
  414. package/dist/core/memory/importance.d.ts +0 -63
  415. package/dist/core/memory/importance.js +0 -298
  416. package/dist/core/memory/index.d.ts +0 -8
  417. package/dist/core/memory/loader.d.ts +0 -31
  418. package/dist/core/memory/loader.js +0 -141
  419. package/dist/core/memory/markdown/markdown-storage.d.ts +0 -72
  420. package/dist/core/memory/markdown/markdown-storage.js +0 -243
  421. package/dist/core/memory/memories.d.ts +0 -47
  422. package/dist/core/memory/memories.js +0 -449
  423. package/dist/core/memory/memory-lifecycle.d.ts +0 -8
  424. package/dist/core/memory/memory-lifecycle.js +0 -55
  425. package/dist/core/memory/memory-manager.d.ts +0 -15
  426. package/dist/core/memory/memory-manager.js +0 -46
  427. package/dist/core/memory/migrate.d.ts +0 -21
  428. package/dist/core/memory/migrate.js +0 -134
  429. package/dist/core/memory/normalization.d.ts +0 -22
  430. package/dist/core/memory/normalization.js +0 -26
  431. package/dist/core/memory/progressive-disclosure.d.ts +0 -43
  432. package/dist/core/memory/progressive-disclosure.js +0 -280
  433. package/dist/core/memory/query-processor.d.ts +0 -21
  434. package/dist/core/memory/query-processor.js +0 -72
  435. package/dist/core/memory/query-rewriter.d.ts +0 -13
  436. package/dist/core/memory/query-rewriter.js +0 -118
  437. package/dist/core/memory/response-analyzer.d.ts +0 -9
  438. package/dist/core/memory/response-analyzer.js +0 -61
  439. package/dist/core/memory/serialization.d.ts +0 -10
  440. package/dist/core/memory/serialization.js +0 -84
  441. package/dist/core/memory/stats.d.ts +0 -22
  442. package/dist/core/memory/stats.js +0 -138
  443. package/dist/core/memory/telemetry.d.ts +0 -69
  444. package/dist/core/memory/telemetry.js +0 -313
  445. package/dist/core/memory/temporal-facts.d.ts +0 -41
  446. package/dist/core/memory/temporal-facts.js +0 -283
  447. package/dist/core/memory/temporal-parser.d.ts +0 -32
  448. package/dist/core/memory/temporal-parser.js +0 -385
  449. package/dist/core/memory/trigger-detector.d.ts +0 -14
  450. package/dist/core/memory/trigger-detector.js +0 -42
  451. package/dist/core/memory/write-gate.d.ts +0 -54
  452. package/dist/core/memory/write-gate.js +0 -210
  453. package/dist/core/namespaces/index.d.ts +0 -71
  454. package/dist/core/namespaces/index.js +0 -305
  455. package/dist/core/namespaces/uri-parser.d.ts +0 -31
  456. package/dist/core/namespaces/uri-parser.js +0 -74
  457. package/dist/core/obsidian-vault.d.ts +0 -30
  458. package/dist/core/obsidian-vault.js +0 -94
  459. package/dist/core/places/index.d.ts +0 -14
  460. package/dist/core/places/memory-places.d.ts +0 -68
  461. package/dist/core/places/memory-places.js +0 -261
  462. package/dist/core/places/places.d.ts +0 -88
  463. package/dist/core/places/places.js +0 -314
  464. package/dist/core/places/rules.d.ts +0 -74
  465. package/dist/core/places/rules.js +0 -240
  466. package/dist/core/places/walking.d.ts +0 -56
  467. package/dist/core/places/walking.js +0 -121
  468. package/dist/core/projects.d.ts +0 -17
  469. package/dist/core/projects.js +0 -108
  470. package/dist/core/redis.d.ts +0 -11
  471. package/dist/core/redis.js +0 -69
  472. package/dist/core/responses.d.ts +0 -96
  473. package/dist/core/responses.js +0 -122
  474. package/dist/core/scheduler/cron-scheduler.d.ts +0 -32
  475. package/dist/core/scheduler/cron-scheduler.js +0 -332
  476. package/dist/core/scheduler/heartbeat.d.ts +0 -11
  477. package/dist/core/scheduler/heartbeat.js +0 -73
  478. package/dist/core/scheduler/index.d.ts +0 -8
  479. package/dist/core/scheduler/job-runner.d.ts +0 -11
  480. package/dist/core/scheduler/job-runner.js +0 -164
  481. package/dist/core/search/conversations.d.ts +0 -25
  482. package/dist/core/search/conversations.js +0 -110
  483. package/dist/core/search/entities.d.ts +0 -12
  484. package/dist/core/search/entities.js +0 -31
  485. package/dist/core/search/folder-context.d.ts +0 -25
  486. package/dist/core/search/folder-context.js +0 -119
  487. package/dist/core/search/graph-boost.d.ts +0 -7
  488. package/dist/core/search/graph-boost.js +0 -23
  489. package/dist/core/search/index.d.ts +0 -4
  490. package/dist/core/search/qmd-search.d.ts +0 -61
  491. package/dist/core/search/qmd-search.js +0 -178
  492. package/dist/core/security/encrypt.d.ts +0 -6
  493. package/dist/core/security/encrypt.js +0 -47
  494. package/dist/core/security/governance.d.ts +0 -26
  495. package/dist/core/security/governance.js +0 -79
  496. package/dist/core/security/privacy.d.ts +0 -23
  497. package/dist/core/security/privacy.js +0 -82
  498. package/dist/core/security/secret-detector.d.ts +0 -32
  499. package/dist/core/security/secret-detector.js +0 -88
  500. package/dist/core/session/auto-load.d.ts +0 -6
  501. package/dist/core/session/auto-load.js +0 -119
  502. package/dist/core/session/index.d.ts +0 -7
  503. package/dist/core/session/self-iteration-job.d.ts +0 -20
  504. package/dist/core/session/self-iteration-job.js +0 -282
  505. package/dist/core/session/session-hooks.d.ts +0 -18
  506. package/dist/core/session/session-hooks.js +0 -58
  507. package/dist/core/session/types.d.ts +0 -26
  508. package/dist/core/session/types.js +0 -10
  509. package/dist/core/session-hooks/self-iteration-job.d.ts +0 -20
  510. package/dist/core/session-hooks/self-iteration-job.js +0 -282
  511. package/dist/core/session-hooks/session-hooks.d.ts +0 -18
  512. package/dist/core/session-hooks/session-hooks.js +0 -58
  513. package/dist/core/snapshots/cleanup.d.ts +0 -9
  514. package/dist/core/snapshots/comparison.d.ts +0 -19
  515. package/dist/core/snapshots/comparison.js +0 -43
  516. package/dist/core/snapshots/creation.d.ts +0 -19
  517. package/dist/core/snapshots/creation.js +0 -126
  518. package/dist/core/snapshots/retrieval.d.ts +0 -7
  519. package/dist/core/snapshots/retrieval.js +0 -41
  520. package/dist/core/snapshots/stats.d.ts +0 -11
  521. package/dist/core/snapshots/stats.js +0 -52
  522. package/dist/core/snapshots.d.ts +0 -29
  523. package/dist/core/snapshots.js +0 -220
  524. package/dist/core/storage/cache.d.ts +0 -13
  525. package/dist/core/storage/cache.js +0 -202
  526. package/dist/core/storage/database.d.ts +0 -12
  527. package/dist/core/storage/database.js +0 -12
  528. package/dist/core/summarization/cleanup.d.ts +0 -9
  529. package/dist/core/summarization/queries.d.ts +0 -9
  530. package/dist/core/summarization/queries.js +0 -28
  531. package/dist/core/summarization/stats.d.ts +0 -14
  532. package/dist/core/summarization/stats.js +0 -52
  533. package/dist/core/summarization/strategies.d.ts +0 -24
  534. package/dist/core/summarization/strategies.js +0 -28
  535. package/dist/core/summarization.d.ts +0 -37
  536. package/dist/core/summarization.js +0 -188
  537. package/dist/core/sync/qmd-sync.d.ts +0 -94
  538. package/dist/core/sync/qmd-sync.js +0 -201
  539. package/dist/core/temporal-facts.d.ts +0 -54
  540. package/dist/core/temporal-facts.js +0 -193
  541. package/dist/core/toon.d.ts +0 -43
  542. package/dist/core/toon.js +0 -160
  543. package/dist/core/tracing/collector.d.ts +0 -111
  544. package/dist/core/tracing/collector.js +0 -350
  545. package/dist/core/tracing/visualizer.d.ts +0 -32
  546. package/dist/core/tracing/visualizer.js +0 -165
  547. package/dist/core/utils/cleanup-operations.d.ts +0 -13
  548. package/dist/core/utils/cleanup-operations.js +0 -44
  549. package/dist/core/utils/content-extraction.d.ts +0 -19
  550. package/dist/core/utils/content-extraction.js +0 -75
  551. package/dist/core/utils/filter-builder.d.ts +0 -13
  552. package/dist/core/utils/filter-builder.js +0 -44
  553. package/dist/core/utils/history-traversal.d.ts +0 -13
  554. package/dist/core/utils/history-traversal.js +0 -50
  555. package/dist/core/utils/memory-operations.d.ts +0 -17
  556. package/dist/core/utils/memory-operations.js +0 -43
  557. package/dist/core/utils/query-operations.d.ts +0 -18
  558. package/dist/core/utils/query-operations.js +0 -65
  559. package/dist/core/utils/summarization-helpers.d.ts +0 -21
  560. package/dist/core/utils/summarization-helpers.js +0 -38
  561. package/dist/core/utils/temporal-queries.d.ts +0 -13
  562. package/dist/core/utils/temporal-queries.js +0 -27
  563. package/dist/core/utils/vector-operations.d.ts +0 -71
  564. package/dist/core/utils/version-management.d.ts +0 -9
  565. package/dist/core/utils/version-management.js +0 -61
  566. package/dist/core/worker.d.ts +0 -82
  567. package/dist/core/worker.js +0 -272
  568. package/dist/db/adapter.d.ts +0 -7
  569. package/dist/db/adapter.js +0 -175
  570. package/dist/db/bootstrap.d.ts +0 -9
  571. package/dist/db/drizzle/schema-sqlite.d.ts +0 -4837
  572. package/dist/db/drizzle/schema-sqlite.js +0 -684
  573. package/dist/db/drizzle/schema.d.ts +0 -4082
  574. package/dist/db/drizzle/schema.js +0 -770
  575. package/dist/db/drizzle.config.d.ts +0 -3
  576. package/dist/db/drizzle.config.js +0 -12
  577. package/dist/db/index.d.ts +0 -7
  578. package/dist/db/index.js +0 -89
  579. package/dist/db/neon.d.ts +0 -8
  580. package/dist/db/neon.js +0 -20
  581. package/dist/db/schema/index.d.ts +0 -40
  582. package/dist/db/schema/index.js +0 -105
  583. package/dist/db/schema/tables/context-sessions.d.ts +0 -9
  584. package/dist/db/schema/tables/context-sessions.js +0 -37
  585. package/dist/db/schema/tables/conversations.d.ts +0 -9
  586. package/dist/db/schema/tables/conversations.js +0 -47
  587. package/dist/db/schema/tables/core-memory.d.ts +0 -9
  588. package/dist/db/schema/tables/core-memory.js +0 -41
  589. package/dist/db/schema/tables/entities.d.ts +0 -9
  590. package/dist/db/schema/tables/entities.js +0 -39
  591. package/dist/db/schema/tables/entity-relations.d.ts +0 -9
  592. package/dist/db/schema/tables/entity-relations.js +0 -31
  593. package/dist/db/schema/tables/learnings.d.ts +0 -9
  594. package/dist/db/schema/tables/learnings.js +0 -66
  595. package/dist/db/schema/tables/memories.d.ts +0 -9
  596. package/dist/db/schema/tables/memories.js +0 -161
  597. package/dist/db/schema/tables/memory-associations.d.ts +0 -9
  598. package/dist/db/schema/tables/memory-associations.js +0 -39
  599. package/dist/db/schema/tables/memory-hash-cache.d.ts +0 -9
  600. package/dist/db/schema/tables/memory-hash-cache.js +0 -29
  601. package/dist/db/schema/tables/memory-merge-history.d.ts +0 -9
  602. package/dist/db/schema/tables/memory-merge-history.js +0 -33
  603. package/dist/db/schema/tables/memory-merge-proposals.d.ts +0 -9
  604. package/dist/db/schema/tables/memory-merge-proposals.js +0 -39
  605. package/dist/db/schema/tables/messages.d.ts +0 -9
  606. package/dist/db/schema/tables/messages.js +0 -41
  607. package/dist/db/schema/tables/namespaces.d.ts +0 -9
  608. package/dist/db/schema/tables/namespaces.js +0 -37
  609. package/dist/db/schema/tables/projects.d.ts +0 -9
  610. package/dist/db/schema/tables/projects.js +0 -31
  611. package/dist/db/schema/tables/users.d.ts +0 -9
  612. package/dist/db/schema/tables/users.js +0 -27
  613. package/dist/db/schema.d.ts +0 -3
  614. package/dist/db/schema.js +0 -11
  615. package/dist/db/supabase.d.ts +0 -9
  616. package/dist/db/supabase.js +0 -24
  617. package/dist/index.d.ts +0 -7
  618. package/dist/index.js +0 -1677
  619. package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
  620. package/dist/webui/server.d.ts +0 -5
  621. package/dist/webui/server.js +0 -642
  622. package/generated/mcp/manifest.json +0 -23
  623. package/generated/mcp/mcp-servers.json +0 -25
  624. package/generated/mcp/mcporter.json +0 -34
  625. package/generated/mcp/openclaw-memory-qmd.json +0 -17
  626. package/generated/mcp/runtime.json +0 -12
  627. package/scripts/README.md +0 -60
  628. package/scripts/build-release.sh +0 -36
  629. package/scripts/check-secrets.js +0 -132
  630. package/scripts/copy-runtime-assets.mjs +0 -26
  631. package/scripts/generate-mcp.mjs +0 -264
  632. package/scripts/github-release.sh +0 -77
  633. package/scripts/init-dirs.mjs +0 -13
  634. package/scripts/install-claude-code.sh +0 -85
  635. package/scripts/install-cursor.sh +0 -56
  636. package/scripts/install-hooks.sh +0 -73
  637. package/scripts/install-interactive.mjs +0 -357
  638. package/scripts/install-opencode.sh +0 -75
  639. package/scripts/install-plugin.mjs +0 -415
  640. package/scripts/install-windsurf.sh +0 -67
  641. package/scripts/remote-preflight.mjs +0 -62
  642. package/scripts/squish-fallback.mjs +0 -132
  643. package/scripts/test-interactive.mjs +0 -131
  644. package/scripts/verify-mcp.mjs +0 -214
  645. package/skills/squish-memory/scripts/install.mjs +0 -335
  646. package/skills/squish-memory/write_skill.js +0 -2
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Auto-Tagger - Infer tags from context
3
+ *
4
+ * Analyzes tool input/output to automatically infer relevant tags.
5
+ * Uses pattern matching to classify actions.
6
+ */
7
+
8
+ import type { ToolCategory } from './capture-filter.js';
9
+
10
+ /**
11
+ * Infer tags based on tool, input, and content
12
+ */
13
+ export function inferTags(
14
+ toolName: string,
15
+ toolInput: Record<string, unknown>,
16
+ content: string
17
+ ): string[] {
18
+ const tags: string[] = ['hook', 'autocapture']; // Always add these
19
+
20
+ const tool = toolName.toLowerCase();
21
+ const inputStr = JSON.stringify(toolInput).toLowerCase();
22
+ const contentLower = content.toLowerCase();
23
+
24
+ // File type tags
25
+ if (tool === 'write' || tool === 'edit') {
26
+ const filePath = String(toolInput.filePath || toolInput.path || '');
27
+
28
+ if (filePath.endsWith('.ts') || filePath.endsWith('.tsx')) {
29
+ tags.push('typescript');
30
+ } else if (filePath.endsWith('.js') || filePath.endsWith('.jsx')) {
31
+ tags.push('javascript');
32
+ } else if (filePath.endsWith('.json')) {
33
+ tags.push('config');
34
+ } else if (filePath.endsWith('.md')) {
35
+ tags.push('documentation');
36
+ } else if (filePath.endsWith('.test.ts') || filePath.endsWith('.spec.ts')) {
37
+ tags.push('test');
38
+ }
39
+
40
+ // Feature/fix detection
41
+ if (contentLower.includes('fix') || contentLower.includes('bug')) {
42
+ tags.push('bugfix');
43
+ } else if (contentLower.includes('refactor')) {
44
+ tags.push('refactor');
45
+ } else if (contentLower.includes('feature') || contentLower.includes('add')) {
46
+ tags.push('feature');
47
+ } else if (contentLower.includes('test')) {
48
+ tags.push('testing');
49
+ }
50
+ }
51
+
52
+ // Bash command tags
53
+ if (tool === 'bash') {
54
+ const cmd = String(toolInput.command || toolInput.cmd || '');
55
+
56
+ if (cmd.includes('git commit')) {
57
+ tags.push('commit', 'version-control');
58
+ } else if (cmd.includes('test') || cmd.includes('jest') || cmd.includes('vitest')) {
59
+ tags.push('testing', 'test');
60
+ } else if (cmd.includes('build') || cmd.includes('compile')) {
61
+ tags.push('build');
62
+ } else if (cmd.includes('install')) {
63
+ tags.push('dependencies');
64
+ } else if (cmd.includes('lint') || cmd.includes('format')) {
65
+ tags.push('linting');
66
+ }
67
+ }
68
+
69
+ // Task tags
70
+ if (tool === 'task' || tool === 'todowrite') {
71
+ tags.push('task', 'planning');
72
+
73
+ if (contentLower.includes('fix') || contentLower.includes('bug')) {
74
+ tags.push('bugfix');
75
+ } else if (contentLower.includes('feature')) {
76
+ tags.push('feature');
77
+ } else if (contentLower.includes('refactor')) {
78
+ tags.push('refactor');
79
+ }
80
+ }
81
+
82
+ // Deduplicate
83
+ return [...new Set(tags)];
84
+ }
85
+
86
+ /**
87
+ * Extract tags from commit message
88
+ */
89
+ export function extractCommitTags(commitMessage: string): string[] {
90
+ const tags: string[] = ['commit'];
91
+ const msg = commitMessage.toLowerCase();
92
+
93
+ // Conventional commits
94
+ if (msg.startsWith('feat:') || msg.includes('feature')) {
95
+ tags.push('feature', 'conventional-commit');
96
+ } else if (msg.startsWith('fix:') || msg.includes('bugfix')) {
97
+ tags.push('bugfix', 'conventional-commit');
98
+ } else if (msg.startsWith('refactor:')) {
99
+ tags.push('refactor', 'conventional-commit');
100
+ } else if (msg.startsWith('docs:')) {
101
+ tags.push('documentation', 'conventional-commit');
102
+ } else if (msg.startsWith('test:')) {
103
+ tags.push('testing', 'conventional-commit');
104
+ } else if (msg.startsWith('chore:')) {
105
+ tags.push('chore', 'conventional-commit');
106
+ }
107
+
108
+ return tags;
109
+ }
110
+
111
+ /**
112
+ * Extract tags from file path
113
+ */
114
+ export function extractFileTags(filePath: string): string[] {
115
+ const tags: string[] = [];
116
+ const path = filePath.toLowerCase();
117
+
118
+ // By extension
119
+ if (path.endsWith('.ts') || path.endsWith('.tsx')) {
120
+ tags.push('typescript');
121
+ } else if (path.endsWith('.js') || path.endsWith('.jsx')) {
122
+ tags.push('javascript');
123
+ } else if (path.endsWith('.py')) {
124
+ tags.push('python');
125
+ } else if (path.endsWith('.go')) {
126
+ tags.push('golang');
127
+ } else if (path.endsWith('.rs')) {
128
+ tags.push('rust');
129
+ } else if (path.endsWith('.java')) {
130
+ tags.push('java');
131
+ } else if (path.endsWith('.json')) {
132
+ tags.push('config');
133
+ } else if (path.endsWith('.md')) {
134
+ tags.push('documentation');
135
+ }
136
+
137
+ // By directory pattern
138
+ if (path.includes('/test') || path.includes('/tests') || path.includes('__tests__')) {
139
+ tags.push('test');
140
+ } else if (path.includes('/src/')) {
141
+ tags.push('source');
142
+ } else if (path.includes('/lib/') || path.includes('/utils/')) {
143
+ tags.push('library');
144
+ } else if (path.includes('/config/') || path.includes('/scripts/')) {
145
+ tags.push('config');
146
+ }
147
+
148
+ return tags;
149
+ }
@@ -0,0 +1,169 @@
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
+ import { logger } from '../logger.js';
9
+
10
+ /** Tool categories for capture */
11
+ export type ToolCategory =
12
+ | 'reading'
13
+ | 'modification'
14
+ | 'command'
15
+ | 'commit'
16
+ | 'testing'
17
+ | 'search'
18
+ | 'planning'
19
+ | 'other';
20
+
21
+ /** Capture decision */
22
+ export interface CaptureDecision {
23
+ shouldCapture: boolean;
24
+ reason?: string;
25
+ priority: 'high' | 'medium' | 'low';
26
+ }
27
+
28
+ /**
29
+ * Check if a tool should be captured
30
+ *
31
+ * Rules:
32
+ * - Write, Edit, MultiEdit → capture (modification)
33
+ * - Bash with commit → capture (commit)
34
+ * - Bash with test → capture (testing)
35
+ * - Task → capture (planning)
36
+ * - Read, Glob, grep → skip (reading - too noisy)
37
+ */
38
+ export function shouldCaptureTool(toolName: string): boolean {
39
+ const decision = getCaptureDecision(toolName);
40
+ return decision.shouldCapture;
41
+ }
42
+
43
+ /**
44
+ * Get detailed capture decision
45
+ */
46
+ export function getCaptureDecision(toolName: string): CaptureDecision {
47
+ const tool = toolName.toLowerCase();
48
+
49
+ // High priority - always capture
50
+ if (['write', 'edit', 'multiedit'].includes(tool)) {
51
+ return {
52
+ shouldCapture: true,
53
+ reason: 'File modification',
54
+ priority: 'high',
55
+ };
56
+ }
57
+
58
+ // Command with specific patterns
59
+ if (tool === 'bash') {
60
+ // Let the caller check the command for commit/test patterns
61
+ return {
62
+ shouldCapture: true, // Will be filtered by content check
63
+ reason: 'Command execution',
64
+ priority: 'medium',
65
+ };
66
+ }
67
+
68
+ // Task operations
69
+ if (['task', 'todowrite'].includes(tool)) {
70
+ return {
71
+ shouldCapture: true,
72
+ reason: 'Task/planning activity',
73
+ priority: 'high',
74
+ };
75
+ }
76
+
77
+ // Skip noisy tools
78
+ if (['read', 'glob', 'grep', 'websearch', 'webfetch', 'codesearch'].includes(tool)) {
79
+ return {
80
+ shouldCapture: false,
81
+ reason: 'Reading/search tool - too noisy',
82
+ priority: 'low',
83
+ };
84
+ }
85
+
86
+ // Skip other common noise
87
+ if (['bash'].includes(tool)) {
88
+ return {
89
+ shouldCapture: false, // Too noisy without filtering
90
+ reason: 'General command - filtered',
91
+ priority: 'low',
92
+ };
93
+ }
94
+
95
+ // Default: don't capture unknown tools
96
+ return {
97
+ shouldCapture: false,
98
+ reason: 'Unknown tool',
99
+ priority: 'low',
100
+ };
101
+ }
102
+
103
+ /**
104
+ * Check if Bash command should be captured based on content
105
+ */
106
+ export function shouldCaptureBashCommand(command: string): { capture: boolean; reason: string } {
107
+ const cmd = command.toLowerCase();
108
+
109
+ // Git commits - HIGH priority
110
+ if (cmd.includes('git commit') || cmd.includes('git add') && cmd.includes('git commit')) {
111
+ return { capture: true, reason: 'Git commit' };
112
+ }
113
+
114
+ // Tests - HIGH priority
115
+ if (cmd.includes('test') || cmd.includes('jest') || cmd.includes('vitest') ||
116
+ cmd.includes('pytest') || cmd.includes('bun test')) {
117
+ return { capture: true, reason: 'Test execution' };
118
+ }
119
+
120
+ // Build/compile - MEDIUM priority
121
+ if (cmd.includes('build') || cmd.includes('compile') || cmd.includes('tsc') ||
122
+ cmd.includes('bun build') || cmd.includes('npm run build')) {
123
+ return { capture: true, reason: 'Build/compile' };
124
+ }
125
+
126
+ // Installation - LOW priority
127
+ if (cmd.includes('npm install') || cmd.includes('bun install') ||
128
+ cmd.includes('pip install') || cmd.includes('yarn add')) {
129
+ return { capture: false, reason: 'Package installation - too noisy' };
130
+ }
131
+
132
+ // Git operations (non-commit) - LOW priority
133
+ if (cmd.includes('git') && !cmd.includes('commit')) {
134
+ return { capture: false, reason: 'Git operations - not commits' };
135
+ }
136
+
137
+ // File operations - MEDIUM priority
138
+ if (cmd.includes('mkdir') || cmd.includes('touch') || cmd.includes('rm ')) {
139
+ return { capture: true, reason: 'File operation' };
140
+ }
141
+
142
+ // Default - don't capture
143
+ return { capture: false, reason: 'General command' };
144
+ }
145
+
146
+ /**
147
+ * Categorize tool for tagging
148
+ */
149
+ export function categorizeTool(toolName: string): ToolCategory {
150
+ const tool = toolName.toLowerCase();
151
+
152
+ if (['write', 'edit', 'multiedit'].includes(tool)) {
153
+ return 'modification';
154
+ }
155
+
156
+ if (tool === 'bash') {
157
+ return 'command';
158
+ }
159
+
160
+ if (['read', 'glob', 'grep', 'websearch', 'webfetch'].includes(tool)) {
161
+ return 'reading';
162
+ }
163
+
164
+ if (['task', 'todowrite', 'todo-read'].includes(tool)) {
165
+ return 'planning';
166
+ }
167
+
168
+ return 'other';
169
+ }
@@ -0,0 +1,388 @@
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
+
11
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, statSync } from 'fs';
12
+ import { join, dirname } from 'path';
13
+ import { createHash } from 'crypto';
14
+ import { logger } from '../logger.js';
15
+ import { getProjectPath } from '../projects.js';
16
+
17
+ export interface HotCacheEntry {
18
+ id: string;
19
+ content: string;
20
+ hash: string;
21
+ createdAt: number;
22
+ lastReferencedAt: number;
23
+ referenceCount: number;
24
+ tags?: string[];
25
+ }
26
+
27
+ export interface HotCache {
28
+ version: string;
29
+ projectPath: string;
30
+ entries: HotCacheEntry[];
31
+ lastUpdated: number;
32
+ staleEntries: string[]; // IDs flagged as stale
33
+ }
34
+
35
+ const HOT_CACHE_VERSION = '1.0.0';
36
+ const MAX_HOT_CACHE_SIZE = 500; // ~500 words max
37
+ const STALE_THRESHOLD_DAYS = 7; // Flag as stale after 7 days
38
+ const STALE_REFERENCE_COUNT = 3; // Minimum refs before considering stale
39
+
40
+ let hotCacheInstance: HotCache | null = null;
41
+
42
+ /**
43
+ * Get the hot cache file path for a project
44
+ */
45
+ function getHotCachePath(projectPath: string): string {
46
+ return join(projectPath, '.squish', 'hot-cache.json');
47
+ }
48
+
49
+ /**
50
+ * Ensure .squish directory exists
51
+ */
52
+ async function ensureSquishDir(projectPath: string): Promise<string> {
53
+ const squishDir = join(projectPath, '.squish');
54
+ if (!existsSync(squishDir)) {
55
+ mkdirSync(squishDir, { recursive: true });
56
+ }
57
+ return squishDir;
58
+ }
59
+
60
+ /**
61
+ * Create content hash for deduplication
62
+ */
63
+ function hashContent(content: string): string {
64
+ return createHash('sha256').update(content.trim()).digest('hex').slice(0, 12);
65
+ }
66
+
67
+ /**
68
+ * Load hot cache from disk (or create new)
69
+ */
70
+ export async function loadHotCache(projectPath?: string): Promise<HotCache> {
71
+ const path = projectPath || await getProjectPath();
72
+ if (!path) {
73
+ return createEmptyHotCache('');
74
+ }
75
+
76
+ const cachePath = getHotCachePath(path);
77
+
78
+ try {
79
+ if (existsSync(cachePath)) {
80
+ const content = readFileSync(cachePath, 'utf-8');
81
+ const cache = JSON.parse(content) as HotCache;
82
+
83
+ // Clean stale entries on load
84
+ cache.staleEntries = identifyStaleEntries(cache.entries);
85
+
86
+ // Remove very stale entries (>14 days)
87
+ cache.entries = cache.entries.filter(entry => {
88
+ const ageDays = (Date.now() - entry.lastReferencedAt) / (24 * 60 * 60 * 1000);
89
+ return ageDays < 14;
90
+ });
91
+
92
+ logger.info('[HotCache] Loaded', { entries: cache.entries.length, path });
93
+ return cache;
94
+ }
95
+ } catch (error) {
96
+ logger.warn('[HotCache] Load failed, creating new', { error });
97
+ }
98
+
99
+ return createEmptyHotCache(path);
100
+ }
101
+
102
+ /**
103
+ * Create empty hot cache
104
+ */
105
+ function createEmptyHotCache(projectPath: string): HotCache {
106
+ return {
107
+ version: HOT_CACHE_VERSION,
108
+ projectPath,
109
+ entries: [],
110
+ lastUpdated: Date.now(),
111
+ staleEntries: [],
112
+ };
113
+ }
114
+
115
+ /**
116
+ * Identify stale entries (>7 days without enough references)
117
+ */
118
+ function identifyStaleEntries(entries: HotCacheEntry[]): string[] {
119
+ const stale: string[] = [];
120
+ const now = Date.now();
121
+
122
+ for (const entry of entries) {
123
+ const daysSinceRef = (now - entry.lastReferencedAt) / (24 * 60 * 60 * 1000);
124
+ if (daysSinceRef > STALE_THRESHOLD_DAYS && entry.referenceCount < STALE_REFERENCE_COUNT) {
125
+ stale.push(entry.id);
126
+ }
127
+ }
128
+
129
+ return stale;
130
+ }
131
+
132
+ /**
133
+ * Save hot cache to disk
134
+ */
135
+ export async function saveHotCache(cache: HotCache): Promise<void> {
136
+ const cachePath = getHotCachePath(cache.projectPath);
137
+
138
+ try {
139
+ await ensureSquishDir(cache.projectPath);
140
+ writeFileSync(cachePath, JSON.stringify(cache, null, 2), 'utf-8');
141
+ cache.lastUpdated = Date.now();
142
+ } catch (error) {
143
+ logger.error('[HotCache] Save failed', { error });
144
+ }
145
+ }
146
+
147
+ /**
148
+ * Add an entry to hot cache (with deduplication)
149
+ */
150
+ export async function addToHotCache(
151
+ content: string,
152
+ options?: {
153
+ projectPath?: string;
154
+ tags?: string[];
155
+ reference?: boolean;
156
+ }
157
+ ): Promise<HotCache> {
158
+ const path = options?.projectPath || await getProjectPath();
159
+ if (!path) {
160
+ return createEmptyHotCache('');
161
+ }
162
+
163
+ const cache = await loadHotCache(path);
164
+
165
+ const contentHash = hashContent(content);
166
+
167
+ // Check for duplicate by hash
168
+ const existingIndex = cache.entries.findIndex(e => e.hash === contentHash);
169
+ if (existingIndex >= 0) {
170
+ // Update reference info for duplicate
171
+ cache.entries[existingIndex].lastReferencedAt = Date.now();
172
+ cache.entries[existingIndex].referenceCount++;
173
+ await saveHotCache(cache);
174
+ logger.debug('[HotCache] Updated existing entry reference', { hash: contentHash });
175
+ return cache;
176
+ }
177
+
178
+ // Add new entry
179
+ const newEntry: HotCacheEntry = {
180
+ id: `hot-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
181
+ content: content.slice(0, 500), // Limit individual entry size
182
+ hash: contentHash,
183
+ createdAt: Date.now(),
184
+ lastReferencedAt: Date.now(),
185
+ referenceCount: 1,
186
+ tags: options?.tags,
187
+ };
188
+
189
+ cache.entries.push(newEntry);
190
+
191
+ // Trim if over max size (remove oldest entries)
192
+ if (cache.entries.length > MAX_HOT_CACHE_SIZE) {
193
+ cache.entries = cache.entries
194
+ .sort((a, b) => b.lastReferencedAt - a.lastReferencedAt)
195
+ .slice(0, MAX_HOT_CACHE_SIZE);
196
+ }
197
+
198
+ await saveHotCache(cache);
199
+ logger.info('[HotCache] Added new entry', { entries: cache.entries.length });
200
+
201
+ return cache;
202
+ }
203
+
204
+ /**
205
+ * Get hot cache summary for context
206
+ * Returns markdown-formatted summary of recent entries
207
+ */
208
+ export async function getHotCacheSummary(
209
+ options?: {
210
+ projectPath?: string;
211
+ maxEntries?: number;
212
+ }
213
+ ): Promise<string> {
214
+ const path = options?.projectPath || await getProjectPath();
215
+ if (!path) return '';
216
+
217
+ const cache = await loadHotCache(path);
218
+
219
+ if (cache.entries.length === 0) {
220
+ return '## Hot Cache\n\nNo active hot memories yet.\n';
221
+ }
222
+
223
+ const maxEntries = options?.maxEntries || 10;
224
+ const recentEntries = cache.entries
225
+ .sort((a, b) => b.lastReferencedAt - a.lastReferencedAt)
226
+ .slice(0, maxEntries);
227
+
228
+ const lines = ['## Hot Cache\n'];
229
+
230
+ for (const entry of recentEntries) {
231
+ const date = new Date(entry.lastReferencedAt).toISOString().split('T')[0];
232
+ const stale = cache.staleEntries.includes(entry.id) ? ' [STALE]' : '';
233
+ lines.push(`- ${entry.content.slice(0, 100)}${entry.content.length > 100 ? '...' : ''}${stale} (${date})`);
234
+ }
235
+
236
+ if (cache.staleEntries.length > 0) {
237
+ lines.push(`\n* ${cache.staleEntries.length} entries flagged as stale (consider cleaning)*`);
238
+ }
239
+
240
+ return lines.join('\n');
241
+ }
242
+
243
+ /**
244
+ * Reference an existing hot cache entry (prevents staleness)
245
+ */
246
+ export async function referenceHotCacheEntry(
247
+ entryId: string,
248
+ projectPath?: string
249
+ ): Promise<boolean> {
250
+ const path = projectPath || await getProjectPath();
251
+ if (!path) return false;
252
+
253
+ const cache = await loadHotCache(path);
254
+ const entry = cache.entries.find(e => e.id === entryId);
255
+
256
+ if (entry) {
257
+ entry.lastReferencedAt = Date.now();
258
+ entry.referenceCount++;
259
+ await saveHotCache(cache);
260
+ return true;
261
+ }
262
+
263
+ return false;
264
+ }
265
+
266
+ /**
267
+ * Remove stale entries from hot cache
268
+ */
269
+ export async function cleanStaleEntries(projectPath?: string): Promise<number> {
270
+ const path = projectPath || await getProjectPath();
271
+ if (!path) return 0;
272
+
273
+ const cache = await loadHotCache(path);
274
+ const staleIdSet = new Set(cache.staleEntries);
275
+
276
+ const originalCount = cache.entries.length;
277
+ cache.entries = cache.entries.filter(e => !staleIdSet.has(e.id));
278
+ cache.staleEntries = [];
279
+
280
+ await saveHotCache(cache);
281
+
282
+ const removed = originalCount - cache.entries.length;
283
+ logger.info('[HotCache] Cleaned stale entries', { removed });
284
+
285
+ return removed;
286
+ }
287
+
288
+ /**
289
+ * Add session context to hot cache
290
+ * Called from session hooks with key session information
291
+ */
292
+ export async function addSessionContextToHotCache(
293
+ sessionInfo: {
294
+ activeFiles?: string[];
295
+ commands?: string[];
296
+ failures?: string[];
297
+ decisions?: string[];
298
+ hypotheses?: string[];
299
+ },
300
+ projectPath?: string
301
+ ): Promise<HotCache> {
302
+ const path = projectPath || await getProjectPath();
303
+ if (!path) return createEmptyHotCache('');
304
+
305
+ // Build context entries from session info
306
+ const entries: string[] = [];
307
+
308
+ if (sessionInfo.activeFiles?.length) {
309
+ entries.push(`Active files: ${sessionInfo.activeFiles.join(', ')}`);
310
+ }
311
+
312
+ if (sessionInfo.commands?.length) {
313
+ entries.push(`Recent commands: ${sessionInfo.commands.slice(-3).join('; ')}`);
314
+ }
315
+
316
+ if (sessionInfo.failures?.length) {
317
+ entries.push(`Recent failures: ${sessionInfo.failures.slice(-2).join('; ')}`);
318
+ }
319
+
320
+ if (sessionInfo.decisions?.length) {
321
+ entries.push(`Decisions: ${sessionInfo.decisions.join('; ')}`);
322
+ }
323
+
324
+ if (sessionInfo.hypotheses?.length) {
325
+ entries.push(`Hypotheses: ${sessionInfo.hypotheses.slice(-2).join('; ')}`);
326
+ }
327
+
328
+ // Add each entry to hot cache
329
+ let cache = await loadHotCache(path);
330
+ for (const entry of entries) {
331
+ cache = await addToHotCache(entry, { projectPath: path });
332
+ }
333
+
334
+ return cache;
335
+ }
336
+
337
+ /**
338
+ * Get all hot cache entries (for advanced use)
339
+ */
340
+ export async function getHotCacheEntries(
341
+ projectPath?: string
342
+ ): Promise<HotCacheEntry[]> {
343
+ const path = projectPath || await getProjectPath();
344
+ if (!path) return [];
345
+
346
+ const cache = await loadHotCache(path);
347
+ return cache.entries;
348
+ }
349
+
350
+ /**
351
+ * Clear hot cache (dangerous - use with caution)
352
+ */
353
+ export async function clearHotCache(projectPath?: string): Promise<void> {
354
+ const path = projectPath || await getProjectPath();
355
+ if (!path) return;
356
+
357
+ const cache = createEmptyHotCache(path);
358
+ await saveHotCache(cache);
359
+ logger.info('[HotCache] Cleared');
360
+ }
361
+
362
+ /**
363
+ * Get hot cache statistics
364
+ */
365
+ export async function getHotCacheStats(projectPath?: string): Promise<{
366
+ entries: number;
367
+ staleEntries: number;
368
+ oldestEntry: number | null;
369
+ newestEntry: number | null;
370
+ }> {
371
+ const path = projectPath || await getProjectPath();
372
+ if (!path) return { entries: 0, staleEntries: 0, oldestEntry: null, newestEntry: null };
373
+
374
+ const cache = await loadHotCache(path);
375
+
376
+ if (cache.entries.length === 0) {
377
+ return { entries: 0, staleEntries: 0, oldestEntry: null, newestEntry: null };
378
+ }
379
+
380
+ const timestamps = cache.entries.map(e => e.createdAt);
381
+
382
+ return {
383
+ entries: cache.entries.length,
384
+ staleEntries: cache.staleEntries.length,
385
+ oldestEntry: Math.min(...timestamps),
386
+ newestEntry: Math.max(...timestamps),
387
+ };
388
+ }
package/core/index.ts ADDED
@@ -0,0 +1,10 @@
1
+ // Shared services - Core utilities and services
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';