squish-memory 1.0.2 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (704) hide show
  1. package/.env.example +146 -0
  2. package/CHANGELOG.md +202 -0
  3. package/README.md +192 -287
  4. package/{scripts → bin}/dependency-manager.mjs +217 -217
  5. package/{scripts → bin}/detect-clients.mjs +78 -78
  6. package/bin/install-interactive.mjs +321 -0
  7. package/bin/squish-mcp.mjs +46 -0
  8. package/bin/squish.mjs +33 -0
  9. package/config/mcp-migration-map.json +1 -6
  10. package/config/mcp-mode-semantics.json +10 -12
  11. package/config/mcp-remote-auth.json +3 -26
  12. package/config/mcp-universal.schema.json +5 -35
  13. package/config/settings.json +78 -22
  14. package/config.js +5 -0
  15. package/config.ts +218 -0
  16. package/core/adapters/config/claude-code.ts +133 -0
  17. package/core/adapters/config/cursor.ts +90 -0
  18. package/core/adapters/config/opencode.ts +89 -0
  19. package/core/adapters/config/windsurf.ts +90 -0
  20. package/core/adapters/index.ts +102 -0
  21. package/core/adapters/timeline.ts +116 -0
  22. package/core/adapters/types.ts +166 -0
  23. package/core/agent-preferences.ts +140 -0
  24. package/core/algorithms/analytics/token-estimator.ts +216 -0
  25. package/core/algorithms/detection/hash-filters.ts +260 -0
  26. package/core/algorithms/detection/semantic-ranker.ts +194 -0
  27. package/core/algorithms/detection/two-stage-detector.ts +421 -0
  28. package/core/algorithms/handlers/approve-merge.ts +215 -0
  29. package/core/algorithms/handlers/detect-duplicates.ts +192 -0
  30. package/core/algorithms/handlers/get-stats.ts +132 -0
  31. package/core/algorithms/handlers/list-proposals.ts +130 -0
  32. package/core/algorithms/handlers/preview-merge.ts +139 -0
  33. package/core/algorithms/handlers/reject-merge.ts +93 -0
  34. package/core/algorithms/handlers/reverse-merge.ts +155 -0
  35. package/core/algorithms/index.ts +39 -0
  36. package/core/algorithms/operations/cache-maintenance.ts +182 -0
  37. package/core/algorithms/safety/safety-checks.ts +256 -0
  38. package/core/algorithms/strategies/merge-strategies.ts +381 -0
  39. package/core/algorithms/types.ts +140 -0
  40. package/core/algorithms/utils/response-builder.ts +61 -0
  41. package/core/associations.ts +363 -0
  42. package/core/beliefs/decay.ts +289 -0
  43. package/core/beliefs/extractor.ts +131 -0
  44. package/core/beliefs/store.ts +557 -0
  45. package/core/beliefs/types.ts +38 -0
  46. package/core/commands/mcp-server.ts +5 -0
  47. package/core/compression.ts +177 -0
  48. package/core/config.js +2 -0
  49. package/core/consolidation.ts +330 -0
  50. package/core/context/agent-context.ts +388 -0
  51. package/core/context/context-paging.ts +449 -0
  52. package/core/context/context-window.ts +234 -0
  53. package/core/context/context.ts +35 -0
  54. package/core/embeddings/embeddings.ts +616 -0
  55. package/core/embeddings/google-multimodal.ts +200 -0
  56. package/core/embeddings/local-embeddings.ts +12 -0
  57. package/core/embeddings/qmd-client.ts +495 -0
  58. package/core/embeddings/transformers-local.ts +261 -0
  59. package/core/embeddings.js +4 -0
  60. package/core/error-handling.ts +206 -0
  61. package/core/external +219 -0
  62. package/core/graph/entity-deduplicator.ts +232 -0
  63. package/core/graph/graph-builder.ts +257 -0
  64. package/core/graph/graph-traversal.ts +490 -0
  65. package/core/graph/index.ts +24 -0
  66. package/core/graph/llm-entity-extractor.ts +402 -0
  67. package/core/graph/multi-hop-retrieval.ts +317 -0
  68. package/core/graph/relationship-extractor.ts +465 -0
  69. package/core/hooks/agent-hooks.ts +653 -0
  70. package/core/hooks/auto-tagger.ts +149 -0
  71. package/core/hooks/capture-filter.ts +169 -0
  72. package/core/hot-cache.ts +388 -0
  73. package/core/index.ts +10 -0
  74. package/core/ingestion/agent-memory.ts +167 -0
  75. package/core/ingestion/core-memory.ts +326 -0
  76. package/core/ingestion/learnings.ts +260 -0
  77. package/core/ingestion/signal-engine.ts +266 -0
  78. package/core/integrations/obsidian-vault.ts +197 -0
  79. package/core/layers/generator.ts +115 -0
  80. package/core/lib/db-client.ts +168 -0
  81. package/core/lib/parse-embedding.ts +59 -0
  82. package/core/lib/schemas.ts +102 -0
  83. package/core/lib/types.ts +49 -0
  84. package/core/lib/utils.ts +151 -0
  85. package/core/lib/validation.ts +180 -0
  86. package/core/lifecycle.ts +353 -0
  87. package/core/logger.ts +59 -0
  88. package/core/memory/bridge-discovery.ts +395 -0
  89. package/core/memory/categorizer.ts +390 -0
  90. package/core/memory/conflict-detector.ts +62 -0
  91. package/core/memory/consolidation.ts +372 -0
  92. package/core/memory/context-collector.ts +75 -0
  93. package/core/memory/contradiction-resolver.ts +494 -0
  94. package/core/memory/edit-workflow.ts +174 -0
  95. package/core/memory/entity-extractor.ts +426 -0
  96. package/core/memory/entity-resolver.ts +89 -0
  97. package/core/memory/explain.ts +112 -0
  98. package/core/memory/fact-deriver.ts +300 -0
  99. package/core/memory/fact-extractor.ts +120 -0
  100. package/core/memory/feedback-tracker.ts +200 -0
  101. package/core/memory/hooks.ts +230 -0
  102. package/core/memory/hybrid-retrieval.ts +65 -0
  103. package/core/memory/hybrid-scorer.ts +325 -0
  104. package/core/memory/hybrid-search.ts +748 -0
  105. package/core/memory/importance.ts +319 -0
  106. package/core/memory/index.ts +11 -0
  107. package/core/memory/loader.ts +178 -0
  108. package/core/memory/markdown/markdown-storage.ts +318 -0
  109. package/core/memory/memories.ts +565 -0
  110. package/core/memory/memory-lifecycle.ts +51 -0
  111. package/core/memory/memory-manager.ts +53 -0
  112. package/core/memory/migrate.ts +173 -0
  113. package/core/memory/normalization.ts +30 -0
  114. package/core/memory/path-strengthener.ts +211 -0
  115. package/core/memory/progressive-disclosure.ts +392 -0
  116. package/core/memory/query-processor.ts +130 -0
  117. package/core/memory/query-rewriter.ts +153 -0
  118. package/core/memory/response-analyzer.ts +81 -0
  119. package/core/memory/retrieval-feedback.ts +276 -0
  120. package/core/memory/serialization.ts +83 -0
  121. package/core/memory/stale-cleaner.ts +147 -0
  122. package/core/memory/stats.ts +181 -0
  123. package/core/memory/telemetry.ts +392 -0
  124. package/core/memory/temporal-facts.ts +356 -0
  125. package/core/memory/temporal-parser.ts +477 -0
  126. package/core/memory/trigger-detector.ts +104 -0
  127. package/core/memory/write-gate.ts +288 -0
  128. package/core/places/index.ts +14 -0
  129. package/core/places/memory-places.ts +339 -0
  130. package/core/places/places.ts +406 -0
  131. package/core/places/rules.ts +308 -0
  132. package/core/places/walking.ts +192 -0
  133. package/core/projects +89 -0
  134. package/core/projects.ts +131 -0
  135. package/core/redis.ts +82 -0
  136. package/core/responses.ts +187 -0
  137. package/core/runtime/trust-report.ts +195 -0
  138. package/core/runtime/trust-state.ts +360 -0
  139. package/core/scheduler/cron-scheduler.ts +581 -0
  140. package/core/scheduler/heartbeat.ts +91 -0
  141. package/core/scheduler/index.ts +8 -0
  142. package/core/scheduler/job-runner.ts +197 -0
  143. package/core/search/conversations.ts +166 -0
  144. package/core/search/entities.ts +46 -0
  145. package/core/search/folder-context.ts +154 -0
  146. package/core/search/graph-boost.ts +22 -0
  147. package/core/search/index.ts +4 -0
  148. package/core/search/qmd-wrapper.ts +84 -0
  149. package/core/security/encrypt.ts +51 -0
  150. package/core/security/governance.ts +102 -0
  151. package/core/security/privacy.ts +108 -0
  152. package/core/security/secret-detector.ts +122 -0
  153. package/core/session/auto-load.ts +160 -0
  154. package/core/session/entity-tracker.ts +363 -0
  155. package/core/session/index.ts +7 -0
  156. package/core/session/reference-resolver.ts +158 -0
  157. package/core/session/self-iteration-job.ts +478 -0
  158. package/core/session/session-hooks.ts +69 -0
  159. package/core/session/types.ts +36 -0
  160. package/core/session/working-set.ts +275 -0
  161. package/core/snapshots/cleanup.ts +13 -0
  162. package/core/snapshots/comparison.ts +59 -0
  163. package/core/snapshots/creation.ts +139 -0
  164. package/core/snapshots/retrieval.ts +44 -0
  165. package/core/snapshots/stats.ts +63 -0
  166. package/core/storage/cache.ts +241 -0
  167. package/core/storage/database.ts +23 -0
  168. package/core/summarization/cleanup.ts +13 -0
  169. package/core/summarization/queries.ts +32 -0
  170. package/core/summarization/stats.ts +64 -0
  171. package/core/summarization/strategies.ts +52 -0
  172. package/core/summarization.ts +248 -0
  173. package/core/temporal-facts.ts +244 -0
  174. package/core/tracing/collector.ts +470 -0
  175. package/core/tracing/visualizer.ts +195 -0
  176. package/core/utils/cleanup-operations.ts +50 -0
  177. package/core/utils/content-extraction.ts +95 -0
  178. package/core/utils/filter-builder.ts +56 -0
  179. package/core/utils/history-traversal.ts +63 -0
  180. package/core/utils/memory-operations.ts +56 -0
  181. package/core/utils/query-operations.ts +83 -0
  182. package/core/utils/summarization-helpers.ts +45 -0
  183. package/core/utils/temporal-queries.ts +39 -0
  184. package/core/utils/vector-operations.ts +135 -0
  185. package/core/utils/version-management.ts +74 -0
  186. package/core/worker.ts +324 -0
  187. package/db/adapter.ts +215 -0
  188. package/db/bootstrap.ts +1055 -0
  189. package/db/drizzle/migrations/0000_needy_cerebro.sql +402 -0
  190. package/db/drizzle/migrations/meta/0000_snapshot.json +3451 -0
  191. package/db/drizzle/migrations/meta/_journal.json +13 -0
  192. package/db/drizzle/schema-sqlite.ts +1032 -0
  193. package/db/drizzle/schema.ts +1128 -0
  194. package/db/drizzle.config.ts +12 -0
  195. package/db/index.ts +83 -0
  196. package/db/init.sql +5 -0
  197. package/db/migrations/associations.ts +35 -0
  198. package/db/migrations/beliefs.ts +89 -0
  199. package/db/migrations/core-memory.ts +35 -0
  200. package/db/migrations/fts.ts +59 -0
  201. package/db/migrations/index.ts +54 -0
  202. package/db/migrations/indexes.ts +36 -0
  203. package/db/migrations/learnings.ts +34 -0
  204. package/db/migrations/maintenance.ts +68 -0
  205. package/db/migrations/memories.ts +22 -0
  206. package/db/migrations/memory-places.ts +35 -0
  207. package/db/migrations/places.ts +49 -0
  208. package/db/migrations/projects.ts +21 -0
  209. package/db/migrations/tier-conversion.ts +24 -0
  210. package/db/neon.ts +22 -0
  211. package/db/schema/beliefs.ts +50 -0
  212. package/db/schema/generator.ts +159 -0
  213. package/db/schema/index.ts +58 -0
  214. package/db/schema/learnings.ts +32 -0
  215. package/db/schema/memories.ts +83 -0
  216. package/db/schema/projects.ts +33 -0
  217. package/db/schema.ts +13 -0
  218. package/db/supabase.ts +27 -0
  219. package/dist/config.d.ts +61 -14
  220. package/dist/config.js +159 -139
  221. package/dist/core/adapters/config/claude-code.d.ts +45 -0
  222. package/dist/core/adapters/config/claude-code.js +113 -0
  223. package/dist/core/adapters/config/cursor.d.ts +26 -0
  224. package/dist/core/adapters/config/cursor.js +74 -0
  225. package/dist/core/adapters/config/opencode.d.ts +23 -0
  226. package/dist/core/adapters/config/opencode.js +73 -0
  227. package/dist/core/adapters/config/windsurf.d.ts +26 -0
  228. package/dist/core/adapters/config/windsurf.js +74 -0
  229. package/dist/core/adapters/index.d.ts +45 -0
  230. package/dist/core/adapters/index.js +84 -0
  231. package/dist/core/adapters/scripts/install-adapter.d.ts +19 -0
  232. package/dist/core/adapters/scripts/install-adapter.js +149 -0
  233. package/dist/core/adapters/timeline.d.ts +23 -0
  234. package/dist/core/adapters/timeline.js +88 -0
  235. package/dist/core/adapters/types.d.ts +137 -0
  236. package/dist/core/adapters/types.js +50 -0
  237. package/dist/core/agent-preferences.d.ts +16 -0
  238. package/dist/core/agent-preferences.js +124 -0
  239. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.d.ts +1 -1
  240. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.js +3 -3
  241. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.d.ts +1 -1
  242. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.js +1 -1
  243. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.d.ts +1 -1
  244. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.js +7 -10
  245. package/dist/{algorithms → core/algorithms}/handlers/approve-merge.js +4 -4
  246. package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.js +3 -3
  247. package/dist/{algorithms → core/algorithms}/handlers/get-stats.js +3 -3
  248. package/dist/{algorithms → core/algorithms}/handlers/list-proposals.js +3 -3
  249. package/dist/{algorithms → core/algorithms}/handlers/preview-merge.js +3 -3
  250. package/dist/{algorithms → core/algorithms}/handlers/reject-merge.js +3 -3
  251. package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.js +3 -3
  252. package/dist/core/algorithms/index.d.ts +21 -0
  253. package/dist/core/algorithms/index.js +26 -0
  254. package/dist/core/algorithms/operations/cache-maintenance.d.ts +12 -0
  255. package/dist/core/algorithms/operations/cache-maintenance.js +157 -0
  256. package/dist/{algorithms → core/algorithms}/safety/safety-checks.d.ts +2 -6
  257. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.d.ts +19 -1
  258. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.js +74 -123
  259. package/dist/core/algorithms/types.d.ts +125 -0
  260. package/dist/core/algorithms/types.js +5 -0
  261. package/dist/core/associations.d.ts +3 -2
  262. package/dist/core/associations.js +37 -2
  263. package/dist/core/autosave.d.ts +19 -0
  264. package/dist/core/autosave.js +16 -0
  265. package/dist/core/beliefs/decay.d.ts +27 -0
  266. package/dist/core/beliefs/decay.js +217 -0
  267. package/dist/core/beliefs/extractor.d.ts +9 -0
  268. package/dist/core/beliefs/extractor.js +113 -0
  269. package/dist/core/beliefs/store.d.ts +46 -0
  270. package/dist/core/beliefs/store.js +466 -0
  271. package/dist/core/beliefs/types.d.ts +28 -0
  272. package/dist/core/beliefs/types.js +2 -0
  273. package/dist/core/commands/mcp-server.d.ts +2 -0
  274. package/dist/core/commands/mcp-server.js +6 -0
  275. package/dist/core/commands/remember.d.ts +24 -0
  276. package/dist/core/commands/remember.js +144 -0
  277. package/dist/core/compression.d.ts +45 -0
  278. package/dist/core/compression.js +160 -0
  279. package/dist/core/context/agent-context.d.ts +106 -0
  280. package/dist/core/context/agent-context.js +274 -0
  281. package/dist/core/{context-paging.d.ts → context/context-paging.d.ts} +2 -12
  282. package/dist/core/{context-paging.js → context/context-paging.js} +19 -39
  283. package/dist/core/context/context-window.d.ts +40 -0
  284. package/dist/core/context/context-window.js +177 -0
  285. package/dist/core/context/context.js +22 -0
  286. package/dist/core/embeddings/embeddings.d.ts +29 -0
  287. package/dist/core/embeddings/embeddings.js +546 -0
  288. package/dist/core/embeddings/google-multimodal.js +6 -2
  289. package/dist/core/embeddings/local-embeddings.d.ts +11 -0
  290. package/dist/core/embeddings/local-embeddings.js +11 -0
  291. package/dist/core/embeddings/qmd-client.js +1 -1
  292. package/dist/core/embeddings/transformers-local.d.ts +64 -0
  293. package/dist/core/embeddings/transformers-local.js +213 -0
  294. package/dist/core/embeddings.d.ts +1 -28
  295. package/dist/core/embeddings.js +2 -401
  296. package/dist/core/error-handling.d.ts +63 -0
  297. package/dist/core/error-handling.js +173 -0
  298. package/dist/core/graph/entity-deduplicator.d.ts +24 -0
  299. package/dist/core/graph/entity-deduplicator.js +183 -0
  300. package/dist/core/graph/graph-builder.d.ts +46 -0
  301. package/dist/core/graph/graph-builder.js +174 -0
  302. package/dist/core/graph/graph-traversal.d.ts +80 -0
  303. package/dist/core/graph/graph-traversal.js +315 -0
  304. package/dist/core/graph/index.d.ts +19 -0
  305. package/dist/core/graph/index.js +13 -0
  306. package/dist/core/graph/llm-entity-extractor.d.ts +49 -0
  307. package/dist/core/graph/llm-entity-extractor.js +313 -0
  308. package/dist/core/graph/multi-hop-retrieval.d.ts +48 -0
  309. package/dist/core/graph/multi-hop-retrieval.js +215 -0
  310. package/dist/core/graph/relationship-extractor.d.ts +48 -0
  311. package/dist/core/graph/relationship-extractor.js +351 -0
  312. package/dist/core/hooks/agent-hooks.d.ts +83 -0
  313. package/dist/core/hooks/agent-hooks.js +521 -0
  314. package/dist/core/hooks/auto-tagger.d.ts +19 -0
  315. package/dist/core/hooks/auto-tagger.js +155 -0
  316. package/dist/core/hooks/capture-filter.d.ts +41 -0
  317. package/dist/core/hooks/capture-filter.js +128 -0
  318. package/dist/core/hot-cache.d.ts +86 -0
  319. package/dist/core/hot-cache.js +285 -0
  320. package/dist/core/index.d.ts +9 -9
  321. package/dist/core/index.js +9 -12
  322. package/dist/core/{agent-memory.js → ingestion/agent-memory.js} +5 -7
  323. package/dist/core/{core-memory.d.ts → ingestion/core-memory.d.ts} +2 -2
  324. package/dist/core/{core-memory.js → ingestion/core-memory.js} +7 -7
  325. package/dist/core/ingestion/learnings.d.ts +57 -0
  326. package/dist/core/ingestion/learnings.js +205 -0
  327. package/dist/core/ingestion/signal-engine.d.ts +41 -0
  328. package/dist/core/ingestion/signal-engine.js +201 -0
  329. package/dist/core/integrations/obsidian-vault.d.ts +31 -0
  330. package/dist/core/integrations/obsidian-vault.js +156 -0
  331. package/dist/core/lib/db-client.d.ts +114 -0
  332. package/dist/core/lib/db-client.js +130 -0
  333. package/dist/core/lib/parse-embedding.d.ts +9 -0
  334. package/dist/core/lib/parse-embedding.js +58 -0
  335. package/dist/core/lib/schemas.d.ts +132 -0
  336. package/dist/core/lib/schemas.js +87 -0
  337. package/dist/core/lib/types.d.ts +45 -0
  338. package/dist/core/lib/types.js +6 -0
  339. package/dist/core/{utils.d.ts → lib/utils.d.ts} +5 -0
  340. package/dist/core/lib/utils.js +145 -0
  341. package/dist/core/lib/validation.d.ts +38 -0
  342. package/dist/core/lib/validation.js +151 -0
  343. package/dist/core/lifecycle.d.ts +7 -1
  344. package/dist/core/lifecycle.js +152 -42
  345. package/dist/core/logger.d.ts +1 -0
  346. package/dist/core/logger.js +13 -1
  347. package/dist/core/mcp/tools.d.ts +0 -2
  348. package/dist/core/mcp/tools.js +35 -90
  349. package/dist/core/mcp/types.d.ts +25 -253
  350. package/dist/core/mcp/types.js +2 -2
  351. package/dist/core/memory/categorizer.js +2 -0
  352. package/dist/core/memory/conflict-detector.js +1 -1
  353. package/dist/core/memory/consolidation.d.ts +1 -10
  354. package/dist/core/memory/consolidation.js +4 -39
  355. package/dist/core/memory/context-collector.js +1 -1
  356. package/dist/core/memory/edit-workflow.js +1 -1
  357. package/dist/core/memory/entity-extractor.d.ts +4 -0
  358. package/dist/core/memory/entity-extractor.js +30 -16
  359. package/dist/core/memory/entity-resolver.js +7 -7
  360. package/dist/core/memory/explain.d.ts +18 -0
  361. package/dist/core/memory/explain.js +92 -0
  362. package/dist/core/memory/fact-deriver.d.ts +31 -0
  363. package/dist/core/memory/fact-deriver.js +236 -0
  364. package/dist/core/memory/fact-extractor.js +12 -12
  365. package/dist/core/memory/feedback-tracker.js +1 -1
  366. package/dist/core/memory/hooks.d.ts +88 -0
  367. package/dist/core/memory/hooks.js +174 -0
  368. package/dist/core/memory/hybrid-retrieval.d.ts +14 -16
  369. package/dist/core/memory/hybrid-retrieval.js +25 -127
  370. package/dist/core/memory/hybrid-scorer.js +6 -23
  371. package/dist/core/memory/hybrid-search.d.ts +9 -11
  372. package/dist/core/memory/hybrid-search.js +496 -273
  373. package/dist/core/memory/importance.d.ts +2 -24
  374. package/dist/core/memory/importance.js +7 -91
  375. package/dist/core/memory/index.d.ts +1 -0
  376. package/dist/core/memory/index.js +1 -0
  377. package/dist/core/memory/loader.d.ts +31 -0
  378. package/dist/core/memory/loader.js +141 -0
  379. package/dist/core/memory/markdown/markdown-storage.d.ts +72 -0
  380. package/dist/core/memory/markdown/markdown-storage.js +243 -0
  381. package/dist/core/memory/memories.d.ts +23 -19
  382. package/dist/core/memory/memories.js +243 -228
  383. package/dist/core/memory/memory-lifecycle.d.ts +8 -0
  384. package/dist/core/memory/memory-lifecycle.js +47 -0
  385. package/dist/core/memory/migrate.d.ts +21 -0
  386. package/dist/core/memory/migrate.js +134 -0
  387. package/dist/core/memory/normalization.d.ts +7 -0
  388. package/dist/core/memory/normalization.js +26 -0
  389. package/dist/core/memory/path-strengthener.d.ts +39 -0
  390. package/dist/core/memory/path-strengthener.js +150 -0
  391. package/dist/core/memory/progressive-disclosure.js +1 -1
  392. package/dist/core/memory/query-processor.js +37 -3
  393. package/dist/core/memory/query-rewriter.js +9 -9
  394. package/dist/core/memory/retrieval-feedback.d.ts +70 -0
  395. package/dist/core/memory/retrieval-feedback.js +213 -0
  396. package/dist/core/memory/serialization.d.ts +4 -0
  397. package/dist/core/memory/serialization.js +49 -0
  398. package/dist/core/memory/stale-cleaner.d.ts +26 -0
  399. package/dist/core/memory/stale-cleaner.js +97 -0
  400. package/dist/core/memory/stats.d.ts +15 -0
  401. package/dist/core/memory/stats.js +69 -13
  402. package/dist/core/memory/temporal-facts.js +21 -0
  403. package/dist/core/memory/trigger-detector.d.ts +8 -1
  404. package/dist/core/memory/trigger-detector.js +42 -5
  405. package/dist/core/memory/write-gate.js +1 -1
  406. package/dist/core/places/index.d.ts +14 -0
  407. package/dist/core/places/index.js +14 -0
  408. package/dist/core/places/memory-places.d.ts +68 -0
  409. package/dist/core/places/memory-places.js +261 -0
  410. package/dist/core/places/places.d.ts +88 -0
  411. package/dist/core/places/places.js +314 -0
  412. package/dist/core/places/rules.d.ts +74 -0
  413. package/dist/core/places/rules.js +240 -0
  414. package/dist/core/places/walking.d.ts +56 -0
  415. package/dist/core/places/walking.js +121 -0
  416. package/dist/core/projects.d.ts +5 -0
  417. package/dist/core/projects.js +47 -18
  418. package/dist/core/responses.d.ts +96 -0
  419. package/dist/core/responses.js +122 -0
  420. package/dist/core/runtime/trust-report.d.ts +102 -0
  421. package/dist/core/runtime/trust-report.js +107 -0
  422. package/dist/core/runtime/trust-state.d.ts +12 -0
  423. package/dist/core/runtime/trust-state.js +309 -0
  424. package/dist/core/scheduler/cron-scheduler.d.ts +1 -1
  425. package/dist/core/scheduler/cron-scheduler.js +193 -10
  426. package/dist/core/scheduler/index.d.ts +1 -1
  427. package/dist/core/scheduler/index.js +1 -1
  428. package/dist/core/scheduler/job-runner.js +2 -2
  429. package/dist/core/search/conversations.js +40 -42
  430. package/dist/core/search/entities.js +6 -9
  431. package/dist/core/search/graph-boost.d.ts +7 -0
  432. package/dist/core/search/graph-boost.js +23 -0
  433. package/dist/core/search/qmd-wrapper.d.ts +36 -0
  434. package/dist/core/search/qmd-wrapper.js +58 -0
  435. package/dist/core/security/encrypt.d.ts +6 -0
  436. package/dist/core/security/encrypt.js +47 -0
  437. package/dist/core/{governance.d.ts → security/governance.d.ts} +6 -1
  438. package/dist/core/security/governance.js +79 -0
  439. package/dist/core/session/auto-load.js +34 -9
  440. package/dist/core/session/entity-tracker.d.ts +62 -0
  441. package/dist/core/session/entity-tracker.js +287 -0
  442. package/dist/core/session/index.d.ts +1 -1
  443. package/dist/core/session/index.js +1 -1
  444. package/dist/core/session/reference-resolver.d.ts +26 -0
  445. package/dist/core/session/reference-resolver.js +121 -0
  446. package/dist/core/{session-hooks → session}/self-iteration-job.d.ts +15 -0
  447. package/dist/core/{session-hooks → session}/self-iteration-job.js +195 -90
  448. package/dist/core/session/working-set.d.ts +50 -0
  449. package/dist/core/session/working-set.js +212 -0
  450. package/dist/core/snapshots/creation.d.ts +2 -8
  451. package/dist/core/snapshots/creation.js +3 -12
  452. package/dist/core/{cache.js → storage/cache.js} +2 -2
  453. package/dist/core/utils/memory-operations.js +1 -1
  454. package/dist/core/utils/summarization-helpers.d.ts +0 -4
  455. package/dist/core/utils/summarization-helpers.js +1 -6
  456. package/dist/core/utils/vector-operations.d.ts +71 -0
  457. package/dist/core/utils/vector-operations.js +129 -0
  458. package/dist/db/adapter.d.ts +3 -3
  459. package/dist/db/adapter.js +99 -88
  460. package/dist/db/bootstrap.d.ts +2 -0
  461. package/dist/db/bootstrap.js +921 -674
  462. package/dist/{drizzle → db/drizzle}/schema-sqlite.d.ts +775 -25
  463. package/dist/{drizzle → db/drizzle}/schema-sqlite.js +170 -24
  464. package/dist/{drizzle → db/drizzle}/schema.d.ts +731 -32
  465. package/dist/{drizzle → db/drizzle}/schema.js +192 -32
  466. package/dist/db/drizzle.config.d.ts +3 -0
  467. package/dist/db/drizzle.config.js +12 -0
  468. package/dist/db/index.d.ts +1 -5
  469. package/dist/db/index.js +51 -8
  470. package/dist/db/migrations/associations.d.ts +6 -0
  471. package/dist/db/migrations/associations.js +29 -0
  472. package/dist/db/migrations/beliefs.d.ts +10 -0
  473. package/dist/db/migrations/beliefs.js +76 -0
  474. package/dist/db/migrations/core-memory.d.ts +6 -0
  475. package/dist/db/migrations/core-memory.js +29 -0
  476. package/dist/db/migrations/fts.d.ts +6 -0
  477. package/dist/db/migrations/fts.js +52 -0
  478. package/dist/db/migrations/index.d.ts +25 -0
  479. package/dist/db/migrations/index.js +51 -0
  480. package/dist/db/migrations/indexes.d.ts +6 -0
  481. package/dist/db/migrations/indexes.js +30 -0
  482. package/dist/db/migrations/learnings.d.ts +7 -0
  483. package/dist/db/migrations/learnings.js +26 -0
  484. package/dist/db/migrations/maintenance.d.ts +6 -0
  485. package/dist/db/migrations/maintenance.js +61 -0
  486. package/dist/db/migrations/memories.d.ts +7 -0
  487. package/dist/db/migrations/memories.js +16 -0
  488. package/dist/db/migrations/memory-places.d.ts +6 -0
  489. package/dist/db/migrations/memory-places.js +29 -0
  490. package/dist/db/migrations/places.d.ts +6 -0
  491. package/dist/db/migrations/places.js +43 -0
  492. package/dist/db/migrations/projects.d.ts +3 -0
  493. package/dist/db/migrations/projects.js +13 -0
  494. package/dist/db/migrations/tier-conversion.d.ts +7 -0
  495. package/dist/db/migrations/tier-conversion.js +20 -0
  496. package/dist/db/neon.d.ts +8 -0
  497. package/dist/db/neon.js +20 -0
  498. package/dist/db/schema/beliefs.d.ts +9 -0
  499. package/dist/db/schema/beliefs.js +46 -0
  500. package/dist/db/schema/generator.d.ts +38 -0
  501. package/dist/db/schema/generator.js +108 -0
  502. package/dist/db/schema/index.d.ts +39 -0
  503. package/dist/db/schema/index.js +51 -0
  504. package/dist/db/schema/learnings.d.ts +7 -0
  505. package/dist/db/schema/learnings.js +30 -0
  506. package/dist/db/schema/memories.d.ts +7 -0
  507. package/dist/db/schema/memories.js +81 -0
  508. package/dist/db/schema/projects.d.ts +4 -0
  509. package/dist/db/schema/projects.js +31 -0
  510. package/dist/db/schema/tables/context-sessions.d.ts +9 -0
  511. package/dist/db/schema/tables/context-sessions.js +37 -0
  512. package/dist/db/schema/tables/conversations.d.ts +9 -0
  513. package/dist/db/schema/tables/conversations.js +47 -0
  514. package/dist/db/schema/tables/core-memory.d.ts +9 -0
  515. package/dist/db/schema/tables/core-memory.js +41 -0
  516. package/dist/db/schema/tables/entities.d.ts +9 -0
  517. package/dist/db/schema/tables/entities.js +39 -0
  518. package/dist/db/schema/tables/entity-relations.d.ts +9 -0
  519. package/dist/db/schema/tables/entity-relations.js +31 -0
  520. package/dist/db/schema/tables/learnings.d.ts +9 -0
  521. package/dist/db/schema/tables/learnings.js +66 -0
  522. package/dist/db/schema/tables/memories.d.ts +9 -0
  523. package/dist/db/schema/tables/memories.js +161 -0
  524. package/dist/db/schema/tables/memory-associations.d.ts +9 -0
  525. package/dist/db/schema/tables/memory-associations.js +39 -0
  526. package/dist/db/schema/tables/memory-hash-cache.d.ts +9 -0
  527. package/dist/db/schema/tables/memory-hash-cache.js +29 -0
  528. package/dist/db/schema/tables/memory-merge-history.d.ts +9 -0
  529. package/dist/db/schema/tables/memory-merge-history.js +33 -0
  530. package/dist/db/schema/tables/memory-merge-proposals.d.ts +9 -0
  531. package/dist/db/schema/tables/memory-merge-proposals.js +39 -0
  532. package/dist/db/schema/tables/messages.d.ts +9 -0
  533. package/dist/db/schema/tables/messages.js +41 -0
  534. package/dist/db/schema/tables/namespaces.d.ts +9 -0
  535. package/dist/db/schema/tables/namespaces.js +37 -0
  536. package/dist/db/schema/tables/projects.d.ts +9 -0
  537. package/dist/db/schema/tables/projects.js +31 -0
  538. package/dist/db/schema/tables/users.d.ts +9 -0
  539. package/dist/db/schema/tables/users.js +27 -0
  540. package/dist/db/schema.d.ts +1 -1
  541. package/dist/db/schema.js +2 -2
  542. package/dist/db/supabase.d.ts +9 -0
  543. package/dist/db/supabase.js +24 -0
  544. package/dist/packages/mcp/src/index.d.ts +3 -0
  545. package/dist/packages/mcp/src/index.js +733 -0
  546. package/mcp.json.example +8 -0
  547. package/package.json +132 -173
  548. package/packages/cli/package.json +22 -0
  549. package/packages/cli/src/commands/clean.ts +68 -0
  550. package/packages/cli/src/commands/context.ts +79 -0
  551. package/packages/cli/src/commands/doctor.ts +357 -0
  552. package/packages/cli/src/commands/forget.ts +72 -0
  553. package/packages/cli/src/commands/health.ts +36 -0
  554. package/packages/cli/src/commands/inspect.ts +41 -0
  555. package/packages/cli/src/commands/link.ts +50 -0
  556. package/packages/cli/src/commands/migrate.ts +93 -0
  557. package/packages/cli/src/commands/recall.ts +99 -0
  558. package/packages/cli/src/commands/recent.ts +57 -0
  559. package/packages/cli/src/commands/remember.ts +139 -0
  560. package/packages/cli/src/commands/run.ts +58 -0
  561. package/packages/cli/src/commands/stale.ts +43 -0
  562. package/packages/cli/src/commands/stats.ts +42 -0
  563. package/packages/cli/src/index.ts +57 -0
  564. package/packages/cli/tsconfig.json +24 -0
  565. package/packages/mcp/package.json +26 -0
  566. package/packages/mcp/src/index.ts +877 -0
  567. package/packages/mcp/tsconfig.json +20 -0
  568. package/skills/squish-memory/SKILL.md +107 -114
  569. package/skills/squish-memory/install.sh +3 -3
  570. package/skills/squish-memory/{claude-desktop.json → references/claude-desktop.json} +12 -12
  571. package/skills/squish-memory/{openclaw.json → references/openclaw.json} +13 -13
  572. package/skills/squish-memory/{opencode.json → references/opencode.json} +14 -14
  573. package/.claude-plugin/marketplace.json +0 -20
  574. package/.claude-plugin/plugin.json +0 -32
  575. package/.env.mcp.example +0 -60
  576. package/.mcp.json +0 -11
  577. package/QUICK-START.md +0 -71
  578. package/bin/squish-add.mjs +0 -32
  579. package/bin/squish-rm.mjs +0 -21
  580. package/commands/context-paging.md +0 -51
  581. package/commands/context-status.md +0 -22
  582. package/commands/context.md +0 -5
  583. package/commands/core-memory.md +0 -56
  584. package/commands/health.md +0 -5
  585. package/commands/init.md +0 -39
  586. package/commands/merge.md +0 -113
  587. package/commands/observe.md +0 -5
  588. package/commands/recall.md +0 -5
  589. package/commands/remember.md +0 -11
  590. package/commands/search.md +0 -10
  591. package/config/mcp-cli-fallback-policy.json +0 -22
  592. package/config/mcp.json +0 -38
  593. package/config/plugin-manifest.json +0 -152
  594. package/config/plugin-manifest.schema.json +0 -244
  595. package/config/remote-memory-policy.json +0 -32
  596. package/dist/api/web/index.d.ts +0 -3
  597. package/dist/api/web/index.js +0 -4
  598. package/dist/api/web/web-server.d.ts +0 -3
  599. package/dist/api/web/web-server.js +0 -6
  600. package/dist/api/web/web.d.ts +0 -4
  601. package/dist/api/web/web.js +0 -639
  602. package/dist/commands/managed-sync.d.ts +0 -10
  603. package/dist/commands/managed-sync.js +0 -64
  604. package/dist/commands/mcp-server.d.ts +0 -3
  605. package/dist/commands/mcp-server.js +0 -393
  606. package/dist/core/context.js +0 -24
  607. package/dist/core/governance.js +0 -64
  608. package/dist/core/local-embeddings.d.ts +0 -6
  609. package/dist/core/local-embeddings.js +0 -20
  610. package/dist/core/namespaces/index.d.ts +0 -71
  611. package/dist/core/namespaces/index.js +0 -305
  612. package/dist/core/namespaces/uri-parser.d.ts +0 -31
  613. package/dist/core/namespaces/uri-parser.js +0 -74
  614. package/dist/core/observations.d.ts +0 -26
  615. package/dist/core/observations.js +0 -110
  616. package/dist/core/requirements.d.ts +0 -20
  617. package/dist/core/requirements.js +0 -35
  618. package/dist/core/search/qmd-search.d.ts +0 -61
  619. package/dist/core/search/qmd-search.js +0 -178
  620. package/dist/core/snapshots.d.ts +0 -29
  621. package/dist/core/snapshots.js +0 -220
  622. package/dist/core/sync/qmd-sync.d.ts +0 -106
  623. package/dist/core/sync/qmd-sync.js +0 -213
  624. package/dist/core/utils.js +0 -74
  625. package/dist/index.d.ts +0 -19
  626. package/dist/index.js +0 -997
  627. package/generated/mcp/manifest.json +0 -23
  628. package/generated/mcp/mcp-servers.json +0 -25
  629. package/generated/mcp/mcporter.json +0 -34
  630. package/generated/mcp/openclaw-memory-qmd.json +0 -17
  631. package/generated/mcp/runtime.json +0 -12
  632. package/hooks/hooks.json +0 -52
  633. package/hooks/post-tool-use.js +0 -26
  634. package/hooks/session-end.js +0 -28
  635. package/hooks/session-start.js +0 -33
  636. package/hooks/user-prompt-submit.js +0 -26
  637. package/hooks/utils.js +0 -153
  638. package/npx-installer.js +0 -208
  639. package/packages/plugin-claude-code/README.md +0 -73
  640. package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +0 -35
  641. package/packages/plugin-claude-code/dist/plugin-wrapper.js +0 -191
  642. package/packages/plugin-claude-code/package.json +0 -31
  643. package/packages/plugin-openclaw/README.md +0 -70
  644. package/packages/plugin-openclaw/dist/index.d.ts +0 -49
  645. package/packages/plugin-openclaw/dist/index.js +0 -262
  646. package/packages/plugin-openclaw/openclaw.plugin.json +0 -94
  647. package/packages/plugin-openclaw/package.json +0 -31
  648. package/packages/plugin-opencode/install.mjs +0 -217
  649. package/packages/plugin-opencode/package.json +0 -21
  650. package/plugin.json +0 -32
  651. package/scripts/build-release.sh +0 -36
  652. package/scripts/check-secrets.js +0 -132
  653. package/scripts/db/check-db.mjs +0 -88
  654. package/scripts/db/fix-all-columns.mjs +0 -52
  655. package/scripts/db/fix-schema-all.mjs +0 -55
  656. package/scripts/db/fix-schema-full.mjs +0 -46
  657. package/scripts/db/fix-schema.mjs +0 -38
  658. package/scripts/db/init-db.mjs +0 -13
  659. package/scripts/db/recreate-db.mjs +0 -14
  660. package/scripts/generate-mcp.mjs +0 -264
  661. package/scripts/github-release.sh +0 -77
  662. package/scripts/init-dirs.mjs +0 -13
  663. package/scripts/install-interactive.mjs +0 -677
  664. package/scripts/install-mcp.mjs +0 -116
  665. package/scripts/install-plugin.mjs +0 -415
  666. package/scripts/install-web.sh +0 -120
  667. package/scripts/install.mjs +0 -340
  668. package/scripts/openclaw-bootstrap.mjs +0 -127
  669. package/scripts/package-release.sh +0 -71
  670. package/scripts/remote-preflight.mjs +0 -62
  671. package/scripts/squish-fallback.mjs +0 -132
  672. package/scripts/test/test-all-systems.mjs +0 -139
  673. package/scripts/test/test-memory-system.mjs +0 -139
  674. package/scripts/test/test-v0.5.0.mjs +0 -210
  675. package/scripts/test-interactive.mjs +0 -131
  676. package/scripts/verify-mcp.mjs +0 -214
  677. package/skills/memory-guide/SKILL.md +0 -332
  678. package/skills/squish-cli/SKILL.md +0 -240
  679. package/skills/squish-mcp/SKILL.md +0 -355
  680. package/skills/squish-memory/install.mjs +0 -335
  681. package/skills/squish-memory/skill.json +0 -32
  682. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.d.ts +0 -0
  683. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.js +0 -0
  684. /package/dist/{algorithms → core/algorithms}/handlers/approve-merge.d.ts +0 -0
  685. /package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.d.ts +0 -0
  686. /package/dist/{algorithms → core/algorithms}/handlers/get-stats.d.ts +0 -0
  687. /package/dist/{algorithms → core/algorithms}/handlers/list-proposals.d.ts +0 -0
  688. /package/dist/{algorithms → core/algorithms}/handlers/preview-merge.d.ts +0 -0
  689. /package/dist/{algorithms → core/algorithms}/handlers/reject-merge.d.ts +0 -0
  690. /package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.d.ts +0 -0
  691. /package/dist/{algorithms → core/algorithms}/safety/safety-checks.js +0 -0
  692. /package/dist/{algorithms → core/algorithms}/utils/response-builder.d.ts +0 -0
  693. /package/dist/{algorithms → core/algorithms}/utils/response-builder.js +0 -0
  694. /package/dist/core/{context.d.ts → context/context.d.ts} +0 -0
  695. /package/dist/core/{agent-memory.d.ts → ingestion/agent-memory.d.ts} +0 -0
  696. /package/dist/core/{privacy.d.ts → security/privacy.d.ts} +0 -0
  697. /package/dist/core/{privacy.js → security/privacy.js} +0 -0
  698. /package/dist/core/{secret-detector.d.ts → security/secret-detector.d.ts} +0 -0
  699. /package/dist/core/{secret-detector.js → security/secret-detector.js} +0 -0
  700. /package/dist/core/{session-hooks → session}/session-hooks.d.ts +0 -0
  701. /package/dist/core/{session-hooks → session}/session-hooks.js +0 -0
  702. /package/dist/core/{cache.d.ts → storage/cache.d.ts} +0 -0
  703. /package/dist/core/{database.d.ts → storage/database.d.ts} +0 -0
  704. /package/dist/core/{database.js → storage/database.js} +0 -0
