squish-memory 1.1.5 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (646) hide show
  1. package/.env.example +32 -16
  2. package/CHANGELOG.md +147 -0
  3. package/README.md +120 -78
  4. package/{scripts → bin}/dependency-manager.mjs +217 -217
  5. package/{scripts → bin}/detect-clients.mjs +78 -78
  6. package/bin/install-interactive.mjs +321 -0
  7. package/bin/squish-mcp.mjs +44 -0
  8. package/bin/squish.mjs +33 -0
  9. package/config/mcp-migration-map.json +1 -6
  10. package/config/mcp-mode-semantics.json +19 -23
  11. package/config/mcp-remote-auth.json +3 -26
  12. package/config/mcp-universal.schema.json +5 -35
  13. package/config/settings.json +107 -52
  14. package/config.js +5 -0
  15. package/config.ts +218 -0
  16. package/core/adapters/config/claude-code.ts +133 -0
  17. package/core/adapters/config/cursor.ts +90 -0
  18. package/core/adapters/config/opencode.ts +89 -0
  19. package/core/adapters/config/windsurf.ts +90 -0
  20. package/core/adapters/index.ts +102 -0
  21. package/core/adapters/timeline.ts +116 -0
  22. package/core/adapters/types.ts +166 -0
  23. package/core/agent-preferences.ts +140 -0
  24. package/core/algorithms/analytics/token-estimator.ts +216 -0
  25. package/core/algorithms/detection/hash-filters.ts +260 -0
  26. package/core/algorithms/detection/semantic-ranker.ts +194 -0
  27. package/core/algorithms/detection/two-stage-detector.ts +421 -0
  28. package/core/algorithms/handlers/approve-merge.ts +215 -0
  29. package/core/algorithms/handlers/detect-duplicates.ts +192 -0
  30. package/core/algorithms/handlers/get-stats.ts +132 -0
  31. package/core/algorithms/handlers/list-proposals.ts +130 -0
  32. package/core/algorithms/handlers/preview-merge.ts +139 -0
  33. package/core/algorithms/handlers/reject-merge.ts +93 -0
  34. package/core/algorithms/handlers/reverse-merge.ts +155 -0
  35. package/{dist/core/algorithms/index.js → core/algorithms/index.ts} +39 -26
  36. package/core/algorithms/operations/cache-maintenance.ts +182 -0
  37. package/core/algorithms/safety/safety-checks.ts +256 -0
  38. package/core/algorithms/strategies/merge-strategies.ts +381 -0
  39. package/core/algorithms/types.ts +140 -0
  40. package/core/algorithms/utils/response-builder.ts +61 -0
  41. package/core/associations.ts +363 -0
  42. package/core/beliefs/decay.ts +289 -0
  43. package/core/beliefs/extractor.ts +131 -0
  44. package/core/beliefs/store.ts +557 -0
  45. package/core/beliefs/types.ts +38 -0
  46. package/core/commands/mcp-server.ts +5 -0
  47. package/core/compression.ts +177 -0
  48. package/core/config.js +2 -0
  49. package/core/consolidation.ts +330 -0
  50. package/core/context/agent-context.ts +388 -0
  51. package/core/context/context-paging.ts +449 -0
  52. package/core/context/context-window.ts +234 -0
  53. package/core/context/context.ts +35 -0
  54. package/core/embeddings/embeddings.ts +616 -0
  55. package/core/embeddings/google-multimodal.ts +200 -0
  56. package/{dist/core/local-embeddings.js → core/embeddings/local-embeddings.ts} +12 -11
  57. package/core/embeddings/qmd-client.ts +495 -0
  58. package/core/embeddings/transformers-local.ts +261 -0
  59. package/core/embeddings.js +4 -0
  60. package/core/error-handling.ts +206 -0
  61. package/core/external +219 -0
  62. package/core/graph/entity-deduplicator.ts +232 -0
  63. package/core/graph/graph-builder.ts +257 -0
  64. package/core/graph/graph-traversal.ts +490 -0
  65. package/core/graph/index.ts +24 -0
  66. package/core/graph/llm-entity-extractor.ts +402 -0
  67. package/core/graph/multi-hop-retrieval.ts +317 -0
  68. package/core/graph/relationship-extractor.ts +465 -0
  69. package/core/hooks/agent-hooks.ts +653 -0
  70. package/core/hooks/auto-tagger.ts +149 -0
  71. package/core/hooks/capture-filter.ts +169 -0
  72. package/core/hot-cache.ts +388 -0
  73. package/core/index.ts +10 -0
  74. package/core/ingestion/agent-memory.ts +167 -0
  75. package/core/ingestion/core-memory.ts +326 -0
  76. package/core/ingestion/learnings.ts +260 -0
  77. package/core/ingestion/signal-engine.ts +266 -0
  78. package/core/integrations/obsidian-vault.ts +197 -0
  79. package/core/layers/generator.ts +115 -0
  80. package/{dist/core/lib/db-client.d.ts → core/lib/db-client.ts} +168 -114
  81. package/core/lib/parse-embedding.ts +59 -0
  82. package/{dist/core/lib/schemas.js → core/lib/schemas.ts} +102 -87
  83. package/core/lib/types.ts +49 -0
  84. package/core/lib/utils.ts +151 -0
  85. package/core/lib/validation.ts +180 -0
  86. package/core/lifecycle.ts +353 -0
  87. package/core/logger.ts +59 -0
  88. package/core/memory/bridge-discovery.ts +395 -0
  89. package/core/memory/categorizer.ts +390 -0
  90. package/core/memory/conflict-detector.ts +62 -0
  91. package/core/memory/consolidation.ts +372 -0
  92. package/core/memory/context-collector.ts +75 -0
  93. package/core/memory/contradiction-resolver.ts +494 -0
  94. package/core/memory/edit-workflow.ts +174 -0
  95. package/core/memory/entity-extractor.ts +426 -0
  96. package/core/memory/entity-resolver.ts +89 -0
  97. package/core/memory/explain.ts +112 -0
  98. package/core/memory/fact-deriver.ts +300 -0
  99. package/core/memory/fact-extractor.ts +120 -0
  100. package/core/memory/feedback-tracker.ts +200 -0
  101. package/core/memory/hooks.ts +230 -0
  102. package/core/memory/hybrid-retrieval.ts +65 -0
  103. package/core/memory/hybrid-scorer.ts +325 -0
  104. package/core/memory/hybrid-search.ts +748 -0
  105. package/core/memory/importance.ts +319 -0
  106. package/{dist/core/memory/index.js → core/memory/index.ts} +11 -10
  107. package/core/memory/loader.ts +178 -0
  108. package/core/memory/markdown/markdown-storage.ts +318 -0
  109. package/core/memory/memories.ts +565 -0
  110. package/core/memory/memory-lifecycle.ts +51 -0
  111. package/core/memory/memory-manager.ts +53 -0
  112. package/core/memory/migrate.ts +173 -0
  113. package/core/memory/normalization.ts +30 -0
  114. package/core/memory/path-strengthener.ts +211 -0
  115. package/core/memory/progressive-disclosure.ts +392 -0
  116. package/core/memory/query-processor.ts +130 -0
  117. package/core/memory/query-rewriter.ts +153 -0
  118. package/core/memory/response-analyzer.ts +81 -0
  119. package/core/memory/retrieval-feedback.ts +276 -0
  120. package/core/memory/serialization.ts +83 -0
  121. package/core/memory/stale-cleaner.ts +147 -0
  122. package/core/memory/stats.ts +181 -0
  123. package/core/memory/telemetry.ts +392 -0
  124. package/core/memory/temporal-facts.ts +356 -0
  125. package/core/memory/temporal-parser.ts +477 -0
  126. package/core/memory/trigger-detector.ts +104 -0
  127. package/core/memory/write-gate.ts +288 -0
  128. package/{dist/core/places/index.js → core/places/index.ts} +12 -12
  129. package/core/places/memory-places.ts +339 -0
  130. package/core/places/places.ts +406 -0
  131. package/core/places/rules.ts +308 -0
  132. package/core/places/walking.ts +192 -0
  133. package/core/projects +89 -0
  134. package/core/projects.ts +131 -0
  135. package/core/redis.ts +82 -0
  136. package/core/responses.ts +187 -0
  137. package/core/runtime/trust-report.ts +195 -0
  138. package/core/runtime/trust-state.ts +360 -0
  139. package/core/scheduler/cron-scheduler.ts +590 -0
  140. package/core/scheduler/heartbeat.ts +91 -0
  141. package/{dist/core/scheduler/index.js → core/scheduler/index.ts} +8 -8
  142. package/core/scheduler/job-runner.ts +197 -0
  143. package/core/search/conversations.ts +166 -0
  144. package/core/search/entities.ts +46 -0
  145. package/core/search/folder-context.ts +154 -0
  146. package/core/search/graph-boost.ts +22 -0
  147. package/{dist/core/search/index.js → core/search/index.ts} +4 -5
  148. package/core/search/qmd-wrapper.ts +84 -0
  149. package/core/security/encrypt.ts +51 -0
  150. package/core/security/governance.ts +102 -0
  151. package/core/security/privacy.ts +108 -0
  152. package/core/security/secret-detector.ts +122 -0
  153. package/core/session/auto-load.ts +160 -0
  154. package/core/session/entity-tracker.ts +363 -0
  155. package/{dist/core/session/index.js → core/session/index.ts} +7 -7
  156. package/core/session/reference-resolver.ts +158 -0
  157. package/core/session/self-iteration-job.ts +478 -0
  158. package/core/session/session-hooks.ts +69 -0
  159. package/core/session/types.ts +36 -0
  160. package/core/session/working-set.ts +275 -0
  161. package/{dist/core/snapshots/cleanup.js → core/snapshots/cleanup.ts} +13 -12
  162. package/core/snapshots/comparison.ts +59 -0
  163. package/core/snapshots/creation.ts +139 -0
  164. package/core/snapshots/retrieval.ts +44 -0
  165. package/core/snapshots/stats.ts +63 -0
  166. package/core/storage/cache.ts +241 -0
  167. package/core/storage/database.ts +23 -0
  168. package/{dist/core/summarization/cleanup.js → core/summarization/cleanup.ts} +13 -12
  169. package/core/summarization/queries.ts +32 -0
  170. package/core/summarization/stats.ts +64 -0
  171. package/core/summarization/strategies.ts +52 -0
  172. package/core/summarization.ts +248 -0
  173. package/core/temporal-facts.ts +244 -0
  174. package/core/tracing/collector.ts +470 -0
  175. package/core/tracing/visualizer.ts +195 -0
  176. package/core/utils/cleanup-operations.ts +50 -0
  177. package/core/utils/content-extraction.ts +95 -0
  178. package/core/utils/filter-builder.ts +56 -0
  179. package/core/utils/history-traversal.ts +63 -0
  180. package/core/utils/memory-operations.ts +56 -0
  181. package/core/utils/query-operations.ts +83 -0
  182. package/core/utils/summarization-helpers.ts +45 -0
  183. package/core/utils/temporal-queries.ts +39 -0
  184. package/{dist/core/utils/vector-operations.js → core/utils/vector-operations.ts} +135 -129
  185. package/core/utils/version-management.ts +74 -0
  186. package/core/worker.ts +333 -0
  187. package/db/adapter.ts +215 -0
  188. package/{dist/db/bootstrap.js → db/bootstrap.ts} +388 -418
  189. package/db/drizzle/migrations/0000_needy_cerebro.sql +402 -0
  190. package/db/drizzle/migrations/meta/0000_snapshot.json +3451 -0
  191. package/db/drizzle/migrations/meta/_journal.json +13 -0
  192. package/db/drizzle/schema-sqlite.ts +1032 -0
  193. package/db/drizzle/schema.ts +1128 -0
  194. package/db/drizzle.config.ts +12 -0
  195. package/db/index.ts +83 -0
  196. package/db/init.sql +5 -0
  197. package/db/migrations/associations.ts +35 -0
  198. package/db/migrations/beliefs.ts +89 -0
  199. package/db/migrations/core-memory.ts +35 -0
  200. package/db/migrations/fts.ts +59 -0
  201. package/db/migrations/index.ts +54 -0
  202. package/db/migrations/indexes.ts +36 -0
  203. package/db/migrations/learnings.ts +34 -0
  204. package/db/migrations/maintenance.ts +68 -0
  205. package/db/migrations/memories.ts +22 -0
  206. package/db/migrations/memory-places.ts +35 -0
  207. package/db/migrations/places.ts +49 -0
  208. package/db/migrations/projects.ts +21 -0
  209. package/db/migrations/tier-conversion.ts +24 -0
  210. package/db/neon.ts +22 -0
  211. package/db/schema/beliefs.ts +50 -0
  212. package/db/schema/generator.ts +159 -0
  213. package/db/schema/index.ts +58 -0
  214. package/db/schema/learnings.ts +32 -0
  215. package/db/schema/memories.ts +83 -0
  216. package/db/schema/projects.ts +33 -0
  217. package/db/schema.ts +13 -0
  218. package/db/supabase.ts +27 -0
  219. package/mcp.json.example +8 -11
  220. package/package.json +140 -159
  221. package/packages/cli/package.json +22 -0
  222. package/packages/cli/src/commands/clean.ts +68 -0
  223. package/packages/cli/src/commands/context.ts +79 -0
  224. package/packages/cli/src/commands/doctor.ts +357 -0
  225. package/packages/cli/src/commands/forget.ts +72 -0
  226. package/packages/cli/src/commands/health.ts +36 -0
  227. package/packages/cli/src/commands/inspect.ts +41 -0
  228. package/packages/cli/src/commands/link.ts +50 -0
  229. package/packages/cli/src/commands/migrate.ts +93 -0
  230. package/packages/cli/src/commands/recall.ts +99 -0
  231. package/packages/cli/src/commands/recent.ts +57 -0
  232. package/packages/cli/src/commands/remember.ts +139 -0
  233. package/packages/cli/src/commands/run.ts +58 -0
  234. package/packages/cli/src/commands/stale.ts +43 -0
  235. package/packages/cli/src/commands/stats.ts +42 -0
  236. package/packages/cli/src/index.ts +57 -0
  237. package/packages/cli/tsconfig.json +24 -0
  238. package/packages/mcp/package.json +26 -0
  239. package/packages/mcp/src/index.ts +940 -0
  240. package/packages/mcp/tsconfig.json +20 -0
  241. package/skills/squish-memory/SKILL.md +38 -35
  242. package/skills/squish-memory/{scripts/install.sh → install.sh} +1 -1
  243. package/skills/squish-memory/references/claude-desktop.json +12 -0
  244. package/skills/squish-memory/references/openclaw.json +13 -0
  245. package/skills/squish-memory/references/opencode.json +14 -0
  246. package/config/hooks/claude-code-hooks.json +0 -39
  247. package/config/hooks/cursor-hooks.json +0 -30
  248. package/config/hooks/opencode-hooks.json +0 -30
  249. package/config/hooks/windsurf-hooks.json +0 -30
  250. package/config/mcp-cli-fallback-policy.json +0 -22
  251. package/config/mcp.json +0 -38
  252. package/config/plugin-manifest.json +0 -101
  253. package/config/plugin-manifest.schema.json +0 -244
  254. package/config/plugin.json +0 -32
  255. package/config/remote-memory-policy.json +0 -32
  256. package/core/commands/context-paging.md +0 -51
  257. package/core/commands/context-status.md +0 -22
  258. package/core/commands/context.md +0 -5
  259. package/core/commands/core-memory.md +0 -56
  260. package/core/commands/health.md +0 -5
  261. package/core/commands/init.md +0 -39
  262. package/core/commands/merge.md +0 -113
  263. package/core/commands/recall.md +0 -5
  264. package/core/commands/remember.md +0 -11
  265. package/core/commands/search.md +0 -10
  266. package/dist/config.d.ts +0 -83
  267. package/dist/config.js +0 -242
  268. package/dist/core/adapters/config/claude-code.d.ts +0 -45
  269. package/dist/core/adapters/config/claude-code.js +0 -113
  270. package/dist/core/adapters/config/cursor.d.ts +0 -26
  271. package/dist/core/adapters/config/cursor.js +0 -74
  272. package/dist/core/adapters/config/opencode.d.ts +0 -23
  273. package/dist/core/adapters/config/opencode.js +0 -73
  274. package/dist/core/adapters/config/windsurf.d.ts +0 -26
  275. package/dist/core/adapters/config/windsurf.js +0 -74
  276. package/dist/core/adapters/index.d.ts +0 -45
  277. package/dist/core/adapters/index.js +0 -84
  278. package/dist/core/adapters/scripts/install-adapter.d.ts +0 -19
  279. package/dist/core/adapters/scripts/install-adapter.js +0 -149
  280. package/dist/core/adapters/timeline.d.ts +0 -23
  281. package/dist/core/adapters/timeline.js +0 -88
  282. package/dist/core/adapters/types.d.ts +0 -157
  283. package/dist/core/adapters/types.js +0 -50
  284. package/dist/core/algorithms/analytics/token-estimator.d.ts +0 -50
  285. package/dist/core/algorithms/analytics/token-estimator.js +0 -154
  286. package/dist/core/algorithms/detection/hash-filters.d.ts +0 -47
  287. package/dist/core/algorithms/detection/hash-filters.js +0 -190
  288. package/dist/core/algorithms/detection/semantic-ranker.d.ts +0 -32
  289. package/dist/core/algorithms/detection/semantic-ranker.js +0 -118
  290. package/dist/core/algorithms/detection/two-stage-detector.d.ts +0 -52
  291. package/dist/core/algorithms/detection/two-stage-detector.js +0 -299
  292. package/dist/core/algorithms/handlers/approve-merge.d.ts +0 -22
  293. package/dist/core/algorithms/handlers/approve-merge.js +0 -179
  294. package/dist/core/algorithms/handlers/detect-duplicates.d.ts +0 -47
  295. package/dist/core/algorithms/handlers/detect-duplicates.js +0 -145
  296. package/dist/core/algorithms/handlers/get-stats.d.ts +0 -39
  297. package/dist/core/algorithms/handlers/get-stats.js +0 -88
  298. package/dist/core/algorithms/handlers/list-proposals.d.ts +0 -45
  299. package/dist/core/algorithms/handlers/list-proposals.js +0 -83
  300. package/dist/core/algorithms/handlers/preview-merge.d.ts +0 -39
  301. package/dist/core/algorithms/handlers/preview-merge.js +0 -93
  302. package/dist/core/algorithms/handlers/reject-merge.d.ts +0 -28
  303. package/dist/core/algorithms/handlers/reject-merge.js +0 -69
  304. package/dist/core/algorithms/handlers/reverse-merge.d.ts +0 -21
  305. package/dist/core/algorithms/handlers/reverse-merge.js +0 -121
  306. package/dist/core/algorithms/index.d.ts +0 -21
  307. package/dist/core/algorithms/operations/cache-maintenance.d.ts +0 -12
  308. package/dist/core/algorithms/operations/cache-maintenance.js +0 -157
  309. package/dist/core/algorithms/safety/safety-checks.d.ts +0 -22
  310. package/dist/core/algorithms/safety/safety-checks.js +0 -179
  311. package/dist/core/algorithms/strategies/merge-strategies.d.ts +0 -50
  312. package/dist/core/algorithms/strategies/merge-strategies.js +0 -288
  313. package/dist/core/algorithms/types.d.ts +0 -133
  314. package/dist/core/algorithms/types.js +0 -5
  315. package/dist/core/algorithms/utils/response-builder.d.ts +0 -28
  316. package/dist/core/algorithms/utils/response-builder.js +0 -37
  317. package/dist/core/associations.d.ts +0 -31
  318. package/dist/core/associations.js +0 -248
  319. package/dist/core/autosave.d.ts +0 -19
  320. package/dist/core/autosave.js +0 -16
  321. package/dist/core/commands/managed-sync.d.ts +0 -10
  322. package/dist/core/commands/managed-sync.js +0 -64
  323. package/dist/core/commands/mcp-server.d.ts +0 -3
  324. package/dist/core/commands/mcp-server.js +0 -739
  325. package/dist/core/consolidation.d.ts +0 -37
  326. package/dist/core/consolidation.js +0 -248
  327. package/dist/core/context/agent-context.d.ts +0 -106
  328. package/dist/core/context/agent-context.js +0 -274
  329. package/dist/core/context/context-paging.d.ts +0 -80
  330. package/dist/core/context/context-paging.js +0 -328
  331. package/dist/core/context/context-window.d.ts +0 -40
  332. package/dist/core/context/context-window.js +0 -177
  333. package/dist/core/context/context.d.ts +0 -7
  334. package/dist/core/context/context.js +0 -22
  335. package/dist/core/embeddings/google-multimodal.d.ts +0 -14
  336. package/dist/core/embeddings/google-multimodal.js +0 -142
  337. package/dist/core/embeddings/qmd-client.d.ts +0 -136
  338. package/dist/core/embeddings/qmd-client.js +0 -403
  339. package/dist/core/embeddings.d.ts +0 -29
  340. package/dist/core/embeddings.js +0 -454
  341. package/dist/core/error-handling.d.ts +0 -63
  342. package/dist/core/error-handling.js +0 -173
  343. package/dist/core/external-folder/index.d.ts +0 -102
  344. package/dist/core/external-folder/index.js +0 -294
  345. package/dist/core/hooks/agent-hooks.d.ts +0 -74
  346. package/dist/core/hooks/agent-hooks.js +0 -244
  347. package/dist/core/hooks/auto-tagger.d.ts +0 -19
  348. package/dist/core/hooks/auto-tagger.js +0 -155
  349. package/dist/core/hooks/capture-filter.d.ts +0 -41
  350. package/dist/core/hooks/capture-filter.js +0 -128
  351. package/dist/core/index.d.ts +0 -10
  352. package/dist/core/index.js +0 -14
  353. package/dist/core/ingestion/agent-memory.d.ts +0 -22
  354. package/dist/core/ingestion/agent-memory.js +0 -109
  355. package/dist/core/ingestion/core-memory.d.ts +0 -78
  356. package/dist/core/ingestion/core-memory.js +0 -226
  357. package/dist/core/ingestion/learnings.d.ts +0 -57
  358. package/dist/core/ingestion/learnings.js +0 -202
  359. package/dist/core/layers/generator.d.ts +0 -25
  360. package/dist/core/layers/generator.js +0 -76
  361. package/dist/core/lib/db-client.js +0 -130
  362. package/dist/core/lib/schemas.d.ts +0 -129
  363. package/dist/core/lib/utils.d.ts +0 -14
  364. package/dist/core/lib/utils.js +0 -90
  365. package/dist/core/lib/validation.d.ts +0 -38
  366. package/dist/core/lib/validation.js +0 -151
  367. package/dist/core/lifecycle.d.ts +0 -26
  368. package/dist/core/lifecycle.js +0 -302
  369. package/dist/core/local-embeddings.d.ts +0 -11
  370. package/dist/core/logger.d.ts +0 -16
  371. package/dist/core/logger.js +0 -40
  372. package/dist/core/mcp/client.d.ts +0 -17
  373. package/dist/core/mcp/client.js +0 -101
  374. package/dist/core/mcp/index.d.ts +0 -6
  375. package/dist/core/mcp/index.js +0 -6
  376. package/dist/core/mcp/server.d.ts +0 -18
  377. package/dist/core/mcp/server.js +0 -157
  378. package/dist/core/mcp/standalone-server.d.ts +0 -13
  379. package/dist/core/mcp/standalone-server.js +0 -46
  380. package/dist/core/mcp/tools.d.ts +0 -9
  381. package/dist/core/mcp/tools.js +0 -365
  382. package/dist/core/mcp/types.d.ts +0 -315
  383. package/dist/core/mcp/types.js +0 -48
  384. package/dist/core/memory/bridge-discovery.d.ts +0 -50
  385. package/dist/core/memory/bridge-discovery.js +0 -291
  386. package/dist/core/memory/categorizer.d.ts +0 -27
  387. package/dist/core/memory/categorizer.js +0 -305
  388. package/dist/core/memory/conflict-detector.d.ts +0 -7
  389. package/dist/core/memory/conflict-detector.js +0 -43
  390. package/dist/core/memory/consolidation.d.ts +0 -42
  391. package/dist/core/memory/consolidation.js +0 -303
  392. package/dist/core/memory/context-collector.d.ts +0 -10
  393. package/dist/core/memory/context-collector.js +0 -56
  394. package/dist/core/memory/contradiction-resolver.d.ts +0 -40
  395. package/dist/core/memory/contradiction-resolver.js +0 -368
  396. package/dist/core/memory/edit-workflow.d.ts +0 -19
  397. package/dist/core/memory/edit-workflow.js +0 -120
  398. package/dist/core/memory/entity-extractor.d.ts +0 -33
  399. package/dist/core/memory/entity-extractor.js +0 -336
  400. package/dist/core/memory/entity-resolver.d.ts +0 -23
  401. package/dist/core/memory/entity-resolver.js +0 -64
  402. package/dist/core/memory/fact-extractor.d.ts +0 -24
  403. package/dist/core/memory/fact-extractor.js +0 -89
  404. package/dist/core/memory/feedback-tracker.d.ts +0 -12
  405. package/dist/core/memory/feedback-tracker.js +0 -155
  406. package/dist/core/memory/hooks.d.ts +0 -88
  407. package/dist/core/memory/hooks.js +0 -174
  408. package/dist/core/memory/hybrid-retrieval.d.ts +0 -29
  409. package/dist/core/memory/hybrid-retrieval.js +0 -139
  410. package/dist/core/memory/hybrid-scorer.d.ts +0 -40
  411. package/dist/core/memory/hybrid-scorer.js +0 -284
  412. package/dist/core/memory/hybrid-search.d.ts +0 -20
  413. package/dist/core/memory/hybrid-search.js +0 -359
  414. package/dist/core/memory/importance.d.ts +0 -63
  415. package/dist/core/memory/importance.js +0 -298
  416. package/dist/core/memory/index.d.ts +0 -8
  417. package/dist/core/memory/loader.d.ts +0 -31
  418. package/dist/core/memory/loader.js +0 -141
  419. package/dist/core/memory/markdown/markdown-storage.d.ts +0 -72
  420. package/dist/core/memory/markdown/markdown-storage.js +0 -243
  421. package/dist/core/memory/memories.d.ts +0 -47
  422. package/dist/core/memory/memories.js +0 -449
  423. package/dist/core/memory/memory-lifecycle.d.ts +0 -8
  424. package/dist/core/memory/memory-lifecycle.js +0 -55
  425. package/dist/core/memory/memory-manager.d.ts +0 -15
  426. package/dist/core/memory/memory-manager.js +0 -46
  427. package/dist/core/memory/migrate.d.ts +0 -21
  428. package/dist/core/memory/migrate.js +0 -134
  429. package/dist/core/memory/normalization.d.ts +0 -22
  430. package/dist/core/memory/normalization.js +0 -26
  431. package/dist/core/memory/progressive-disclosure.d.ts +0 -43
  432. package/dist/core/memory/progressive-disclosure.js +0 -280
  433. package/dist/core/memory/query-processor.d.ts +0 -21
  434. package/dist/core/memory/query-processor.js +0 -72
  435. package/dist/core/memory/query-rewriter.d.ts +0 -13
  436. package/dist/core/memory/query-rewriter.js +0 -118
  437. package/dist/core/memory/response-analyzer.d.ts +0 -9
  438. package/dist/core/memory/response-analyzer.js +0 -61
  439. package/dist/core/memory/serialization.d.ts +0 -10
  440. package/dist/core/memory/serialization.js +0 -84
  441. package/dist/core/memory/stats.d.ts +0 -22
  442. package/dist/core/memory/stats.js +0 -138
  443. package/dist/core/memory/telemetry.d.ts +0 -69
  444. package/dist/core/memory/telemetry.js +0 -313
  445. package/dist/core/memory/temporal-facts.d.ts +0 -41
  446. package/dist/core/memory/temporal-facts.js +0 -283
  447. package/dist/core/memory/temporal-parser.d.ts +0 -32
  448. package/dist/core/memory/temporal-parser.js +0 -385
  449. package/dist/core/memory/trigger-detector.d.ts +0 -14
  450. package/dist/core/memory/trigger-detector.js +0 -42
  451. package/dist/core/memory/write-gate.d.ts +0 -54
  452. package/dist/core/memory/write-gate.js +0 -210
  453. package/dist/core/namespaces/index.d.ts +0 -71
  454. package/dist/core/namespaces/index.js +0 -305
  455. package/dist/core/namespaces/uri-parser.d.ts +0 -31
  456. package/dist/core/namespaces/uri-parser.js +0 -74
  457. package/dist/core/obsidian-vault.d.ts +0 -30
  458. package/dist/core/obsidian-vault.js +0 -94
  459. package/dist/core/places/index.d.ts +0 -14
  460. package/dist/core/places/memory-places.d.ts +0 -68
  461. package/dist/core/places/memory-places.js +0 -261
  462. package/dist/core/places/places.d.ts +0 -88
  463. package/dist/core/places/places.js +0 -314
  464. package/dist/core/places/rules.d.ts +0 -74
  465. package/dist/core/places/rules.js +0 -240
  466. package/dist/core/places/walking.d.ts +0 -56
  467. package/dist/core/places/walking.js +0 -121
  468. package/dist/core/projects.d.ts +0 -17
  469. package/dist/core/projects.js +0 -108
  470. package/dist/core/redis.d.ts +0 -11
  471. package/dist/core/redis.js +0 -69
  472. package/dist/core/responses.d.ts +0 -96
  473. package/dist/core/responses.js +0 -122
  474. package/dist/core/scheduler/cron-scheduler.d.ts +0 -32
  475. package/dist/core/scheduler/cron-scheduler.js +0 -332
  476. package/dist/core/scheduler/heartbeat.d.ts +0 -11
  477. package/dist/core/scheduler/heartbeat.js +0 -73
  478. package/dist/core/scheduler/index.d.ts +0 -8
  479. package/dist/core/scheduler/job-runner.d.ts +0 -11
  480. package/dist/core/scheduler/job-runner.js +0 -164
  481. package/dist/core/search/conversations.d.ts +0 -25
  482. package/dist/core/search/conversations.js +0 -110
  483. package/dist/core/search/entities.d.ts +0 -12
  484. package/dist/core/search/entities.js +0 -31
  485. package/dist/core/search/folder-context.d.ts +0 -25
  486. package/dist/core/search/folder-context.js +0 -119
  487. package/dist/core/search/graph-boost.d.ts +0 -7
  488. package/dist/core/search/graph-boost.js +0 -23
  489. package/dist/core/search/index.d.ts +0 -4
  490. package/dist/core/search/qmd-search.d.ts +0 -61
  491. package/dist/core/search/qmd-search.js +0 -178
  492. package/dist/core/security/encrypt.d.ts +0 -6
  493. package/dist/core/security/encrypt.js +0 -47
  494. package/dist/core/security/governance.d.ts +0 -26
  495. package/dist/core/security/governance.js +0 -79
  496. package/dist/core/security/privacy.d.ts +0 -23
  497. package/dist/core/security/privacy.js +0 -82
  498. package/dist/core/security/secret-detector.d.ts +0 -32
  499. package/dist/core/security/secret-detector.js +0 -88
  500. package/dist/core/session/auto-load.d.ts +0 -6
  501. package/dist/core/session/auto-load.js +0 -119
  502. package/dist/core/session/index.d.ts +0 -7
  503. package/dist/core/session/self-iteration-job.d.ts +0 -20
  504. package/dist/core/session/self-iteration-job.js +0 -282
  505. package/dist/core/session/session-hooks.d.ts +0 -18
  506. package/dist/core/session/session-hooks.js +0 -58
  507. package/dist/core/session/types.d.ts +0 -26
  508. package/dist/core/session/types.js +0 -10
  509. package/dist/core/session-hooks/self-iteration-job.d.ts +0 -20
  510. package/dist/core/session-hooks/self-iteration-job.js +0 -282
  511. package/dist/core/session-hooks/session-hooks.d.ts +0 -18
  512. package/dist/core/session-hooks/session-hooks.js +0 -58
  513. package/dist/core/snapshots/cleanup.d.ts +0 -9
  514. package/dist/core/snapshots/comparison.d.ts +0 -19
  515. package/dist/core/snapshots/comparison.js +0 -43
  516. package/dist/core/snapshots/creation.d.ts +0 -19
  517. package/dist/core/snapshots/creation.js +0 -126
  518. package/dist/core/snapshots/retrieval.d.ts +0 -7
  519. package/dist/core/snapshots/retrieval.js +0 -41
  520. package/dist/core/snapshots/stats.d.ts +0 -11
  521. package/dist/core/snapshots/stats.js +0 -52
  522. package/dist/core/snapshots.d.ts +0 -29
  523. package/dist/core/snapshots.js +0 -220
  524. package/dist/core/storage/cache.d.ts +0 -13
  525. package/dist/core/storage/cache.js +0 -202
  526. package/dist/core/storage/database.d.ts +0 -12
  527. package/dist/core/storage/database.js +0 -12
  528. package/dist/core/summarization/cleanup.d.ts +0 -9
  529. package/dist/core/summarization/queries.d.ts +0 -9
  530. package/dist/core/summarization/queries.js +0 -28
  531. package/dist/core/summarization/stats.d.ts +0 -14
  532. package/dist/core/summarization/stats.js +0 -52
  533. package/dist/core/summarization/strategies.d.ts +0 -24
  534. package/dist/core/summarization/strategies.js +0 -28
  535. package/dist/core/summarization.d.ts +0 -37
  536. package/dist/core/summarization.js +0 -188
  537. package/dist/core/sync/qmd-sync.d.ts +0 -94
  538. package/dist/core/sync/qmd-sync.js +0 -201
  539. package/dist/core/temporal-facts.d.ts +0 -54
  540. package/dist/core/temporal-facts.js +0 -193
  541. package/dist/core/toon.d.ts +0 -43
  542. package/dist/core/toon.js +0 -160
  543. package/dist/core/tracing/collector.d.ts +0 -111
  544. package/dist/core/tracing/collector.js +0 -350
  545. package/dist/core/tracing/visualizer.d.ts +0 -32
  546. package/dist/core/tracing/visualizer.js +0 -165
  547. package/dist/core/utils/cleanup-operations.d.ts +0 -13
  548. package/dist/core/utils/cleanup-operations.js +0 -44
  549. package/dist/core/utils/content-extraction.d.ts +0 -19
  550. package/dist/core/utils/content-extraction.js +0 -75
  551. package/dist/core/utils/filter-builder.d.ts +0 -13
  552. package/dist/core/utils/filter-builder.js +0 -44
  553. package/dist/core/utils/history-traversal.d.ts +0 -13
  554. package/dist/core/utils/history-traversal.js +0 -50
  555. package/dist/core/utils/memory-operations.d.ts +0 -17
  556. package/dist/core/utils/memory-operations.js +0 -43
  557. package/dist/core/utils/query-operations.d.ts +0 -18
  558. package/dist/core/utils/query-operations.js +0 -65
  559. package/dist/core/utils/summarization-helpers.d.ts +0 -21
  560. package/dist/core/utils/summarization-helpers.js +0 -38
  561. package/dist/core/utils/temporal-queries.d.ts +0 -13
  562. package/dist/core/utils/temporal-queries.js +0 -27
  563. package/dist/core/utils/vector-operations.d.ts +0 -71
  564. package/dist/core/utils/version-management.d.ts +0 -9
  565. package/dist/core/utils/version-management.js +0 -61
  566. package/dist/core/worker.d.ts +0 -82
  567. package/dist/core/worker.js +0 -272
  568. package/dist/db/adapter.d.ts +0 -7
  569. package/dist/db/adapter.js +0 -175
  570. package/dist/db/bootstrap.d.ts +0 -9
  571. package/dist/db/drizzle/schema-sqlite.d.ts +0 -4837
  572. package/dist/db/drizzle/schema-sqlite.js +0 -684
  573. package/dist/db/drizzle/schema.d.ts +0 -4082
  574. package/dist/db/drizzle/schema.js +0 -770
  575. package/dist/db/drizzle.config.d.ts +0 -3
  576. package/dist/db/drizzle.config.js +0 -12
  577. package/dist/db/index.d.ts +0 -7
  578. package/dist/db/index.js +0 -89
  579. package/dist/db/neon.d.ts +0 -8
  580. package/dist/db/neon.js +0 -20
  581. package/dist/db/schema/index.d.ts +0 -40
  582. package/dist/db/schema/index.js +0 -105
  583. package/dist/db/schema/tables/context-sessions.d.ts +0 -9
  584. package/dist/db/schema/tables/context-sessions.js +0 -37
  585. package/dist/db/schema/tables/conversations.d.ts +0 -9
  586. package/dist/db/schema/tables/conversations.js +0 -47
  587. package/dist/db/schema/tables/core-memory.d.ts +0 -9
  588. package/dist/db/schema/tables/core-memory.js +0 -41
  589. package/dist/db/schema/tables/entities.d.ts +0 -9
  590. package/dist/db/schema/tables/entities.js +0 -39
  591. package/dist/db/schema/tables/entity-relations.d.ts +0 -9
  592. package/dist/db/schema/tables/entity-relations.js +0 -31
  593. package/dist/db/schema/tables/learnings.d.ts +0 -9
  594. package/dist/db/schema/tables/learnings.js +0 -66
  595. package/dist/db/schema/tables/memories.d.ts +0 -9
  596. package/dist/db/schema/tables/memories.js +0 -161
  597. package/dist/db/schema/tables/memory-associations.d.ts +0 -9
  598. package/dist/db/schema/tables/memory-associations.js +0 -39
  599. package/dist/db/schema/tables/memory-hash-cache.d.ts +0 -9
  600. package/dist/db/schema/tables/memory-hash-cache.js +0 -29
  601. package/dist/db/schema/tables/memory-merge-history.d.ts +0 -9
  602. package/dist/db/schema/tables/memory-merge-history.js +0 -33
  603. package/dist/db/schema/tables/memory-merge-proposals.d.ts +0 -9
  604. package/dist/db/schema/tables/memory-merge-proposals.js +0 -39
  605. package/dist/db/schema/tables/messages.d.ts +0 -9
  606. package/dist/db/schema/tables/messages.js +0 -41
  607. package/dist/db/schema/tables/namespaces.d.ts +0 -9
  608. package/dist/db/schema/tables/namespaces.js +0 -37
  609. package/dist/db/schema/tables/projects.d.ts +0 -9
  610. package/dist/db/schema/tables/projects.js +0 -31
  611. package/dist/db/schema/tables/users.d.ts +0 -9
  612. package/dist/db/schema/tables/users.js +0 -27
  613. package/dist/db/schema.d.ts +0 -3
  614. package/dist/db/schema.js +0 -11
  615. package/dist/db/supabase.d.ts +0 -9
  616. package/dist/db/supabase.js +0 -24
  617. package/dist/index.d.ts +0 -7
  618. package/dist/index.js +0 -1677
  619. package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
  620. package/dist/webui/server.d.ts +0 -5
  621. package/dist/webui/server.js +0 -642
  622. package/generated/mcp/manifest.json +0 -23
  623. package/generated/mcp/mcp-servers.json +0 -25
  624. package/generated/mcp/mcporter.json +0 -34
  625. package/generated/mcp/openclaw-memory-qmd.json +0 -17
  626. package/generated/mcp/runtime.json +0 -12
  627. package/scripts/README.md +0 -60
  628. package/scripts/build-release.sh +0 -36
  629. package/scripts/check-secrets.js +0 -132
  630. package/scripts/copy-runtime-assets.mjs +0 -26
  631. package/scripts/generate-mcp.mjs +0 -264
  632. package/scripts/github-release.sh +0 -77
  633. package/scripts/init-dirs.mjs +0 -13
  634. package/scripts/install-claude-code.sh +0 -85
  635. package/scripts/install-cursor.sh +0 -56
  636. package/scripts/install-hooks.sh +0 -73
  637. package/scripts/install-interactive.mjs +0 -357
  638. package/scripts/install-opencode.sh +0 -75
  639. package/scripts/install-plugin.mjs +0 -415
  640. package/scripts/install-windsurf.sh +0 -67
  641. package/scripts/remote-preflight.mjs +0 -62
  642. package/scripts/squish-fallback.mjs +0 -132
  643. package/scripts/test-interactive.mjs +0 -131
  644. package/scripts/verify-mcp.mjs +0 -214
  645. package/skills/squish-memory/scripts/install.mjs +0 -335
  646. package/skills/squish-memory/write_skill.js +0 -2
