squish-memory 1.1.5 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (646) hide show
  1. package/.env.example +32 -16
  2. package/CHANGELOG.md +147 -0
  3. package/README.md +120 -78
  4. package/{scripts → bin}/dependency-manager.mjs +217 -217
  5. package/{scripts → bin}/detect-clients.mjs +78 -78
  6. package/bin/install-interactive.mjs +321 -0
  7. package/bin/squish-mcp.mjs +44 -0
  8. package/bin/squish.mjs +33 -0
  9. package/config/mcp-migration-map.json +1 -6
  10. package/config/mcp-mode-semantics.json +19 -23
  11. package/config/mcp-remote-auth.json +3 -26
  12. package/config/mcp-universal.schema.json +5 -35
  13. package/config/settings.json +107 -52
  14. package/config.js +5 -0
  15. package/config.ts +218 -0
  16. package/core/adapters/config/claude-code.ts +133 -0
  17. package/core/adapters/config/cursor.ts +90 -0
  18. package/core/adapters/config/opencode.ts +89 -0
  19. package/core/adapters/config/windsurf.ts +90 -0
  20. package/core/adapters/index.ts +102 -0
  21. package/core/adapters/timeline.ts +116 -0
  22. package/core/adapters/types.ts +166 -0
  23. package/core/agent-preferences.ts +140 -0
  24. package/core/algorithms/analytics/token-estimator.ts +216 -0
  25. package/core/algorithms/detection/hash-filters.ts +260 -0
  26. package/core/algorithms/detection/semantic-ranker.ts +194 -0
  27. package/core/algorithms/detection/two-stage-detector.ts +421 -0
  28. package/core/algorithms/handlers/approve-merge.ts +215 -0
  29. package/core/algorithms/handlers/detect-duplicates.ts +192 -0
  30. package/core/algorithms/handlers/get-stats.ts +132 -0
  31. package/core/algorithms/handlers/list-proposals.ts +130 -0
  32. package/core/algorithms/handlers/preview-merge.ts +139 -0
  33. package/core/algorithms/handlers/reject-merge.ts +93 -0
  34. package/core/algorithms/handlers/reverse-merge.ts +155 -0
  35. package/{dist/core/algorithms/index.js → core/algorithms/index.ts} +39 -26
  36. package/core/algorithms/operations/cache-maintenance.ts +182 -0
  37. package/core/algorithms/safety/safety-checks.ts +256 -0
  38. package/core/algorithms/strategies/merge-strategies.ts +381 -0
  39. package/core/algorithms/types.ts +140 -0
  40. package/core/algorithms/utils/response-builder.ts +61 -0
  41. package/core/associations.ts +363 -0
  42. package/core/beliefs/decay.ts +289 -0
  43. package/core/beliefs/extractor.ts +131 -0
  44. package/core/beliefs/store.ts +557 -0
  45. package/core/beliefs/types.ts +38 -0
  46. package/core/commands/mcp-server.ts +5 -0
  47. package/core/compression.ts +177 -0
  48. package/core/config.js +2 -0
  49. package/core/consolidation.ts +330 -0
  50. package/core/context/agent-context.ts +388 -0
  51. package/core/context/context-paging.ts +449 -0
  52. package/core/context/context-window.ts +234 -0
  53. package/core/context/context.ts +35 -0
  54. package/core/embeddings/embeddings.ts +616 -0
  55. package/core/embeddings/google-multimodal.ts +200 -0
  56. package/{dist/core/local-embeddings.js → core/embeddings/local-embeddings.ts} +12 -11
  57. package/core/embeddings/qmd-client.ts +495 -0
  58. package/core/embeddings/transformers-local.ts +261 -0
  59. package/core/embeddings.js +4 -0
  60. package/core/error-handling.ts +206 -0
  61. package/core/external +219 -0
  62. package/core/graph/entity-deduplicator.ts +232 -0
  63. package/core/graph/graph-builder.ts +257 -0
  64. package/core/graph/graph-traversal.ts +490 -0
  65. package/core/graph/index.ts +24 -0
  66. package/core/graph/llm-entity-extractor.ts +402 -0
  67. package/core/graph/multi-hop-retrieval.ts +317 -0
  68. package/core/graph/relationship-extractor.ts +465 -0
  69. package/core/hooks/agent-hooks.ts +653 -0
  70. package/core/hooks/auto-tagger.ts +149 -0
  71. package/core/hooks/capture-filter.ts +169 -0
  72. package/core/hot-cache.ts +388 -0
  73. package/core/index.ts +10 -0
  74. package/core/ingestion/agent-memory.ts +167 -0
  75. package/core/ingestion/core-memory.ts +326 -0
  76. package/core/ingestion/learnings.ts +260 -0
  77. package/core/ingestion/signal-engine.ts +266 -0
  78. package/core/integrations/obsidian-vault.ts +197 -0
  79. package/core/layers/generator.ts +115 -0
  80. package/{dist/core/lib/db-client.d.ts → core/lib/db-client.ts} +168 -114
  81. package/core/lib/parse-embedding.ts +59 -0
  82. package/{dist/core/lib/schemas.js → core/lib/schemas.ts} +102 -87
  83. package/core/lib/types.ts +49 -0
  84. package/core/lib/utils.ts +151 -0
  85. package/core/lib/validation.ts +180 -0
  86. package/core/lifecycle.ts +353 -0
  87. package/core/logger.ts +59 -0
  88. package/core/memory/bridge-discovery.ts +395 -0
  89. package/core/memory/categorizer.ts +390 -0
  90. package/core/memory/conflict-detector.ts +62 -0
  91. package/core/memory/consolidation.ts +372 -0
  92. package/core/memory/context-collector.ts +75 -0
  93. package/core/memory/contradiction-resolver.ts +494 -0
  94. package/core/memory/edit-workflow.ts +174 -0
  95. package/core/memory/entity-extractor.ts +426 -0
  96. package/core/memory/entity-resolver.ts +89 -0
  97. package/core/memory/explain.ts +112 -0
  98. package/core/memory/fact-deriver.ts +300 -0
  99. package/core/memory/fact-extractor.ts +120 -0
  100. package/core/memory/feedback-tracker.ts +200 -0
  101. package/core/memory/hooks.ts +230 -0
  102. package/core/memory/hybrid-retrieval.ts +65 -0
  103. package/core/memory/hybrid-scorer.ts +325 -0
  104. package/core/memory/hybrid-search.ts +748 -0
  105. package/core/memory/importance.ts +319 -0
  106. package/{dist/core/memory/index.js → core/memory/index.ts} +11 -10
  107. package/core/memory/loader.ts +178 -0
  108. package/core/memory/markdown/markdown-storage.ts +318 -0
  109. package/core/memory/memories.ts +565 -0
  110. package/core/memory/memory-lifecycle.ts +51 -0
  111. package/core/memory/memory-manager.ts +53 -0
  112. package/core/memory/migrate.ts +173 -0
  113. package/core/memory/normalization.ts +30 -0
  114. package/core/memory/path-strengthener.ts +211 -0
  115. package/core/memory/progressive-disclosure.ts +392 -0
  116. package/core/memory/query-processor.ts +130 -0
  117. package/core/memory/query-rewriter.ts +153 -0
  118. package/core/memory/response-analyzer.ts +81 -0
  119. package/core/memory/retrieval-feedback.ts +276 -0
  120. package/core/memory/serialization.ts +83 -0
  121. package/core/memory/stale-cleaner.ts +147 -0
  122. package/core/memory/stats.ts +181 -0
  123. package/core/memory/telemetry.ts +392 -0
  124. package/core/memory/temporal-facts.ts +356 -0
  125. package/core/memory/temporal-parser.ts +477 -0
  126. package/core/memory/trigger-detector.ts +104 -0
  127. package/core/memory/write-gate.ts +288 -0
  128. package/{dist/core/places/index.js → core/places/index.ts} +12 -12
  129. package/core/places/memory-places.ts +339 -0
  130. package/core/places/places.ts +406 -0
  131. package/core/places/rules.ts +308 -0
  132. package/core/places/walking.ts +192 -0
  133. package/core/projects +89 -0
  134. package/core/projects.ts +131 -0
  135. package/core/redis.ts +82 -0
  136. package/core/responses.ts +187 -0
  137. package/core/runtime/trust-report.ts +195 -0
  138. package/core/runtime/trust-state.ts +360 -0
  139. package/core/scheduler/cron-scheduler.ts +590 -0
  140. package/core/scheduler/heartbeat.ts +91 -0
  141. package/{dist/core/scheduler/index.js → core/scheduler/index.ts} +8 -8
  142. package/core/scheduler/job-runner.ts +197 -0
  143. package/core/search/conversations.ts +166 -0
  144. package/core/search/entities.ts +46 -0
  145. package/core/search/folder-context.ts +154 -0
  146. package/core/search/graph-boost.ts +22 -0
  147. package/{dist/core/search/index.js → core/search/index.ts} +4 -5
  148. package/core/search/qmd-wrapper.ts +84 -0
  149. package/core/security/encrypt.ts +51 -0
  150. package/core/security/governance.ts +102 -0
  151. package/core/security/privacy.ts +108 -0
  152. package/core/security/secret-detector.ts +122 -0
  153. package/core/session/auto-load.ts +160 -0
  154. package/core/session/entity-tracker.ts +363 -0
  155. package/{dist/core/session/index.js → core/session/index.ts} +7 -7
  156. package/core/session/reference-resolver.ts +158 -0
  157. package/core/session/self-iteration-job.ts +478 -0
  158. package/core/session/session-hooks.ts +69 -0
  159. package/core/session/types.ts +36 -0
  160. package/core/session/working-set.ts +275 -0
  161. package/{dist/core/snapshots/cleanup.js → core/snapshots/cleanup.ts} +13 -12
  162. package/core/snapshots/comparison.ts +59 -0
  163. package/core/snapshots/creation.ts +139 -0
  164. package/core/snapshots/retrieval.ts +44 -0
  165. package/core/snapshots/stats.ts +63 -0
  166. package/core/storage/cache.ts +241 -0
  167. package/core/storage/database.ts +23 -0
  168. package/{dist/core/summarization/cleanup.js → core/summarization/cleanup.ts} +13 -12
  169. package/core/summarization/queries.ts +32 -0
  170. package/core/summarization/stats.ts +64 -0
  171. package/core/summarization/strategies.ts +52 -0
  172. package/core/summarization.ts +248 -0
  173. package/core/temporal-facts.ts +244 -0
  174. package/core/tracing/collector.ts +470 -0
  175. package/core/tracing/visualizer.ts +195 -0
  176. package/core/utils/cleanup-operations.ts +50 -0
  177. package/core/utils/content-extraction.ts +95 -0
  178. package/core/utils/filter-builder.ts +56 -0
  179. package/core/utils/history-traversal.ts +63 -0
  180. package/core/utils/memory-operations.ts +56 -0
  181. package/core/utils/query-operations.ts +83 -0
  182. package/core/utils/summarization-helpers.ts +45 -0
  183. package/core/utils/temporal-queries.ts +39 -0
  184. package/{dist/core/utils/vector-operations.js → core/utils/vector-operations.ts} +135 -129
  185. package/core/utils/version-management.ts +74 -0
  186. package/core/worker.ts +333 -0
  187. package/db/adapter.ts +215 -0
  188. package/{dist/db/bootstrap.js → db/bootstrap.ts} +388 -418
  189. package/db/drizzle/migrations/0000_needy_cerebro.sql +402 -0
  190. package/db/drizzle/migrations/meta/0000_snapshot.json +3451 -0
  191. package/db/drizzle/migrations/meta/_journal.json +13 -0
  192. package/db/drizzle/schema-sqlite.ts +1032 -0
  193. package/db/drizzle/schema.ts +1128 -0
  194. package/db/drizzle.config.ts +12 -0
  195. package/db/index.ts +83 -0
  196. package/db/init.sql +5 -0
  197. package/db/migrations/associations.ts +35 -0
  198. package/db/migrations/beliefs.ts +89 -0
  199. package/db/migrations/core-memory.ts +35 -0
  200. package/db/migrations/fts.ts +59 -0
  201. package/db/migrations/index.ts +54 -0
  202. package/db/migrations/indexes.ts +36 -0
  203. package/db/migrations/learnings.ts +34 -0
  204. package/db/migrations/maintenance.ts +68 -0
  205. package/db/migrations/memories.ts +22 -0
  206. package/db/migrations/memory-places.ts +35 -0
  207. package/db/migrations/places.ts +49 -0
  208. package/db/migrations/projects.ts +21 -0
  209. package/db/migrations/tier-conversion.ts +24 -0
  210. package/db/neon.ts +22 -0
  211. package/db/schema/beliefs.ts +50 -0
  212. package/db/schema/generator.ts +159 -0
  213. package/db/schema/index.ts +58 -0
  214. package/db/schema/learnings.ts +32 -0
  215. package/db/schema/memories.ts +83 -0
  216. package/db/schema/projects.ts +33 -0
  217. package/db/schema.ts +13 -0
  218. package/db/supabase.ts +27 -0
  219. package/mcp.json.example +8 -11
  220. package/package.json +140 -159
  221. package/packages/cli/package.json +22 -0
  222. package/packages/cli/src/commands/clean.ts +68 -0
  223. package/packages/cli/src/commands/context.ts +79 -0
  224. package/packages/cli/src/commands/doctor.ts +357 -0
  225. package/packages/cli/src/commands/forget.ts +72 -0
  226. package/packages/cli/src/commands/health.ts +36 -0
  227. package/packages/cli/src/commands/inspect.ts +41 -0
  228. package/packages/cli/src/commands/link.ts +50 -0
  229. package/packages/cli/src/commands/migrate.ts +93 -0
  230. package/packages/cli/src/commands/recall.ts +99 -0
  231. package/packages/cli/src/commands/recent.ts +57 -0
  232. package/packages/cli/src/commands/remember.ts +139 -0
  233. package/packages/cli/src/commands/run.ts +58 -0
  234. package/packages/cli/src/commands/stale.ts +43 -0
  235. package/packages/cli/src/commands/stats.ts +42 -0
  236. package/packages/cli/src/index.ts +57 -0
  237. package/packages/cli/tsconfig.json +24 -0
  238. package/packages/mcp/package.json +26 -0
  239. package/packages/mcp/src/index.ts +940 -0
  240. package/packages/mcp/tsconfig.json +20 -0
  241. package/skills/squish-memory/SKILL.md +38 -35
  242. package/skills/squish-memory/{scripts/install.sh → install.sh} +1 -1
  243. package/skills/squish-memory/references/claude-desktop.json +12 -0
  244. package/skills/squish-memory/references/openclaw.json +13 -0
  245. package/skills/squish-memory/references/opencode.json +14 -0
  246. package/config/hooks/claude-code-hooks.json +0 -39
  247. package/config/hooks/cursor-hooks.json +0 -30
  248. package/config/hooks/opencode-hooks.json +0 -30
  249. package/config/hooks/windsurf-hooks.json +0 -30
  250. package/config/mcp-cli-fallback-policy.json +0 -22
  251. package/config/mcp.json +0 -38
  252. package/config/plugin-manifest.json +0 -101
  253. package/config/plugin-manifest.schema.json +0 -244
  254. package/config/plugin.json +0 -32
  255. package/config/remote-memory-policy.json +0 -32
  256. package/core/commands/context-paging.md +0 -51
  257. package/core/commands/context-status.md +0 -22
  258. package/core/commands/context.md +0 -5
  259. package/core/commands/core-memory.md +0 -56
  260. package/core/commands/health.md +0 -5
  261. package/core/commands/init.md +0 -39
  262. package/core/commands/merge.md +0 -113
  263. package/core/commands/recall.md +0 -5
  264. package/core/commands/remember.md +0 -11
  265. package/core/commands/search.md +0 -10
  266. package/dist/config.d.ts +0 -83
  267. package/dist/config.js +0 -242
  268. package/dist/core/adapters/config/claude-code.d.ts +0 -45
  269. package/dist/core/adapters/config/claude-code.js +0 -113
  270. package/dist/core/adapters/config/cursor.d.ts +0 -26
  271. package/dist/core/adapters/config/cursor.js +0 -74
  272. package/dist/core/adapters/config/opencode.d.ts +0 -23
  273. package/dist/core/adapters/config/opencode.js +0 -73
  274. package/dist/core/adapters/config/windsurf.d.ts +0 -26
  275. package/dist/core/adapters/config/windsurf.js +0 -74
  276. package/dist/core/adapters/index.d.ts +0 -45
  277. package/dist/core/adapters/index.js +0 -84
  278. package/dist/core/adapters/scripts/install-adapter.d.ts +0 -19
  279. package/dist/core/adapters/scripts/install-adapter.js +0 -149
  280. package/dist/core/adapters/timeline.d.ts +0 -23
  281. package/dist/core/adapters/timeline.js +0 -88
  282. package/dist/core/adapters/types.d.ts +0 -157
  283. package/dist/core/adapters/types.js +0 -50
  284. package/dist/core/algorithms/analytics/token-estimator.d.ts +0 -50
  285. package/dist/core/algorithms/analytics/token-estimator.js +0 -154
  286. package/dist/core/algorithms/detection/hash-filters.d.ts +0 -47
  287. package/dist/core/algorithms/detection/hash-filters.js +0 -190
  288. package/dist/core/algorithms/detection/semantic-ranker.d.ts +0 -32
  289. package/dist/core/algorithms/detection/semantic-ranker.js +0 -118
  290. package/dist/core/algorithms/detection/two-stage-detector.d.ts +0 -52
  291. package/dist/core/algorithms/detection/two-stage-detector.js +0 -299
  292. package/dist/core/algorithms/handlers/approve-merge.d.ts +0 -22
  293. package/dist/core/algorithms/handlers/approve-merge.js +0 -179
  294. package/dist/core/algorithms/handlers/detect-duplicates.d.ts +0 -47
  295. package/dist/core/algorithms/handlers/detect-duplicates.js +0 -145
  296. package/dist/core/algorithms/handlers/get-stats.d.ts +0 -39
  297. package/dist/core/algorithms/handlers/get-stats.js +0 -88
  298. package/dist/core/algorithms/handlers/list-proposals.d.ts +0 -45
  299. package/dist/core/algorithms/handlers/list-proposals.js +0 -83
  300. package/dist/core/algorithms/handlers/preview-merge.d.ts +0 -39
  301. package/dist/core/algorithms/handlers/preview-merge.js +0 -93
  302. package/dist/core/algorithms/handlers/reject-merge.d.ts +0 -28
  303. package/dist/core/algorithms/handlers/reject-merge.js +0 -69
  304. package/dist/core/algorithms/handlers/reverse-merge.d.ts +0 -21
  305. package/dist/core/algorithms/handlers/reverse-merge.js +0 -121
  306. package/dist/core/algorithms/index.d.ts +0 -21
  307. package/dist/core/algorithms/operations/cache-maintenance.d.ts +0 -12
  308. package/dist/core/algorithms/operations/cache-maintenance.js +0 -157
  309. package/dist/core/algorithms/safety/safety-checks.d.ts +0 -22
  310. package/dist/core/algorithms/safety/safety-checks.js +0 -179
  311. package/dist/core/algorithms/strategies/merge-strategies.d.ts +0 -50
  312. package/dist/core/algorithms/strategies/merge-strategies.js +0 -288
  313. package/dist/core/algorithms/types.d.ts +0 -133
  314. package/dist/core/algorithms/types.js +0 -5
  315. package/dist/core/algorithms/utils/response-builder.d.ts +0 -28
  316. package/dist/core/algorithms/utils/response-builder.js +0 -37
  317. package/dist/core/associations.d.ts +0 -31
  318. package/dist/core/associations.js +0 -248
  319. package/dist/core/autosave.d.ts +0 -19
  320. package/dist/core/autosave.js +0 -16
  321. package/dist/core/commands/managed-sync.d.ts +0 -10
  322. package/dist/core/commands/managed-sync.js +0 -64
  323. package/dist/core/commands/mcp-server.d.ts +0 -3
  324. package/dist/core/commands/mcp-server.js +0 -739
  325. package/dist/core/consolidation.d.ts +0 -37
  326. package/dist/core/consolidation.js +0 -248
  327. package/dist/core/context/agent-context.d.ts +0 -106
  328. package/dist/core/context/agent-context.js +0 -274
  329. package/dist/core/context/context-paging.d.ts +0 -80
  330. package/dist/core/context/context-paging.js +0 -328
  331. package/dist/core/context/context-window.d.ts +0 -40
  332. package/dist/core/context/context-window.js +0 -177
  333. package/dist/core/context/context.d.ts +0 -7
  334. package/dist/core/context/context.js +0 -22
  335. package/dist/core/embeddings/google-multimodal.d.ts +0 -14
  336. package/dist/core/embeddings/google-multimodal.js +0 -142
  337. package/dist/core/embeddings/qmd-client.d.ts +0 -136
  338. package/dist/core/embeddings/qmd-client.js +0 -403
  339. package/dist/core/embeddings.d.ts +0 -29
  340. package/dist/core/embeddings.js +0 -454
  341. package/dist/core/error-handling.d.ts +0 -63
  342. package/dist/core/error-handling.js +0 -173
  343. package/dist/core/external-folder/index.d.ts +0 -102
  344. package/dist/core/external-folder/index.js +0 -294
  345. package/dist/core/hooks/agent-hooks.d.ts +0 -74
  346. package/dist/core/hooks/agent-hooks.js +0 -244
  347. package/dist/core/hooks/auto-tagger.d.ts +0 -19
  348. package/dist/core/hooks/auto-tagger.js +0 -155
  349. package/dist/core/hooks/capture-filter.d.ts +0 -41
  350. package/dist/core/hooks/capture-filter.js +0 -128
  351. package/dist/core/index.d.ts +0 -10
  352. package/dist/core/index.js +0 -14
  353. package/dist/core/ingestion/agent-memory.d.ts +0 -22
  354. package/dist/core/ingestion/agent-memory.js +0 -109
  355. package/dist/core/ingestion/core-memory.d.ts +0 -78
  356. package/dist/core/ingestion/core-memory.js +0 -226
  357. package/dist/core/ingestion/learnings.d.ts +0 -57
  358. package/dist/core/ingestion/learnings.js +0 -202
  359. package/dist/core/layers/generator.d.ts +0 -25
  360. package/dist/core/layers/generator.js +0 -76
  361. package/dist/core/lib/db-client.js +0 -130
  362. package/dist/core/lib/schemas.d.ts +0 -129
  363. package/dist/core/lib/utils.d.ts +0 -14
  364. package/dist/core/lib/utils.js +0 -90
  365. package/dist/core/lib/validation.d.ts +0 -38
  366. package/dist/core/lib/validation.js +0 -151
  367. package/dist/core/lifecycle.d.ts +0 -26
  368. package/dist/core/lifecycle.js +0 -302
  369. package/dist/core/local-embeddings.d.ts +0 -11
  370. package/dist/core/logger.d.ts +0 -16
  371. package/dist/core/logger.js +0 -40
  372. package/dist/core/mcp/client.d.ts +0 -17
  373. package/dist/core/mcp/client.js +0 -101
  374. package/dist/core/mcp/index.d.ts +0 -6
  375. package/dist/core/mcp/index.js +0 -6
  376. package/dist/core/mcp/server.d.ts +0 -18
  377. package/dist/core/mcp/server.js +0 -157
  378. package/dist/core/mcp/standalone-server.d.ts +0 -13
  379. package/dist/core/mcp/standalone-server.js +0 -46
  380. package/dist/core/mcp/tools.d.ts +0 -9
  381. package/dist/core/mcp/tools.js +0 -365
  382. package/dist/core/mcp/types.d.ts +0 -315
  383. package/dist/core/mcp/types.js +0 -48
  384. package/dist/core/memory/bridge-discovery.d.ts +0 -50
  385. package/dist/core/memory/bridge-discovery.js +0 -291
  386. package/dist/core/memory/categorizer.d.ts +0 -27
  387. package/dist/core/memory/categorizer.js +0 -305
  388. package/dist/core/memory/conflict-detector.d.ts +0 -7
  389. package/dist/core/memory/conflict-detector.js +0 -43
  390. package/dist/core/memory/consolidation.d.ts +0 -42
  391. package/dist/core/memory/consolidation.js +0 -303
  392. package/dist/core/memory/context-collector.d.ts +0 -10
  393. package/dist/core/memory/context-collector.js +0 -56
  394. package/dist/core/memory/contradiction-resolver.d.ts +0 -40
  395. package/dist/core/memory/contradiction-resolver.js +0 -368
  396. package/dist/core/memory/edit-workflow.d.ts +0 -19
  397. package/dist/core/memory/edit-workflow.js +0 -120
  398. package/dist/core/memory/entity-extractor.d.ts +0 -33
  399. package/dist/core/memory/entity-extractor.js +0 -336
  400. package/dist/core/memory/entity-resolver.d.ts +0 -23
  401. package/dist/core/memory/entity-resolver.js +0 -64
  402. package/dist/core/memory/fact-extractor.d.ts +0 -24
  403. package/dist/core/memory/fact-extractor.js +0 -89
  404. package/dist/core/memory/feedback-tracker.d.ts +0 -12
  405. package/dist/core/memory/feedback-tracker.js +0 -155
  406. package/dist/core/memory/hooks.d.ts +0 -88
  407. package/dist/core/memory/hooks.js +0 -174
  408. package/dist/core/memory/hybrid-retrieval.d.ts +0 -29
  409. package/dist/core/memory/hybrid-retrieval.js +0 -139
  410. package/dist/core/memory/hybrid-scorer.d.ts +0 -40
  411. package/dist/core/memory/hybrid-scorer.js +0 -284
  412. package/dist/core/memory/hybrid-search.d.ts +0 -20
  413. package/dist/core/memory/hybrid-search.js +0 -359
  414. package/dist/core/memory/importance.d.ts +0 -63
  415. package/dist/core/memory/importance.js +0 -298
  416. package/dist/core/memory/index.d.ts +0 -8
  417. package/dist/core/memory/loader.d.ts +0 -31
  418. package/dist/core/memory/loader.js +0 -141
  419. package/dist/core/memory/markdown/markdown-storage.d.ts +0 -72
  420. package/dist/core/memory/markdown/markdown-storage.js +0 -243
  421. package/dist/core/memory/memories.d.ts +0 -47
  422. package/dist/core/memory/memories.js +0 -449
  423. package/dist/core/memory/memory-lifecycle.d.ts +0 -8
  424. package/dist/core/memory/memory-lifecycle.js +0 -55
  425. package/dist/core/memory/memory-manager.d.ts +0 -15
  426. package/dist/core/memory/memory-manager.js +0 -46
  427. package/dist/core/memory/migrate.d.ts +0 -21
  428. package/dist/core/memory/migrate.js +0 -134
  429. package/dist/core/memory/normalization.d.ts +0 -22
  430. package/dist/core/memory/normalization.js +0 -26
  431. package/dist/core/memory/progressive-disclosure.d.ts +0 -43
  432. package/dist/core/memory/progressive-disclosure.js +0 -280
  433. package/dist/core/memory/query-processor.d.ts +0 -21
  434. package/dist/core/memory/query-processor.js +0 -72
  435. package/dist/core/memory/query-rewriter.d.ts +0 -13
  436. package/dist/core/memory/query-rewriter.js +0 -118
  437. package/dist/core/memory/response-analyzer.d.ts +0 -9
  438. package/dist/core/memory/response-analyzer.js +0 -61
  439. package/dist/core/memory/serialization.d.ts +0 -10
  440. package/dist/core/memory/serialization.js +0 -84
  441. package/dist/core/memory/stats.d.ts +0 -22
  442. package/dist/core/memory/stats.js +0 -138
  443. package/dist/core/memory/telemetry.d.ts +0 -69
  444. package/dist/core/memory/telemetry.js +0 -313
  445. package/dist/core/memory/temporal-facts.d.ts +0 -41
  446. package/dist/core/memory/temporal-facts.js +0 -283
  447. package/dist/core/memory/temporal-parser.d.ts +0 -32
  448. package/dist/core/memory/temporal-parser.js +0 -385
  449. package/dist/core/memory/trigger-detector.d.ts +0 -14
  450. package/dist/core/memory/trigger-detector.js +0 -42
  451. package/dist/core/memory/write-gate.d.ts +0 -54
  452. package/dist/core/memory/write-gate.js +0 -210
  453. package/dist/core/namespaces/index.d.ts +0 -71
  454. package/dist/core/namespaces/index.js +0 -305
  455. package/dist/core/namespaces/uri-parser.d.ts +0 -31
  456. package/dist/core/namespaces/uri-parser.js +0 -74
  457. package/dist/core/obsidian-vault.d.ts +0 -30
  458. package/dist/core/obsidian-vault.js +0 -94
  459. package/dist/core/places/index.d.ts +0 -14
  460. package/dist/core/places/memory-places.d.ts +0 -68
  461. package/dist/core/places/memory-places.js +0 -261
  462. package/dist/core/places/places.d.ts +0 -88
  463. package/dist/core/places/places.js +0 -314
  464. package/dist/core/places/rules.d.ts +0 -74
  465. package/dist/core/places/rules.js +0 -240
  466. package/dist/core/places/walking.d.ts +0 -56
  467. package/dist/core/places/walking.js +0 -121
  468. package/dist/core/projects.d.ts +0 -17
  469. package/dist/core/projects.js +0 -108
  470. package/dist/core/redis.d.ts +0 -11
  471. package/dist/core/redis.js +0 -69
  472. package/dist/core/responses.d.ts +0 -96
  473. package/dist/core/responses.js +0 -122
  474. package/dist/core/scheduler/cron-scheduler.d.ts +0 -32
  475. package/dist/core/scheduler/cron-scheduler.js +0 -332
  476. package/dist/core/scheduler/heartbeat.d.ts +0 -11
  477. package/dist/core/scheduler/heartbeat.js +0 -73
  478. package/dist/core/scheduler/index.d.ts +0 -8
  479. package/dist/core/scheduler/job-runner.d.ts +0 -11
  480. package/dist/core/scheduler/job-runner.js +0 -164
  481. package/dist/core/search/conversations.d.ts +0 -25
  482. package/dist/core/search/conversations.js +0 -110
  483. package/dist/core/search/entities.d.ts +0 -12
  484. package/dist/core/search/entities.js +0 -31
  485. package/dist/core/search/folder-context.d.ts +0 -25
  486. package/dist/core/search/folder-context.js +0 -119
  487. package/dist/core/search/graph-boost.d.ts +0 -7
  488. package/dist/core/search/graph-boost.js +0 -23
  489. package/dist/core/search/index.d.ts +0 -4
  490. package/dist/core/search/qmd-search.d.ts +0 -61
  491. package/dist/core/search/qmd-search.js +0 -178
  492. package/dist/core/security/encrypt.d.ts +0 -6
  493. package/dist/core/security/encrypt.js +0 -47
  494. package/dist/core/security/governance.d.ts +0 -26
  495. package/dist/core/security/governance.js +0 -79
  496. package/dist/core/security/privacy.d.ts +0 -23
  497. package/dist/core/security/privacy.js +0 -82
  498. package/dist/core/security/secret-detector.d.ts +0 -32
  499. package/dist/core/security/secret-detector.js +0 -88
  500. package/dist/core/session/auto-load.d.ts +0 -6
  501. package/dist/core/session/auto-load.js +0 -119
  502. package/dist/core/session/index.d.ts +0 -7
  503. package/dist/core/session/self-iteration-job.d.ts +0 -20
  504. package/dist/core/session/self-iteration-job.js +0 -282
  505. package/dist/core/session/session-hooks.d.ts +0 -18
  506. package/dist/core/session/session-hooks.js +0 -58
  507. package/dist/core/session/types.d.ts +0 -26
  508. package/dist/core/session/types.js +0 -10
  509. package/dist/core/session-hooks/self-iteration-job.d.ts +0 -20
  510. package/dist/core/session-hooks/self-iteration-job.js +0 -282
  511. package/dist/core/session-hooks/session-hooks.d.ts +0 -18
  512. package/dist/core/session-hooks/session-hooks.js +0 -58
  513. package/dist/core/snapshots/cleanup.d.ts +0 -9
  514. package/dist/core/snapshots/comparison.d.ts +0 -19
  515. package/dist/core/snapshots/comparison.js +0 -43
  516. package/dist/core/snapshots/creation.d.ts +0 -19
  517. package/dist/core/snapshots/creation.js +0 -126
  518. package/dist/core/snapshots/retrieval.d.ts +0 -7
  519. package/dist/core/snapshots/retrieval.js +0 -41
  520. package/dist/core/snapshots/stats.d.ts +0 -11
  521. package/dist/core/snapshots/stats.js +0 -52
  522. package/dist/core/snapshots.d.ts +0 -29
  523. package/dist/core/snapshots.js +0 -220
  524. package/dist/core/storage/cache.d.ts +0 -13
  525. package/dist/core/storage/cache.js +0 -202
  526. package/dist/core/storage/database.d.ts +0 -12
  527. package/dist/core/storage/database.js +0 -12
  528. package/dist/core/summarization/cleanup.d.ts +0 -9
  529. package/dist/core/summarization/queries.d.ts +0 -9
  530. package/dist/core/summarization/queries.js +0 -28
  531. package/dist/core/summarization/stats.d.ts +0 -14
  532. package/dist/core/summarization/stats.js +0 -52
  533. package/dist/core/summarization/strategies.d.ts +0 -24
  534. package/dist/core/summarization/strategies.js +0 -28
  535. package/dist/core/summarization.d.ts +0 -37
  536. package/dist/core/summarization.js +0 -188
  537. package/dist/core/sync/qmd-sync.d.ts +0 -94
  538. package/dist/core/sync/qmd-sync.js +0 -201
  539. package/dist/core/temporal-facts.d.ts +0 -54
  540. package/dist/core/temporal-facts.js +0 -193
  541. package/dist/core/toon.d.ts +0 -43
  542. package/dist/core/toon.js +0 -160
  543. package/dist/core/tracing/collector.d.ts +0 -111
  544. package/dist/core/tracing/collector.js +0 -350
  545. package/dist/core/tracing/visualizer.d.ts +0 -32
  546. package/dist/core/tracing/visualizer.js +0 -165
  547. package/dist/core/utils/cleanup-operations.d.ts +0 -13
  548. package/dist/core/utils/cleanup-operations.js +0 -44
  549. package/dist/core/utils/content-extraction.d.ts +0 -19
  550. package/dist/core/utils/content-extraction.js +0 -75
  551. package/dist/core/utils/filter-builder.d.ts +0 -13
  552. package/dist/core/utils/filter-builder.js +0 -44
  553. package/dist/core/utils/history-traversal.d.ts +0 -13
  554. package/dist/core/utils/history-traversal.js +0 -50
  555. package/dist/core/utils/memory-operations.d.ts +0 -17
  556. package/dist/core/utils/memory-operations.js +0 -43
  557. package/dist/core/utils/query-operations.d.ts +0 -18
  558. package/dist/core/utils/query-operations.js +0 -65
  559. package/dist/core/utils/summarization-helpers.d.ts +0 -21
  560. package/dist/core/utils/summarization-helpers.js +0 -38
  561. package/dist/core/utils/temporal-queries.d.ts +0 -13
  562. package/dist/core/utils/temporal-queries.js +0 -27
  563. package/dist/core/utils/vector-operations.d.ts +0 -71
  564. package/dist/core/utils/version-management.d.ts +0 -9
  565. package/dist/core/utils/version-management.js +0 -61
  566. package/dist/core/worker.d.ts +0 -82
  567. package/dist/core/worker.js +0 -272
  568. package/dist/db/adapter.d.ts +0 -7
  569. package/dist/db/adapter.js +0 -175
  570. package/dist/db/bootstrap.d.ts +0 -9
  571. package/dist/db/drizzle/schema-sqlite.d.ts +0 -4837
  572. package/dist/db/drizzle/schema-sqlite.js +0 -684
  573. package/dist/db/drizzle/schema.d.ts +0 -4082
  574. package/dist/db/drizzle/schema.js +0 -770
  575. package/dist/db/drizzle.config.d.ts +0 -3
  576. package/dist/db/drizzle.config.js +0 -12
  577. package/dist/db/index.d.ts +0 -7
  578. package/dist/db/index.js +0 -89
  579. package/dist/db/neon.d.ts +0 -8
  580. package/dist/db/neon.js +0 -20
  581. package/dist/db/schema/index.d.ts +0 -40
  582. package/dist/db/schema/index.js +0 -105
  583. package/dist/db/schema/tables/context-sessions.d.ts +0 -9
  584. package/dist/db/schema/tables/context-sessions.js +0 -37
  585. package/dist/db/schema/tables/conversations.d.ts +0 -9
  586. package/dist/db/schema/tables/conversations.js +0 -47
  587. package/dist/db/schema/tables/core-memory.d.ts +0 -9
  588. package/dist/db/schema/tables/core-memory.js +0 -41
  589. package/dist/db/schema/tables/entities.d.ts +0 -9
  590. package/dist/db/schema/tables/entities.js +0 -39
  591. package/dist/db/schema/tables/entity-relations.d.ts +0 -9
  592. package/dist/db/schema/tables/entity-relations.js +0 -31
  593. package/dist/db/schema/tables/learnings.d.ts +0 -9
  594. package/dist/db/schema/tables/learnings.js +0 -66
  595. package/dist/db/schema/tables/memories.d.ts +0 -9
  596. package/dist/db/schema/tables/memories.js +0 -161
  597. package/dist/db/schema/tables/memory-associations.d.ts +0 -9
  598. package/dist/db/schema/tables/memory-associations.js +0 -39
  599. package/dist/db/schema/tables/memory-hash-cache.d.ts +0 -9
  600. package/dist/db/schema/tables/memory-hash-cache.js +0 -29
  601. package/dist/db/schema/tables/memory-merge-history.d.ts +0 -9
  602. package/dist/db/schema/tables/memory-merge-history.js +0 -33
  603. package/dist/db/schema/tables/memory-merge-proposals.d.ts +0 -9
  604. package/dist/db/schema/tables/memory-merge-proposals.js +0 -39
  605. package/dist/db/schema/tables/messages.d.ts +0 -9
  606. package/dist/db/schema/tables/messages.js +0 -41
  607. package/dist/db/schema/tables/namespaces.d.ts +0 -9
  608. package/dist/db/schema/tables/namespaces.js +0 -37
  609. package/dist/db/schema/tables/projects.d.ts +0 -9
  610. package/dist/db/schema/tables/projects.js +0 -31
  611. package/dist/db/schema/tables/users.d.ts +0 -9
  612. package/dist/db/schema/tables/users.js +0 -27
  613. package/dist/db/schema.d.ts +0 -3
  614. package/dist/db/schema.js +0 -11
  615. package/dist/db/supabase.d.ts +0 -9
  616. package/dist/db/supabase.js +0 -24
  617. package/dist/index.d.ts +0 -7
  618. package/dist/index.js +0 -1677
  619. package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
  620. package/dist/webui/server.d.ts +0 -5
  621. package/dist/webui/server.js +0 -642
  622. package/generated/mcp/manifest.json +0 -23
  623. package/generated/mcp/mcp-servers.json +0 -25
  624. package/generated/mcp/mcporter.json +0 -34
  625. package/generated/mcp/openclaw-memory-qmd.json +0 -17
  626. package/generated/mcp/runtime.json +0 -12
  627. package/scripts/README.md +0 -60
  628. package/scripts/build-release.sh +0 -36
  629. package/scripts/check-secrets.js +0 -132
  630. package/scripts/copy-runtime-assets.mjs +0 -26
  631. package/scripts/generate-mcp.mjs +0 -264
  632. package/scripts/github-release.sh +0 -77
  633. package/scripts/init-dirs.mjs +0 -13
  634. package/scripts/install-claude-code.sh +0 -85
  635. package/scripts/install-cursor.sh +0 -56
  636. package/scripts/install-hooks.sh +0 -73
  637. package/scripts/install-interactive.mjs +0 -357
  638. package/scripts/install-opencode.sh +0 -75
  639. package/scripts/install-plugin.mjs +0 -415
  640. package/scripts/install-windsurf.sh +0 -67
  641. package/scripts/remote-preflight.mjs +0 -62
  642. package/scripts/squish-fallback.mjs +0 -132
  643. package/scripts/test-interactive.mjs +0 -131
  644. package/scripts/verify-mcp.mjs +0 -214
  645. package/skills/squish-memory/scripts/install.mjs +0 -335
  646. package/skills/squish-memory/write_skill.js +0 -2
