squish-memory 1.1.5 → 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 (499) 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 +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 +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/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/{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/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 +40 -17
  220. package/dist/config.js +150 -198
  221. package/dist/core/adapters/types.d.ts +13 -33
  222. package/dist/core/adapters/types.js +1 -1
  223. package/dist/core/agent-preferences.d.ts +16 -0
  224. package/dist/core/agent-preferences.js +124 -0
  225. package/dist/core/algorithms/safety/safety-checks.d.ts +1 -5
  226. package/dist/core/algorithms/types.d.ts +0 -8
  227. package/dist/core/associations.d.ts +3 -1
  228. package/dist/core/associations.js +37 -1
  229. package/dist/core/beliefs/decay.d.ts +27 -0
  230. package/dist/core/beliefs/decay.js +217 -0
  231. package/dist/core/beliefs/extractor.d.ts +9 -0
  232. package/dist/core/beliefs/extractor.js +113 -0
  233. package/dist/core/beliefs/store.d.ts +46 -0
  234. package/dist/core/beliefs/store.js +466 -0
  235. package/dist/core/beliefs/types.d.ts +28 -0
  236. package/dist/core/beliefs/types.js +2 -0
  237. package/dist/core/commands/mcp-server.d.ts +0 -1
  238. package/dist/core/commands/mcp-server.js +4 -737
  239. package/dist/core/commands/remember.d.ts +24 -0
  240. package/dist/core/commands/remember.js +144 -0
  241. package/dist/core/{toon.d.ts → compression.d.ts} +6 -4
  242. package/dist/core/{toon.js → compression.js} +8 -8
  243. package/dist/core/context/agent-context.js +1 -1
  244. package/dist/core/embeddings/embeddings.d.ts +29 -0
  245. package/dist/core/embeddings/embeddings.js +546 -0
  246. package/dist/core/embeddings/google-multimodal.js +6 -2
  247. package/dist/core/{local-embeddings.d.ts → embeddings/local-embeddings.d.ts} +1 -1
  248. package/dist/core/embeddings/local-embeddings.js +11 -0
  249. package/dist/core/embeddings/qmd-client.js +1 -1
  250. package/dist/core/embeddings/transformers-local.d.ts +64 -0
  251. package/dist/core/embeddings/transformers-local.js +213 -0
  252. package/dist/core/embeddings.d.ts +1 -28
  253. package/dist/core/embeddings.js +2 -453
  254. package/dist/core/graph/entity-deduplicator.d.ts +24 -0
  255. package/dist/core/graph/entity-deduplicator.js +183 -0
  256. package/dist/core/graph/graph-builder.d.ts +46 -0
  257. package/dist/core/graph/graph-builder.js +174 -0
  258. package/dist/core/graph/graph-traversal.d.ts +80 -0
  259. package/dist/core/graph/graph-traversal.js +315 -0
  260. package/dist/core/graph/index.d.ts +19 -0
  261. package/dist/core/graph/index.js +13 -0
  262. package/dist/core/graph/llm-entity-extractor.d.ts +49 -0
  263. package/dist/core/graph/llm-entity-extractor.js +313 -0
  264. package/dist/core/graph/multi-hop-retrieval.d.ts +48 -0
  265. package/dist/core/graph/multi-hop-retrieval.js +215 -0
  266. package/dist/core/graph/relationship-extractor.d.ts +48 -0
  267. package/dist/core/graph/relationship-extractor.js +351 -0
  268. package/dist/core/hooks/agent-hooks.d.ts +10 -1
  269. package/dist/core/hooks/agent-hooks.js +301 -24
  270. package/dist/core/hot-cache.d.ts +86 -0
  271. package/dist/core/hot-cache.js +285 -0
  272. package/dist/core/index.d.ts +9 -9
  273. package/dist/core/index.js +9 -12
  274. package/dist/core/ingestion/core-memory.d.ts +2 -2
  275. package/dist/core/ingestion/core-memory.js +3 -3
  276. package/dist/core/ingestion/learnings.js +3 -0
  277. package/dist/core/ingestion/signal-engine.d.ts +41 -0
  278. package/dist/core/ingestion/signal-engine.js +201 -0
  279. package/dist/core/{obsidian-vault.d.ts → integrations/obsidian-vault.d.ts} +2 -1
  280. package/dist/core/{obsidian-vault.js → integrations/obsidian-vault.js} +69 -7
  281. package/dist/core/lib/parse-embedding.d.ts +9 -0
  282. package/dist/core/lib/parse-embedding.js +58 -0
  283. package/dist/core/lib/schemas.d.ts +57 -54
  284. package/dist/core/lib/types.d.ts +45 -0
  285. package/dist/core/lib/types.js +6 -0
  286. package/dist/core/lib/utils.d.ts +4 -0
  287. package/dist/core/lib/utils.js +55 -0
  288. package/dist/core/lifecycle.d.ts +0 -1
  289. package/dist/core/lifecycle.js +13 -23
  290. package/dist/core/logger.d.ts +1 -0
  291. package/dist/core/logger.js +14 -8
  292. package/dist/core/mcp/tools.d.ts +0 -2
  293. package/dist/core/mcp/tools.js +0 -87
  294. package/dist/core/mcp/types.d.ts +25 -253
  295. package/dist/core/mcp/types.js +2 -2
  296. package/dist/core/memory/categorizer.js +1 -0
  297. package/dist/core/memory/consolidation.js +2 -28
  298. package/dist/core/memory/entity-extractor.d.ts +4 -0
  299. package/dist/core/memory/entity-extractor.js +30 -16
  300. package/dist/core/memory/explain.d.ts +18 -0
  301. package/dist/core/memory/explain.js +92 -0
  302. package/dist/core/memory/fact-deriver.d.ts +31 -0
  303. package/dist/core/memory/fact-deriver.js +236 -0
  304. package/dist/core/memory/hybrid-retrieval.d.ts +14 -16
  305. package/dist/core/memory/hybrid-retrieval.js +25 -127
  306. package/dist/core/memory/hybrid-scorer.js +6 -23
  307. package/dist/core/memory/hybrid-search.d.ts +10 -7
  308. package/dist/core/memory/hybrid-search.js +458 -221
  309. package/dist/core/memory/importance.d.ts +0 -17
  310. package/dist/core/memory/importance.js +1 -58
  311. package/dist/core/memory/index.d.ts +1 -0
  312. package/dist/core/memory/index.js +1 -0
  313. package/dist/core/memory/memories.d.ts +13 -17
  314. package/dist/core/memory/memories.js +78 -75
  315. package/dist/core/memory/memory-lifecycle.d.ts +2 -2
  316. package/dist/core/memory/memory-lifecycle.js +10 -18
  317. package/dist/core/memory/normalization.d.ts +1 -16
  318. package/dist/core/memory/path-strengthener.d.ts +39 -0
  319. package/dist/core/memory/path-strengthener.js +150 -0
  320. package/dist/core/memory/query-processor.js +37 -3
  321. package/dist/core/memory/retrieval-feedback.d.ts +70 -0
  322. package/dist/core/memory/retrieval-feedback.js +213 -0
  323. package/dist/core/memory/stale-cleaner.d.ts +26 -0
  324. package/dist/core/memory/stale-cleaner.js +97 -0
  325. package/dist/core/memory/stats.d.ts +10 -0
  326. package/dist/core/memory/stats.js +8 -3
  327. package/dist/core/memory/trigger-detector.d.ts +8 -1
  328. package/dist/core/memory/trigger-detector.js +42 -5
  329. package/dist/core/places/index.d.ts +1 -1
  330. package/dist/core/places/index.js +1 -1
  331. package/dist/core/places/places.d.ts +13 -13
  332. package/dist/core/places/places.js +27 -27
  333. package/dist/core/places/rules.js +23 -23
  334. package/dist/core/places/walking.d.ts +3 -3
  335. package/dist/core/places/walking.js +7 -7
  336. package/dist/core/projects.js +8 -0
  337. package/dist/core/runtime/trust-report.d.ts +102 -0
  338. package/dist/core/runtime/trust-report.js +107 -0
  339. package/dist/core/runtime/trust-state.d.ts +12 -0
  340. package/dist/core/runtime/trust-state.js +309 -0
  341. package/dist/core/scheduler/cron-scheduler.d.ts +1 -1
  342. package/dist/core/scheduler/cron-scheduler.js +164 -3
  343. package/dist/core/scheduler/job-runner.js +1 -1
  344. package/dist/core/search/qmd-wrapper.d.ts +36 -0
  345. package/dist/core/search/qmd-wrapper.js +58 -0
  346. package/dist/core/session/auto-load.js +28 -3
  347. package/dist/core/session/entity-tracker.d.ts +62 -0
  348. package/dist/core/session/entity-tracker.js +287 -0
  349. package/dist/core/session/reference-resolver.d.ts +26 -0
  350. package/dist/core/session/reference-resolver.js +121 -0
  351. package/dist/core/session/self-iteration-job.d.ts +15 -0
  352. package/dist/core/session/self-iteration-job.js +163 -58
  353. package/dist/core/session/working-set.d.ts +50 -0
  354. package/dist/core/session/working-set.js +212 -0
  355. package/dist/core/snapshots/creation.d.ts +2 -8
  356. package/dist/core/snapshots/creation.js +3 -12
  357. package/dist/core/utils/summarization-helpers.d.ts +0 -4
  358. package/dist/core/utils/summarization-helpers.js +1 -6
  359. package/dist/db/bootstrap.d.ts +2 -0
  360. package/dist/db/bootstrap.js +229 -280
  361. package/dist/db/drizzle/schema-sqlite.d.ts +702 -1
  362. package/dist/db/drizzle/schema-sqlite.js +83 -4
  363. package/dist/db/drizzle/schema.d.ts +653 -1
  364. package/dist/db/drizzle/schema.js +93 -4
  365. package/dist/db/migrations/associations.d.ts +6 -0
  366. package/dist/db/migrations/associations.js +29 -0
  367. package/dist/db/migrations/beliefs.d.ts +10 -0
  368. package/dist/db/migrations/beliefs.js +76 -0
  369. package/dist/db/migrations/core-memory.d.ts +6 -0
  370. package/dist/db/migrations/core-memory.js +29 -0
  371. package/dist/db/migrations/fts.d.ts +6 -0
  372. package/dist/db/migrations/fts.js +52 -0
  373. package/dist/db/migrations/index.d.ts +25 -0
  374. package/dist/db/migrations/index.js +51 -0
  375. package/dist/db/migrations/indexes.d.ts +6 -0
  376. package/dist/db/migrations/indexes.js +30 -0
  377. package/dist/db/migrations/learnings.d.ts +7 -0
  378. package/dist/db/migrations/learnings.js +26 -0
  379. package/dist/db/migrations/maintenance.d.ts +6 -0
  380. package/dist/db/migrations/maintenance.js +61 -0
  381. package/dist/db/migrations/memories.d.ts +7 -0
  382. package/dist/db/migrations/memories.js +16 -0
  383. package/dist/db/migrations/memory-places.d.ts +6 -0
  384. package/dist/db/migrations/memory-places.js +29 -0
  385. package/dist/db/migrations/places.d.ts +6 -0
  386. package/dist/db/migrations/places.js +43 -0
  387. package/dist/db/migrations/projects.d.ts +3 -0
  388. package/dist/db/migrations/projects.js +13 -0
  389. package/dist/db/migrations/tier-conversion.d.ts +7 -0
  390. package/dist/db/migrations/tier-conversion.js +20 -0
  391. package/dist/db/schema/beliefs.d.ts +9 -0
  392. package/dist/db/schema/beliefs.js +46 -0
  393. package/dist/db/schema/generator.d.ts +38 -0
  394. package/dist/db/schema/generator.js +108 -0
  395. package/dist/db/schema/index.d.ts +19 -20
  396. package/dist/db/schema/index.js +25 -79
  397. package/dist/db/schema/learnings.d.ts +7 -0
  398. package/dist/db/schema/learnings.js +30 -0
  399. package/dist/db/schema/memories.d.ts +7 -0
  400. package/dist/db/schema/memories.js +81 -0
  401. package/dist/db/schema/projects.d.ts +4 -0
  402. package/dist/db/schema/projects.js +31 -0
  403. package/dist/packages/mcp/src/index.d.ts +3 -0
  404. package/dist/packages/mcp/src/index.js +733 -0
  405. package/mcp.json.example +8 -11
  406. package/package.json +57 -76
  407. package/packages/cli/package.json +22 -0
  408. package/packages/cli/src/commands/clean.ts +68 -0
  409. package/packages/cli/src/commands/context.ts +79 -0
  410. package/packages/cli/src/commands/doctor.ts +357 -0
  411. package/packages/cli/src/commands/forget.ts +72 -0
  412. package/packages/cli/src/commands/health.ts +36 -0
  413. package/packages/cli/src/commands/inspect.ts +41 -0
  414. package/packages/cli/src/commands/link.ts +50 -0
  415. package/packages/cli/src/commands/migrate.ts +93 -0
  416. package/packages/cli/src/commands/recall.ts +99 -0
  417. package/packages/cli/src/commands/recent.ts +57 -0
  418. package/packages/cli/src/commands/remember.ts +139 -0
  419. package/packages/cli/src/commands/run.ts +58 -0
  420. package/packages/cli/src/commands/stale.ts +43 -0
  421. package/packages/cli/src/commands/stats.ts +42 -0
  422. package/packages/cli/src/index.ts +57 -0
  423. package/packages/cli/tsconfig.json +24 -0
  424. package/packages/mcp/package.json +26 -0
  425. package/packages/mcp/src/index.ts +877 -0
  426. package/packages/mcp/tsconfig.json +20 -0
  427. package/skills/squish-memory/SKILL.md +38 -35
  428. package/skills/squish-memory/{scripts/install.sh → install.sh} +1 -1
  429. package/skills/squish-memory/references/claude-desktop.json +12 -0
  430. package/skills/squish-memory/references/openclaw.json +13 -0
  431. package/skills/squish-memory/references/opencode.json +14 -0
  432. package/config/hooks/claude-code-hooks.json +0 -39
  433. package/config/hooks/cursor-hooks.json +0 -30
  434. package/config/hooks/opencode-hooks.json +0 -30
  435. package/config/hooks/windsurf-hooks.json +0 -30
  436. package/config/mcp-cli-fallback-policy.json +0 -22
  437. package/config/mcp.json +0 -38
  438. package/config/plugin-manifest.json +0 -101
  439. package/config/plugin-manifest.schema.json +0 -244
  440. package/config/plugin.json +0 -32
  441. package/config/remote-memory-policy.json +0 -32
  442. package/core/commands/context-paging.md +0 -51
  443. package/core/commands/context-status.md +0 -22
  444. package/core/commands/context.md +0 -5
  445. package/core/commands/core-memory.md +0 -56
  446. package/core/commands/health.md +0 -5
  447. package/core/commands/init.md +0 -39
  448. package/core/commands/merge.md +0 -113
  449. package/core/commands/recall.md +0 -5
  450. package/core/commands/remember.md +0 -11
  451. package/core/commands/search.md +0 -10
  452. package/dist/core/commands/managed-sync.d.ts +0 -10
  453. package/dist/core/commands/managed-sync.js +0 -64
  454. package/dist/core/external-folder/index.d.ts +0 -102
  455. package/dist/core/external-folder/index.js +0 -294
  456. package/dist/core/namespaces/index.d.ts +0 -71
  457. package/dist/core/namespaces/index.js +0 -305
  458. package/dist/core/namespaces/uri-parser.d.ts +0 -31
  459. package/dist/core/namespaces/uri-parser.js +0 -74
  460. package/dist/core/search/qmd-search.d.ts +0 -61
  461. package/dist/core/search/qmd-search.js +0 -178
  462. package/dist/core/session-hooks/self-iteration-job.d.ts +0 -20
  463. package/dist/core/session-hooks/self-iteration-job.js +0 -282
  464. package/dist/core/session-hooks/session-hooks.d.ts +0 -18
  465. package/dist/core/session-hooks/session-hooks.js +0 -58
  466. package/dist/core/snapshots.d.ts +0 -29
  467. package/dist/core/snapshots.js +0 -220
  468. package/dist/core/sync/qmd-sync.d.ts +0 -94
  469. package/dist/core/sync/qmd-sync.js +0 -201
  470. package/dist/index.d.ts +0 -7
  471. package/dist/index.js +0 -1677
  472. package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
  473. package/dist/webui/server.d.ts +0 -5
  474. package/dist/webui/server.js +0 -642
  475. package/generated/mcp/manifest.json +0 -23
  476. package/generated/mcp/mcp-servers.json +0 -25
  477. package/generated/mcp/mcporter.json +0 -34
  478. package/generated/mcp/openclaw-memory-qmd.json +0 -17
  479. package/generated/mcp/runtime.json +0 -12
  480. package/scripts/README.md +0 -60
  481. package/scripts/build-release.sh +0 -36
  482. package/scripts/check-secrets.js +0 -132
  483. package/scripts/copy-runtime-assets.mjs +0 -26
  484. package/scripts/generate-mcp.mjs +0 -264
  485. package/scripts/github-release.sh +0 -77
  486. package/scripts/init-dirs.mjs +0 -13
  487. package/scripts/install-claude-code.sh +0 -85
  488. package/scripts/install-cursor.sh +0 -56
  489. package/scripts/install-hooks.sh +0 -73
  490. package/scripts/install-interactive.mjs +0 -357
  491. package/scripts/install-opencode.sh +0 -75
  492. package/scripts/install-plugin.mjs +0 -415
  493. package/scripts/install-windsurf.sh +0 -67
  494. package/scripts/remote-preflight.mjs +0 -62
  495. package/scripts/squish-fallback.mjs +0 -132
  496. package/scripts/test-interactive.mjs +0 -131
  497. package/scripts/verify-mcp.mjs +0 -214
  498. package/skills/squish-memory/scripts/install.mjs +0 -335
  499. package/skills/squish-memory/write_skill.js +0 -2
@@ -1,6 +1,5 @@
1
1
  import { hybridSearch } from '../memory/hybrid-retrieval.js';
2
2
  import { rememberMemory, getMemory } from '../memory/memories.js';
3
- import { getEmbedding } from '../embeddings.js';
4
3
  import { getQMDClient } from '../embeddings/qmd-client.js';
5
4
  import { logger } from '../logger.js';
6
5
  function textResult(text) {
@@ -172,90 +171,6 @@ export const squishRecallTool = {
172
171
  }
173
172
  },
174
173
  };