@@ -1,368 +0,0 @@
1
- /**
2
- * Contradiction Resolver
3
- * Detects and auto-resolves contradictions when writing new memories
4
- * Implements supersession logic for outdated information
5
- */
6
- import { eq, and, inArray } from 'drizzle-orm';
7
- import { getDb } from '../../db/index.js';
8
- import { getSchema } from '../../db/schema.js';
9
- import { logger } from '../logger.js';
10
- import { createAssociation } from '../associations.js';
11
- /**
12
- * Calculate temporal relationship between two time periods
13
- * Returns: 'existing_is_newer', 'existing_is_older', 'overlapping', or 'unknown'
14
- */
15
- function calculateTemporalRelationship(existingValidFrom, existingValidTo, newTime) {
16
- if (!existingValidFrom && !existingValidTo) {
17
- return 'unknown';
18
- }
19
- const existingFrom = existingValidFrom ? new Date(existingValidFrom) : null;
20
- const existingTo = existingValidTo ? new Date(existingValidTo) : null;
21
- // If existing fact is completely in the future compared to new time
22
- if (existingFrom && existingFrom > newTime) {
23
- return 'existing_is_newer';
24
- }
25
- // If existing fact is completely in the past compared to new time
26
- if (existingTo && existingTo < newTime) {
27
- return 'existing_is_older';
28
- }
29
- // If time periods overlap or we can't determine
30
- return 'overlapping';
31
- }
32
- /**
33
- * Check if two temporal periods conflict (don't overlap reasonably)
34
- */
35
- function checkTemporalPeriodConflict(existingStart, existingEnd, newStart, newEnd) {
36
- // If we don't have enough info, assume no conflict
37
- if (!existingStart || !existingEnd) {
38
- return false;
39
- }
40
- const existingStartDate = new Date(existingStart);
41
- const existingEndDate = new Date(existingEnd);
42
- // Normalize newEnd (use distant future if null)
43
- const normalizedNewEnd = newEnd || new Date(8640000000000000); // Far future
44
- // Check if periods overlap
45
- const overlaps = !(existingStartDate > normalizedNewEnd ||
46
- existingEndDate < newStart);
47
- // Conflict if they don't overlap
48
- return !overlaps;
49
- }
50
- // Patterns that indicate updated/corrected information
51
- const UPDATE_PATTERNS = [
52
- /\b(now|currently|actually|in fact|correct(ed)?|update(d)?)\b/gi,
53
- /\b(changed to|switched to|moved to)\b/gi,
54
- /\b(formerly|previously|used to be)\b/gi,
55
- /\binstead of\b/gi,
56
- /\b(no longer|not anymore)\b/gi,
57
- /\b(as of|starting|beginning|from now|effective)\s+(\d{4}|\w+\s+\d{1,2})/gi, // Temporal updates
58
- ];
59
- // Negation patterns
60
- const NEGATION_PATTERNS = [
61
- /\b(not|no|never|don't|doesn't|didn't|won't|wouldn't|shouldn't|can't|cannot)\b/gi,
62
- ];
63
- // Temporal sensitivity patterns - content that is likely time-sensitive
64
- const TEMPORAL_SENSITIVITY_PATTERNS = [
65
- /\b(date|time|version|release|deadline|schedule|timeline)\b/i,
66
- /\b(\d{4}|january|february|march|april|may|june|july|august|september|october|november|december)\b/i,
67
- /\b(today|tomorrow|yesterday|next\s+week|last\s+week|this\s+week)\b/i,
68
- ];
69
- // Key entity extraction for contradiction detection
70
- function extractKeyEntities(content) {
71
- // Simple extraction of capitalized phrases and key terms
72
- const entities = [];
73
- // Match capitalized multi-word phrases (likely proper nouns)
74
- const properNouns = content.match(/\b[A-Z][a-z]+(?:\s+[A-Z][a-z]+)+\b/g) || [];
75
- entities.push(...properNouns);
76
- // Match quoted strings (often important values)
77
- const quoted = content.match(/"([^"]+)"|'([^']+)'/g) || [];
78
- entities.push(...quoted.map(q => q.replace(/['"]/g, '')));
79
- // Match key-value patterns
80
- const keyValues = content.match(/(\w+)\s*[=:]\s*(\S+)/g) || [];
81
- entities.push(...keyValues);
82
- return [...new Set(entities)];
83
- }
84
- // Calculate content similarity (Jaccard on words)
85
- function calculateSimilarity(a, b) {
86
- const tokensA = new Set(a.toLowerCase().split(/\s+/).filter(t => t.length > 2));
87
- const tokensB = new Set(b.toLowerCase().split(/\s+/).filter(t => t.length > 2));
88
- const intersection = new Set([...tokensA].filter(x => tokensB.has(x)));
89
- const union = new Set([...tokensA, ...tokensB]);
90
- return union.size > 0 ? intersection.size / union.size : 0;
91
- }
92
- // Check if content has negation
93
- function hasNegation(content) {
94
- return NEGATION_PATTERNS.some(pattern => pattern.test(content));
95
- }
96
- // Check if content indicates an update
97
- function hasUpdateIndicator(content) {
98
- return UPDATE_PATTERNS.some(pattern => pattern.test(content));
99
- }
100
- // Extract the "subject" of a memory (what it's about)
101
- function extractSubject(content) {
102
- // Take first significant clause
103
- const sentences = content.split(/[.!?\n]/);
104
- const firstSentence = sentences[0]?.trim() || content;
105
- // Limit to first 100 chars for subject matching
106
- return firstSentence.substring(0, 100).toLowerCase();
107
- }
108
- /**
109
- * Detect contradictions between new memory and existing memories
110
- */
111
- export async function detectContradictions(check) {
112
- const result = {
113
- hasContradiction: false,
114
- supersededMemories: [],
115
- confidence: 0,
116
- reason: '',
117
- };
118
- try {
119
- const db = await getDb();
120
- const schema = await getSchema();
121
- // Get memories from same project with similar content
122
- const whereClause = check.projectId
123
- ? eq(schema.memories.projectId, check.projectId)
124
- : undefined;
125
- const existingMemories = await db
126
- .select()
127
- .from(schema.memories)
128
- .where(whereClause)
129
- .limit(100);
130
- if (existingMemories.length === 0) {
131
- return result;
132
- }
133
- const newSubject = extractSubject(check.newContent);
134
- const newEntities = extractKeyEntities(check.newContent);
135
- const newHasNegation = hasNegation(check.newContent);
136
- const newHasUpdate = hasUpdateIndicator(check.newContent);
137
- const toSupersede = [];
138
- let maxConfidence = 0;
139
- let reasons = [];
140
- for (const existing of existingMemories) {
141
- // Skip already superseded memories
142
- if (existing.status === 'superseded' || existing.status === 'merged') {
143
- continue;
144
- }
145
- // Skip protected memories
146
- if (existing.isProtected) {
147
- continue;
148
- }
149
- const existingSubject = extractSubject(existing.content);
150
- const similarity = calculateSimilarity(check.newContent, existing.content);
151
- const subjectSimilarity = calculateSimilarity(newSubject, existingSubject);
152
- // Check for entity overlap
153
- const existingEntities = extractKeyEntities(existing.content);
154
- const entityOverlap = newEntities.filter(e => existingEntities.some(ee => ee.toLowerCase().includes(e.toLowerCase()) ||
155
- e.toLowerCase().includes(ee.toLowerCase())));
156
- // Calculate temporal relationship between memories
157
- const temporalRelationship = calculateTemporalRelationship(existing.validFrom, existing.validTo, new Date() // current time for new memory
158
- );
159
- // Detect contradiction scenarios with temporal awareness
160
- // Scenario 1: High similarity with negation in new content
161
- if (similarity > 0.5 && newHasNegation && subjectSimilarity > 0.4) {
162
- // Adjust confidence based on temporal relevance
163
- let temporalFactor = 1.0;
164
- if (temporalRelationship === 'existing_is_newer') {
165
- temporalFactor = 0.7; // Lower confidence if existing is newer
166
- }
167
- else if (temporalRelationship === 'existing_is_older') {
168
- temporalFactor = 1.2; // Higher confidence if existing is older
169
- }
170
- toSupersede.push(existing.id);
171
- maxConfidence = Math.max(maxConfidence, similarity * 0.9 * temporalFactor);
172
- reasons.push(`negation of similar content (${(similarity * 100).toFixed(0)}% similar)`);
173
- continue;
174
- }
175
- // Scenario 2: Update indicator with overlapping subject
176
- if (newHasUpdate && subjectSimilarity > 0.5) {
177
- // Boost confidence for updates when existing is older
178
- let temporalFactor = 1.0;
179
- if (temporalRelationship === 'existing_is_older') {
180
- temporalFactor = 1.3; // Higher confidence for updating older info
181
- }
182
- toSupersede.push(existing.id);
183
- maxConfidence = Math.max(maxConfidence, subjectSimilarity * 0.85 * temporalFactor);
184
- reasons.push(`update to existing information`);
185
- continue;
186
- }
187
- // Scenario 3: Same type, high subject similarity, different conclusion
188
- if (existing.type === check.newType && subjectSimilarity > 0.6) {
189
- // Check if conclusions differ
190
- const existingHasNegation = hasNegation(existing.content);
191
- // XOR: one has negation, other doesn't
192
- if (newHasNegation !== existingHasNegation) {
193
- // Adjust confidence based on temporal relationship
194
- let temporalFactor = 1.0;
195
- if (temporalRelationship === 'existing_is_newer') {
196
- temporalFactor = 0.8; // Lower confidence if contradicting newer info
197
- }
198
- else if (temporalRelationship === 'existing_is_older') {
199
- temporalFactor = 1.1; // Higher confidence if contradicting older info
200
- }
201
- toSupersede.push(existing.id);
202
- maxConfidence = Math.max(maxConfidence, subjectSimilarity * 0.8 * temporalFactor);
203
- reasons.push(`contradicting statement about same topic`);
204
- continue;
205
- }
206
- }
207
- // Scenario 4: Entity overlap with correction signals
208
- if (entityOverlap.length >= 2 && similarity > 0.3) {
209
- const correctionSignals = /\b(fixed|changed|updated|replaced|removed|added)\b/i.test(check.newContent);
210
- if (correctionSignals) {
211
- // Consider temporal relevance for corrections
212
- let temporalFactor = 1.0;
213
- if (temporalRelationship === 'existing_is_older') {
214
- temporalFactor = 1.2; // Higher confidence for correcting older info
215
- }
216
- toSupersede.push(existing.id);
217
- maxConfidence = Math.max(maxConfidence, 0.75 * temporalFactor);
218
- reasons.push(`correction involving ${entityOverlap.slice(0, 2).join(', ')}`);
219
- continue;
220
- }
221
- }
222
- // Scenario 5: Very high similarity (near-duplicate) - supersede older
223
- if (similarity > 0.85) {
224
- // Prefer to supersede older memories with newer ones
225
- let temporalFactor = 1.0;
226
- if (temporalRelationship === 'existing_is_older') {
227
- temporalFactor = 1.1; // Slight boost for superseding older
228
- }
229
- else if (temporalRelationship === 'existing_is_newer') {
230
- temporalFactor = 0.9; // Slight reduction for superseding newer
231
- }
232
- toSupersede.push(existing.id);
233
- maxConfidence = Math.max(maxConfidence, similarity * temporalFactor);
234
- reasons.push(`near-duplicate replacement`);
235
- continue;
236
- }
237
- // Scenario 6: Temporal inconsistency - same subject but different time periods
238
- if (subjectSimilarity > 0.7 && similarity > 0.4 &&
239
- existing.validFrom && existing.validTo) {
240
- // Check if temporal periods don't overlap reasonably
241
- const newValidFrom = new Date(); // When we learned this
242
- const newValidTo = null; // Open-ended by default
243
- const hasTemporalConflict = checkTemporalPeriodConflict(existing.validFrom, existing.validTo, newValidFrom, newValidTo);
244
- if (hasTemporalConflict) {
245
- toSupersede.push(existing.id);
246
- maxConfidence = Math.max(maxConfidence, 0.8);
247
- reasons.push(`temporal inconsistency with existing fact`);
248
- continue;
249
- }
250
- }
251
- }
252
- if (toSupersede.length > 0) {
253
- result.hasContradiction = true;
254
- result.supersededMemories = [...new Set(toSupersede)]; // Dedupe
255
- result.confidence = maxConfidence;
256
- result.reason = reasons[0] || 'contradiction detected';
257
- }
258
- }
259
- catch (error) {
260
- logger.error('Error detecting contradictions', error);
261
- }
262
- return result;
263
- }
264
- /**
265
- * Apply supersession to memories - archive old ones and create associations
266
- */
267
- export async function applySupersession(newMemoryId, supersededIds, confidence) {
268
- if (supersededIds.length === 0)
269
- return;
270
- try {
271
- const db = await getDb();
272
- const schema = await getSchema();
273
- const now = new Date();
274
- // Update superseded memories
275
- await db
276
- .update(schema.memories)
277
- .set({
278
- status: 'superseded',
279
- supersededBy: newMemoryId,
280
- supersededAt: now,
281
- updatedAt: now,
282
- })
283
- .where(inArray(schema.memories.id, supersededIds));
284
- // Create associations for traceability
285
- for (const oldId of supersededIds) {
286
- await createAssociation(newMemoryId, oldId, 'supersedes', confidence);
287
- }
288
- logger.info('Applied supersession', {
289
- newMemoryId,
290
- supersededCount: supersededIds.length,
291
- confidence,
292
- });
293
- }
294
- catch (error) {
295
- logger.error('Error applying supersession', error);
296
- }
297
- }
298
- /**
299
- * Check for temporal contradictions (facts that are no longer valid)
300
- */
301
- export async function checkTemporalContradictions(content, projectId) {
302
- const supersededIds = [];
303
- try {
304
- // Look for temporal update patterns
305
- const temporalUpdates = content.match(/\b(as of|starting|beginning|from now|effective)\s+(\d{4}|\w+\s+\d{1,2})/gi);
306
- if (!temporalUpdates || temporalUpdates.length === 0) {
307
- return supersededIds;
308
- }
309
- const db = await getDb();
310
- const schema = await getSchema();
311
- // Find memories with overlapping subject but older validTo dates
312
- const subject = extractSubject(content);
313
- const whereClause = projectId
314
- ? and(eq(schema.memories.projectId, projectId), eq(schema.memories.status, 'active'))
315
- : eq(schema.memories.status, 'active');
316
- const candidates = await db
317
- .select()
318
- .from(schema.memories)
319
- .where(whereClause)
320
- .limit(50);
321
- for (const candidate of candidates) {
322
- const candidateSubject = extractSubject(candidate.content);
323
- const similarity = calculateSimilarity(subject, candidateSubject);
324
- if (similarity > 0.5 && candidate.validTo) {
325
- const validToDate = new Date(candidate.validTo);
326
- const now = new Date();
327
- // If the candidate's validity period has passed
328
- if (validToDate < now) {
329
- supersededIds.push(candidate.id);
330
- }
331
- }
332
- }
333
- }
334
- catch (error) {
335
- logger.error('Error checking temporal contradictions', error);
336
- }
337
- return supersededIds;
338
- }
339
- /**
340
- * Integrated contradiction resolution for the write path
341
- * Call this before storing a new memory
342
- */
343
- export async function resolveContradictions(content, type, projectId) {
344
- // Detect standard contradictions
345
- const contradictionResult = await detectContradictions({
346
- newContent: content,
347
- newType: type,
348
- projectId,
349
- });
350
- // Also check temporal contradictions
351
- const temporalSuperseded = await checkTemporalContradictions(content, projectId);
352
- // Combine results
353
- const allSuperseded = [
354
- ...new Set([
355
- ...contradictionResult.supersededMemories,
356
- ...temporalSuperseded,
357
- ]),
358
- ];
359
- const maxConfidence = Math.max(contradictionResult.confidence, temporalSuperseded.length > 0 ? 0.7 : 0);
360
- return {
361
- shouldProceed: true, // Always proceed, but track supersessions
362
- supersededIds: allSuperseded,
363
- confidence: maxConfidence,
364
- reason: contradictionResult.reason ||
365
- (temporalSuperseded.length > 0 ? 'temporal supersession' : ''),
366
- };
367
- }
368
- //# sourceMappingURL=contradiction-resolver.js.map
@@ -1,19 +0,0 @@
1
- export interface EditProposal {
2
- id: string;
3
- memoryId: string;
4
- currentContent: string;
5
- proposedContent: string;
6
- reason: string;
7
- conflictWarnings: string[];
8
- status: 'pending' | 'approved' | 'rejected' | 'expired';
9
- version: number;
10
- createdAt: Date;
11
- reviewedAt?: Date;
12
- reviewNotes?: string;
13
- }
14
- export declare function createEditProposal(memoryId: string, currentContent: string, proposedContent: string, reason: string, userId?: string): Promise<EditProposal>;
15
- export declare function approveEditProposal(proposalId: string): Promise<boolean>;
16
- export declare function rejectEditProposal(proposalId: string, reviewNotes: string): Promise<boolean>;
17
- export declare function detectConflicts(memoryId: string, proposedContent: string): Promise<string[]>;
18
- export declare function getEditProposals(memoryId?: string, status?: 'pending' | 'approved' | 'rejected'): Promise<EditProposal[]>;
19
- //# sourceMappingURL=edit-workflow.d.ts.map
@@ -1,120 +0,0 @@
1
- import { randomUUID } from 'crypto';
2
- import { eq, and, sql } from 'drizzle-orm';
3
- import { getDb } from '../../db/index.js';
4
- import { getSchema } from '../../db/schema.js';
5
- import { createDatabaseClient } from '../storage/database.js';
6
- export async function createEditProposal(memoryId, currentContent, proposedContent, reason, userId) {
7
- const db = createDatabaseClient(await getDb());
8
- const schema = await getSchema();
9
- const { memoryEditProposals } = schema;
10
- const proposalId = randomUUID();
11
- const now = new Date();
12
- await db.insert(memoryEditProposals).values({
13
- id: proposalId,
14
- memoryId,
15
- currentContent,
16
- proposedContent,
17
- reason,
18
- conflictWarnings: [],
19
- status: 'pending',
20
- version: 1,
21
- createdAt: now,
22
- userId,
23
- });
24
- // Run conflict detection
25
- const conflicts = await detectConflicts(memoryId, proposedContent);
26
- await db.update(memoryEditProposals)
27
- .set({ conflictWarnings: conflicts })
28
- .where(eq(memoryEditProposals.id, proposalId));
29
- return {
30
- id: proposalId,
31
- memoryId,
32
- currentContent,
33
- proposedContent,
34
- reason,
35
- conflictWarnings: conflicts,
36
- status: 'pending',
37
- version: 1,
38
- createdAt: now,
39
- };
40
- }
41
- export async function approveEditProposal(proposalId) {
42
- const db = createDatabaseClient(await getDb());
43
- const schema = await getSchema();
44
- const { memoryEditProposals, memories } = schema;
45
- // Get proposal
46
- const proposal = await db.select()
47
- .from(memoryEditProposals)
48
- .where(eq(memoryEditProposals.id, proposalId))
49
- .limit(1);
50
- if (proposal.length === 0)
51
- return false;
52
- // Update memory content
53
- await db.update(memories)
54
- .set({
55
- content: proposal[0].proposedContent,
56
- version: sql `${memories.version} + 1`,
57
- updatedAt: new Date()
58
- })
59
- .where(eq(memories.id, proposal[0].memoryId));
60
- // Mark proposal as approved
61
- await db.update(memoryEditProposals)
62
- .set({ status: 'approved', reviewedAt: new Date() })
63
- .where(eq(memoryEditProposals.id, proposalId));
64
- return true;
65
- }
66
- export async function rejectEditProposal(proposalId, reviewNotes) {
67
- const db = createDatabaseClient(await getDb());
68
- const schema = await getSchema();
69
- const { memoryEditProposals } = schema;
70
- await db.update(memoryEditProposals)
71
- .set({ status: 'rejected', reviewNotes, reviewedAt: new Date() })
72
- .where(eq(memoryEditProposals.id, proposalId));
73
- return true;
74
- }
75
- export async function detectConflicts(memoryId, proposedContent) {
76
- const db = createDatabaseClient(await getDb());
77
- const schema = await getSchema();
78
- const { memories } = schema;
79
- // Get current memory
80
- const currentMemory = await db.select()
81
- .from(memories)
82
- .where(eq(memories.id, memoryId))
83
- .limit(1);
84
- if (currentMemory.length === 0)
85
- return [];
86
- const conflicts = [];
87
- // Check for temporal contradictions
88
- if (currentMemory[0].validFrom && currentMemory[0].validTo) {
89
- const now = new Date();
90
- if (now < new Date(currentMemory[0].validFrom) || now > new Date(currentMemory[0].validTo)) {
91
- conflicts.push('Current time is outside validity period');
92
- }
93
- }
94
- // Check for semantic contradictions with other memories
95
- const similarMemories = await db.select()
96
- .from(memories)
97
- .where(and(eq(memories.projectId, currentMemory[0].projectId), sql `memories.id != ${memoryId}`, sql `memories.content ILIKE ${proposedContent}`))
98
- .limit(5);
99
- for (const memory of similarMemories) {
100
- if (memory.id !== memoryId) {
101
- conflicts.push(`Potential contradiction with memory ${memory.id}`);
102
- }
103
- }
104
- return conflicts;
105
- }
106
- export async function getEditProposals(memoryId, status) {
107
- const db = createDatabaseClient(await getDb());
108
- const schema = await getSchema();
109
- const { memoryEditProposals } = schema;
110
- let query = db.select().from(memoryEditProposals);
111
- if (memoryId) {
112
- query = query.where(eq(memoryEditProposals.memoryId, memoryId));
113
- }
114
- if (status) {
115
- query = query.where(eq(memoryEditProposals.status, status));
116
- }
117
- const proposals = await query;
118
- return proposals;
119
- }
120
- //# sourceMappingURL=edit-workflow.js.map
@@ -1,33 +0,0 @@
1
- /**
2
- * Entity Extractor
3
- * Extracts named entities from memory content
4
- * Supports people, files, functions, dates, locations, concepts, tools, and patterns
5
- */
6
- export type EntityType = 'person' | 'file' | 'function' | 'class' | 'concept' | 'tool' | 'date' | 'location' | 'pattern' | 'technique' | 'other';
7
- export interface ExtractedEntity {
8
- name: string;
9
- type: EntityType;
10
- confidence: number;
11
- startIndex: number;
12
- endIndex: number;
13
- context: string;
14
- normalized?: string;
15
- }
16
- /**
17
- * Extract entities from content
18
- */
19
- export declare function extractEntities(content: string): Promise<ExtractedEntity[]>;
20
- /**
21
- * Link extracted entities to memory records
22
- * Creates entity records in the knowledge graph
23
- */
24
- export declare function linkEntitiesToMemories(memoryId: string, entities: ExtractedEntity[]): Promise<void>;
25
- /**
26
- * Get entities extracted from a memory based on properties
27
- */
28
- export declare function getMemoryEntities(memoryId: string): Promise<ExtractedEntity[]>;
29
- /**
30
- * Get all entities for a project
31
- */
32
- export declare function getProjectEntities(projectId: string, type?: EntityType): Promise<any[]>;
33
- //# sourceMappingURL=entity-extractor.d.ts.map