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/hooks/hooks.json
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"hooks": {
|
|
3
|
-
"SessionStart": [
|
|
4
|
-
{
|
|
5
|
-
"matcher": ".*",
|
|
6
|
-
"hooks": [
|
|
7
|
-
{
|
|
8
|
-
"type": "command",
|
|
9
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/session-start.js\"",
|
|
10
|
-
"timeout": 30000
|
|
11
|
-
}
|
|
12
|
-
]
|
|
13
|
-
}
|
|
14
|
-
],
|
|
15
|
-
"UserPromptSubmit": [
|
|
16
|
-
{
|
|
17
|
-
"matcher": ".*",
|
|
18
|
-
"hooks": [
|
|
19
|
-
{
|
|
20
|
-
"type": "command",
|
|
21
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/user-prompt-submit.js\"",
|
|
22
|
-
"timeout": 10000
|
|
23
|
-
}
|
|
24
|
-
]
|
|
25
|
-
}
|
|
26
|
-
],
|
|
27
|
-
"PostToolUse": [
|
|
28
|
-
{
|
|
29
|
-
"matcher": ".*",
|
|
30
|
-
"hooks": [
|
|
31
|
-
{
|
|
32
|
-
"type": "command",
|
|
33
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/post-tool-use.js\"",
|
|
34
|
-
"timeout": 10000
|
|
35
|
-
}
|
|
36
|
-
]
|
|
37
|
-
}
|
|
38
|
-
],
|
|
39
|
-
"SessionEnd": [
|
|
40
|
-
{
|
|
41
|
-
"matcher": ".*",
|
|
42
|
-
"hooks": [
|
|
43
|
-
{
|
|
44
|
-
"type": "command",
|
|
45
|
-
"command": "node \"${CLAUDE_PLUGIN_ROOT}/hooks/session-end.js\"",
|
|
46
|
-
"timeout": 60000
|
|
47
|
-
}
|
|
48
|
-
]
|
|
49
|
-
}
|
|
50
|
-
]
|
|
51
|
-
}
|
|
52
|
-
}
|
package/hooks/post-tool-use.js
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
readStdin,
|
|
4
|
-
parseClaudeContext,
|
|
5
|
-
createHookContext,
|
|
6
|
-
importHandler,
|
|
7
|
-
executeHandler,
|
|
8
|
-
outputResult,
|
|
9
|
-
handleFatalError,
|
|
10
|
-
} from './utils.js';
|
|
11
|
-
|
|
12
|
-
(async () => {
|
|
13
|
-
try {
|
|
14
|
-
const inputData = await readStdin();
|
|
15
|
-
const claudeContext = parseClaudeContext(inputData);
|
|
16
|
-
|
|
17
|
-
const context = createHookContext(claudeContext, true); // Include userMessage for tool context
|
|
18
|
-
const handler = await importHandler('onPostToolUse');
|
|
19
|
-
const result = await executeHandler(handler, context, 'PostToolUse');
|
|
20
|
-
|
|
21
|
-
outputResult(result);
|
|
22
|
-
process.exit(0);
|
|
23
|
-
} catch (error) {
|
|
24
|
-
handleFatalError(error);
|
|
25
|
-
}
|
|
26
|
-
})();
|
package/hooks/session-end.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
readStdin,
|
|
4
|
-
parseClaudeContext,
|
|
5
|
-
createHookContext,
|
|
6
|
-
importHandler,
|
|
7
|
-
executeHandler,
|
|
8
|
-
handleFatalError,
|
|
9
|
-
} from './utils.js';
|
|
10
|
-
|
|
11
|
-
(async () => {
|
|
12
|
-
try {
|
|
13
|
-
const inputData = await readStdin();
|
|
14
|
-
const claudeContext = parseClaudeContext(inputData);
|
|
15
|
-
|
|
16
|
-
const context = createHookContext(claudeContext);
|
|
17
|
-
const handler = await importHandler('onSessionStop');
|
|
18
|
-
|
|
19
|
-
// Session end doesn't return context, just executes
|
|
20
|
-
if (handler) {
|
|
21
|
-
await handler(context);
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
process.exit(0);
|
|
25
|
-
} catch (error) {
|
|
26
|
-
handleFatalError(error);
|
|
27
|
-
}
|
|
28
|
-
})();
|
package/hooks/session-start.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
readStdin,
|
|
4
|
-
parseClaudeContext,
|
|
5
|
-
createHookContext,
|
|
6
|
-
importHandler,
|
|
7
|
-
executeHandler,
|
|
8
|
-
outputResult,
|
|
9
|
-
handleFatalError,
|
|
10
|
-
} from './utils.js';
|
|
11
|
-
|
|
12
|
-
(async () => {
|
|
13
|
-
try {
|
|
14
|
-
const inputData = await readStdin();
|
|
15
|
-
const claudeContext = parseClaudeContext(inputData);
|
|
16
|
-
|
|
17
|
-
// Ensure data directory exists
|
|
18
|
-
const { ensureDataDirectory } = await import(
|
|
19
|
-
new URL('../dist/db/bootstrap.js', import.meta.url)
|
|
20
|
-
);
|
|
21
|
-
await ensureDataDirectory();
|
|
22
|
-
|
|
23
|
-
// Create hook context and execute handler
|
|
24
|
-
const context = createHookContext(claudeContext);
|
|
25
|
-
const handler = await importHandler('onSessionStart');
|
|
26
|
-
const result = await executeHandler(handler, context, 'SessionStart');
|
|
27
|
-
|
|
28
|
-
outputResult(result);
|
|
29
|
-
process.exit(0);
|
|
30
|
-
} catch (error) {
|
|
31
|
-
handleFatalError(error);
|
|
32
|
-
}
|
|
33
|
-
})();
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
readStdin,
|
|
4
|
-
parseClaudeContext,
|
|
5
|
-
createHookContext,
|
|
6
|
-
importHandler,
|
|
7
|
-
executeHandler,
|
|
8
|
-
outputResult,
|
|
9
|
-
handleFatalError,
|
|
10
|
-
} from './utils.js';
|
|
11
|
-
|
|
12
|
-
(async () => {
|
|
13
|
-
try {
|
|
14
|
-
const inputData = await readStdin();
|
|
15
|
-
const claudeContext = parseClaudeContext(inputData);
|
|
16
|
-
|
|
17
|
-
const context = createHookContext(claudeContext, true); // Include userMessage
|
|
18
|
-
const handler = await importHandler('onUserPromptSubmit');
|
|
19
|
-
const result = await executeHandler(handler, context, 'UserPromptSubmit');
|
|
20
|
-
|
|
21
|
-
outputResult(result);
|
|
22
|
-
process.exit(0);
|
|
23
|
-
} catch (error) {
|
|
24
|
-
handleFatalError(error);
|
|
25
|
-
}
|
|
26
|
-
})();
|
package/hooks/utils.js
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Hook Utilities - Shared functionality for Claude Code hooks
|
|
4
|
-
* Eliminates duplication across session-start, session-end, user-prompt-submit, post-tool-use
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
import { fileURLToPath } from 'url';
|
|
8
|
-
import { dirname, resolve } from 'path';
|
|
9
|
-
|
|
10
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
11
|
-
const __dirname = dirname(__filename);
|
|
12
|
-
|
|
13
|
-
export const DEFAULT_TIMEOUT_MS = 2000;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Read JSON context from stdin with timeout
|
|
17
|
-
* @param {number} timeoutMs - Timeout in milliseconds
|
|
18
|
-
* @returns {Promise<string>} - Stdin content
|
|
19
|
-
*/
|
|
20
|
-
export function readStdin(timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
21
|
-
return new Promise((resolve, reject) => {
|
|
22
|
-
let inputData = '';
|
|
23
|
-
let hasInput = false;
|
|
24
|
-
|
|
25
|
-
const stdinTimeout = setTimeout(() => {
|
|
26
|
-
if (!hasInput) {
|
|
27
|
-
resolve(''); // Resolve with empty string on timeout
|
|
28
|
-
}
|
|
29
|
-
}, timeoutMs);
|
|
30
|
-
|
|
31
|
-
process.stdin.on('readable', () => {
|
|
32
|
-
let chunk;
|
|
33
|
-
while ((chunk = process.stdin.read()) !== null) {
|
|
34
|
-
inputData += chunk;
|
|
35
|
-
hasInput = true;
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
process.stdin.on('end', () => {
|
|
40
|
-
clearTimeout(stdinTimeout);
|
|
41
|
-
resolve(inputData);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
process.stdin.on('error', (err) => {
|
|
45
|
-
clearTimeout(stdinTimeout);
|
|
46
|
-
reject(err);
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Parse Claude Code context from stdin data
|
|
53
|
-
* @param {string} data - Raw stdin data
|
|
54
|
-
* @returns {Object} - Parsed context or empty object
|
|
55
|
-
*/
|
|
56
|
-
export function parseClaudeContext(data) {
|
|
57
|
-
if (!data || !data.trim()) {
|
|
58
|
-
return {};
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
try {
|
|
62
|
-
return JSON.parse(data);
|
|
63
|
-
} catch {
|
|
64
|
-
return {};
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Create standardized hook context from Claude Code data
|
|
70
|
-
* @param {Object} claudeContext - Parsed Claude context
|
|
71
|
-
* @param {boolean} includeUserMessage - Whether to include user message
|
|
72
|
-
* @returns {Object} - Hook context
|
|
73
|
-
*/
|
|
74
|
-
export function createHookContext(claudeContext, includeUserMessage = false) {
|
|
75
|
-
return {
|
|
76
|
-
workingDirectory: claudeContext.cwd || process.cwd(),
|
|
77
|
-
sessionId: claudeContext.session_id || 'unknown',
|
|
78
|
-
...(includeUserMessage && { userMessage: claudeContext.prompt }),
|
|
79
|
-
config: {
|
|
80
|
-
autoCapture: true,
|
|
81
|
-
autoInject: true,
|
|
82
|
-
generateFolderContext: true,
|
|
83
|
-
},
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Import plugin wrapper handler with error handling
|
|
89
|
-
* @param {string} handlerName - Name of handler to import
|
|
90
|
-
* @returns {Promise<Function|null>} - Handler function or null
|
|
91
|
-
*/
|
|
92
|
-
export async function importHandler(handlerName) {
|
|
93
|
-
try {
|
|
94
|
-
const modulePath = resolve(__dirname, '../dist/adapters/claude-code/plugin-wrapper.js');
|
|
95
|
-
const module = await import(`file://${modulePath}`);
|
|
96
|
-
return module[handlerName] || null;
|
|
97
|
-
} catch (error) {
|
|
98
|
-
console.error(`Failed to import ${handlerName}:`, error.message);
|
|
99
|
-
return null;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Execute hook handler with standardized error handling
|
|
105
|
-
* @param {Function|null} handler - Handler function
|
|
106
|
-
* @param {Object} context - Hook context
|
|
107
|
-
* @param {string} hookEventName - Name of hook event
|
|
108
|
-
* @returns {Promise<Object>} - Hook result
|
|
109
|
-
*/
|
|
110
|
-
export async function executeHandler(handler, context, hookEventName) {
|
|
111
|
-
if (!handler) {
|
|
112
|
-
return {
|
|
113
|
-
continue: true,
|
|
114
|
-
hookSpecificOutput: { hookEventName },
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
try {
|
|
119
|
-
const result = await handler(context);
|
|
120
|
-
return {
|
|
121
|
-
continue: true,
|
|
122
|
-
hookSpecificOutput: {
|
|
123
|
-
hookEventName,
|
|
124
|
-
...(result && { additionalContext: result }),
|
|
125
|
-
},
|
|
126
|
-
};
|
|
127
|
-
} catch (error) {
|
|
128
|
-
console.error('Hook error:', error.message);
|
|
129
|
-
return {
|
|
130
|
-
continue: true,
|
|
131
|
-
hookSpecificOutput: { hookEventName },
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/**
|
|
137
|
-
* Output standardized hook result
|
|
138
|
-
* @param {Object} result - Hook result
|
|
139
|
-
*/
|
|
140
|
-
export function outputResult(result) {
|
|
141
|
-
// Use console.log which automatically flushes
|
|
142
|
-
// The key is to ensure no other output goes to stdout
|
|
143
|
-
console.log(JSON.stringify(result));
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* Handle fatal hook error
|
|
148
|
-
* @param {Error} error - Error object
|
|
149
|
-
*/
|
|
150
|
-
export function handleFatalError(error) {
|
|
151
|
-
console.error('Hook error:', error.message);
|
|
152
|
-
process.exit(2);
|
|
153
|
-
}
|
package/npx-installer.js
DELETED
|
@@ -1,208 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
// Squish v0.2.7 - npx installer for Claude Code Plugin
|
|
4
|
-
// Usage: npx squish-install
|
|
5
|
-
|
|
6
|
-
import { execSync } from 'child_process';
|
|
7
|
-
import fs from 'fs';
|
|
8
|
-
import path from 'path';
|
|
9
|
-
import https from 'https';
|
|
10
|
-
import os from 'os';
|
|
11
|
-
|
|
12
|
-
// Colors for output
|
|
13
|
-
const colors = {
|
|
14
|
-
red: '\x1b[31m',
|
|
15
|
-
green: '\x1b[32m',
|
|
16
|
-
yellow: '\x1b[33m',
|
|
17
|
-
blue: '\x1b[34m',
|
|
18
|
-
reset: '\x1b[0m'
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
function log(color, message) {
|
|
22
|
-
console.log(`${color}${message}${colors.reset}`);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
function detectPlatform() {
|
|
26
|
-
const platform = os.platform();
|
|
27
|
-
const arch = os.arch();
|
|
28
|
-
|
|
29
|
-
switch (platform) {
|
|
30
|
-
case 'linux':
|
|
31
|
-
return { platform: 'linux', arch: arch === 'x64' ? 'x64' : 'arm64' };
|
|
32
|
-
case 'darwin':
|
|
33
|
-
return { platform: 'macos', arch: 'arm64' }; // Assume Apple Silicon for now
|
|
34
|
-
case 'win32':
|
|
35
|
-
return { platform: 'windows', arch: arch === 'x64' ? 'x64' : 'arm64' };
|
|
36
|
-
default:
|
|
37
|
-
throw new Error(`Unsupported platform: ${platform}`);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
async function downloadFile(url, destPath) {
|
|
42
|
-
return new Promise((resolve, reject) => {
|
|
43
|
-
const file = fs.createWriteStream(destPath);
|
|
44
|
-
https.get(url, (response) => {
|
|
45
|
-
if (response.statusCode !== 200) {
|
|
46
|
-
reject(new Error(`Failed to download: ${response.statusCode}`));
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
response.pipe(file);
|
|
51
|
-
file.on('finish', () => {
|
|
52
|
-
file.close();
|
|
53
|
-
resolve();
|
|
54
|
-
});
|
|
55
|
-
}).on('error', (err) => {
|
|
56
|
-
fs.unlink(destPath, () => {});
|
|
57
|
-
reject(err);
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
async function installSquish() {
|
|
63
|
-
log(colors.blue, '🐙 Installing Squish Memory v0.2.7...');
|
|
64
|
-
|
|
65
|
-
const { platform, arch } = detectPlatform();
|
|
66
|
-
const version = '0.2.7';
|
|
67
|
-
const baseUrl = `https://github.com/michielhdoteth/squish/releases/download/v${version}`;
|
|
68
|
-
|
|
69
|
-
let filename, extractCmd;
|
|
70
|
-
if (platform === 'windows') {
|
|
71
|
-
filename = `squish-v${version}-windows-${arch}.zip`;
|
|
72
|
-
extractCmd = `powershell -Command "Expand-Archive -Path '${filename}' -DestinationPath '.' -Force"`;
|
|
73
|
-
} else {
|
|
74
|
-
filename = `squish-v${version}-${platform}-${arch}.tar.gz`;
|
|
75
|
-
extractCmd = `tar -xzf ${filename}`;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
const downloadUrl = `${baseUrl}/${filename}`;
|
|
79
|
-
|
|
80
|
-
// Create temp directory
|
|
81
|
-
const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'squish-install-'));
|
|
82
|
-
const cwd = process.cwd();
|
|
83
|
-
process.chdir(tmpDir);
|
|
84
|
-
|
|
85
|
-
try {
|
|
86
|
-
log(colors.blue, `Downloading Squish for ${platform}-${arch}...`);
|
|
87
|
-
await downloadFile(downloadUrl, filename);
|
|
88
|
-
|
|
89
|
-
log(colors.blue, 'Extracting...');
|
|
90
|
-
execSync(extractCmd, { stdio: 'inherit' });
|
|
91
|
-
|
|
92
|
-
// Install to ~/.squish
|
|
93
|
-
const installDir = path.join(os.homedir(), '.squish');
|
|
94
|
-
fs.mkdirSync(installDir, { recursive: true });
|
|
95
|
-
|
|
96
|
-
// Copy files
|
|
97
|
-
const sourceDir = path.join(tmpDir, 'squish');
|
|
98
|
-
if (fs.existsSync(sourceDir)) {
|
|
99
|
-
copyDirRecursive(sourceDir, installDir);
|
|
100
|
-
} else {
|
|
101
|
-
// Files might be in root
|
|
102
|
-
fs.readdirSync(tmpDir)
|
|
103
|
-
.filter(file => file !== filename && file !== 'squish')
|
|
104
|
-
.forEach(file => {
|
|
105
|
-
const src = path.join(tmpDir, file);
|
|
106
|
-
const dest = path.join(installDir, file);
|
|
107
|
-
if (fs.statSync(src).isDirectory()) {
|
|
108
|
-
copyDirRecursive(src, dest);
|
|
109
|
-
} else {
|
|
110
|
-
fs.copyFileSync(src, dest);
|
|
111
|
-
}
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
// Make executable
|
|
116
|
-
const binPath = path.join(installDir, 'bin', platform === 'windows' ? 'squish.exe' : 'squish');
|
|
117
|
-
if (fs.existsSync(binPath)) {
|
|
118
|
-
fs.chmodSync(binPath, '755');
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
log(colors.green, `✓ Installed to: ${installDir}`);
|
|
122
|
-
|
|
123
|
-
} finally {
|
|
124
|
-
process.chdir(cwd);
|
|
125
|
-
// Clean up temp directory
|
|
126
|
-
try {
|
|
127
|
-
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
128
|
-
} catch (e) {
|
|
129
|
-
// Ignore cleanup errors
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
function copyDirRecursive(src, dest) {
|
|
135
|
-
fs.mkdirSync(dest, { recursive: true });
|
|
136
|
-
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
137
|
-
|
|
138
|
-
for (const entry of entries) {
|
|
139
|
-
const srcPath = path.join(src, entry.name);
|
|
140
|
-
const destPath = path.join(dest, entry.name);
|
|
141
|
-
|
|
142
|
-
if (entry.isDirectory()) {
|
|
143
|
-
copyDirRecursive(srcPath, destPath);
|
|
144
|
-
} else {
|
|
145
|
-
fs.copyFileSync(srcPath, destPath);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
function setupClaude() {
|
|
151
|
-
log(colors.blue, 'Configuring Claude Code...');
|
|
152
|
-
|
|
153
|
-
const claudeConfigDir = path.join(os.homedir(), '.claude');
|
|
154
|
-
const claudeConfigPath = path.join(claudeConfigDir, 'settings.json');
|
|
155
|
-
|
|
156
|
-
fs.mkdirSync(claudeConfigDir, { recursive: true });
|
|
157
|
-
|
|
158
|
-
// Backup existing config
|
|
159
|
-
if (fs.existsSync(claudeConfigPath)) {
|
|
160
|
-
const backupPath = `${claudeConfigPath}.backup.${Date.now()}`;
|
|
161
|
-
fs.copyFileSync(claudeConfigPath, backupPath);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
const installDir = path.join(os.homedir(), '.squish');
|
|
165
|
-
const binPath = path.join(installDir, 'bin', os.platform() === 'win32' ? 'squish.exe' : 'squish');
|
|
166
|
-
|
|
167
|
-
let config;
|
|
168
|
-
try {
|
|
169
|
-
config = JSON.parse(fs.readFileSync(claudeConfigPath, 'utf8'));
|
|
170
|
-
} catch (e) {
|
|
171
|
-
config = {};
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
if (!config.mcpServers) {
|
|
175
|
-
config.mcpServers = {};
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
config.mcpServers.squish = {
|
|
179
|
-
command: 'node',
|
|
180
|
-
args: [binPath]
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
fs.writeFileSync(claudeConfigPath, JSON.stringify(config, null, 2));
|
|
184
|
-
|
|
185
|
-
log(colors.green, '✓ Claude Code configured');
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
async function main() {
|
|
189
|
-
try {
|
|
190
|
-
await installSquish();
|
|
191
|
-
setupClaude();
|
|
192
|
-
|
|
193
|
-
console.log('');
|
|
194
|
-
log(colors.green, '🎉 Squish v0.2.7 installed successfully!');
|
|
195
|
-
console.log('');
|
|
196
|
-
log(colors.blue, 'Next steps:');
|
|
197
|
-
console.log(' 1. Restart Claude Code');
|
|
198
|
-
console.log(' 2. Visit http://localhost:37777 for web UI');
|
|
199
|
-
console.log('');
|
|
200
|
-
log(colors.blue, 'Documentation: https://github.com/michielhdoteth/squish');
|
|
201
|
-
|
|
202
|
-
} catch (error) {
|
|
203
|
-
log(colors.red, `❌ Installation failed: ${error.message}`);
|
|
204
|
-
process.exit(1);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
main();
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
# Squish Memory for Claude Code
|
|
2
|
-
|
|
3
|
-
Claude Code plugin for automatic memory capture and context injection with Squish.
|
|
4
|
-
|
|
5
|
-
## Installation
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install @squish/memory-claude-code
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Features
|
|
12
|
-
|
|
13
|
-
- **Automatic Memory Capture**: User prompts are automatically stored as memories
|
|
14
|
-
- **Context Injection**: Relevant past memories are injected into Claude's context
|
|
15
|
-
- **Session Summaries**: End-of-session summaries are stored for long-term retention
|
|
16
|
-
- **Debounced Capture**: 2-second debounce avoids noise
|
|
17
|
-
|
|
18
|
-
## Hooks
|
|
19
|
-
|
|
20
|
-
This plugin implements Claude Code plugin hooks:
|
|
21
|
-
|
|
22
|
-
- `SessionStart` - Initialize memory session
|
|
23
|
-
- `UserPromptSubmit` - Capture user input (2s debounced)
|
|
24
|
-
- `PostToolUse` - Capture tool usage observations
|
|
25
|
-
- `SessionEnd` - Generate and store session summary
|
|
26
|
-
|
|
27
|
-
## Setup
|
|
28
|
-
|
|
29
|
-
1. Ensure Squish MCP server is running:
|
|
30
|
-
```bash
|
|
31
|
-
npx squish-memory install-plugin --client=claude-code
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
2. Claude Code will automatically load the plugin on next start if installed globally
|
|
35
|
-
|
|
36
|
-
3. Verify plugin is active:
|
|
37
|
-
```bash
|
|
38
|
-
npx squish-memory install-plugin --client=claude-code --verify
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## Configuration
|
|
42
|
-
|
|
43
|
-
Environment variables:
|
|
44
|
-
|
|
45
|
-
| Variable | Description |
|
|
46
|
-
|----------|-------------|
|
|
47
|
-
| `SQUISH_DATA_DIR` | Data directory (default: `~/.squish/claude`) |
|
|
48
|
-
| `SQUISH_COMMAND` | Command to start Squish MCP (default: `squish-mcp`) |
|
|
49
|
-
|
|
50
|
-
## How It Works
|
|
51
|
-
|
|
52
|
-
1. **Session Start**: Plugin connects to Squish MCP and creates a session
|
|
53
|
-
2. **User Input Capture**: Prompts are debounced (2s) then stored as `observation` type memories with tags `user-prompt`, `claude-code`
|
|
54
|
-
3. **Tool Use Capture**: (Planned) Tool calls and results stored as `observation`
|
|
55
|
-
4. **Session End**: Summary generated and stored, session statistics recorded
|
|
56
|
-
|
|
57
|
-
## Development
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
cd packages/plugin-claude-code
|
|
61
|
-
npm install
|
|
62
|
-
npm run build
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
## Compatibility
|
|
66
|
-
|
|
67
|
-
- Claude Code v0.62+
|
|
68
|
-
- Node.js 18+
|
|
69
|
-
- Squish v1.0.0+
|
|
70
|
-
|
|
71
|
-
## License
|
|
72
|
-
|
|
73
|
-
MIT
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
/**
|
|
3
|
-
* Claude Code Plugin: Squish Memory Integration
|
|
4
|
-
*
|
|
5
|
-
* Hooks:
|
|
6
|
-
* - SessionStart: Initialize memory session
|
|
7
|
-
* - UserPromptSubmit: Capture user input as memory
|
|
8
|
-
* - PostToolUse: Capture tool usage as observations
|
|
9
|
-
* - SessionEnd: Summarize session
|
|
10
|
-
*/
|
|
11
|
-
declare class ClaudeCodeSquishPlugin {
|
|
12
|
-
private client;
|
|
13
|
-
private sessionId;
|
|
14
|
-
private workspaceDir;
|
|
15
|
-
private debounceTimer;
|
|
16
|
-
private recentMemories;
|
|
17
|
-
constructor();
|
|
18
|
-
initialize(): Promise<void>;
|
|
19
|
-
private connectToSquish;
|
|
20
|
-
private registerHooks;
|
|
21
|
-
private onSessionStart;
|
|
22
|
-
private onUserPromptSubmit;
|
|
23
|
-
private captureUserPrompt;
|
|
24
|
-
private onPostToolUse;
|
|
25
|
-
private onSessionEnd;
|
|
26
|
-
private summarizeSession;
|
|
27
|
-
private observe;
|
|
28
|
-
private callTool;
|
|
29
|
-
shutdown(): Promise<void>;
|
|
30
|
-
}
|
|
31
|
-
export declare function onSessionStart(): Promise<ClaudeCodeSquishPlugin>;
|
|
32
|
-
export declare function onUserPromptSubmit(prompt: string): Promise<void>;
|
|
33
|
-
export declare function onSessionEnd(): Promise<void>;
|
|
34
|
-
export {};
|
|
35
|
-
//# sourceMappingURL=plugin-wrapper.d.ts.map
|