squish-memory 1.0.2 → 1.1.5

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 (341) hide show
  1. package/.env.example +130 -0
  2. package/CHANGELOG.md +55 -0
  3. package/README.md +150 -287
  4. package/config/hooks/claude-code-hooks.json +39 -0
  5. package/config/hooks/cursor-hooks.json +30 -0
  6. package/config/hooks/opencode-hooks.json +30 -0
  7. package/config/hooks/windsurf-hooks.json +30 -0
  8. package/config/mcp-mode-semantics.json +23 -21
  9. package/config/plugin-manifest.json +101 -152
  10. package/{plugin.json → config/plugin.json} +2 -2
  11. package/config/settings.json +52 -51
  12. package/{commands → core/commands}/init.md +39 -39
  13. package/dist/config.d.ts +28 -4
  14. package/dist/config.js +97 -29
  15. package/dist/core/adapters/config/claude-code.d.ts +45 -0
  16. package/dist/core/adapters/config/claude-code.js +113 -0
  17. package/dist/core/adapters/config/cursor.d.ts +26 -0
  18. package/dist/core/adapters/config/cursor.js +74 -0
  19. package/dist/core/adapters/config/opencode.d.ts +23 -0
  20. package/dist/core/adapters/config/opencode.js +73 -0
  21. package/dist/core/adapters/config/windsurf.d.ts +26 -0
  22. package/dist/core/adapters/config/windsurf.js +74 -0
  23. package/dist/core/adapters/index.d.ts +45 -0
  24. package/dist/core/adapters/index.js +84 -0
  25. package/dist/core/adapters/scripts/install-adapter.d.ts +19 -0
  26. package/dist/core/adapters/scripts/install-adapter.js +149 -0
  27. package/dist/core/adapters/timeline.d.ts +23 -0
  28. package/dist/core/adapters/timeline.js +88 -0
  29. package/dist/core/adapters/types.d.ts +157 -0
  30. package/dist/core/adapters/types.js +50 -0
  31. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.d.ts +1 -1
  32. package/dist/{algorithms → core/algorithms}/analytics/token-estimator.js +3 -3
  33. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.d.ts +1 -1
  34. package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.js +1 -1
  35. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.d.ts +1 -1
  36. package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.js +7 -10
  37. package/dist/{algorithms → core/algorithms}/handlers/approve-merge.js +4 -4
  38. package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.js +3 -3
  39. package/dist/{algorithms → core/algorithms}/handlers/get-stats.js +3 -3
  40. package/dist/{algorithms → core/algorithms}/handlers/list-proposals.js +3 -3
  41. package/dist/{algorithms → core/algorithms}/handlers/preview-merge.js +3 -3
  42. package/dist/{algorithms → core/algorithms}/handlers/reject-merge.js +3 -3
  43. package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.js +3 -3
  44. package/dist/core/algorithms/index.d.ts +21 -0
  45. package/dist/core/algorithms/index.js +26 -0
  46. package/dist/core/algorithms/operations/cache-maintenance.d.ts +12 -0
  47. package/dist/core/algorithms/operations/cache-maintenance.js +157 -0
  48. package/dist/{algorithms → core/algorithms}/safety/safety-checks.d.ts +1 -1
  49. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.d.ts +19 -1
  50. package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.js +74 -123
  51. package/dist/core/algorithms/types.d.ts +133 -0
  52. package/dist/core/algorithms/types.js +5 -0
  53. package/dist/core/associations.d.ts +1 -2
  54. package/dist/core/associations.js +1 -2
  55. package/dist/core/autosave.d.ts +19 -0
  56. package/dist/core/autosave.js +16 -0
  57. package/dist/{commands → core/commands}/managed-sync.js +5 -5
  58. package/dist/core/commands/mcp-server.js +739 -0
  59. package/dist/core/context/agent-context.d.ts +106 -0
  60. package/dist/core/context/agent-context.js +274 -0
  61. package/dist/core/{context-paging.d.ts → context/context-paging.d.ts} +2 -12
  62. package/dist/core/{context-paging.js → context/context-paging.js} +19 -39
  63. package/dist/core/context/context-window.d.ts +40 -0
  64. package/dist/core/context/context-window.js +177 -0
  65. package/dist/core/context/context.js +22 -0
  66. package/dist/core/embeddings.d.ts +1 -1
  67. package/dist/core/embeddings.js +54 -2
  68. package/dist/core/error-handling.d.ts +63 -0
  69. package/dist/core/error-handling.js +173 -0
  70. package/dist/core/external-folder/index.d.ts +102 -0
  71. package/dist/core/external-folder/index.js +294 -0
  72. package/dist/core/hooks/agent-hooks.d.ts +74 -0
  73. package/dist/core/hooks/agent-hooks.js +244 -0
  74. package/dist/core/hooks/auto-tagger.d.ts +19 -0
  75. package/dist/core/hooks/auto-tagger.js +155 -0
  76. package/dist/core/hooks/capture-filter.d.ts +41 -0
  77. package/dist/core/hooks/capture-filter.js +128 -0
  78. package/dist/core/index.d.ts +6 -6
  79. package/dist/core/index.js +6 -6
  80. package/dist/core/{agent-memory.js → ingestion/agent-memory.js} +5 -7
  81. package/dist/core/{core-memory.js → ingestion/core-memory.js} +4 -4
  82. package/dist/core/ingestion/learnings.d.ts +57 -0
  83. package/dist/core/ingestion/learnings.js +202 -0
  84. package/dist/core/lib/db-client.d.ts +114 -0
  85. package/dist/core/lib/db-client.js +130 -0
  86. package/dist/core/lib/schemas.d.ts +129 -0
  87. package/dist/core/lib/schemas.js +87 -0
  88. package/dist/core/{utils.d.ts → lib/utils.d.ts} +1 -0
  89. package/dist/core/{utils.js → lib/utils.js} +31 -15
  90. package/dist/core/lib/validation.d.ts +38 -0
  91. package/dist/core/lib/validation.js +151 -0
  92. package/dist/core/lifecycle.d.ts +7 -0
  93. package/dist/core/lifecycle.js +140 -20
  94. package/dist/core/local-embeddings.d.ts +6 -1
  95. package/dist/core/local-embeddings.js +6 -15
  96. package/dist/core/logger.js +7 -1
  97. package/dist/core/mcp/tools.js +35 -3
  98. package/dist/core/memory/categorizer.js +1 -0
  99. package/dist/core/memory/conflict-detector.js +1 -1
  100. package/dist/core/memory/consolidation.d.ts +1 -10
  101. package/dist/core/memory/consolidation.js +2 -11
  102. package/dist/core/memory/context-collector.js +1 -1
  103. package/dist/core/memory/edit-workflow.js +1 -1
  104. package/dist/core/memory/entity-resolver.js +7 -7
  105. package/dist/core/memory/fact-extractor.js +12 -12
  106. package/dist/core/memory/feedback-tracker.js +1 -1
  107. package/dist/core/memory/hooks.d.ts +88 -0
  108. package/dist/core/memory/hooks.js +174 -0
  109. package/dist/core/memory/hybrid-retrieval.js +2 -2
  110. package/dist/core/memory/hybrid-search.d.ts +1 -6
  111. package/dist/core/memory/hybrid-search.js +70 -84
  112. package/dist/core/memory/importance.d.ts +8 -13
  113. package/dist/core/memory/importance.js +47 -74
  114. package/dist/core/memory/loader.d.ts +31 -0
  115. package/dist/core/memory/loader.js +141 -0
  116. package/dist/core/memory/markdown/markdown-storage.d.ts +72 -0
  117. package/dist/core/memory/markdown/markdown-storage.js +243 -0
  118. package/dist/core/memory/memories.d.ts +12 -4
  119. package/dist/core/memory/memories.js +192 -180
  120. package/dist/core/memory/memory-lifecycle.d.ts +8 -0
  121. package/dist/core/memory/memory-lifecycle.js +55 -0
  122. package/dist/core/memory/migrate.d.ts +21 -0
  123. package/dist/core/memory/migrate.js +134 -0
  124. package/dist/core/memory/normalization.d.ts +22 -0
  125. package/dist/core/memory/normalization.js +26 -0
  126. package/dist/core/memory/progressive-disclosure.js +1 -1
  127. package/dist/core/memory/query-rewriter.js +9 -9
  128. package/dist/core/memory/serialization.d.ts +4 -0
  129. package/dist/core/memory/serialization.js +49 -0
  130. package/dist/core/memory/stats.d.ts +5 -0
  131. package/dist/core/memory/stats.js +63 -12
  132. package/dist/core/memory/temporal-facts.js +21 -0
  133. package/dist/core/memory/write-gate.js +1 -1
  134. package/dist/core/obsidian-vault.d.ts +30 -0
  135. package/dist/core/obsidian-vault.js +94 -0
  136. package/dist/core/places/index.d.ts +14 -0
  137. package/dist/core/places/index.js +14 -0
  138. package/dist/core/places/memory-places.d.ts +68 -0
  139. package/dist/core/places/memory-places.js +261 -0
  140. package/dist/core/places/places.d.ts +88 -0
  141. package/dist/core/places/places.js +314 -0
  142. package/dist/core/places/rules.d.ts +74 -0
  143. package/dist/core/places/rules.js +240 -0
  144. package/dist/core/places/walking.d.ts +56 -0
  145. package/dist/core/places/walking.js +121 -0
  146. package/dist/core/projects.d.ts +5 -0
  147. package/dist/core/projects.js +39 -18
  148. package/dist/core/responses.d.ts +96 -0
  149. package/dist/core/responses.js +122 -0
  150. package/dist/core/scheduler/cron-scheduler.js +29 -7
  151. package/dist/core/scheduler/index.d.ts +1 -1
  152. package/dist/core/scheduler/index.js +1 -1
  153. package/dist/core/scheduler/job-runner.js +1 -1
  154. package/dist/core/search/conversations.js +40 -42
  155. package/dist/core/search/entities.js +6 -9
  156. package/dist/core/search/graph-boost.d.ts +7 -0
  157. package/dist/core/search/graph-boost.js +23 -0
  158. package/dist/core/search/qmd-search.js +4 -4
  159. package/dist/core/security/encrypt.d.ts +6 -0
  160. package/dist/core/security/encrypt.js +47 -0
  161. package/dist/core/{governance.d.ts → security/governance.d.ts} +6 -1
  162. package/dist/core/security/governance.js +79 -0
  163. package/dist/core/session/auto-load.js +6 -6
  164. package/dist/core/session/index.d.ts +1 -1
  165. package/dist/core/session/index.js +1 -1
  166. package/dist/core/session/self-iteration-job.d.ts +20 -0
  167. package/dist/core/session/self-iteration-job.js +282 -0
  168. package/dist/core/session/session-hooks.d.ts +18 -0
  169. package/dist/core/session/session-hooks.js +58 -0
  170. package/dist/core/session-hooks/self-iteration-job.js +35 -35
  171. package/dist/core/{cache.js → storage/cache.js} +2 -2
  172. package/dist/core/sync/qmd-sync.d.ts +1 -13
  173. package/dist/core/sync/qmd-sync.js +1 -13
  174. package/dist/core/toon.d.ts +43 -0
  175. package/dist/core/toon.js +160 -0
  176. package/dist/core/utils/memory-operations.js +1 -1
  177. package/dist/core/utils/vector-operations.d.ts +71 -0
  178. package/dist/core/utils/vector-operations.js +129 -0
  179. package/dist/db/adapter.d.ts +3 -3
  180. package/dist/db/adapter.js +99 -88
  181. package/dist/db/bootstrap.js +820 -522
  182. package/dist/{drizzle → db/drizzle}/schema-sqlite.d.ts +74 -25
  183. package/dist/{drizzle → db/drizzle}/schema-sqlite.js +91 -24
  184. package/dist/{drizzle → db/drizzle}/schema.d.ts +79 -32
  185. package/dist/{drizzle → db/drizzle}/schema.js +106 -35
  186. package/dist/db/drizzle.config.d.ts +3 -0
  187. package/dist/db/drizzle.config.js +12 -0
  188. package/dist/db/index.d.ts +1 -5
  189. package/dist/db/index.js +51 -8
  190. package/dist/db/neon.d.ts +8 -0
  191. package/dist/db/neon.js +20 -0
  192. package/dist/db/schema/index.d.ts +40 -0
  193. package/dist/db/schema/index.js +105 -0
  194. package/dist/db/schema/tables/context-sessions.d.ts +9 -0
  195. package/dist/db/schema/tables/context-sessions.js +37 -0
  196. package/dist/db/schema/tables/conversations.d.ts +9 -0
  197. package/dist/db/schema/tables/conversations.js +47 -0
  198. package/dist/db/schema/tables/core-memory.d.ts +9 -0
  199. package/dist/db/schema/tables/core-memory.js +41 -0
  200. package/dist/db/schema/tables/entities.d.ts +9 -0
  201. package/dist/db/schema/tables/entities.js +39 -0
  202. package/dist/db/schema/tables/entity-relations.d.ts +9 -0
  203. package/dist/db/schema/tables/entity-relations.js +31 -0
  204. package/dist/db/schema/tables/learnings.d.ts +9 -0
  205. package/dist/db/schema/tables/learnings.js +66 -0
  206. package/dist/db/schema/tables/memories.d.ts +9 -0
  207. package/dist/db/schema/tables/memories.js +161 -0
  208. package/dist/db/schema/tables/memory-associations.d.ts +9 -0
  209. package/dist/db/schema/tables/memory-associations.js +39 -0
  210. package/dist/db/schema/tables/memory-hash-cache.d.ts +9 -0
  211. package/dist/db/schema/tables/memory-hash-cache.js +29 -0
  212. package/dist/db/schema/tables/memory-merge-history.d.ts +9 -0
  213. package/dist/db/schema/tables/memory-merge-history.js +33 -0
  214. package/dist/db/schema/tables/memory-merge-proposals.d.ts +9 -0
  215. package/dist/db/schema/tables/memory-merge-proposals.js +39 -0
  216. package/dist/db/schema/tables/messages.d.ts +9 -0
  217. package/dist/db/schema/tables/messages.js +41 -0
  218. package/dist/db/schema/tables/namespaces.d.ts +9 -0
  219. package/dist/db/schema/tables/namespaces.js +37 -0
  220. package/dist/db/schema/tables/projects.d.ts +9 -0
  221. package/dist/db/schema/tables/projects.js +31 -0
  222. package/dist/db/schema/tables/users.d.ts +9 -0
  223. package/dist/db/schema/tables/users.js +27 -0
  224. package/dist/db/schema.d.ts +1 -1
  225. package/dist/db/schema.js +2 -2
  226. package/dist/db/supabase.d.ts +9 -0
  227. package/dist/db/supabase.js +24 -0
  228. package/dist/index.d.ts +2 -14
  229. package/dist/index.js +1320 -640
  230. package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
  231. package/dist/webui/server.d.ts +5 -0
  232. package/dist/{api/web/web.js → webui/server.js} +511 -508
  233. package/generated/mcp/manifest.json +1 -1
  234. package/{.mcp.json → mcp.json.example} +1 -1
  235. package/package.json +159 -181
  236. package/scripts/README.md +60 -0
  237. package/scripts/copy-runtime-assets.mjs +26 -0
  238. package/scripts/generate-mcp.mjs +264 -264
  239. package/scripts/github-release.sh +4 -4
  240. package/scripts/install-claude-code.sh +85 -0
  241. package/scripts/install-cursor.sh +56 -0
  242. package/scripts/install-hooks.sh +73 -0
  243. package/scripts/install-interactive.mjs +357 -677
  244. package/scripts/install-opencode.sh +75 -0
  245. package/scripts/install-windsurf.sh +67 -0
  246. package/skills/squish-memory/SKILL.md +104 -114
  247. package/skills/squish-memory/{install.mjs → scripts/install.mjs} +2 -2
  248. package/skills/squish-memory/{install.sh → scripts/install.sh} +2 -2
  249. package/skills/squish-memory/write_skill.js +2 -0
  250. package/.claude-plugin/marketplace.json +0 -20
  251. package/.claude-plugin/plugin.json +0 -32
  252. package/.env.mcp.example +0 -60
  253. package/QUICK-START.md +0 -71
  254. package/bin/squish-add.mjs +0 -32
  255. package/bin/squish-rm.mjs +0 -21
  256. package/commands/observe.md +0 -5
  257. package/dist/api/web/index.d.ts +0 -3
  258. package/dist/api/web/index.js +0 -4
  259. package/dist/api/web/web-server.d.ts +0 -3
  260. package/dist/api/web/web-server.js +0 -6
  261. package/dist/api/web/web.d.ts +0 -4
  262. package/dist/commands/mcp-server.js +0 -393
  263. package/dist/core/context.js +0 -24
  264. package/dist/core/governance.js +0 -64
  265. package/dist/core/observations.d.ts +0 -26
  266. package/dist/core/observations.js +0 -110
  267. package/dist/core/requirements.d.ts +0 -20
  268. package/dist/core/requirements.js +0 -35
  269. package/hooks/hooks.json +0 -52
  270. package/hooks/post-tool-use.js +0 -26
  271. package/hooks/session-end.js +0 -28
  272. package/hooks/session-start.js +0 -33
  273. package/hooks/user-prompt-submit.js +0 -26
  274. package/hooks/utils.js +0 -153
  275. package/npx-installer.js +0 -208
  276. package/packages/plugin-claude-code/README.md +0 -73
  277. package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +0 -35
  278. package/packages/plugin-claude-code/dist/plugin-wrapper.js +0 -191
  279. package/packages/plugin-claude-code/package.json +0 -31
  280. package/packages/plugin-openclaw/README.md +0 -70
  281. package/packages/plugin-openclaw/dist/index.d.ts +0 -49
  282. package/packages/plugin-openclaw/dist/index.js +0 -262
  283. package/packages/plugin-openclaw/openclaw.plugin.json +0 -94
  284. package/packages/plugin-openclaw/package.json +0 -31
  285. package/packages/plugin-opencode/install.mjs +0 -217
  286. package/packages/plugin-opencode/package.json +0 -21
  287. package/scripts/db/check-db.mjs +0 -88
  288. package/scripts/db/fix-all-columns.mjs +0 -52
  289. package/scripts/db/fix-schema-all.mjs +0 -55
  290. package/scripts/db/fix-schema-full.mjs +0 -46
  291. package/scripts/db/fix-schema.mjs +0 -38
  292. package/scripts/db/init-db.mjs +0 -13
  293. package/scripts/db/recreate-db.mjs +0 -14
  294. package/scripts/install-mcp.mjs +0 -116
  295. package/scripts/install-web.sh +0 -120
  296. package/scripts/install.mjs +0 -340
  297. package/scripts/openclaw-bootstrap.mjs +0 -127
  298. package/scripts/package-release.sh +0 -71
  299. package/scripts/test/test-all-systems.mjs +0 -139
  300. package/scripts/test/test-memory-system.mjs +0 -139
  301. package/scripts/test/test-v0.5.0.mjs +0 -210
  302. package/skills/memory-guide/SKILL.md +0 -332
  303. package/skills/squish-cli/SKILL.md +0 -240
  304. package/skills/squish-mcp/SKILL.md +0 -355
  305. package/skills/squish-memory/claude-desktop.json +0 -12
  306. package/skills/squish-memory/openclaw.json +0 -13
  307. package/skills/squish-memory/opencode.json +0 -14
  308. package/skills/squish-memory/skill.json +0 -32
  309. /package/{commands → core/commands}/context-paging.md +0 -0
  310. /package/{commands → core/commands}/context-status.md +0 -0
  311. /package/{commands → core/commands}/context.md +0 -0
  312. /package/{commands → core/commands}/core-memory.md +0 -0
  313. /package/{commands → core/commands}/health.md +0 -0
  314. /package/{commands → core/commands}/merge.md +0 -0
  315. /package/{commands → core/commands}/recall.md +0 -0
  316. /package/{commands → core/commands}/remember.md +0 -0
  317. /package/{commands → core/commands}/search.md +0 -0
  318. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.d.ts +0 -0
  319. /package/dist/{algorithms → core/algorithms}/detection/hash-filters.js +0 -0
  320. /package/dist/{algorithms → core/algorithms}/handlers/approve-merge.d.ts +0 -0
  321. /package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.d.ts +0 -0
  322. /package/dist/{algorithms → core/algorithms}/handlers/get-stats.d.ts +0 -0
  323. /package/dist/{algorithms → core/algorithms}/handlers/list-proposals.d.ts +0 -0
  324. /package/dist/{algorithms → core/algorithms}/handlers/preview-merge.d.ts +0 -0
  325. /package/dist/{algorithms → core/algorithms}/handlers/reject-merge.d.ts +0 -0
  326. /package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.d.ts +0 -0
  327. /package/dist/{algorithms → core/algorithms}/safety/safety-checks.js +0 -0
  328. /package/dist/{algorithms → core/algorithms}/utils/response-builder.d.ts +0 -0
  329. /package/dist/{algorithms → core/algorithms}/utils/response-builder.js +0 -0
  330. /package/dist/{commands → core/commands}/managed-sync.d.ts +0 -0
  331. /package/dist/{commands → core/commands}/mcp-server.d.ts +0 -0
  332. /package/dist/core/{context.d.ts → context/context.d.ts} +0 -0
  333. /package/dist/core/{agent-memory.d.ts → ingestion/agent-memory.d.ts} +0 -0
  334. /package/dist/core/{core-memory.d.ts → ingestion/core-memory.d.ts} +0 -0
  335. /package/dist/core/{privacy.d.ts → security/privacy.d.ts} +0 -0
  336. /package/dist/core/{privacy.js → security/privacy.js} +0 -0
  337. /package/dist/core/{secret-detector.d.ts → security/secret-detector.d.ts} +0 -0
  338. /package/dist/core/{secret-detector.js → security/secret-detector.js} +0 -0
  339. /package/dist/core/{cache.d.ts → storage/cache.d.ts} +0 -0
  340. /package/dist/core/{database.d.ts → storage/database.d.ts} +0 -0
  341. /package/dist/core/{database.js → storage/database.js} +0 -0
