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
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UAM Adapter Registry
|
|
3
|
+
*
|
|
4
|
+
* Manages agent adapters for Universal Agent Memory.
|
|
5
|
+
* Provides functions to register, retrieve, and list adapters.
|
|
6
|
+
*/
|
|
7
|
+
import { AgentAdapter, AgentType, AgentConfig } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Register an adapter
|
|
10
|
+
*/
|
|
11
|
+
export declare function registerAdapter(adapter: AgentAdapter): void;
|
|
12
|
+
/**
|
|
13
|
+
* Get adapter by type
|
|
14
|
+
*/
|
|
15
|
+
export declare function getAdapter(type: AgentType): AgentAdapter | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* List all registered adapters
|
|
18
|
+
*/
|
|
19
|
+
export declare function listAdapters(): AgentAdapter[];
|
|
20
|
+
/**
|
|
21
|
+
* Load all adapters from config directory
|
|
22
|
+
*/
|
|
23
|
+
export declare function loadAllAdapters(dir: string): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Get adapter config by type (for native integration)
|
|
26
|
+
*/
|
|
27
|
+
export declare function getAdapterConfig(type: AgentType): AgentConfig | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* List all adapter configs (for MCP tool)
|
|
30
|
+
*/
|
|
31
|
+
export declare function listAdapterConfigs(): AgentConfig[];
|
|
32
|
+
/**
|
|
33
|
+
* Check if an adapter is registered
|
|
34
|
+
*/
|
|
35
|
+
export declare function hasAdapter(type: AgentType): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Clear all adapters (mainly for testing)
|
|
38
|
+
*/
|
|
39
|
+
export declare function clearAdapters(): void;
|
|
40
|
+
export * from './types.js';
|
|
41
|
+
export type { AgentAdapter, AgentType, AgentConfig };
|
|
42
|
+
export type { SessionContextInput, SessionContextOutput } from './types.js';
|
|
43
|
+
export type { ToolObservationInput, ToolObservationOutput } from './types.js';
|
|
44
|
+
export type { TimelineDepth } from './types.js';
|
|
45
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UAM Adapter Registry
|
|
3
|
+
*
|
|
4
|
+
* Manages agent adapters for Universal Agent Memory.
|
|
5
|
+
* Provides functions to register, retrieve, and list adapters.
|
|
6
|
+
*/
|
|
7
|
+
import { logger } from '../logger.js';
|
|
8
|
+
/** In-memory adapter registry */
|
|
9
|
+
const adapters = new Map();
|
|
10
|
+
/** Config directory for agent configs */
|
|
11
|
+
let configDir = null;
|
|
12
|
+
/**
|
|
13
|
+
* Register an adapter
|
|
14
|
+
*/
|
|
15
|
+
export function registerAdapter(adapter) {
|
|
16
|
+
if (adapters.has(adapter.type)) {
|
|
17
|
+
logger.warn(`[Adapters] Overriding existing adapter for type: ${adapter.type}`);
|
|
18
|
+
}
|
|
19
|
+
adapters.set(adapter.type, adapter);
|
|
20
|
+
logger.info(`[Adapters] Registered adapter: ${adapter.name} (${adapter.type})`);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get adapter by type
|
|
24
|
+
*/
|
|
25
|
+
export function getAdapter(type) {
|
|
26
|
+
return adapters.get(type);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* List all registered adapters
|
|
30
|
+
*/
|
|
31
|
+
export function listAdapters() {
|
|
32
|
+
return Array.from(adapters.values());
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Load all adapters from config directory
|
|
36
|
+
*/
|
|
37
|
+
export async function loadAllAdapters(dir) {
|
|
38
|
+
configDir = dir;
|
|
39
|
+
logger.info(`[Adapters] Loading adapters from: ${dir}`);
|
|
40
|
+
// Dynamic import and register adapters
|
|
41
|
+
try {
|
|
42
|
+
const { registerClaudeCodeAdapter } = await import('./config/claude-code.js');
|
|
43
|
+
const { registerOpenCodeAdapter } = await import('./config/opencode.js');
|
|
44
|
+
const { registerCursorAdapter } = await import('./config/cursor.js');
|
|
45
|
+
const { registerWindsurfAdapter } = await import('./config/windsurf.js');
|
|
46
|
+
registerClaudeCodeAdapter();
|
|
47
|
+
registerOpenCodeAdapter();
|
|
48
|
+
registerCursorAdapter();
|
|
49
|
+
registerWindsurfAdapter();
|
|
50
|
+
logger.info(`[Adapters] Loaded ${listAdapters().length} adapters`);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
logger.error(`[Adapters] Failed to load adapters:`, error);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get adapter config by type (for native integration)
|
|
58
|
+
*/
|
|
59
|
+
export function getAdapterConfig(type) {
|
|
60
|
+
const adapter = adapters.get(type);
|
|
61
|
+
return adapter?.getNativeConfig();
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* List all adapter configs (for MCP tool)
|
|
65
|
+
*/
|
|
66
|
+
export function listAdapterConfigs() {
|
|
67
|
+
return listAdapters().map(a => a.getNativeConfig());
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Check if an adapter is registered
|
|
71
|
+
*/
|
|
72
|
+
export function hasAdapter(type) {
|
|
73
|
+
return adapters.has(type);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Clear all adapters (mainly for testing)
|
|
77
|
+
*/
|
|
78
|
+
export function clearAdapters() {
|
|
79
|
+
adapters.clear();
|
|
80
|
+
logger.info('[Adapters] Cleared all adapters');
|
|
81
|
+
}
|
|
82
|
+
// Re-export types
|
|
83
|
+
export * from './types.js';
|
|
84
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install Adapter Script
|
|
3
|
+
*
|
|
4
|
+
* Installs Squish MCP configuration for various AI coding agents.
|
|
5
|
+
* Run with: bun run core/adapters/scripts/install-adapter.ts --agent claude-code
|
|
6
|
+
*/
|
|
7
|
+
interface InstallOptions {
|
|
8
|
+
agent: 'claude-code' | 'opencode' | 'cursor' | 'windsurf';
|
|
9
|
+
projectRoot?: string;
|
|
10
|
+
dryRun?: boolean;
|
|
11
|
+
}
|
|
12
|
+
declare const AGENT_CONFIG_PATHS: Record<string, {
|
|
13
|
+
dir: string;
|
|
14
|
+
file: string;
|
|
15
|
+
}>;
|
|
16
|
+
declare const MCP_CONFIGS: Record<string, object>;
|
|
17
|
+
declare function installAdapter(options: InstallOptions): void;
|
|
18
|
+
export { installAdapter, AGENT_CONFIG_PATHS, MCP_CONFIGS };
|
|
19
|
+
//# sourceMappingURL=install-adapter.d.ts.map
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install Adapter Script
|
|
3
|
+
*
|
|
4
|
+
* Installs Squish MCP configuration for various AI coding agents.
|
|
5
|
+
* Run with: bun run core/adapters/scripts/install-adapter.ts --agent claude-code
|
|
6
|
+
*/
|
|
7
|
+
import { writeFileSync, existsSync, mkdirSync } from 'fs';
|
|
8
|
+
import { join, dirname } from 'path';
|
|
9
|
+
import { homedir } from 'os';
|
|
10
|
+
// Config paths per agent
|
|
11
|
+
const AGENT_CONFIG_PATHS = {
|
|
12
|
+
'claude-code': {
|
|
13
|
+
dir: '.claude',
|
|
14
|
+
file: 'settings.json',
|
|
15
|
+
},
|
|
16
|
+
'opencode': {
|
|
17
|
+
dir: '.opencode',
|
|
18
|
+
file: 'settings.json',
|
|
19
|
+
},
|
|
20
|
+
'cursor': {
|
|
21
|
+
dir: '.cursor',
|
|
22
|
+
file: 'mcp.json',
|
|
23
|
+
},
|
|
24
|
+
'windsurf': {
|
|
25
|
+
dir: '.windsurf',
|
|
26
|
+
file: 'config.json',
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
// MCP config templates
|
|
30
|
+
const MCP_CONFIGS = {
|
|
31
|
+
'claude-code': {
|
|
32
|
+
mcpServers: {
|
|
33
|
+
squish: {
|
|
34
|
+
command: 'node',
|
|
35
|
+
args: ['dist/core/commands/mcp-server.js'],
|
|
36
|
+
env: { NODE_ENV: 'production' }
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
'opencode': {
|
|
41
|
+
mcpServers: {
|
|
42
|
+
squish: {
|
|
43
|
+
command: 'node',
|
|
44
|
+
args: ['dist/core/commands/mcp-server.js']
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
'cursor': {
|
|
49
|
+
mcpServers: {
|
|
50
|
+
squish: {
|
|
51
|
+
command: 'node',
|
|
52
|
+
args: ['dist/core/commands/mcp-server.js'],
|
|
53
|
+
env: { NODE_ENV: 'production' }
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
'windsurf': {
|
|
58
|
+
mcpServers: {
|
|
59
|
+
squish: {
|
|
60
|
+
command: 'node',
|
|
61
|
+
args: ['dist/core/commands/mcp-server.js'],
|
|
62
|
+
env: { NODE_ENV: 'production' }
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
function getConfigPath(agent) {
|
|
68
|
+
const home = homedir();
|
|
69
|
+
const config = AGENT_CONFIG_PATHS[agent];
|
|
70
|
+
return join(home, config.dir, config.file);
|
|
71
|
+
}
|
|
72
|
+
function installAdapter(options) {
|
|
73
|
+
const { agent, projectRoot, dryRun } = options;
|
|
74
|
+
const configPath = projectRoot
|
|
75
|
+
? join(projectRoot, AGENT_CONFIG_PATHS[agent].dir, AGENT_CONFIG_PATHS[agent].file)
|
|
76
|
+
: getConfigPath(agent);
|
|
77
|
+
const configDir = dirname(configPath);
|
|
78
|
+
const config = MCP_CONFIGS[agent];
|
|
79
|
+
console.log(`Installing Squish MCP for ${agent}...`);
|
|
80
|
+
console.log(`Config path: ${configPath}`);
|
|
81
|
+
if (dryRun) {
|
|
82
|
+
console.log(`[DRY RUN] Would write:`);
|
|
83
|
+
console.log(JSON.stringify(config, null, 2));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
// Create directory if needed
|
|
87
|
+
if (!existsSync(configDir)) {
|
|
88
|
+
mkdirSync(configDir, { recursive: true });
|
|
89
|
+
console.log(`Created directory: ${configDir}`);
|
|
90
|
+
}
|
|
91
|
+
// Check if file exists and merge
|
|
92
|
+
let existingConfig = {};
|
|
93
|
+
if (existsSync(configPath)) {
|
|
94
|
+
try {
|
|
95
|
+
const existing = require('fs').readFileSync(configPath, 'utf-8');
|
|
96
|
+
existingConfig = JSON.parse(existing);
|
|
97
|
+
console.log(`Merging with existing config...`);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
console.log(`Warning: Could not parse existing config, overwriting`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
// Merge configs - simplified
|
|
104
|
+
const mergedConfig = {
|
|
105
|
+
...existingConfig,
|
|
106
|
+
mcpServers: {
|
|
107
|
+
...(existingConfig.mcpServers || {}),
|
|
108
|
+
...MCP_CONFIGS[agent].mcpServers
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
// Write config
|
|
112
|
+
writeFileSync(configPath, JSON.stringify(mergedConfig, null, 2));
|
|
113
|
+
console.log(`Config written to: ${configPath}`);
|
|
114
|
+
console.log(`\nTo activate:`);
|
|
115
|
+
console.log(` 1. Restart ${agent}`);
|
|
116
|
+
console.log(` 2. Or reload settings`);
|
|
117
|
+
}
|
|
118
|
+
// CLI handler
|
|
119
|
+
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
120
|
+
const args = process.argv.slice(2);
|
|
121
|
+
let agent = 'claude-code';
|
|
122
|
+
let dryRun = false;
|
|
123
|
+
let projectRoot;
|
|
124
|
+
for (let i = 0; i < args.length; i++) {
|
|
125
|
+
if (args[i] === '--agent' && args[i + 1]) {
|
|
126
|
+
agent = args[i + 1];
|
|
127
|
+
i++;
|
|
128
|
+
}
|
|
129
|
+
else if (args[i] === '--dry-run') {
|
|
130
|
+
dryRun = true;
|
|
131
|
+
}
|
|
132
|
+
else if (args[i] === '--project' && args[i + 1]) {
|
|
133
|
+
projectRoot = args[i + 1];
|
|
134
|
+
i++;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
if (!['claude-code', 'opencode', 'cursor', 'windsurf'].includes(agent)) {
|
|
138
|
+
console.error(`Unknown agent: ${agent}`);
|
|
139
|
+
console.log(`Usage: install-adapter.ts --agent [claude-code|opencode|cursor|windsurf] [--dry-run] [--project <path>]`);
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
installAdapter({
|
|
143
|
+
agent: agent,
|
|
144
|
+
projectRoot,
|
|
145
|
+
dryRun
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
export { installAdapter, AGENT_CONFIG_PATHS, MCP_CONFIGS };
|
|
149
|
+
//# sourceMappingURL=install-adapter.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timeline Implementation - 3-Layer Progressive Disclosure
|
|
3
|
+
*
|
|
4
|
+
* Provides timeline functionality for MCP tool with depth parameter.
|
|
5
|
+
* Layer 1 (index): ~50 tokens - memory titles only
|
|
6
|
+
* Layer 2 (timeline): ~200 tokens - titles + timestamps + tags
|
|
7
|
+
* Layer 3 (detail): ~2000 tokens - full content
|
|
8
|
+
*/
|
|
9
|
+
import { TimelineDepth } from './types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Get timeline with progressive disclosure
|
|
12
|
+
*/
|
|
13
|
+
export declare function getTimeline(query: string, depth?: TimelineDepth, limit?: number, project?: string): Promise<{
|
|
14
|
+
results: unknown[];
|
|
15
|
+
layer: TimelineDepth;
|
|
16
|
+
tokenEstimate: number;
|
|
17
|
+
query: string;
|
|
18
|
+
}>;
|
|
19
|
+
/**
|
|
20
|
+
* Get memory by ID with optional depth
|
|
21
|
+
*/
|
|
22
|
+
export declare function getMemoryTimeline(memoryId: string, depth?: TimelineDepth): Promise<unknown>;
|
|
23
|
+
//# sourceMappingURL=timeline.d.ts.map
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timeline Implementation - 3-Layer Progressive Disclosure
|
|
3
|
+
*
|
|
4
|
+
* Provides timeline functionality for MCP tool with depth parameter.
|
|
5
|
+
* Layer 1 (index): ~50 tokens - memory titles only
|
|
6
|
+
* Layer 2 (timeline): ~200 tokens - titles + timestamps + tags
|
|
7
|
+
* Layer 3 (detail): ~2000 tokens - full content
|
|
8
|
+
*/
|
|
9
|
+
import { search as searchMemories, getMemory } from '../memory/memories.js';
|
|
10
|
+
/** Token estimates per layer */
|
|
11
|
+
const LAYER_TOKENS = {
|
|
12
|
+
index: 50,
|
|
13
|
+
timeline: 200,
|
|
14
|
+
detail: 2000,
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Get timeline with progressive disclosure
|
|
18
|
+
*/
|
|
19
|
+
export async function getTimeline(query, depth = 'index', limit = 10, project) {
|
|
20
|
+
// First get search results
|
|
21
|
+
const memories = await searchMemories({
|
|
22
|
+
query,
|
|
23
|
+
project,
|
|
24
|
+
limit,
|
|
25
|
+
});
|
|
26
|
+
// Format based on depth
|
|
27
|
+
let results;
|
|
28
|
+
let tokenEstimate = 0;
|
|
29
|
+
switch (depth) {
|
|
30
|
+
case 'index':
|
|
31
|
+
results = memories.map(m => ({
|
|
32
|
+
id: m.id,
|
|
33
|
+
title: `${m.type}: ${m.content?.substring(0, 60)}...`,
|
|
34
|
+
}));
|
|
35
|
+
tokenEstimate = results.length * (LAYER_TOKENS.index / Math.max(results.length, 1));
|
|
36
|
+
break;
|
|
37
|
+
case 'timeline':
|
|
38
|
+
results = memories.map(m => ({
|
|
39
|
+
id: m.id,
|
|
40
|
+
type: m.type,
|
|
41
|
+
content: m.content?.substring(0, 100),
|
|
42
|
+
tags: m.tags,
|
|
43
|
+
createdAt: m.createdAt,
|
|
44
|
+
}));
|
|
45
|
+
tokenEstimate = results.length * (LAYER_TOKENS.timeline / Math.max(results.length, 1));
|
|
46
|
+
break;
|
|
47
|
+
case 'detail':
|
|
48
|
+
results = await Promise.all(memories.map(async (m) => {
|
|
49
|
+
const full = await getMemory(m.id);
|
|
50
|
+
return full || { id: m.id, error: 'Not found' };
|
|
51
|
+
}));
|
|
52
|
+
tokenEstimate = LAYER_TOKENS.detail;
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
55
|
+
return {
|
|
56
|
+
results,
|
|
57
|
+
layer: depth,
|
|
58
|
+
tokenEstimate,
|
|
59
|
+
query,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get memory by ID with optional depth
|
|
64
|
+
*/
|
|
65
|
+
export async function getMemoryTimeline(memoryId, depth = 'detail') {
|
|
66
|
+
const memory = await getMemory(memoryId);
|
|
67
|
+
if (!memory) {
|
|
68
|
+
return { error: 'Memory not found', id: memoryId };
|
|
69
|
+
}
|
|
70
|
+
if (depth === 'index') {
|
|
71
|
+
return {
|
|
72
|
+
id: memory.id,
|
|
73
|
+
title: `${memory.type}: ${memory.content?.substring(0, 60)}...`,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
if (depth === 'timeline') {
|
|
77
|
+
return {
|
|
78
|
+
id: memory.id,
|
|
79
|
+
type: memory.type,
|
|
80
|
+
content: memory.content?.substring(0, 100),
|
|
81
|
+
tags: memory.tags,
|
|
82
|
+
createdAt: memory.createdAt,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
// detail
|
|
86
|
+
return memory;
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=timeline.js.map
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UAM Adapter Types
|
|
3
|
+
*
|
|
4
|
+
* Universal Agent Memory - Adapter interfaces for different AI coding agents.
|
|
5
|
+
* Each agent (Claude Code, OpenCode, Cursor, Windsurf, etc.) has its own adapter
|
|
6
|
+
* that defines how to integrate with Squish.
|
|
7
|
+
*
|
|
8
|
+
* Key concepts:
|
|
9
|
+
* - Agent adapters use native config formats where possible
|
|
10
|
+
* - Hooks are explicit (calls squish_learn) not hidden
|
|
11
|
+
* - Uses existing MCP tools (squish_context, squish_learn)
|
|
12
|
+
*/
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
/** Agent types supported by UAM */
|
|
15
|
+
export type AgentType = 'claude-code' | 'opencode' | 'cursor' | 'windsurf' | 'codex' | 'generic';
|
|
16
|
+
/** Hook event types */
|
|
17
|
+
export type HookEvent = 'onSessionStart' | 'onSessionEnd' | 'onToolCall' | 'onPreCompact' | 'onPostCompact';
|
|
18
|
+
/** 3-Layer depth for progressive disclosure */
|
|
19
|
+
export type TimelineDepth = 'index' | 'timeline' | 'detail';
|
|
20
|
+
/** Memory context for session start */
|
|
21
|
+
export interface SessionContextInput {
|
|
22
|
+
project: string;
|
|
23
|
+
mode: 'startup' | 'resume' | 'compact';
|
|
24
|
+
sessionId?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface SessionContextOutput {
|
|
27
|
+
mode: string;
|
|
28
|
+
project: string;
|
|
29
|
+
memories: string;
|
|
30
|
+
count: number;
|
|
31
|
+
snapshot?: {
|
|
32
|
+
id: string;
|
|
33
|
+
content: string;
|
|
34
|
+
} | null;
|
|
35
|
+
}
|
|
36
|
+
/** Tool call observation */
|
|
37
|
+
export interface ToolObservationInput {
|
|
38
|
+
toolName: string;
|
|
39
|
+
toolInput: Record<string, unknown>;
|
|
40
|
+
toolResult: unknown;
|
|
41
|
+
project: string;
|
|
42
|
+
sessionId?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface ToolObservationOutput {
|
|
45
|
+
memoryId: string;
|
|
46
|
+
category: 'reading' | 'modification' | 'commit' | 'testing' | 'command' | 'search' | 'planning' | 'other';
|
|
47
|
+
content: string;
|
|
48
|
+
}
|
|
49
|
+
/** Agent configuration */
|
|
50
|
+
export interface AgentConfig {
|
|
51
|
+
/** Unique agent identifier */
|
|
52
|
+
agentId: string;
|
|
53
|
+
/** Human-readable name */
|
|
54
|
+
name: string;
|
|
55
|
+
/** Agent type */
|
|
56
|
+
type: AgentType;
|
|
57
|
+
/** MCP server configuration */
|
|
58
|
+
mcp: {
|
|
59
|
+
command: string;
|
|
60
|
+
args: string[];
|
|
61
|
+
env?: Record<string, string>;
|
|
62
|
+
};
|
|
63
|
+
/** Hook patterns (native format for each agent) */
|
|
64
|
+
hooks?: {
|
|
65
|
+
sessionStart?: unknown;
|
|
66
|
+
sessionEnd?: unknown;
|
|
67
|
+
preCompact?: unknown;
|
|
68
|
+
postToolUse?: unknown;
|
|
69
|
+
};
|
|
70
|
+
/** Custom settings */
|
|
71
|
+
settings?: Record<string, unknown>;
|
|
72
|
+
}
|
|
73
|
+
/** Agent adapter interface */
|
|
74
|
+
export interface AgentAdapter {
|
|
75
|
+
/** Unique adapter ID */
|
|
76
|
+
id: string;
|
|
77
|
+
/** Agent type */
|
|
78
|
+
type: AgentType;
|
|
79
|
+
/** Human-readable name */
|
|
80
|
+
name: string;
|
|
81
|
+
/** Agent version (if known) */
|
|
82
|
+
version?: string;
|
|
83
|
+
/** Get session context for injection */
|
|
84
|
+
getSessionContext(input: SessionContextInput): Promise<SessionContextOutput>;
|
|
85
|
+
/** Record a tool observation */
|
|
86
|
+
recordObservation(input: ToolObservationInput): Promise<ToolObservationOutput>;
|
|
87
|
+
/** Get timeline (3-layer progressive disclosure) */
|
|
88
|
+
getTimeline(query: string, depth: TimelineDepth, limit: number): Promise<unknown[]>;
|
|
89
|
+
/** Check if this agent should capture this tool */
|
|
90
|
+
shouldCaptureTool(toolName: string): boolean;
|
|
91
|
+
/** Get raw config for native integration */
|
|
92
|
+
getNativeConfig(): AgentConfig;
|
|
93
|
+
}
|
|
94
|
+
/** Registry for managing adapters */
|
|
95
|
+
export interface AdapterRegistry {
|
|
96
|
+
/** Register a new adapter */
|
|
97
|
+
register(adapter: AgentAdapter): void;
|
|
98
|
+
/** Get adapter by type */
|
|
99
|
+
get(type: AgentType): AgentAdapter | undefined;
|
|
100
|
+
/** List all registered adapters */
|
|
101
|
+
list(): AgentAdapter[];
|
|
102
|
+
/** Load all adapters from config directory */
|
|
103
|
+
loadAll(configDir: string): Promise<void>;
|
|
104
|
+
}
|
|
105
|
+
/** Zod schemas for validation */
|
|
106
|
+
export declare const SessionContextInputSchema: z.ZodObject<{
|
|
107
|
+
project: z.ZodString;
|
|
108
|
+
mode: z.ZodDefault<z.ZodEnum<["startup", "resume", "compact"]>>;
|
|
109
|
+
sessionId: z.ZodOptional<z.ZodString>;
|
|
110
|
+
}, "strip", z.ZodTypeAny, {
|
|
111
|
+
project: string;
|
|
112
|
+
mode: "resume" | "startup" | "compact";
|
|
113
|
+
sessionId?: string | undefined;
|
|
114
|
+
}, {
|
|
115
|
+
project: string;
|
|
116
|
+
mode?: "resume" | "startup" | "compact" | undefined;
|
|
117
|
+
sessionId?: string | undefined;
|
|
118
|
+
}>;
|
|
119
|
+
export declare const ToolObservationInputSchema: z.ZodObject<{
|
|
120
|
+
toolName: z.ZodString;
|
|
121
|
+
toolInput: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
122
|
+
toolResult: z.ZodUnknown;
|
|
123
|
+
project: z.ZodString;
|
|
124
|
+
sessionId: z.ZodOptional<z.ZodString>;
|
|
125
|
+
}, "strip", z.ZodTypeAny, {
|
|
126
|
+
project: string;
|
|
127
|
+
toolName: string;
|
|
128
|
+
toolInput: Record<string, unknown>;
|
|
129
|
+
sessionId?: string | undefined;
|
|
130
|
+
toolResult?: unknown;
|
|
131
|
+
}, {
|
|
132
|
+
project: string;
|
|
133
|
+
toolName: string;
|
|
134
|
+
toolInput: Record<string, unknown>;
|
|
135
|
+
sessionId?: string | undefined;
|
|
136
|
+
toolResult?: unknown;
|
|
137
|
+
}>;
|
|
138
|
+
export declare const TimelineInputSchema: z.ZodObject<{
|
|
139
|
+
query: z.ZodString;
|
|
140
|
+
depth: z.ZodDefault<z.ZodEnum<["index", "timeline", "detail"]>>;
|
|
141
|
+
limit: z.ZodDefault<z.ZodNumber>;
|
|
142
|
+
}, "strip", z.ZodTypeAny, {
|
|
143
|
+
query: string;
|
|
144
|
+
limit: number;
|
|
145
|
+
depth: "index" | "timeline" | "detail";
|
|
146
|
+
}, {
|
|
147
|
+
query: string;
|
|
148
|
+
limit?: number | undefined;
|
|
149
|
+
depth?: "index" | "timeline" | "detail" | undefined;
|
|
150
|
+
}>;
|
|
151
|
+
/** Tool category mapping */
|
|
152
|
+
export declare const TOOL_CATEGORIES: Record<string, ToolObservationOutput['category']>;
|
|
153
|
+
/**
|
|
154
|
+
* Categorize a tool call
|
|
155
|
+
*/
|
|
156
|
+
export declare function categorizeTool(toolName: string): ToolObservationOutput['category'];
|
|
157
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UAM Adapter Types
|
|
3
|
+
*
|
|
4
|
+
* Universal Agent Memory - Adapter interfaces for different AI coding agents.
|
|
5
|
+
* Each agent (Claude Code, OpenCode, Cursor, Windsurf, etc.) has its own adapter
|
|
6
|
+
* that defines how to integrate with Squish.
|
|
7
|
+
*
|
|
8
|
+
* Key concepts:
|
|
9
|
+
* - Agent adapters use native config formats where possible
|
|
10
|
+
* - Hooks are explicit (calls squish_learn) not hidden
|
|
11
|
+
* - Uses existing MCP tools (squish_context, squish_learn)
|
|
12
|
+
*/
|
|
13
|
+
import { z } from 'zod';
|
|
14
|
+
/** Zod schemas for validation */
|
|
15
|
+
export const SessionContextInputSchema = z.object({
|
|
16
|
+
project: z.string(),
|
|
17
|
+
mode: z.enum(['startup', 'resume', 'compact']).default('startup'),
|
|
18
|
+
sessionId: z.string().optional(),
|
|
19
|
+
});
|
|
20
|
+
export const ToolObservationInputSchema = z.object({
|
|
21
|
+
toolName: z.string(),
|
|
22
|
+
toolInput: z.record(z.unknown()),
|
|
23
|
+
toolResult: z.unknown(),
|
|
24
|
+
project: z.string(),
|
|
25
|
+
sessionId: z.string().optional(),
|
|
26
|
+
});
|
|
27
|
+
export const TimelineInputSchema = z.object({
|
|
28
|
+
query: z.string(),
|
|
29
|
+
depth: z.enum(['index', 'timeline', 'detail']).default('index'),
|
|
30
|
+
limit: z.number().min(1).max(100).default(10),
|
|
31
|
+
});
|
|
32
|
+
/** Tool category mapping */
|
|
33
|
+
export const TOOL_CATEGORIES = {
|
|
34
|
+
'Read': 'reading',
|
|
35
|
+
'Write': 'modification',
|
|
36
|
+
'Edit': 'modification',
|
|
37
|
+
'Bash': 'command',
|
|
38
|
+
'grep': 'search',
|
|
39
|
+
'Glob': 'search',
|
|
40
|
+
'TodoWrite': 'planning',
|
|
41
|
+
'TodoRead': 'planning',
|
|
42
|
+
'Task': 'planning',
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Categorize a tool call
|
|
46
|
+
*/
|
|
47
|
+
export function categorizeTool(toolName) {
|
|
48
|
+
return TOOL_CATEGORIES[toolName] || 'other';
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Token estimation for calculating context window savings from merges.
|
|
3
3
|
* Uses simple heuristic: 1 token ≈ 4 characters (can be upgraded to tiktoken for accuracy).
|
|
4
4
|
*/
|
|
5
|
-
import type { Memory } from '
|
|
5
|
+
import type { Memory } from '../../../db/drizzle/schema.js';
|
|
6
6
|
import type { MergedMemory } from '../strategies/merge-strategies.js';
|
|
7
7
|
export declare function estimateTokensSaved(sources: Memory[], merged: MergedMemory): number;
|
|
8
8
|
export declare function calculateProjectTokenSavings(projectId: string): Promise<{
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Token estimation for calculating context window savings from merges.
|
|
3
3
|
* Uses simple heuristic: 1 token ≈ 4 characters (can be upgraded to tiktoken for accuracy).
|
|
4
4
|
*/
|
|
5
|
-
import { getDb } from '
|
|
6
|
-
import { getSchema } from '
|
|
7
|
-
import { createDatabaseClient } from '
|
|
5
|
+
import { getDb } from '../../../db/index.js';
|
|
6
|
+
import { getSchema } from '../../../db/schema.js';
|
|
7
|
+
import { createDatabaseClient } from '../../../core/storage/database.js';
|
|
8
8
|
import { eq } from 'drizzle-orm';
|
|
9
9
|
function estimateTokensSimple(text) {
|
|
10
10
|
if (!text)
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Semantic ranking using embeddings (Stage 2 of two-stage detection).
|
|
3
3
|
* Ranks candidates from Stage 1 by semantic similarity using cosine distance.
|
|
4
4
|
*/
|
|
5
|
-
import type { Memory } from '
|
|
5
|
+
import type { Memory } from '../../../db/drizzle/schema.js';
|
|
6
6
|
export interface RankedCandidate {
|
|
7
7
|
memoryId1: string;
|
|
8
8
|
memoryId2: string;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Semantic ranking using embeddings (Stage 2 of two-stage detection).
|
|
3
3
|
* Ranks candidates from Stage 1 by semantic similarity using cosine distance.
|
|
4
4
|
*/
|
|
5
|
-
import { cosineSimilarity } from '
|
|
5
|
+
import { cosineSimilarity } from '../../../core/utils/vector-operations.js';
|
|
6
6
|
function calculateConfidence(memory1, memory2, cosineSim) {
|
|
7
7
|
if (cosineSim >= 0.90) {
|
|
8
8
|
const factors = calculateConfidenceFactors(memory1, memory2);
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Stage 1: Hash-based prefiltering (SimHash + MinHash)
|
|
5
5
|
* Stage 2: Semantic ranking using embeddings
|
|
6
6
|
*/
|
|
7
|
-
import type { Memory, MemoryType } from '
|
|
7
|
+
import type { Memory, MemoryType } from '../../../db/drizzle/schema.js';
|
|
8
8
|
import { analyzePair } from './semantic-ranker.js';
|
|
9
9
|
export interface MemoryPair {
|
|
10
10
|
memory1: Memory;
|