squish-memory 0.9.3 → 1.0.1
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.mcp.example +14 -11
- package/CHANGELOG.md +68 -0
- package/README.md +82 -9
- package/bin/squish-add.mjs +32 -0
- package/bin/squish-rm.mjs +21 -0
- package/config/plugin-manifest.json +152 -0
- package/config/plugin-manifest.schema.json +244 -0
- package/config/settings.json +51 -0
- package/dist/algorithms/{merge/analytics → analytics}/token-estimator.d.ts +1 -1
- package/dist/algorithms/analytics/token-estimator.d.ts.map +1 -0
- package/dist/algorithms/{merge/analytics → analytics}/token-estimator.js +3 -3
- package/dist/algorithms/analytics/token-estimator.js.map +1 -0
- package/dist/algorithms/detection/hash-filters.d.ts.map +1 -0
- package/dist/algorithms/detection/hash-filters.js.map +1 -0
- package/dist/algorithms/{merge/detection → detection}/semantic-ranker.d.ts +1 -1
- package/dist/algorithms/detection/semantic-ranker.d.ts.map +1 -0
- package/dist/algorithms/{merge/detection → detection}/semantic-ranker.js +1 -1
- package/dist/algorithms/detection/semantic-ranker.js.map +1 -0
- package/dist/algorithms/{merge/detection → detection}/two-stage-detector.d.ts +1 -1
- package/dist/algorithms/detection/two-stage-detector.d.ts.map +1 -0
- package/dist/algorithms/{merge/detection → detection}/two-stage-detector.js +4 -4
- package/dist/algorithms/detection/two-stage-detector.js.map +1 -0
- package/dist/algorithms/handlers/approve-merge.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/approve-merge.js +4 -4
- package/dist/algorithms/handlers/approve-merge.js.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/detect-duplicates.d.ts +1 -1
- package/dist/algorithms/handlers/detect-duplicates.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/detect-duplicates.js +55 -75
- package/dist/algorithms/handlers/detect-duplicates.js.map +1 -0
- package/dist/algorithms/handlers/get-stats.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/get-stats.js +3 -3
- package/dist/algorithms/handlers/get-stats.js.map +1 -0
- package/dist/algorithms/handlers/list-proposals.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/list-proposals.js +3 -3
- package/dist/algorithms/handlers/list-proposals.js.map +1 -0
- package/dist/algorithms/handlers/preview-merge.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/preview-merge.js +3 -3
- package/dist/algorithms/handlers/preview-merge.js.map +1 -0
- package/dist/algorithms/handlers/reject-merge.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/reject-merge.js +3 -3
- package/dist/algorithms/handlers/reject-merge.js.map +1 -0
- package/dist/algorithms/handlers/reverse-merge.d.ts.map +1 -0
- package/dist/algorithms/{merge/handlers → handlers}/reverse-merge.js +3 -3
- package/dist/algorithms/handlers/reverse-merge.js.map +1 -0
- package/dist/algorithms/{merge/safety → safety}/safety-checks.d.ts +1 -1
- package/dist/algorithms/safety/safety-checks.d.ts.map +1 -0
- package/dist/algorithms/safety/safety-checks.js +179 -0
- package/dist/algorithms/safety/safety-checks.js.map +1 -0
- package/dist/algorithms/{merge/strategies → strategies}/merge-strategies.d.ts +1 -1
- package/dist/algorithms/strategies/merge-strategies.d.ts.map +1 -0
- package/dist/algorithms/strategies/merge-strategies.js.map +1 -0
- package/dist/algorithms/utils/response-builder.d.ts +28 -0
- package/dist/algorithms/utils/response-builder.d.ts.map +1 -0
- package/dist/algorithms/utils/response-builder.js +37 -0
- package/dist/algorithms/utils/response-builder.js.map +1 -0
- package/dist/api/web/web.d.ts.map +1 -1
- package/dist/api/web/web.js +452 -472
- package/dist/api/web/web.js.map +1 -1
- package/dist/commands/mcp-server.js +7 -3
- package/dist/commands/mcp-server.js.map +1 -1
- package/dist/config.d.ts +10 -10
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +102 -55
- package/dist/config.js.map +1 -1
- package/dist/core/associations.js +2 -2
- package/dist/core/associations.js.map +1 -1
- package/dist/core/embeddings.d.ts +1 -1
- package/dist/core/embeddings.d.ts.map +1 -1
- package/dist/core/embeddings.js +10 -67
- package/dist/core/embeddings.js.map +1 -1
- package/dist/core/layers/generator.d.ts +25 -0
- package/dist/core/layers/generator.d.ts.map +1 -0
- package/dist/core/layers/generator.js +76 -0
- package/dist/core/layers/generator.js.map +1 -0
- package/dist/core/local-embeddings.d.ts +3 -11
- package/dist/core/local-embeddings.d.ts.map +1 -1
- package/dist/core/local-embeddings.js +2 -76
- package/dist/core/local-embeddings.js.map +1 -1
- package/dist/core/mcp/tools.d.ts.map +1 -1
- package/dist/core/mcp/tools.js +71 -0
- package/dist/core/mcp/tools.js.map +1 -1
- package/dist/core/memory/context-collector.d.ts.map +1 -1
- package/dist/core/memory/context-collector.js +3 -2
- package/dist/core/memory/context-collector.js.map +1 -1
- package/dist/core/memory/feedback-tracker.d.ts.map +1 -1
- package/dist/core/memory/feedback-tracker.js +10 -6
- package/dist/core/memory/feedback-tracker.js.map +1 -1
- package/dist/core/memory/hybrid-retrieval.d.ts.map +1 -1
- package/dist/core/memory/hybrid-retrieval.js +49 -1
- package/dist/core/memory/hybrid-retrieval.js.map +1 -1
- package/dist/core/memory/hybrid-search.d.ts.map +1 -1
- package/dist/core/memory/hybrid-search.js +32 -39
- package/dist/core/memory/hybrid-search.js.map +1 -1
- package/dist/core/memory/memories.d.ts.map +1 -1
- package/dist/core/memory/memories.js +1 -7
- package/dist/core/memory/memories.js.map +1 -1
- package/dist/core/memory/progressive-disclosure.d.ts.map +1 -1
- package/dist/core/memory/progressive-disclosure.js.map +1 -1
- package/dist/core/memory/query-rewriter.js +9 -9
- package/dist/core/memory/stats.js +5 -5
- package/dist/core/namespaces/index.d.ts +71 -0
- package/dist/core/namespaces/index.d.ts.map +1 -0
- package/dist/core/namespaces/index.js +305 -0
- package/dist/core/namespaces/index.js.map +1 -0
- package/dist/core/namespaces/uri-parser.d.ts +31 -0
- package/dist/core/namespaces/uri-parser.d.ts.map +1 -0
- package/dist/core/namespaces/uri-parser.js +74 -0
- package/dist/core/namespaces/uri-parser.js.map +1 -0
- package/dist/core/observations.d.ts.map +1 -1
- package/dist/core/observations.js +3 -12
- package/dist/core/observations.js.map +1 -1
- package/dist/core/projects.d.ts.map +1 -1
- package/dist/core/projects.js +0 -12
- package/dist/core/projects.js.map +1 -1
- package/dist/core/scheduler/cron-scheduler.d.ts.map +1 -1
- package/dist/core/scheduler/cron-scheduler.js +26 -7
- package/dist/core/scheduler/cron-scheduler.js.map +1 -1
- package/dist/core/scheduler/job-runner.js +8 -5
- package/dist/core/scheduler/job-runner.js.map +1 -1
- package/dist/core/search/conversations.js +33 -33
- package/dist/core/session-hooks/self-iteration-job.d.ts +20 -0
- package/dist/core/session-hooks/self-iteration-job.d.ts.map +1 -0
- package/dist/core/session-hooks/self-iteration-job.js +282 -0
- package/dist/core/session-hooks/self-iteration-job.js.map +1 -0
- package/dist/core/session-hooks/session-hooks.d.ts +18 -0
- package/dist/core/session-hooks/session-hooks.d.ts.map +1 -0
- package/dist/core/session-hooks/session-hooks.js +58 -0
- package/dist/core/session-hooks/session-hooks.js.map +1 -0
- package/dist/core/tracing/collector.d.ts +111 -0
- package/dist/core/tracing/collector.d.ts.map +1 -0
- package/dist/core/tracing/collector.js +350 -0
- package/dist/core/tracing/collector.js.map +1 -0
- package/dist/core/tracing/visualizer.d.ts +32 -0
- package/dist/core/tracing/visualizer.d.ts.map +1 -0
- package/dist/core/tracing/visualizer.js +165 -0
- package/dist/core/tracing/visualizer.js.map +1 -0
- package/dist/db/adapter.d.ts +6 -1
- package/dist/db/adapter.d.ts.map +1 -1
- package/dist/db/adapter.js +54 -126
- package/dist/db/adapter.js.map +1 -1
- package/dist/db/bootstrap.js +477 -477
- package/dist/db/index.d.ts +5 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/drizzle/schema-sqlite.d.ts +384 -0
- package/dist/drizzle/schema-sqlite.d.ts.map +1 -1
- package/dist/drizzle/schema-sqlite.js +65 -0
- package/dist/drizzle/schema-sqlite.js.map +1 -1
- package/dist/drizzle/schema.d.ts +368 -0
- package/dist/drizzle/schema.d.ts.map +1 -1
- package/dist/drizzle/schema.js +63 -0
- package/dist/drizzle/schema.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.js +101 -62
- package/dist/index.js.map +1 -1
- package/generated/mcp/manifest.json +23 -0
- package/generated/mcp/mcp-servers.json +25 -0
- package/generated/mcp/mcporter.json +34 -0
- package/generated/mcp/openclaw-memory-qmd.json +17 -0
- package/generated/mcp/runtime.json +12 -0
- package/package.json +70 -28
- package/packages/plugin-claude-code/README.md +73 -0
- package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +35 -0
- package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts.map +1 -0
- package/packages/plugin-claude-code/dist/plugin-wrapper.js +191 -0
- package/packages/plugin-claude-code/dist/plugin-wrapper.js.map +1 -0
- package/packages/plugin-claude-code/package.json +31 -0
- package/packages/plugin-openclaw/README.md +70 -0
- package/packages/plugin-openclaw/dist/index.d.ts +49 -0
- package/packages/plugin-openclaw/dist/index.d.ts.map +1 -0
- package/packages/plugin-openclaw/dist/index.js +262 -0
- package/packages/plugin-openclaw/dist/index.js.map +1 -0
- package/packages/plugin-openclaw/openclaw.plugin.json +94 -0
- package/packages/plugin-openclaw/package.json +31 -0
- package/packages/plugin-opencode/install.mjs +217 -0
- package/packages/plugin-opencode/package.json +21 -0
- package/scripts/dependency-manager.mjs +217 -0
- package/scripts/detect-clients.mjs +78 -0
- package/scripts/install-interactive.mjs +674 -0
- package/scripts/install-plugin.mjs +415 -0
- package/scripts/test-interactive.mjs +131 -0
- package/commands/managed-sync.ts +0 -69
- package/commands/mcp-server.ts +0 -519
- package/dist/algorithms/merge/analytics/token-estimator.d.ts.map +0 -1
- package/dist/algorithms/merge/analytics/token-estimator.js.map +0 -1
- package/dist/algorithms/merge/detection/hash-filters.d.ts.map +0 -1
- package/dist/algorithms/merge/detection/hash-filters.js.map +0 -1
- package/dist/algorithms/merge/detection/semantic-ranker.d.ts.map +0 -1
- package/dist/algorithms/merge/detection/semantic-ranker.js.map +0 -1
- package/dist/algorithms/merge/detection/two-stage-detector.d.ts.map +0 -1
- package/dist/algorithms/merge/detection/two-stage-detector.js.map +0 -1
- package/dist/algorithms/merge/handlers/approve-merge.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/approve-merge.js.map +0 -1
- package/dist/algorithms/merge/handlers/detect-duplicates.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/detect-duplicates.js.map +0 -1
- package/dist/algorithms/merge/handlers/get-stats.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/get-stats.js.map +0 -1
- package/dist/algorithms/merge/handlers/list-proposals.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/list-proposals.js.map +0 -1
- package/dist/algorithms/merge/handlers/preview-merge.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/preview-merge.js.map +0 -1
- package/dist/algorithms/merge/handlers/reject-merge.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/reject-merge.js.map +0 -1
- package/dist/algorithms/merge/handlers/reverse-merge.d.ts.map +0 -1
- package/dist/algorithms/merge/handlers/reverse-merge.js.map +0 -1
- package/dist/algorithms/merge/safety/safety-checks.d.ts.map +0 -1
- package/dist/algorithms/merge/safety/safety-checks.js +0 -215
- package/dist/algorithms/merge/safety/safety-checks.js.map +0 -1
- package/dist/algorithms/merge/strategies/merge-strategies.d.ts.map +0 -1
- package/dist/algorithms/merge/strategies/merge-strategies.js.map +0 -1
- package/dist/core/embeddings/qmd-provider.d.ts +0 -65
- package/dist/core/embeddings/qmd-provider.d.ts.map +0 -1
- package/dist/core/embeddings/qmd-provider.js +0 -133
- package/dist/core/embeddings/qmd-provider.js.map +0 -1
- package/scripts/init-dirs.ts +0 -15
- /package/dist/algorithms/{merge/detection → detection}/hash-filters.d.ts +0 -0
- /package/dist/algorithms/{merge/detection → detection}/hash-filters.js +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/approve-merge.d.ts +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/get-stats.d.ts +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/list-proposals.d.ts +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/preview-merge.d.ts +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/reject-merge.d.ts +0 -0
- /package/dist/algorithms/{merge/handlers → handlers}/reverse-merge.d.ts +0 -0
- /package/dist/algorithms/{merge/strategies → strategies}/merge-strategies.js +0 -0
package/.env.mcp.example
CHANGED
|
@@ -2,26 +2,29 @@
|
|
|
2
2
|
SQUISH_MCP_PORT=8767
|
|
3
3
|
SQUISH_MCP_SERVER_ENABLED=true
|
|
4
4
|
|
|
5
|
-
# Embeddings
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
# Embeddings Provider: local | openai | ollama | google | none | auto
|
|
6
|
+
# Default: local (TF-IDF, no API needed)
|
|
7
|
+
SQUISH_EMBEDDINGS_PROVIDER=local
|
|
8
8
|
|
|
9
|
-
#
|
|
9
|
+
# Model Selection (optional - uses defaults if not set)
|
|
10
|
+
# SQUISH_OPENAI_EMBEDDING_MODEL=text-embedding-3-small
|
|
11
|
+
# SQUISH_GOOGLE_EMBEDDING_MODEL=gemini-embedding-001
|
|
12
|
+
# SQUISH_OLLAMA_EMBEDDING_MODEL=nomic-embed-text:v1.5
|
|
13
|
+
|
|
14
|
+
# Google Cloud (for google provider)
|
|
10
15
|
# Get API key from: https://console.cloud.google.com/apis/credentials
|
|
11
|
-
GOOGLE_CLOUD_PROJECT=your-project-id
|
|
12
|
-
GOOGLE_CLOUD_LOCATION=us-central1
|
|
16
|
+
# GOOGLE_CLOUD_PROJECT=your-project-id
|
|
17
|
+
# GOOGLE_CLOUD_LOCATION=us-central1
|
|
13
18
|
# GOOGLE_CLOUD_API_KEY=your-api-key
|
|
14
19
|
# Or use service account:
|
|
15
20
|
# GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json
|
|
16
21
|
|
|
17
|
-
# OpenAI
|
|
22
|
+
# OpenAI (for openai provider or auto mode)
|
|
18
23
|
# SQUISH_OPENAI_API_KEY=sk-...
|
|
19
24
|
# SQUISH_OPENAI_API_URL=https://api.openai.com/v1/embeddings
|
|
20
|
-
# SQUISH_OPENAI_EMBEDDING_MODEL=text-embedding-3-small
|
|
21
25
|
|
|
22
|
-
# Ollama
|
|
26
|
+
# Ollama (for ollama provider or auto mode)
|
|
23
27
|
# SQUISH_OLLAMA_URL=http://localhost:11434
|
|
24
|
-
# SQUISH_OLLAMA_EMBEDDING_MODEL=nomic-embed-text:v1.5
|
|
25
28
|
|
|
26
29
|
# Embedding performance & reliability
|
|
27
30
|
SQUISH_EMBEDDINGS_TIMEOUT_MS=30000
|
|
@@ -30,7 +33,7 @@ SQUISH_EMBEDDINGS_RETRY_DELAY_MS=1000
|
|
|
30
33
|
# Per-provider overrides (optional)
|
|
31
34
|
# SQUISH_OPENAI_TIMEOUT_MS=30000
|
|
32
35
|
# SQUISH_OLLAMA_TIMEOUT_MS=30000
|
|
33
|
-
#
|
|
36
|
+
# SQUISH_GOOGLE_TIMEOUT_MS=30000
|
|
34
37
|
|
|
35
38
|
# QMD for local markdown search
|
|
36
39
|
SQUISH_QMD_ENABLED=true
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,74 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to Squish will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.0.0] - 2026-03-17
|
|
6
|
+
|
|
7
|
+
### 🚀 Major Release - Universal Plugin Architecture
|
|
8
|
+
|
|
9
|
+
#### Added - Interactive Multi-Step Wizard Installer
|
|
10
|
+
- **Beautiful CLI Wizard** with 5-step installation flow using `@clack/prompts`
|
|
11
|
+
- Step 1: Component Selection (CLI, MCP Server, AI Agent Plugins)
|
|
12
|
+
- Step 2: Plugin Selection (Claude Code, OpenClaw, Cursor, etc.)
|
|
13
|
+
- Step 3: Configuration (Local/Remote mode, Embeddings provider)
|
|
14
|
+
- Step 4: Review Summary with visual confirmation
|
|
15
|
+
- Step 5: Automated installation with progress spinners
|
|
16
|
+
- **Quick Install Mode**: `bun run install:interactive --quick` for CLI + all plugins
|
|
17
|
+
- **Dry-run support**: Preview installations without making changes
|
|
18
|
+
- **Configuration persistence**: Saves settings to `~/.squish/config.json`
|
|
19
|
+
|
|
20
|
+
#### Added - Universal Plugin Architecture
|
|
21
|
+
- **Multi-client support**: Works with Claude Code, OpenClaw, OpenCode, Codex, Cursor, VS Code, Windsurf
|
|
22
|
+
- **Plugin types**: Hooks (Claude Code), Plugin-slot (OpenClaw), MCP (all others)
|
|
23
|
+
- **Auto-detection**: Detects which AI agents are already installed
|
|
24
|
+
- **Source indicators**: Shows which plugins have source code available (📦)
|
|
25
|
+
|
|
26
|
+
#### Added - Core Infrastructure
|
|
27
|
+
- **Search Tracing System**: Debug and performance analysis for searches
|
|
28
|
+
- `core/tracing/collector.ts` - Collects search traces
|
|
29
|
+
- `core/tracing/visualizer.ts` - Visualizes trace data
|
|
30
|
+
- New MCP tools: `squish_get_search_traces`, `squish_get_trace_by_id`
|
|
31
|
+
- **Namespace Support**: Hierarchical memory organization
|
|
32
|
+
- `core/namespaces/index.ts` - Namespace management
|
|
33
|
+
- `core/namespaces/uri-parser.ts` - URI parsing for namespaces
|
|
34
|
+
- **Memory Layers (L0/L1/L2)**: Token-efficient retrieval
|
|
35
|
+
- `core/layers/generator.ts` - Generates memory layers
|
|
36
|
+
- **Self-Iteration Job**: Conversation memory extraction
|
|
37
|
+
- `core/session-hooks/self-iteration-job.ts` - Extracts memories from conversations
|
|
38
|
+
- `core/session-hooks/session-hooks.ts` - Session lifecycle hooks
|
|
39
|
+
- **Database Schema Updates**:
|
|
40
|
+
- Added `namespaces` table
|
|
41
|
+
- Added `memory_layers` table
|
|
42
|
+
- Added `search_traces` table
|
|
43
|
+
|
|
44
|
+
#### Fixed - Dependencies
|
|
45
|
+
- **qmd package**: Fixed from non-existent `qmd@0.15.1` to `@tobilu/qmd@2.0.1`
|
|
46
|
+
- **mcporter version**: Updated from `1.2.0` to `0.7.3` (matches installed version)
|
|
47
|
+
- **Scoped package support**: Dependency manager now handles `@scope/package` names
|
|
48
|
+
- **Binary detection**: Properly maps scoped packages to their binary names
|
|
49
|
+
|
|
50
|
+
#### Changed - Code Organization
|
|
51
|
+
- **Refactored CLI**: Improved imports and removed duplicates in `index.ts`
|
|
52
|
+
- **Safety Checks**: Better helper functions for algorithm validation
|
|
53
|
+
- **Response Builder**: Unified response builder for algorithm handlers
|
|
54
|
+
- **Config Validation**: Fixed provider validation logic
|
|
55
|
+
- **Association SQL**: Fixed placeholder issues in SQL queries
|
|
56
|
+
- **Directory Reorganization**: Renamed `core/sessions/` to `core/session-hooks/` for clarity
|
|
57
|
+
- Session lifecycle hooks now in dedicated directory
|
|
58
|
+
- Separates session auto-load (`core/session/`) from hooks/jobs (`core/session-hooks/`)
|
|
59
|
+
|
|
60
|
+
#### Documentation
|
|
61
|
+
- **Interactive Installer Guide**: Complete docs for wizard usage
|
|
62
|
+
- **Plugin Architecture**: Documentation for universal plugin system
|
|
63
|
+
- **Installation Guide**: Quick-start for all supported AI agents
|
|
64
|
+
|
|
65
|
+
### Breaking Changes
|
|
66
|
+
None - fully backward compatible with 0.9.x
|
|
67
|
+
|
|
68
|
+
### Migration Notes
|
|
69
|
+
- Run `bun run install:interactive` to use the new wizard
|
|
70
|
+
- Existing installations continue to work without changes
|
|
71
|
+
- Configuration automatically migrated on first run
|
|
72
|
+
|
|
5
73
|
## [0.9.3] - 2026-03-14
|
|
6
74
|
|
|
7
75
|
### Added - Core Memory & Embeddings Improvements (v0.9.2+)
|
package/README.md
CHANGED
|
@@ -73,14 +73,26 @@ Agent Action -----> [Squish Memory Layer]
|
|
|
73
73
|
|
|
74
74
|
## Quick Start
|
|
75
75
|
|
|
76
|
-
###
|
|
76
|
+
### Universal Plugin Installer (Recommended)
|
|
77
|
+
```bash
|
|
78
|
+
# Install for your AI assistant(s)
|
|
79
|
+
npx squish-memory install-plugin --client=claude-code # Claude Code
|
|
80
|
+
npx squish-memory install-plugin --client=openclaw # OpenClaw
|
|
81
|
+
npx squish-memory install-plugin --client=opencode # OpenCode
|
|
82
|
+
npx squish-memory install-plugin --client=all # All supported clients
|
|
83
|
+
|
|
84
|
+
# Verify installation
|
|
85
|
+
npx squish-memory install-plugin --client=claude-code --verify
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### For Claude Code (Plugin) - Legacy Method
|
|
77
89
|
```bash
|
|
78
90
|
# Install from marketplace
|
|
79
91
|
/plugin marketplace add https://github.com/michielhdoteth/squish.git
|
|
80
92
|
/plugin install squish@michielhdoteth-squish
|
|
81
93
|
```
|
|
82
94
|
|
|
83
|
-
### For OpenClaw (npm)
|
|
95
|
+
### For OpenClaw (npm) - Legacy Method
|
|
84
96
|
```bash
|
|
85
97
|
npm install -g squish-memory
|
|
86
98
|
```
|
|
@@ -128,6 +140,50 @@ curl "http://localhost:3000/api/memories/search?q=TypeScript"
|
|
|
128
140
|
- **Transport Agnostic**: MCP (stdio/SSE), CLI, or HTTP/WebSocket - choose your preference
|
|
129
141
|
- **Storage Flexible**: SQLite for local, PostgreSQL for team deployments
|
|
130
142
|
|
|
143
|
+
## Universal Plugin Architecture
|
|
144
|
+
|
|
145
|
+
Squish now provides a **universal plugin system** that works as a plugin across all major AI assistant frameworks through a single manifest-driven installer.
|
|
146
|
+
|
|
147
|
+
### How It Works
|
|
148
|
+
1. Single `plugin-manifest.json` defines the plugin for all clients
|
|
149
|
+
2. `npx squish-memory install-plugin --client=<target>` handles installation
|
|
150
|
+
3. Auto-installs dependencies (mcporter, qmd) with pinned versions
|
|
151
|
+
4. Generates client-specific configurations automatically
|
|
152
|
+
5. Provides unified verification and troubleshooting
|
|
153
|
+
|
|
154
|
+
### Supported Clients
|
|
155
|
+
| Client | Installation Method | Status |
|
|
156
|
+
|--------|-------------------|---------|
|
|
157
|
+
| Claude Code | Plugin hooks (.claude-plugin/) | ✅ Stable |
|
|
158
|
+
| OpenClaw | Memory slot via MCP bridge | ✅ Stable |
|
|
159
|
+
| OpenCode | MCP server config | ✅ Stable |
|
|
160
|
+
| Codex | MCP server config | ✅ Stable |
|
|
161
|
+
| Cursor | MCP server config | ✅ Beta |
|
|
162
|
+
| VS Code | MCP server config | ✅ Beta |
|
|
163
|
+
| Windsurf | MCP server config | ✅ Beta |
|
|
164
|
+
|
|
165
|
+
### Quick Installation Examples
|
|
166
|
+
```bash
|
|
167
|
+
# Install for Claude Code (recommended for Claude users)
|
|
168
|
+
npx squish-memory install-plugin --client=claude-code --verify
|
|
169
|
+
|
|
170
|
+
# Install for OpenClaw (recommended for OpenClaw users)
|
|
171
|
+
npx squish-memory install-plugin --client=openclaw --verify
|
|
172
|
+
|
|
173
|
+
# Install for all supported clients
|
|
174
|
+
npx squish-memory install-plugin --client=all --verify
|
|
175
|
+
|
|
176
|
+
# Install for multiple specific clients
|
|
177
|
+
npx squish-memory install-plugin --client=claude-code,openclaw,opencode --verify
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Benefits
|
|
181
|
+
- **One manifest to rule them all**: Single source of truth
|
|
182
|
+
- **Zero manual configuration**: Automatic dependency installation
|
|
183
|
+
- **Version pinned dependencies**: Stable, reproducible builds
|
|
184
|
+
- **Unified verification**: One command to check all clients
|
|
185
|
+
- **Backward compatible**: Existing integrations still work
|
|
186
|
+
|
|
131
187
|
## Universal API
|
|
132
188
|
|
|
133
189
|
Squish now provides a universal HTTP API that works with any AI agent:
|
|
@@ -185,18 +241,35 @@ REDIS_URL=redis://localhost:6379 # Optional for caching
|
|
|
185
241
|
PORT=3000 # API server port
|
|
186
242
|
```
|
|
187
243
|
|
|
188
|
-
**
|
|
244
|
+
**Configuration File (config/settings.json):**
|
|
245
|
+
```json
|
|
246
|
+
{
|
|
247
|
+
"embeddings": {
|
|
248
|
+
"provider": "local",
|
|
249
|
+
"models": {
|
|
250
|
+
"openai": { "model": "text-embedding-3-small" },
|
|
251
|
+
"google": { "model": "gemini-embedding-001" },
|
|
252
|
+
"ollama": { "model": "nomic-embed-text:v1.5" }
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
**Environment Variables (override settings.json):**
|
|
189
259
|
```bash
|
|
190
260
|
SQUISH_DATA_DIR=./.squish # Custom data directory
|
|
191
|
-
SQUISH_EMBEDDINGS_PROVIDER=local # local, openai, ollama, google
|
|
261
|
+
SQUISH_EMBEDDINGS_PROVIDER=local # local, openai, ollama, google, none, auto
|
|
192
262
|
|
|
193
|
-
#
|
|
194
|
-
SQUISH_OPENAI_API_KEY=sk-...
|
|
263
|
+
# Model selection (optional, uses defaults if not set)
|
|
195
264
|
SQUISH_OPENAI_EMBEDDING_MODEL=text-embedding-3-small
|
|
196
|
-
|
|
265
|
+
SQUISH_GOOGLE_EMBEDDING_MODEL=gemini-embedding-001
|
|
197
266
|
SQUISH_OLLAMA_EMBEDDING_MODEL=nomic-embed-text:v1.5
|
|
198
|
-
|
|
199
|
-
|
|
267
|
+
|
|
268
|
+
# API credentials (for cloud providers)
|
|
269
|
+
SQUISH_OPENAI_API_KEY=sk-...
|
|
270
|
+
SQUISH_OLLAMA_URL=http://localhost:11434
|
|
271
|
+
GOOGLE_CLOUD_PROJECT=your-project
|
|
272
|
+
GOOGLE_CLOUD_API_KEY=your-key
|
|
200
273
|
|
|
201
274
|
# Embedding performance & reliability
|
|
202
275
|
SQUISH_EMBEDDINGS_TIMEOUT_MS=30000
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Wrapper for squish commands - launches interactive mode when no args
|
|
3
|
+
import { spawn } from 'child_process';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import { dirname, join } from 'path';
|
|
6
|
+
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = dirname(__filename);
|
|
9
|
+
|
|
10
|
+
const args = process.argv.slice(2);
|
|
11
|
+
|
|
12
|
+
// If no args, launch interactive installer
|
|
13
|
+
if (args.length === 0) {
|
|
14
|
+
const interactivePath = join(__dirname, '..', 'scripts', 'install-interactive.mjs');
|
|
15
|
+
const child = spawn('node', [interactivePath], {
|
|
16
|
+
stdio: 'inherit',
|
|
17
|
+
shell: false
|
|
18
|
+
});
|
|
19
|
+
child.on('exit', (code) => {
|
|
20
|
+
process.exit(code ?? 0);
|
|
21
|
+
});
|
|
22
|
+
} else {
|
|
23
|
+
// Pass through to install-plugin.mjs
|
|
24
|
+
const scriptPath = join(__dirname, '..', 'scripts', 'install-plugin.mjs');
|
|
25
|
+
const child = spawn('node', [scriptPath, ...args], {
|
|
26
|
+
stdio: 'inherit',
|
|
27
|
+
shell: false
|
|
28
|
+
});
|
|
29
|
+
child.on('exit', (code) => {
|
|
30
|
+
process.exit(code ?? 0);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Wrapper for squish remove command
|
|
3
|
+
import { spawn } from 'child_process';
|
|
4
|
+
import { fileURLToPath } from 'url';
|
|
5
|
+
import { dirname, join } from 'path';
|
|
6
|
+
|
|
7
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
8
|
+
const __dirname = dirname(__filename);
|
|
9
|
+
|
|
10
|
+
const args = process.argv.slice(2);
|
|
11
|
+
const scriptPath = join(__dirname, 'scripts', 'install-plugin.mjs');
|
|
12
|
+
|
|
13
|
+
// Add --uninstall flag
|
|
14
|
+
const child = spawn('node', [scriptPath, '--uninstall', ...args], {
|
|
15
|
+
stdio: 'inherit',
|
|
16
|
+
shell: false
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
child.on('exit', (code) => {
|
|
20
|
+
process.exit(code ?? 0);
|
|
21
|
+
});
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "squish-memory",
|
|
3
|
+
"name": "Squish Memory",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"description": "Universal two-tier memory system for AI agents with hybrid search, core memory, and MCP-first architecture",
|
|
6
|
+
"capabilities": ["mcp", "cli", "web"],
|
|
7
|
+
"targets": {
|
|
8
|
+
"claude-code": {
|
|
9
|
+
"type": "hooks",
|
|
10
|
+
"hooks": ["SessionStart", "UserPromptSubmit", "PostToolUse", "SessionEnd"],
|
|
11
|
+
"install": {
|
|
12
|
+
"copy": [
|
|
13
|
+
{ "from": ".claude-plugin/plugin.json", "to": "~/.claude/plugin.json" }
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
"verify": {
|
|
17
|
+
"fileExists": "~/.claude/plugin.json",
|
|
18
|
+
"toolCheck": "squish_health"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"openclaw": {
|
|
22
|
+
"type": "plugin-slot",
|
|
23
|
+
"slot": "memory",
|
|
24
|
+
"tools": ["memory_search", "memory_get"],
|
|
25
|
+
"install": {
|
|
26
|
+
"command": "node scripts/openclaw-bootstrap.mjs --skip-tool-check"
|
|
27
|
+
},
|
|
28
|
+
"verify": {
|
|
29
|
+
"fileExists": "~/.openclaw/openclaw-memory.json",
|
|
30
|
+
"toolCheck": "memory_search"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"opencode": {
|
|
34
|
+
"type": "mcp",
|
|
35
|
+
"tools": ["squish_remember", "squish_search", "squish_recall", "squish_context", "squish_health"],
|
|
36
|
+
"install": {
|
|
37
|
+
"copy": [
|
|
38
|
+
{ "from": "generated/mcp/mcp-servers.json", "to": "~/.config/opencode/mcp-servers.json" }
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
"verify": {
|
|
42
|
+
"fileExists": "~/.config/opencode/mcp-servers.json",
|
|
43
|
+
"toolCheck": "squish_health"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
"codex": {
|
|
47
|
+
"type": "mcp",
|
|
48
|
+
"tools": ["squish_remember", "squish_search", "squish_recall", "squish_context", "squish_health"],
|
|
49
|
+
"install": {
|
|
50
|
+
"copy": [
|
|
51
|
+
{ "from": "generated/mcp/mcp-servers.json", "to": "~/.codex/mcp-servers.json" }
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
"verify": {
|
|
55
|
+
"fileExists": "~/.codex/mcp-servers.json",
|
|
56
|
+
"toolCheck": "squish_health"
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"cursor": {
|
|
60
|
+
"type": "mcp",
|
|
61
|
+
"tools": ["squish_remember", "squish_search", "squish_recall", "squish_context", "squish_health"],
|
|
62
|
+
"install": {
|
|
63
|
+
"copy": [
|
|
64
|
+
{ "from": "generated/mcp/mcp-servers.json", "to": "~/.cursor/mcp.json" }
|
|
65
|
+
]
|
|
66
|
+
},
|
|
67
|
+
"verify": {
|
|
68
|
+
"fileExists": "~/.cursor/mcp.json",
|
|
69
|
+
"toolCheck": "squish_health"
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"vscode": {
|
|
73
|
+
"type": "mcp",
|
|
74
|
+
"tools": ["squish_remember", "squish_search", "squish_recall", "squish_context", "squish_health"],
|
|
75
|
+
"install": {
|
|
76
|
+
"copy": [
|
|
77
|
+
{ "from": "generated/mcp/mcp-servers.json", "to": "~/.vscode/mcp/servers.json" }
|
|
78
|
+
]
|
|
79
|
+
},
|
|
80
|
+
"verify": {
|
|
81
|
+
"fileExists": "~/.vscode/mcp/servers.json",
|
|
82
|
+
"toolCheck": "squish_health"
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
"windsurf": {
|
|
86
|
+
"type": "mcp",
|
|
87
|
+
"tools": ["squish_remember", "squish_search", "squish_recall", "squish_context", "squish_health"],
|
|
88
|
+
"install": {
|
|
89
|
+
"copy": [
|
|
90
|
+
{ "from": "generated/mcp/mcp-servers.json", "to": "~/.windsurf/mcp-servers.json" }
|
|
91
|
+
]
|
|
92
|
+
},
|
|
93
|
+
"verify": {
|
|
94
|
+
"fileExists": "~/.windsurf/mcp-servers.json",
|
|
95
|
+
"toolCheck": "squish_health"
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
"dependencies": {
|
|
100
|
+
"mcporter": {
|
|
101
|
+
"version": "0.7.3",
|
|
102
|
+
"autoInstall": true,
|
|
103
|
+
"optional": false,
|
|
104
|
+
"provides": ["mcp-bridge", "openclaw-memory"]
|
|
105
|
+
},
|
|
106
|
+
"@tobilu/qmd": {
|
|
107
|
+
"version": "2.0.1",
|
|
108
|
+
"autoInstall": true,
|
|
109
|
+
"optional": false,
|
|
110
|
+
"provides": ["fast-search", "bm25", "vector-search"]
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"auth": {
|
|
114
|
+
"modes": ["none", "token"],
|
|
115
|
+
"default": "none",
|
|
116
|
+
"token": {
|
|
117
|
+
"envVar": "SQUISH_REMOTE_TOKEN",
|
|
118
|
+
"help": "Set SQUISH_REMOTE_TOKEN for remote mode authentication"
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
"pinning": {
|
|
122
|
+
"mcporter": "0.7.3",
|
|
123
|
+
"@tobilu/qmd": "2.0.1",
|
|
124
|
+
"@modelcontextprotocol/sdk": "1.27.1"
|
|
125
|
+
},
|
|
126
|
+
"entry": {
|
|
127
|
+
"mcp": "dist/commands/mcp-server.cjs",
|
|
128
|
+
"cli": "dist/index.js",
|
|
129
|
+
"plugin": "packages/plugin-openclaw/dist/index.js"
|
|
130
|
+
},
|
|
131
|
+
"compatibility": {
|
|
132
|
+
"minNodeVersion": "18.0.0",
|
|
133
|
+
"clients": [
|
|
134
|
+
{ "id": "claude-code", "minVersion": "0.62.0" },
|
|
135
|
+
{ "id": "openclaw", "minVersion": "2026.2.15" },
|
|
136
|
+
{ "id": "opencode", "minVersion": "0.1.0" },
|
|
137
|
+
{ "id": "codex", "minVersion": "0.1.0" },
|
|
138
|
+
{ "id": "cursor", "minVersion": "0.45.0" },
|
|
139
|
+
{ "id": "vscode-mcp", "minVersion": "1.0.0" },
|
|
140
|
+
{ "id": "windsurf", "minVersion": "0.1.0" }
|
|
141
|
+
]
|
|
142
|
+
},
|
|
143
|
+
"healthCheck": {
|
|
144
|
+
"mcpTool": "squish_health",
|
|
145
|
+
"httpEndpoint": "/health"
|
|
146
|
+
},
|
|
147
|
+
"generated": {
|
|
148
|
+
"from": "config/plugin-manifest.json",
|
|
149
|
+
"generator": "squish-memory@1.0.0",
|
|
150
|
+
"timestamp": "2026-01-17T00:00:00.000Z"
|
|
151
|
+
}
|
|
152
|
+
}
|