package/dist/config.js CHANGED
@@ -50,16 +50,66 @@ function getConfig(path, envVar, defaultValue) {
50
50
  // Priority 3: Default value
51
51
  return defaultValue;
52
52
  }
53
- const isTeamMode = !!process.env.DATABASE_URL?.startsWith('postgres');
53
+ // Mode detection: local (default), team (cloud with own db), remote (integrations)
54
+ // Priority: remote > team > local
55
+ const DATABASE_URL = process.env.DATABASE_URL || '';
56
+ const SUPABASE_URL = process.env.SUPABASE_URL || '';
57
+ const NEON_PROJECT_ID = process.env.NEON_PROJECT_ID || '';
58
+ // Determine mode based on environment
59
+ function detectMode() {
60
+ // Remote mode: user has their own Supabase or Neon
61
+ if (SUPABASE_URL || NEON_PROJECT_ID) {
62
+ return 'remote';
63
+ }
64
+ // Team mode: PostgreSQL (self-hosted "local cloud")
65
+ if (DATABASE_URL.startsWith('postgres')) {
66
+ return 'team';
67
+ }
68
+ // Local mode: default SQLite
69
+ return 'local';
70
+ }
71
+ const detectedMode = detectMode();
72
+ const isTeamMode = detectedMode === 'team';
73
+ const isRemoteMode = detectedMode === 'remote';
74
+ const isLocalMode = detectedMode === 'local';
54
75
  const isManagedMode = process.env.SQUISH_MANAGED_MODE === 'true';
