squish-memory 1.0.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (704) hide show
  1. package/.env.example +146 -0
  2. package/CHANGELOG.md +202 -0
  3. package/README.md +192 -287
  4. package/{scripts → bin}/dependency-manager.mjs +217 -217
  5. package/{scripts → bin}/detect-clients.mjs +78 -78
  6. package/bin/install-interactive.mjs +321 -0
  7. package/bin/squish-mcp.mjs +46 -0
  8. package/bin/squish.mjs +33 -0
  9. package/config/mcp-migration-map.json +1 -6
  10. package/config/mcp-mode-semantics.json +10 -12
  11. package/config/mcp-remote-auth.json +3 -26
  12. package/config/mcp-universal.schema.json +5 -35
  13. package/config/settings.json +78 -22
  14. package/config.js +5 -0
  15. package/config.ts +218 -0
  16. package/core/adapters/config/claude-code.ts +133 -0
  17. package/core/adapters/config/cursor.ts +90 -0
  18. package/core/adapters/config/opencode.ts +89 -0
  19. package/core/adapters/config/windsurf.ts +90 -0
  20. package/core/adapters/index.ts +102 -0
  21. package/core/adapters/timeline.ts +116 -0
  22. package/core/adapters/types.ts +166 -0
  23. package/core/agent-preferences.ts +140 -0
  24. package/core/algorithms/analytics/token-estimator.ts +216 -0
  25. package/core/algorithms/detection/hash-filters.ts +260 -0
  26. package/core/algorithms/detection/semantic-ranker.ts +194 -0
  27. package/core/algorithms/detection/two-stage-detector.ts +421 -0
  28. package/core/algorithms/handlers/approve-merge.ts +215 -0
  29. package/core/algorithms/handlers/detect-duplicates.ts +192 -0
  30. package/core/algorithms/handlers/get-stats.ts +132 -0
  31. package/core/algorithms/handlers/list-proposals.ts +130 -0
  32. package/core/algorithms/handlers/preview-merge.ts +139 -0
  33. package/core/algorithms/handlers/reject-merge.ts +93 -0
  34. package/core/algorithms/handlers/reverse-merge.ts +155 -0
  35. package/core/algorithms/index.ts +39 -0
  36. package/core/algorithms/operations/cache-maintenance.ts +182 -0
  37. package/core/algorithms/safety/safety-checks.ts +256 -0
  38. package/core/algorithms/strategies/merge-strategies.ts +381 -0
  39. package/core/algorithms/types.ts +140 -0
  40. package/core/algorithms/utils/response-builder.ts +61 -0
  41. package/core/associations.ts +363 -0
  42. package/core/beliefs/decay.ts +289 -0
  43. package/core/beliefs/extractor.ts +131 -0
  44. package/core/beliefs/store.ts +557 -0
  45. package/core/beliefs/types.ts +38 -0
  46. package/core/commands/mcp-server.ts +5 -0
  47. package/core/compression.ts +177 -0
  48. package/core/config.js +2 -0
  49. package/core/consolidation.ts +330 -0
  50. package/core/context/agent-context.ts +388 -0
  51. package/core/context/context-paging.ts +449 -0
  52. package/core/context/context-window.ts +234 -0
  53. package/core/context/context.ts +35 -0
  54. package/core/embeddings/embeddings.ts +616 -0
  55. package/core/embeddings/google-multimodal.ts +200 -0
  56. package/core/embeddings/local-embeddings.ts +12 -0
  57. package/core/embeddings/qmd-client.ts +495 -0
  58. package/core/embeddings/transformers-local.ts +261 -0
  59. package/core/embeddings.js +4 -0
  60. package/core/error-handling.ts +206 -0
  61. package/core/external +219 -0
  62. package/core/graph/entity-deduplicator.ts +232 -0
  63. package/core/graph/graph-builder.ts +257 -0
  64. package/core/graph/graph-traversal.ts +490 -0
  65. package/core/graph/index.ts +24 -0
  66. package/core/graph/llm-entity-extractor.ts +402 -0
  67. package/core/graph/multi-hop-retrieval.ts +317 -0
  68. package/core/graph/relationship-extractor.ts +465 -0
  69. package/core/hooks/agent-hooks.ts +653 -0
  70. package/core/hooks/auto-tagger.ts +149 -0
  71. package/core/hooks/capture-filter.ts +169 -0
  72. package/core/hot-cache.ts +388 -0
  73. package/core/index.ts +10 -0
  74. package/core/ingestion/agent-memory.ts +167 -0
  75. package/core/ingestion/core-memory.ts +326 -0
  76. package/core/ingestion/learnings.ts +260 -0
  77. package/core/ingestion/signal-engine.ts +266 -0
  78. package/core/integrations/obsidian-vault.ts +197 -0
  79. package/core/layers/generator.ts +115 -0
  80. package/core/lib/db-client.ts +168 -0
  81. package/core/lib/parse-embedding.ts +59 -0
  82. package/core/lib/schemas.ts +102 -0
  83. package/core/lib/types.ts +49 -0
  84. package/core/lib/utils.ts +151 -0
  85. package/core/lib/validation.ts +180 -0
  86. package/core/lifecycle.ts +353 -0
  87. package/core/logger.ts +59 -0
  88. package/core/memory/bridge-discovery.ts +395 -0
  89. package/core/memory/categorizer.ts +390 -0
  90. package/core/memory/conflict-detector.ts +62 -0
  91. package/core/memory/consolidation.ts +372 -0
  92. package/core/memory/context-collector.ts +75 -0
  93. package/core/memory/contradiction-resolver.ts +494 -0
  94. package/core/memory/edit-workflow.ts +174 -0
  95. package/core/memory/entity-extractor.ts +426 -0
  96. package/core/memory/entity-resolver.ts +89 -0
  97. package/core/memory/explain.ts +112 -0
  98. package/core/memory/fact-deriver.ts +300 -0
  99. package/core/memory/fact-extractor.ts +120 -0
  100. package/core/memory/feedback-tracker.ts +200 -0
  101. package/core/memory/hooks.ts +230 -0
  102. package/core/memory/hybrid-retrieval.ts +65 -0
  103. package/core/memory/hybrid-scorer.ts +325 -0
  104. package/core/memory/hybrid-search.ts +748 -0
  105. package/core/memory/importance.ts +319 -0
  106. package/core/memory/index.ts +11 -0
  107. package/core/memory/loader.ts +178 -0
  108. package/core/memory/markdown/markdown-storage.ts +318 -0
  109. package/core/memory/memories.ts +565 -0
  110. package/core/memory/memory-lifecycle.ts +51 -0
  111. package/core/memory/memory-manager.ts +53 -0
  112. package/core/memory/migrate.ts +173 -0
  113. package/core/memory/normalization.ts +30 -0
  114. package/core/memory/path-strengthener.ts +211 -0
  115. package/core/memory/progressive-disclosure.ts +392 -0
  116. package/core/memory/query-processor.ts +130 -0
  117. package/core/memory/query-rewriter.ts +153 -0
  118. package/core/memory/response-analyzer.ts +81 -0
  119. package/core/memory/retrieval-feedback.ts +276 -0
  120. package/core/memory/serialization.ts +83 -0
  121. package/core/memory/stale-cleaner.ts +147 -0
  122. package/core/memory/stats.ts +181 -0
  123. package/core/memory/telemetry.ts +392 -0
  124. package/core/memory/temporal-facts.ts +356 -0
  125. package/core/memory/temporal-parser.ts +477 -0
  126. package/core/memory/trigger-detector.ts +104 -0
  127. package/core/memory/write-gate.ts +288 -0
  128. package/core/places/index.ts +14 -0
  129. package/core/places/memory-places.ts +339 -0
  130. package/core/places/places.ts +406 -0
  131. package/core/places/rules.ts +308 -0
  132. package/core/places/walking.ts +192 -0
  133. package/core/projects +89 -0
  134. package/core/projects.ts +131 -0
  135. package/core/redis.ts +82 -0
  136. package/core/responses.ts +187 -0
  137. package/core/runtime/trust-report.ts +195 -0
  138. package/core/runtime/trust-state.ts +360 -0
  139. package/core/scheduler/cron-scheduler.ts +581 -0
  140. package/core/scheduler/heartbeat.ts +91 -0
  141. package/core/scheduler/index.ts +8 -0
  142. package/core/scheduler/job-runner.ts +197 -0
  143. package/core/search/conversations.ts +166 -0
  144. package/core/search/entities.ts +46 -0
  145. package/core/search/folder-context.ts +154 -0
  146. package/core/search/graph-boost.ts +22 -0
  147. package/core/search/index.ts +4 -0
  148. package/core/search/qmd-wrapper.ts +84 -0
  149. package/core/security/encrypt.ts +51 -0
  150. package/core/security/governance.ts +102 -0
  151. package/core/security/privacy.ts +108 -0
  152. package/core/security/secret-detector.ts +122 -0
  153. package/core/session/auto-load.ts +160 -0
  154. package/core/session/entity-tracker.ts +363 -0
  155. package/core/session/index.ts +7 -0
  156. package/core/session/reference-resolver.ts +158 -0
  157. package/core/session/self-iteration-job.ts +478 -0
  158. package/core/session/session-hooks.ts +69 -0
  159. package/core/session/types.ts +36 -0
  160. package/core/session/working-set.ts +275 -0
  161. package/core/snapshots/cleanup.ts +13 -0
  162. package/core/snapshots/comparison.ts +59 -0
  163. package/core/snapshots/creation.ts +139 -0
  164. package/core/snapshots/retrieval.ts +44 -0
  165. package/core/snapshots/stats.ts +63 -0
  166. package/core/storage/cache.ts +241 -0
  167. package/core/storage/database.ts +23 -0
  168. package/core/summarization/cleanup.ts +13 -0
  169. package/core/summarization/queries.ts +32 -0
  170. package/core/summarization/stats.ts +64 -0
  171. package/core/summarization/strategies.ts +52 -0
  172. package/core/summarization.ts +248 -0
  173. package/core/temporal-facts.ts +244 -0
  174. package/core/tracing/collector.ts +470 -0
  175. package/core/tracing/visualizer.ts +195 -0
  176. package/core/utils/cleanup-operations.ts +50 -0
  177. package/core/utils/content-extraction.ts +95 -0
  178. package/core/utils/filter-builder.ts +56 -0
  179. package/core/utils/history-traversal.ts +63 -0
  180. package/core/utils/memory-operations.ts +56 -0
  181. package/core/utils/query-operations.ts +83 -0
  182. package/core/utils/summarization-helpers.ts +45 -0
  183. package/core/utils/temporal-queries.ts +39 -0
  184. package/core/utils/vector-operations.ts +135 -0
  185. package/core/utils/version-management.ts +74 -0
  186. package/core/worker.ts +324 -0
  187. package/db/adapter.ts +215 -0
  188. package/db/bootstrap.ts +1055 -0
  189. package/db/drizzle/migrations/0000_needy_cerebro.sql +402 -0
  190. package/db/drizzle/migrations/meta/0000_snapshot.json +3451 -0
  191. package/db/drizzle/migrations/meta/_journal.json +13 -0
  192. package/db/drizzle/schema-sqlite.ts +1032 -0
  193. package/db/drizzle/schema.ts +1128 -0
  194. package/db/drizzle.config.ts +12 -0
  195. package/db/index.ts +83 -0
  196. package/db/init.sql +5 -0
  197. package/db/migrations/associations.ts +35 -0
  198. package/db/migrations/beliefs.ts +89 -0
  199. package/db/migrations/core-memory.ts +35 -0
  200. package/db/migrations/fts.ts +59 -0
  201. package/db/migrations/index.ts +54 -0
  202. package/db/migrations/indexes.ts +36 -0
  203. package/db/migrations/learnings.ts +34 -0
  204. package/db/migrations/maintenance.ts +68 -0
  205. package/db/migrations/memories.ts +22 -0
  206. package/db/migrations/memory-places.ts +35 -0
  207. package/db/migrations/places.ts +49 -0
  208. package/db/migrations/projects.ts +21 -0
  209. package/db/migrations/tier-conversion.ts +24 -0
  210. package/db/neon.ts +22 -0
  211. package/db/schema/beliefs.ts +50 -0
  212. package/db/schema/generator.ts +159 -0
  213. package/db/schema/index.ts +58 -0
  214. package/db/schema/learnings.ts +32 -0
  215. package/db/schema/memories.ts +83 -0
  216. package/db/schema/projects.ts +33 -0
  217. package/db/schema.ts +13 -0
  218. package/db/supabase.ts +27 -0
  219. package/dist/config.d.ts +61 -14
  220. package/dist/config.js +159 -139
  221. package/dist/core/adapters/config/claude-code.d.ts +45 -0
  222. package/dist/core/adapters/config/claude-code.js +113 -0
  223. package/dist/core/adapters/config/cursor.d.ts +26 -0
  224. package/dist/core/adapters/config/cursor.js +74 -0
  225. package/dist/core/adapters/config/opencode.d.ts +23 -0
  226. package/dist/core/adapters/config/opencode.js +73 -0
  227. package/dist/core/adapters/config/windsurf.d.ts +26 -0
  228. package/dist/core/adapters/config/windsurf.js +74 -0
  229. package/dist/core/adapters/index.d.ts +45 -0
  230. package/dist/core/adapters/index.js +84 -0
  231. package/dist/core/adapters/scripts/install-adapter.d.ts +19 -0
  232. package/dist/core/adapters/scripts/install-adapter.js +149 -0
  233. package/dist/core/adapters/timeline.d.ts +23 -0
  234. package/dist/core/adapters/timeline.js +88 -0
  235. package/dist/core/adapters/types.d.ts +137 -0
  236. package/dist/core/adapters/types.js +50 -0
  237. package/dist/core/agent-preferences.d.ts +16 -0
  238. package/dist/core/agent-preferences.js +124 -0
  239. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.d.ts +1 -1
  240. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.js +3 -3
  241. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.d.ts +1 -1
  242. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.js +1 -1
  243. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.d.ts +1 -1
  244. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.js +7 -10
  245. package/dist/{algorithms → core/algorithms}/handlers/approve-merge.js +4 -4
  246. package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.js +3 -3
  247. package/dist/{algorithms → core/algorithms}/handlers/get-stats.js +3 -3
  248. package/dist/{algorithms → core/algorithms}/handlers/list-proposals.js +3 -3
  249. package/dist/{algorithms → core/algorithms}/handlers/preview-merge.js +3 -3
  250. package/dist/{algorithms → core/algorithms}/handlers/reject-merge.js +3 -3
  251. package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.js +3 -3
  252. package/dist/core/algorithms/index.d.ts +21 -0
  253. package/dist/core/algorithms/index.js +26 -0
  254. package/dist/core/algorithms/operations/cache-maintenance.d.ts +12 -0
  255. package/dist/core/algorithms/operations/cache-maintenance.js +157 -0
  256. package/dist/{algorithms → core/algorithms}/safety/safety-checks.d.ts +2 -6
  257. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.d.ts +19 -1
  258. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.js +74 -123
  259. package/dist/core/algorithms/types.d.ts +125 -0
  260. package/dist/core/algorithms/types.js +5 -0
  261. package/dist/core/associations.d.ts +3 -2
  262. package/dist/core/associations.js +37 -2
  263. package/dist/core/autosave.d.ts +19 -0
  264. package/dist/core/autosave.js +16 -0
  265. package/dist/core/beliefs/decay.d.ts +27 -0
  266. package/dist/core/beliefs/decay.js +217 -0
  267. package/dist/core/beliefs/extractor.d.ts +9 -0
  268. package/dist/core/beliefs/extractor.js +113 -0
  269. package/dist/core/beliefs/store.d.ts +46 -0
  270. package/dist/core/beliefs/store.js +466 -0
  271. package/dist/core/beliefs/types.d.ts +28 -0
  272. package/dist/core/beliefs/types.js +2 -0
  273. package/dist/core/commands/mcp-server.d.ts +2 -0
  274. package/dist/core/commands/mcp-server.js +6 -0
  275. package/dist/core/commands/remember.d.ts +24 -0
  276. package/dist/core/commands/remember.js +144 -0
  277. package/dist/core/compression.d.ts +45 -0
  278. package/dist/core/compression.js +160 -0
  279. package/dist/core/context/agent-context.d.ts +106 -0
  280. package/dist/core/context/agent-context.js +274 -0
  281. package/dist/core/{context-paging.d.ts → context/context-paging.d.ts} +2 -12
  282. package/dist/core/{context-paging.js → context/context-paging.js} +19 -39
  283. package/dist/core/context/context-window.d.ts +40 -0
  284. package/dist/core/context/context-window.js +177 -0
  285. package/dist/core/context/context.js +22 -0
  286. package/dist/core/embeddings/embeddings.d.ts +29 -0
  287. package/dist/core/embeddings/embeddings.js +546 -0
  288. package/dist/core/embeddings/google-multimodal.js +6 -2
  289. package/dist/core/embeddings/local-embeddings.d.ts +11 -0
  290. package/dist/core/embeddings/local-embeddings.js +11 -0
  291. package/dist/core/embeddings/qmd-client.js +1 -1
  292. package/dist/core/embeddings/transformers-local.d.ts +64 -0
  293. package/dist/core/embeddings/transformers-local.js +213 -0
  294. package/dist/core/embeddings.d.ts +1 -28
  295. package/dist/core/embeddings.js +2 -401
  296. package/dist/core/error-handling.d.ts +63 -0
  297. package/dist/core/error-handling.js +173 -0
  298. package/dist/core/graph/entity-deduplicator.d.ts +24 -0
  299. package/dist/core/graph/entity-deduplicator.js +183 -0
  300. package/dist/core/graph/graph-builder.d.ts +46 -0
  301. package/dist/core/graph/graph-builder.js +174 -0
  302. package/dist/core/graph/graph-traversal.d.ts +80 -0
  303. package/dist/core/graph/graph-traversal.js +315 -0
  304. package/dist/core/graph/index.d.ts +19 -0
  305. package/dist/core/graph/index.js +13 -0
  306. package/dist/core/graph/llm-entity-extractor.d.ts +49 -0
  307. package/dist/core/graph/llm-entity-extractor.js +313 -0
  308. package/dist/core/graph/multi-hop-retrieval.d.ts +48 -0
  309. package/dist/core/graph/multi-hop-retrieval.js +215 -0
  310. package/dist/core/graph/relationship-extractor.d.ts +48 -0
  311. package/dist/core/graph/relationship-extractor.js +351 -0
  312. package/dist/core/hooks/agent-hooks.d.ts +83 -0
  313. package/dist/core/hooks/agent-hooks.js +521 -0
  314. package/dist/core/hooks/auto-tagger.d.ts +19 -0
  315. package/dist/core/hooks/auto-tagger.js +155 -0
  316. package/dist/core/hooks/capture-filter.d.ts +41 -0
  317. package/dist/core/hooks/capture-filter.js +128 -0
  318. package/dist/core/hot-cache.d.ts +86 -0
  319. package/dist/core/hot-cache.js +285 -0
  320. package/dist/core/index.d.ts +9 -9
  321. package/dist/core/index.js +9 -12
  322. package/dist/core/{agent-memory.js → ingestion/agent-memory.js} +5 -7
  323. package/dist/core/{core-memory.d.ts → ingestion/core-memory.d.ts} +2 -2
  324. package/dist/core/{core-memory.js → ingestion/core-memory.js} +7 -7
  325. package/dist/core/ingestion/learnings.d.ts +57 -0
  326. package/dist/core/ingestion/learnings.js +205 -0
  327. package/dist/core/ingestion/signal-engine.d.ts +41 -0
  328. package/dist/core/ingestion/signal-engine.js +201 -0
  329. package/dist/core/integrations/obsidian-vault.d.ts +31 -0
  330. package/dist/core/integrations/obsidian-vault.js +156 -0
  331. package/dist/core/lib/db-client.d.ts +114 -0
  332. package/dist/core/lib/db-client.js +130 -0
  333. package/dist/core/lib/parse-embedding.d.ts +9 -0
  334. package/dist/core/lib/parse-embedding.js +58 -0
  335. package/dist/core/lib/schemas.d.ts +132 -0
  336. package/dist/core/lib/schemas.js +87 -0
  337. package/dist/core/lib/types.d.ts +45 -0
  338. package/dist/core/lib/types.js +6 -0
  339. package/dist/core/{utils.d.ts → lib/utils.d.ts} +5 -0
  340. package/dist/core/lib/utils.js +145 -0
  341. package/dist/core/lib/validation.d.ts +38 -0
  342. package/dist/core/lib/validation.js +151 -0
  343. package/dist/core/lifecycle.d.ts +7 -1
  344. package/dist/core/lifecycle.js +152 -42
  345. package/dist/core/logger.d.ts +1 -0
  346. package/dist/core/logger.js +13 -1
  347. package/dist/core/mcp/tools.d.ts +0 -2
  348. package/dist/core/mcp/tools.js +35 -90
  349. package/dist/core/mcp/types.d.ts +25 -253
  350. package/dist/core/mcp/types.js +2 -2
  351. package/dist/core/memory/categorizer.js +2 -0
  352. package/dist/core/memory/conflict-detector.js +1 -1
  353. package/dist/core/memory/consolidation.d.ts +1 -10
  354. package/dist/core/memory/consolidation.js +4 -39
  355. package/dist/core/memory/context-collector.js +1 -1
  356. package/dist/core/memory/edit-workflow.js +1 -1
  357. package/dist/core/memory/entity-extractor.d.ts +4 -0
  358. package/dist/core/memory/entity-extractor.js +30 -16
  359. package/dist/core/memory/entity-resolver.js +7 -7
  360. package/dist/core/memory/explain.d.ts +18 -0
  361. package/dist/core/memory/explain.js +92 -0
  362. package/dist/core/memory/fact-deriver.d.ts +31 -0
  363. package/dist/core/memory/fact-deriver.js +236 -0
  364. package/dist/core/memory/fact-extractor.js +12 -12
  365. package/dist/core/memory/feedback-tracker.js +1 -1
  366. package/dist/core/memory/hooks.d.ts +88 -0
  367. package/dist/core/memory/hooks.js +174 -0
  368. package/dist/core/memory/hybrid-retrieval.d.ts +14 -16
  369. package/dist/core/memory/hybrid-retrieval.js +25 -127
  370. package/dist/core/memory/hybrid-scorer.js +6 -23
  371. package/dist/core/memory/hybrid-search.d.ts +9 -11
  372. package/dist/core/memory/hybrid-search.js +496 -273
  373. package/dist/core/memory/importance.d.ts +2 -24
  374. package/dist/core/memory/importance.js +7 -91
  375. package/dist/core/memory/index.d.ts +1 -0
  376. package/dist/core/memory/index.js +1 -0
  377. package/dist/core/memory/loader.d.ts +31 -0
  378. package/dist/core/memory/loader.js +141 -0
  379. package/dist/core/memory/markdown/markdown-storage.d.ts +72 -0
  380. package/dist/core/memory/markdown/markdown-storage.js +243 -0
  381. package/dist/core/memory/memories.d.ts +23 -19
  382. package/dist/core/memory/memories.js +243 -228
  383. package/dist/core/memory/memory-lifecycle.d.ts +8 -0
  384. package/dist/core/memory/memory-lifecycle.js +47 -0
  385. package/dist/core/memory/migrate.d.ts +21 -0
  386. package/dist/core/memory/migrate.js +134 -0
  387. package/dist/core/memory/normalization.d.ts +7 -0
  388. package/dist/core/memory/normalization.js +26 -0
  389. package/dist/core/memory/path-strengthener.d.ts +39 -0
  390. package/dist/core/memory/path-strengthener.js +150 -0
  391. package/dist/core/memory/progressive-disclosure.js +1 -1
  392. package/dist/core/memory/query-processor.js +37 -3
  393. package/dist/core/memory/query-rewriter.js +9 -9
  394. package/dist/core/memory/retrieval-feedback.d.ts +70 -0
  395. package/dist/core/memory/retrieval-feedback.js +213 -0
  396. package/dist/core/memory/serialization.d.ts +4 -0
  397. package/dist/core/memory/serialization.js +49 -0
  398. package/dist/core/memory/stale-cleaner.d.ts +26 -0
  399. package/dist/core/memory/stale-cleaner.js +97 -0
  400. package/dist/core/memory/stats.d.ts +15 -0
  401. package/dist/core/memory/stats.js +69 -13
  402. package/dist/core/memory/temporal-facts.js +21 -0
  403. package/dist/core/memory/trigger-detector.d.ts +8 -1
  404. package/dist/core/memory/trigger-detector.js +42 -5
  405. package/dist/core/memory/write-gate.js +1 -1
  406. package/dist/core/places/index.d.ts +14 -0
  407. package/dist/core/places/index.js +14 -0
  408. package/dist/core/places/memory-places.d.ts +68 -0
  409. package/dist/core/places/memory-places.js +261 -0
  410. package/dist/core/places/places.d.ts +88 -0
  411. package/dist/core/places/places.js +314 -0
  412. package/dist/core/places/rules.d.ts +74 -0
  413. package/dist/core/places/rules.js +240 -0
  414. package/dist/core/places/walking.d.ts +56 -0
  415. package/dist/core/places/walking.js +121 -0
  416. package/dist/core/projects.d.ts +5 -0
  417. package/dist/core/projects.js +47 -18
  418. package/dist/core/responses.d.ts +96 -0
  419. package/dist/core/responses.js +122 -0
  420. package/dist/core/runtime/trust-report.d.ts +102 -0
  421. package/dist/core/runtime/trust-report.js +107 -0
  422. package/dist/core/runtime/trust-state.d.ts +12 -0
  423. package/dist/core/runtime/trust-state.js +309 -0
  424. package/dist/core/scheduler/cron-scheduler.d.ts +1 -1
  425. package/dist/core/scheduler/cron-scheduler.js +193 -10
  426. package/dist/core/scheduler/index.d.ts +1 -1
  427. package/dist/core/scheduler/index.js +1 -1
  428. package/dist/core/scheduler/job-runner.js +2 -2
  429. package/dist/core/search/conversations.js +40 -42
  430. package/dist/core/search/entities.js +6 -9
  431. package/dist/core/search/graph-boost.d.ts +7 -0
  432. package/dist/core/search/graph-boost.js +23 -0
  433. package/dist/core/search/qmd-wrapper.d.ts +36 -0
  434. package/dist/core/search/qmd-wrapper.js +58 -0
  435. package/dist/core/security/encrypt.d.ts +6 -0
  436. package/dist/core/security/encrypt.js +47 -0
  437. package/dist/core/{governance.d.ts → security/governance.d.ts} +6 -1
  438. package/dist/core/security/governance.js +79 -0
  439. package/dist/core/session/auto-load.js +34 -9
  440. package/dist/core/session/entity-tracker.d.ts +62 -0
  441. package/dist/core/session/entity-tracker.js +287 -0
  442. package/dist/core/session/index.d.ts +1 -1
  443. package/dist/core/session/index.js +1 -1
  444. package/dist/core/session/reference-resolver.d.ts +26 -0
  445. package/dist/core/session/reference-resolver.js +121 -0
  446. package/dist/core/{session-hooks → session}/self-iteration-job.d.ts +15 -0
  447. package/dist/core/{session-hooks → session}/self-iteration-job.js +195 -90
  448. package/dist/core/session/working-set.d.ts +50 -0
  449. package/dist/core/session/working-set.js +212 -0
  450. package/dist/core/snapshots/creation.d.ts +2 -8
  451. package/dist/core/snapshots/creation.js +3 -12
  452. package/dist/core/{cache.js → storage/cache.js} +2 -2
  453. package/dist/core/utils/memory-operations.js +1 -1
  454. package/dist/core/utils/summarization-helpers.d.ts +0 -4
  455. package/dist/core/utils/summarization-helpers.js +1 -6
  456. package/dist/core/utils/vector-operations.d.ts +71 -0
  457. package/dist/core/utils/vector-operations.js +129 -0
  458. package/dist/db/adapter.d.ts +3 -3
  459. package/dist/db/adapter.js +99 -88
  460. package/dist/db/bootstrap.d.ts +2 -0
  461. package/dist/db/bootstrap.js +921 -674
  462. package/dist/{drizzle → db/drizzle}/schema-sqlite.d.ts +775 -25
  463. package/dist/{drizzle → db/drizzle}/schema-sqlite.js +170 -24
  464. package/dist/{drizzle → db/drizzle}/schema.d.ts +731 -32
  465. package/dist/{drizzle → db/drizzle}/schema.js +192 -32
  466. package/dist/db/drizzle.config.d.ts +3 -0
  467. package/dist/db/drizzle.config.js +12 -0
  468. package/dist/db/index.d.ts +1 -5
  469. package/dist/db/index.js +51 -8
  470. package/dist/db/migrations/associations.d.ts +6 -0
  471. package/dist/db/migrations/associations.js +29 -0
  472. package/dist/db/migrations/beliefs.d.ts +10 -0
  473. package/dist/db/migrations/beliefs.js +76 -0
  474. package/dist/db/migrations/core-memory.d.ts +6 -0
  475. package/dist/db/migrations/core-memory.js +29 -0
  476. package/dist/db/migrations/fts.d.ts +6 -0
  477. package/dist/db/migrations/fts.js +52 -0
  478. package/dist/db/migrations/index.d.ts +25 -0
  479. package/dist/db/migrations/index.js +51 -0
  480. package/dist/db/migrations/indexes.d.ts +6 -0
  481. package/dist/db/migrations/indexes.js +30 -0
  482. package/dist/db/migrations/learnings.d.ts +7 -0
  483. package/dist/db/migrations/learnings.js +26 -0
  484. package/dist/db/migrations/maintenance.d.ts +6 -0
  485. package/dist/db/migrations/maintenance.js +61 -0
  486. package/dist/db/migrations/memories.d.ts +7 -0
  487. package/dist/db/migrations/memories.js +16 -0
  488. package/dist/db/migrations/memory-places.d.ts +6 -0
  489. package/dist/db/migrations/memory-places.js +29 -0
  490. package/dist/db/migrations/places.d.ts +6 -0
  491. package/dist/db/migrations/places.js +43 -0
  492. package/dist/db/migrations/projects.d.ts +3 -0
  493. package/dist/db/migrations/projects.js +13 -0
  494. package/dist/db/migrations/tier-conversion.d.ts +7 -0
  495. package/dist/db/migrations/tier-conversion.js +20 -0
  496. package/dist/db/neon.d.ts +8 -0
  497. package/dist/db/neon.js +20 -0
  498. package/dist/db/schema/beliefs.d.ts +9 -0
  499. package/dist/db/schema/beliefs.js +46 -0
  500. package/dist/db/schema/generator.d.ts +38 -0
  501. package/dist/db/schema/generator.js +108 -0
  502. package/dist/db/schema/index.d.ts +39 -0
  503. package/dist/db/schema/index.js +51 -0
  504. package/dist/db/schema/learnings.d.ts +7 -0
  505. package/dist/db/schema/learnings.js +30 -0
  506. package/dist/db/schema/memories.d.ts +7 -0
  507. package/dist/db/schema/memories.js +81 -0
  508. package/dist/db/schema/projects.d.ts +4 -0
  509. package/dist/db/schema/projects.js +31 -0
  510. package/dist/db/schema/tables/context-sessions.d.ts +9 -0
  511. package/dist/db/schema/tables/context-sessions.js +37 -0
  512. package/dist/db/schema/tables/conversations.d.ts +9 -0
  513. package/dist/db/schema/tables/conversations.js +47 -0
  514. package/dist/db/schema/tables/core-memory.d.ts +9 -0
  515. package/dist/db/schema/tables/core-memory.js +41 -0
  516. package/dist/db/schema/tables/entities.d.ts +9 -0
  517. package/dist/db/schema/tables/entities.js +39 -0
  518. package/dist/db/schema/tables/entity-relations.d.ts +9 -0
  519. package/dist/db/schema/tables/entity-relations.js +31 -0
  520. package/dist/db/schema/tables/learnings.d.ts +9 -0
  521. package/dist/db/schema/tables/learnings.js +66 -0
  522. package/dist/db/schema/tables/memories.d.ts +9 -0
  523. package/dist/db/schema/tables/memories.js +161 -0
  524. package/dist/db/schema/tables/memory-associations.d.ts +9 -0
  525. package/dist/db/schema/tables/memory-associations.js +39 -0
  526. package/dist/db/schema/tables/memory-hash-cache.d.ts +9 -0
  527. package/dist/db/schema/tables/memory-hash-cache.js +29 -0
  528. package/dist/db/schema/tables/memory-merge-history.d.ts +9 -0
  529. package/dist/db/schema/tables/memory-merge-history.js +33 -0
  530. package/dist/db/schema/tables/memory-merge-proposals.d.ts +9 -0
  531. package/dist/db/schema/tables/memory-merge-proposals.js +39 -0
  532. package/dist/db/schema/tables/messages.d.ts +9 -0
  533. package/dist/db/schema/tables/messages.js +41 -0
  534. package/dist/db/schema/tables/namespaces.d.ts +9 -0
  535. package/dist/db/schema/tables/namespaces.js +37 -0
  536. package/dist/db/schema/tables/projects.d.ts +9 -0
  537. package/dist/db/schema/tables/projects.js +31 -0
  538. package/dist/db/schema/tables/users.d.ts +9 -0
  539. package/dist/db/schema/tables/users.js +27 -0
  540. package/dist/db/schema.d.ts +1 -1
  541. package/dist/db/schema.js +2 -2
  542. package/dist/db/supabase.d.ts +9 -0
  543. package/dist/db/supabase.js +24 -0
  544. package/dist/packages/mcp/src/index.d.ts +3 -0
  545. package/dist/packages/mcp/src/index.js +733 -0
  546. package/mcp.json.example +8 -0
  547. package/package.json +132 -173
  548. package/packages/cli/package.json +22 -0
  549. package/packages/cli/src/commands/clean.ts +68 -0
  550. package/packages/cli/src/commands/context.ts +79 -0
  551. package/packages/cli/src/commands/doctor.ts +357 -0
  552. package/packages/cli/src/commands/forget.ts +72 -0
  553. package/packages/cli/src/commands/health.ts +36 -0
  554. package/packages/cli/src/commands/inspect.ts +41 -0
  555. package/packages/cli/src/commands/link.ts +50 -0
  556. package/packages/cli/src/commands/migrate.ts +93 -0
  557. package/packages/cli/src/commands/recall.ts +99 -0
  558. package/packages/cli/src/commands/recent.ts +57 -0
  559. package/packages/cli/src/commands/remember.ts +139 -0
  560. package/packages/cli/src/commands/run.ts +58 -0
  561. package/packages/cli/src/commands/stale.ts +43 -0
  562. package/packages/cli/src/commands/stats.ts +42 -0
  563. package/packages/cli/src/index.ts +57 -0
  564. package/packages/cli/tsconfig.json +24 -0
  565. package/packages/mcp/package.json +26 -0
  566. package/packages/mcp/src/index.ts +877 -0
  567. package/packages/mcp/tsconfig.json +20 -0
  568. package/skills/squish-memory/SKILL.md +107 -114
  569. package/skills/squish-memory/install.sh +3 -3
  570. package/skills/squish-memory/{claude-desktop.json → references/claude-desktop.json} +12 -12
  571. package/skills/squish-memory/{openclaw.json → references/openclaw.json} +13 -13
  572. package/skills/squish-memory/{opencode.json → references/opencode.json} +14 -14
  573. package/.claude-plugin/marketplace.json +0 -20
  574. package/.claude-plugin/plugin.json +0 -32
  575. package/.env.mcp.example +0 -60
  576. package/.mcp.json +0 -11
  577. package/QUICK-START.md +0 -71
  578. package/bin/squish-add.mjs +0 -32
  579. package/bin/squish-rm.mjs +0 -21
  580. package/commands/context-paging.md +0 -51
  581. package/commands/context-status.md +0 -22
  582. package/commands/context.md +0 -5
  583. package/commands/core-memory.md +0 -56
  584. package/commands/health.md +0 -5
  585. package/commands/init.md +0 -39
  586. package/commands/merge.md +0 -113
  587. package/commands/observe.md +0 -5
  588. package/commands/recall.md +0 -5
  589. package/commands/remember.md +0 -11
  590. package/commands/search.md +0 -10
  591. package/config/mcp-cli-fallback-policy.json +0 -22
  592. package/config/mcp.json +0 -38
  593. package/config/plugin-manifest.json +0 -152
  594. package/config/plugin-manifest.schema.json +0 -244
  595. package/config/remote-memory-policy.json +0 -32
  596. package/dist/api/web/index.d.ts +0 -3
  597. package/dist/api/web/index.js +0 -4
  598. package/dist/api/web/web-server.d.ts +0 -3
  599. package/dist/api/web/web-server.js +0 -6
  600. package/dist/api/web/web.d.ts +0 -4
  601. package/dist/api/web/web.js +0 -639
  602. package/dist/commands/managed-sync.d.ts +0 -10
  603. package/dist/commands/managed-sync.js +0 -64
  604. package/dist/commands/mcp-server.d.ts +0 -3
  605. package/dist/commands/mcp-server.js +0 -393
  606. package/dist/core/context.js +0 -24
  607. package/dist/core/governance.js +0 -64
  608. package/dist/core/local-embeddings.d.ts +0 -6
  609. package/dist/core/local-embeddings.js +0 -20
  610. package/dist/core/namespaces/index.d.ts +0 -71
  611. package/dist/core/namespaces/index.js +0 -305
  612. package/dist/core/namespaces/uri-parser.d.ts +0 -31
  613. package/dist/core/namespaces/uri-parser.js +0 -74
  614. package/dist/core/observations.d.ts +0 -26
  615. package/dist/core/observations.js +0 -110
  616. package/dist/core/requirements.d.ts +0 -20
  617. package/dist/core/requirements.js +0 -35
  618. package/dist/core/search/qmd-search.d.ts +0 -61
  619. package/dist/core/search/qmd-search.js +0 -178
  620. package/dist/core/snapshots.d.ts +0 -29
  621. package/dist/core/snapshots.js +0 -220
  622. package/dist/core/sync/qmd-sync.d.ts +0 -106
  623. package/dist/core/sync/qmd-sync.js +0 -213
  624. package/dist/core/utils.js +0 -74
  625. package/dist/index.d.ts +0 -19
  626. package/dist/index.js +0 -997
  627. package/generated/mcp/manifest.json +0 -23
  628. package/generated/mcp/mcp-servers.json +0 -25
  629. package/generated/mcp/mcporter.json +0 -34
  630. package/generated/mcp/openclaw-memory-qmd.json +0 -17
  631. package/generated/mcp/runtime.json +0 -12
  632. package/hooks/hooks.json +0 -52
  633. package/hooks/post-tool-use.js +0 -26
  634. package/hooks/session-end.js +0 -28
  635. package/hooks/session-start.js +0 -33
  636. package/hooks/user-prompt-submit.js +0 -26
  637. package/hooks/utils.js +0 -153
  638. package/npx-installer.js +0 -208
  639. package/packages/plugin-claude-code/README.md +0 -73
  640. package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +0 -35
  641. package/packages/plugin-claude-code/dist/plugin-wrapper.js +0 -191
  642. package/packages/plugin-claude-code/package.json +0 -31
  643. package/packages/plugin-openclaw/README.md +0 -70
  644. package/packages/plugin-openclaw/dist/index.d.ts +0 -49
  645. package/packages/plugin-openclaw/dist/index.js +0 -262
  646. package/packages/plugin-openclaw/openclaw.plugin.json +0 -94
  647. package/packages/plugin-openclaw/package.json +0 -31
  648. package/packages/plugin-opencode/install.mjs +0 -217
  649. package/packages/plugin-opencode/package.json +0 -21
  650. package/plugin.json +0 -32
  651. package/scripts/build-release.sh +0 -36
  652. package/scripts/check-secrets.js +0 -132
  653. package/scripts/db/check-db.mjs +0 -88
  654. package/scripts/db/fix-all-columns.mjs +0 -52
  655. package/scripts/db/fix-schema-all.mjs +0 -55
  656. package/scripts/db/fix-schema-full.mjs +0 -46
  657. package/scripts/db/fix-schema.mjs +0 -38
  658. package/scripts/db/init-db.mjs +0 -13
  659. package/scripts/db/recreate-db.mjs +0 -14
  660. package/scripts/generate-mcp.mjs +0 -264
  661. package/scripts/github-release.sh +0 -77
  662. package/scripts/init-dirs.mjs +0 -13
  663. package/scripts/install-interactive.mjs +0 -677
  664. package/scripts/install-mcp.mjs +0 -116
  665. package/scripts/install-plugin.mjs +0 -415
  666. package/scripts/install-web.sh +0 -120
  667. package/scripts/install.mjs +0 -340
  668. package/scripts/openclaw-bootstrap.mjs +0 -127
  669. package/scripts/package-release.sh +0 -71
  670. package/scripts/remote-preflight.mjs +0 -62
  671. package/scripts/squish-fallback.mjs +0 -132
  672. package/scripts/test/test-all-systems.mjs +0 -139
  673. package/scripts/test/test-memory-system.mjs +0 -139
  674. package/scripts/test/test-v0.5.0.mjs +0 -210
  675. package/scripts/test-interactive.mjs +0 -131
  676. package/scripts/verify-mcp.mjs +0 -214
  677. package/skills/memory-guide/SKILL.md +0 -332
  678. package/skills/squish-cli/SKILL.md +0 -240
  679. package/skills/squish-mcp/SKILL.md +0 -355
  680. package/skills/squish-memory/install.mjs +0 -335
  681. package/skills/squish-memory/skill.json +0 -32
  682. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.d.ts +0 -0
  683. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.js +0 -0
  684. /package/dist/{algorithms → core/algorithms}/handlers/approve-merge.d.ts +0 -0
  685. /package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.d.ts +0 -0
  686. /package/dist/{algorithms → core/algorithms}/handlers/get-stats.d.ts +0 -0
  687. /package/dist/{algorithms → core/algorithms}/handlers/list-proposals.d.ts +0 -0
  688. /package/dist/{algorithms → core/algorithms}/handlers/preview-merge.d.ts +0 -0
  689. /package/dist/{algorithms → core/algorithms}/handlers/reject-merge.d.ts +0 -0
  690. /package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.d.ts +0 -0
  691. /package/dist/{algorithms → core/algorithms}/safety/safety-checks.js +0 -0
  692. /package/dist/{algorithms → core/algorithms}/utils/response-builder.d.ts +0 -0
  693. /package/dist/{algorithms → core/algorithms}/utils/response-builder.js +0 -0
  694. /package/dist/core/{context.d.ts → context/context.d.ts} +0 -0
  695. /package/dist/core/{agent-memory.d.ts → ingestion/agent-memory.d.ts} +0 -0
  696. /package/dist/core/{privacy.d.ts → security/privacy.d.ts} +0 -0
  697. /package/dist/core/{privacy.js → security/privacy.js} +0 -0
  698. /package/dist/core/{secret-detector.d.ts → security/secret-detector.d.ts} +0 -0
  699. /package/dist/core/{secret-detector.js → security/secret-detector.js} +0 -0
  700. /package/dist/core/{session-hooks → session}/session-hooks.d.ts +0 -0
  701. /package/dist/core/{session-hooks → session}/session-hooks.js +0 -0
  702. /package/dist/core/{cache.d.ts → storage/cache.d.ts} +0 -0
  703. /package/dist/core/{database.d.ts → storage/database.d.ts} +0 -0
  704. /package/dist/core/{database.js → storage/database.js} +0 -0
