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.
- package/.env.example +130 -0
- package/CHANGELOG.md +55 -0
- package/README.md +150 -287
- package/config/hooks/claude-code-hooks.json +39 -0
- package/config/hooks/cursor-hooks.json +30 -0
- package/config/hooks/opencode-hooks.json +30 -0
- package/config/hooks/windsurf-hooks.json +30 -0
- package/config/mcp-mode-semantics.json +23 -21
- package/config/plugin-manifest.json +101 -152
- package/{plugin.json → config/plugin.json} +2 -2
- package/config/settings.json +52 -51
- package/{commands → core/commands}/init.md +39 -39
- package/dist/config.d.ts +28 -4
- package/dist/config.js +97 -29
- package/dist/core/adapters/config/claude-code.d.ts +45 -0
- package/dist/core/adapters/config/claude-code.js +113 -0
- package/dist/core/adapters/config/cursor.d.ts +26 -0
- package/dist/core/adapters/config/cursor.js +74 -0
- package/dist/core/adapters/config/opencode.d.ts +23 -0
- package/dist/core/adapters/config/opencode.js +73 -0
- package/dist/core/adapters/config/windsurf.d.ts +26 -0
- package/dist/core/adapters/config/windsurf.js +74 -0
- package/dist/core/adapters/index.d.ts +45 -0
- package/dist/core/adapters/index.js +84 -0
- package/dist/core/adapters/scripts/install-adapter.d.ts +19 -0
- package/dist/core/adapters/scripts/install-adapter.js +149 -0
- package/dist/core/adapters/timeline.d.ts +23 -0
- package/dist/core/adapters/timeline.js +88 -0
- package/dist/core/adapters/types.d.ts +157 -0
- package/dist/core/adapters/types.js +50 -0
- package/dist/{algorithms → core/algorithms}/analytics/token-estimator.d.ts +1 -1
- package/dist/{algorithms → core/algorithms}/analytics/token-estimator.js +3 -3
- package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.d.ts +1 -1
- package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.js +1 -1
- package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.d.ts +1 -1
- package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.js +7 -10
- package/dist/{algorithms → core/algorithms}/handlers/approve-merge.js +4 -4
- package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/get-stats.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/list-proposals.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/preview-merge.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/reject-merge.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.js +3 -3
- package/dist/core/algorithms/index.d.ts +21 -0
- package/dist/core/algorithms/index.js +26 -0
- package/dist/core/algorithms/operations/cache-maintenance.d.ts +12 -0
- package/dist/core/algorithms/operations/cache-maintenance.js +157 -0
- package/dist/{algorithms → core/algorithms}/safety/safety-checks.d.ts +1 -1
- package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.d.ts +19 -1
- package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.js +74 -123
- package/dist/core/algorithms/types.d.ts +133 -0
- package/dist/core/algorithms/types.js +5 -0
- package/dist/core/associations.d.ts +1 -2
- package/dist/core/associations.js +1 -2
- package/dist/core/autosave.d.ts +19 -0
- package/dist/core/autosave.js +16 -0
- package/dist/{commands → core/commands}/managed-sync.js +5 -5
- package/dist/core/commands/mcp-server.js +739 -0
- package/dist/core/context/agent-context.d.ts +106 -0
- package/dist/core/context/agent-context.js +274 -0
- package/dist/core/{context-paging.d.ts → context/context-paging.d.ts} +2 -12
- package/dist/core/{context-paging.js → context/context-paging.js} +19 -39
- package/dist/core/context/context-window.d.ts +40 -0
- package/dist/core/context/context-window.js +177 -0
- package/dist/core/context/context.js +22 -0
- package/dist/core/embeddings.d.ts +1 -1
- package/dist/core/embeddings.js +54 -2
- package/dist/core/error-handling.d.ts +63 -0
- package/dist/core/error-handling.js +173 -0
- package/dist/core/external-folder/index.d.ts +102 -0
- package/dist/core/external-folder/index.js +294 -0
- package/dist/core/hooks/agent-hooks.d.ts +74 -0
- package/dist/core/hooks/agent-hooks.js +244 -0
- package/dist/core/hooks/auto-tagger.d.ts +19 -0
- package/dist/core/hooks/auto-tagger.js +155 -0
- package/dist/core/hooks/capture-filter.d.ts +41 -0
- package/dist/core/hooks/capture-filter.js +128 -0
- package/dist/core/index.d.ts +6 -6
- package/dist/core/index.js +6 -6
- package/dist/core/{agent-memory.js → ingestion/agent-memory.js} +5 -7
- package/dist/core/{core-memory.js → ingestion/core-memory.js} +4 -4
- package/dist/core/ingestion/learnings.d.ts +57 -0
- package/dist/core/ingestion/learnings.js +202 -0
- package/dist/core/lib/db-client.d.ts +114 -0
- package/dist/core/lib/db-client.js +130 -0
- package/dist/core/lib/schemas.d.ts +129 -0
- package/dist/core/lib/schemas.js +87 -0
- package/dist/core/{utils.d.ts → lib/utils.d.ts} +1 -0
- package/dist/core/{utils.js → lib/utils.js} +31 -15
- package/dist/core/lib/validation.d.ts +38 -0
- package/dist/core/lib/validation.js +151 -0
- package/dist/core/lifecycle.d.ts +7 -0
- package/dist/core/lifecycle.js +140 -20
- package/dist/core/local-embeddings.d.ts +6 -1
- package/dist/core/local-embeddings.js +6 -15
- package/dist/core/logger.js +7 -1
- package/dist/core/mcp/tools.js +35 -3
- package/dist/core/memory/categorizer.js +1 -0
- package/dist/core/memory/conflict-detector.js +1 -1
- package/dist/core/memory/consolidation.d.ts +1 -10
- package/dist/core/memory/consolidation.js +2 -11
- package/dist/core/memory/context-collector.js +1 -1
- package/dist/core/memory/edit-workflow.js +1 -1
- package/dist/core/memory/entity-resolver.js +7 -7
- package/dist/core/memory/fact-extractor.js +12 -12
- package/dist/core/memory/feedback-tracker.js +1 -1
- package/dist/core/memory/hooks.d.ts +88 -0
- package/dist/core/memory/hooks.js +174 -0
- package/dist/core/memory/hybrid-retrieval.js +2 -2
- package/dist/core/memory/hybrid-search.d.ts +1 -6
- package/dist/core/memory/hybrid-search.js +70 -84
- package/dist/core/memory/importance.d.ts +8 -13
- package/dist/core/memory/importance.js +47 -74
- package/dist/core/memory/loader.d.ts +31 -0
- package/dist/core/memory/loader.js +141 -0
- package/dist/core/memory/markdown/markdown-storage.d.ts +72 -0
- package/dist/core/memory/markdown/markdown-storage.js +243 -0
- package/dist/core/memory/memories.d.ts +12 -4
- package/dist/core/memory/memories.js +192 -180
- package/dist/core/memory/memory-lifecycle.d.ts +8 -0
- package/dist/core/memory/memory-lifecycle.js +55 -0
- package/dist/core/memory/migrate.d.ts +21 -0
- package/dist/core/memory/migrate.js +134 -0
- package/dist/core/memory/normalization.d.ts +22 -0
- package/dist/core/memory/normalization.js +26 -0
- package/dist/core/memory/progressive-disclosure.js +1 -1
- package/dist/core/memory/query-rewriter.js +9 -9
- package/dist/core/memory/serialization.d.ts +4 -0
- package/dist/core/memory/serialization.js +49 -0
- package/dist/core/memory/stats.d.ts +5 -0
- package/dist/core/memory/stats.js +63 -12
- package/dist/core/memory/temporal-facts.js +21 -0
- package/dist/core/memory/write-gate.js +1 -1
- package/dist/core/obsidian-vault.d.ts +30 -0
- package/dist/core/obsidian-vault.js +94 -0
- package/dist/core/places/index.d.ts +14 -0
- package/dist/core/places/index.js +14 -0
- package/dist/core/places/memory-places.d.ts +68 -0
- package/dist/core/places/memory-places.js +261 -0
- package/dist/core/places/places.d.ts +88 -0
- package/dist/core/places/places.js +314 -0
- package/dist/core/places/rules.d.ts +74 -0
- package/dist/core/places/rules.js +240 -0
- package/dist/core/places/walking.d.ts +56 -0
- package/dist/core/places/walking.js +121 -0
- package/dist/core/projects.d.ts +5 -0
- package/dist/core/projects.js +39 -18
- package/dist/core/responses.d.ts +96 -0
- package/dist/core/responses.js +122 -0
- package/dist/core/scheduler/cron-scheduler.js +29 -7
- package/dist/core/scheduler/index.d.ts +1 -1
- package/dist/core/scheduler/index.js +1 -1
- package/dist/core/scheduler/job-runner.js +1 -1
- package/dist/core/search/conversations.js +40 -42
- package/dist/core/search/entities.js +6 -9
- package/dist/core/search/graph-boost.d.ts +7 -0
- package/dist/core/search/graph-boost.js +23 -0
- package/dist/core/search/qmd-search.js +4 -4
- package/dist/core/security/encrypt.d.ts +6 -0
- package/dist/core/security/encrypt.js +47 -0
- package/dist/core/{governance.d.ts → security/governance.d.ts} +6 -1
- package/dist/core/security/governance.js +79 -0
- package/dist/core/session/auto-load.js +6 -6
- package/dist/core/session/index.d.ts +1 -1
- package/dist/core/session/index.js +1 -1
- package/dist/core/session/self-iteration-job.d.ts +20 -0
- package/dist/core/session/self-iteration-job.js +282 -0
- package/dist/core/session/session-hooks.d.ts +18 -0
- package/dist/core/session/session-hooks.js +58 -0
- package/dist/core/session-hooks/self-iteration-job.js +35 -35
- package/dist/core/{cache.js → storage/cache.js} +2 -2
- package/dist/core/sync/qmd-sync.d.ts +1 -13
- package/dist/core/sync/qmd-sync.js +1 -13
- package/dist/core/toon.d.ts +43 -0
- package/dist/core/toon.js +160 -0
- package/dist/core/utils/memory-operations.js +1 -1
- package/dist/core/utils/vector-operations.d.ts +71 -0
- package/dist/core/utils/vector-operations.js +129 -0
- package/dist/db/adapter.d.ts +3 -3
- package/dist/db/adapter.js +99 -88
- package/dist/db/bootstrap.js +820 -522
- package/dist/{drizzle → db/drizzle}/schema-sqlite.d.ts +74 -25
- package/dist/{drizzle → db/drizzle}/schema-sqlite.js +91 -24
- package/dist/{drizzle → db/drizzle}/schema.d.ts +79 -32
- package/dist/{drizzle → db/drizzle}/schema.js +106 -35
- package/dist/db/drizzle.config.d.ts +3 -0
- package/dist/db/drizzle.config.js +12 -0
- package/dist/db/index.d.ts +1 -5
- package/dist/db/index.js +51 -8
- package/dist/db/neon.d.ts +8 -0
- package/dist/db/neon.js +20 -0
- package/dist/db/schema/index.d.ts +40 -0
- package/dist/db/schema/index.js +105 -0
- package/dist/db/schema/tables/context-sessions.d.ts +9 -0
- package/dist/db/schema/tables/context-sessions.js +37 -0
- package/dist/db/schema/tables/conversations.d.ts +9 -0
- package/dist/db/schema/tables/conversations.js +47 -0
- package/dist/db/schema/tables/core-memory.d.ts +9 -0
- package/dist/db/schema/tables/core-memory.js +41 -0
- package/dist/db/schema/tables/entities.d.ts +9 -0
- package/dist/db/schema/tables/entities.js +39 -0
- package/dist/db/schema/tables/entity-relations.d.ts +9 -0
- package/dist/db/schema/tables/entity-relations.js +31 -0
- package/dist/db/schema/tables/learnings.d.ts +9 -0
- package/dist/db/schema/tables/learnings.js +66 -0
- package/dist/db/schema/tables/memories.d.ts +9 -0
- package/dist/db/schema/tables/memories.js +161 -0
- package/dist/db/schema/tables/memory-associations.d.ts +9 -0
- package/dist/db/schema/tables/memory-associations.js +39 -0
- package/dist/db/schema/tables/memory-hash-cache.d.ts +9 -0
- package/dist/db/schema/tables/memory-hash-cache.js +29 -0
- package/dist/db/schema/tables/memory-merge-history.d.ts +9 -0
- package/dist/db/schema/tables/memory-merge-history.js +33 -0
- package/dist/db/schema/tables/memory-merge-proposals.d.ts +9 -0
- package/dist/db/schema/tables/memory-merge-proposals.js +39 -0
- package/dist/db/schema/tables/messages.d.ts +9 -0
- package/dist/db/schema/tables/messages.js +41 -0
- package/dist/db/schema/tables/namespaces.d.ts +9 -0
- package/dist/db/schema/tables/namespaces.js +37 -0
- package/dist/db/schema/tables/projects.d.ts +9 -0
- package/dist/db/schema/tables/projects.js +31 -0
- package/dist/db/schema/tables/users.d.ts +9 -0
- package/dist/db/schema/tables/users.js +27 -0
- package/dist/db/schema.d.ts +1 -1
- package/dist/db/schema.js +2 -2
- package/dist/db/supabase.d.ts +9 -0
- package/dist/db/supabase.js +24 -0
- package/dist/index.d.ts +2 -14
- package/dist/index.js +1320 -640
- package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
- package/dist/webui/server.d.ts +5 -0
- package/dist/{api/web/web.js → webui/server.js} +511 -508
- package/generated/mcp/manifest.json +1 -1
- package/{.mcp.json → mcp.json.example} +1 -1
- package/package.json +159 -181
- package/scripts/README.md +60 -0
- package/scripts/copy-runtime-assets.mjs +26 -0
- package/scripts/generate-mcp.mjs +264 -264
- package/scripts/github-release.sh +4 -4
- package/scripts/install-claude-code.sh +85 -0
- package/scripts/install-cursor.sh +56 -0
- package/scripts/install-hooks.sh +73 -0
- package/scripts/install-interactive.mjs +357 -677
- package/scripts/install-opencode.sh +75 -0
- package/scripts/install-windsurf.sh +67 -0
- package/skills/squish-memory/SKILL.md +104 -114
- package/skills/squish-memory/{install.mjs → scripts/install.mjs} +2 -2
- package/skills/squish-memory/{install.sh → scripts/install.sh} +2 -2
- package/skills/squish-memory/write_skill.js +2 -0
- package/.claude-plugin/marketplace.json +0 -20
- package/.claude-plugin/plugin.json +0 -32
- package/.env.mcp.example +0 -60
- package/QUICK-START.md +0 -71
- package/bin/squish-add.mjs +0 -32
- package/bin/squish-rm.mjs +0 -21
- package/commands/observe.md +0 -5
- package/dist/api/web/index.d.ts +0 -3
- package/dist/api/web/index.js +0 -4
- package/dist/api/web/web-server.d.ts +0 -3
- package/dist/api/web/web-server.js +0 -6
- package/dist/api/web/web.d.ts +0 -4
- package/dist/commands/mcp-server.js +0 -393
- package/dist/core/context.js +0 -24
- package/dist/core/governance.js +0 -64
- package/dist/core/observations.d.ts +0 -26
- package/dist/core/observations.js +0 -110
- package/dist/core/requirements.d.ts +0 -20
- package/dist/core/requirements.js +0 -35
- package/hooks/hooks.json +0 -52
- package/hooks/post-tool-use.js +0 -26
- package/hooks/session-end.js +0 -28
- package/hooks/session-start.js +0 -33
- package/hooks/user-prompt-submit.js +0 -26
- package/hooks/utils.js +0 -153
- package/npx-installer.js +0 -208
- package/packages/plugin-claude-code/README.md +0 -73
- package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +0 -35
- package/packages/plugin-claude-code/dist/plugin-wrapper.js +0 -191
- package/packages/plugin-claude-code/package.json +0 -31
- package/packages/plugin-openclaw/README.md +0 -70
- package/packages/plugin-openclaw/dist/index.d.ts +0 -49
- package/packages/plugin-openclaw/dist/index.js +0 -262
- package/packages/plugin-openclaw/openclaw.plugin.json +0 -94
- package/packages/plugin-openclaw/package.json +0 -31
- package/packages/plugin-opencode/install.mjs +0 -217
- package/packages/plugin-opencode/package.json +0 -21
- package/scripts/db/check-db.mjs +0 -88
- package/scripts/db/fix-all-columns.mjs +0 -52
- package/scripts/db/fix-schema-all.mjs +0 -55
- package/scripts/db/fix-schema-full.mjs +0 -46
- package/scripts/db/fix-schema.mjs +0 -38
- package/scripts/db/init-db.mjs +0 -13
- package/scripts/db/recreate-db.mjs +0 -14
- package/scripts/install-mcp.mjs +0 -116
- package/scripts/install-web.sh +0 -120
- package/scripts/install.mjs +0 -340
- package/scripts/openclaw-bootstrap.mjs +0 -127
- package/scripts/package-release.sh +0 -71
- package/scripts/test/test-all-systems.mjs +0 -139
- package/scripts/test/test-memory-system.mjs +0 -139
- package/scripts/test/test-v0.5.0.mjs +0 -210
- package/skills/memory-guide/SKILL.md +0 -332
- package/skills/squish-cli/SKILL.md +0 -240
- package/skills/squish-mcp/SKILL.md +0 -355
- package/skills/squish-memory/claude-desktop.json +0 -12
- package/skills/squish-memory/openclaw.json +0 -13
- package/skills/squish-memory/opencode.json +0 -14
- package/skills/squish-memory/skill.json +0 -32
- /package/{commands → core/commands}/context-paging.md +0 -0
- /package/{commands → core/commands}/context-status.md +0 -0
- /package/{commands → core/commands}/context.md +0 -0
- /package/{commands → core/commands}/core-memory.md +0 -0
- /package/{commands → core/commands}/health.md +0 -0
- /package/{commands → core/commands}/merge.md +0 -0
- /package/{commands → core/commands}/recall.md +0 -0
- /package/{commands → core/commands}/remember.md +0 -0
- /package/{commands → core/commands}/search.md +0 -0
- /package/dist/{algorithms → core/algorithms}/detection/hash-filters.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/detection/hash-filters.js +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/approve-merge.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/get-stats.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/list-proposals.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/preview-merge.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/reject-merge.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/safety/safety-checks.js +0 -0
- /package/dist/{algorithms → core/algorithms}/utils/response-builder.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/utils/response-builder.js +0 -0
- /package/dist/{commands → core/commands}/managed-sync.d.ts +0 -0
- /package/dist/{commands → core/commands}/mcp-server.d.ts +0 -0
- /package/dist/core/{context.d.ts → context/context.d.ts} +0 -0
- /package/dist/core/{agent-memory.d.ts → ingestion/agent-memory.d.ts} +0 -0
- /package/dist/core/{core-memory.d.ts → ingestion/core-memory.d.ts} +0 -0
- /package/dist/core/{privacy.d.ts → security/privacy.d.ts} +0 -0
- /package/dist/core/{privacy.js → security/privacy.js} +0 -0
- /package/dist/core/{secret-detector.d.ts → security/secret-detector.d.ts} +0 -0
- /package/dist/core/{secret-detector.js → security/secret-detector.js} +0 -0
- /package/dist/core/{cache.d.ts → storage/cache.d.ts} +0 -0
- /package/dist/core/{database.d.ts → storage/database.d.ts} +0 -0
- /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
|
-
|
|
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 (
|
|
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', '
|
|
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
|
-
//
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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
|