76
+ // Team/Remote backend selection
77
+ const teamBackend = (() => {
78
+ const explicit = getConfig('team.backend', 'SQUISH_TEAM_BACKEND', '').toLowerCase();
79
+ if (explicit === 'supabase' || explicit === 'neon' || explicit === 'postgres') {
80
+ return explicit;
81
+ }
82
+ // Auto-detect based on env vars
83
+ if (SUPABASE_URL)
84
+ return 'supabase';
85
+ if (NEON_PROJECT_ID)
86
+ return 'neon';
87
+ return 'postgres'; // default to PostgreSQL
88
+ })();
89
+ const remoteBackend = (() => {
90
+ const explicit = getConfig('remote.backend', 'SQUISH_REMOTE_BACKEND', '').toLowerCase();
91
+ if (explicit === 'supabase' || explicit === 'neon') {
92
+ return explicit;
93
+ }
94
+ // Auto-detect based on env vars
95
+ if (SUPABASE_URL)
96
+ return 'supabase';
97
+ if (NEON_PROJECT_ID)
98
+ return 'neon';
99
+ return 'supabase'; // default to Supabase
100
+ })();
101
+ // Neon configuration
102
+ const neonProjectId = process.env.NEON_PROJECT_ID || '';
103
+ const neonServiceKey = process.env.NEON_SERVICE_KEY || '';
55
104
  // Embeddings providers:
