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
@@ -47,9 +47,44 @@ export async function createAssociation(fromMemoryId, toMemoryId, type, weight =
47
47
  }
48
48
  }
49
49
  /**
50
- * Track co-activation of multiple memories (they were used together)
51
- * OPTIMIZED: Uses bulk upsert instead of individual database operations
50
+ * Auto-link memories that share entities
51
+ * Called after storing a memory to link it to related memories
52
52
  */
53
+ export async function autoLinkByEntities(newMemoryId, entityNames, projectId) {
54
+ if (entityNames.length === 0)
55
+ return 0;
56
+ try {
57
+ const db = await getDb();
58
+ const schema = await getSchema();
59
+ // Find existing memories that contain any of these entity names
60
+ // Use simple LIKE query for matching
61
+ const conditions = entityNames.slice(0, 5).map(name => sql `LOWER(m.content) LIKE ${'%' + name + '%'}`);
62
+ const existing = await db
63
+ .select({
64
+ id: schema.memories.id,
65
+ content: schema.memories.content
66
+ })
67
+ .from(schema.memories)
68
+ .where(and(eq(schema.memories.projectId, projectId), sql `(${conditions.join(' OR ')})`, sql `id != ${newMemoryId}`))
69
+ .limit(10);
70
+ // Create associations for matching memories
71
+ let linked = 0;
72
+ for (const mem of existing) {
73
+ try {
74
+ await createAssociation(newMemoryId, mem.id, 'relates_to', 0.5);
75
+ linked++;
76
+ }
77
+ catch (e) {
78
+ // Skip duplicates
79
+ }
80
+ }
81
+ return linked;
82
+ }
83
+ catch (error) {
84
+ logger.error('Error auto-linking by entities', error);
85
+ return 0;
86
+ }
87
+ }
53
88
  export async function trackCoactivation(memoryIds) {
54
89
  if (memoryIds.length < 2)
55
90
  return;
@@ -0,0 +1,19 @@
1
+ export declare function getDefaultAutosaveHook(): {
2
+ getMessageCount: () => number;
3
+ updateConfig: (opts?: {
4
+ enabled?: boolean;
5
+ messageCount?: number;
6
+ hooks?: string[];
7
+ }) => void;
8
+ getConfig: () => {
9
+ enabled: boolean;
10
+ messageCount: number;
11
+ hooks: string[];
12
+ };
13
+ };
14
+ export declare function createAutosaveConfig(): {
15
+ enabled: boolean;
16
+ messageCount: number;
17
+ hooks: string[];
18
+ };
19
+ //# sourceMappingURL=autosave.d.ts.map
@@ -0,0 +1,16 @@
1
+ // Autosave functionality placeholder
2
+ export function getDefaultAutosaveHook() {
3
+ let config = { enabled: false, messageCount: 10, hooks: [] };
4
+ return {
5
+ getMessageCount: () => 0,
6
+ updateConfig: (opts) => {
7
+ if (opts)
8
+ Object.assign(config, opts);
9
+ },
10
+ getConfig: () => ({ ...config })
11
+ };
12
+ }
13
+ export function createAutosaveConfig() {
14
+ return { enabled: false, messageCount: 10, hooks: [] };
15
+ }
16
+ //# sourceMappingURL=autosave.js.map
@@ -0,0 +1,27 @@
1
+ interface DecayStats {
2
+ decayed: number;
3
+ sourceCountUpdated: number;
4
+ errors: string[];
5
+ }
6
+ export declare function applyBeliefDecay(projectId?: string): Promise<DecayStats>;
7
+ /**
8
+ * Get beliefs that need attention (low confidence, disputed, or stale)
9
+ */
10
+ export declare function getProblemBeliefs(projectId: string, options?: {
11
+ minDaysSinceConfirmation?: number;
12
+ confidenceThreshold?: number;
13
+ }): Promise<Array<{
14
+ id: string;
15
+ type: string;
16
+ statement: string;
17
+ confidence: number;
18
+ status: string;
19
+ lastConfirmedAt: Date | null;
20
+ issue: string;
21
+ }>>;
22
+ /**
23
+ * Reinforce a belief (increase confidence when re-referenced)
24
+ */
25
+ export declare function reinforceBelief(beliefId: string, boostAmount?: number): Promise<boolean>;
26
+ export {};
27
+ //# sourceMappingURL=decay.d.ts.map
@@ -0,0 +1,217 @@
1
+ import { getDbClient } from '../lib/db-client.js';
2
+ import { logger } from './logger.js';
3
+ /**
4
+ * Belief Decay Engine
5
+ *
6
+ * Manages confidence decay for beliefs over time
7
+ * Formula: newConfidence = oldConfidence * (1 - decayRate/100)^(daysSinceLastConfirmation / halfLife)
8
+ * - Default 30 days half-life (belief confidence halves every 30 days without reinforcement)
9
+ * - Disputed beliefs decay faster
10
+ * - Beliefs with more sources decay slower
11
+ */
12
+ const DEFAULT_BELIEF_HALF_LIFE = 30; // days
13
+ const DISPUTE_DECAY_MULTIPLIER = 1.5; // disputes decay 1.5x faster
14
+ const SOURCE_BOOST_THRESHOLD = 3; // 3+ sources = slower decay
15
+ export async function applyBeliefDecay(projectId) {
16
+ const stats = { decayed: 0, sourceCountUpdated: 0, errors: [] };
17
+ try {
18
+ const { raw } = await getDbClient();
19
+ const sqlite = raw.$client;
20
+ const isPg = typeof raw.query === 'function';
21
+ if (!sqlite && !isPg) {
22
+ logger.warn('No database client available for belief decay');
23
+ return stats;
24
+ }
25
+ const now = Date.now();
26
+ if (isPg) {
27
+ // PostgreSQL version
28
+ const pg = raw;
29
+ // Get all active beliefs
30
+ const beliefResult = await pg.query(`SELECT id, confidence, belief_decay_rate, last_confirmed_at, status, source_count
31
+ FROM beliefs WHERE project_id = $1 AND status = 'active'`, [projectId]);
32
+ for (const belief of beliefResult.rows) {
33
+ try {
34
+ const lastConfirmed = belief.last_confirmed_at ? new Date(belief.last_confirmed_at).getTime() : new Date(belief.created_at).getTime();
35
+ const daysSince = Math.max(0, (now - lastConfirmed) / (24 * 60 * 60 * 1000));
36
+ // Get source count for this belief
37
+ const sourceResult = await pg.query(`SELECT COUNT(*) as cnt FROM belief_memory_sources WHERE belief_id = $1`, [belief.id]);
38
+ const sourceCount = parseInt(sourceResult.rows[0]?.cnt ?? 1);
39
+ // Calculate decay rate (disputes decay faster)
40
+ const baseDecayRate = belief.belief_decay_rate ?? DEFAULT_BELIEF_HALF_LIFE;
41
+ const decayMultiplier = belief.status === 'disputed' ? DISPUTE_DECAY_MULTIPLIER : 1;
42
+ const sourceMultiplier = sourceCount >= SOURCE_BOOST_THRESHOLD ? 0.8 : 1;
43
+ const effectiveHalfLife = baseDecayRate * decayMultiplier * sourceMultiplier;
44
+ // Apply exponential decay: confidence = initial * (0.5)^(days/halfLife)
45
+ const newConfidence = Math.round(belief.confidence * Math.pow(0.5, daysSince / effectiveHalfLife));
46
+ if (newConfidence < belief.confidence) {
47
+ await pg.query(`UPDATE beliefs SET confidence = $1, updated_at = NOW() WHERE id = $2`, [newConfidence, belief.id]);
48
+ stats.decayed++;
49
+ }
50
+ if (sourceCount !== belief.source_count) {
51
+ await pg.query(`UPDATE beliefs SET source_count = $1 WHERE id = $2`, [sourceCount, belief.id]);
52
+ stats.sourceCountUpdated++;
53
+ }
54
+ }
55
+ catch (err) {
56
+ const msg = err instanceof Error ? err.message : String(err);
57
+ stats.errors.push(`Belief ${belief.id}: ${msg}`);
58
+ }
59
+ }
60
+ }
61
+ else if (sqlite) {
62
+ // SQLite version
63
+ const beliefs = sqlite.prepare(`
64
+ SELECT id, confidence, belief_decay_rate, last_confirmed_at, status, source_count, created_at
65
+ FROM beliefs WHERE project_id = ? AND status = 'active'
66
+ `).all(projectId);
67
+ for (const belief of beliefs) {
68
+ try {
69
+ const lastConfirmed = belief.last_confirmed_at
70
+ ? belief.last_confirmed_at
71
+ : belief.created_at;
72
+ const daysSince = Math.max(0, (now - lastConfirmed) / (24 * 60 * 60 * 1000));
73
+ // Get source count
74
+ const sourceResult = sqlite.prepare(`SELECT COUNT(*) as cnt FROM belief_memory_sources WHERE belief_id = ?`).get(belief.id);
75
+ const sourceCount = sourceResult?.cnt ?? 1;
76
+ // Calculate decay rate
77
+ const baseDecayRate = belief.belief_decay_rate ?? DEFAULT_BELIEF_HALF_LIFE;
78
+ const decayMultiplier = belief.status === 'disputed' ? DISPUTE_DECAY_MULTIPLIER : 1;
79
+ const sourceMultiplier = sourceCount >= SOURCE_BOOST_THRESHOLD ? 0.8 : 1;
80
+ const effectiveHalfLife = baseDecayRate * decayMultiplier * sourceMultiplier;
81
+ const newConfidence = Math.round(belief.confidence * Math.pow(0.5, daysSince / effectiveHalfLife));
82
+ if (newConfidence < belief.confidence) {
83
+ sqlite.prepare(`
84
+ UPDATE beliefs SET confidence = ?, updated_at = ?
85
+ WHERE id = ?
86
+ `).run(newConfidence, Math.floor(now / 1000), belief.id);
87
+ stats.decayed++;
88
+ }
89
+ if (sourceCount !== belief.source_count) {
90
+ sqlite.prepare(`
91
+ UPDATE beliefs SET source_count = ? WHERE id = ?
92
+ `).run(sourceCount, belief.id);
93
+ stats.sourceCountUpdated++;
94
+ }
95
+ }
96
+ catch (err) {
97
+ const msg = err instanceof Error ? err.message : String(err);
98
+ stats.errors.push(`Belief ${belief.id}: ${msg}`);
99
+ }
100
+ }
101
+ }
102
+ logger.info('Belief decay applied', stats);
103
+ }
104
+ catch (error) {
105
+ const msg = error instanceof Error ? error.message : String(error);
106
+ logger.error('Belief decay failed', { error: msg });
107
+ stats.errors.push(msg);
108
+ }
109
+ return stats;
110
+ }
111
+ /**
112
+ * Get beliefs that need attention (low confidence, disputed, or stale)
113
+ */
114
+ export async function getProblemBeliefs(projectId, options) {
115
+ const problems = [];
116
+ try {
117
+ const { raw } = await getDbClient();
118
+ const sqlite = raw.$client;
119
+ const isPg = typeof raw.query === 'function';
120
+ const minDays = options?.minDaysSinceConfirmation ?? 30;
121
+ const confThreshold = options?.confidenceThreshold ?? 20;
122
+ const now = Date.now();
123
+ if (isPg) {
124
+ const pg = raw;
125
+ const result = await pg.query(`SELECT id, belief_type, statement, confidence, status, last_confirmed_at, created_at
126
+ FROM beliefs WHERE project_id = $1`, [projectId]);
127
+ for (const belief of result.rows) {
128
+ const lastConfirmed = belief.last_confirmed_at ? new Date(belief.last_confirmed_at) : new Date(belief.created_at);
129
+ const daysSince = (now - lastConfirmed.getTime()) / (24 * 60 * 60 * 1000);
130
+ let issue = '';
131
+ if (belief.status === 'disputed')
132
+ issue = 'disputed';
133
+ else if (belief.confidence < confThreshold)
134
+ issue = `low confidence (${belief.confidence})`;
135
+ else if (daysSince > minDays)
136
+ issue = `stale (${Math.round(daysSince)} days)`;
137
+ if (issue) {
138
+ problems.push({
139
+ id: belief.id,
140
+ type: belief.belief_type,
141
+ statement: belief.statement,
142
+ confidence: belief.confidence,
143
+ status: belief.status,
144
+ lastConfirmedAt: belief.last_confirmed_at,
145
+ issue,
146
+ });
147
+ }
148
+ }
149
+ }
150
+ else if (sqlite) {
151
+ const beliefs = sqlite.prepare(`
152
+ SELECT id, belief_type, statement, confidence, status, last_confirmed_at, created_at
153
+ FROM beliefs WHERE project_id = ?
154
+ `).all(projectId);
155
+ for (const belief of beliefs) {
156
+ const lastConfirmed = belief.last_confirmed_at
157
+ ? new Date(belief.last_confirmed_at * 1000)
158
+ : new Date(belief.created_at * 1000);
159
+ const daysSince = (now - lastConfirmed.getTime()) / (24 * 60 * 60 * 1000);
160
+ let issue = '';
161
+ if (belief.status === 'disputed')
162
+ issue = 'disputed';
163
+ else if (belief.confidence < confThreshold)
164
+ issue = `low confidence (${belief.confidence})`;
165
+ else if (daysSince > minDays)
166
+ issue = `stale (${Math.round(daysSince)} days)`;
167
+ if (issue) {
168
+ problems.push({
169
+ id: belief.id,
170
+ type: belief.belief_type,
171
+ statement: belief.statement,
172
+ confidence: belief.confidence,
173
+ status: belief.status,
174
+ lastConfirmedAt: belief.last_confirmed_at ? new Date(belief.last_confirmed_at * 1000) : null,
175
+ issue,
176
+ });
177
+ }
178
+ }
179
+ }
180
+ }
181
+ catch (error) {
182
+ logger.error('Failed to get problem beliefs', error);
183
+ }
184
+ return problems;
185
+ }
186
+ /**
187
+ * Reinforce a belief (increase confidence when re-referenced)
188
+ */
189
+ export async function reinforceBelief(beliefId, boostAmount = 5) {
190
+ try {
191
+ const { raw } = await getDbClient();
192
+ const isPg = typeof raw.query === 'function';
193
+ if (isPg) {
194
+ await raw.query(`UPDATE beliefs SET
195
+ confidence = LEAST(100, confidence + $1),
196
+ last_confirmed_at = NOW(),
197
+ updated_at = NOW()
198
+ WHERE id = $2`, [boostAmount, beliefId]);
199
+ }
200
+ else {
201
+ const sqlite = raw.$client;
202
+ sqlite.prepare(`
203
+ UPDATE beliefs SET
204
+ confidence = MIN(100, confidence + ?),
205
+ last_confirmed_at = ?,
206
+ updated_at = ?
207
+ WHERE id = ?
208
+ `).run(boostAmount, Math.floor(Date.now() / 1000), Math.floor(Date.now() / 1000), beliefId);
209
+ }
210
+ return true;
211
+ }
212
+ catch (error) {
213
+ logger.error('Failed to reinforce belief', { beliefId, error });
214
+ return false;
215
+ }
216
+ }
217
+ //# sourceMappingURL=decay.js.map
@@ -0,0 +1,9 @@
1
+ import type { MemoryType } from '../memory/memories.js';
2
+ import type { ExtractedBelief } from './types.js';
3
+ export declare function extractBeliefsFromMemory(input: {
4
+ memoryId: string;
5
+ content: string;
6
+ type: MemoryType | string;
7
+ metadata?: Record<string, unknown> | null;
8
+ }): ExtractedBelief[];
9
+ //# sourceMappingURL=extractor.d.ts.map
@@ -0,0 +1,113 @@
1
+ function cleanStatement(input) {
2
+ return input
3
+ .replace(/^(decision:|constraint:|state change:|reject(?:ed)?:|failure:|preference:)\s*/i, '')
4
+ .replace(/\s+/g, ' ')
5
+ .trim();
6
+ }
7
+ function splitReason(text) {
8
+ const match = text.match(/^(.*?)(?:\s+because\s+|\s+due to\s+)(.+)$/i);
9
+ if (!match)
10
+ return { statement: cleanStatement(text) };
11
+ return {
12
+ statement: cleanStatement(match[1]),
13
+ reason: cleanStatement(match[2]),
14
+ };
15
+ }
16
+ function deriveConfidence(type, hasReason) {
17
+ const base = type === 'decision' ? 0.84 :
18
+ type === 'preference' ? 0.8 :
19
+ type === 'failure_cause' ? 0.82 :
20
+ type === 'constraint' ? 0.78 :
21
+ type === 'state_change' ? 0.76 :
22
+ 0.74;
23
+ return hasReason ? Math.min(0.95, base + 0.05) : base;
24
+ }
25
+ export function extractBeliefsFromMemory(input) {
26
+ const text = input.content.trim();
27
+ const lowered = text.toLowerCase();
28
+ const beliefs = [];
29
+ const addBelief = (belief) => {
30
+ const cleanedStatement = cleanStatement(belief.statement);
31
+ if (!cleanedStatement || cleanedStatement.length < 8)
32
+ return;
33
+ beliefs.push({
34
+ ...belief,
35
+ statement: cleanedStatement,
36
+ confidence: belief.confidence ?? deriveConfidence(belief.type, Boolean(belief.reason)),
37
+ sourceMemoryIds: [input.memoryId],
38
+ });
39
+ };
40
+ if (input.type === 'decision' || /\b(decision:|decided to|we chose|going with|final decision)\b/i.test(text)) {
41
+ const { statement, reason } = splitReason(text);
42
+ addBelief({
43
+ type: 'decision',
44
+ statement,
45
+ reason,
46
+ status: 'active',
47
+ evidenceSummary: text,
48
+ });
49
+ }
50
+ if (input.type === 'preference' || /\b(prefers?|likes?|dislikes?|hates?)\b/i.test(text)) {
51
+ const { statement, reason } = splitReason(text);
52
+ addBelief({
53
+ type: 'preference',
54
+ statement,
55
+ reason,
56
+ status: 'active',
57
+ evidenceSummary: text,
58
+ });
59
+ }
60
+ const failureMatch = text.match(/\b(?:failed|failure|broke|error)\b.*?(?:because|due to)\s+(.+)/i);
61
+ if (failureMatch) {
62
+ addBelief({
63
+ type: 'failure_cause',
64
+ statement: cleanStatement(text.split(/(?:because|due to)/i)[0] ?? text),
65
+ reason: cleanStatement(failureMatch[1]),
66
+ status: 'active',
67
+ evidenceSummary: text,
68
+ edges: [{ type: 'causes', targetStatement: cleanStatement(failureMatch[1]) }],
69
+ });
70
+ }
71
+ if (/\b(constraint:|must not|cannot|can't|blocked by|required to|needs to)\b/i.test(text)) {
72
+ addBelief({
73
+ type: 'constraint',
74
+ statement: text,
75
+ status: 'active',
76
+ evidenceSummary: text,
77
+ });
78
+ }
79
+ const stateMatch = text.match(/\b(?:state changed from|changed from)\s+(.+?)\s+to\s+(.+?)(?:\s+after\s+(.+))?$/i);
80
+ if (stateMatch) {
81
+ addBelief({
82
+ type: 'state_change',
83
+ statement: `${cleanStatement(stateMatch[1])} -> ${cleanStatement(stateMatch[2])}`,
84
+ reason: stateMatch[3] ? cleanStatement(stateMatch[3]) : undefined,
85
+ status: 'active',
86
+ evidenceSummary: text,
87
+ });
88
+ }
89
+ const disputePatterns = [
90
+ /\b(reject|rejected|do not use|don't use|instead of)\b/i,
91
+ /\bbandaid\b/i,
92
+ ];
93
+ if (disputePatterns.some((pattern) => pattern.test(text))) {
94
+ const sentence = text.split(/[.!?]/).find((part) => /reject|bandaid|instead of|do not use|don't use/i.test(part)) ?? text;
95
+ addBelief({
96
+ type: 'dispute',
97
+ statement: sentence,
98
+ status: 'disputed',
99
+ evidenceSummary: text,
100
+ });
101
+ }
102
+ const deduped = new Map();
103
+ for (const belief of beliefs) {
104
+ const key = `${belief.type}:${belief.statement.toLowerCase()}`;
105
+ if (!deduped.has(key))
106
+ deduped.set(key, belief);
107
+ }
108
+ if (deduped.size === 0 && !/\b(because|due to|prefer|decision|constraint|changed from|reject)\b/.test(lowered)) {
109
+ return [];
110
+ }
111
+ return [...deduped.values()];
112
+ }
113
+ //# sourceMappingURL=extractor.js.map
@@ -0,0 +1,46 @@
1
+ import type { ExtractedBelief, StoredBelief } from './types.js';
2
+ export declare function upsertBeliefsForMemory(input: {
3
+ projectId: string;
4
+ memoryId: string;
5
+ beliefs: ExtractedBelief[];
6
+ }): Promise<StoredBelief[]>;
7
+ export declare function getBeliefsForMemory(memoryId: string): Promise<StoredBelief[]>;
8
+ /**
9
+ * Get all beliefs for a project
10
+ */
11
+ export declare function getAllBeliefs(projectId: string, options?: {
12
+ type?: string;
13
+ status?: string;
14
+ minConfidence?: number;
15
+ limit?: number;
16
+ }): Promise<StoredBelief[]>;
17
+ /**
18
+ * Search beliefs by statement content
19
+ */
20
+ export declare function searchBeliefs(projectId: string, query: string, options?: {
21
+ type?: string;
22
+ minConfidence?: number;
23
+ limit?: number;
24
+ }): Promise<StoredBelief[]>;
25
+ /**
26
+ * Get active constraint beliefs for session boot
27
+ * Returns beliefs that should shape next actions
28
+ */
29
+ export declare function getActiveConstraints(projectId: string): Promise<StoredBelief[]>;
30
+ /**
31
+ * Get active decision beliefs for session boot
32
+ * Returns decisions that should guide next actions
33
+ */
34
+ export declare function getActiveDecisions(projectId: string): Promise<StoredBelief[]>;
35
+ /**
36
+ * Get recent failure beliefs for session boot
37
+ * Returns failure_cause beliefs to avoid repeating mistakes
38
+ * @param count - Number of recent failures to return (default 10)
39
+ */
40
+ export declare function getRecentFailures(projectId: string, count?: number): Promise<StoredBelief[]>;
41
+ /**
42
+ * Get beliefs relevant to a task/query for session boot
43
+ * Used to inject relevant beliefs at session start
44
+ */
45
+ export declare function getRelevantBeliefs(projectId: string, taskQuery: string, limit?: number): Promise<StoredBelief[]>;
46
+ //# sourceMappingURL=store.d.ts.map