squish-memory 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (388) hide show
  1. package/.claude-plugin/marketplace.json +20 -0
  2. package/.claude-plugin/plugin.json +32 -0
  3. package/.mcp.json +14 -0
  4. package/LICENSE +21 -0
  5. package/README.md +556 -0
  6. package/commands/context-paging.md +51 -0
  7. package/commands/context-status.md +22 -0
  8. package/commands/context.md +5 -0
  9. package/commands/core-memory.md +56 -0
  10. package/commands/health.md +5 -0
  11. package/commands/init.md +39 -0
  12. package/commands/merge.md +113 -0
  13. package/commands/observe.md +5 -0
  14. package/commands/recall.md +5 -0
  15. package/commands/remember.md +11 -0
  16. package/commands/search.md +10 -0
  17. package/dist/adapters/claude-code/capture.d.ts +11 -0
  18. package/dist/adapters/claude-code/capture.d.ts.map +1 -0
  19. package/dist/adapters/claude-code/capture.js +100 -0
  20. package/dist/adapters/claude-code/capture.js.map +1 -0
  21. package/dist/adapters/claude-code/index.d.ts +5 -0
  22. package/dist/adapters/claude-code/index.d.ts.map +1 -0
  23. package/dist/adapters/claude-code/index.js +6 -0
  24. package/dist/adapters/claude-code/index.js.map +1 -0
  25. package/dist/adapters/claude-code/injection.d.ts +34 -0
  26. package/dist/adapters/claude-code/injection.d.ts.map +1 -0
  27. package/dist/adapters/claude-code/injection.js +127 -0
  28. package/dist/adapters/claude-code/injection.js.map +1 -0
  29. package/dist/adapters/claude-code/plugin-wrapper.d.ts +21 -0
  30. package/dist/adapters/claude-code/plugin-wrapper.d.ts.map +1 -0
  31. package/dist/adapters/claude-code/plugin-wrapper.js +239 -0
  32. package/dist/adapters/claude-code/plugin-wrapper.js.map +1 -0
  33. package/dist/adapters/claude-code/types.d.ts +46 -0
  34. package/dist/adapters/claude-code/types.d.ts.map +1 -0
  35. package/dist/adapters/claude-code/types.js +6 -0
  36. package/dist/adapters/claude-code/types.js.map +1 -0
  37. package/dist/algorithms/merge/analytics/token-estimator.d.ts +50 -0
  38. package/dist/algorithms/merge/analytics/token-estimator.d.ts.map +1 -0
  39. package/dist/algorithms/merge/analytics/token-estimator.js +154 -0
  40. package/dist/algorithms/merge/analytics/token-estimator.js.map +1 -0
  41. package/dist/algorithms/merge/detection/hash-filters.d.ts +47 -0
  42. package/dist/algorithms/merge/detection/hash-filters.d.ts.map +1 -0
  43. package/dist/algorithms/merge/detection/hash-filters.js +190 -0
  44. package/dist/algorithms/merge/detection/hash-filters.js.map +1 -0
  45. package/dist/algorithms/merge/detection/semantic-ranker.d.ts +32 -0
  46. package/dist/algorithms/merge/detection/semantic-ranker.d.ts.map +1 -0
  47. package/dist/algorithms/merge/detection/semantic-ranker.js +118 -0
  48. package/dist/algorithms/merge/detection/semantic-ranker.js.map +1 -0
  49. package/dist/algorithms/merge/detection/two-stage-detector.d.ts +49 -0
  50. package/dist/algorithms/merge/detection/two-stage-detector.d.ts.map +1 -0
  51. package/dist/algorithms/merge/detection/two-stage-detector.js +185 -0
  52. package/dist/algorithms/merge/detection/two-stage-detector.js.map +1 -0
  53. package/dist/algorithms/merge/handlers/approve-merge.d.ts +22 -0
  54. package/dist/algorithms/merge/handlers/approve-merge.d.ts.map +1 -0
  55. package/dist/algorithms/merge/handlers/approve-merge.js +179 -0
  56. package/dist/algorithms/merge/handlers/approve-merge.js.map +1 -0
  57. package/dist/algorithms/merge/handlers/detect-duplicates.d.ts +47 -0
  58. package/dist/algorithms/merge/handlers/detect-duplicates.d.ts.map +1 -0
  59. package/dist/algorithms/merge/handlers/detect-duplicates.js +165 -0
  60. package/dist/algorithms/merge/handlers/detect-duplicates.js.map +1 -0
  61. package/dist/algorithms/merge/handlers/get-stats.d.ts +39 -0
  62. package/dist/algorithms/merge/handlers/get-stats.d.ts.map +1 -0
  63. package/dist/algorithms/merge/handlers/get-stats.js +88 -0
  64. package/dist/algorithms/merge/handlers/get-stats.js.map +1 -0
  65. package/dist/algorithms/merge/handlers/list-proposals.d.ts +45 -0
  66. package/dist/algorithms/merge/handlers/list-proposals.d.ts.map +1 -0
  67. package/dist/algorithms/merge/handlers/list-proposals.js +83 -0
  68. package/dist/algorithms/merge/handlers/list-proposals.js.map +1 -0
  69. package/dist/algorithms/merge/handlers/preview-merge.d.ts +39 -0
  70. package/dist/algorithms/merge/handlers/preview-merge.d.ts.map +1 -0
  71. package/dist/algorithms/merge/handlers/preview-merge.js +93 -0
  72. package/dist/algorithms/merge/handlers/preview-merge.js.map +1 -0
  73. package/dist/algorithms/merge/handlers/reject-merge.d.ts +28 -0
  74. package/dist/algorithms/merge/handlers/reject-merge.d.ts.map +1 -0
  75. package/dist/algorithms/merge/handlers/reject-merge.js +69 -0
  76. package/dist/algorithms/merge/handlers/reject-merge.js.map +1 -0
  77. package/dist/algorithms/merge/handlers/reverse-merge.d.ts +21 -0
  78. package/dist/algorithms/merge/handlers/reverse-merge.d.ts.map +1 -0
  79. package/dist/algorithms/merge/handlers/reverse-merge.js +121 -0
  80. package/dist/algorithms/merge/handlers/reverse-merge.js.map +1 -0
  81. package/dist/algorithms/merge/safety/safety-checks.d.ts +22 -0
  82. package/dist/algorithms/merge/safety/safety-checks.d.ts.map +1 -0
  83. package/dist/algorithms/merge/safety/safety-checks.js +215 -0
  84. package/dist/algorithms/merge/safety/safety-checks.js.map +1 -0
  85. package/dist/algorithms/merge/strategies/merge-strategies.d.ts +32 -0
  86. package/dist/algorithms/merge/strategies/merge-strategies.d.ts.map +1 -0
  87. package/dist/algorithms/merge/strategies/merge-strategies.js +337 -0
  88. package/dist/algorithms/merge/strategies/merge-strategies.js.map +1 -0
  89. package/dist/api/web/web.d.ts +4 -0
  90. package/dist/api/web/web.d.ts.map +1 -0
  91. package/dist/api/web/web.js +484 -0
  92. package/dist/api/web/web.js.map +1 -0
  93. package/dist/config.d.ts +28 -0
  94. package/dist/config.d.ts.map +1 -0
  95. package/dist/config.js +83 -0
  96. package/dist/config.js.map +1 -0
  97. package/dist/core/agent-memory.d.ts +22 -0
  98. package/dist/core/agent-memory.d.ts.map +1 -0
  99. package/dist/core/agent-memory.js +111 -0
  100. package/dist/core/agent-memory.js.map +1 -0
  101. package/dist/core/associations.d.ts +32 -0
  102. package/dist/core/associations.d.ts.map +1 -0
  103. package/dist/core/associations.js +249 -0
  104. package/dist/core/associations.js.map +1 -0
  105. package/dist/core/cache.d.ts +13 -0
  106. package/dist/core/cache.d.ts.map +1 -0
  107. package/dist/core/cache.js +202 -0
  108. package/dist/core/cache.js.map +1 -0
  109. package/dist/core/consolidation.d.ts +6 -0
  110. package/dist/core/consolidation.d.ts.map +1 -0
  111. package/dist/core/consolidation.js +40 -0
  112. package/dist/core/consolidation.js.map +1 -0
  113. package/dist/core/context-paging.d.ts +90 -0
  114. package/dist/core/context-paging.d.ts.map +1 -0
  115. package/dist/core/context-paging.js +348 -0
  116. package/dist/core/context-paging.js.map +1 -0
  117. package/dist/core/context.d.ts +7 -0
  118. package/dist/core/context.d.ts.map +1 -0
  119. package/dist/core/context.js +24 -0
  120. package/dist/core/context.js.map +1 -0
  121. package/dist/core/core-memory.d.ts +73 -0
  122. package/dist/core/core-memory.d.ts.map +1 -0
  123. package/dist/core/core-memory.js +214 -0
  124. package/dist/core/core-memory.js.map +1 -0
  125. package/dist/core/database.d.ts +12 -0
  126. package/dist/core/database.d.ts.map +1 -0
  127. package/dist/core/database.js +12 -0
  128. package/dist/core/database.js.map +1 -0
  129. package/dist/core/embeddings/qmd-client.d.ts +136 -0
  130. package/dist/core/embeddings/qmd-client.d.ts.map +1 -0
  131. package/dist/core/embeddings/qmd-client.js +403 -0
  132. package/dist/core/embeddings/qmd-client.js.map +1 -0
  133. package/dist/core/embeddings/qmd-provider.d.ts +65 -0
  134. package/dist/core/embeddings/qmd-provider.d.ts.map +1 -0
  135. package/dist/core/embeddings/qmd-provider.js +133 -0
  136. package/dist/core/embeddings/qmd-provider.js.map +1 -0
  137. package/dist/core/embeddings.d.ts +19 -0
  138. package/dist/core/embeddings.d.ts.map +1 -0
  139. package/dist/core/embeddings.js +297 -0
  140. package/dist/core/embeddings.js.map +1 -0
  141. package/dist/core/governance.d.ts +21 -0
  142. package/dist/core/governance.d.ts.map +1 -0
  143. package/dist/core/governance.js +64 -0
  144. package/dist/core/governance.js.map +1 -0
  145. package/dist/core/index.d.ts +10 -0
  146. package/dist/core/index.d.ts.map +1 -0
  147. package/dist/core/index.js +14 -0
  148. package/dist/core/index.js.map +1 -0
  149. package/dist/core/lifecycle.d.ts +19 -0
  150. package/dist/core/lifecycle.d.ts.map +1 -0
  151. package/dist/core/lifecycle.js +182 -0
  152. package/dist/core/lifecycle.js.map +1 -0
  153. package/dist/core/local-embeddings.d.ts +14 -0
  154. package/dist/core/local-embeddings.d.ts.map +1 -0
  155. package/dist/core/local-embeddings.js +94 -0
  156. package/dist/core/local-embeddings.js.map +1 -0
  157. package/dist/core/logger.d.ts +16 -0
  158. package/dist/core/logger.d.ts.map +1 -0
  159. package/dist/core/logger.js +34 -0
  160. package/dist/core/logger.js.map +1 -0
  161. package/dist/core/memory/bridge-discovery.d.ts +50 -0
  162. package/dist/core/memory/bridge-discovery.d.ts.map +1 -0
  163. package/dist/core/memory/bridge-discovery.js +291 -0
  164. package/dist/core/memory/bridge-discovery.js.map +1 -0
  165. package/dist/core/memory/entity-extractor.d.ts +33 -0
  166. package/dist/core/memory/entity-extractor.d.ts.map +1 -0
  167. package/dist/core/memory/entity-extractor.js +336 -0
  168. package/dist/core/memory/entity-extractor.js.map +1 -0
  169. package/dist/core/memory/entity-resolver.d.ts +23 -0
  170. package/dist/core/memory/entity-resolver.d.ts.map +1 -0
  171. package/dist/core/memory/entity-resolver.js +64 -0
  172. package/dist/core/memory/entity-resolver.js.map +1 -0
  173. package/dist/core/memory/fact-extractor.d.ts +24 -0
  174. package/dist/core/memory/fact-extractor.d.ts.map +1 -0
  175. package/dist/core/memory/fact-extractor.js +89 -0
  176. package/dist/core/memory/fact-extractor.js.map +1 -0
  177. package/dist/core/memory/hybrid-retrieval.d.ts +30 -0
  178. package/dist/core/memory/hybrid-retrieval.d.ts.map +1 -0
  179. package/dist/core/memory/hybrid-retrieval.js +63 -0
  180. package/dist/core/memory/hybrid-retrieval.js.map +1 -0
  181. package/dist/core/memory/hybrid-scorer.d.ts +51 -0
  182. package/dist/core/memory/hybrid-scorer.d.ts.map +1 -0
  183. package/dist/core/memory/hybrid-scorer.js +248 -0
  184. package/dist/core/memory/hybrid-scorer.js.map +1 -0
  185. package/dist/core/memory/index.d.ts +8 -0
  186. package/dist/core/memory/index.d.ts.map +1 -0
  187. package/dist/core/memory/index.js +10 -0
  188. package/dist/core/memory/index.js.map +1 -0
  189. package/dist/core/memory/memories.d.ts +35 -0
  190. package/dist/core/memory/memories.d.ts.map +1 -0
  191. package/dist/core/memory/memories.js +338 -0
  192. package/dist/core/memory/memories.js.map +1 -0
  193. package/dist/core/memory/memory-manager.d.ts +15 -0
  194. package/dist/core/memory/memory-manager.d.ts.map +1 -0
  195. package/dist/core/memory/memory-manager.js +46 -0
  196. package/dist/core/memory/memory-manager.js.map +1 -0
  197. package/dist/core/memory/query-processor.d.ts +21 -0
  198. package/dist/core/memory/query-processor.d.ts.map +1 -0
  199. package/dist/core/memory/query-processor.js +72 -0
  200. package/dist/core/memory/query-processor.js.map +1 -0
  201. package/dist/core/memory/serialization.d.ts +6 -0
  202. package/dist/core/memory/serialization.d.ts.map +1 -0
  203. package/dist/core/memory/serialization.js +35 -0
  204. package/dist/core/memory/serialization.js.map +1 -0
  205. package/dist/core/memory/temporal-parser.d.ts +32 -0
  206. package/dist/core/memory/temporal-parser.d.ts.map +1 -0
  207. package/dist/core/memory/temporal-parser.js +385 -0
  208. package/dist/core/memory/temporal-parser.js.map +1 -0
  209. package/dist/core/observations.d.ts +26 -0
  210. package/dist/core/observations.d.ts.map +1 -0
  211. package/dist/core/observations.js +118 -0
  212. package/dist/core/observations.js.map +1 -0
  213. package/dist/core/privacy.d.ts +23 -0
  214. package/dist/core/privacy.d.ts.map +1 -0
  215. package/dist/core/privacy.js +82 -0
  216. package/dist/core/privacy.js.map +1 -0
  217. package/dist/core/projects.d.ts +10 -0
  218. package/dist/core/projects.d.ts.map +1 -0
  219. package/dist/core/projects.js +66 -0
  220. package/dist/core/projects.js.map +1 -0
  221. package/dist/core/redis.d.ts +11 -0
  222. package/dist/core/redis.d.ts.map +1 -0
  223. package/dist/core/redis.js +69 -0
  224. package/dist/core/redis.js.map +1 -0
  225. package/dist/core/requirements.d.ts +20 -0
  226. package/dist/core/requirements.d.ts.map +1 -0
  227. package/dist/core/requirements.js +35 -0
  228. package/dist/core/requirements.js.map +1 -0
  229. package/dist/core/search/conversations.d.ts +25 -0
  230. package/dist/core/search/conversations.d.ts.map +1 -0
  231. package/dist/core/search/conversations.js +112 -0
  232. package/dist/core/search/conversations.js.map +1 -0
  233. package/dist/core/search/entities.d.ts +12 -0
  234. package/dist/core/search/entities.d.ts.map +1 -0
  235. package/dist/core/search/entities.js +34 -0
  236. package/dist/core/search/entities.js.map +1 -0
  237. package/dist/core/search/folder-context.d.ts +25 -0
  238. package/dist/core/search/folder-context.d.ts.map +1 -0
  239. package/dist/core/search/folder-context.js +119 -0
  240. package/dist/core/search/folder-context.js.map +1 -0
  241. package/dist/core/search/index.d.ts +4 -0
  242. package/dist/core/search/index.d.ts.map +1 -0
  243. package/dist/core/search/index.js +5 -0
  244. package/dist/core/search/index.js.map +1 -0
  245. package/dist/core/search/qmd-search.d.ts +61 -0
  246. package/dist/core/search/qmd-search.d.ts.map +1 -0
  247. package/dist/core/search/qmd-search.js +178 -0
  248. package/dist/core/search/qmd-search.js.map +1 -0
  249. package/dist/core/secret-detector.d.ts +32 -0
  250. package/dist/core/secret-detector.d.ts.map +1 -0
  251. package/dist/core/secret-detector.js +88 -0
  252. package/dist/core/secret-detector.js.map +1 -0
  253. package/dist/core/snapshots/cleanup.d.ts +9 -0
  254. package/dist/core/snapshots/cleanup.d.ts.map +1 -0
  255. package/dist/core/snapshots/cleanup.js +12 -0
  256. package/dist/core/snapshots/cleanup.js.map +1 -0
  257. package/dist/core/snapshots/comparison.d.ts +19 -0
  258. package/dist/core/snapshots/comparison.d.ts.map +1 -0
  259. package/dist/core/snapshots/comparison.js +37 -0
  260. package/dist/core/snapshots/comparison.js.map +1 -0
  261. package/dist/core/snapshots/creation.d.ts +19 -0
  262. package/dist/core/snapshots/creation.d.ts.map +1 -0
  263. package/dist/core/snapshots/creation.js +126 -0
  264. package/dist/core/snapshots/creation.js.map +1 -0
  265. package/dist/core/snapshots/retrieval.d.ts +7 -0
  266. package/dist/core/snapshots/retrieval.d.ts.map +1 -0
  267. package/dist/core/snapshots/retrieval.js +41 -0
  268. package/dist/core/snapshots/retrieval.js.map +1 -0
  269. package/dist/core/snapshots/stats.d.ts +11 -0
  270. package/dist/core/snapshots/stats.d.ts.map +1 -0
  271. package/dist/core/snapshots/stats.js +52 -0
  272. package/dist/core/snapshots/stats.js.map +1 -0
  273. package/dist/core/snapshots.d.ts +29 -0
  274. package/dist/core/snapshots.d.ts.map +1 -0
  275. package/dist/core/snapshots.js +220 -0
  276. package/dist/core/snapshots.js.map +1 -0
  277. package/dist/core/summarization/cleanup.d.ts +9 -0
  278. package/dist/core/summarization/cleanup.d.ts.map +1 -0
  279. package/dist/core/summarization/cleanup.js +12 -0
  280. package/dist/core/summarization/cleanup.js.map +1 -0
  281. package/dist/core/summarization/queries.d.ts +9 -0
  282. package/dist/core/summarization/queries.d.ts.map +1 -0
  283. package/dist/core/summarization/queries.js +28 -0
  284. package/dist/core/summarization/queries.js.map +1 -0
  285. package/dist/core/summarization/stats.d.ts +14 -0
  286. package/dist/core/summarization/stats.d.ts.map +1 -0
  287. package/dist/core/summarization/stats.js +52 -0
  288. package/dist/core/summarization/stats.js.map +1 -0
  289. package/dist/core/summarization/strategies.d.ts +24 -0
  290. package/dist/core/summarization/strategies.d.ts.map +1 -0
  291. package/dist/core/summarization/strategies.js +28 -0
  292. package/dist/core/summarization/strategies.js.map +1 -0
  293. package/dist/core/summarization.d.ts +37 -0
  294. package/dist/core/summarization.d.ts.map +1 -0
  295. package/dist/core/summarization.js +188 -0
  296. package/dist/core/summarization.js.map +1 -0
  297. package/dist/core/sync/qmd-sync.d.ts +106 -0
  298. package/dist/core/sync/qmd-sync.d.ts.map +1 -0
  299. package/dist/core/sync/qmd-sync.js +213 -0
  300. package/dist/core/sync/qmd-sync.js.map +1 -0
  301. package/dist/core/temporal-facts.d.ts +54 -0
  302. package/dist/core/temporal-facts.d.ts.map +1 -0
  303. package/dist/core/temporal-facts.js +193 -0
  304. package/dist/core/temporal-facts.js.map +1 -0
  305. package/dist/core/utils/cleanup-operations.d.ts +13 -0
  306. package/dist/core/utils/cleanup-operations.d.ts.map +1 -0
  307. package/dist/core/utils/cleanup-operations.js +44 -0
  308. package/dist/core/utils/cleanup-operations.js.map +1 -0
  309. package/dist/core/utils/content-extraction.d.ts +19 -0
  310. package/dist/core/utils/content-extraction.d.ts.map +1 -0
  311. package/dist/core/utils/content-extraction.js +65 -0
  312. package/dist/core/utils/content-extraction.js.map +1 -0
  313. package/dist/core/utils/filter-builder.d.ts +13 -0
  314. package/dist/core/utils/filter-builder.d.ts.map +1 -0
  315. package/dist/core/utils/filter-builder.js +44 -0
  316. package/dist/core/utils/filter-builder.js.map +1 -0
  317. package/dist/core/utils/history-traversal.d.ts +13 -0
  318. package/dist/core/utils/history-traversal.d.ts.map +1 -0
  319. package/dist/core/utils/history-traversal.js +50 -0
  320. package/dist/core/utils/history-traversal.js.map +1 -0
  321. package/dist/core/utils/memory-operations.d.ts +17 -0
  322. package/dist/core/utils/memory-operations.d.ts.map +1 -0
  323. package/dist/core/utils/memory-operations.js +41 -0
  324. package/dist/core/utils/memory-operations.js.map +1 -0
  325. package/dist/core/utils/query-operations.d.ts +18 -0
  326. package/dist/core/utils/query-operations.d.ts.map +1 -0
  327. package/dist/core/utils/query-operations.js +65 -0
  328. package/dist/core/utils/query-operations.js.map +1 -0
  329. package/dist/core/utils/summarization-helpers.d.ts +21 -0
  330. package/dist/core/utils/summarization-helpers.d.ts.map +1 -0
  331. package/dist/core/utils/summarization-helpers.js +35 -0
  332. package/dist/core/utils/summarization-helpers.js.map +1 -0
  333. package/dist/core/utils/temporal-queries.d.ts +13 -0
  334. package/dist/core/utils/temporal-queries.d.ts.map +1 -0
  335. package/dist/core/utils/temporal-queries.js +27 -0
  336. package/dist/core/utils/temporal-queries.js.map +1 -0
  337. package/dist/core/utils/version-management.d.ts +9 -0
  338. package/dist/core/utils/version-management.d.ts.map +1 -0
  339. package/dist/core/utils/version-management.js +61 -0
  340. package/dist/core/utils/version-management.js.map +1 -0
  341. package/dist/core/utils.d.ts +13 -0
  342. package/dist/core/utils.d.ts.map +1 -0
  343. package/dist/core/utils.js +51 -0
  344. package/dist/core/utils.js.map +1 -0
  345. package/dist/core/worker.d.ts +62 -0
  346. package/dist/core/worker.d.ts.map +1 -0
  347. package/dist/core/worker.js +186 -0
  348. package/dist/core/worker.js.map +1 -0
  349. package/dist/db/adapter.d.ts +6 -0
  350. package/dist/db/adapter.d.ts.map +1 -0
  351. package/dist/db/adapter.js +43 -0
  352. package/dist/db/adapter.js.map +1 -0
  353. package/dist/db/bootstrap.d.ts +9 -0
  354. package/dist/db/bootstrap.d.ts.map +1 -0
  355. package/dist/db/bootstrap.js +444 -0
  356. package/dist/db/bootstrap.js.map +1 -0
  357. package/dist/db/index.d.ts +11 -0
  358. package/dist/db/index.d.ts.map +1 -0
  359. package/dist/db/index.js +43 -0
  360. package/dist/db/index.js.map +1 -0
  361. package/dist/db/schema.d.ts +3 -0
  362. package/dist/db/schema.d.ts.map +1 -0
  363. package/dist/db/schema.js +11 -0
  364. package/dist/db/schema.js.map +1 -0
  365. package/dist/drizzle/schema-sqlite.d.ts +3046 -0
  366. package/dist/drizzle/schema-sqlite.d.ts.map +1 -0
  367. package/dist/drizzle/schema-sqlite.js +405 -0
  368. package/dist/drizzle/schema-sqlite.js.map +1 -0
  369. package/dist/drizzle/schema.d.ts +2969 -0
  370. package/dist/drizzle/schema.d.ts.map +1 -0
  371. package/dist/drizzle/schema.js +555 -0
  372. package/dist/drizzle/schema.js.map +1 -0
  373. package/dist/index.d.ts +34 -0
  374. package/dist/index.d.ts.map +1 -0
  375. package/dist/index.js +784 -0
  376. package/dist/index.js.map +1 -0
  377. package/hooks/hooks.json +52 -0
  378. package/hooks/post-tool-use.js +26 -0
  379. package/hooks/session-end.js +28 -0
  380. package/hooks/session-start.js +33 -0
  381. package/hooks/user-prompt-submit.js +26 -0
  382. package/hooks/utils.js +153 -0
  383. package/npx-installer.js +208 -0
  384. package/package.json +101 -0
  385. package/plugin.json +32 -0
  386. package/skills/memory-guide/SKILL.md +198 -0
  387. package/skills/squish-memory/SKILL.md +87 -0
  388. package/skills/squish-memory/install.sh +91 -0