@@ -1,305 +0,0 @@
1
- /** Namespace Management - Hierarchical folder-like namespaces for memories */
2
- import { randomUUID } from 'crypto';
3
- import { eq, and, isNull } from 'drizzle-orm';
4
- import { getDb } from '../../db/index.js';
5
- import { getSchema } from '../../db/schema.js';
6
- import { logger } from '../logger.js';
7
- /**
8
- * Create a new namespace
9
- */
10
- export async function createNamespace(input) {
11
- const db = await getDb();
12
- if (!db) {
13
- throw new Error('Database unavailable');
14
- }
15
- const schema = await getSchema();
16
- const id = randomUUID();
17
- // Check if namespace with same name exists under parent
18
- const sqliteDb = db;
19
- const existing = await sqliteDb.select()
20
- .from(schema.namespaces)
21
- .where(and(eq(schema.namespaces.projectId, input.projectId), eq(schema.namespaces.name, input.name), input.parentId
22
- ? eq(schema.namespaces.parentId, input.parentId)
23
- : isNull(schema.namespaces.parentId)))
24
- .limit(1);
25
- if (existing.length > 0) {
26
- throw new Error(`Namespace "${input.name}" already exists under ${input.parentId || 'root'}`);
27
- }
28
- // Build namespace path
29
- const path = await buildNamespacePath(input.projectId, input.name, input.parentId ?? null);
30
- await sqliteDb.insert(schema.namespaces).values({
31
- id,
32
- projectId: input.projectId,
33
- name: input.name,
34
- type: input.type,
35
- parentId: input.parentId || null,
36
- description: input.description || null,
37
- createdAt: new Date(),
38
- updatedAt: new Date(),
39
- });
40
- logger.info(`[Namespaces] Created namespace: ${path}`);
41
- return {
42
- id,
43
- projectId: input.projectId,
44
- name: input.name,
45
- type: input.type,
46
- parentId: input.parentId || null,
47
- description: input.description || null,
48
- path,
49
- createdAt: new Date(),
50
- updatedAt: new Date(),
51
- };
52
- }
53
- /**
54
- * Build full namespace path from parent
55
- */
56
- async function buildNamespacePath(projectId, name, parentId) {
57
- if (!parentId) {
58
- return name;
59
- }
60
- const db = await getDb();
61
- const schema = await getSchema();
62
- const sqliteDb = db;
63
- const [parent] = await sqliteDb.select()
64
- .from(schema.namespaces)
65
- .where(eq(schema.namespaces.id, parentId))
66
- .limit(1);
67
- if (!parent) {
68
- return name;
69
- }
70
- return `${parent.path}/${name}`;
71
- }
72
- /**
73
- * Get a namespace by ID
74
- */
75
- export async function getNamespaceById(id) {
76
- const db = await getDb();
77
- if (!db)
78
- return null;
79
- const schema = await getSchema();
80
- const sqliteDb = db;
81
- const [row] = await sqliteDb.select()
82
- .from(schema.namespaces)
83
- .where(eq(schema.namespaces.id, id))
84
- .limit(1);
85
- if (!row)
86
- return null;
87
- return {
88
- id: row.id,
89
- projectId: row.projectId,
90
- name: row.name,
91
- type: row.type,
92
- parentId: row.parentId,
93
- description: row.description,
94
- path: row.path,
95
- createdAt: new Date(row.createdAt),
96
- updatedAt: new Date(row.updatedAt),
97
- };
98
- }
99
- /**
100
- * Resolve a namespace path to a namespace ID
101
- * @example resolveNamespacePath('my-project', ['user', 'preferences']) -> namespaceId
102
- */
103
- export async function resolveNamespacePath(projectId, path) {
104
- if (path.length === 0)
105
- return null;
106
- const db = await getDb();
107
- if (!db)
108
- return null;
109
- const schema = await getSchema();
110
- const sqliteDb = db;
111
- let parentId = null;
112
- let targetNamespace = null;
113
- // Traverse path segments
114
- for (const segment of path) {
115
- const [result] = await sqliteDb.select()
116
- .from(schema.namespaces)
117
- .where(and(eq(schema.namespaces.projectId, projectId), eq(schema.namespaces.name, segment), parentId
118
- ? eq(schema.namespaces.parentId, parentId)
119
- : isNull(schema.namespaces.parentId)))
120
- .limit(1);
121
- if (!result)
122
- return null;
123
- targetNamespace = result;
124
- parentId = result.id;
125
- }
126
- return targetNamespace?.id || null;
127
- }
128
- /**
129
- * Get namespace tree for a project
130
- */
131
- export async function getNamespaceTree(projectId) {
132
- const db = await getDb();
133
- if (!db)
134
- return [];
135
- const schema = await getSchema();
136
- const sqliteDb = db;
137
- // Get all namespaces for project
138
- const all = await sqliteDb.select()
139
- .from(schema.namespaces)
140
- .where(eq(schema.namespaces.projectId, projectId))
141
- .orderBy(schema.namespaces.name);
142
- // Build tree structure
143
- const map = new Map();
144
- const roots = [];
145
- for (const row of all) {
146
- const node = {
147
- id: row.id,
148
- name: row.name,
149
- type: row.type,
150
- description: row.description,
151
- path: row.path,
152
- children: [],
153
- };
154
- map.set(row.id, node);
155
- if (!row.parentId) {
156
- roots.push(node);
157
- }
158
- else {
159
- const parent = map.get(row.parentId);
160
- if (parent) {
161
- parent.children.push(node);
162
- }
163
- }
164
- }
165
- return roots;
166
- }
167
- /**
168
- * Get or create default namespaces for a project
169
- */
170
- export async function getDefaultNamespaces(projectId) {
171
- const db = await getDb();
172
- if (!db)
173
- return [];
174
- const schema = await getSchema();
175
- const sqliteDb = db;
176
- const created = [];
177
- const defaults = [
178
- { name: 'user', type: 'user', description: 'User-specific memories and preferences' },
179
- { name: 'agent', type: 'agent', description: 'Agent-specific knowledge and state' },
180
- { name: 'project', type: 'project', description: 'Project-specific decisions and context' },
181
- ];
182
- const defaultNames = ['user', 'agent', 'project'];
183
- // Check all default namespaces at once with IN clause
184
- const existing = await sqliteDb.select()
185
- .from(schema.namespaces)
186
- .where(and(eq(schema.namespaces.projectId, projectId), eq(schema.namespaces.name, defaultNames[0]), eq(schema.namespaces.type, 'user'), isNull(schema.namespaces.parentId)));
187
- if (existing.length > 0) {
188
- const ns = await createNamespace({
189
- projectId,
190
- name: defaultNames[0],
191
- type: 'user',
192
- parentId: null,
193
- });
194
- created.push({
195
- id: ns.id,
196
- projectId: ns.projectId,
197
- name: ns.name,
198
- type: ns.type,
199
- parentId: ns.parentId,
200
- description: ns.description,
201
- path: ns.path,
202
- createdAt: new Date(ns.createdAt),
203
- updatedAt: new Date(ns.updatedAt),
204
- });
205
- }
206
- // Check remaining defaults sequentially (agent and project)
207
- for (const defName of defaultNames.slice(1)) {
208
- const existing = await sqliteDb.select()
209
- .from(schema.namespaces)
210
- .where(and(eq(schema.namespaces.projectId, projectId), eq(schema.namespaces.name, defName), eq(schema.namespaces.type, defName), isNull(schema.namespaces.parentId)))
211
- .limit(1);
212
- if (existing.length === 0) {
213
- const ns = await createNamespace({
214
- projectId,
215
- name: defName,
216
- type: defName === 'agent' ? 'agent' : 'project',
217
- parentId: null,
218
- });
219
- created.push(ns);
220
- }
221
- else {
222
- created.push({
223
- id: existing[0].id,
224
- projectId: existing[0].projectId,
225
- name: existing[0].name,
226
- type: existing[0].type,
227
- parentId: existing[0].parentId,
228
- description: existing[0].description,
229
- path: existing[0].path,
230
- createdAt: new Date(existing[0].createdAt),
231
- updatedAt: new Date(existing[0].updatedAt),
232
- });
233
- }
234
- }
235
- logger.info(`[Namespaces] Default namespaces ready for project: ${projectId}`);
236
- return created;
237
- }
238
- /**
239
- * List namespaces with optional filtering
240
- */
241
- export async function listNamespaces(options = {}) {
242
- const db = await getDb();
243
- if (!db)
244
- return [];
245
- const schema = await getSchema();
246
- const sqliteDb = db;
247
- const conditions = [];
248
- if (options.projectId) {
249
- conditions.push(eq(schema.namespaces.projectId, options.projectId));
250
- }
251
- if (options.type) {
252
- conditions.push(eq(schema.namespaces.type, options.type));
253
- }
254
- if (options.parentId !== undefined) {
255
- if (options.parentId === null) {
256
- conditions.push(isNull(schema.namespaces.parentId));
257
- }
258
- else {
259
- conditions.push(eq(schema.namespaces.parentId, options.parentId));
260
- }
261
- }
262
- const rows = await sqliteDb.select()
263
- .from(schema.namespaces)
264
- .where(conditions.length > 0 ? and(...conditions) : undefined)
265
- .orderBy(schema.namespaces.name);
266
- return rows.map((row) => ({
267
- id: row.id,
268
- projectId: row.projectId,
269
- name: row.name,
270
- type: row.type,
271
- parentId: row.parentId,
272
- description: row.description,
273
- path: row.path,
274
- createdAt: new Date(row.createdAt),
275
- updatedAt: new Date(row.updatedAt),
276
- }));
277
- }
278
- /**
279
- * Delete a namespace (cascades to child namespaces)
280
- */
281
- export async function deleteNamespace(id) {
282
- const db = await getDb();
283
- if (!db)
284
- return;
285
- const schema = await getSchema();
286
- const sqliteDb = db;
287
- await sqliteDb.delete(schema.namespaces).where(eq(schema.namespaces.id, id));
288
- logger.info(`[Namespaces] Deleted namespace: ${id}`);
289
- }
290
- /**
291
- * Update namespace
292
- */
293
- export async function updateNamespace(id, updates) {
294
- const db = await getDb();
295
- if (!db)
296
- return;
297
- const schema = await getSchema();
298
- const sqliteDb = db;
299
- await sqliteDb.update(schema.namespaces).set({
300
- ...updates,
301
- updatedAt: new Date(),
302
- }).where(eq(schema.namespaces.id, id));
303
- logger.info(`[Namespaces] Updated namespace: ${id}`);
304
- }
305
- //# sourceMappingURL=index.js.map
@@ -1,31 +0,0 @@
1
- /** URI Parser for Squish namespace scheme (squish://) */
2
- export interface SquishURIParsed {
3
- type: 'namespace';
4
- projectId: string;
5
- namespacePath: string[];
6
- memoryId?: string;
7
- }
8
- /**
9
- * Parse a squish:// URI into components
10
- * @example parseSquishURI('squish://my-project/user/preferences') -> { type: 'namespace', projectId: 'my-project', namespacePath: ['user', 'preferences'] }
11
- */
12
- export declare function parseSquishURI(uri: string): SquishURIParsed | null;
13
- /**
14
- * Build a squish:// URI from components
15
- * @example buildSquishURI('my-project', ['user', 'preferences']) -> 'squish://my-project/user/preferences'
16
- */
17
- export declare function buildSquishURI(projectId: string, path: string[], memoryId?: string): string;
18
- /**
19
- * Validate a namespace path (no "..", no empty segments)
20
- */
21
- export declare function validateNamespacePath(path: string[]): boolean;
22
- /**
23
- * Get parent namespace path
24
- * @example getParentPath(['user', 'preferences', 'coding']) -> ['user', 'preferences']
25
- */
26
- export declare function getParentPath(path: string[]): string[] | null;
27
- /**
28
- * Join namespace path segments
29
- */
30
- export declare function joinNamespacePath(...segments: (string | string[])[]): string[];
31
- //# sourceMappingURL=uri-parser.d.ts.map
@@ -1,74 +0,0 @@
1
- /** URI Parser for Squish namespace scheme (squish://) */
2
- /**
3
- * Parse a squish:// URI into components
4
- * @example parseSquishURI('squish://my-project/user/preferences') -> { type: 'namespace', projectId: 'my-project', namespacePath: ['user', 'preferences'] }
5
- */
6
- export function parseSquishURI(uri) {
7
- if (!uri || typeof uri !== 'string') {
8
- return null;
9
- }
10
- // Match squish://project/path/to/memory
11
- const match = uri.match(/^squish:\/\/([^\/]+)\/(.*)$/);
12
- if (!match) {
13
- return null;
14
- }
15
- const [, projectId, pathPart] = match;
16
- const namespacePath = pathPart ? pathPart.split('/').filter(Boolean) : [];
17
- // If path ends with a UUID, it's a memory ID
18
- const lastSegment = namespacePath[namespacePath.length - 1];
19
- let memoryId;
20
- if (lastSegment && /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/.test(lastSegment)) {
21
- memoryId = lastSegment;
22
- namespacePath.pop();
23
- }
24
- return {
25
- type: 'namespace',
26
- projectId,
27
- namespacePath,
28
- memoryId,
29
- };
30
- }
31
- /**
32
- * Build a squish:// URI from components
33
- * @example buildSquishURI('my-project', ['user', 'preferences']) -> 'squish://my-project/user/preferences'
34
- */
35
- export function buildSquishURI(projectId, path, memoryId) {
36
- if (!projectId) {
37
- throw new Error('Project ID is required');
38
- }
39
- const cleanPath = path.filter(Boolean);
40
- const basePath = `squish://${projectId}${cleanPath.length > 0 ? '/' + cleanPath.join('/') : ''}`;
41
- return memoryId ? `${basePath}/${memoryId}` : basePath;
42
- }
43
- /**
44
- * Validate a namespace path (no "..", no empty segments)
45
- */
46
- export function validateNamespacePath(path) {
47
- if (path.length === 0)
48
- return true;
49
- for (const segment of path) {
50
- if (!segment || segment.length === 0) {
51
- return false;
52
- }
53
- if (segment.includes('..')) {
54
- return false;
55
- }
56
- }
57
- return true;
58
- }
59
- /**
60
- * Get parent namespace path
61
- * @example getParentPath(['user', 'preferences', 'coding']) -> ['user', 'preferences']
62
- */
63
- export function getParentPath(path) {
64
- if (path.length <= 1)
65
- return null;
66
- return path.slice(0, -1);
67
- }
68
- /**
69
- * Join namespace path segments
70
- */
71
- export function joinNamespacePath(...segments) {
72
- return segments.flat().filter(Boolean);
73
- }
74
- //# sourceMappingURL=uri-parser.js.map
@@ -1,26 +0,0 @@
1
- export type ObservationType = 'tool_use' | 'file_change' | 'error' | 'pattern' | 'insight';
2
- export interface ObservationInput {
3
- type: ObservationType;
4
- action: string;
5
- target?: string;
6
- summary: string;
7
- details?: Record<string, unknown>;
8
- session?: string;
9
- project?: string;
10
- }
11
- export interface ObservationRecord {
12
- id: string;
13
- projectId?: string | null;
14
- conversationId?: string | null;
15
- type: ObservationType;
16
- action: string;
17
- target?: string | null;
18
- summary: string;
19
- details?: Record<string, unknown> | null;
20
- createdAt?: string | null;
21
- }
22
- export declare function createObservation(input: ObservationInput): Promise<ObservationRecord>;
23
- export declare function getObservationsForProject(projectPath: string, limit: number): Promise<ObservationRecord[]>;
24
- export declare function getRecentObservations(projectPath: string, limit?: number): Promise<ObservationRecord[]>;
25
- export declare function getObservationById(observationId: string): Promise<ObservationRecord | null>;
26
- //# sourceMappingURL=observations.d.ts.map
@@ -1,110 +0,0 @@
1
- import { randomUUID } from 'crypto';
2
- import { desc, eq } from 'drizzle-orm';
3
- import { getDb } from '../db/index.js';
4
- import { getSchema } from '../db/schema.js';
5
- import { config } from '../config.js';
6
- import { getEmbedding } from './embeddings.js';
7
- import { ensureProject, getProjectByPath } from './projects.js';
8
- import { fromSqliteJson, toSqliteJson } from './memory/serialization.js';
9
- import { createDatabaseClient } from './database.js';
10
- import { normalizeTimestamp, prepareEmbedding } from './utils.js';
11
- import { logger } from './logger.js';
12
- export async function createObservation(input) {
13
- const db = createDatabaseClient(await getDb());
14
- const schema = await getSchema();
15
- const project = await ensureProject(input.project);
16
- const embedding = await getEmbedding(input.summary);
17
- const id = randomUUID();
18
- const baseValues = {
19
- id,
20
- projectId: project?.id ?? null,
21
- type: input.type,
22
- action: input.action,
23
- target: input.target ?? null,
24
- summary: input.summary,
25
- };
26
- const embeddingValues = prepareEmbedding(embedding);
27
- const detailsValue = config.isTeamMode ? input.details ?? null : toSqliteJson(input.details ?? null);
28
- await db.insert(schema.observations).values({
29
- ...baseValues,
30
- details: detailsValue,
31
- ...embeddingValues,
32
- createdAt: new Date(),
33
- });
34
- return {
35
- id,
36
- projectId: project?.id ?? null,
37
- conversationId: null,
38
- type: input.type,
39
- action: input.action,
40
- target: input.target ?? null,
41
- summary: input.summary,
42
- details: input.details ?? null,
43
- };
44
- }
45
- export async function getObservationsForProject(projectPath, limit) {
46
- try {
47
- const db = createDatabaseClient(await getDb());
48
- const schema = await getSchema();
49
- const project = await getProjectByPath(projectPath);
50
- if (!project)
51
- return [];
52
- const rows = await db.select().from(schema.observations)
53
- .where(eq(schema.observations.projectId, project.id))
54
- .orderBy(desc(schema.observations.createdAt))
55
- .limit(limit);
56
- return rows.map((row) => normalizeObservation(row));
57
- }
58
- catch (error) {
59
- throw error;
60
- }
61
- }
62
- export async function getRecentObservations(projectPath, limit = 10) {
63
- try {
64
- const db = createDatabaseClient(await getDb());
65
- const schema = await getSchema();
66
- const project = await getProjectByPath(projectPath);
67
- if (!project)
68
- return [];
69
- const rows = await db.select().from(schema.observations)
70
- .where(eq(schema.observations.projectId, project.id))
71
- .orderBy(desc(schema.observations.createdAt))
72
- .limit(limit);
73
- return rows.map((row) => normalizeObservation(row));
74
- }
75
- catch (error) {
76
- logger.error('Error getting recent observations', error);
77
- throw error;
78
- }
79
- }
80
- export async function getObservationById(observationId) {
81
- try {
82
- const db = createDatabaseClient(await getDb());
83
- const schema = await getSchema();
84
- const rows = await db.select().from(schema.observations)
85
- .where(eq(schema.observations.id, observationId))
86
- .limit(1);
87
- if (rows.length === 0)
88
- return null;
89
- return normalizeObservation(rows[0]);
90
- }
91
- catch (error) {
92
- logger.error('Error getting observation', error);
93
- throw error;
94
- }
95
- }
96
- function normalizeObservation(row) {
97
- const details = config.isTeamMode ? row.details : fromSqliteJson(row.details ?? null);
98
- return {
99
- id: row.id,
100
- projectId: row.projectId ?? row.project_id ?? null,
101
- conversationId: row.conversationId ?? row.conversation_id ?? null,
102
- type: row.type,
103
- action: row.action,
104
- target: row.target ?? null,
105
- summary: row.summary,
106
- details,
107
- createdAt: normalizeTimestamp(row.createdAt ?? row.created_at),
108
- };
109
- }
110
- //# sourceMappingURL=observations.js.map
@@ -1,20 +0,0 @@
1
- export interface MemoryCriteria {
2
- tag?: string;
3
- type?: string;
4
- types?: string[];
5
- sector?: string;
6
- minAge?: number;
7
- maxAge?: number;
8
- minConfidence?: number;
9
- minRelevance?: number;
10
- projectId?: string;
11
- agentId?: string;
12
- visibilityScope?: string;
13
- }
14
- export declare function requireMemory(criteria: MemoryCriteria): Promise<any>;
15
- export declare function assertMemoryPresent(memoryId: string): Promise<void>;
16
- export declare function assertMemoryNotPresent(criteria: MemoryCriteria): Promise<void>;
17
- export declare function requireMemories(criteria: MemoryCriteria, minCount?: number): Promise<any[]>;
18
- export declare function requireHighConfidenceMemory(criteria: MemoryCriteria, minConfidence?: number): Promise<any>;
19
- export declare function requireRecentMemory(criteria: MemoryCriteria, maxAgeDays?: number): Promise<any>;
20
- //# sourceMappingURL=requirements.d.ts.map
@@ -1,35 +0,0 @@
1
- // Deterministic Memory Requirements
2
- import { eq } from 'drizzle-orm';
3
- import { getSchema } from '../db/schema.js';
4
- import { buildMemoryFilters, buildMemoryFiltersPartial } from './utils/filter-builder.js';
5
- import { executeMemoryAssertion } from './utils/query-operations.js';
6
- export async function requireMemory(criteria) {
7
- const schema = await getSchema();
8
- const filters = buildMemoryFilters(criteria, schema);
9
- const memories = await executeMemoryAssertion(criteria, filters, 1, 'memory requirement', 'Required memory not found');
10
- return memories[0];
11
- }
12
- export async function assertMemoryPresent(memoryId) {
13
- const criteria = { memoryId };
14
- const schema = await getSchema();
15
- const filters = [eq(schema.memories.id, memoryId)];
16
- await executeMemoryAssertion(criteria, filters, 1, 'asserting memory presence', 'Required memory is not present: ' + memoryId);
17
- }
18
- export async function assertMemoryNotPresent(criteria) {
19
- const schema = await getSchema();
20
- const filters = buildMemoryFiltersPartial(criteria, schema);
21
- await executeMemoryAssertion(criteria, filters, 0, 'checking memory non-presence', 'Memory should not exist but was found');
22
- }
23
- export async function requireMemories(criteria, minCount = 1) {
24
- const schema = await getSchema();
25
- const filters = buildMemoryFilters(criteria, schema);
26
- return executeMemoryAssertion(criteria, filters, minCount, 'checking memory requirements', `Required ${minCount} memories but found fewer`);
27
- }
28
- export async function requireHighConfidenceMemory(criteria, minConfidence = 80) {
29
- return requireMemory({ ...criteria, minConfidence });
30
- }
31
- export async function requireRecentMemory(criteria, maxAgeDays = 7) {
32
- const maxAge = maxAgeDays * 24 * 60 * 60 * 1000;
33
- return requireMemory({ ...criteria, maxAge });
34
- }
35
- //# sourceMappingURL=requirements.js.map
@@ -1,61 +0,0 @@
1
- /**
2
- * QMD Hybrid Search Integration
3
- *
4
- * Integrates QMD's BM25+vector+rerank pipeline with Squish memories.
5
- * Provides enhanced search capabilities when QMD is available.
6
- *
7
- * QMD Search Pipeline:
8
- * 1. Query Expansion (LLM generates alternative queries)
9
- * 2. Parallel BM25 (FTS5) + Vector Search
10
- * 3. RRF Fusion (Reciprocal Rank Fusion)
11
- * 4. LLM Re-ranking (yes/no with logprobs)
12
- * 5. Position-Aware Blending
13
- *
14
- * Installation: bun install -g qmd
15
- * GitHub: https://github.com/tobi/qmd
16
- */
17
- import type { SearchInput, SearchResult } from '../memory/memories.js';
18
- export interface QMDSearchOptions extends SearchInput {
19
- useHybrid?: boolean;
20
- collection?: string;
21
- includeSquishResults?: boolean;
22
- }
23
- export interface QMDHybridSearchResult extends SearchResult {
24
- qmdScore?: number;
25
- source: 'squish' | 'qmd' | 'hybrid';
26
- }
27
- /**
28
- * Search memories using QMD's hybrid search
29
- *
30
- * @param options - Search options including query, type, limit, etc.
31
- * @returns QMD-enhanced search results
32
- */
33
- export declare function searchWithQMD(options: QMDSearchOptions): Promise<QMDHybridSearchResult[]>;
34
- /**
35
- * Fused search: combine Squish and QMD results
36
- *
37
- * Runs both searches in parallel and merges results with deduplication.
38
- *
39
- * @param options - Search options
40
- * @returns Fused search results from both sources
41
- */
42
- export declare function fusedSearch(options: QMDSearchOptions): Promise<QMDHybridSearchResult[]>;
43
- /**
44
- * Check if QMD is available and configured
45
- *
46
- * @returns true if QMD is enabled and available
47
- */
48
- export declare function isQMDAvailable(): Promise<boolean>;
49
- /**
50
- * Get QMD status and collection info
51
- *
52
- * @returns QMD status or null if unavailable
53
- */
54
- export declare function getQMDStatus(): Promise<{
55
- available: boolean;
56
- collections: Array<{
57
- name: string;
58
- documentCount: number;
59
- }>;
60
- } | null>;
61
- //# sourceMappingURL=qmd-search.d.ts.map