@@ -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
  */
@@ -3,13 +3,13 @@
3
3
  * NO FALLBACKS - real extraction or throw
4
4
  */
5
5
  export async function extractQueryEntities(query, callClaudeFn) {
6
- const prompt = `Extract entities from this question. Return ONLY JSON:
7
- {
8
- "primary": ["Alice", "project name"],
9
- "secondary": ["team", "budget"],
10
- "queryType": "factual"
11
- }
12
-
6
+ const prompt = `Extract entities from this question. Return ONLY JSON:
7
+ {
8
+ "primary": ["Alice", "project name"],
9
+ "secondary": ["team", "budget"],
10
+ "queryType": "factual"
11
+ }
12
+
13
13
  Question: ${query}`;
14
14
  const response = await callClaudeFn(prompt, 500);
15
15
  const jsonMatch = response.match(/\{[\s\S]*\}/);
@@ -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
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Fact Deriver
3
+ *
4
+ * Derives implicit facts from existing relationships in the knowledge graph.
5
+ * Example: works_on(A, X) + uses(X, Y) -> depends_on(A, Y)
6
+ */
7
+ import type { RelationType } from '../graph/llm-entity-extractor.js';
8
+ export interface DerivedFact {
9
+ fromEntityId: string;
10
+ fromEntityName: string;
11
+ toEntityId: string;
12
+ toEntityName: string;
13
+ relationType: RelationType;
14
+ rule: string;
15
+ confidence: number;
16
+ isDerived: boolean;
17
+ }
18
+ /**
19
+ * Derive implicit facts from existing relationships in the knowledge graph.
20
+ * Applies transitivity and causal rules to find new relationships.
21
+ */
22
+ export declare function deriveFacts(projectId: string, options?: {
23
+ maxDerivations?: number;
24
+ minConfidence?: number;
25
+ storeResults?: boolean;
26
+ }): Promise<DerivedFact[]>;
27
+ /**
28
+ * Get all derived facts for a project.
29
+ */
30
+ export declare function getDerivedFacts(projectId: string): Promise<DerivedFact[]>;
31
+ //# sourceMappingURL=fact-deriver.d.ts.map
@@ -0,0 +1,236 @@
1
+ /**
2
+ * Fact Deriver
3
+ *
4
+ * Derives implicit facts from existing relationships in the knowledge graph.
5
+ * Example: works_on(A, X) + uses(X, Y) -> depends_on(A, Y)
6
+ */
7
+ import { eq, and, or } from 'drizzle-orm';
8
+ import { getDb } from '../../db/index.js';
9
+ import { getSchema } from '../../db/schema.js';
10
+ import { logger } from '../logger.js';
11
+ const DERIVATION_RULES = [
12
+ // Transitivity rules
13
+ {
14
+ name: 'works_on_uses_depends_on',
15
+ fromType: 'works_on',
16
+ toType: 'uses',
17
+ derivedType: 'depends_on',
18
+ description: 'If A works on X and X uses Y, then A depends on Y',
19
+ confidence: 0.8,
20
+ },
21
+ {
22
+ name: 'manages_works_oversees',
23
+ fromType: 'manages',
24
+ toType: 'works_on',
25
+ derivedType: 'oversees',
26
+ description: 'If A manages B and B works on X, then A oversees X',
27
+ confidence: 0.75,
28
+ },
29
+ {
30
+ name: 'caused_affects_may_affect',
31
+ fromType: 'caused',
32
+ toType: 'affects',
33
+ derivedType: 'may_affect',
34
+ description: 'If X caused Y and Y affects Z, then X may affect Z',
35
+ confidence: 0.7,
36
+ },
37
+ {
38
+ name: 'part_of_contains',
39
+ fromType: 'part_of',
40
+ toType: 'contains',
41
+ derivedType: 'related_to',
42
+ description: 'If A is part of X and X contains B, then A is related to B',
43
+ confidence: 0.6,
44
+ },
45
+ {
46
+ name: 'uses_depends_on',
47
+ fromType: 'uses',
48
+ toType: 'depends_on',
49
+ derivedType: 'depends_on',
50
+ description: 'If A uses X and X depends on Y, then A depends on Y',
51
+ confidence: 0.85,
52
+ },
53
+ {
54
+ name: 'created_resolved',
55
+ fromType: 'created',
56
+ toType: 'resolved',
57
+ derivedType: 'related_to',
58
+ description: 'If A created X and X was resolved by B, then A is related to B',
59
+ confidence: 0.5,
60
+ },
61
+ {
62
+ name: 'blocks_depends_on',
63
+ fromType: 'blocks',
64
+ toType: 'depends_on',
65
+ derivedType: 'blocks',
66
+ description: 'If X blocks A and A depends on Y, then X may block Y',
67
+ confidence: 0.65,
68
+ },
69
+ ];
70
+ // ─── Main Derivation Function ─────────────────────────────────────────────────
71
+ /**
72
+ * Derive implicit facts from existing relationships in the knowledge graph.
73
+ * Applies transitivity and causal rules to find new relationships.
74
+ */
75
+ export async function deriveFacts(projectId, options) {
76
+ const { maxDerivations = 50, minConfidence = 0.6, storeResults = true } = options || {};
77
+ const db = await getDb();
78
+ const schema = await getSchema();
79
+ // Get all entities for this project
80
+ const entities = await db
81
+ .select()
82
+ .from(schema.entities)
83
+ .where(eq(schema.entities.projectId, projectId));
84
+ if (entities.length < 2)
85
+ return [];
86
+ const entityMap = new Map(entities.map((e) => [e.id, e]));
87
+ const derivedFacts = [];
88
+ // Get all relations for this project's entities
89
+ const entityIds = entities.map((e) => e.id);
90
+ const allRelations = [];
91
+ // Fetch in batches to avoid query size limits
92
+ const batchSize = 100;
93
+ for (let i = 0; i < entityIds.length; i += batchSize) {
94
+ const batch = entityIds.slice(i, i + batchSize);
95
+ const relations = await db
96
+ .select()
97
+ .from(schema.entityRelations)
98
+ .where(or(...batch.map((id) => eq(schema.entityRelations.fromEntityId, id))));
99
+ allRelations.push(...relations);
100
+ }
101
+ // Build adjacency list for fast lookup
102
+ const outgoing = new Map();
103
+ for (const rel of allRelations) {
104
+ if (!outgoing.has(rel.fromEntityId)) {
105
+ outgoing.set(rel.fromEntityId, new Map());
106
+ }
107
+ outgoing.get(rel.fromEntityId).set(rel.toEntityId, {
108
+ relationType: rel.type,
109
+ weight: rel.weight || 1,
110
+ });
111
+ }
112
+ // Apply derivation rules
113
+ for (const rule of DERIVATION_RULES) {
114
+ if (derivedFacts.length >= maxDerivations)
115
+ break;
116
+ if (rule.confidence < minConfidence)
117
+ continue;
118
+ // Find all pairs where fromType matches
119
+ for (const [fromId, targets] of outgoing) {
120
+ if (derivedFacts.length >= maxDerivations)
121
+ break;
122
+ for (const [midId, fromRel] of targets) {
123
+ if (fromRel.relationType !== rule.fromType)
124
+ continue;
125
+ // Check if midId has outgoing toType relations
126
+ const midTargets = outgoing.get(midId);
127
+ if (!midTargets)
128
+ continue;
129
+ for (const [toId, toRel] of midTargets) {
130
+ if (toRel.relationType !== rule.toType)
131
+ continue;
132
+ // Found a derivation: fromId --fromType--> midId --toType--> toId
133
+ // Derive: fromId --derivedType--> toId
134
+ const fromEntity = entityMap.get(fromId);
135
+ const toEntity = entityMap.get(toId);
136
+ if (!fromEntity || !toEntity)
137
+ continue;
138
+ // Check if this derived relation already exists
139
+ const existing = await db
140
+ .select()
141
+ .from(schema.entityRelations)
142
+ .where(and(eq(schema.entityRelations.fromEntityId, fromId), eq(schema.entityRelations.toEntityId, toId), eq(schema.entityRelations.type, rule.derivedType)))
143
+ .limit(1);
144
+ if (existing.length > 0)
145
+ continue; // Already exists
146
+ const derivedFact = {
147
+ fromEntityId: fromId,
148
+ fromEntityName: fromEntity.name,
149
+ toEntityId: toId,
150
+ toEntityName: toEntity.name,
151
+ relationType: rule.derivedType,
152
+ rule: rule.name,
153
+ confidence: rule.confidence,
154
+ isDerived: true,
155
+ };
156
+ derivedFacts.push(derivedFact);
157
+ // Store the derived fact if requested
158
+ if (storeResults) {
159
+ try {
160
+ await db.insert(schema.entityRelations).values({
161
+ fromEntityId: fromId,
162
+ toEntityId: toId,
163
+ type: rule.derivedType,
164
+ weight: Math.round(rule.confidence * 10),
165
+ properties: {
166
+ derived: true,
167
+ rule: rule.name,
168
+ confidence: rule.confidence,
169
+ description: rule.description,
170
+ },
171
+ });
172
+ }
173
+ catch (error) {
174
+ logger.debug('Error storing derived fact', {
175
+ rule: rule.name,
176
+ from: fromEntity.name,
177
+ to: toEntity.name,
178
+ error: error,
179
+ });
180
+ }
181
+ }
182
+ }
183
+ }
184
+ }
185
+ }
186
+ logger.info('Fact derivation completed', {
187
+ projectId,
188
+ derivedCount: derivedFacts.length,
189
+ rulesApplied: DERIVATION_RULES.length,
190
+ });
191
+ return derivedFacts;
192
+ }
193
+ /**
194
+ * Get all derived facts for a project.
195
+ */
196
+ export async function getDerivedFacts(projectId) {
197
+ const db = await getDb();
198
+ const schema = await getSchema();
199
+ // Get all entities for this project
200
+ const entities = await db
201
+ .select()
202
+ .from(schema.entities)
203
+ .where(eq(schema.entities.projectId, projectId));
204
+ const entityIds = entities.map((e) => e.id);
205
+ if (entityIds.length === 0)
206
+ return [];
207
+ // Get all derived relations
208
+ const derivedRelations = [];
209
+ const batchSize = 100;
210
+ for (let i = 0; i < entityIds.length; i += batchSize) {
211
+ const batch = entityIds.slice(i, i + batchSize);
212
+ const relations = await db
213
+ .select()
214
+ .from(schema.entityRelations)
215
+ .where(or(...batch.map((id) => eq(schema.entityRelations.fromEntityId, id))));
216
+ for (const rel of relations) {
217
+ const props = rel.properties;
218
+ if (props && props.derived === true) {
219
+ const fromEntity = entities.find((e) => e.id === rel.fromEntityId);
220
+ const toEntity = entities.find((e) => e.id === rel.toEntityId);
221
+ derivedRelations.push({
222
+ fromEntityId: rel.fromEntityId,
223
+ fromEntityName: fromEntity?.name || 'Unknown',
224
+ toEntityId: rel.toEntityId,
225
+ toEntityName: toEntity?.name || 'Unknown',
226
+ relationType: rel.type,
227
+ rule: props.rule || 'unknown',
228
+ confidence: props.confidence || 0.5,
229
+ isDerived: true,
230
+ });
231
+ }
232
+ }
233
+ }
234
+ return derivedRelations;
235
+ }
236
+ //# sourceMappingURL=fact-deriver.js.map
@@ -13,18 +13,18 @@ export async function extractFacts(text, callClaude) {
13
13
  entities: []
14
14
  };
15
15
  }
16
- const prompt = `Extract atomic facts from this conversation.
17
-
18
- Requirements:
19
- - Extract specific, verifiable facts (names, dates, numbers, relationships)
20
- - Each fact should be a standalone statement
21
- - Identify entities (people, organizations, projects, locations)
22
- - Note temporal information and relationships
23
-
24
- Return ONLY valid JSON in this exact format:
25
- {"facts":[{"content":"fact statement","confidence":0.95,"entities":["Name"],"relation":"optional"}],"summary":"brief summary","entities":["all","entities"]}
26
-
27
- Text to analyze:
16
+ const prompt = `Extract atomic facts from this conversation.
17
+
18
+ Requirements:
19
+ - Extract specific, verifiable facts (names, dates, numbers, relationships)
20
+ - Each fact should be a standalone statement
21
+ - Identify entities (people, organizations, projects, locations)
22
+ - Note temporal information and relationships
23
+
24
+ Return ONLY valid JSON in this exact format:
25
+ {"facts":[{"content":"fact statement","confidence":0.95,"entities":["Name"],"relation":"optional"}],"summary":"brief summary","entities":["all","entities"]}
26
+
27
+ Text to analyze:
28
28
  ${text.substring(0, 4000)}`;
29
29
  const response = await callClaude(prompt, 2000);
30
30
  // Extract JSON - look for the first { and last }
@@ -2,7 +2,7 @@
2
2
  import { logger } from '../logger.js';
3
3
  import { config } from '../../config.js';
4
4
  import { getDb } from '../../db/index.js';
5
- import { memoryFeedback, memories } from '../../drizzle/schema-sqlite.js';
5
+ import { memoryFeedback, memories } from '../../db/drizzle/schema-sqlite.js';
6
6
  import { eq, and } from 'drizzle-orm';
7
7
  import { analyzeResponseForMemoryReferences, mightContainMemoryReferences } from './response-analyzer.js';
8
8
  const injectionTracker = new Map();
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Memory Lifecycle Hooks
3
+ *
4
+ * Provides event hooks for memory operations:
5
+ * - memoryCreated: When a memory is stored (DB or markdown files)
6
+ * - memoryUpdated: When a memory is updated
7
+ * - memoryDeleted: When a memory is deleted
8
+ * - tierChange: When memory tier changes (hot/warm/cold)
9
+ * - decayApplied: When decay score is updated
10
+ *
11
+ * Each hook can have sync and async handlers.
12
+ * Usage: Register handlers to auto-capture, sync to external systems, etc.
13
+ */
14
+ export type HookEvent = 'memoryCreated' | 'memoryUpdated' | 'memoryDeleted' | 'tierChange' | 'decayApplied';
15
+ export interface MemoryHookContext {
16
+ memoryId: string;
17
+ content: string;
18
+ type: string;
19
+ tags: string[];
20
+ project?: string;
21
+ source?: string;
22
+ tier?: string;
23
+ importance?: number;
24
+ oldContent?: string;
25
+ }
26
+ export interface TierChangeContext extends MemoryHookContext {
27
+ oldTier: string;
28
+ newTier: string;
29
+ }
30
+ export interface DecayContext extends MemoryHookContext {
31
+ oldScore: number;
32
+ newScore: number;
33
+ }
34
+ export type HookHandler<T = MemoryHookContext> = (context: T) => void | Promise<void>;
35
+ /**
36
+ * Register a hook handler for a specific event
37
+ */
38
+ export declare function registerHook(event: HookEvent, handler: HookHandler, priority?: number): void;
39
+ /**
40
+ * Unregister a hook handler
41
+ */
42
+ export declare function unregisterHook(event: HookEvent, handler: HookHandler): void;
43
+ /**
44
+ * Clear all hooks for an event
45
+ */
46
+ export declare function clearHooks(event?: HookEvent): void;
47
+ /**
48
+ * Get registered hooks for an event
49
+ */
50
+ export declare function getHooks(event: HookEvent): HookHandler[];
51
+ /**
52
+ * List all registered hooks (for debugging)
53
+ */
54
+ export declare function listHooks(): {
55
+ event: HookEvent;
56
+ priority: number;
57
+ }[];
58
+ /**
59
+ * Trigger memoryCreated hooks
60
+ * Called when a memory is stored in DB or markdown files
61
+ */
62
+ export declare function triggerMemoryCreated(context: MemoryHookContext): Promise<void>;
63
+ /**
64
+ * Trigger memoryUpdated hooks
65
+ * Called when a memory content/tags/etc changes
66
+ */
67
+ export declare function triggerMemoryUpdated(context: MemoryHookContext, oldContent?: string): Promise<void>;
68
+ /**
69
+ * Trigger memoryDeleted hooks
70
+ * Called when a memory is deleted
71
+ */
72
+ export declare function triggerMemoryDeleted(context: MemoryHookContext): Promise<void>;
73
+ /**
74
+ * Trigger tierChange hooks
75
+ * Called when memory tier changes
76
+ */
77
+ export declare function triggerTierChange(context: TierChangeContext): Promise<void>;
78
+ /**
79
+ * Trigger decayApplied hooks
80
+ * Called when memory decay score changes
81
+ */
82
+ export declare function triggerDecayApplied(context: DecayContext): Promise<void>;
83
+ /**
84
+ * Built-in hook: Auto-save to memory files when storing to DB
85
+ * Use this to have dual storage (DB + markdown files)
86
+ */
87
+ export declare function createMarkdownAutoSyncHook(): (context: MemoryHookContext) => Promise<void>;
88
+ //# sourceMappingURL=hooks.d.ts.map