@@ -0,0 +1,336 @@
1
+ /**
2
+ * Entity Extractor
3
+ * Extracts named entities from memory content
4
+ * Supports people, files, functions, dates, locations, concepts, tools, and patterns
5
+ */
6
+ import { getDb } from '../../db/index.js';
7
+ import { getSchema } from '../../db/schema.js';
8
+ import { eq, and } from 'drizzle-orm';
9
+ import { logger } from '../../core/logger.js';
10
+ // Regex patterns for entity detection
11
+ const PATTERNS = {
12
+ // File paths: src/components/Button.tsx, ./config.json, /var/log/app.log
13
+ filePath: /(?:^|[^\w])(?:\.?\/[\w.-]*[\w.-]*(?:\/[\w.-]+)*|[\w.-]+\.(?:ts|tsx|js|jsx|py|rb|go|java|cpp|c|h|json|yaml|yml|env|md|txt|csv|sql|graphql))\b/gm,
14
+ // Functions/methods: `functionName()`, `object.method()`, `Class.staticMethod()`
15
+ functionCall: /\b([a-zA-Z_$][a-zA-Z0-9_$]*)\s*(?=\()/g,
16
+ // Classes: `class ClassName`, `new ClassName()`, `extends ClassName`
17
+ className: /\b(?:class|new|extends|implements)\s+([A-Z][a-zA-Z0-9_$]*)\b/g,
18
+ // Common names (capitalized words not at sentence start)
19
+ personName: /(?:^|[^.\w])\b([A-Z][a-z]+(?:\s+[A-Z][a-z]+)?)\b(?![^.\w])/g,
20
+ // Capitalized concepts: `Machine Learning`, `React Hooks`
21
+ concept: /\b(?:[A-Z][a-z]+\s+)+(?:System|Architecture|Pattern|Model|Algorithm|Framework|Library|Process|Concept|Theory|Method)\b/g,
22
+ // Technologies/Tools: React, Node.js, PostgreSQL, Docker, Kubernetes
23
+ tool: /\b(?:React|Vue|Angular|Node\.?js?|Express|Django|Flask|FastAPI|PostgreSQL|MongoDB|Redis|Docker|Kubernetes|Terraform|AWS|Azure|GCP|GitHub|GitLab|Jenkins|Figma|Sketch|Adobe|Webpack|Vite|npm|yarn|pnpm|TypeScript|JavaScript|Python|Go|Rust|Java|C\+\+|C#)\b/g,
24
+ // Design patterns: `singleton pattern`, `factory method`, `observer pattern`
25
+ designPattern: /\b(?:abstract\s+)?(?:factory|singleton|observer|decorator|strategy|adapter|bridge|facade|proxy|chain\s+of\s+responsibility|composite|template\s+method|visitor|builder|prototype|memento|interpreter|command|state|mediator)\s+(?:pattern|method)\b/gi,
26
+ // Techniques/Methodologies: `memoization`, `caching`, `lazy loading`, `debouncing`
27
+ technique: /\b(?:memoization|caching|lazy\s+loading|debouncing|throttling|currying|composition|recursion|iteration|hashing|indexing|sharding|replication|optimization|refactoring|testing|debugging|profiling|monitoring|logging)\b/gi,
28
+ // Quoted concepts and important terms
29
+ quotedConcept: /["`]([^"`]+)["`]/g,
30
+ // ISO dates
31
+ date: /\b(\d{4}-\d{2}-\d{2})(?:T\d{2}:\d{2}:\d{2})?\b/g,
32
+ // Common code keywords and variables
33
+ codeVariable: /\b(?:const|let|var|function|async|await|return|import|export|class|interface|type|enum)\s+([a-zA-Z_$][a-zA-Z0-9_$]*)\b/g,
34
+ };
35
+ /**
36
+ * Extract entities from content
37
+ */
38
+ export async function extractEntities(content) {
39
+ const entities = [];
40
+ const seenKeys = new Set(); // Deduplicate entities
41
+ // Extract file paths
42
+ const filePaths = Array.from(content.matchAll(PATTERNS.filePath));
43
+ for (const match of filePaths) {
44
+ const name = match[0].trim();
45
+ const key = `file:${name}`;
46
+ if (!seenKeys.has(key)) {
47
+ entities.push({
48
+ name,
49
+ type: 'file',
50
+ confidence: 0.9,
51
+ startIndex: match.index || 0,
52
+ endIndex: (match.index || 0) + match[0].length,
53
+ context: extractContext(content, match.index || 0),
54
+ normalized: normalizePath(name),
55
+ });
56
+ seenKeys.add(key);
57
+ }
58
+ }
59
+ // Extract function calls
60
+ const functionCalls = Array.from(content.matchAll(PATTERNS.functionCall));
61
+ for (const match of functionCalls) {
62
+ const name = match[1];
63
+ const key = `function:${name}`;
64
+ if (!seenKeys.has(key) && name.length > 2) {
65
+ entities.push({
66
+ name,
67
+ type: 'function',
68
+ confidence: 0.85,
69
+ startIndex: match.index || 0,
70
+ endIndex: (match.index || 0) + match[0].length,
71
+ context: extractContext(content, match.index || 0),
72
+ });
73
+ seenKeys.add(key);
74
+ }
75
+ }
76
+ // Extract class names
77
+ const classNames = Array.from(content.matchAll(PATTERNS.className));
78
+ for (const match of classNames) {
79
+ const name = match[1];
80
+ const key = `class:${name}`;
81
+ if (!seenKeys.has(key)) {
82
+ entities.push({
83
+ name,
84
+ type: 'class',
85
+ confidence: 0.95,
86
+ startIndex: match.index || 0,
87
+ endIndex: (match.index || 0) + match[0].length,
88
+ context: extractContext(content, match.index || 0),
89
+ });
90
+ seenKeys.add(key);
91
+ }
92
+ }
93
+ // Extract technologies/tools
94
+ const tools = Array.from(content.matchAll(PATTERNS.tool));
95
+ for (const match of tools) {
96
+ const name = match[0];
97
+ const key = `tool:${name}`;
98
+ if (!seenKeys.has(key)) {
99
+ entities.push({
100
+ name,
101
+ type: 'tool',
102
+ confidence: 0.9,
103
+ startIndex: match.index || 0,
104
+ endIndex: (match.index || 0) + match[0].length,
105
+ context: extractContext(content, match.index || 0),
106
+ });
107
+ seenKeys.add(key);
108
+ }
109
+ }
110
+ // Extract design patterns
111
+ const patterns = Array.from(content.matchAll(PATTERNS.designPattern));
112
+ for (const match of patterns) {
113
+ const name = match[0];
114
+ const key = `pattern:${name}`;
115
+ if (!seenKeys.has(key)) {
116
+ entities.push({
117
+ name,
118
+ type: 'pattern',
119
+ confidence: 0.92,
120
+ startIndex: match.index || 0,
121
+ endIndex: (match.index || 0) + match[0].length,
122
+ context: extractContext(content, match.index || 0),
123
+ });
124
+ seenKeys.add(key);
125
+ }
126
+ }
127
+ // Extract techniques/methodologies
128
+ const techniques = Array.from(content.matchAll(PATTERNS.technique));
129
+ for (const match of techniques) {
130
+ const name = match[0];
131
+ const key = `technique:${name}`;
132
+ if (!seenKeys.has(key)) {
133
+ entities.push({
134
+ name,
135
+ type: 'technique',
136
+ confidence: 0.88,
137
+ startIndex: match.index || 0,
138
+ endIndex: (match.index || 0) + match[0].length,
139
+ context: extractContext(content, match.index || 0),
140
+ });
141
+ seenKeys.add(key);
142
+ }
143
+ }
144
+ // Extract dates
145
+ const dates = Array.from(content.matchAll(PATTERNS.date));
146
+ for (const match of dates) {
147
+ const name = match[0];
148
+ const key = `date:${name}`;
149
+ if (!seenKeys.has(key)) {
150
+ entities.push({
151
+ name,
152
+ type: 'date',
153
+ confidence: 0.95,
154
+ startIndex: match.index || 0,
155
+ endIndex: (match.index || 0) + match[0].length,
156
+ context: extractContext(content, match.index || 0),
157
+ });
158
+ seenKeys.add(key);
159
+ }
160
+ }
161
+ // Extract quoted important concepts
162
+ const quotedConcepts = Array.from(content.matchAll(PATTERNS.quotedConcept));
163
+ for (const match of quotedConcepts) {
164
+ const name = match[1];
165
+ const key = `concept:${name}`;
166
+ if (!seenKeys.has(key) && name.length > 2) {
167
+ entities.push({
168
+ name,
169
+ type: 'concept',
170
+ confidence: 0.8,
171
+ startIndex: match.index || 0,
172
+ endIndex: (match.index || 0) + match[0].length,
173
+ context: extractContext(content, match.index || 0),
174
+ });
175
+ seenKeys.add(key);
176
+ }
177
+ }
178
+ // Extract capitalized concepts
179
+ const concepts = Array.from(content.matchAll(PATTERNS.concept));
180
+ for (const match of concepts) {
181
+ const name = match[0];
182
+ const key = `concept:${name}`;
183
+ if (!seenKeys.has(key)) {
184
+ entities.push({
185
+ name,
186
+ type: 'concept',
187
+ confidence: 0.75,
188
+ startIndex: match.index || 0,
189
+ endIndex: (match.index || 0) + match[0].length,
190
+ context: extractContext(content, match.index || 0),
191
+ });
192
+ seenKeys.add(key);
193
+ }
194
+ }
195
+ // Sort by start index
196
+ entities.sort((a, b) => a.startIndex - b.startIndex);
197
+ logger.debug('Entities extracted', {
198
+ count: entities.length,
199
+ byType: countByType(entities),
200
+ });
201
+ return entities;
202
+ }
203
+ /**
204
+ * Link extracted entities to memory records
205
+ * Creates entity records in the knowledge graph
206
+ */
207
+ export async function linkEntitiesToMemories(memoryId, entities) {
208
+ if (entities.length === 0)
209
+ return;
210
+ try {
211
+ const db = await getDb();
212
+ const schema = await getSchema();
213
+ // Get memory to find project
214
+ const memories = await db
215
+ .select()
216
+ .from(schema.memories)
217
+ .where(eq(schema.memories.id, memoryId))
218
+ .limit(1);
219
+ if (memories.length === 0)
220
+ return;
221
+ const memory = memories[0];
222
+ // Insert unique entities into the knowledge graph
223
+ for (const entity of entities) {
224
+ try {
225
+ // Check if entity already exists
226
+ const existing = await db
227
+ .select()
228
+ .from(schema.entities)
229
+ .where(and(eq(schema.entities.projectId, memory.projectId), eq(schema.entities.name, entity.name), eq(schema.entities.type, entity.type)))
230
+ .limit(1);
231
+ if (existing.length === 0) {
232
+ // Insert new entity with metadata in properties
233
+ await db.insert(schema.entities).values({
234
+ name: entity.name,
235
+ type: entity.type,
236
+ projectId: memory.projectId,
237
+ description: entity.context,
238
+ properties: {
239
+ confidence: entity.confidence,
240
+ extractedFrom: memoryId,
241
+ normalized: entity.normalized,
242
+ },
243
+ });
244
+ }
245
+ }
246
+ catch (error) {
247
+ logger.error('Error inserting entity', { entity, error });
248
+ }
249
+ }
250
+ logger.debug('Entities linked to memory', {
251
+ memoryId,
252
+ entityCount: entities.length,
253
+ });
254
+ }
255
+ catch (error) {
256
+ logger.error('Error linking entities to memories', error);
257
+ }
258
+ }
259
+ /**
260
+ * Get entities extracted from a memory based on properties
261
+ */
262
+ export async function getMemoryEntities(memoryId) {
263
+ try {
264
+ const db = await getDb();
265
+ const schema = await getSchema();
266
+ // Find all entities with this memory ID in properties
267
+ const allEntities = await db.select().from(schema.entities);
268
+ const entities = [];
269
+ for (const entity of allEntities) {
270
+ const props = entity.properties;
271
+ if (props && props.extractedFrom === memoryId) {
272
+ entities.push({
273
+ name: entity.name,
274
+ type: entity.type,
275
+ confidence: props.confidence || 0.8,
276
+ startIndex: 0,
277
+ endIndex: 0,
278
+ context: entity.description || '',
279
+ normalized: props.normalized,
280
+ });
281
+ }
282
+ }
283
+ return entities;
284
+ }
285
+ catch (error) {
286
+ logger.error('Error getting memory entities', error);
287
+ return [];
288
+ }
289
+ }
290
+ /**
291
+ * Get all entities for a project
292
+ */
293
+ export async function getProjectEntities(projectId, type) {
294
+ try {
295
+ const db = await getDb();
296
+ const schema = await getSchema();
297
+ let query = db.select().from(schema.entities).where(eq(schema.entities.projectId, projectId));
298
+ if (type) {
299
+ query = query.where(eq(schema.entities.type, type));
300
+ }
301
+ return await query;
302
+ }
303
+ catch (error) {
304
+ logger.error('Error getting project entities', error);
305
+ return [];
306
+ }
307
+ }
308
+ /**
309
+ * Extract context around entity
310
+ */
311
+ function extractContext(content, index, contextLength = 50) {
312
+ const start = Math.max(0, index - contextLength);
313
+ const end = Math.min(content.length, index + contextLength);
314
+ return content.substring(start, end).trim();
315
+ }
316
+ /**
317
+ * Normalize file path
318
+ */
319
+ function normalizePath(path) {
320
+ return path
321
+ .trim()
322
+ .replace(/^\.\//, '')
323
+ .toLowerCase()
324
+ .replace(/\\/g, '/');
325
+ }
326
+ /**
327
+ * Count entities by type
328
+ */
329
+ function countByType(entities) {
330
+ const counts = {};
331
+ for (const entity of entities) {
332
+ counts[entity.type] = (counts[entity.type] || 0) + 1;
333
+ }
334
+ return counts;
335
+ }
336
+ //# sourceMappingURL=entity-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-extractor.js","sourceRoot":"","sources":["../../../core/memory/entity-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export interface ExtractedEntities {
2
+ primary: string[];
3
+ secondary: string[];
4
+ queryType: 'factual' | 'relational' | 'temporal';
5
+ }
6
+ /**
7
+ * Extract entities from a query using Claude
8
+ * NO FALLBACKS - real extraction or throw
9
+ */
10
+ export declare function extractQueryEntities(query: string, callClaudeFn: (prompt: string, maxTokens: number) => Promise<string>): Promise<ExtractedEntities>;
11
+ /**
12
+ * Score memory relevance based on entity matching
13
+ * Returns boost factor (0-1)
14
+ */
15
+ export declare function scoreEntityMatch(memoryEntities: string[], queryEntities: string[]): number;
16
+ /**
17
+ * Filter and boost memories by entity relevance
18
+ */
19
+ export declare function filterByEntities(memories: any[], queryEntities: string[]): Array<{
20
+ memory: any;
21
+ entityBoost: number;
22
+ }>;
23
+ //# sourceMappingURL=entity-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-resolver.d.ts","sourceRoot":"","sources":["../../../core/memory/entity-resolver.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,SAAS,EAAE,SAAS,GAAG,YAAY,GAAG,UAAU,CAAC;CAClD;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GACnE,OAAO,CAAC,iBAAiB,CAAC,CAwB5B;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,cAAc,EAAE,MAAM,EAAE,EACxB,aAAa,EAAE,MAAM,EAAE,GACtB,MAAM,CAmBR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,GAAG,EAAE,EACf,aAAa,EAAE,MAAM,EAAE,GACtB,KAAK,CAAC;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAe7C"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Extract entities from a query using Claude
3
+ * NO FALLBACKS - real extraction or throw
4
+ */
5
+ export async function extractQueryEntities(query, callClaudeFn) {
6
+ const prompt = `Extract entities from this question. Return ONLY JSON:
7
+ {
8
+ "primary": ["Alice", "project name"],
9
+ "secondary": ["team", "budget"],
10
+ "queryType": "factual"
11
+ }
12
+
13
+ Question: ${query}`;
14
+ const response = await callClaudeFn(prompt, 500);
15
+ const jsonMatch = response.match(/\{[\s\S]*\}/);
16
+ if (!jsonMatch) {
17
+ throw new Error('No JSON in entity extraction');
18
+ }
19
+ const parsed = JSON.parse(jsonMatch[0]);
20
+ return {
21
+ primary: parsed.primary || [],
22
+ secondary: parsed.secondary || [],
23
+ queryType: parsed.queryType || 'factual',
24
+ };
25
+ }
26
+ /**
27
+ * Score memory relevance based on entity matching
28
+ * Returns boost factor (0-1)
29
+ */
30
+ export function scoreEntityMatch(memoryEntities, queryEntities) {
31
+ if (!queryEntities.length || !memoryEntities.length) {
32
+ return 0.5; // Neutral if no entities
33
+ }
34
+ const querySet = new Set(queryEntities.map(e => e.toLowerCase()));
35
+ const memorySet = new Set(memoryEntities.map(e => e.toLowerCase()));
36
+ // Count matches
37
+ let matches = 0;
38
+ for (const entity of querySet) {
39
+ if (memorySet.has(entity)) {
40
+ matches++;
41
+ }
42
+ }
43
+ // Calculate boost (0-1)
44
+ const matchRatio = matches / querySet.size;
45
+ return 0.5 + (matchRatio * 0.5); // 0.5 to 1.0
46
+ }
47
+ /**
48
+ * Filter and boost memories by entity relevance
49
+ */
50
+ export function filterByEntities(memories, queryEntities) {
51
+ if (!queryEntities.length) {
52
+ // No entities to filter by, return all with neutral boost
53
+ return memories.map(m => ({ memory: m, entityBoost: 0.5 }));
54
+ }
55
+ return memories.map(memory => {
56
+ const memoryEntities = memory.metadata?.entities || [];
57
+ const boost = scoreEntityMatch(memoryEntities, queryEntities);
58
+ return {
59
+ memory,
60
+ entityBoost: boost,
61
+ };
62
+ });
63
+ }
64
+ //# sourceMappingURL=entity-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-resolver.js","sourceRoot":"","sources":["../../../core/memory/entity-resolver.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAa,EACb,YAAoE;IAEpE,MAAM,MAAM,GAAG;;;;;;;YAOL,KAAK,EAAE,CAAC;IAElB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEjD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAChD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAsB,CAAC;IAE7D,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,SAAS;KACzC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,cAAwB,EACxB,aAAuB;IAEvB,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QACpD,OAAO,GAAG,CAAC,CAAC,yBAAyB;IACvC,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAClE,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAEpE,gBAAgB;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;IAC3C,OAAO,GAAG,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,aAAa;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAe,EACf,aAAuB;IAEvB,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;QAC1B,0DAA0D;QAC1D,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAC3B,MAAM,cAAc,GAAI,MAAM,CAAC,QAAQ,EAAE,QAAqB,IAAI,EAAE,CAAC;QACrE,MAAM,KAAK,GAAG,gBAAgB,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;QAE9D,OAAO;YACL,MAAM;YACN,WAAW,EAAE,KAAK;SACnB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { RememberInput } from './memories.js';
2
+ export interface ExtractedFact {
3
+ content: string;
4
+ confidence: number;
5
+ entities: string[];
6
+ relation?: string;
7
+ }
8
+ export interface FactExtractionResult {
9
+ facts: ExtractedFact[];
10
+ summary: string;
11
+ entities: string[];
12
+ }
13
+ /**
14
+ * Extract facts from conversation text using Claude API
15
+ *
16
+ * This function MUST return valid facts or throw an error.
17
+ * NO FALLBACKS - we need real extraction to reach 90% accuracy.
18
+ */
19
+ export declare function extractFacts(text: string, callClaude: (prompt: string, maxTokens: number) => Promise<string>): Promise<FactExtractionResult>;
20
+ /**
21
+ * Convert extracted facts to memory inputs
22
+ */
23
+ export declare function factsToMemoryInputs(sourceMemory: RememberInput, extraction: FactExtractionResult, sourceId: string): RememberInput[];
24
+ //# sourceMappingURL=fact-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fact-extractor.d.ts","sourceRoot":"","sources":["../../../core/memory/fact-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GACjE,OAAO,CAAC,oBAAoB,CAAC,CAuE/B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,aAAa,EAC3B,UAAU,EAAE,oBAAoB,EAChC,QAAQ,EAAE,MAAM,GACf,aAAa,EAAE,CAejB"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Extract facts from conversation text using Claude API
3
+ *
4
+ * This function MUST return valid facts or throw an error.
5
+ * NO FALLBACKS - we need real extraction to reach 90% accuracy.
6
+ */
7
+ export async function extractFacts(text, callClaude) {
8
+ if (!text || text.length < 50) {
9
+ // Too short for meaningful extraction - return as single fact
10
+ return {
11
+ facts: [{ content: text.trim(), confidence: 1.0, entities: [] }],
12
+ summary: text.trim(),
13
+ entities: []
14
+ };
15
+ }
16
+ const prompt = `Extract atomic facts from this conversation.
17
+
18
+ Requirements:
19
+ - Extract specific, verifiable facts (names, dates, numbers, relationships)
20
+ - Each fact should be a standalone statement
21
+ - Identify entities (people, organizations, projects, locations)
22
+ - Note temporal information and relationships
23
+
24
+ Return ONLY valid JSON in this exact format:
25
+ {"facts":[{"content":"fact statement","confidence":0.95,"entities":["Name"],"relation":"optional"}],"summary":"brief summary","entities":["all","entities"]}
26
+
27
+ Text to analyze:
28
+ ${text.substring(0, 4000)}`;
29
+ const response = await callClaude(prompt, 2000);
30
+ // Extract JSON - look for the first { and last }
31
+ const startIdx = response.indexOf('{');
32
+ const endIdx = response.lastIndexOf('}');
33
+ if (startIdx === -1 || endIdx === -1 || startIdx >= endIdx) {
34
+ throw new Error(`Fact extraction failed: No valid JSON found in response. Response: ${response.substring(0, 200)}`);
35
+ }
36
+ const jsonStr = response.substring(startIdx, endIdx + 1);
37
+ let parsed;
38
+ try {
39
+ parsed = JSON.parse(jsonStr);
40
+ }
41
+ catch (parseError) {
42
+ throw new Error(`Fact extraction failed: JSON parse error. JSON: ${jsonStr.substring(0, 200)}`);
43
+ }
44
+ // Validate facts array exists and has content
45
+ if (!parsed.facts || !Array.isArray(parsed.facts)) {
46
+ throw new Error(`Fact extraction failed: Missing 'facts' array in response. Keys: ${Object.keys(parsed).join(', ')}`);
47
+ }
48
+ // Filter and clean facts
49
+ const validFacts = parsed.facts
50
+ .filter((f) => f && typeof f.content === 'string' && f.content.trim().length > 10)
51
+ .map((f) => ({
52
+ content: f.content.trim(),
53
+ confidence: Math.max(0, Math.min(1, typeof f.confidence === 'number' ? f.confidence : 0.8)),
54
+ entities: Array.isArray(f.entities) ? f.entities.filter((e) => typeof e === 'string') : [],
55
+ relation: typeof f.relation === 'string' ? f.relation : undefined
56
+ }));
57
+ if (validFacts.length === 0) {
58
+ throw new Error(`Fact extraction failed: No valid facts after filtering. Original count: ${parsed.facts.length}`);
59
+ }
60
+ return {
61
+ facts: validFacts,
62
+ summary: typeof parsed.summary === 'string' && parsed.summary.trim()
63
+ ? parsed.summary.trim()
64
+ : text.substring(0, 200),
65
+ entities: Array.isArray(parsed.entities)
66
+ ? parsed.entities.filter((e) => typeof e === 'string')
67
+ : []
68
+ };
69
+ }
70
+ /**
71
+ * Convert extracted facts to memory inputs
72
+ */
73
+ export function factsToMemoryInputs(sourceMemory, extraction, sourceId) {
74
+ return extraction.facts.map((fact, index) => ({
75
+ content: fact.content,
76
+ type: 'fact',
77
+ metadata: {
78
+ sourceMemoryId: sourceId,
79
+ extractedAt: new Date().toISOString(),
80
+ entities: fact.entities,
81
+ relation: fact.relation,
82
+ confidence: Math.floor(fact.confidence * 100),
83
+ factIndex: index
84
+ },
85
+ tags: [...(sourceMemory.tags || []), 'extracted-fact', ...fact.entities],
86
+ project: sourceMemory.project
87
+ }));
88
+ }
89
+ //# sourceMappingURL=fact-extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fact-extractor.js","sourceRoot":"","sources":["../../../core/memory/fact-extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { HybridScorerOptions } from './hybrid-scorer.js';
2
+ import { SearchInput, MemoryRecord } from './memories.js';
3
+ export interface HybridSearchOptions extends SearchInput {
4
+ candidateLimit?: number;
5
+ resultLimit?: number;
6
+ hybridOptions?: HybridScorerOptions;
7
+ queryEntities?: string[];
8
+ }
9
+ export interface HybridSearchResult extends MemoryRecord {
10
+ hybridScore: number;
11
+ semanticScore: number;
12
+ recencyScore: number;
13
+ coactivationScore: number;
14
+ importanceScore: number;
15
+ entityBoost: number;
16
+ rank: number;
17
+ }
18
+ /**
19
+ * Hybrid search with multi-factor re-ranking + entity filtering
20
+ *
21
+ * Algorithm:
22
+ * 1. Fetch N candidates using vector similarity
23
+ * 2. Filter/boost by entity relevance (Phase 3)
24
+ * 3. Re-rank using hybrid scoring (semantic + recency + coactivation + importance)
25
+ * 4. Return top M results
26
+ *
27
+ * This provides better relevance than pure vector search
28
+ */
29
+ export declare function hybridSearch(options: HybridSearchOptions): Promise<HybridSearchResult[]>;
30
+ //# sourceMappingURL=hybrid-retrieval.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hybrid-retrieval.d.ts","sourceRoot":"","sources":["../../../core/memory/hybrid-retrieval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,EAAkB,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG1E,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,EAAE,CAAC,CA0D/B"}