56
105
  // - openai: OpenAI API (requires API key)
57
- // - ollama: Local Ollama server (requires nomic-embed-text)
106
+ // - ollama: Local Ollama server (any model)
107
+ // - lmstudio: LM Studio local server (any model)
58
108
  // - local: TF-IDF offline (no dependencies)
59
109
  // - none: Disable embeddings (stub)
60
110
  // - google: Google Cloud embeddings
61
111
  // - auto: Smart fallback (cloud if available, local fallback)
62
- const VALID_PROVIDERS = new Set(['openai', 'ollama', 'local', 'none', 'google', 'auto']);
112
+ const VALID_PROVIDERS = new Set(['openai', 'ollama', 'lmstudio', 'local', 'none', 'google', 'auto']);
63
113
  const embeddingsProvider = (() => {
64
114
  const explicit = getConfig('embeddings.provider', 'SQUISH_EMBEDDINGS_PROVIDER', 'local').toLowerCase();
65
115
  if (VALID_PROVIDERS.has(explicit)) {
@@ -67,25 +117,6 @@ const embeddingsProvider = (() => {
67
117
  }
68
118
  return 'local';
69
119
  })();
70
- // QMD Integration
71
- const qmdEnabled = process.env.SQUISH_QMD_ENABLED === 'true';
72
- const qmdCollectionsPath = process.env.SQUISH_QMD_COLLECTIONS ||
73
- getDataDir().replace('.squish', 'qmd-collections');
74
- const VALID_FALLBACK_MODES = new Set(['qmd-only', 'cloud-first', 'hybrid', 'local-only']);
75
- const qmdFallbackMode = (() => {
76
- const mode = process.env.SQUISH_QMD_FALLBACK || 'hybrid';
77
- return VALID_FALLBACK_MODES.has(mode) ? mode : 'hybrid';
78
- })();
79
- const defaultCollectionMapping = {
80
- observation: 'squish-observations',
81
- fact: 'squish-facts',
82
- decision: 'squish-decisions',
83
- context: 'squish-context',
84
- preference: 'squish-preferences'
85
- };
86
- const qmdCollectionMapping = process.env.SQUISH_QMD_COLLECTION_MAPPING
87
- ? JSON.parse(process.env.SQUISH_QMD_COLLECTION_MAPPING)
88
- : defaultCollectionMapping;
89
120
  // OpenAI Configuration
90
121
  const openAiApiKey = process.env.SQUISH_OPENAI_API_KEY || process.env.OPENAI_API_KEY || '';
91
122
  const openAiApiUrl = getConfig('api.openai.apiUrl', 'SQUISH_OPENAI_API_URL', 'https://api.openai.com/v1/embeddings');
@@ -97,14 +128,24 @@ const googleCloudLocation = process.env.GOOGLE_CLOUD_LOCATION || process.env.SQU
97
128
  const googleEmbeddingModel = getConfig('embeddings.models.google.model', 'SQUISH_GOOGLE_EMBEDDING_MODEL', 'gemini-embedding-001');
98
129
  // Ollama Configuration
99
130
  const ollamaUrl = getConfig('api.ollama.url', 'SQUISH_OLLAMA_URL', 'http://localhost:11434');
100
- const ollamaEmbeddingModel = getConfig('embeddings.models.ollama.model', 'SQUISH_OLLAMA_EMBEDDING_MODEL', 'nomic-embed-text:v1.5');
131
+ const ollamaEmbeddingModel = getConfig('embeddings.models.ollama.model', 'SQUISH_OLLAMA_EMBEDDING_MODEL', '');
132
+ // LM Studio Configuration (OpenAI-compatible local server)
133
+ const lmStudioUrl = getConfig('api.lmstudio.url', 'SQUISH_LM_STUDIO_URL', 'http://localhost:1234');
134
+ const lmStudioEmbeddingModel = getConfig('embeddings.models.lmstudio.model', 'SQUISH_LM_STUDIO_EMBEDDING_MODEL', '');
101
135
  export const config = {
136
+ // Mode detection
137
+ mode: detectedMode,
138
+ isLocalMode,
102
139
  isTeamMode,
140
+ isRemoteMode,
141
+ // Backend selection
142
+ teamBackend: teamBackend,
143
+ remoteBackend: remoteBackend,
144
+ // Legacy support
103
145
  isManagedMode,
104
146
  redisEnabled: !!process.env.REDIS_URL,
105
147
  dataDir: getDataDir(),
106
148
  mcpServerPort: parseInt(getConfig('mcp.serverPort', 'SQUISH_MCP_PORT', '8767')),
107
- mcpServerEnabled: getConfig('mcp.serverEnabled', 'SQUISH_MCP_SERVER_ENABLED', true) !== false,
108
149
  embeddingsProvider: embeddingsProvider,
109
150
  // OpenAI
110
151
  openAiApiKey,
@@ -118,9 +159,22 @@ export const config = {
118
159
  // Ollama
119
160
  ollamaUrl,
120
161
  ollamaEmbeddingModel,
162
+ // LM Studio (OpenAI-compatible local)
163
+ lmStudioUrl,
164
+ lmStudioEmbeddingModel,
165
+ // Supabase configuration
166
+ supabaseUrl: getConfig('supabase.url', 'SUPABASE_URL', ''),
167
+ supabaseKey: getConfig('supabase.key', 'SUPABASE_SERVICE_KEY', ''),
168
+ // Neon configuration
169
+ neonProjectId: process.env.NEON_PROJECT_ID || '',
170
+ neonServiceKey: process.env.NEON_SERVICE_KEY || '',
171
+ // Encryption configuration
172
+ clientEncryptionEnabled: getConfig('security.encryptionEnabled', null, false) !== false,
173
+ encryptionPassphrase: process.env.SQUISH_ENCRYPTION_PASSPHRASE || '',
121
174
  // Lifecycle Management
122
175
  lifecycleEnabled: getConfig('features.lifecycleEnabled', 'SQUISH_LIFECYCLE_ENABLED', true) !== false,
123
176
  lifecycleInterval: parseInt(process.env.SQUISH_LIFECYCLE_INTERVAL || '3600000'),
177
+ decayThreshold: parseFloat(process.env.SQUISH_DECAY_THRESHOLD || '0.1'),
124
178
  // Session Summarization
125
179
  summarizationEnabled: getConfig('features.summarizationEnabled', 'SQUISH_SUMMARIZATION_ENABLED', true) !== false,
126
180
  incrementalThreshold: parseInt(process.env.SQUISH_INCREMENTAL_THRESHOLD || '10'),
@@ -133,11 +187,17 @@ export const config = {
133
187
  // Memory Consolidation
134
188
  consolidationEnabled: process.env.SQUISH_CONSOLIDATION_ENABLED === 'true',
135
189
  consolidationSimilarityThreshold: parseFloat(process.env.SQUISH_CONSOLIDATION_THRESHOLD || '0.8'),
136
- // QMD Integration
137
- qmdEnabled,
138
- qmdCollectionsPath,
139
- qmdFallbackMode: qmdFallbackMode,
140
- qmdCollectionMapping,
190
+ // Obsidian Integration (NEW)
191
+ obsidianEnabled: process.env.SQUISH_OBSIDIAN_ENABLED === 'true',
192
+ obsidianVaultPath: process.env.SQUISH_OBSIDIAN_VAULT_PATH || '',
193
+ // External Folder Memory (QMD Wrapper)
194
+ externalMemoryEnabled: process.env.SQUISH_EXTERNAL_MEMORY_ENABLED === 'true',
195
+ externalMemoryPath: process.env.SQUISH_EXTERNAL_MEMORY_PATH || '',
196
+ // DEPRECATED: QMD (kept for backward compat during transition)
197
+ qmdEnabled: false, // DEPRECATED - use Obsidian integration instead
198
+ qmdCollectionsPath: '', // DEPRECATED
199
+ qmdFallbackMode: 'local-only', // DEPRECATED
200
+ qmdCollectionMapping: {}, // DEPRECATED
141
201
  // Managed Mode
142
202
  managedMode: process.env.SQUISH_MANAGED_MODE === 'true',
143
203
  managedApiUrl: process.env.SQUISH_MANAGED_API_URL || 'https://api.squish.dev',
@@ -154,6 +214,14 @@ export const config = {
154
214
  feedbackTrackingEnabled: process.env.SQUISH_FEEDBACK_TRACKING !== 'false',
155
215
  feedbackEchoBonus: parseInt(process.env.SQUISH_FEEDBACK_ECHO_BONUS || '10'),
156
216
  feedbackFizzlePenalty: parseInt(process.env.SQUISH_FEEDBACK_FIZZLE_PENALTY || '5'),
217
+ // Scoring Weights (override defaults)
218
+ scoringWeights: {
219
+ recency: parseFloat(process.env.SQUISH_WEIGHT_RECENCY || '0.5'),
220
+ relevance: parseFloat(process.env.SQUISH_WEIGHT_RELEVANCE || '3'),
221
+ importance: parseFloat(process.env.SQUISH_WEIGHT_IMPORTANCE || '2'),
222
+ vectorSim: parseFloat(process.env.SQUISH_WEIGHT_VECTOR_SIM || '3'),
223
+ graphBoost: parseFloat(process.env.SQUISH_WEIGHT_GRAPH_BOOST || '1.5'),
224
+ },
157
225
  // Scheduler
158
226
  schedulerMode: (process.env.SQUISH_SCHEDULER_MODE || 'cron'),
159
227
  cronEnabled: process.env.SQUISH_CRON_ENABLED !== 'false',
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Claude Code Adapter Configuration
3
+ *
4
+ * Native Claude Code configuration for integrating Squish as MCP server.
5
+ * Usage: Add to ~/.claude.json or project .claude.json
6
+ */
7
+ import { AgentConfig } from '../types.js';
8
+ declare const ADAPTER_CONFIG: AgentConfig;
9
+ /**
10
+ * Register Claude Code adapter
11
+ */
12
+ export declare function registerClaudeCodeAdapter(): void;
13
+ /** Native config for .claude.json */
14
+ export declare const CLAUDE_CODE_CONFIG: {
15
+ mcpServers: {
16
+ squish: {
17
+ command: string;
18
+ args: string[];
19
+ env: {
20
+ NODE_ENV: string;
21
+ };
22
+ };
23
+ };
24
+ hooks: {};
25
+ };
26
+ /** Claude Code settings.json snippet */
27
+ export declare const CLAUDE_CODE_SETTINGS: {
28
+ mcpServers: {
29
+ squish: {
30
+ command: string;
31
+ args: string[];
32
+ env: {
33
+ NODE_ENV: string;
34
+ };
35
+ };
36
+ };
37
+ experimental: {
38
+ squish: {
39
+ autoCapture: boolean;
40
+ contextLimit: number;
41
+ };
42
+ };
43
+ };
44
+ export default ADAPTER_CONFIG;
45
+ //# sourceMappingURL=claude-code.d.ts.map
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Claude Code Adapter Configuration
3
+ *
4
+ * Native Claude Code configuration for integrating Squish as MCP server.
5
+ * Usage: Add to ~/.claude.json or project .claude.json
6
+ */
7
+ const ADAPTER_CONFIG = {
8
+ agentId: 'claude-code',
9
+ name: 'Claude Code',
10
+ type: 'claude-code',
11
+ mcp: {
12
+ command: 'node',
13
+ args: ['dist/core/commands/mcp-server.js'],
14
+ env: { NODE_ENV: 'production' }
15
+ },
16
+ hooks: {
17
+ // Claude Code hooks configuration - stored as JSON string in settings
18
+ },
19
+ settings: {
20
+ // Squish integration settings
21
+ squish: {
22
+ autoCapture: true,
23
+ captureTools: ['Read', 'Write', 'Edit', 'Bash'],
24
+ contextLimit: 5,
25
+ }
26
+ }
27
+ };
28
+ /**
29
+ * Register Claude Code adapter
30
+ */
31
+ export function registerClaudeCodeAdapter() {
32
+ const { registerAdapter } = require('../index.js');
33
+ const adapter = {
34
+ id: 'claude-code',
35
+ type: 'claude-code',
36
+ name: 'Claude Code',
37
+ version: 'latest',
38
+ getSessionContext: async (input) => {
39
+ const { getRecent, search } = await import('../../memory/memories.js');
40
+ const recent = await getRecent(input.project, input.mode === 'compact' ? 3 : 5);
41
+ const memories = recent.map((m, i) => `${i + 1}. [${m.type}] ${m.content?.substring(0, 100)}`).join('\n');
42
+ return {
43
+ mode: input.mode,
44
+ project: input.project,
45
+ memories,
46
+ count: recent.length,
47
+ };
48
+ },
49
+ recordObservation: async (input) => {
50
+ const { createLearning } = await import('../../ingestion/learnings.js');
51
+ // Extract simple string target, not object
52
+ const targetVal = input.toolInput?.filePath || input.toolInput?.command;
53
+ const targetStr = typeof targetVal === 'string' ? targetVal :
54
+ typeof targetVal === 'object' ? JSON.stringify(targetVal).substring(0, 50) :
55
+ 'unknown';
56
+ const memory = await createLearning({
57
+ type: 'insight', // Tool usage is an insight
58
+ content: `[${input.toolName}] ${JSON.stringify(input.toolInput).substring(0, 200)}`,
59
+ action: input.toolName,
60
+ target: targetStr,
61
+ project: input.project,
62
+ autoLink: false,
63
+ });
64
+ return {
65
+ memoryId: memory.id,
66
+ category: 'other',
67
+ content: `Recorded: ${input.toolName}`,
68
+ };
69
+ },
70
+ getTimeline: async (query, depth, limit) => {
71
+ const { getTimeline } = await require('../timeline.js');
72
+ return getTimeline(query, depth, limit);
73
+ },
74
+ shouldCaptureTool: (toolName) => {
75
+ const captureTools = ['Read', 'Write', 'Edit', 'Bash', 'grep', 'Glob', 'Task'];
76
+ return captureTools.includes(toolName);
77
+ },
78
+ getNativeConfig: () => ADAPTER_CONFIG,
79
+ };
80
+ registerAdapter(adapter);
81
+ console.error('[Adapters] Registered Claude Code adapter');
82
+ }
83
+ /** Native config for .claude.json */
84
+ export const CLAUDE_CODE_CONFIG = {
85
+ mcpServers: {
86
+ squish: {
87
+ command: 'node',
88
+ args: ['dist/core/commands/mcp-server.js'],
89
+ env: { NODE_ENV: 'production' }
90
+ }
91
+ },
92
+ hooks: {
93
+ // Hooks can be configured in settings.json
94
+ }
95
+ };
96
+ /** Claude Code settings.json snippet */
97
+ export const CLAUDE_CODE_SETTINGS = {
98
+ "mcpServers": {
99
+ "squish": {
100
+ "command": "node",
101
+ "args": ["dist/core/commands/mcp-server.js"],
102
+ "env": { "NODE_ENV": "production" }
103
+ }
104
+ },
105
+ "experimental": {
106
+ "squish": {
107
+ "autoCapture": true,
108
+ "contextLimit": 5
109
+ }
110
+ }
111
+ };
112
+ export default ADAPTER_CONFIG;
113
+ //# sourceMappingURL=claude-code.js.map
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Cursor Adapter Configuration
3
+ *
4
+ * Native Cursor configuration for integrating Squish as MCP server.
5
+ * Cursor uses .cursor/mcp.json or cursor.config.yaml format.
6
+ */
7
+ import { AgentConfig } from '../types.js';
8
+ declare const ADAPTER_CONFIG: AgentConfig;
9
+ /**
10
+ * Register Cursor adapter
11
+ */
12
+ export declare function registerCursorAdapter(): void;
13
+ /** Cursor mcp.json format */
14
+ export declare const CURSOR_MCP_CONFIG: {
15
+ mcpServers: {
16
+ squish: {
17
+ command: string;
18
+ args: string[];
19
+ env: {
20
+ NODE_ENV: string;
21
+ };
22
+ };
23
+ };
24
+ };
25
+ export default ADAPTER_CONFIG;
26
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Cursor Adapter Configuration
3
+ *
4
+ * Native Cursor configuration for integrating Squish as MCP server.
5
+ * Cursor uses .cursor/mcp.json or cursor.config.yaml format.
6
+ */
7
+ const ADAPTER_CONFIG = {
8
+ agentId: 'cursor',
9
+ name: 'Cursor',
10
+ type: 'cursor',
11
+ mcp: {
12
+ command: 'node',
13
+ args: ['dist/core/commands/mcp-server.js'],
14
+ env: { NODE_ENV: 'production' }
15
+ },
16
+ hooks: {},
17
+ settings: {
18
+ squish: {
19
+ autoCapture: true,
20
+ captureTools: ['Read', 'Write', 'Edit', 'Bash'],
21
+ contextLimit: 5,
22
+ }
23
+ }
24
+ };
25
+ /**
26
+ * Register Cursor adapter
27
+ */
28
+ export function registerCursorAdapter() {
29
+ const { registerAdapter } = require('../index.js');
30
+ const adapter = {
31
+ id: 'cursor',
32
+ type: 'cursor',
33
+ name: 'Cursor',
34
+ version: 'latest',
35
+ getSessionContext: async (input) => {
36
+ const { getRecent } = await import('../../memory/memories.js');
37
+ const recent = await getRecent(input.project, 5);
38
+ const memories = recent.map((m, i) => `${i + 1}. [${m.type}] ${m.content?.substring(0, 100)}`).join('\n');
39
+ return { mode: input.mode, project: input.project, memories, count: recent.length };
40
+ },
41
+ recordObservation: async (input) => {
42
+ const { createLearning } = await import('../../ingestion/learnings.js');
43
+ const memory = await createLearning({
44
+ type: 'insight',
45
+ content: `[${input.toolName}] ${JSON.stringify(input.toolInput).substring(0, 200)}`,
46
+ action: input.toolName,
47
+ project: input.project,
48
+ autoLink: false,
49
+ });
50
+ return { memoryId: memory.id, category: 'other', content: `Recorded: ${input.toolName}` };
51
+ },
52
+ getTimeline: async (query, depth, limit) => {
53
+ const { getTimeline } = await require('../timeline.js');
54
+ return getTimeline(query, depth, limit);
55
+ },
56
+ shouldCaptureTool: (toolName) => {
57
+ return ['Read', 'Write', 'Edit', 'Bash', 'grep', 'Glob', 'Task'].includes(toolName);
58
+ },
59
+ getNativeConfig: () => ADAPTER_CONFIG,
60
+ };
61
+ registerAdapter(adapter);
62
+ }
63
+ /** Cursor mcp.json format */
64
+ export const CURSOR_MCP_CONFIG = {
65
+ "mcpServers": {
66
+ "squish": {
67
+ "command": "node",
68
+ "args": ["dist/core/commands/mcp-server.js"],
69
+ "env": { "NODE_ENV": "production" }
70
+ }
71
+ }
72
+ };
73
+ export default ADAPTER_CONFIG;
74
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1,23 @@
1
+ /**
2
+ * OpenCode Adapter Configuration
3
+ *
4
+ * Native OpenCode configuration for integrating Squish as MCP server.
5
+ * OpenCode uses similar MCP configuration to Claude Code.
6
+ */
7
+ import { AgentConfig } from '../types.js';
8
+ declare const ADAPTER_CONFIG: AgentConfig;
9
+ /**
10
+ * Register OpenCode adapter
11
+ */
12
+ export declare function registerOpenCodeAdapter(): void;
13
+ /** OpenCode settings.json format */
14
+ export declare const OPENCODE_SETTINGS: {
15
+ mcpServers: {
16
+ squish: {
17
+ command: string;
18
+ args: string[];
19
+ };
20
+ };
21
+ };
22
+ export default ADAPTER_CONFIG;
23
+ //# sourceMappingURL=opencode.d.ts.map
@@ -0,0 +1,73 @@
1
+ /**
2
+ * OpenCode Adapter Configuration
3
+ *
4
+ * Native OpenCode configuration for integrating Squish as MCP server.
5
+ * OpenCode uses similar MCP configuration to Claude Code.
6
+ */
7
+ const ADAPTER_CONFIG = {
8
+ agentId: 'opencode',
9
+ name: 'OpenCode',
10
+ type: 'opencode',
11
+ mcp: {
12
+ command: 'node',
13
+ args: ['dist/core/commands/mcp-server.js'],
14
+ env: { NODE_ENV: 'production' }
15
+ },
16
+ hooks: {},
17
+ settings: {
18
+ squish: {
19
+ autoCapture: true,
20
+ captureTools: ['Read', 'Write', 'Edit', 'Bash'],
21
+ contextLimit: 5,
22
+ }
23
+ }
24
+ };
25
+ /**
26
+ * Register OpenCode adapter
27
+ */
28
+ export function registerOpenCodeAdapter() {
29
+ const { registerAdapter } = require('../index.js');
30
+ const adapter = {
31
+ id: 'opencode',
32
+ type: 'opencode',
33
+ name: 'OpenCode',
34
+ version: 'latest',
35
+ getSessionContext: async (input) => {
36
+ const { getRecent } = await import('../../memory/memories.js');
37
+ const recent = await getRecent(input.project, 5);
38
+ const memories = recent.map((m, i) => `${i + 1}. [${m.type}] ${m.content?.substring(0, 100)}`).join('\n');
39
+ return { mode: input.mode, project: input.project, memories, count: recent.length };
40
+ },
41
+ recordObservation: async (input) => {
42
+ const { createLearning } = await import('../../ingestion/learnings.js');
43
+ const memory = await createLearning({
44
+ type: 'insight',
45
+ content: `[${input.toolName}] ${JSON.stringify(input.toolInput).substring(0, 200)}`,
46
+ action: input.toolName,
47
+ project: input.project,
48
+ autoLink: false,
49
+ });
50
+ return { memoryId: memory.id, category: 'other', content: `Recorded: ${input.toolName}` };
51
+ },
52
+ getTimeline: async (query, depth, limit) => {
53
+ const { getTimeline } = await require('../timeline.js');
54
+ return getTimeline(query, depth, limit);
55
+ },
56
+ shouldCaptureTool: (toolName) => {
57
+ return ['Read', 'Write', 'Edit', 'Bash', 'grep', 'Glob', 'Task'].includes(toolName);
58
+ },
59
+ getNativeConfig: () => ADAPTER_CONFIG,
60
+ };
61
+ registerAdapter(adapter);
62
+ }
63
+ /** OpenCode settings.json format */
64
+ export const OPENCODE_SETTINGS = {
65
+ "mcpServers": {
66
+ "squish": {
67
+ "command": "node",
68
+ "args": ["dist/core/commands/mcp-server.js"]
69
+ }
70
+ }
71
+ };
72
+ export default ADAPTER_CONFIG;
73
+ //# sourceMappingURL=opencode.js.map
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Windsurf Adapter Configuration
3
+ *
4
+ * Native Windsurf configuration for integrating Squish as MCP server.
5
+ * Windsurf uses .windsurf/config.json format.
6
+ */
7
+ import { AgentConfig } from '../types.js';
8
+ declare const ADAPTER_CONFIG: AgentConfig;
9
+ /**
10
+ * Register Windsurf adapter
11
+ */
12
+ export declare function registerWindsurfAdapter(): void;
13
+ /** Windsurf config.json format */
14
+ export declare const WINDSURF_CONFIG: {
15
+ mcpServers: {
16
+ squish: {
17
+ command: string;
18
+ args: string[];
19
+ env: {
20
+ NODE_ENV: string;
21
+ };
22
+ };
23
+ };
24
+ };
25
+ export default ADAPTER_CONFIG;
26
+ //# sourceMappingURL=windsurf.d.ts.map
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Windsurf Adapter Configuration
3
+ *
4
+ * Native Windsurf configuration for integrating Squish as MCP server.
5
+ * Windsurf uses .windsurf/config.json format.
6
+ */
7
+ const ADAPTER_CONFIG = {
8
+ agentId: 'windsurf',
9
+ name: 'Windsurf',
10
+ type: 'windsurf',
11
+ mcp: {
12
+ command: 'node',
13
+ args: ['dist/core/commands/mcp-server.js'],
14
+ env: { NODE_ENV: 'production' }
15
+ },
16
+ hooks: {},
17
+ settings: {
18
+ squish: {
19
+ autoCapture: true,
20
+ captureTools: ['Read', 'Write', 'Edit', 'Bash'],
21
+ contextLimit: 5,
22
+ }
23
+ }
24
+ };
25
+ /**
26
+ * Register Windsurf adapter
27
+ */
28
+ export function registerWindsurfAdapter() {
29
+ const { registerAdapter } = require('../index.js');
30
+ const adapter = {
31
+ id: 'windsurf',
32
+ type: 'windsurf',
33
+ name: 'Windsurf',
34
+ version: 'latest',
35
+ getSessionContext: async (input) => {
36
+ const { getRecent } = await import('../../memory/memories.js');
37
+ const recent = await getRecent(input.project, 5);
38
+ const memories = recent.map((m, i) => `${i + 1}. [${m.type}] ${m.content?.substring(0, 100)}`).join('\n');
39
+ return { mode: input.mode, project: input.project, memories, count: recent.length };
40
+ },
41
+ recordObservation: async (input) => {
42
+ const { createLearning } = await import('../../ingestion/learnings.js');
43
+ const memory = await createLearning({
44
+ type: 'insight',
45
+ content: `[${input.toolName}] ${JSON.stringify(input.toolInput).substring(0, 200)}`,
46
+ action: input.toolName,
47
+ project: input.project,
48
+ autoLink: false,
49
+ });
50
+ return { memoryId: memory.id, category: 'other', content: `Recorded: ${input.toolName}` };
51
+ },
52
+ getTimeline: async (query, depth, limit) => {
53
+ const { getTimeline } = await require('../timeline.js');
54
+ return getTimeline(query, depth, limit);
55
+ },
56
+ shouldCaptureTool: (toolName) => {
57
+ return ['Read', 'Write', 'Edit', 'Bash', 'grep', 'Glob', 'Task'].includes(toolName);
58
+ },
59
+ getNativeConfig: () => ADAPTER_CONFIG,
60
+ };
61
+ registerAdapter(adapter);
62
+ }
63
+ /** Windsurf config.json format */
64
+ export const WINDSURF_CONFIG = {
65
+ "mcpServers": {
66
+ "squish": {
67
+ "command": "node",
68
+ "args": ["dist/core/commands/mcp-server.js"],
69
+ "env": { "NODE_ENV": "production" }
70
+ }
71
+ }
72
+ };
73
+ export default ADAPTER_CONFIG;
74
+ //# sourceMappingURL=windsurf.js.map