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
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Walking Interface - Sequential memory retrieval through places
3
+ *
4
+ * Implements place walking through memory places:
5
+ * - Walk single place to get memories in order
6
+ * - Walk all places for full tour
7
+ * - Token budget handling with TOON compression
8
+ */
9
+ import { getProjectPlaces } from './places.js';
10
+ import { getPlaceMemories } from './memory-places.js';
11
+ import { getMemory } from '../memory/memories.js';
12
+ import { compressForContext } from '../compression.js';
13
+ import { logger } from '../logger.js';
14
+ /**
15
+ * Walk through a single place
16
+ */
17
+ export async function walkPlace(projectId, placeType, options = {}) {
18
+ const { tokenBudget = 170, maxMemoriesPerPlace = 10, includePurpose = true, compressWithCompression = false } = options;
19
+ // Get the place
20
+ const places = await getProjectPlaces(projectId);
21
+ const place = places.find(p => p.placeType === placeType);
22
+ if (!place) {
23
+ logger.warn(`[Walking] Place not found: ${placeType}`);
24
+ return null;
25
+ }
26
+ // Get memory IDs for this place
27
+ const memoryIds = await getPlaceMemories(place.id, maxMemoriesPerPlace);
28
+ // Get full memories
29
+ const memories = [];
30
+ let totalTokens = 0;
31
+ for (const memoryId of memoryIds) {
32
+ const memory = await getMemory(memoryId);
33
+ if (!memory)
34
+ continue;
35
+ let content = memory.content || '';
36
+ // Compress with TOON if requested
37
+ if (compressWithCompression && content) {
38
+ content = compressForContext(content);
39
+ }
40
+ const tokenEstimate = Math.ceil(content.length / 4); // rough token estimate
41
+ if (totalTokens + tokenEstimate > tokenBudget) {
42
+ // Would exceed budget - stop adding
43
+ break;
44
+ }
45
+ memories.push({
46
+ id: memory.id,
47
+ content,
48
+ type: memory.type,
49
+ tags: memory.tags || [],
50
+ createdAt: memory.createdAt || '',
51
+ });
52
+ totalTokens += tokenEstimate;
53
+ }
54
+ return {
55
+ place,
56
+ memories,
57
+ totalTokens,
58
+ truncated: memories.length < memoryIds.length,
59
+ };
60
+ }
61
+ /**
62
+ * Walk through all places in sort order
63
+ */
64
+ export async function walkAllPlaces(projectId, options = {}) {
65
+ const places = await getProjectPlaces(projectId);
66
+ const results = [];
67
+ for (const place of places) {
68
+ const walkResult = await walkPlace(projectId, place.placeType, options);
69
+ if (walkResult && walkResult.memories.length > 0) {
70
+ results.push(walkResult);
71
+ }
72
+ }
73
+ logger.info(`[Walking] Walked ${results.length} places for project ${projectId}`);
74
+ return results;
75
+ }
76
+ /**
77
+ * Quick tour - just place names and purposes (minimal tokens)
78
+ */
79
+ export async function quickTour(projectId) {
80
+ const places = await getProjectPlaces(projectId);
81
+ return {
82
+ places: places.map(p => ({
83
+ name: p.name,
84
+ purpose: p.purpose || '',
85
+ memoryCount: p.memoryCount,
86
+ })),
87
+ totalMemories: places.reduce((sum, p) => sum + p.memoryCount, 0),
88
+ };
89
+ }
90
+ /**
91
+ * Get context summary for a place (for injection)
92
+ */
93
+ export async function getPlaceContext(projectId, placeType, maxTokens = 50) {
94
+ const walkResult = await walkPlace(projectId, placeType, {
95
+ tokenBudget: maxTokens,
96
+ compressWithCompression: true,
97
+ });
98
+ if (!walkResult || walkResult.memories.length === 0) {
99
+ return '';
100
+ }
101
+ const lines = walkResult.memories.map((m, i) => `${i + 1}. [${m.type}] ${m.content.substring(0, 100)}`);
102
+ return `## ${walkResult.place.name}\n${lines.join('\n')}`;
103
+ }
104
+ /**
105
+ * Full context for session start (all places)
106
+ */
107
+ export async function getFullWalkingContext(projectId, maxTokens = 170) {
108
+ const results = await walkAllPlaces(projectId, {
109
+ tokenBudget: Math.floor(maxTokens / 7), // Distribute across 7 places
110
+ compressWithCompression: true,
111
+ });
112
+ if (results.length === 0) {
113
+ return 'No memories yet. Start building your spatial memory!';
114
+ }
115
+ const sections = results.map(r => {
116
+ const lines = r.memories.slice(0, 3).map((m, i) => ` ${i + 1}. ${m.content.substring(0, 60)}...`).join('\n');
117
+ return `## ${r.place.name}\n${lines}`;
118
+ });
119
+ return sections.join('\n\n');
120
+ }
121
+ //# sourceMappingURL=walking.js.map
@@ -7,6 +7,11 @@ export interface ProjectRecord {
7
7
  }
