squish-memory 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +20 -0
- package/.claude-plugin/plugin.json +32 -0
- package/.mcp.json +14 -0
- package/LICENSE +21 -0
- package/README.md +556 -0
- package/commands/context-paging.md +51 -0
- package/commands/context-status.md +22 -0
- package/commands/context.md +5 -0
- package/commands/core-memory.md +56 -0
- package/commands/health.md +5 -0
- package/commands/init.md +39 -0
- package/commands/merge.md +113 -0
- package/commands/observe.md +5 -0
- package/commands/recall.md +5 -0
- package/commands/remember.md +11 -0
- package/commands/search.md +10 -0
- package/dist/adapters/claude-code/capture.d.ts +11 -0
- package/dist/adapters/claude-code/capture.d.ts.map +1 -0
- package/dist/adapters/claude-code/capture.js +100 -0
- package/dist/adapters/claude-code/capture.js.map +1 -0
- package/dist/adapters/claude-code/index.d.ts +5 -0
- package/dist/adapters/claude-code/index.d.ts.map +1 -0
- package/dist/adapters/claude-code/index.js +6 -0
- package/dist/adapters/claude-code/index.js.map +1 -0
- package/dist/adapters/claude-code/injection.d.ts +34 -0
- package/dist/adapters/claude-code/injection.d.ts.map +1 -0
- package/dist/adapters/claude-code/injection.js +127 -0
- package/dist/adapters/claude-code/injection.js.map +1 -0
- package/dist/adapters/claude-code/plugin-wrapper.d.ts +21 -0
- package/dist/adapters/claude-code/plugin-wrapper.d.ts.map +1 -0
- package/dist/adapters/claude-code/plugin-wrapper.js +239 -0
- package/dist/adapters/claude-code/plugin-wrapper.js.map +1 -0
- package/dist/adapters/claude-code/types.d.ts +46 -0
- package/dist/adapters/claude-code/types.d.ts.map +1 -0
- package/dist/adapters/claude-code/types.js +6 -0
- package/dist/adapters/claude-code/types.js.map +1 -0
- package/dist/algorithms/merge/analytics/token-estimator.d.ts +50 -0
- package/dist/algorithms/merge/analytics/token-estimator.d.ts.map +1 -0
- package/dist/algorithms/merge/analytics/token-estimator.js +154 -0
- package/dist/algorithms/merge/analytics/token-estimator.js.map +1 -0
- package/dist/algorithms/merge/detection/hash-filters.d.ts +47 -0
- package/dist/algorithms/merge/detection/hash-filters.d.ts.map +1 -0
- package/dist/algorithms/merge/detection/hash-filters.js +190 -0
- package/dist/algorithms/merge/detection/hash-filters.js.map +1 -0
- package/dist/algorithms/merge/detection/semantic-ranker.d.ts +32 -0
- package/dist/algorithms/merge/detection/semantic-ranker.d.ts.map +1 -0
- package/dist/algorithms/merge/detection/semantic-ranker.js +118 -0
- package/dist/algorithms/merge/detection/semantic-ranker.js.map +1 -0
- package/dist/algorithms/merge/detection/two-stage-detector.d.ts +49 -0
- package/dist/algorithms/merge/detection/two-stage-detector.d.ts.map +1 -0
- package/dist/algorithms/merge/detection/two-stage-detector.js +185 -0
- package/dist/algorithms/merge/detection/two-stage-detector.js.map +1 -0
- package/dist/algorithms/merge/handlers/approve-merge.d.ts +22 -0
- package/dist/algorithms/merge/handlers/approve-merge.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/approve-merge.js +179 -0
- package/dist/algorithms/merge/handlers/approve-merge.js.map +1 -0
- package/dist/algorithms/merge/handlers/detect-duplicates.d.ts +47 -0
- package/dist/algorithms/merge/handlers/detect-duplicates.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/detect-duplicates.js +165 -0
- package/dist/algorithms/merge/handlers/detect-duplicates.js.map +1 -0
- package/dist/algorithms/merge/handlers/get-stats.d.ts +39 -0
- package/dist/algorithms/merge/handlers/get-stats.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/get-stats.js +88 -0
- package/dist/algorithms/merge/handlers/get-stats.js.map +1 -0
- package/dist/algorithms/merge/handlers/list-proposals.d.ts +45 -0
- package/dist/algorithms/merge/handlers/list-proposals.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/list-proposals.js +83 -0
- package/dist/algorithms/merge/handlers/list-proposals.js.map +1 -0
- package/dist/algorithms/merge/handlers/preview-merge.d.ts +39 -0
- package/dist/algorithms/merge/handlers/preview-merge.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/preview-merge.js +93 -0
- package/dist/algorithms/merge/handlers/preview-merge.js.map +1 -0
- package/dist/algorithms/merge/handlers/reject-merge.d.ts +28 -0
- package/dist/algorithms/merge/handlers/reject-merge.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/reject-merge.js +69 -0
- package/dist/algorithms/merge/handlers/reject-merge.js.map +1 -0
- package/dist/algorithms/merge/handlers/reverse-merge.d.ts +21 -0
- package/dist/algorithms/merge/handlers/reverse-merge.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/reverse-merge.js +121 -0
- package/dist/algorithms/merge/handlers/reverse-merge.js.map +1 -0
- package/dist/algorithms/merge/safety/safety-checks.d.ts +22 -0
- package/dist/algorithms/merge/safety/safety-checks.d.ts.map +1 -0
- package/dist/algorithms/merge/safety/safety-checks.js +215 -0
- package/dist/algorithms/merge/safety/safety-checks.js.map +1 -0
- package/dist/algorithms/merge/strategies/merge-strategies.d.ts +32 -0
- package/dist/algorithms/merge/strategies/merge-strategies.d.ts.map +1 -0
- package/dist/algorithms/merge/strategies/merge-strategies.js +337 -0
- package/dist/algorithms/merge/strategies/merge-strategies.js.map +1 -0
- package/dist/api/web/web.d.ts +4 -0
- package/dist/api/web/web.d.ts.map +1 -0
- package/dist/api/web/web.js +484 -0
- package/dist/api/web/web.js.map +1 -0
- package/dist/config.d.ts +28 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +83 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-memory.d.ts +22 -0
- package/dist/core/agent-memory.d.ts.map +1 -0
- package/dist/core/agent-memory.js +111 -0
- package/dist/core/agent-memory.js.map +1 -0
- package/dist/core/associations.d.ts +32 -0
- package/dist/core/associations.d.ts.map +1 -0
- package/dist/core/associations.js +249 -0
- package/dist/core/associations.js.map +1 -0
- package/dist/core/cache.d.ts +13 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +202 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/consolidation.d.ts +6 -0
- package/dist/core/consolidation.d.ts.map +1 -0
- package/dist/core/consolidation.js +40 -0
- package/dist/core/consolidation.js.map +1 -0
- package/dist/core/context-paging.d.ts +90 -0
- package/dist/core/context-paging.d.ts.map +1 -0
- package/dist/core/context-paging.js +348 -0
- package/dist/core/context-paging.js.map +1 -0
- package/dist/core/context.d.ts +7 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +24 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/core-memory.d.ts +73 -0
- package/dist/core/core-memory.d.ts.map +1 -0
- package/dist/core/core-memory.js +214 -0
- package/dist/core/core-memory.js.map +1 -0
- package/dist/core/database.d.ts +12 -0
- package/dist/core/database.d.ts.map +1 -0
- package/dist/core/database.js +12 -0
- package/dist/core/database.js.map +1 -0
- package/dist/core/embeddings/qmd-client.d.ts +136 -0
- package/dist/core/embeddings/qmd-client.d.ts.map +1 -0
- package/dist/core/embeddings/qmd-client.js +403 -0
- package/dist/core/embeddings/qmd-client.js.map +1 -0
- package/dist/core/embeddings/qmd-provider.d.ts +65 -0
- package/dist/core/embeddings/qmd-provider.d.ts.map +1 -0
- package/dist/core/embeddings/qmd-provider.js +133 -0
- package/dist/core/embeddings/qmd-provider.js.map +1 -0
- package/dist/core/embeddings.d.ts +19 -0
- package/dist/core/embeddings.d.ts.map +1 -0
- package/dist/core/embeddings.js +297 -0
- package/dist/core/embeddings.js.map +1 -0
- package/dist/core/governance.d.ts +21 -0
- package/dist/core/governance.d.ts.map +1 -0
- package/dist/core/governance.js +64 -0
- package/dist/core/governance.js.map +1 -0
- package/dist/core/index.d.ts +10 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +14 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lifecycle.d.ts +19 -0
- package/dist/core/lifecycle.d.ts.map +1 -0
- package/dist/core/lifecycle.js +182 -0
- package/dist/core/lifecycle.js.map +1 -0
- package/dist/core/local-embeddings.d.ts +14 -0
- package/dist/core/local-embeddings.d.ts.map +1 -0
- package/dist/core/local-embeddings.js +94 -0
- package/dist/core/local-embeddings.js.map +1 -0
- package/dist/core/logger.d.ts +16 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +34 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/memory/bridge-discovery.d.ts +50 -0
- package/dist/core/memory/bridge-discovery.d.ts.map +1 -0
- package/dist/core/memory/bridge-discovery.js +291 -0
- package/dist/core/memory/bridge-discovery.js.map +1 -0
- package/dist/core/memory/entity-extractor.d.ts +33 -0
- package/dist/core/memory/entity-extractor.d.ts.map +1 -0
- package/dist/core/memory/entity-extractor.js +336 -0
- package/dist/core/memory/entity-extractor.js.map +1 -0
- package/dist/core/memory/entity-resolver.d.ts +23 -0
- package/dist/core/memory/entity-resolver.d.ts.map +1 -0
- package/dist/core/memory/entity-resolver.js +64 -0
- package/dist/core/memory/entity-resolver.js.map +1 -0
- package/dist/core/memory/fact-extractor.d.ts +24 -0
- package/dist/core/memory/fact-extractor.d.ts.map +1 -0
- package/dist/core/memory/fact-extractor.js +89 -0
- package/dist/core/memory/fact-extractor.js.map +1 -0
- package/dist/core/memory/hybrid-retrieval.d.ts +30 -0
- package/dist/core/memory/hybrid-retrieval.d.ts.map +1 -0
- package/dist/core/memory/hybrid-retrieval.js +63 -0
- package/dist/core/memory/hybrid-retrieval.js.map +1 -0
- package/dist/core/memory/hybrid-scorer.d.ts +51 -0
- package/dist/core/memory/hybrid-scorer.d.ts.map +1 -0
- package/dist/core/memory/hybrid-scorer.js +248 -0
- package/dist/core/memory/hybrid-scorer.js.map +1 -0
- package/dist/core/memory/index.d.ts +8 -0
- package/dist/core/memory/index.d.ts.map +1 -0
- package/dist/core/memory/index.js +10 -0
- package/dist/core/memory/index.js.map +1 -0
- package/dist/core/memory/memories.d.ts +35 -0
- package/dist/core/memory/memories.d.ts.map +1 -0
- package/dist/core/memory/memories.js +338 -0
- package/dist/core/memory/memories.js.map +1 -0
- package/dist/core/memory/memory-manager.d.ts +15 -0
- package/dist/core/memory/memory-manager.d.ts.map +1 -0
- package/dist/core/memory/memory-manager.js +46 -0
- package/dist/core/memory/memory-manager.js.map +1 -0
- package/dist/core/memory/query-processor.d.ts +21 -0
- package/dist/core/memory/query-processor.d.ts.map +1 -0
- package/dist/core/memory/query-processor.js +72 -0
- package/dist/core/memory/query-processor.js.map +1 -0
- package/dist/core/memory/serialization.d.ts +6 -0
- package/dist/core/memory/serialization.d.ts.map +1 -0
- package/dist/core/memory/serialization.js +35 -0
- package/dist/core/memory/serialization.js.map +1 -0
- package/dist/core/memory/temporal-parser.d.ts +32 -0
- package/dist/core/memory/temporal-parser.d.ts.map +1 -0
- package/dist/core/memory/temporal-parser.js +385 -0
- package/dist/core/memory/temporal-parser.js.map +1 -0
- package/dist/core/observations.d.ts +26 -0
- package/dist/core/observations.d.ts.map +1 -0
- package/dist/core/observations.js +118 -0
- package/dist/core/observations.js.map +1 -0
- package/dist/core/privacy.d.ts +23 -0
- package/dist/core/privacy.d.ts.map +1 -0
- package/dist/core/privacy.js +82 -0
- package/dist/core/privacy.js.map +1 -0
- package/dist/core/projects.d.ts +10 -0
- package/dist/core/projects.d.ts.map +1 -0
- package/dist/core/projects.js +66 -0
- package/dist/core/projects.js.map +1 -0
- package/dist/core/redis.d.ts +11 -0
- package/dist/core/redis.d.ts.map +1 -0
- package/dist/core/redis.js +69 -0
- package/dist/core/redis.js.map +1 -0
- package/dist/core/requirements.d.ts +20 -0
- package/dist/core/requirements.d.ts.map +1 -0
- package/dist/core/requirements.js +35 -0
- package/dist/core/requirements.js.map +1 -0
- package/dist/core/search/conversations.d.ts +25 -0
- package/dist/core/search/conversations.d.ts.map +1 -0
- package/dist/core/search/conversations.js +112 -0
- package/dist/core/search/conversations.js.map +1 -0
- package/dist/core/search/entities.d.ts +12 -0
- package/dist/core/search/entities.d.ts.map +1 -0
- package/dist/core/search/entities.js +34 -0
- package/dist/core/search/entities.js.map +1 -0
- package/dist/core/search/folder-context.d.ts +25 -0
- package/dist/core/search/folder-context.d.ts.map +1 -0
- package/dist/core/search/folder-context.js +119 -0
- package/dist/core/search/folder-context.js.map +1 -0
- package/dist/core/search/index.d.ts +4 -0
- package/dist/core/search/index.d.ts.map +1 -0
- package/dist/core/search/index.js +5 -0
- package/dist/core/search/index.js.map +1 -0
- package/dist/core/search/qmd-search.d.ts +61 -0
- package/dist/core/search/qmd-search.d.ts.map +1 -0
- package/dist/core/search/qmd-search.js +178 -0
- package/dist/core/search/qmd-search.js.map +1 -0
- package/dist/core/secret-detector.d.ts +32 -0
- package/dist/core/secret-detector.d.ts.map +1 -0
- package/dist/core/secret-detector.js +88 -0
- package/dist/core/secret-detector.js.map +1 -0
- package/dist/core/snapshots/cleanup.d.ts +9 -0
- package/dist/core/snapshots/cleanup.d.ts.map +1 -0
- package/dist/core/snapshots/cleanup.js +12 -0
- package/dist/core/snapshots/cleanup.js.map +1 -0
- package/dist/core/snapshots/comparison.d.ts +19 -0
- package/dist/core/snapshots/comparison.d.ts.map +1 -0
- package/dist/core/snapshots/comparison.js +37 -0
- package/dist/core/snapshots/comparison.js.map +1 -0
- package/dist/core/snapshots/creation.d.ts +19 -0
- package/dist/core/snapshots/creation.d.ts.map +1 -0
- package/dist/core/snapshots/creation.js +126 -0
- package/dist/core/snapshots/creation.js.map +1 -0
- package/dist/core/snapshots/retrieval.d.ts +7 -0
- package/dist/core/snapshots/retrieval.d.ts.map +1 -0
- package/dist/core/snapshots/retrieval.js +41 -0
- package/dist/core/snapshots/retrieval.js.map +1 -0
- package/dist/core/snapshots/stats.d.ts +11 -0
- package/dist/core/snapshots/stats.d.ts.map +1 -0
- package/dist/core/snapshots/stats.js +52 -0
- package/dist/core/snapshots/stats.js.map +1 -0
- package/dist/core/snapshots.d.ts +29 -0
- package/dist/core/snapshots.d.ts.map +1 -0
- package/dist/core/snapshots.js +220 -0
- package/dist/core/snapshots.js.map +1 -0
- package/dist/core/summarization/cleanup.d.ts +9 -0
- package/dist/core/summarization/cleanup.d.ts.map +1 -0
- package/dist/core/summarization/cleanup.js +12 -0
- package/dist/core/summarization/cleanup.js.map +1 -0
- package/dist/core/summarization/queries.d.ts +9 -0
- package/dist/core/summarization/queries.d.ts.map +1 -0
- package/dist/core/summarization/queries.js +28 -0
- package/dist/core/summarization/queries.js.map +1 -0
- package/dist/core/summarization/stats.d.ts +14 -0
- package/dist/core/summarization/stats.d.ts.map +1 -0
- package/dist/core/summarization/stats.js +52 -0
- package/dist/core/summarization/stats.js.map +1 -0
- package/dist/core/summarization/strategies.d.ts +24 -0
- package/dist/core/summarization/strategies.d.ts.map +1 -0
- package/dist/core/summarization/strategies.js +28 -0
- package/dist/core/summarization/strategies.js.map +1 -0
- package/dist/core/summarization.d.ts +37 -0
- package/dist/core/summarization.d.ts.map +1 -0
- package/dist/core/summarization.js +188 -0
- package/dist/core/summarization.js.map +1 -0
- package/dist/core/sync/qmd-sync.d.ts +106 -0
- package/dist/core/sync/qmd-sync.d.ts.map +1 -0
- package/dist/core/sync/qmd-sync.js +213 -0
- package/dist/core/sync/qmd-sync.js.map +1 -0
- package/dist/core/temporal-facts.d.ts +54 -0
- package/dist/core/temporal-facts.d.ts.map +1 -0
- package/dist/core/temporal-facts.js +193 -0
- package/dist/core/temporal-facts.js.map +1 -0
- package/dist/core/utils/cleanup-operations.d.ts +13 -0
- package/dist/core/utils/cleanup-operations.d.ts.map +1 -0
- package/dist/core/utils/cleanup-operations.js +44 -0
- package/dist/core/utils/cleanup-operations.js.map +1 -0
- package/dist/core/utils/content-extraction.d.ts +19 -0
- package/dist/core/utils/content-extraction.d.ts.map +1 -0
- package/dist/core/utils/content-extraction.js +65 -0
- package/dist/core/utils/content-extraction.js.map +1 -0
- package/dist/core/utils/filter-builder.d.ts +13 -0
- package/dist/core/utils/filter-builder.d.ts.map +1 -0
- package/dist/core/utils/filter-builder.js +44 -0
- package/dist/core/utils/filter-builder.js.map +1 -0
- package/dist/core/utils/history-traversal.d.ts +13 -0
- package/dist/core/utils/history-traversal.d.ts.map +1 -0
- package/dist/core/utils/history-traversal.js +50 -0
- package/dist/core/utils/history-traversal.js.map +1 -0
- package/dist/core/utils/memory-operations.d.ts +17 -0
- package/dist/core/utils/memory-operations.d.ts.map +1 -0
- package/dist/core/utils/memory-operations.js +41 -0
- package/dist/core/utils/memory-operations.js.map +1 -0
- package/dist/core/utils/query-operations.d.ts +18 -0
- package/dist/core/utils/query-operations.d.ts.map +1 -0
- package/dist/core/utils/query-operations.js +65 -0
- package/dist/core/utils/query-operations.js.map +1 -0
- package/dist/core/utils/summarization-helpers.d.ts +21 -0
- package/dist/core/utils/summarization-helpers.d.ts.map +1 -0
- package/dist/core/utils/summarization-helpers.js +35 -0
- package/dist/core/utils/summarization-helpers.js.map +1 -0
- package/dist/core/utils/temporal-queries.d.ts +13 -0
- package/dist/core/utils/temporal-queries.d.ts.map +1 -0
- package/dist/core/utils/temporal-queries.js +27 -0
- package/dist/core/utils/temporal-queries.js.map +1 -0
- package/dist/core/utils/version-management.d.ts +9 -0
- package/dist/core/utils/version-management.d.ts.map +1 -0
- package/dist/core/utils/version-management.js +61 -0
- package/dist/core/utils/version-management.js.map +1 -0
- package/dist/core/utils.d.ts +13 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +51 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/core/worker.d.ts +62 -0
- package/dist/core/worker.d.ts.map +1 -0
- package/dist/core/worker.js +186 -0
- package/dist/core/worker.js.map +1 -0
- package/dist/db/adapter.d.ts +6 -0
- package/dist/db/adapter.d.ts.map +1 -0
- package/dist/db/adapter.js +43 -0
- package/dist/db/adapter.js.map +1 -0
- package/dist/db/bootstrap.d.ts +9 -0
- package/dist/db/bootstrap.d.ts.map +1 -0
- package/dist/db/bootstrap.js +444 -0
- package/dist/db/bootstrap.js.map +1 -0
- package/dist/db/index.d.ts +11 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +43 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema.d.ts +3 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +11 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/drizzle/schema-sqlite.d.ts +3046 -0
- package/dist/drizzle/schema-sqlite.d.ts.map +1 -0
- package/dist/drizzle/schema-sqlite.js +405 -0
- package/dist/drizzle/schema-sqlite.js.map +1 -0
- package/dist/drizzle/schema.d.ts +2969 -0
- package/dist/drizzle/schema.d.ts.map +1 -0
- package/dist/drizzle/schema.js +555 -0
- package/dist/drizzle/schema.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +784 -0
- package/dist/index.js.map +1 -0
- package/hooks/hooks.json +52 -0
- package/hooks/post-tool-use.js +26 -0
- package/hooks/session-end.js +28 -0
- package/hooks/session-start.js +33 -0
- package/hooks/user-prompt-submit.js +26 -0
- package/hooks/utils.js +153 -0
- package/npx-installer.js +208 -0
- package/package.json +101 -0
- package/plugin.json +32 -0
- package/skills/memory-guide/SKILL.md +198 -0
- package/skills/squish-memory/SKILL.md +87 -0
- package/skills/squish-memory/install.sh +91 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "squish-memory",
|
|
3
|
+
"owner": {
|
|
4
|
+
"name": "michielhdoteth"
|
|
5
|
+
},
|
|
6
|
+
"plugins": [
|
|
7
|
+
{
|
|
8
|
+
"name": "squish",
|
|
9
|
+
"version": "0.6.0",
|
|
10
|
+
"description": "Production-ready two-tier memory system for Claude Code with 11 consolidated MCP tools. Always-visible core memory (persona, user info, project context, notes) + intelligent context paging. Advanced features: merge detection, semantic search, lifecycle management, bridge discovery. Features: 30-100x performance gains, automatic session hooks, privacy-first encryption, PostgreSQL team collaboration. Major consolidation: 39% fewer tools with same functionality.",
|
|
11
|
+
"author": {
|
|
12
|
+
"name": "michielhdoteth"
|
|
13
|
+
},
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"homepage": "https://github.com/michielhdoteth/squish",
|
|
16
|
+
"repository": "https://github.com/michielhdoteth/squish.git",
|
|
17
|
+
"source": "./"
|
|
18
|
+
}
|
|
19
|
+
]
|
|
20
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "squish",
|
|
3
|
+
"version": "0.6.0",
|
|
4
|
+
"description": "11 consolidated MCP tools for persistent two-tier memory system: core_memory, context_paging, merge, plus semantic search, lifecycle management, and intelligent context paging",
|
|
5
|
+
"author": {
|
|
6
|
+
"name": "michielhdoteth",
|
|
7
|
+
"url": "https://github.com/michielhdoteth"
|
|
8
|
+
},
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"homepage": "https://github.com/michielhdoteth/squish#readme",
|
|
11
|
+
"repository": "https://github.com/michielhdoteth/squish.git",
|
|
12
|
+
"keywords": [
|
|
13
|
+
"claude",
|
|
14
|
+
"claude-code",
|
|
15
|
+
"claude-plugin",
|
|
16
|
+
"mcp-server",
|
|
17
|
+
"memory",
|
|
18
|
+
"persistent-memory",
|
|
19
|
+
"core-memory",
|
|
20
|
+
"context-management",
|
|
21
|
+
"semantic-search",
|
|
22
|
+
"full-text-search",
|
|
23
|
+
"local-first",
|
|
24
|
+
"privacy",
|
|
25
|
+
"agent-memory",
|
|
26
|
+
"slash-commands",
|
|
27
|
+
"two-tier-architecture",
|
|
28
|
+
"model-context-protocol"
|
|
29
|
+
],
|
|
30
|
+
"commands": "./commands/",
|
|
31
|
+
"mcpServers": "./.mcp.json"
|
|
32
|
+
}
|
package/.mcp.json
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"mcpServers": {
|
|
3
|
+
"squish": {
|
|
4
|
+
"command": "node",
|
|
5
|
+
"args": ["./dist/index.js"],
|
|
6
|
+
"cwd": "${CLAUDE_PLUGIN_ROOT}",
|
|
7
|
+
"env": {
|
|
8
|
+
"SQUISH_MODE": "local",
|
|
9
|
+
"NODE_ENV": "production",
|
|
10
|
+
"SQUISH_DATA_DIR": "${CLAUDE_WORKING_DIRECTORY}/.squish"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 michielhdoteth
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,556 @@
|
|
|
1
|
+
# Squish - Two-Tier Memory System for Claude Code
|
|
2
|
+
|
|
3
|
+
A persistent, context-aware memory plugin for Claude Code (v0.7.0) that provides intelligent memory management with a two-tier architecture: always-in-context core memory (2KB) plus context paging for selective memory loading.
|
|
4
|
+
|
|
5
|
+
**What's New in v0.7.0:**
|
|
6
|
+
- **OpenClaw Gateway**: WebSocket API for OpenClaw AI assistant integration
|
|
7
|
+
- **Enhanced Search**: Improved semantic search with better ranking
|
|
8
|
+
- **Memory Tools**: Expanded toolkit for memory management
|
|
9
|
+
|
|
10
|
+
## Features
|
|
11
|
+
|
|
12
|
+
### Memory Architecture
|
|
13
|
+
|
|
14
|
+
- **Core Memory (Tier 1)**: 2KB always-visible persistent memory divided into 4 sections
|
|
15
|
+
- `persona`: AI assistant personality and role definition
|
|
16
|
+
- `user_info`: Information about the user and their preferences
|
|
17
|
+
- `project_context`: Current project architecture and patterns
|
|
18
|
+
- `working_notes`: Transient notes during active work sessions
|
|
19
|
+
|
|
20
|
+
- **Context Paging (Tier 2)**: Agent-controlled memory loading with token budgeting
|
|
21
|
+
- Dynamically load/evict memories based on relevance
|
|
22
|
+
- Token-aware context management (8KB default budget)
|
|
23
|
+
- Automatic memory decay and lifecycle management
|
|
24
|
+
|
|
25
|
+
### MCP Tools
|
|
26
|
+
|
|
27
|
+
**Core Memory Management:**
|
|
28
|
+
- `/core_memory` - View, edit, or append to always-in-context memory sections
|
|
29
|
+
|
|
30
|
+
**Context & Search:**
|
|
31
|
+
- `/context_paging` - Load/evict/view loaded memories in current session
|
|
32
|
+
- `/context` - Get project context with semantically relevant memories
|
|
33
|
+
- `/search` - Full-text + semantic search across memories
|
|
34
|
+
- `/context_status` - Check context window usage and loaded memories
|
|
35
|
+
|
|
36
|
+
**Memory Operations:**
|
|
37
|
+
- `/remember` - Store new observations, facts, decisions, and preferences
|
|
38
|
+
- `/recall` - Retrieve specific memories by ID with metadata
|
|
39
|
+
- `/observe` - Record tool usage and patterns observed during execution
|
|
40
|
+
|
|
41
|
+
**Memory Management:**
|
|
42
|
+
- `/merge` - Detect duplicates, preview/approve/reject merges
|
|
43
|
+
|
|
44
|
+
**System:**
|
|
45
|
+
- `/health` - Check MCP server and database connectivity
|
|
46
|
+
|
|
47
|
+
### Storage
|
|
48
|
+
|
|
49
|
+
- **SQLite** (local mode): Local-first, zero setup required
|
|
50
|
+
- **PostgreSQL** (team mode): Shared memory across users
|
|
51
|
+
- Smart embeddings: Local TF-IDF (offline) for SQLite, OpenAI/Ollama for PostgreSQL
|
|
52
|
+
|
|
53
|
+
### OpenClaw Gateway (v0.7.0)
|
|
54
|
+
|
|
55
|
+
Squish provides a **WebSocket gateway** for OpenClaw AI assistant integration, enabling OpenClaw agents to access Squish's memory system.
|
|
56
|
+
|
|
57
|
+
**Gateway Details:**
|
|
58
|
+
- **Protocol**: WebSocket
|
|
59
|
+
- **Port**: 18789
|
|
60
|
+
- **Messages**: search, remember, recall, status
|
|
61
|
+
|
|
62
|
+
**Enable Gateway:**
|
|
63
|
+
```bash
|
|
64
|
+
export OPENCLAW_GATEWAY_ENABLED=true
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Message Format:**
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"type": "search",
|
|
71
|
+
"id": "unique-request-id",
|
|
72
|
+
"payload": {
|
|
73
|
+
"query": "authentication flow",
|
|
74
|
+
"limit": 10
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**Response Format:**
|
|
80
|
+
```json
|
|
81
|
+
{
|
|
82
|
+
"type": "search",
|
|
83
|
+
"id": "unique-request-id",
|
|
84
|
+
"success": true,
|
|
85
|
+
"data": {
|
|
86
|
+
"results": [...],
|
|
87
|
+
"count": 10
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Installation
|
|
93
|
+
|
|
94
|
+
### Install via Claude Code Marketplace (Recommended)
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
# Step 1: Add the Squish marketplace
|
|
98
|
+
/plugin marketplace add https://github.com/michielhdoteth/squish.git
|
|
99
|
+
|
|
100
|
+
# Step 2: Install Squish
|
|
101
|
+
/plugin install squish@michielhdoteth-squish
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### For Local Development Testing
|
|
105
|
+
|
|
106
|
+
Load the plugin directly without installation:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
claude --plugin-dir "C:\Users\michi\Desktop\squish-cc\squish"
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Or on macOS/Linux:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
claude --plugin-dir "/path/to/squish"
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
This loads the plugin from your development directory and allows immediate testing of changes.
|
|
119
|
+
|
|
120
|
+
### For Production Installation
|
|
121
|
+
|
|
122
|
+
1. Build the plugin:
|
|
123
|
+
```bash
|
|
124
|
+
npm install
|
|
125
|
+
npm run build
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
2. Package as npm module:
|
|
129
|
+
```bash
|
|
130
|
+
npm pack
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
3. Install the `.tgz` file:
|
|
134
|
+
```bash
|
|
135
|
+
npm install -g squish-memory-0.7.0.tgz
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Configuration
|
|
139
|
+
|
|
140
|
+
### Environment Variables
|
|
141
|
+
|
|
142
|
+
**Required (SQLite mode - default):**
|
|
143
|
+
- None! Works out-of-the-box with local TF-IDF embeddings
|
|
144
|
+
|
|
145
|
+
**Optional (SQLite mode):**
|
|
146
|
+
- `SQUISH_DATA_DIR`: Custom data directory (default: `./.squish` in project root)
|
|
147
|
+
- `SQUISH_EMBEDDINGS_PROVIDER`: Force embedding provider (`none`, `local`, `openai`, `ollama`)
|
|
148
|
+
|
|
149
|
+
**Team Mode (PostgreSQL):**
|
|
150
|
+
- `DATABASE_URL`: PostgreSQL connection string (activates team mode)
|
|
151
|
+
- `SQUISH_OPENAI_API_KEY`: OpenAI API key for embeddings (optional in team mode)
|
|
152
|
+
- `SQUISH_OLLAMA_URL`: Ollama server URL for local LLM embeddings
|
|
153
|
+
|
|
154
|
+
**OpenClaw Gateway (v0.7.0):**
|
|
155
|
+
```bash
|
|
156
|
+
# Enable OpenClaw WebSocket gateway
|
|
157
|
+
OPENCLAW_GATEWAY_ENABLED=true
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**Advanced Options:**
|
|
161
|
+
```bash
|
|
162
|
+
# Lifecycle management
|
|
163
|
+
SQUISH_LIFECYCLE_ENABLED=true
|
|
164
|
+
SQUISH_LIFECYCLE_INTERVAL=3600000 # ms
|
|
165
|
+
|
|
166
|
+
# Session summarization
|
|
167
|
+
SQUISH_SUMMARIZATION_ENABLED=true
|
|
168
|
+
SQUISH_INCREMENTAL_THRESHOLD=10
|
|
169
|
+
SQUISH_ROLLING_WINDOW_SIZE=50
|
|
170
|
+
|
|
171
|
+
# Agent isolation
|
|
172
|
+
SQUISH_AGENT_ISOLATION_ENABLED=true
|
|
173
|
+
SQUISH_DEFAULT_VISIBILITY=private # private|project|team|global
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Quick Start
|
|
177
|
+
|
|
178
|
+
### 1. Initialize Core Memory
|
|
179
|
+
|
|
180
|
+
Store basic information that will always be available:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
/core_memory action=edit projectId=my-project section=persona content="I am a helpful assistant specialized in cloud infrastructure and DevOps."
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### 2. Store Session Observations
|
|
187
|
+
|
|
188
|
+
Record what you learn during work:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
/remember projectId=my-project type=observation action=discovered target=kubernetes_pattern summary="Found the team uses GitOps with ArgoCD" tags=["kubernetes","gitops","devops"]
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### 3. Search Your Memory
|
|
195
|
+
|
|
196
|
+
Find relevant past learnings:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
/search projectId=my-project query="kubernetes deployment" limit=5
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### 4. Load Context for an Agent
|
|
203
|
+
|
|
204
|
+
Load relevant memories for agent use:
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
/context_paging action=load sessionId=session-123 projectId=my-project memoryId=mem-456
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
## Architecture
|
|
211
|
+
|
|
212
|
+
### Database Schema
|
|
213
|
+
|
|
214
|
+
**Core Tables:**
|
|
215
|
+
- `core_memory` - Always-in-context 2KB persistent memory
|
|
216
|
+
- `memories` - Main memory storage with lifecycle tracking
|
|
217
|
+
- `context_sessions` - Per-session context window tracking
|
|
218
|
+
- `conversations` - Chat session records
|
|
219
|
+
- `messages` - Message history with embeddings
|
|
220
|
+
|
|
221
|
+
**Lifecycle Tables:**
|
|
222
|
+
- `memory_associations` - Semantic relationships between memories
|
|
223
|
+
- `memory_merge_proposals` - Duplicate detection proposals
|
|
224
|
+
- `memory_merge_history` - Audit trail of merges
|
|
225
|
+
- `memory_snapshots` - Before/after diffs for auditability
|
|
226
|
+
- `session_summaries` - Incremental and rolling summaries
|
|
227
|
+
|
|
228
|
+
**Search & Discovery:**
|
|
229
|
+
- `entities` - Named entities (functions, files, patterns, people)
|
|
230
|
+
- `entity_relations` - Relationships between entities
|
|
231
|
+
- `memory_hash_cache` - Hash signatures for duplicate detection
|
|
232
|
+
|
|
233
|
+
### Memory Lifecycle States
|
|
234
|
+
|
|
235
|
+
Each memory has:
|
|
236
|
+
- **Sector**: episodic, semantic, procedural, autobiographical, working
|
|
237
|
+
- **Tier**: hot (recent/relevant), warm (accessible), cold (archived)
|
|
238
|
+
- **Status**: active, merged, superseded, expired
|
|
239
|
+
- **Visibility**: private (user), project, team, global
|
|
240
|
+
|
|
241
|
+
### Hooks
|
|
242
|
+
|
|
243
|
+
4 lifecycle hooks automatically trigger:
|
|
244
|
+
|
|
245
|
+
| Hook | Trigger | Purpose |
|
|
246
|
+
|------|---------|---------|
|
|
247
|
+
| `SessionStart` | Session begins | Initialize session memory, load core memory |
|
|
248
|
+
| `UserPromptSubmit` | User sends message | Enhance prompt with relevant memories |
|
|
249
|
+
| `PostToolUse` | Tool completes | Record tool usage observations |
|
|
250
|
+
| `SessionEnd` | Session closes | Persist discoveries, summarize session |
|
|
251
|
+
|
|
252
|
+
## API Reference
|
|
253
|
+
|
|
254
|
+
### Core Memory Operations
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
# View all sections
|
|
258
|
+
/core_memory action=view projectId=PROJECT_ID
|
|
259
|
+
|
|
260
|
+
# Edit a section
|
|
261
|
+
/core_memory action=edit projectId=PROJECT_ID section=persona content="..."
|
|
262
|
+
|
|
263
|
+
# Append to a section
|
|
264
|
+
/core_memory action=append projectId=PROJECT_ID section=working_notes content="New observation"
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
### Memory Management
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
# Store a memory
|
|
271
|
+
/remember projectId=PROJECT_ID type=fact content="..." tags=["tag1","tag2"]
|
|
272
|
+
|
|
273
|
+
# Search memories
|
|
274
|
+
/search projectId=PROJECT_ID query="search term" type=fact limit=10
|
|
275
|
+
|
|
276
|
+
# Retrieve by ID
|
|
277
|
+
/recall memoryId=MEMORY_ID
|
|
278
|
+
|
|
279
|
+
# Get merged view
|
|
280
|
+
/context projectId=PROJECT_ID include=memories include=observations limit=20
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### Context Paging
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
# Load memory into session context
|
|
287
|
+
/context_paging action=load sessionId=SESSION_ID projectId=PROJECT_ID memoryId=MEMORY_ID
|
|
288
|
+
|
|
289
|
+
# Unload memory from session
|
|
290
|
+
/context_paging action=evict sessionId=SESSION_ID memoryId=MEMORY_ID
|
|
291
|
+
|
|
292
|
+
# View loaded memories
|
|
293
|
+
/context_paging action=view sessionId=SESSION_ID
|
|
294
|
+
|
|
295
|
+
# Check context usage
|
|
296
|
+
/context_status projectId=PROJECT_ID sessionId=SESSION_ID
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### Memory Merging
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
# Detect duplicate memories
|
|
303
|
+
/merge projectId=PROJECT_ID action=detect
|
|
304
|
+
|
|
305
|
+
# List merge proposals
|
|
306
|
+
/merge projectId=PROJECT_ID action=list status=pending
|
|
307
|
+
|
|
308
|
+
# Preview a merge
|
|
309
|
+
/merge projectId=PROJECT_ID action=preview proposalId=PROPOSAL_ID
|
|
310
|
+
|
|
311
|
+
# Approve merge
|
|
312
|
+
/merge projectId=PROJECT_ID action=approve proposalId=PROPOSAL_ID reviewNotes="Approved because..."
|
|
313
|
+
|
|
314
|
+
# Reject merge
|
|
315
|
+
/merge projectId=PROJECT_ID action=reject proposalId=PROPOSAL_ID reviewNotes="Keep separate because..."
|
|
316
|
+
|
|
317
|
+
# Get merge statistics
|
|
318
|
+
/merge projectId=PROJECT_ID action=stats
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
## Database Modes
|
|
322
|
+
|
|
323
|
+
### SQLite Mode (Default - Local Development)
|
|
324
|
+
|
|
325
|
+
- **Storage**: `~/.squish/squish.db` (local SQLite database)
|
|
326
|
+
- **Embeddings**: Local TF-IDF (no API calls, works offline)
|
|
327
|
+
- **Performance**: Fast, suitable for single-user development
|
|
328
|
+
- **Setup**: Zero configuration required
|
|
329
|
+
- **Data**: Stored locally on machine
|
|
330
|
+
|
|
331
|
+
### PostgreSQL Mode (Team - Enterprise)
|
|
332
|
+
|
|
333
|
+
- **Storage**: Shared PostgreSQL database
|
|
334
|
+
- **Embeddings**: Optional OpenAI or Ollama for better semantic search
|
|
335
|
+
- **Performance**: Optimized for multi-user teams
|
|
336
|
+
- **Setup**: Requires DATABASE_URL configuration
|
|
337
|
+
- **Data**: Shared across team members with access control
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
# Enable PostgreSQL mode
|
|
341
|
+
DATABASE_URL=postgresql://user:password@host/dbname
|
|
342
|
+
SQUISH_OPENAI_API_KEY=sk-... # optional
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
## Benchmarks
|
|
346
|
+
|
|
347
|
+
Squish has been tested against industry-standard datasets for memory systems.
|
|
348
|
+
|
|
349
|
+
### LongMemEval Dataset
|
|
350
|
+
|
|
351
|
+
| Metric | Value |
|
|
352
|
+
|--------|-------|
|
|
353
|
+
| **Accuracy** | 80% (16/20 correct) |
|
|
354
|
+
| **Embeddings** | Nomic (nomic-embed-text) |
|
|
355
|
+
| **Generation** | Claude Haiku |
|
|
356
|
+
| **Judge** | Claude Haiku |
|
|
357
|
+
| **Avg Latency** | ~1.2s per question |
|
|
358
|
+
|
|
359
|
+
### Key Strengths
|
|
360
|
+
|
|
361
|
+
- **Strong accuracy**: 80% on LongMemEval benchmark
|
|
362
|
+
- **Flexible deployment**: Local embeddings with quality generation
|
|
363
|
+
- **Privacy-first**: Local embeddings option available
|
|
364
|
+
- **Consistent retrieval**: Successfully finds entities like names, locations, and relationships
|
|
365
|
+
|
|
366
|
+
### Test Coverage
|
|
367
|
+
|
|
368
|
+
The benchmark tests memory retrieval across:
|
|
369
|
+
- Long-term conversational memory
|
|
370
|
+
- Entity resolution (people, places, organizations)
|
|
371
|
+
- Temporal reasoning (events, dates, timelines)
|
|
372
|
+
- Relationship tracking (family, professional, social)
|
|
373
|
+
|
|
374
|
+
### Running Benchmarks
|
|
375
|
+
|
|
376
|
+
```bash
|
|
377
|
+
cd ../squish-benchmarks
|
|
378
|
+
|
|
379
|
+
# Pull Nomic embeddings
|
|
380
|
+
ollama pull nomic-embed-text
|
|
381
|
+
|
|
382
|
+
# Run LongMemEval benchmark
|
|
383
|
+
bun run src/index.ts run -e nomic-embed-text -b longmemeval
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
For detailed benchmark results and methodology, see [squish-benchmarks](../squish-benchmarks/).
|
|
387
|
+
|
|
388
|
+
## Development
|
|
389
|
+
|
|
390
|
+
### Project Structure
|
|
391
|
+
|
|
392
|
+
```
|
|
393
|
+
squish/
|
|
394
|
+
├── .claude-plugin/
|
|
395
|
+
│ ├── plugin.json # Plugin manifest
|
|
396
|
+
│ └── marketplace.json # Marketplace metadata
|
|
397
|
+
├── .mcp.json # MCP server configuration
|
|
398
|
+
├── api/
|
|
399
|
+
│ └── openclaw/
|
|
400
|
+
│ └── gateway.ts # OpenClaw WebSocket gateway (v0.7.0)
|
|
401
|
+
├── core/
|
|
402
|
+
│ ├── core-memory.ts # Core memory operations
|
|
403
|
+
│ ├── context-paging.ts # Memory loading system
|
|
404
|
+
│ ├── local-embeddings.ts # TF-IDF embeddings
|
|
405
|
+
│ ├── embeddings.ts # Embedding providers
|
|
406
|
+
│ └── logger.ts
|
|
407
|
+
├── db/
|
|
408
|
+
│ ├── index.ts # Database adapter
|
|
409
|
+
│ ├── bootstrap.ts # Schema initialization
|
|
410
|
+
│ └── adapter.ts # SQLite/PostgreSQL abstraction
|
|
411
|
+
├── drizzle/
|
|
412
|
+
│ ├── schema.ts # PostgreSQL schema
|
|
413
|
+
│ └── schema-sqlite.ts # SQLite schema
|
|
414
|
+
├── skills/
|
|
415
|
+
│ └── squish-memory/
|
|
416
|
+
│ └── SKILL.md # OpenClaw skill definition (v0.7.0)
|
|
417
|
+
├── commands/ # Slash commands
|
|
418
|
+
├── hooks/ # Lifecycle hooks
|
|
419
|
+
├── index.ts # MCP server entry point
|
|
420
|
+
├── config.ts # Configuration management
|
|
421
|
+
├── package.json
|
|
422
|
+
├── tsconfig.json
|
|
423
|
+
└── README.md
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
### Building
|
|
427
|
+
|
|
428
|
+
```bash
|
|
429
|
+
# Install dependencies
|
|
430
|
+
npm install
|
|
431
|
+
|
|
432
|
+
# Build TypeScript
|
|
433
|
+
npm run build
|
|
434
|
+
|
|
435
|
+
# Run tests
|
|
436
|
+
npm run test
|
|
437
|
+
|
|
438
|
+
# Pack for distribution
|
|
439
|
+
npm pack
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
### Testing
|
|
443
|
+
|
|
444
|
+
```bash
|
|
445
|
+
# Run comprehensive system test
|
|
446
|
+
node test-v0.5.0.mjs
|
|
447
|
+
|
|
448
|
+
# Start development with watch mode
|
|
449
|
+
npm run dev
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
## Troubleshooting
|
|
453
|
+
|
|
454
|
+
### Database Issues
|
|
455
|
+
|
|
456
|
+
**Error: "database disk image is malformed"**
|
|
457
|
+
- SQLite database corrupted - delete `~/.squish/squish.db` and restart
|
|
458
|
+
|
|
459
|
+
**Error: "Connection refused"** (PostgreSQL mode)
|
|
460
|
+
- Verify DATABASE_URL is correct: `postgresql://user:pass@host:5432/dbname`
|
|
461
|
+
- Ensure PostgreSQL server is running
|
|
462
|
+
|
|
463
|
+
### MCP Server Issues
|
|
464
|
+
|
|
465
|
+
**Error: "Hook error: ERR_UNSUPPORTED_ESM_URL_SCHEME"**
|
|
466
|
+
- Use relative paths in hooks.json instead of absolute Windows paths
|
|
467
|
+
- Use `./hooks/file.js` instead of `C:\path\to\hooks.js`
|
|
468
|
+
|
|
469
|
+
**Error: "Plugin not found in marketplace"**
|
|
470
|
+
- Using `--plugin-dir` flag? This is expected - not installed from marketplace
|
|
471
|
+
- For local development, this is normal behavior
|
|
472
|
+
|
|
473
|
+
### Performance Issues
|
|
474
|
+
|
|
475
|
+
**Memory is growing unbounded**
|
|
476
|
+
- Enable lifecycle management: `SQUISH_LIFECYCLE_ENABLED=true`
|
|
477
|
+
- Review memory decay rates in configuration
|
|
478
|
+
|
|
479
|
+
### OpenClaw Gateway Issues (v0.7.0)
|
|
480
|
+
|
|
481
|
+
**Gateway not starting on port 18789**
|
|
482
|
+
- Check if port is already in use: `lsof -i :18789` (macOS/Linux) or `netstat -ano | findstr :18789` (Windows)
|
|
483
|
+
- Verify gateway is enabled: `echo $OPENCLAW_GATEWAY_ENABLED`
|
|
484
|
+
- Check logs for connection errors
|
|
485
|
+
|
|
486
|
+
**OpenClaw client cannot connect**
|
|
487
|
+
- Ensure gateway is running: Check Squish logs for "OpenClaw gateway listening on port 18789"
|
|
488
|
+
- Verify firewall allows connections on port 18789
|
|
489
|
+
- Check WebSocket client is using correct protocol (ws:// or wss://)
|
|
490
|
+
|
|
491
|
+
## Contributing
|
|
492
|
+
|
|
493
|
+
1. Fork the repository
|
|
494
|
+
2. Create a feature branch: `git checkout -b feature/my-feature`
|
|
495
|
+
3. Commit changes: `git commit -am 'Add feature'`
|
|
496
|
+
4. Push to branch: `git push origin feature/my-feature`
|
|
497
|
+
5. Submit a pull request
|
|
498
|
+
|
|
499
|
+
## License
|
|
500
|
+
|
|
501
|
+
MIT - See LICENSE file for details
|
|
502
|
+
|
|
503
|
+
## Support
|
|
504
|
+
|
|
505
|
+
- GitHub Issues: https://github.com/michielhdoteth/squish/issues
|
|
506
|
+
- Documentation: https://github.com/michielhdoteth/squish#readme
|
|
507
|
+
- OpenClaw: https://github.com/openclaw/openclaw - Personal AI assistant platform
|
|
508
|
+
|
|
509
|
+
## Changelog
|
|
510
|
+
|
|
511
|
+
### v0.7.0 (Latest)
|
|
512
|
+
- **OpenClaw Gateway**: WebSocket API for OpenClaw AI assistant integration
|
|
513
|
+
- **Enhanced Search**: Improved semantic search with better ranking
|
|
514
|
+
- **Memory Tools**: Expanded toolkit for memory management
|
|
515
|
+
- **OpenClaw Skill**: Ready-to-use skill for OpenClaw installation
|
|
516
|
+
|
|
517
|
+
### v0.6.0
|
|
518
|
+
- Implemented hybrid memory retrieval with multi-factor scoring (semantic, recency, coactivation, importance)
|
|
519
|
+
- Added fact extraction for structured knowledge discovery
|
|
520
|
+
- Added entity resolver for tracking and deduplicating entities across sessions
|
|
521
|
+
- Refactored capture.ts for better type safety
|
|
522
|
+
- Updated plugin-wrapper to use smart search config (50 candidates → top 3)
|
|
523
|
+
- Added utility functions for hook error handling
|
|
524
|
+
- Reorganized test scripts into scripts/db/ and scripts/test/
|
|
525
|
+
- Updated .gitignore to exclude references/ and opencode/
|
|
526
|
+
- Cleaned up project for distribution
|
|
527
|
+
|
|
528
|
+
### v0.5.0
|
|
529
|
+
- Implemented smart embeddings strategy (local TF-IDF for SQLite, OpenAI/Ollama for PostgreSQL)
|
|
530
|
+
- Added missing core_memory and context_sessions tables to bootstrap
|
|
531
|
+
- Fixed plugin manifest validation for Claude Code compatibility
|
|
532
|
+
- Fixed hooks path resolution for Windows compatibility
|
|
533
|
+
- Consolidated 18 MCP tools to 11 with action-based API
|
|
534
|
+
- Core memory fully functional with 4-section architecture
|
|
535
|
+
|
|
536
|
+
### v0.4.1
|
|
537
|
+
- Consolidated 25 command files to 15
|
|
538
|
+
- Removed 4 phantom commands
|
|
539
|
+
- Fixed validation order in MCP request handlers
|
|
540
|
+
|
|
541
|
+
### v0.3.0
|
|
542
|
+
- Lifecycle management with memory decay
|
|
543
|
+
- Session summarization (incremental and rolling)
|
|
544
|
+
- Agent-aware memory isolation
|
|
545
|
+
- Memory governance and protection
|
|
546
|
+
- Memory associations and graph traversal
|
|
547
|
+
|
|
548
|
+
### v0.2.0
|
|
549
|
+
- Vector embeddings for semantic search
|
|
550
|
+
- Memory snapshots for auditability
|
|
551
|
+
- Folder-scoped observations
|
|
552
|
+
|
|
553
|
+
### v0.1.0
|
|
554
|
+
- Initial release with core memory and context paging
|
|
555
|
+
- Full-text search (FTS5)
|
|
556
|
+
- Two-tier architecture
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Manage working set (load, evict, or view loaded memories)
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Context Paging Management
|
|
6
|
+
|
|
7
|
+
Manage your working set of memories for context tracking. Note: Claude manages its own context and token usage. These tools track which memories you're actively working with.
|
|
8
|
+
|
|
9
|
+
## Actions
|
|
10
|
+
|
|
11
|
+
### load
|
|
12
|
+
Add a memory to your working set for active tracking.
|
|
13
|
+
- Marks memory as currently relevant
|
|
14
|
+
- Helps organize which memories are in your active consideration set
|
|
15
|
+
- Does not affect Claude's actual context usage
|
|
16
|
+
|
|
17
|
+
### evict
|
|
18
|
+
Remove a memory from your working set.
|
|
19
|
+
- Removes from your active tracking set
|
|
20
|
+
- Memory is still stored and searchable
|
|
21
|
+
- Useful when memory is no longer actively relevant
|
|
22
|
+
|
|
23
|
+
### view
|
|
24
|
+
View all memories currently in your working set.
|
|
25
|
+
- Shows all memories you're actively tracking
|
|
26
|
+
- Displays session ID and timestamp loaded
|
|
27
|
+
- Lists memory content and metadata
|
|
28
|
+
|
|
29
|
+
## Usage Examples
|
|
30
|
+
|
|
31
|
+
Load a memory to working set:
|
|
32
|
+
```
|
|
33
|
+
/context-paging action=load sessionId=sess-123 memoryId=mem-uuid-456
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Evict memory from working set:
|
|
37
|
+
```
|
|
38
|
+
/context-paging action=evict sessionId=sess-123 memoryId=mem-uuid-456
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
View all loaded memories in session:
|
|
42
|
+
```
|
|
43
|
+
/context-paging action=view sessionId=sess-123
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Important Notes
|
|
47
|
+
|
|
48
|
+
- Working set is per-session - each Claude Code session has its own working set
|
|
49
|
+
- Claude Code manages its own context window automatically
|
|
50
|
+
- These tools are for your own organizational purposes
|
|
51
|
+
- Memory removal from working set does not delete the memory permanently
|