175
- export const squishEmbedTool = {
176
- tool: {
177
- name: 'squish_embed',
178
- description: 'Generate embeddings for text using configured provider (supports multimodal)',
179
- inputSchema: {
180
- type: 'object',
181
- properties: {
182
- text: {
183
- type: 'string',
184
- description: 'Text to embed',
185
- },
186
- },
187
- required: ['text'],
188
- },
189
- },
190
- handler: async (args) => {
191
- try {
192
- const { text } = args;
193
- if (!text) {
194
- return errorResult('Text is required');
195
- }
196
- const embedding = await getEmbedding(text);
197
- if (!embedding) {
198
- return errorResult('Failed to generate embedding');
199
- }
200
- return textResult(JSON.stringify({
201
- dimensions: embedding.length,
202
- preview: embedding.slice(0, 5),
203
- }, null, 2));
204
- }
205
- catch (error) {
206
- logger.error('Embed error:', error);
207
- return errorResult(error instanceof Error ? error.message : 'Failed to generate embedding');
208
- }
209
- },
210
- };
211
- export const squishQMDSearchTool = {
212
- tool: {
213
- name: 'squish_qmd_search',
214
- description: 'Search markdown files using QMD (local, fast BM25 + vector)',
215
- inputSchema: {
216
- type: 'object',
217
- properties: {
218
- query: {
219
- type: 'string',
220
- description: 'Search query',
221
- },
222
- collection: {
223
- type: 'string',
224
- description: 'QMD collection name (optional)',
225
- },
226
- limit: {
227
- type: 'number',
228
- description: 'Maximum results (default: 10)',
229
- },
230
- },
231
- required: ['query'],
232
- },
233
- },
234
- handler: async (args) => {
235
- try {
236
- const { query, collection, limit = 10 } = args;
237
- if (!query) {
238
- return errorResult('Query is required');
239
- }
240
- const client = await getQMDClient();
241
- const available = await client.isAvailable();
242
- if (!available) {
243
- return errorResult('QMD not available');
244
- }
245
- const results = await client.search({
246
- query,
247
- collection,
248
- limit: limit || 10
249
- });
250
- const formatted = results.map((r, i) => `${i + 1}. ${r.path || r.file} (score: ${r.score?.toFixed(2)})\n ${r.content?.substring(0, 150)}...`).join('\n\n');
251
- return textResult(`QMD found ${results.length} results:\n\n${formatted}`);
252
- }
253
- catch (error) {
254
- logger.error('QMD search error:', error);
255
- return errorResult(error instanceof Error ? error.message : 'QMD search failed');
256
- }
257
- },
258
- };
259
174
  export const squishHealthTool = {
260
175
  tool: {
261
176
  name: 'squish_health',
@@ -355,8 +270,6 @@ export function getAllSquishTools() {
355
270
  squishSearchTool,
356
271
  squishRememberTool,
357
272
  squishRecallTool,
358
- squishEmbedTool,
359
- squishQMDSearchTool,
360
273
  squishHealthTool,
361
274
  squishGetSearchTracesTool,
362
275
  squishGetTraceByIdTool,
@@ -3,302 +3,74 @@ export declare const MCPToolSchema: z.ZodObject<{
3
3
  name: z.ZodString;
4
4
  description: z.ZodString;
5
5
  inputSchema: z.ZodRecord<z.ZodString, z.ZodAny>;
6
- }, "strip", z.ZodTypeAny, {
7
- name: string;
8
- description: string;
9
- inputSchema: Record<string, any>;
10
- }, {
11
- name: string;
12
- description: string;
13
- inputSchema: Record<string, any>;
14
- }>;
6
+ }, z.core.$strip>;
15
7
  export declare const MCPToolCallSchema: z.ZodObject<{
16
8
  name: z.ZodString;
17
9
  arguments: z.ZodRecord<z.ZodString, z.ZodAny>;
18
- }, "strip", z.ZodTypeAny, {
19
- name: string;
20
- arguments: Record<string, any>;
21
- }, {
22
- name: string;
23
- arguments: Record<string, any>;
24
- }>;
10
+ }, z.core.$strip>;
25
11
  export declare const MCPToolResultSchema: z.ZodObject<{
26
12
  content: z.ZodArray<z.ZodObject<{
27
- type: z.ZodEnum<["text", "image", "resource"]>;
13
+ type: z.ZodEnum<{
14
+ text: "text";
15
+ image: "image";
16
+ resource: "resource";
17
+ }>;
28
18
  text: z.ZodOptional<z.ZodString>;
29
19
  data: z.ZodOptional<z.ZodString>;
30
20
  mimeType: z.ZodOptional<z.ZodString>;
31
- }, "strip", z.ZodTypeAny, {
32
- type: "text" | "image" | "resource";
33
- text?: string | undefined;
34
- data?: string | undefined;
35
- mimeType?: string | undefined;
36
- }, {
37
- type: "text" | "image" | "resource";
38
- text?: string | undefined;
39
- data?: string | undefined;
40
- mimeType?: string | undefined;
41
- }>, "many">;
21
+ }, z.core.$strip>>;
42
22
  isError: z.ZodOptional<z.ZodBoolean>;
43
- }, "strip", z.ZodTypeAny, {
44
- content: {
45
- type: "text" | "image" | "resource";
46
- text?: string | undefined;
47
- data?: string | undefined;
48
- mimeType?: string | undefined;
49
- }[];
50
- isError?: boolean | undefined;
51
- }, {
52
- content: {
53
- type: "text" | "image" | "resource";
54
- text?: string | undefined;
55
- data?: string | undefined;
56
- mimeType?: string | undefined;
57
- }[];
58
- isError?: boolean | undefined;
59
- }>;
23
+ }, z.core.$strip>;
60
24
  export declare const MCPCapabilitiesSchema: z.ZodObject<{
61
25
  tools: z.ZodOptional<z.ZodObject<{
62
26
  listChanged: z.ZodOptional<z.ZodBoolean>;
63
- }, "strip", z.ZodTypeAny, {
64
- listChanged?: boolean | undefined;
65
- }, {
66
- listChanged?: boolean | undefined;
67
- }>>;
27
+ }, z.core.$strip>>;
68
28
  resources: z.ZodOptional<z.ZodObject<{
69
29
  subscribe: z.ZodOptional<z.ZodBoolean>;
70
30
  listChanged: z.ZodOptional<z.ZodBoolean>;
71
- }, "strip", z.ZodTypeAny, {
72
- listChanged?: boolean | undefined;
73
- subscribe?: boolean | undefined;
74
- }, {
75
- listChanged?: boolean | undefined;
76
- subscribe?: boolean | undefined;
77
- }>>;
31
+ }, z.core.$strip>>;
78
32
  prompts: z.ZodOptional<z.ZodObject<{
79
33
  listChanged: z.ZodOptional<z.ZodBoolean>;
80
- }, "strip", z.ZodTypeAny, {
81
- listChanged?: boolean | undefined;
82
- }, {
83
- listChanged?: boolean | undefined;
84
- }>>;
85
- }, "strip", z.ZodTypeAny, {
86
- tools?: {
87
- listChanged?: boolean | undefined;
88
- } | undefined;
89
- prompts?: {
90
- listChanged?: boolean | undefined;
91
- } | undefined;
92
- resources?: {
93
- listChanged?: boolean | undefined;
94
- subscribe?: boolean | undefined;
95
- } | undefined;
96
- }, {
97
- tools?: {
98
- listChanged?: boolean | undefined;
99
- } | undefined;
100
- prompts?: {
101
- listChanged?: boolean | undefined;
102
- } | undefined;
103
- resources?: {
104
- listChanged?: boolean | undefined;
105
- subscribe?: boolean | undefined;
106
- } | undefined;
107
- }>;
34
+ }, z.core.$strip>>;
35
+ }, z.core.$strip>;
108
36
  export declare const MCPInitializeRequestSchema: z.ZodObject<{
109
37
  protocolVersion: z.ZodString;
110
38
  capabilities: z.ZodObject<{
111
39
  tools: z.ZodOptional<z.ZodObject<{
112
40
  listChanged: z.ZodOptional<z.ZodBoolean>;
113
- }, "strip", z.ZodTypeAny, {
114
- listChanged?: boolean | undefined;
115
- }, {
116
- listChanged?: boolean | undefined;
117
- }>>;
41
+ }, z.core.$strip>>;
118
42
  resources: z.ZodOptional<z.ZodObject<{
119
43
  subscribe: z.ZodOptional<z.ZodBoolean>;
120
44
  listChanged: z.ZodOptional<z.ZodBoolean>;
121
- }, "strip", z.ZodTypeAny, {
122
- listChanged?: boolean | undefined;
123
- subscribe?: boolean | undefined;
124
- }, {
125
- listChanged?: boolean | undefined;
126
- subscribe?: boolean | undefined;
127
- }>>;
45
+ }, z.core.$strip>>;
128
46
  prompts: z.ZodOptional<z.ZodObject<{
129
47
  listChanged: z.ZodOptional<z.ZodBoolean>;
130
- }, "strip", z.ZodTypeAny, {
131
- listChanged?: boolean | undefined;
132
- }, {
133
- listChanged?: boolean | undefined;
134
- }>>;
135
- }, "strip", z.ZodTypeAny, {
136
- tools?: {
137
- listChanged?: boolean | undefined;
138
- } | undefined;
139
- prompts?: {
140
- listChanged?: boolean | undefined;
141
- } | undefined;
142
- resources?: {
143
- listChanged?: boolean | undefined;
144
- subscribe?: boolean | undefined;
145
- } | undefined;
146
- }, {
147
- tools?: {
148
- listChanged?: boolean | undefined;
149
- } | undefined;
150
- prompts?: {
151
- listChanged?: boolean | undefined;
152
- } | undefined;
153
- resources?: {
154
- listChanged?: boolean | undefined;
155
- subscribe?: boolean | undefined;
156
- } | undefined;
157
- }>;
48
+ }, z.core.$strip>>;
49
+ }, z.core.$strip>;
158
50
  clientInfo: z.ZodObject<{
159
51
  name: z.ZodString;
160
52
  version: z.ZodString;
161
- }, "strip", z.ZodTypeAny, {
162
- version: string;
163
- name: string;
164
- }, {
165
- version: string;
166
- name: string;
167
- }>;
168
- }, "strip", z.ZodTypeAny, {
169
- clientInfo: {
170
- version: string;
171
- name: string;
172
- };
173
- capabilities: {
174
- tools?: {
175
- listChanged?: boolean | undefined;
176
- } | undefined;
177
- prompts?: {
178
- listChanged?: boolean | undefined;
179
- } | undefined;
180
- resources?: {
181
- listChanged?: boolean | undefined;
182
- subscribe?: boolean | undefined;
183
- } | undefined;
184
- };
185
- protocolVersion: string;
186
- }, {
187
- clientInfo: {
188
- version: string;
189
- name: string;
190
- };
191
- capabilities: {
192
- tools?: {
193
- listChanged?: boolean | undefined;
194
- } | undefined;
195
- prompts?: {
196
- listChanged?: boolean | undefined;
197
- } | undefined;
198
- resources?: {
199
- listChanged?: boolean | undefined;
200
- subscribe?: boolean | undefined;
201
- } | undefined;
202
- };
203
- protocolVersion: string;
204
- }>;
53
+ }, z.core.$strip>;
54
+ }, z.core.$strip>;
205
55
  export declare const MCPInitializeResponseSchema: z.ZodObject<{
206
56
  protocolVersion: z.ZodString;
207
57
  capabilities: z.ZodObject<{
208
58
  tools: z.ZodOptional<z.ZodObject<{
209
59
  listChanged: z.ZodOptional<z.ZodBoolean>;
210
- }, "strip", z.ZodTypeAny, {
211
- listChanged?: boolean | undefined;
212
- }, {
213
- listChanged?: boolean | undefined;
214
- }>>;
60
+ }, z.core.$strip>>;
215
61
  resources: z.ZodOptional<z.ZodObject<{
216
62
  subscribe: z.ZodOptional<z.ZodBoolean>;
217
63
  listChanged: z.ZodOptional<z.ZodBoolean>;
218
- }, "strip", z.ZodTypeAny, {
219
- listChanged?: boolean | undefined;
220
- subscribe?: boolean | undefined;
221
- }, {
222
- listChanged?: boolean | undefined;
223
- subscribe?: boolean | undefined;
224
- }>>;
64
+ }, z.core.$strip>>;
225
65
  prompts: z.ZodOptional<z.ZodObject<{
226
66
  listChanged: z.ZodOptional<z.ZodBoolean>;
227
- }, "strip", z.ZodTypeAny, {
228
- listChanged?: boolean | undefined;
229
- }, {
230
- listChanged?: boolean | undefined;
231
- }>>;
232
- }, "strip", z.ZodTypeAny, {
233
- tools?: {
234
- listChanged?: boolean | undefined;
235
- } | undefined;
236
- prompts?: {
237
- listChanged?: boolean | undefined;
238
- } | undefined;
239
- resources?: {
240
- listChanged?: boolean | undefined;
241
- subscribe?: boolean | undefined;
242
- } | undefined;
243
- }, {
244
- tools?: {
245
- listChanged?: boolean | undefined;
246
- } | undefined;
247
- prompts?: {
248
- listChanged?: boolean | undefined;
249
- } | undefined;
250
- resources?: {
251
- listChanged?: boolean | undefined;
252
- subscribe?: boolean | undefined;
253
- } | undefined;
254
- }>;
67
+ }, z.core.$strip>>;
68
+ }, z.core.$strip>;
255
69
  serverInfo: z.ZodObject<{
256
70
  name: z.ZodString;
257
71
  version: z.ZodString;
258
- }, "strip", z.ZodTypeAny, {
259
- version: string;
260
- name: string;
261
- }, {
262
- version: string;
263
- name: string;
264
- }>;
265
- }, "strip", z.ZodTypeAny, {
266
- capabilities: {
267
- tools?: {
268
- listChanged?: boolean | undefined;
269
- } | undefined;
270
- prompts?: {
271
- listChanged?: boolean | undefined;
272
- } | undefined;
273
- resources?: {
274
- listChanged?: boolean | undefined;
275
- subscribe?: boolean | undefined;
276
- } | undefined;
277
- };
278
- protocolVersion: string;
279
- serverInfo: {
280
- version: string;
281
- name: string;
282
- };
283
- }, {
284
- capabilities: {
285
- tools?: {
286
- listChanged?: boolean | undefined;
287
- } | undefined;
288
- prompts?: {
289
- listChanged?: boolean | undefined;
290
- } | undefined;
291
- resources?: {
292
- listChanged?: boolean | undefined;
293
- subscribe?: boolean | undefined;
294
- } | undefined;
295
- };
296
- protocolVersion: string;
297
- serverInfo: {
298
- version: string;
299
- name: string;
300
- };
301
- }>;
72
+ }, z.core.$strip>;
73
+ }, z.core.$strip>;
302
74
  export type MCPTool = z.infer<typeof MCPToolSchema>;