8
8
  export declare function getProjectByPath(path: string): Promise<ProjectRecord | null>;
9
9
  export declare function ensureProject(path?: string): Promise<ProjectRecord | null>;
10
+ export declare class ProjectNotFoundError extends Error {
11
+ constructor(path: string);
12
+ }
13
+ export declare function requireProject(path: string): Promise<ProjectRecord>;
14
+ export declare function getOrCreateProject(path?: string): Promise<ProjectRecord | null>;
10
15
  export declare function getAllProjects(): Promise<ProjectRecord[]>;
11
16
  export declare function getProjectById(id: string): Promise<ProjectRecord | null>;
12
17
  //# sourceMappingURL=projects.d.ts.map
@@ -3,9 +3,8 @@ import { randomUUID } from 'crypto';
3
3
  import { eq } from 'drizzle-orm';
4
4
  import { getDb } from '../db/index.js';
5
5
  import { getSchema } from '../db/schema.js';
6
- import { fromSqliteJson, toSqliteJson } from './memory/serialization.js';
7
- import { config } from '../config.js';
8
- import { createDatabaseClient } from './database.js';
6
+ import { serializeMetadata, deserializeMetadata } from './memory/serialization.js';
7
+ import { createDatabaseClient } from './storage/database.js';
9
8
  export async function getProjectByPath(path) {
10
9
  try {
11
10
  const db = createDatabaseClient(await getDb());
@@ -31,26 +30,48 @@ export async function ensureProject(path) {
31
30
  const id = randomUUID();
32
31
  const name = basename(path) || path;
33
32
  const metadata = { source: 'mcp' };
34
- if (config.isTeamMode) {
35
- await db.insert(schema.projects).values({
36
- id,
37
- name,
38
- path,
39
- metadata,
40
- });
33
+ await db.insert(schema.projects).values({
34
+ id,
35
+ name,
36
+ path,
37
+ metadata: serializeMetadata(metadata),
38
+ });
39
+ return { id, name, path, metadata };
40
+ }
41
+ export class ProjectNotFoundError extends Error {
42
+ constructor(path) {
43
+ super(`Project not found: ${path}`);
44
+ this.name = 'ProjectNotFoundError';
41
45
  }
42
- else {
43
- await db.insert(schema.projects).values({
44
- id,
45
- name,
46
- path,
47
- metadata: toSqliteJson(metadata),
48
- });
46
+ }
47
+ export async function requireProject(path) {
48
+ const project = await getProjectByPath(path);
49
+ if (!project) {
50
+ throw new ProjectNotFoundError(path);
49
51
  }
52
+ return project;
53
+ }
54
+ export async function getOrCreateProject(path) {
55
+ if (!path)
56
+ return null;
57
+ const existing = await getProjectByPath(path);
58
+ if (existing)
59
+ return existing;
60
+ const db = createDatabaseClient(await getDb());
61
+ const schema = await getSchema();
62
+ const id = randomUUID();
63
+ const name = basename(path) || path;
64
+ const metadata = { source: 'mcp' };
65
+ await db.insert(schema.projects).values({
66
+ id,
67
+ name,
68
+ path,
69
+ metadata: serializeMetadata(metadata),
70
+ });
50
71
  return { id, name, path, metadata };
51
72
  }
52
73
  function normalizeProject(row) {
53
- const metadata = config.isTeamMode ? row.metadata : fromSqliteJson(row.metadata);
74
+ const metadata = deserializeMetadata(row.metadata ?? null);
54
75
  return {
55
76
  id: row.id,
56
77
  name: row.name,
@@ -64,6 +85,14 @@ export async function getAllProjects() {
64
85
  const db = createDatabaseClient(await getDb());
65
86
  const schema = await getSchema();
66
87
  const rows = await db.select().from(schema.projects);
88
+ // Auto-create default project if none exist
89
+ if (rows.length === 0) {
90
+ const cwd = process.cwd();
91
+ const defaultProject = await getOrCreateProject(cwd);
92
+ if (defaultProject) {
93
+ return [defaultProject];
94
+ }
95
+ }
67
96
  return rows.map(normalizeProject);
68
97
  }
69
98
  catch (error) {
@@ -0,0 +1,96 @@
1
+ /**
2
+ * ResponseFormatter - Unified response formatting for all Squish output contexts
3
+ * @module core/responses
4
+ */
5
+ export type ResponseStatus = 'ok' | 'error';
6
+ export interface BaseResponse<T = unknown> {
7
+ status: ResponseStatus;
8
+ message?: string;
9
+ data?: T;
10
+ error?: string;
11
+ timestamp?: string;
12
+ }
13
+ export interface PaginatedResponse<T> extends BaseResponse<T[]> {
14
+ count: number;
15
+ total?: number;
16
+ page?: number;
17
+ limit?: number;
18
+ }
19
+ /**
20
+ * Format options for web responses
21
+ */
22
+ export interface WebFormatOptions {
23
+ statusCode?: number;
24
+ pagination?: {
25
+ total: number;
26
+ page: number;
27
+ limit: number;
28
+ };
29
+ }
30
+ /**
31
+ * Unified response formatter for all Squish output contexts
32
+ */
33
+ export declare class ResponseFormatter {
34
+ /**
35
+ * Generate ISO timestamp
36
+ */
37
+ private static getTimestamp;
38
+ /**
39
+ * Build base response with timestamp
40
+ */
41
+ private static buildBase;
42
+ /**
43
+ * Format response for CLI output (pretty-printed JSON)
44
+ */
45
+ static cli<T>(data: T, message?: string): string;
46
+ /**
47
+ * Format error for CLI and exit process
48
+ */
49
+ static cliError(error: Error): never;
50
+ /**
51
+ * Format successful response for Web API
52
+ */
53
+ static web<T>(data: T, message?: string, options?: WebFormatOptions): {
54
+ status: number;
55
+ body: BaseResponse<T>;
56
+ };
57
+ /**
58
+ * Format error response for Web API
59
+ */
60
+ static webError(error: Error, options?: {
61
+ statusCode?: number;
62
+ log?: boolean;
63
+ }): {
64
+ status: number;
65
+ body: BaseResponse;
66
+ };
67
+ /**
68
+ * Format response for MCP tools
69
+ */
70
+ static mcp<T>(data: T, message?: string): {
71
+ content: Array<{
72
+ type: string;
73
+ text: string;
74
+ }>;
75
+ };
76
+ /**
77
+ * Format error for MCP tools (throws McpError)
78
+ */
79
+ static mcpError(error: Error, context?: string): never;
80
+ /**
81
+ * Format response for algorithm handlers
82
+ */
83
+ static algorithm<T>(data: T, message: string, options?: {
84
+ ok?: boolean;
85
+ error?: string;
86
+ }): BaseResponse<T>;
87
+ /**
88
+ * Convenience method for success responses
89
+ */
90
+ static success<T>(data: T, message?: string): BaseResponse<T>;
91
+ /**
92
+ * Convenience method for failure responses
93
+ */
94
+ static failure(message: string, error?: Error | string): BaseResponse;
95
+ }
96
+ //# sourceMappingURL=responses.d.ts.map
@@ -0,0 +1,122 @@
1
+ /**
2
+ * ResponseFormatter - Unified response formatting for all Squish output contexts
3
+ * @module core/responses
4
+ */
5
+ /**
6
+ * Unified response formatter for all Squish output contexts
7
+ */
8
+ export class ResponseFormatter {
9
+ /**
10
+ * Generate ISO timestamp
11
+ */
12
+ static getTimestamp() {
13
+ return new Date().toISOString();
14
+ }
15
+ /**
16
+ * Build base response with timestamp
17
+ */
18
+ static buildBase(status, message, data, error) {
19
+ return {
20
+ status,
21
+ message,
22
+ data,
23
+ error,
24
+ timestamp: this.getTimestamp(),
25
+ };
26
+ }
27
+ // CLI Formatters
28
+ /**
29
+ * Format response for CLI output (pretty-printed JSON)
30
+ */
31
+ static cli(data, message) {
32
+ const response = this.buildBase(data instanceof Error ? 'error' : 'ok', message, data);
33
+ return JSON.stringify(response, null, 2);
34
+ }
35
+ /**
36
+ * Format error for CLI and exit process
37
+ */
38
+ static cliError(error) {
39
+ const response = this.buildBase('error', error.message, undefined, error.message);
40
+ console.error(JSON.stringify(response, null, 2));
41
+ process.exit(1);
42
+ }
43
+ // Web API Formatters
44
+ /**
45
+ * Format successful response for Web API
46
+ */
47
+ static web(data, message, options) {
48
+ const body = this.buildBase('ok', message, data);
49
+ // Add pagination metadata if provided
50
+ if (options?.pagination) {
51
+ body.count = options.pagination.total;
52
+ body.total = options.pagination.total;
53
+ body.page = options.pagination.page;
54
+ body.limit = options.pagination.limit;
55
+ }
56
+ return {
57
+ status: options?.statusCode ?? 200,
58
+ body,
59
+ };
60
+ }
61
+ /**
62
+ * Format error response for Web API
63
+ */
64
+ static webError(error, options) {
65
+ const statusCode = options?.statusCode ?? 500;
66
+ const body = this.buildBase('error', error.message, undefined, error.message);
67
+ if (options?.log !== false) {
68
+ console.error(`[Web API Error ${statusCode}]:`, error.message);
69
+ }
70
+ return { status: statusCode, body };
71
+ }
72
+ // MCP Formatters
73
+ /**
74
+ * Format response for MCP tools
75
+ */
76
+ static mcp(data, message) {
77
+ const response = this.buildBase('ok', message, data);
78
+ return {
79
+ content: [{ type: 'text', text: JSON.stringify(response, null, 2) }],
80
+ };
81
+ }
82
+ /**
83
+ * Format error for MCP tools (throws McpError)
84
+ */
85
+ static mcpError(error, context) {
86
+ const message = context ? `${context}: ${error.message}` : error.message;
87
+ const response = this.buildBase('error', message, undefined, message);
88
+ // Import McpError dynamically to avoid requiring @modelcontextprotocol/sdk in non-MCP contexts
89
+ try {
90
+ const { McpError, ErrorCode } = require('@modelcontextprotocol/sdk/types.js');
91
+ throw new McpError(ErrorCode.InternalError, JSON.stringify(response));
92
+ }
93
+ catch (e) {
94
+ // If McpError is not available, throw a standard error with MCP-formatted message
95
+ const mcpError = new Error(JSON.stringify(response));
96
+ mcpError.name = 'McpError';
97
+ throw mcpError;
98
+ }
99
+ }
100
+ // Algorithm Handler Formatters
101
+ /**
102
+ * Format response for algorithm handlers
103
+ */
104
+ static algorithm(data, message, options) {
105
+ const isOk = options?.ok !== false;
106
+ return this.buildBase(isOk ? 'ok' : 'error', message, isOk ? data : undefined, options?.error);
107
+ }
108
+ /**
109
+ * Convenience method for success responses
110
+ */
111
+ static success(data, message) {
112
+ return this.buildBase('ok', message, data);
113
+ }
114
+ /**
115
+ * Convenience method for failure responses
116
+ */
117
+ static failure(message, error) {
118
+ const errorMessage = error instanceof Error ? error.message : error;
119
+ return this.buildBase('error', message, undefined, errorMessage);
120
+ }
121
+ }
122
+ //# sourceMappingURL=responses.js.map
@@ -0,0 +1,102 @@
1
+ export interface CurrentProjectSummary {
2
+ id: string;
3
+ name: string;
4
+ path: string;
5
+ resolution: 'explicit' | 'inferred' | 'auto-created' | 'legacy-placeholder';
6
+ }
7
+ export interface ContextReportInput {
8
+ currentProject: CurrentProjectSummary;
9
+ otherProjects: CurrentProjectSummary[];
10
+ runtime: {
11
+ sessionSummary: string;
12
+ activePlaces: string[];
13
+ signalSummary: {
14
+ captured: number;
15
+ suppressed: number;
16
+ sessionOnly: number;
17
+ durable: number;
18
+ durableWithRaw: number;
19
+ };
20
+ graphSummary: string;
21
+ };
22
+ durableMemories: Array<{
23
+ id: string;
24
+ type: string;
25
+ content: string;
26
+ place?: string | null;
27
+ }>;
28
+ beliefs?: Array<{
29
+ type: string;
30
+ statement: string;
31
+ status: string;
32
+ }>;
33
+ nextStep: string | null;
34
+ }
35
+ export interface HealthReportInput {
36
+ severity: 'ok' | 'degraded' | 'broken';
37
+ currentProject: string;
38
+ checks: Array<{
39
+ name: string;
40
+ status: 'ok' | 'degraded' | 'broken';
41
+ detail: string;
42
+ }>;
43
+ diagnostics?: Array<{
44
+ name: string;
45
+ status: 'ok' | 'degraded' | 'broken';
46
+ detail: string;
47
+ fix?: string;
48
+ }>;
49
+ nextStep: string | null;
50
+ }
51
+ export interface StatsReportInput {
52
+ currentProject: string;
53
+ totals: {
54
+ memories: number;
55
+ durable: number;
56
+ sessionLocal: number;
57
+ };
58
+ signal: {
59
+ captured: number;
60
+ suppressed: number;
61
+ sessionOnly: number;
62
+ durable: number;
63
+ durableWithRaw: number;
64
+ tokensSaved: number;
65
+ placeRouted: number;
66
+ graphEnriched: number;
67
+ };
68
+ places: {
69
+ active: number;
70
+ named: string[];
71
+ };
72
+ graph: {
73
+ status: string;
74
+ enrichments: number;
75
+ };
76
+ wakeUp: string;
77
+ signalNote?: string | null;
78
+ }
79
+ export interface InspectReportInput {
80
+ id: string;
81
+ classification: string;
82
+ storageReason: string;
83
+ durability: 'session-only' | 'durable';
84
+ place?: string | null;
85
+ placeType?: string | null;
86
+ graphStatus?: string | null;
87
+ rawFallback?: string | null;
88
+ wakeUpPriority?: string | null;
89
+ metadataAvailability?: string | null;
90
+ beliefs?: Array<{
91
+ id: string;
92
+ type: string;
93
+ statement: string;
94
+ status: string;
95
+ confidence: number;
96
+ }>;
97
+ }
98
+ export declare function formatContextReport(input: ContextReportInput): string;
99
+ export declare function formatHealthReport(input: HealthReportInput): string;
100
+ export declare function formatStatsReport(input: StatsReportInput): string;
101
+ export declare function formatInspectReport(input: InspectReportInput): string;
102
+ //# sourceMappingURL=trust-report.d.ts.map
@@ -0,0 +1,107 @@
1
+ export function formatContextReport(input) {
2
+ const lines = [
3
+ 'Current project',
4
+ `- ${input.currentProject.name} (${input.currentProject.path})`,
5
+ `- resolution: ${input.currentProject.resolution}`,
6
+ '',
7
+ 'Runtime state',
8
+ `- session working set: ${input.runtime.sessionSummary || 'none'}`,
9
+ `- active places: ${input.runtime.activePlaces.join(', ') || 'none'}`,
10
+ `- signals: captured ${input.runtime.signalSummary.captured}, suppressed ${input.runtime.signalSummary.suppressed}, session-only ${input.runtime.signalSummary.sessionOnly}, durable ${input.runtime.signalSummary.durable}, durable+raw ${input.runtime.signalSummary.durableWithRaw}`,
11
+ `- graph: ${input.runtime.graphSummary}`,
12
+ '',
13
+ 'Recent durable memories',
14
+ ];
15
+ if (input.durableMemories.length === 0) {
16
+ lines.push('- none yet');
17
+ }
18
+ else {
19
+ for (const memory of input.durableMemories) {
20
+ lines.push(`- [${memory.type}] ${memory.content}${memory.place ? ` @ ${memory.place}` : ''}`);
21
+ }
22
+ }
23
+ if (input.otherProjects.length > 0) {
24
+ lines.push('', 'Other projects');
25
+ for (const project of input.otherProjects) {
26
+ lines.push(`- ${project.name} (${project.path}) [${project.resolution}]`);
27
+ }
28
+ }
29
+ if (input.beliefs && input.beliefs.length > 0) {
30
+ lines.push('', 'Derived beliefs');
31
+ for (const belief of input.beliefs) {
32
+ lines.push(`- [${belief.type}] ${belief.statement} (${belief.status})`);
33
+ }
34
+ }
35
+ if (input.nextStep) {
36
+ lines.push('', `Next step: ${input.nextStep}`);
37
+ }
38
+ return lines.join('\n');
39
+ }
40
+ export function formatHealthReport(input) {
41
+ const lines = [
42
+ `Status: ${input.severity}`,
43
+ `Current project: ${input.currentProject}`,
44
+ '',
45
+ 'Subsystems',
46
+ ...input.checks.map((check) => `- ${check.name}: ${check.status} (${check.detail})`),
47
+ ];
48
+ if (input.diagnostics && input.diagnostics.length > 0) {
49
+ lines.push('', 'Diagnostics');
50
+ for (const diagnostic of input.diagnostics) {
51
+ lines.push(`- ${diagnostic.name}: ${diagnostic.status} (${diagnostic.detail})`);
52
+ if (diagnostic.fix) {
53
+ lines.push(` fix: ${diagnostic.fix}`);
54
+ }
55
+ }
56
+ }
57
+ if (input.nextStep)
58
+ lines.push('', `Next step: ${input.nextStep}`);
59
+ return lines.join('\n');
60
+ }
61
+ export function formatStatsReport(input) {
62
+ const lines = [
63
+ `Current project: ${input.currentProject}`,
64
+ `Memory totals: ${input.totals.memories} total, ${input.totals.durable} durable, ${input.totals.sessionLocal} session-local`,
65
+ '',
66
+ 'Capture-era signals',
67
+ `- captured: ${input.signal.captured}`,
68
+ `- suppressed: ${input.signal.suppressed}`,
69
+ `- session-only: ${input.signal.sessionOnly}`,
70
+ `- signal-tracked durable: ${input.signal.durable}`,
71
+ `- signal-tracked durable+raw: ${input.signal.durableWithRaw}`,
72
+ `- token savings: ${input.signal.tokensSaved}`,
73
+ `- place routed: ${input.signal.placeRouted}`,
74
+ `- graph enriched: ${input.signal.graphEnriched}`,
75
+ '',
76
+ `Places: ${input.places.active} active (${input.places.named.join(', ') || 'none'})`,
77
+ `Graph: ${input.graph.status}; ${input.graph.enrichments} enrichments`,
78
+ `Wake-up: ${input.wakeUp}`,
79
+ ];
80
+ if (input.signalNote) {
81
+ lines.push(`Signal note: ${input.signalNote}`);
82
+ }
83
+ return lines.join('\n');
84
+ }
85
+ export function formatInspectReport(input) {
86
+ const lines = [
87
+ `Memory ${input.id}`,
88
+ `Classification: ${input.classification}`,
89
+ `Storage reason: ${input.storageReason}`,
90
+ `Durability: ${input.durability}`,
91
+ `Place: ${input.place ?? 'none'}${input.placeType ? ` (${input.placeType})` : ''}`,
92
+ `Graph: ${input.graphStatus ?? 'none'}`,
93
+ `Raw fallback: ${input.rawFallback ?? 'none'}`,
94
+ `Wake-up priority: ${input.wakeUpPriority ?? 'n/a'}`,
95
+ ];
96
+ if (input.metadataAvailability) {
97
+ lines.push(`Metadata: ${input.metadataAvailability}`);
98
+ }
99
+ if (input.beliefs && input.beliefs.length > 0) {
100
+ lines.push('Beliefs:');
101
+ for (const belief of input.beliefs) {
102
+ lines.push(`- [${belief.type}] ${belief.statement} (${belief.status}, c=${belief.confidence.toFixed(2)})`);
103
+ }
104
+ }
105
+ return lines.join('\n');
106
+ }
107
+ //# sourceMappingURL=trust-report.js.map
@@ -0,0 +1,12 @@
1
+ import type { ContextReportInput, CurrentProjectSummary, HealthReportInput, InspectReportInput, StatsReportInput } from './trust-report.js';
2
+ export interface TrustProjectScope {
3
+ currentProject: CurrentProjectSummary;
4
+ otherProjects: CurrentProjectSummary[];
5
+ nextStep: string | null;
6
+ }
7
+ export declare function resolveProjectScope(projectPath?: string): Promise<TrustProjectScope>;
8
+ export declare function buildContextState(projectPath?: string, limit?: number): Promise<ContextReportInput>;
9
+ export declare function buildStatsState(projectPath?: string): Promise<StatsReportInput>;
10
+ export declare function buildHealthState(projectPath?: string): Promise<HealthReportInput>;
11
+ export declare function buildInspectState(id: string): Promise<InspectReportInput | null>;
12
+ //# sourceMappingURL=trust-state.d.ts.map