@@ -0,0 +1,363 @@
1
+ /**
2
+ * Session Entity Tracker
3
+ *
4
+ * Tracks "active" entities in conversation sessions to enable
5
+ * reference resolution (e.g., resolving "she" to "Alice").
6
+ */
7
+
8
+ import { eq, and, desc, sql } from 'drizzle-orm';
9
+ import { getDb } from '../../db/index.js';
10
+ import { getSchema } from '../../db/schema.js';
11
+ import { logger } from '../logger.js';
12
+
13
+ // ─── Types ──────────────────────────────────────────────────────────────────
14
+
15
+ export interface SessionEntity {
16
+ entityId: string;
17
+ entityName: string;
18
+ entityType: string;
19
+ mentionCount: number;
20
+ lastMentionedAt: Date;
21
+ salience: number; // 0-1, higher = more relevant
22
+ }
23
+
24
+ export interface SessionEntityMap {
25
+ sessionId: string;
26
+ entities: Map<string, SessionEntity>;
27
+ updatedAt: Date;
28
+ }
29
+
30
+ // ─── In-Memory Session Cache ─────────────────────────────────────────────────
31
+
32
+ const sessionCache = new Map<string, SessionEntityMap>();
33
+ const MAX_SESSIONS = 100;
34
+ const ENTITY_SALIENCE_DECAY = 0.85; // Per mention, older mentions decay
35
+ const MAX_SESSION_ENTITIES = 50;
36
+
37
+ /**
38
+ * Track an entity mention in a session.
39
+ * Updates salience based on recency and frequency.
40
+ */
41
+ export function trackEntityInSession(
42
+ sessionId: string,
43
+ entityId: string,
44
+ entityName: string,
45
+ entityType: string
46
+ ): void {
47
+ let session = sessionCache.get(sessionId);
48
+
49
+ if (!session) {
50
+ session = {
51
+ sessionId,
52
+ entities: new Map(),
53
+ updatedAt: new Date(),
54
+ };
55
+ sessionCache.set(sessionId, session);
56
+ }
57
+
58
+ // Evict old sessions if cache is full
59
+ if (sessionCache.size > MAX_SESSIONS) {
60
+ const oldestKey = [...sessionCache.entries()]
61
+ .sort(([, a], [, b]) => a.updatedAt.getTime() - b.updatedAt.getTime())[0][0];
62
+ sessionCache.delete(oldestKey);
63
+ }
64
+
65
+ const existing = session.entities.get(entityId);
66
+ const now = new Date();
67
+
68
+ if (existing) {
69
+ // Update existing entity: increase salience, update mention count
70
+ existing.mentionCount += 1;
71
+ existing.lastMentionedAt = now;
72
+ // Salience increases with each mention, but decays for older mentions
73
+ existing.salience = Math.min(1.0, existing.salience + 0.2);
74
+ } else {
75
+ // New entity for this session
76
+ session.entities.set(entityId, {
77
+ entityId,
78
+ entityName,
79
+ entityType,
80
+ mentionCount: 1,
81
+ lastMentionedAt: now,
82
+ salience: 0.5, // Start at medium salience
83
+ });
84
+ }
85
+
86
+ // Evict least salient entities if session has too many
87
+ if (session.entities.size > MAX_SESSION_ENTITIES) {
88
+ const leastSalient = [...session.entities.entries()]
89
+ .sort(([, a], [, b]) => a.salience - b.salience)[0];
90
+ if (leastSalient) {
91
+ session.entities.delete(leastSalient[0]);
92
+ }
93
+ }
94
+
95
+ session.updatedAt = now;
96
+ }
97
+
98
+ /**
99
+ * Get active entities for a session, sorted by salience.
100
+ * Applies time-based decay to salience scores.
101
+ */
102
+ export function getActiveSessionEntities(
103
+ sessionId: string,
104
+ options?: {
105
+ limit?: number;
106
+ minSalience?: number;
107
+ entityTypes?: string[];
108
+ }
109
+ ): SessionEntity[] {
110
+ const { limit = 10, minSalience = 0.1, entityTypes } = options || {};
111
+
112
+ const session = sessionCache.get(sessionId);
113
+ if (!session) return [];
114
+
115
+ const now = Date.now();
116
+ const entities: SessionEntity[] = [];
117
+
118
+ for (const [id, entity] of session.entities) {
119
+ // Apply time-based decay
120
+ const timeSinceMention = now - entity.lastMentionedAt.getTime();
121
+ const minutesSinceMention = timeSinceMention / (1000 * 60);
122
+ const timeDecay = Math.pow(ENTITY_SALIENCE_DECAY, minutesSinceMention / 5); // Decay every 5 minutes
123
+ const adjustedSalience = entity.salience * timeDecay;
124
+
125
+ // Filter by minimum salience
126
+ if (adjustedSalience < minSalience) continue;
127
+
128
+ // Filter by entity type
129
+ if (entityTypes && entityTypes.length > 0 && !entityTypes.includes(entity.entityType)) continue;
130
+
131
+ entities.push({
132
+ ...entity,
133
+ salience: adjustedSalience,
134
+ });
135
+ }
136
+
137
+ // Sort by salience (most salient first)
138
+ entities.sort((a, b) => b.salience - a.salience);
139
+
140
+ return entities.slice(0, limit);
141
+ }
142
+
143
+ /**
144
+ * Resolve a reference (pronoun, definite reference) to an entity in the session.
145
+ * Returns the most salient entity matching the reference type.
146
+ */
147
+ export function resolveReference(
148
+ sessionId: string,
149
+ reference: string
150
+ ): SessionEntity | null {
151
+ const session = sessionCache.get(sessionId);
152
+ if (!session) return null;
153
+
154
+ const lowerRef = reference.toLowerCase();
155
+
156
+ // Pronoun mapping
157
+ const pronounMap: Record<string, string[]> = {
158
+ 'he': ['person'],
159
+ 'him': ['person'],
160
+ 'his': ['person'],
161
+ 'she': ['person'],
162
+ 'her': ['person'],
163
+ 'hers': ['person'],
164
+ 'it': ['tool', 'concept', 'file', 'function', 'class'],
165
+ 'they': ['person', 'concept', 'tool'],
166
+ 'them': ['person', 'concept', 'tool'],
167
+ 'their': ['person', 'concept', 'tool'],
168
+ 'this': [], // Any type
169
+ 'that': [], // Any type
170
+ 'these': [],
171
+ 'those': [],
172
+ };
173
+
174
+ // Definite reference patterns
175
+ const definitePatterns: Array<{ pattern: RegExp; types: string[] }> = [
176
+ { pattern: /\bthe (?:project|app|application)\b/i, types: ['concept'] },
177
+ { pattern: /\bthe (?:team|group)\b/i, types: ['concept'] },
178
+ { pattern: /\bthe (?:database|db)\b/i, types: ['tool'] },
179
+ { pattern: /\bthe (?:server|service|api)\b/i, types: ['tool'] },
180
+ { pattern: /\bthe (?:issue|bug|problem|outage)\b/i, types: ['concept'] },
181
+ { pattern: /\bthe (?:file|module|component)\b/i, types: ['file'] },
182
+ ];
183
+
184
+ // Check pronouns first
185
+ const allowedTypes = pronounMap[lowerRef];
186
+ if (allowedTypes !== undefined) {
187
+ const candidates = getActiveSessionEntities(sessionId, {
188
+ limit: 3,
189
+ minSalience: 0.2,
190
+ entityTypes: allowedTypes.length > 0 ? allowedTypes : undefined,
191
+ });
192
+
193
+ // For pronouns, return the most salient entity of the right type
194
+ return candidates.length > 0 ? candidates[0] : null;
195
+ }
196
+
197
+ // Check definite references
198
+ for (const { pattern, types } of definitePatterns) {
199
+ if (pattern.test(reference)) {
200
+ const candidates = getActiveSessionEntities(sessionId, {
201
+ limit: 3,
202
+ minSalience: 0.2,
203
+ entityTypes: types,
204
+ });
205
+ return candidates.length > 0 ? candidates[0] : null;
206
+ }
207
+ }
208
+
209
+ // Try to match by name (partial match)
210
+ const nameMatch = [...session.entities.values()]
211
+ .filter(e => e.entityName.toLowerCase().includes(lowerRef))
212
+ .sort((a, b) => b.salience - a.salience)[0];
213
+
214
+ return nameMatch || null;
215
+ }
216
+
217
+ /**
218
+ * Clear session entities (e.g., when a session ends).
219
+ */
220
+ export function clearSessionEntities(sessionId: string): void {
221
+ sessionCache.delete(sessionId);
222
+ }
223
+
224
+ /**
225
+ * Get all active sessions.
226
+ */
227
+ export function getActiveSessions(): string[] {
228
+ return [...sessionCache.keys()];
229
+ }
230
+
231
+ /**
232
+ * Decay all session entities (call periodically).
233
+ * Reduces salience of all entities across all sessions.
234
+ */
235
+ export function decayAllSessionEntities(): void {
236
+ const now = Date.now();
237
+
238
+ for (const [sessionId, session] of sessionCache) {
239
+ for (const [entityId, entity] of session.entities) {
240
+ const timeSinceMention = now - entity.lastMentionedAt.getTime();
241
+ const minutesSinceMention = timeSinceMention / (1000 * 60);
242
+ entity.salience *= Math.pow(ENTITY_SALIENCE_DECAY, minutesSinceMention / 5);
243
+ }
244
+
245
+ // Remove entities with very low salience
246
+ for (const [entityId, entity] of session.entities) {
247
+ if (entity.salience < 0.01) {
248
+ session.entities.delete(entityId);
249
+ }
250
+ }
251
+
252
+ // Remove empty sessions
253
+ if (session.entities.size === 0) {
254
+ sessionCache.delete(sessionId);
255
+ }
256
+ }
257
+ }
258
+
259
+ /**
260
+ * Persist session entities to the database for durability.
261
+ * Called periodically or on session end.
262
+ */
263
+ export async function persistSessionEntities(sessionId: string): Promise<void> {
264
+ const session = sessionCache.get(sessionId);
265
+ if (!session || session.entities.size === 0) return;
266
+
267
+ try {
268
+ const db = await getDb();
269
+ const schema = await getSchema();
270
+
271
+ // Store session context in the context_sessions table
272
+ const entities = [...session.entities.values()];
273
+ const entityData = entities.map(e => ({
274
+ id: e.entityId,
275
+ name: e.entityName,
276
+ type: e.entityType,
277
+ salience: e.salience,
278
+ mentionCount: e.mentionCount,
279
+ }));
280
+
281
+ // Check if session exists
282
+ const existing = await (db as any)
283
+ .select()
284
+ .from(schema.contextSessions)
285
+ .where(eq(schema.contextSessions.id, sessionId))
286
+ .limit(1);
287
+
288
+ if (existing.length > 0) {
289
+ await (db as any)
290
+ .update(schema.contextSessions)
291
+ .set({
292
+ metadata: { entities: entityData } as any,
293
+ updatedAt: new Date(),
294
+ })
295
+ .where(eq(schema.contextSessions.id, sessionId));
296
+ }
297
+ // If session doesn't exist, we don't create it here
298
+ // (it will be created by the normal session flow)
299
+
300
+ logger.debug('Persisted session entities', {
301
+ sessionId,
302
+ entityCount: entities.length,
303
+ });
304
+ } catch (error) {
305
+ logger.warn('Failed to persist session entities', { error: error as Error });
306
+ }
307
+ }
308
+
309
+ /**
310
+ * Load session entities from the database.
311
+ * Called when a session starts.
312
+ */
313
+ export async function loadSessionEntities(sessionId: string): Promise<void> {
314
+ try {
315
+ const db = await getDb();
316
+ const schema = await getSchema();
317
+
318
+ const session = await (db as any)
319
+ .select()
320
+ .from(schema.contextSessions)
321
+ .where(eq(schema.contextSessions.id, sessionId))
322
+ .limit(1);
323
+
324
+ if (session.length === 0 || !session[0].metadata) return;
325
+
326
+ const metadata = session[0].metadata as Record<string, unknown>;
327
+ const entityData = metadata.entities as Array<{
328
+ id: string;
329
+ name: string;
330
+ type: string;
331
+ salience: number;
332
+ mentionCount: number;
333
+ }>;
334
+
335
+ if (!Array.isArray(entityData)) return;
336
+
337
+ const sessionMap: SessionEntityMap = {
338
+ sessionId,
339
+ entities: new Map(),
340
+ updatedAt: new Date(),
341
+ };
342
+
343
+ for (const e of entityData) {
344
+ sessionMap.entities.set(e.id, {
345
+ entityId: e.id,
346
+ entityName: e.name,
347
+ entityType: e.type,
348
+ mentionCount: e.mentionCount,
349
+ lastMentionedAt: new Date(), // Reset since we just loaded
350
+ salience: e.salience * 0.8, // Decay on load
351
+ });
352
+ }
353
+
354
+ sessionCache.set(sessionId, sessionMap);
355
+
356
+ logger.debug('Loaded session entities', {
357
+ sessionId,
358
+ entityCount: entityData.length,
359
+ });
360
+ } catch (error) {
361
+ logger.warn('Failed to load session entities', { error: error as Error });
362
+ }
363
+ }
@@ -1,7 +1,7 @@
1
- /**
2
- * Session Module
3
- * Session management and auto-load
4
- */
5
- export * from './types.js';
6
- export * from './auto-load.js';
7
- //# sourceMappingURL=index.js.map
1
+ /**
2
+ * Session Module
3
+ * Session management and auto-load
4
+ */
5
+
6
+ export * from './types.js';
7
+ export * from './auto-load.js';
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Reference Resolver
3
+ *
4
+ * Resolves pronouns and references in queries to specific entities
5
+ * using session context. Enables queries like:
6
+ * "Was her project affected?" -> "Was Alice's project affected?"
7
+ */
8
+
9
+ import { trackEntityInSession, resolveReference, getActiveSessionEntities } from './entity-tracker.js';
10
+ import { extractEntitiesAndRelations } from '../graph/llm-entity-extractor.js';
11
+ import { logger } from '../logger.js';
12
+
13
+ // ─── Types ──────────────────────────────────────────────────────────────────
14
+
15
+ export interface ReferenceResolution {
16
+ original: string;
17
+ resolved: string;
18
+ resolvedEntity: string | null;
19
+ entityType: string | null;
20
+ confidence: number;
21
+ method: 'pronoun' | 'definite_reference' | 'name_match' | 'none';
22
+ }
23
+
24
+ // ─── Pronoun Patterns ─────────────────────────────────────────────────────────
25
+
26
+ const PRONOUNS = new Set([
27
+ 'he', 'him', 'his', 'she', 'her', 'hers',
28
+ 'it', 'its', 'they', 'them', 'their', 'theirs',
29
+ 'this', 'that', 'these', 'those',
30
+ ]);
31
+
32
+ const POSSESSIVE_PRONOUNS = new Set([
33
+ 'his', 'her', 'hers', 'its', 'their', 'theirs', 'my', 'your', 'our',
34
+ ]);
35
+
36
+ // ─── Main Resolution Function ────────────────────────────────────────────────
37
+
38
+ /**
39
+ * Resolve pronouns and references in a query using session context.
40
+ * Returns the original query with pronouns replaced by entity names.
41
+ */
42
+ export async function resolvePronouns(
43
+ query: string,
44
+ sessionId: string
45
+ ): Promise<ReferenceResolution> {
46
+ const words = query.split(/\s+/);
47
+ let resolved = query;
48
+ let bestResolution: ReferenceResolution = {
49
+ original: query,
50
+ resolved: query,
51
+ resolvedEntity: null,
52
+ entityType: null,
53
+ confidence: 0,
54
+ method: 'none',
55
+ };
56
+
57
+ // Step 1: Extract entities from the query itself
58
+ const extraction = await extractEntitiesAndRelations(query, { preferLLM: false });
59
+ for (const entity of extraction.entities) {
60
+ trackEntityInSession(sessionId, entity.name, entity.name, entity.type);
61
+ }
62
+
63
+ // Step 2: Check each word for pronouns
64
+ for (let i = 0; i < words.length; i++) {
65
+ const word = words[i].toLowerCase().replace(/[.,!?;:]/g, '');
66
+
67
+ if (PRONOUNS.has(word)) {
68
+ const entity = resolveReference(sessionId, words[i]);
69
+ if (entity) {
70
+ // Replace the pronoun with the entity name
71
+ const originalWord = words[i];
72
+ words[i] = entity.entityName;
73
+ resolved = words.join(' ');
74
+
75
+ bestResolution = {
76
+ original: query,
77
+ resolved,
78
+ resolvedEntity: entity.entityName,
79
+ entityType: entity.entityType,
80
+ confidence: entity.salience,
81
+ method: 'pronoun',
82
+ };
83
+
84
+ logger.debug('Resolved pronoun', {
85
+ pronoun: originalWord,
86
+ entity: entity.entityName,
87
+ type: entity.entityType,
88
+ salience: entity.salience,
89
+ });
90
+ }
91
+ }
92
+ }
93
+
94
+ // Step 3: Check for definite references ("the project", "the database")
95
+ if (bestResolution.method === 'none') {
96
+ const definiteRefPatterns = [
97
+ { pattern: /\bthe (project|app|application)\b/i, types: ['concept'] },
98
+ { pattern: /\bthe (team|group)\b/i, types: ['concept'] },
99
+ { pattern: /\bthe (database|db)\b/i, types: ['tool'] },
100
+ { pattern: /\bthe (server|service|api)\b/i, types: ['tool'] },
101
+ { pattern: /\bthe (issue|bug|problem|outage)\b/i, types: ['concept'] },
102
+ { pattern: /\bthe (file|module|component)\b/i, types: ['file'] },
103
+ ];
104
+
105
+ for (const { pattern, types } of definiteRefPatterns) {
106
+ if (pattern.test(query)) {
107
+ const entity = resolveReference(sessionId, query.match(pattern)![0]);
108
+ if (entity) {
109
+ // Replace "the X" with "the X (EntityName)"
110
+ resolved = query.replace(pattern, `$1 (${entity.entityName})`);
111
+
112
+ bestResolution = {
113
+ original: query,
114
+ resolved,
115
+ resolvedEntity: entity.entityName,
116
+ entityType: entity.entityType,
117
+ confidence: entity.salience * 0.9, // Slightly lower confidence than direct pronoun
118
+ method: 'definite_reference',
119
+ };
120
+ break;
121
+ }
122
+ }
123
+ }
124
+ }
125
+
126
+ // Step 4: If we resolved something, also track the resolved entity
127
+ if (bestResolution.resolvedEntity) {
128
+ trackEntityInSession(
129
+ sessionId,
130
+ bestResolution.resolvedEntity,
131
+ bestResolution.resolvedEntity,
132
+ bestResolution.entityType || 'unknown'
133
+ );
134
+ }
135
+
136
+ return bestResolution;
137
+ }
138
+
139
+ /**
140
+ * Check if a query should trigger reference resolution.
141
+ */
142
+ export function shouldResolveReferences(query: string): boolean {
143
+ const words = query.split(/\s+/);
144
+ for (const word of words) {
145
+ const clean = word.toLowerCase().replace(/[.,!?;:]/g, '');
146
+ if (PRONOUNS.has(clean)) return true;
147
+ }
148
+
149
+ // Check for definite references
150
+ const definitePatterns = [
151
+ /\bthe (project|app|application|team|group|database|db|server|service|api|issue|bug|problem|outage|file|module|component)\b/i,
152
+ ];
153
+
154
+ return definitePatterns.some(p => p.test(query));
155
+ }
156
+
157
+ // Backward compatibility
158
+ export const wouldBenefitFromReferenceResolution = shouldResolveReferences;