303
75
  export type MCPToolCall = z.infer<typeof MCPToolCallSchema>;
304
76
  export type MCPToolResult = z.infer<typeof MCPToolResultSchema>;
@@ -2,11 +2,11 @@ import { z } from 'zod';
2
2
  export const MCPToolSchema = z.object({
3
3
  name: z.string(),
4
4
  description: z.string(),
5
- inputSchema: z.record(z.any()),
5
+ inputSchema: z.record(z.string(), z.any()),
6
6
  });
7
7
  export const MCPToolCallSchema = z.object({
8
8
  name: z.string(),
9
- arguments: z.record(z.any()),
9
+ arguments: z.record(z.string(), z.any()),
10
10
  });
11
11
  export const MCPToolResultSchema = z.object({
12
12
  content: z.array(z.object({
@@ -81,6 +81,7 @@ export async function categorizeMemory(content, existingTags = []) {
81
81
  context: 0,
82
82
  preference: 0,
83
83
  note: 0,
84
+ task: 0,
84
85
  };
85
86
  for (const { type, patterns, weight } of MEMORY_TYPE_PATTERNS) {
86
87
  for (const pattern of patterns) {
@@ -6,7 +6,8 @@ import { eq, inArray } from 'drizzle-orm';
6
6
  import { createDatabaseClient } from '../storage/database.js';
7
7
  import { getDb } from '../../db/index.js';
8
8
  import { getSchema } from '../../db/schema.js';
9
- import { cosineSimilarity } from './importance.js';
9
+ import { cosineSimilarity } from '../utils/vector-operations.js';
10
+ import { parseEmbedding } from '../lib/parse-embedding.js';
10
11
  import { getLowImportanceMemories } from './importance.js';
11
12
  import { rememberMemory } from './memories.js';
12
13
  import { logger } from '../logger.js';
@@ -98,33 +99,6 @@ async function calculateMemorySimilarity(memory1, memory2) {
98
99
  }
99
100
  return cosineSimilarity(embedding1, embedding2);
100
101
  }
101
- /**
102
- * Parse embedding from storage
103
- */
104
- function parseEmbedding(embeddingData) {
105
- if (!embeddingData)
106
- return null;
107
- if (Array.isArray(embeddingData))
108
- return embeddingData;
109
- if (typeof embeddingData === 'string') {
110
- try {
111
- return JSON.parse(embeddingData);
112
- }
113
- catch {
114
- return null;
115
- }
116
- }
117
- if (Buffer.isBuffer(embeddingData)) {
118
- try {
119
- const floatArray = new Float32Array(embeddingData.buffer || embeddingData);
120
- return Array.from(floatArray);
121
- }
122
- catch {
123
- return null;
124
- }
125
- }
126
- return null;
127
- }
128
102
  /**
129
103
  * Simple text similarity as fallback (Jaccard similarity of word sets)
130
104
  */
@@ -13,6 +13,10 @@ export interface ExtractedEntity {
13
13
  context: string;
14
14
  normalized?: string;
15
15
  }
16
+ /**
17
+ * Extract unique entity names for auto-linking
18
+ */
19
+ export declare function extractEntityNames(content: string): string[];
16
20
  /**
17
21
  * Extract entities from content
18
22
  */
@@ -9,29 +9,43 @@ import { eq, and } from 'drizzle-orm';
9
9
  import { logger } from '../../core/logger.js';
10
10
  // Regex patterns for entity detection
11
11
  const PATTERNS = {
12
- // File paths: src/components/Button.tsx, ./config.json, /var/log/app.log
12
+ // File paths: src/components/Button.tsx
13
13
  filePath: /(?:^|[^\w])(?:\.?\/[\w.-]*[\w.-]*(?:\/[\w.-]+)*|[\w.-]+\.(?:ts|tsx|js|jsx|py|rb|go|java|cpp|c|h|json|yaml|yml|env|md|txt|csv|sql|graphql))\b/gm,
14
- // Functions/methods: `functionName()`, `object.method()`, `Class.staticMethod()`
14
+ // Functions/methods
15
15
  functionCall: /\b([a-zA-Z_$][a-zA-Z0-9_$]*)\s*(?=\()/g,
16
- // Classes: `class ClassName`, `new ClassName()`, `extends ClassName`
16
+ // Classes
17
17
  className: /\b(?:class|new|extends|implements)\s+([A-Z][a-zA-Z0-9_$]*)\b/g,
18
- // Common names (capitalized words not at sentence start)
18
+ // Common names
19
19
  personName: /(?:^|[^.\w])\b([A-Z][a-z]+(?:\s+[A-Z][a-z]+)?)\b(?![^.\w])/g,
20
- // Capitalized concepts: `Machine Learning`, `React Hooks`
21
- concept: /\b(?:[A-Z][a-z]+\s+)+(?:System|Architecture|Pattern|Model|Algorithm|Framework|Library|Process|Concept|Theory|Method)\b/g,
22
- // Technologies/Tools: React, Node.js, PostgreSQL, Docker, Kubernetes
23
- tool: /\b(?:React|Vue|Angular|Node\.?js?|Express|Django|Flask|FastAPI|PostgreSQL|MongoDB|Redis|Docker|Kubernetes|Terraform|AWS|Azure|GCP|GitHub|GitLab|Jenkins|Figma|Sketch|Adobe|Webpack|Vite|npm|yarn|pnpm|TypeScript|JavaScript|Python|Go|Rust|Java|C\+\+|C#)\b/g,
24
- // Design patterns: `singleton pattern`, `factory method`, `observer pattern`
25
- designPattern: /\b(?:abstract\s+)?(?:factory|singleton|observer|decorator|strategy|adapter|bridge|facade|proxy|chain\s+of\s+responsibility|composite|template\s+method|visitor|builder|prototype|memento|interpreter|command|state|mediator)\s+(?:pattern|method)\b/gi,
26
- // Techniques/Methodologies: `memoization`, `caching`, `lazy loading`, `debouncing`
27
- technique: /\b(?:memoization|caching|lazy\s+loading|debouncing|throttling|currying|composition|recursion|iteration|hashing|indexing|sharding|replication|optimization|refactoring|testing|debugging|profiling|monitoring|logging)\b/gi,
28
- // Quoted concepts and important terms
29
- quotedConcept: /["`]([^"`]+)["`]/g,
20
+ // Capitalized concepts
21
+ concept: /\b(?:[A-Z][a-z]+\s+)+(?:System|Architecture|Pattern|Model|Algorithm|Framework|Library|Process|Concept|Method)\b/g,
22
+ // Tools
23
+ tool: /\b(?:React|Vue|Angular|Node\.?js?|Express|Django|Flask|FastAPI|PostgreSQL|MongoDB|Redis|Docker|Kubernetes)\b/g,
24
+ // Design patterns
25
+ designPattern: /\b(?:abstract\s+)?(?:factory|singleton|observer|decorator|strategy|adapter)\s+(?:pattern|method)\b/gi,
26
+ // Techniques
27
+ technique: /\b(?:memoization|caching|lazy\s+loading|debouncing|throttling)\b/gi,
30
28
  // ISO dates
31
29
  date: /\b(\d{4}-\d{2}-\d{2})(?:T\d{2}:\d{2}:\d{2})?\b/g,
32
- // Common code keywords and variables
33
- codeVariable: /\b(?:const|let|var|function|async|await|return|import|export|class|interface|type|enum)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\b/g,
34
30
  };
31
+ /**
32
+ * Extract unique entity names for auto-linking
33
+ */
34
+ export function extractEntityNames(content) {
35
+ const names = new Set();
36
+ // Extract person names
37
+ const namePattern = /(?:^|[^.\w])\b([A-Z][a-z]+(?:\s+[A-Z][a-z]+)?)\b(?![^.\w])/g;
38
+ let match;
39
+ while ((match = namePattern.exec(content)) !== null) {
40
+ names.add(match[1].toLowerCase());
41
+ }
42
+ // Extract capitalized concepts
43
+ const conceptPattern = /\b[A-Z][a-z]+(?:\s+[A-Z][a-z]+)+\b/g;
44
+ while ((match = conceptPattern.exec(content)) !== null) {
45
+ names.add(match[0].toLowerCase());
46
+ }
47
+ return Array.from(names).slice(0, 10);
48
+ }
35
49
  /**
36
50
  * Extract entities from content
37
51
  */
@@ -0,0 +1,18 @@
1
+ import type { StoredBelief } from '../beliefs/types.js';
2
+ export interface MemoryInspection {
3
+ id: string;
4
+ type: string;
5
+ classification: string;
6
+ reasons: string[];
7
+ rawFallbackSnapshotId?: string | null;
8
+ nuanceSuppressed: boolean;
9
+ place?: string | null;
10
+ placeType?: string | null;
11
+ graphStatus?: string | null;
12
+ content: string;
13
+ legacyMetadata: boolean;
14
+ beliefs?: StoredBelief[];
15
+ }
16
+ export declare function summarizeInspection(input: MemoryInspection): string;
17
+ export declare function explainMemory(id: string): Promise<MemoryInspection | null>;
18
+ //# sourceMappingURL=explain.d.ts.map
@@ -0,0 +1,92 @@
1
+ import { eq } from 'drizzle-orm';
2
+ import { getDbClient } from '../lib/db-client.js';
3
+ import { deserializeMetadata } from './serialization.js';
4
+ import { getMemorySnapshot } from '../snapshots/retrieval.js';
5
+ import { getMemoryPlace } from '../places/memory-places.js';
6
+ import { getPlace } from '../places/places.js';
7
+ import { getBeliefsForMemory } from '../beliefs/store.js';
8
+ export function summarizeInspection(input) {
9
+ const lines = [
10
+ `Memory ${input.id}`,
11
+ `Type: ${input.type}`,
12
+ `Classification: ${input.classification}`,
13
+ `Reasons: ${input.reasons.join('; ') || 'n/a'}`,
14
+ `Raw fallback: ${input.rawFallbackSnapshotId ?? 'none'}`,
15
+ `nuance suppressed: ${input.nuanceSuppressed ? 'yes' : 'no'}`,
16
+ `Place: ${input.place ?? 'none'}${input.placeType ? ` (${input.placeType})` : ''}`,
17
+ `Graph: ${input.graphStatus ?? 'none'}`,
18
+ `Content: ${input.content}`,
19
+ `Legacy metadata: ${input.legacyMetadata ? 'yes' : 'no'}`,
20
+ ];
21
+ if (input.beliefs && input.beliefs.length > 0) {
22
+ lines.push('Beliefs:');
23
+ for (const belief of input.beliefs) {
24
+ const confidence = typeof belief.confidence === 'number' ? belief.confidence.toFixed(1) : '?';
25
+ const sourceCount = belief.sourceMemoryIds?.length ?? 1;
26
+ const origin = sourceCount > 1 ? `derived from ${sourceCount} memories` : 'derived from 1 memory';
27
+ const evidence = belief.evidenceSummary
28
+ ? `\n Evidence: ${belief.evidenceSummary.slice(0, 100)}${belief.evidenceSummary.length > 100 ? '...' : ''}`
29
+ : '';
30
+ lines.push(`- [${belief.type}] ${belief.statement}`);
31
+ lines.push(` Status: ${belief.status}, Confidence: ${confidence}/100, ${origin}${evidence}`);
32
+ if (belief.status === 'superseded') {
33
+ lines.push(` Note: This belief supersedes a previous version`);
34
+ }
35
+ if (belief.status === 'disputed') {
36
+ lines.push(` Warning: This belief has been disputed`);
37
+ }
38
+ }
39
+ }
40
+ else {
41
+ lines.push(`Beliefs: ${input.legacyMetadata ? 'No derived beliefs available for this legacy record' : 'none derived'}`);
42
+ }
43
+ return lines.join('\n');
44
+ }
45
+ export async function explainMemory(id) {
46
+ const { db, schema } = await getDbClient();
47
+ const rows = await db.select().from(schema.memories).where(eq(schema.memories.id, id)).limit(1);
48
+ const row = rows[0];
49
+ if (!row)
50
+ return null;
51
+ const metadata = deserializeMetadata(row.metadata ?? null);
52
+ const rawClassification = metadata?.signal?.classification ?? metadata?.classification ?? null;
53
+ const classification = typeof rawClassification === 'string' && rawClassification.trim().length > 0
54
+ ? rawClassification
55
+ : 'legacy-durable';
56
+ const reasons = Array.isArray(metadata?.signal?.reasons)
57
+ ? metadata?.signal?.reasons
58
+ : Array.isArray(metadata?.reasons)
59
+ ? metadata?.reasons
60
+ : ['This record predates signal tracking, so detailed ingestion metadata is unavailable.'];
61
+ const rawFallbackSnapshotId = typeof metadata?.rawFallbackSnapshotId === 'string'
62
+ ? metadata.rawFallbackSnapshotId
63
+ : null;
64
+ const nuanceSuppressed = Boolean(metadata?.signal?.nuanceSuppressed ?? metadata?.nuanceSuppressed);
65
+ const graphStatus = typeof metadata?.graphStatus === 'string'
66
+ ? metadata.graphStatus
67
+ : typeof metadata?.graph === 'object' && metadata.graph
68
+ ? JSON.stringify(metadata.graph)
69
+ : 'Unavailable for this legacy record';
70
+ const legacyMetadata = rawClassification == null;
71
+ const placeId = await getMemoryPlace(id);
72
+ const place = placeId ? await getPlace(placeId) : null;
73
+ if (rawFallbackSnapshotId) {
74
+ await getMemorySnapshot(rawFallbackSnapshotId);
75
+ }
76
+ const beliefs = await getBeliefsForMemory(id);
77
+ return {
78
+ id: row.id,
79
+ type: row.type,
80
+ classification,
81
+ reasons,
82
+ rawFallbackSnapshotId,
83
+ nuanceSuppressed,
84
+ place: place?.name ?? null,
85
+ placeType: place?.placeType ?? null,
86
+ graphStatus,
87
+ content: row.content,
88
+ legacyMetadata,
89
+ beliefs,
90
+ };
91
+ }
92
+ //# sourceMappingURL=explain.js.map