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,14 @@
1
+ /**
2
+ * Local Vector Embeddings Service
3
+ * Provides local embedding generation without external APIs
4
+ */
5
+ export type Embedding = number[];
6
+ export declare const EMBEDDING_DIMENSIONS = 1536;
7
+ export interface EmbeddingProvider {
8
+ embed(text: string): Promise<Embedding>;
9
+ isAvailable(): Promise<boolean>;
10
+ getDimensions(): number;
11
+ }
12
+ export declare function initializeEmbeddingProvider(): Promise<void>;
13
+ export declare function cosineSimilarity(a: Embedding, b: Embedding): number;
14
+ //# sourceMappingURL=local-embeddings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-embeddings.d.ts","sourceRoot":"","sources":["../../core/local-embeddings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,MAAM,SAAS,GAAG,MAAM,EAAE,CAAC;AAEjC,eAAO,MAAM,oBAAoB,OAAO,CAAC;AAEzC,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAChC,aAAa,IAAI,MAAM,CAAC;CACzB;AAoED,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,IAAI,CAAC,CAejE;AAYD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,MAAM,CAiBnE"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Local Vector Embeddings Service
3
+ * Provides local embedding generation without external APIs
4
+ */
5
+ import { config } from '../config.js';
6
+ import { logger } from './logger.js';
7
+ export const EMBEDDING_DIMENSIONS = 1536;
8
+ class StubEmbeddingProvider {
9
+ async embed(_text) {
10
+ return Array(EMBEDDING_DIMENSIONS).fill(0);
11
+ }
12
+ async isAvailable() {
13
+ return true;
14
+ }
15
+ getDimensions() {
16
+ return EMBEDDING_DIMENSIONS;
17
+ }
18
+ }
19
+ class LocalTfidfEmbeddingProvider {
20
+ idf = new Map();
21
+ async embed(text) {
22
+ const words = this.tokenize(text);
23
+ const embedding = Array(EMBEDDING_DIMENSIONS).fill(0);
24
+ const wordFreq = new Map();
25
+ for (const word of words) {
26
+ wordFreq.set(word, (wordFreq.get(word) || 0) + 1);
27
+ }
28
+ for (const [word, freq] of wordFreq.entries()) {
29
+ const hash = this.hash(word) % EMBEDDING_DIMENSIONS;
30
+ const idf = this.idf.get(word) || 1;
31
+ embedding[hash] += freq * idf;
32
+ }
33
+ const norm = Math.sqrt(embedding.reduce((sum, val) => sum + val * val, 0));
34
+ if (norm > 0) {
35
+ for (let i = 0; i < embedding.length; i++) {
36
+ embedding[i] /= norm;
37
+ }
38
+ }
39
+ return embedding;
40
+ }
41
+ async isAvailable() {
42
+ return true;
43
+ }
44
+ getDimensions() {
45
+ return EMBEDDING_DIMENSIONS;
46
+ }
47
+ tokenize(text) {
48
+ return text.toLowerCase().split(/\s+/).filter(w => w.length > 2).slice(0, 100);
49
+ }
50
+ hash(str) {
51
+ let hash = 0;
52
+ for (let i = 0; i < str.length; i++) {
53
+ hash = ((hash << 5) - hash) + str.charCodeAt(i);
54
+ hash = hash & hash;
55
+ }
56
+ return Math.abs(hash);
57
+ }
58
+ }
59
+ let currentProvider = null;
60
+ export async function initializeEmbeddingProvider() {
61
+ if (config.embeddingsProvider === 'openai' && config.openAiApiKey) {
62
+ logger.info('Using OpenAI embeddings (team mode - requires API key)');
63
+ currentProvider = new StubEmbeddingProvider();
64
+ }
65
+ else if (config.embeddingsProvider === 'ollama') {
66
+ logger.info('Using Ollama embeddings (team mode - local LLM)');
67
+ currentProvider = new StubEmbeddingProvider();
68
+ }
69
+ else if (config.embeddingsProvider === 'local') {
70
+ logger.info('Using local TF-IDF embeddings (SQLite mode - offline, no API key)');
71
+ currentProvider = new LocalTfidfEmbeddingProvider();
72
+ }
73
+ else {
74
+ // 'none' mode
75
+ logger.info('Embeddings disabled (stub provider)');
76
+ currentProvider = new StubEmbeddingProvider();
77
+ }
78
+ }
79
+ export function cosineSimilarity(a, b) {
80
+ if (a.length !== b.length) {
81
+ throw new Error('Embeddings must have same dimensions');
82
+ }
83
+ let dotProduct = 0;
84
+ let normA = 0;
85
+ let normB = 0;
86
+ for (let i = 0; i < a.length; i++) {
87
+ dotProduct += a[i] * b[i];
88
+ normA += a[i] * a[i];
89
+ normB += b[i] * b[i];
90
+ }
91
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
92
+ return denominator === 0 ? 0 : dotProduct / denominator;
93
+ }
94
+ //# sourceMappingURL=local-embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-embeddings.js","sourceRoot":"","sources":["../../core/local-embeddings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ interface LogContext {
2
+ [key: string]: any;
3
+ }
4
+ declare class Logger {
5
+ private prefix;
6
+ private debugEnabled;
7
+ constructor(prefix?: string);
8
+ private format;
9
+ info(message: string, context?: LogContext): void;
10
+ warn(message: string, context?: LogContext): void;
11
+ error(message: string, error?: Error | any, context?: LogContext): void;
12
+ debug(message: string, context?: LogContext): void;
13
+ }
14
+ export declare const logger: Logger;
15
+ export {};
16
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../core/logger.ts"],"names":[],"mappings":"AAEA,UAAU,UAAU;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,cAAM,MAAM;IACV,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAU;gBAElB,MAAM,GAAE,MAAiB;IAKrC,OAAO,CAAC,MAAM;IAMd,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IAIjD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,GAAG,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;IASvE,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,IAAI;CAKnD;AAED,eAAO,MAAM,MAAM,QAAe,CAAC"}
@@ -0,0 +1,34 @@
1
+ class Logger {
2
+ prefix;
3
+ debugEnabled;
4
+ constructor(prefix = 'squish') {
5
+ this.prefix = prefix;
6
+ this.debugEnabled = process.env.DEBUG === 'true' || process.env.DEBUG === '1';
7
+ }
8
+ format(level, message, context) {
9
+ const timestamp = new Date().toISOString();
10
+ const ctx = context ? ` ${JSON.stringify(context)}` : '';
11
+ return `[${this.prefix}:${level}] ${message}${ctx}`;
12
+ }
13
+ info(message, context) {
14
+ console.error(this.format('info', message, context));
15
+ }
16
+ warn(message, context) {
17
+ console.error(this.format('warn', message, context));
18
+ }
19
+ error(message, error, context) {
20
+ const errorMsg = error instanceof Error ? error.message : error;
21
+ const ctx = { ...context, error: errorMsg };
22
+ console.error(this.format('error', message, ctx));
23
+ if (error instanceof Error && error.stack) {
24
+ console.error(error.stack);
25
+ }
26
+ }
27
+ debug(message, context) {
28
+ if (this.debugEnabled) {
29
+ console.error(this.format('debug', message, context));
30
+ }
31
+ }
32
+ }
33
+ export const logger = new Logger();
34
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../core/logger.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM;IACF,MAAM,CAAS;IACf,YAAY,CAAU;IAE9B,YAAY,SAAiB,QAAQ;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC;IAChF,CAAC;IAEO,MAAM,CAAC,KAAe,EAAE,OAAe,EAAE,OAAoB;QACnE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,OAAO,IAAI,IAAI,CAAC,MAAM,IAAI,KAAK,KAAK,OAAO,GAAG,GAAG,EAAE,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAoB;QACxC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,OAAoB;QACxC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,KAAmB,EAAE,OAAoB;QAC9D,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QAChE,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QAC5C,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,OAAoB;QACzC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Bridge Discovery
3
+ * Discovers indirect connections between memories through shared associations
4
+ * Uses bidirectional BFS with Dijkstra-style weight prioritization
5
+ * Finds "waypoint" memories that connect otherwise distant memory clusters
6
+ */
7
+ export interface BridgePath {
8
+ route: string[];
9
+ distance: number;
10
+ weight: number;
11
+ associationTypes: string[];
12
+ }
13
+ export interface BridgeMemory {
14
+ memoryId: string;
15
+ memory: any;
16
+ bridgeScore: number;
17
+ pathsThrough: number;
18
+ examplePaths: BridgePath[];
19
+ connectionDensity: number;
20
+ importance: 'critical' | 'major' | 'minor';
21
+ }
22
+ export interface BridgeOptions {
23
+ maxPathLength?: number;
24
+ topBridges?: number;
25
+ minPathWeight?: number;
26
+ includeExamplePaths?: boolean;
27
+ }
28
+ /**
29
+ * Discover bridge memories connecting seed memory clusters
30
+ */
31
+ export declare function discoverBridges(seedMemoryIds: string[], projectId: string, options?: BridgeOptions): Promise<BridgeMemory[]>;
32
+ /**
33
+ * Get bridge memories for a single memory (find what it connects to)
34
+ */
35
+ export declare function getMemoryBridges(memoryId: string, projectId: string, topK?: number): Promise<BridgeMemory[]>;
36
+ /**
37
+ * Analyze overall network connectivity using bridge metrics
38
+ */
39
+ export declare function analyzeNetworkConnectivity(projectId: string, topBridges?: number): Promise<{
40
+ totalMemories: number;
41
+ totalConnections: number;
42
+ averageDegree: number;
43
+ bridgeMemories: BridgeMemory[];
44
+ networkDensity: number;
45
+ clustering: {
46
+ tightClusters: number;
47
+ looseClusters: number;
48
+ };
49
+ }>;
50
+ //# sourceMappingURL=bridge-discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-discovery.d.ts","sourceRoot":"","sources":["../../../core/memory/bridge-discovery.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,GAAG,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;CAC5C;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,aAAa,EAAE,MAAM,EAAE,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,YAAY,EAAE,CAAC,CAqJzB;AAqED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,IAAI,GAAE,MAAU,GACf,OAAO,CAAC,YAAY,EAAE,CAAC,CAkCzB;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,MAAM,EACjB,UAAU,GAAE,MAAW,GACtB,OAAO,CAAC;IACT,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,YAAY,EAAE,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE;QACV,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH,CAAC,CA0ED"}
@@ -0,0 +1,291 @@
1
+ /**
2
+ * Bridge Discovery
3
+ * Discovers indirect connections between memories through shared associations
4
+ * Uses bidirectional BFS with Dijkstra-style weight prioritization
5
+ * Finds "waypoint" memories that connect otherwise distant memory clusters
6
+ */
7
+ import { getDb } from '../../db/index.js';
8
+ import { getSchema } from '../../db/schema.js';
9
+ import { eq } from 'drizzle-orm';
10
+ import { logger } from '../../core/logger.js';
11
+ /**
12
+ * Discover bridge memories connecting seed memory clusters
13
+ */
14
+ export async function discoverBridges(seedMemoryIds, projectId, options = {}) {
15
+ if (seedMemoryIds.length < 2) {
16
+ return [];
17
+ }
18
+ const maxPathLength = options.maxPathLength ?? 4;
19
+ const topBridges = options.topBridges ?? 10;
20
+ const minPathWeight = options.minPathWeight ?? 1;
21
+ try {
22
+ const db = await getDb();
23
+ const schema = await getSchema();
24
+ // Fetch all associations for this project
25
+ const allMemories = await db
26
+ .select()
27
+ .from(schema.memories)
28
+ .where(eq(schema.memories.projectId, projectId));
29
+ const memoriesById = new Map(allMemories.map((m) => [m.id, m]));
30
+ // Get all associations
31
+ const associations = await db.select().from(schema.memoryAssociations);
32
+ // Build adjacency list graph
33
+ const graph = new Map();
34
+ for (const assoc of associations) {
35
+ if (!graph.has(assoc.fromMemoryId)) {
36
+ graph.set(assoc.fromMemoryId, []);
37
+ }
38
+ const edges = graph.get(assoc.fromMemoryId);
39
+ if (edges) {
40
+ edges.push({
41
+ toId: assoc.toMemoryId,
42
+ weight: assoc.weight || 1,
43
+ type: assoc.associationType,
44
+ });
45
+ }
46
+ }
47
+ // Find all paths between seed memories
48
+ const pathMetrics = new Map();
49
+ const allPaths = [];
50
+ for (let i = 0; i < seedMemoryIds.length; i++) {
51
+ for (let j = i + 1; j < seedMemoryIds.length; j++) {
52
+ const start = seedMemoryIds[i];
53
+ const end = seedMemoryIds[j];
54
+ const paths = findPaths(graph, start, end, maxPathLength, minPathWeight);
55
+ for (const path of paths) {
56
+ // Record intermediate nodes (not start or end)
57
+ for (let k = 1; k < path.route.length - 1; k++) {
58
+ const nodeId = path.route[k];
59
+ if (!pathMetrics.has(nodeId)) {
60
+ pathMetrics.set(nodeId, { pathsThrough: 0, weight: 0 });
61
+ }
62
+ const metrics = pathMetrics.get(nodeId);
63
+ metrics.pathsThrough++;
64
+ metrics.weight += path.weight;
65
+ }
66
+ if (options.includeExamplePaths !== false) {
67
+ allPaths.push(path);
68
+ }
69
+ }
70
+ }
71
+ }
72
+ // Calculate bridge scores and convert to BridgeMemory objects
73
+ const bridges = [];
74
+ for (const [memoryId, metrics] of pathMetrics.entries()) {
75
+ const memory = memoriesById.get(memoryId);
76
+ if (!memory)
77
+ continue;
78
+ // Calculate betweenness centrality normalized to 0-100
79
+ const bridgeScore = Math.min(100, (metrics.pathsThrough / (seedMemoryIds.length * (seedMemoryIds.length - 1))) * 1000);
80
+ // Calculate connection density: how many unique memories it connects
81
+ const connectedMemories = new Set();
82
+ const neighbors = graph.get(memoryId) || [];
83
+ for (const neighbor of neighbors) {
84
+ connectedMemories.add(neighbor.toId);
85
+ }
86
+ // Include reverse connections
87
+ for (const [fromId, edges] of graph.entries()) {
88
+ for (const edge of edges) {
89
+ if (edge.toId === memoryId && fromId !== memoryId) {
90
+ connectedMemories.add(fromId);
91
+ }
92
+ }
93
+ }
94
+ const connectionDensity = connectedMemories.size / Math.max(1, allMemories.length);
95
+ // Determine importance level
96
+ let importance;
97
+ if (bridgeScore >= 50) {
98
+ importance = 'critical';
99
+ }
100
+ else if (bridgeScore >= 20) {
101
+ importance = 'major';
102
+ }
103
+ else {
104
+ importance = 'minor';
105
+ }
106
+ // Get example paths through this bridge
107
+ const examplePaths = allPaths
108
+ .filter((p) => p.route.includes(memoryId) &&
109
+ p.route.length > 1)
110
+ .slice(0, 3);
111
+ bridges.push({
112
+ memoryId,
113
+ memory,
114
+ bridgeScore,
115
+ pathsThrough: metrics.pathsThrough,
116
+ examplePaths,
117
+ connectionDensity: Math.round(connectionDensity * 1000) / 1000,
118
+ importance,
119
+ });
120
+ }
121
+ // Sort by bridge score descending
122
+ bridges.sort((a, b) => b.bridgeScore - a.bridgeScore);
123
+ logger.debug('Bridges discovered', {
124
+ seedMemoryCount: seedMemoryIds.length,
125
+ bridgeCount: bridges.length,
126
+ topBridges: bridges.slice(0, topBridges).map((b) => ({
127
+ id: b.memoryId,
128
+ score: b.bridgeScore,
129
+ importance: b.importance,
130
+ })),
131
+ });
132
+ return bridges.slice(0, topBridges);
133
+ }
134
+ catch (error) {
135
+ logger.error('Error discovering bridges', error);
136
+ return [];
137
+ }
138
+ }
139
+ /**
140
+ * Find all shortest paths between two memories up to maxLength
141
+ * Uses BFS with weight-based distance metric
142
+ */
143
+ function findPaths(graph, start, end, maxLength, minWeight) {
144
+ const paths = [];
145
+ const queue = [{ current: start, route: [start], weight: 0, types: [] }];
146
+ const visited = new Set();
147
+ while (queue.length > 0) {
148
+ const { current, route, weight, types } = queue.shift();
149
+ // Stop if we've exceeded max path length
150
+ if (route.length > maxLength)
151
+ continue;
152
+ // Skip if already visited in shorter path
153
+ const routeKey = route.join('->');
154
+ if (visited.has(routeKey))
155
+ continue;
156
+ visited.add(routeKey);
157
+ // Check if we reached the destination
158
+ if (current === end && route.length > 1) {
159
+ paths.push({
160
+ route,
161
+ distance: route.length - 1,
162
+ weight,
163
+ associationTypes: types,
164
+ });
165
+ continue;
166
+ }
167
+ // Explore neighbors
168
+ const neighbors = graph.get(current) || [];
169
+ for (const neighbor of neighbors) {
170
+ // Skip if creating a cycle (except for final destination)
171
+ if (neighbor.toId !== end && route.includes(neighbor.toId))
172
+ continue;
173
+ // Skip if weight below threshold
174
+ if (neighbor.weight < minWeight)
175
+ continue;
176
+ queue.push({
177
+ current: neighbor.toId,
178
+ route: [...route, neighbor.toId],
179
+ weight: weight + neighbor.weight,
180
+ types: [...types, neighbor.type],
181
+ });
182
+ }
183
+ }
184
+ // Sort by weight (distance metric) and keep top paths
185
+ paths.sort((a, b) => b.weight - a.weight);
186
+ return paths.slice(0, 5); // Return top 5 paths
187
+ }
188
+ /**
189
+ * Get bridge memories for a single memory (find what it connects to)
190
+ */
191
+ export async function getMemoryBridges(memoryId, projectId, topK = 5) {
192
+ try {
193
+ const db = await getDb();
194
+ const schema = await getSchema();
195
+ // Find memories connected to this one
196
+ const associations = await db
197
+ .select()
198
+ .from(schema.memoryAssociations)
199
+ .where(eq(schema.memoryAssociations.fromMemoryId, memoryId));
200
+ if (associations.length === 0) {
201
+ return [];
202
+ }
203
+ // Get connected memory IDs
204
+ const connectedIds = new Set();
205
+ for (const assoc of associations) {
206
+ connectedIds.add(assoc.toMemoryId);
207
+ }
208
+ if (connectedIds.size < 2) {
209
+ return [];
210
+ }
211
+ // Discover bridges between connected memories
212
+ const seedIds = Array.from(connectedIds);
213
+ const bridges = await discoverBridges(seedIds, projectId, { topBridges: topK });
214
+ return bridges;
215
+ }
216
+ catch (error) {
217
+ logger.error('Error getting memory bridges', error);
218
+ return [];
219
+ }
220
+ }
221
+ /**
222
+ * Analyze overall network connectivity using bridge metrics
223
+ */
224
+ export async function analyzeNetworkConnectivity(projectId, topBridges = 20) {
225
+ try {
226
+ const db = await getDb();
227
+ const schema = await getSchema();
228
+ // Get all memories
229
+ const allMemories = await db
230
+ .select()
231
+ .from(schema.memories)
232
+ .where(eq(schema.memories.projectId, projectId));
233
+ if (allMemories.length < 2) {
234
+ return {
235
+ totalMemories: allMemories.length,
236
+ totalConnections: 0,
237
+ averageDegree: 0,
238
+ bridgeMemories: [],
239
+ networkDensity: 0,
240
+ clustering: { tightClusters: 0, looseClusters: 0 },
241
+ };
242
+ }
243
+ // Get all associations
244
+ const associations = await db.select().from(schema.memoryAssociations);
245
+ // Calculate graph metrics
246
+ const degree = new Map();
247
+ for (const memory of allMemories) {
248
+ degree.set(memory.id, 0);
249
+ }
250
+ for (const assoc of associations) {
251
+ degree.set(assoc.fromMemoryId, (degree.get(assoc.fromMemoryId) || 0) + 1);
252
+ }
253
+ const avgDegree = Array.from(degree.values()).reduce((a, b) => a + b, 0) / allMemories.length;
254
+ const networkDensity = (associations.length * 2) / (allMemories.length * (allMemories.length - 1));
255
+ // Discover bridges for all memories
256
+ const seedIds = allMemories.slice(0, Math.min(10, allMemories.length)).map((m) => m.id);
257
+ const bridges = await discoverBridges(seedIds, projectId, { topBridges });
258
+ // Cluster analysis based on connectivity
259
+ let tightClusters = 0;
260
+ let looseClusters = 0;
261
+ for (const memory of allMemories) {
262
+ const connectionCount = degree.get(memory.id) || 0;
263
+ if (connectionCount > avgDegree * 1.5) {
264
+ tightClusters++;
265
+ }
266
+ else if (connectionCount < avgDegree * 0.5) {
267
+ looseClusters++;
268
+ }
269
+ }
270
+ return {
271
+ totalMemories: allMemories.length,
272
+ totalConnections: associations.length,
273
+ averageDegree: Math.round(avgDegree * 100) / 100,
274
+ bridgeMemories: bridges,
275
+ networkDensity: Math.round(networkDensity * 10000) / 10000,
276
+ clustering: { tightClusters, looseClusters },
277
+ };
278
+ }
279
+ catch (error) {
280
+ logger.error('Error analyzing network connectivity', error);
281
+ return {
282
+ totalMemories: 0,
283
+ totalConnections: 0,
284
+ averageDegree: 0,
285
+ bridgeMemories: [],
286
+ networkDensity: 0,
287
+ clustering: { tightClusters: 0, looseClusters: 0 },
288
+ };
289
+ }
290
+ }
291
+ //# sourceMappingURL=bridge-discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-discovery.js","sourceRoot":"","sources":["../../../core/memory/bridge-discovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Entity Extractor
3
+ * Extracts named entities from memory content
4
+ * Supports people, files, functions, dates, locations, concepts, tools, and patterns
5
+ */
6
+ export type EntityType = 'person' | 'file' | 'function' | 'class' | 'concept' | 'tool' | 'date' | 'location' | 'pattern' | 'technique' | 'other';
7
+ export interface ExtractedEntity {
8
+ name: string;
9
+ type: EntityType;
10
+ confidence: number;
11
+ startIndex: number;
12
+ endIndex: number;
13
+ context: string;
14
+ normalized?: string;
15
+ }
16
+ /**
17
+ * Extract entities from content
18
+ */
19
+ export declare function extractEntities(content: string): Promise<ExtractedEntity[]>;
20
+ /**
21
+ * Link extracted entities to memory records
22
+ * Creates entity records in the knowledge graph
23
+ */
24
+ export declare function linkEntitiesToMemories(memoryId: string, entities: ExtractedEntity[]): Promise<void>;
25
+ /**
26
+ * Get entities extracted from a memory based on properties
27
+ */
28
+ export declare function getMemoryEntities(memoryId: string): Promise<ExtractedEntity[]>;
29
+ /**
30
+ * Get all entities for a project
31
+ */
32
+ export declare function getProjectEntities(projectId: string, type?: EntityType): Promise<any[]>;
33
+ //# sourceMappingURL=entity-extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-extractor.d.ts","sourceRoot":"","sources":["../../../core/memory/entity-extractor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,MAAM,GACN,UAAU,GACV,OAAO,GACP,SAAS,GACT,MAAM,GACN,MAAM,GACN,UAAU,GACV,SAAS,GACT,WAAW,GACX,OAAO,CAAC;AAEZ,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAsCD;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAgLjF;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,eAAe,EAAE,GAC1B,OAAO,CAAC,IAAI,CAAC,CA2Df;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CA8BpF;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,UAAU,GAChB,OAAO,CAAC,GAAG,EAAE,CAAC,CAgBhB"}