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,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Context API - Direct access for agents
|
|
3
|
+
*
|
|
4
|
+
* Provides a simple API for agents to get context without CLI calls.
|
|
5
|
+
* Use this instead of spawning squish CLI processes.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* import { getAgentContext, searchWithPlace } from './core/context/agent-context.js';
|
|
9
|
+
*
|
|
10
|
+
* const context = await getAgentContext(projectPath, { task: "fix bug" });
|
|
11
|
+
* const results = await searchWithPlace(projectPath, "error fix", { limit: 5 });
|
|
12
|
+
*/
|
|
13
|
+
export interface AgentContextOptions {
|
|
14
|
+
/** Current task or action (helps auto-detect relevant place) */
|
|
15
|
+
task?: string;
|
|
16
|
+
/** Preferred tier: quick (50 tokens), medium (170), full (500) */
|
|
17
|
+
tier?: 'quick' | 'medium' | 'full';
|
|
18
|
+
/** Max memories to return */
|
|
19
|
+
limit?: number;
|
|
20
|
+
/** Include place context */
|
|
21
|
+
includePlaces?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface SearchOptions {
|
|
24
|
+
/** Query string */
|
|
25
|
+
query: string;
|
|
26
|
+
/** Optional place filter */
|
|
27
|
+
place?: string;
|
|
28
|
+
/** Max results */
|
|
29
|
+
limit?: number;
|
|
30
|
+
/** Memory type filter */
|
|
31
|
+
type?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get agent context - the main function I can call directly
|
|
35
|
+
*
|
|
36
|
+
* Instead of: squish context --tier medium --has-memories
|
|
37
|
+
* Use: const ctx = await getAgentContext(projectPath, { task: "fix bug", tier: "medium" })
|
|
38
|
+
*/
|
|
39
|
+
export declare function getAgentContext(projectPath: string, options?: AgentContextOptions): Promise<{
|
|
40
|
+
ok: boolean;
|
|
41
|
+
memories: Array<{
|
|
42
|
+
id: string;
|
|
43
|
+
type: string;
|
|
44
|
+
content: string;
|
|
45
|
+
place?: string;
|
|
46
|
+
placeType?: string;
|
|
47
|
+
}>;
|
|
48
|
+
places: Array<{
|
|
49
|
+
name: string;
|
|
50
|
+
type: string;
|
|
51
|
+
purpose?: string;
|
|
52
|
+
memories: number;
|
|
53
|
+
preview?: string[];
|
|
54
|
+
}>;
|
|
55
|
+
sessionId?: string;
|
|
56
|
+
tokens?: number;
|
|
57
|
+
}>;
|
|
58
|
+
/**
|
|
59
|
+
* Search memories with automatic place detection
|
|
60
|
+
*
|
|
61
|
+
* If query contains keywords associated with a place (e.g., "fix" -> Workshop),
|
|
62
|
+
* it will automatically include that place in results or boost those results.
|
|
63
|
+
*/
|
|
64
|
+
export declare function searchWithPlace(projectPath: string, query: string, options?: SearchOptions): Promise<{
|
|
65
|
+
ok: boolean;
|
|
66
|
+
query: string;
|
|
67
|
+
autoDetectedPlace?: string;
|
|
68
|
+
count: number;
|
|
69
|
+
results: Array<{
|
|
70
|
+
id: string;
|
|
71
|
+
type: string;
|
|
72
|
+
content: string;
|
|
73
|
+
score: number;
|
|
74
|
+
place?: string;
|
|
75
|
+
placeType?: string;
|
|
76
|
+
}>;
|
|
77
|
+
}>;
|
|
78
|
+
/**
|
|
79
|
+
* Get single memory with place info
|
|
80
|
+
*/
|
|
81
|
+
export declare function getMemoryWithPlace(projectPath: string, memoryId: string): Promise<{
|
|
82
|
+
ok: boolean;
|
|
83
|
+
memory?: {
|
|
84
|
+
id: string;
|
|
85
|
+
type: string;
|
|
86
|
+
content: string;
|
|
87
|
+
tags: string[];
|
|
88
|
+
createdAt: Date;
|
|
89
|
+
place?: string;
|
|
90
|
+
placeType?: string;
|
|
91
|
+
};
|
|
92
|
+
}>;
|
|
93
|
+
/**
|
|
94
|
+
* Quick context for session start - lightweight version
|
|
95
|
+
* Use this when you just need the basics without full context
|
|
96
|
+
*/
|
|
97
|
+
export declare function getQuickContext(projectPath: string, limit?: number): Promise<{
|
|
98
|
+
ok: boolean;
|
|
99
|
+
memories: Array<{
|
|
100
|
+
id: string;
|
|
101
|
+
type: string;
|
|
102
|
+
content: string;
|
|
103
|
+
}>;
|
|
104
|
+
activePlaces: string[];
|
|
105
|
+
}>;
|
|
106
|
+
//# sourceMappingURL=agent-context.d.ts.map
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Context API - Direct access for agents
|
|
3
|
+
*
|
|
4
|
+
* Provides a simple API for agents to get context without CLI calls.
|
|
5
|
+
* Use this instead of spawning squish CLI processes.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* import { getAgentContext, searchWithPlace } from './core/context/agent-context.js';
|
|
9
|
+
*
|
|
10
|
+
* const context = await getAgentContext(projectPath, { task: "fix bug" });
|
|
11
|
+
* const results = await searchWithPlace(projectPath, "error fix", { limit: 5 });
|
|
12
|
+
*/
|
|
13
|
+
import { getRecent, search } from '../memory/memories.js';
|
|
14
|
+
import { getProjectByPath } from '../projects.js';
|
|
15
|
+
import { ensureProject } from '../projects.js';
|
|
16
|
+
import { initializeDefaultPlaces, getProjectPlaces, getMemoryPlace, getPlace, walkPlace } from '../places/index.js';
|
|
17
|
+
import { logger } from '../logger.js';
|
|
18
|
+
/**
|
|
19
|
+
* Get agent context - the main function I can call directly
|
|
20
|
+
*
|
|
21
|
+
* Instead of: squish context --tier medium --has-memories
|
|
22
|
+
* Use: const ctx = await getAgentContext(projectPath, { task: "fix bug", tier: "medium" })
|
|
23
|
+
*/
|
|
24
|
+
export async function getAgentContext(projectPath, options = {}) {
|
|
25
|
+
try {
|
|
26
|
+
await ensureProject(projectPath);
|
|
27
|
+
const project = await getProjectByPath(projectPath);
|
|
28
|
+
if (!project) {
|
|
29
|
+
return { ok: false, memories: [], places: [] };
|
|
30
|
+
}
|
|
31
|
+
const tier = options.tier || 'medium';
|
|
32
|
+
const limit = options.limit || 5;
|
|
33
|
+
const includePlaces = options.includePlaces !== false;
|
|
34
|
+
// Get recent memories
|
|
35
|
+
const memories = await getRecent(projectPath, limit);
|
|
36
|
+
// Add place info to each memory
|
|
37
|
+
const memoriesWithPlace = await Promise.all(memories.map(async (m) => {
|
|
38
|
+
const placeId = await getMemoryPlace(m.id);
|
|
39
|
+
let placeInfo = {};
|
|
40
|
+
if (placeId) {
|
|
41
|
+
const place = await getPlace(placeId);
|
|
42
|
+
placeInfo = { place: place?.name || null, placeType: place?.placeType || null };
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
id: m.id,
|
|
46
|
+
type: m.type,
|
|
47
|
+
content: m.content || m.content,
|
|
48
|
+
...placeInfo,
|
|
49
|
+
};
|
|
50
|
+
}));
|
|
51
|
+
// Get places context
|
|
52
|
+
let places = [];
|
|
53
|
+
if (includePlaces) {
|
|
54
|
+
await initializeDefaultPlaces(project.id);
|
|
55
|
+
const projectPlaces = await getProjectPlaces(project.id);
|
|
56
|
+
// Filter to populated places only
|
|
57
|
+
const populatedPlaces = projectPlaces.filter(p => p.memoryCount > 0);
|
|
58
|
+
if (tier === 'quick') {
|
|
59
|
+
// Just names
|
|
60
|
+
places = populatedPlaces.map(p => ({
|
|
61
|
+
name: p.name,
|
|
62
|
+
type: p.placeType,
|
|
63
|
+
memories: p.memoryCount,
|
|
64
|
+
}));
|
|
65
|
+
}
|
|
66
|
+
else if (tier === 'medium') {
|
|
67
|
+
// Top 3 per place
|
|
68
|
+
const mediumPlaces = [];
|
|
69
|
+
for (const p of populatedPlaces.slice(0, 5)) {
|
|
70
|
+
const walkResult = await walkPlace(project.id, p.placeType, {
|
|
71
|
+
tokenBudget: 170,
|
|
72
|
+
maxMemoriesPerPlace: 3,
|
|
73
|
+
compressWithToon: false,
|
|
74
|
+
});
|
|
75
|
+
mediumPlaces.push({
|
|
76
|
+
name: p.name,
|
|
77
|
+
type: p.placeType,
|
|
78
|
+
purpose: p.purpose,
|
|
79
|
+
memories: p.memoryCount,
|
|
80
|
+
preview: walkResult?.memories.slice(0, 3).map((m) => m.content?.substring(0, 80)) || [],
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
places = mediumPlaces;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
// Full
|
|
87
|
+
places = populatedPlaces.map(p => ({
|
|
88
|
+
name: p.name,
|
|
89
|
+
type: p.placeType,
|
|
90
|
+
purpose: p.purpose,
|
|
91
|
+
memories: p.memoryCount,
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Estimate token count
|
|
96
|
+
const tokens = tier === 'quick' ? 50 : tier === 'medium' ? 170 : 500;
|
|
97
|
+
return {
|
|
98
|
+
ok: true,
|
|
99
|
+
memories: memoriesWithPlace,
|
|
100
|
+
places,
|
|
101
|
+
tokens,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
logger.error('[AgentContext] Error getting context:', error);
|
|
106
|
+
return { ok: false, memories: [], places: [] };
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Search memories with automatic place detection
|
|
111
|
+
*
|
|
112
|
+
* If query contains keywords associated with a place (e.g., "fix" -> Workshop),
|
|
113
|
+
* it will automatically include that place in results or boost those results.
|
|
114
|
+
*/
|
|
115
|
+
export async function searchWithPlace(projectPath, query, options = { query, limit: 10 }) {
|
|
116
|
+
try {
|
|
117
|
+
await ensureProject(projectPath);
|
|
118
|
+
const project = await getProjectByPath(projectPath);
|
|
119
|
+
if (!project) {
|
|
120
|
+
return { ok: false, query, count: 0, results: [] };
|
|
121
|
+
}
|
|
122
|
+
// Search
|
|
123
|
+
const results = await search({
|
|
124
|
+
query,
|
|
125
|
+
type: options.type,
|
|
126
|
+
limit: (options.limit || 10) * 2,
|
|
127
|
+
project: projectPath,
|
|
128
|
+
});
|
|
129
|
+
const limited = results.slice(0, options.limit || 10);
|
|
130
|
+
// Auto-detect place from query keywords
|
|
131
|
+
const autoPlace = detectPlaceFromQuery(query);
|
|
132
|
+
// Add place info to results
|
|
133
|
+
const resultsWithPlace = await Promise.all(limited.map(async (r) => {
|
|
134
|
+
const placeId = await getMemoryPlace(r.id);
|
|
135
|
+
let placeInfo = { place: null, placeType: null };
|
|
136
|
+
if (placeId) {
|
|
137
|
+
const place = await getPlace(placeId);
|
|
138
|
+
placeInfo = {
|
|
139
|
+
place: place?.name || null,
|
|
140
|
+
placeType: place?.placeType || null,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
id: r.id,
|
|
145
|
+
type: r.type,
|
|
146
|
+
content: r.content,
|
|
147
|
+
score: r.similarity ?? 0,
|
|
148
|
+
...placeInfo,
|
|
149
|
+
};
|
|
150
|
+
}));
|
|
151
|
+
// Filter by place if specified or auto-detected
|
|
152
|
+
let filtered = resultsWithPlace;
|
|
153
|
+
const placeFilter = options.place || autoPlace;
|
|
154
|
+
if (placeFilter) {
|
|
155
|
+
filtered = resultsWithPlace.filter((r) => r.placeType === placeFilter);
|
|
156
|
+
}
|
|
157
|
+
return {
|
|
158
|
+
ok: true,
|
|
159
|
+
query,
|
|
160
|
+
autoDetectedPlace: autoPlace || undefined,
|
|
161
|
+
count: filtered.length,
|
|
162
|
+
results: filtered,
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
logger.error('[AgentContext] Error searching:', error);
|
|
167
|
+
return { ok: false, query, count: 0, results: [] };
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Detect place type from query keywords
|
|
172
|
+
*
|
|
173
|
+
* Maps common terms to place types:
|
|
174
|
+
* - fix, bug, error, issue -> workshop (fixing stuff)
|
|
175
|
+
* - design, plan, architecture, api -> library (learning/docs)
|
|
176
|
+
* - task, todo, manage, organize -> office (work management)
|
|
177
|
+
* - code, implement, feature -> workshop
|
|
178
|
+
* - research, learn, study -> library
|
|
179
|
+
* - experiment, test, try -> lab
|
|
180
|
+
* - review, archive -> archive
|
|
181
|
+
*/
|
|
182
|
+
function detectPlaceFromQuery(query) {
|
|
183
|
+
const q = query.toLowerCase();
|
|
184
|
+
// Map keywords to places
|
|
185
|
+
const keywords = {
|
|
186
|
+
workshop: ['fix', 'bug', 'error', 'issue', 'code', 'implement', 'feature', 'refactor', 'debug'],
|
|
187
|
+
library: ['design', 'plan', 'architecture', 'api', 'learn', 'research', 'study', 'documentation', 'docs'],
|
|
188
|
+
office: ['task', 'todo', 'manage', 'organize', 'schedule', 'meeting', 'project'],
|
|
189
|
+
lab: ['test', 'experiment', 'try', 'verify', 'prototype', 'poc'],
|
|
190
|
+
garden: ['idea', 'brainstorm', 'create', 'design', 'concept'],
|
|
191
|
+
archive: ['review', 'archive', 'old', 'past', 'historical'],
|
|
192
|
+
};
|
|
193
|
+
// Check each place's keywords
|
|
194
|
+
for (const [placeType, words] of Object.entries(keywords)) {
|
|
195
|
+
for (const word of words) {
|
|
196
|
+
if (q.includes(word)) {
|
|
197
|
+
return placeType;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Get single memory with place info
|
|
205
|
+
*/
|
|
206
|
+
export async function getMemoryWithPlace(projectPath, memoryId) {
|
|
207
|
+
try {
|
|
208
|
+
const { getMemory } = await import('../memory/memories.js');
|
|
209
|
+
const memory = await getMemory(memoryId);
|
|
210
|
+
if (!memory) {
|
|
211
|
+
return { ok: false };
|
|
212
|
+
}
|
|
213
|
+
// Get place info
|
|
214
|
+
const placeId = await getMemoryPlace(memoryId);
|
|
215
|
+
let placeInfo = {};
|
|
216
|
+
if (placeId) {
|
|
217
|
+
const place = await getPlace(placeId);
|
|
218
|
+
placeInfo = {
|
|
219
|
+
place: place?.name || null,
|
|
220
|
+
placeType: place?.placeType || null,
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
return {
|
|
224
|
+
ok: true,
|
|
225
|
+
memory: {
|
|
226
|
+
id: memory.id,
|
|
227
|
+
type: memory.type,
|
|
228
|
+
content: memory.content || '',
|
|
229
|
+
tags: memory.tags || [],
|
|
230
|
+
createdAt: memory.createdAt,
|
|
231
|
+
...placeInfo,
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
logger.error('[AgentContext] Error getting memory:', error);
|
|
237
|
+
return { ok: false };
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Quick context for session start - lightweight version
|
|
242
|
+
* Use this when you just need the basics without full context
|
|
243
|
+
*/
|
|
244
|
+
export async function getQuickContext(projectPath, limit = 3) {
|
|
245
|
+
try {
|
|
246
|
+
await ensureProject(projectPath);
|
|
247
|
+
const project = await getProjectByPath(projectPath);
|
|
248
|
+
if (!project) {
|
|
249
|
+
return { ok: false, memories: [], activePlaces: [] };
|
|
250
|
+
}
|
|
251
|
+
// Get recent memories
|
|
252
|
+
const memories = await getRecent(projectPath, limit);
|
|
253
|
+
// Get places with memories
|
|
254
|
+
await initializeDefaultPlaces(project.id);
|
|
255
|
+
const places = await getProjectPlaces(project.id);
|
|
256
|
+
const activePlaces = places
|
|
257
|
+
.filter(p => p.memoryCount > 0)
|
|
258
|
+
.map(p => p.name);
|
|
259
|
+
return {
|
|
260
|
+
ok: true,
|
|
261
|
+
memories: memories.map((m) => ({
|
|
262
|
+
id: m.id,
|
|
263
|
+
type: m.type,
|
|
264
|
+
content: m.content?.substring(0, 100) || '',
|
|
265
|
+
})),
|
|
266
|
+
activePlaces,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
logger.error('[AgentContext] Error getting quick context:', error);
|
|
271
|
+
return { ok: false, memories: [], activePlaces: [] };
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=agent-context.js.map
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Context Paging Service - Agent-controlled memory loading
|
|
3
|
-
*
|
|
4
|
-
* Simple memory tracking system that allows agents to:
|
|
5
|
-
* - Load memories into their working set
|
|
6
|
-
* - Evict memories from working set
|
|
7
|
-
* - View what's currently in their working set
|
|
8
|
-
*
|
|
9
|
-
* Note: This does NOT track tokens - Claude is context-aware and manages
|
|
10
|
-
* its own token budget. This just tracks WHAT memories are in the agent's
|
|
11
|
-
* current working set for visibility and management.
|
|
2
|
+
* Context Paging Service - Agent-controlled memory loading
|
|
3
|
+
* Allows agents to load/evict memories from working set
|
|
12
4
|
*/
|
|
13
5
|
interface LoadedMemory {
|
|
14
6
|
id: string;
|
|
@@ -24,7 +16,6 @@ interface LoadedMemory {
|
|
|
24
16
|
export declare function initializeContextSession(sessionId: string, projectId: string, userId?: string): Promise<void>;
|
|
25
17
|
/**
|
|
26
18
|
* Load a memory into working set
|
|
27
|
-
* Note: Claude manages its own context - this just tracks what you've loaded
|
|
28
19
|
*/
|
|
29
20
|
export declare function loadMemoryToContext(sessionId: string, memoryId: string): Promise<{
|
|
30
21
|
success: boolean;
|
|
@@ -48,7 +39,6 @@ export declare function viewLoadedMemories(sessionId: string): Promise<{
|
|
|
48
39
|
}>;
|
|
49
40
|
/**
|
|
50
41
|
* Get context status - what's in your working set and what's available
|
|
51
|
-
* Note: Claude manages its own context/tokens - this just shows WHAT you have loaded
|
|
52
42
|
*/
|
|
53
43
|
export declare function getContextStatus(sessionId: string, projectId: string): Promise<{
|
|
54
44
|
success: boolean;
|
|
@@ -1,28 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Context Paging Service - Agent-controlled memory loading
|
|
3
|
-
*
|
|
4
|
-
* Simple memory tracking system that allows agents to:
|
|
5
|
-
* - Load memories into their working set
|
|
6
|
-
* - Evict memories from working set
|
|
7
|
-
* - View what's currently in their working set
|
|
8
|
-
*
|
|
9
|
-
* Note: This does NOT track tokens - Claude is context-aware and manages
|
|
10
|
-
* its own token budget. This just tracks WHAT memories are in the agent's
|
|
11
|
-
* current working set for visibility and management.
|
|
2
|
+
* Context Paging Service - Agent-controlled memory loading
|
|
3
|
+
* Allows agents to load/evict memories from working set
|
|
12
4
|
*/
|
|
13
5
|
import { eq, and } from 'drizzle-orm';
|
|
14
6
|
import { sql } from 'drizzle-orm';
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import { createDatabaseClient } from './database.js';
|
|
18
|
-
import { getMemoryById } from './memory/memories.js';
|
|
7
|
+
import { getMemory } from '../memory/memories.js';
|
|
8
|
+
import { getDbClient } from '../lib/db-client.js';
|
|
19
9
|
/**
|
|
20
10
|
* Initialize or get a context session
|
|
21
11
|
* Simplified - just tracks what's loaded, not tokens (Claude manages its own context)
|
|
22
12
|
*/
|
|
23
13
|
export async function initializeContextSession(sessionId, projectId, userId) {
|
|
24
|
-
const db =
|
|
25
|
-
const schema = await getSchema();
|
|
14
|
+
const { db, schema } = await getDbClient();
|
|
26
15
|
const { contextSessions } = schema;
|
|
27
16
|
// Check if session exists
|
|
28
17
|
const existing = await db
|
|
@@ -46,11 +35,9 @@ export async function initializeContextSession(sessionId, projectId, userId) {
|
|
|
46
35
|
}
|
|
47
36
|
/**
|
|
48
37
|
* Load a memory into working set
|
|
49
|
-
* Note: Claude manages its own context - this just tracks what you've loaded
|
|
50
38
|
*/
|
|
51
39
|
export async function loadMemoryToContext(sessionId, memoryId) {
|
|
52
|
-
const db =
|
|
53
|
-
const schema = await getSchema();
|
|
40
|
+
const { db, schema } = await getDbClient();
|
|
54
41
|
const { contextSessions } = schema;
|
|
55
42
|
// Get session
|
|
56
43
|
const session = await db
|
|
@@ -74,7 +61,7 @@ export async function loadMemoryToContext(sessionId, memoryId) {
|
|
|
74
61
|
};
|
|
75
62
|
}
|
|
76
63
|
// Get memory
|
|
77
|
-
const memory = await
|
|
64
|
+
const memory = await getMemory(memoryId);
|
|
78
65
|
if (!memory) {
|
|
79
66
|
return {
|
|
80
67
|
success: false,
|
|
@@ -112,8 +99,7 @@ export async function loadMemoryToContext(sessionId, memoryId) {
|
|
|
112
99
|
* Evict a memory from working set
|
|
113
100
|
*/
|
|
114
101
|
export async function evictMemoryFromContext(sessionId, memoryId) {
|
|
115
|
-
const db =
|
|
116
|
-
const schema = await getSchema();
|
|
102
|
+
const { db, schema } = await getDbClient();
|
|
117
103
|
const { contextSessions } = schema;
|
|
118
104
|
// Get session
|
|
119
105
|
const session = await db
|
|
@@ -161,8 +147,7 @@ export async function evictMemoryFromContext(sessionId, memoryId) {
|
|
|
161
147
|
* View all memories in working set
|
|
162
148
|
*/
|
|
163
149
|
export async function viewLoadedMemories(sessionId) {
|
|
164
|
-
const db =
|
|
165
|
-
const schema = await getSchema();
|
|
150
|
+
const { db, schema } = await getDbClient();
|
|
166
151
|
const { contextSessions } = schema;
|
|
167
152
|
// Get session
|
|
168
153
|
const session = await db
|
|
@@ -189,7 +174,7 @@ export async function viewLoadedMemories(sessionId) {
|
|
|
189
174
|
// Get all loaded memories
|
|
190
175
|
const memories = [];
|
|
191
176
|
for (const id of loadedIds) {
|
|
192
|
-
const memory = await
|
|
177
|
+
const memory = await getMemory(id);
|
|
193
178
|
if (memory) {
|
|
194
179
|
memories.push({
|
|
195
180
|
id: memory.id,
|
|
@@ -208,12 +193,10 @@ export async function viewLoadedMemories(sessionId) {
|
|
|
208
193
|
}
|
|
209
194
|
/**
|
|
210
195
|
* Get context status - what's in your working set and what's available
|
|
211
|
-
* Note: Claude manages its own context/tokens - this just shows WHAT you have loaded
|
|
212
196
|
*/
|
|
213
197
|
export async function getContextStatus(sessionId, projectId) {
|
|
214
|
-
const db =
|
|
215
|
-
const
|
|
216
|
-
const { contextSessions, memories, observations } = schema;
|
|
198
|
+
const { db, schema } = await getDbClient();
|
|
199
|
+
const { contextSessions, memories, learnings } = schema;
|
|
217
200
|
// Get session
|
|
218
201
|
const session = await db
|
|
219
202
|
.select()
|
|
@@ -231,13 +214,13 @@ export async function getContextStatus(sessionId, projectId) {
|
|
|
231
214
|
}
|
|
232
215
|
const currentSession = session[0];
|
|
233
216
|
// Get core memory stats
|
|
234
|
-
const { getCoreMemoryStats } = await import('
|
|
217
|
+
const { getCoreMemoryStats } = await import('../ingestion/core-memory.js');
|
|
235
218
|
const coreStats = await getCoreMemoryStats(projectId);
|
|
236
219
|
// Get loaded memories
|
|
237
220
|
const loadedIds = currentSession.loadedMemoryIds || [];
|
|
238
221
|
const loadedMemories = [];
|
|
239
222
|
for (const id of loadedIds) {
|
|
240
|
-
const memory = await
|
|
223
|
+
const memory = await getMemory(id);
|
|
241
224
|
if (memory) {
|
|
242
225
|
loadedMemories.push({
|
|
243
226
|
id: memory.id,
|
|
@@ -253,8 +236,8 @@ export async function getContextStatus(sessionId, projectId) {
|
|
|
253
236
|
.where(eq(memories.projectId, projectId));
|
|
254
237
|
const totalObservations = await db
|
|
255
238
|
.select()
|
|
256
|
-
.from(
|
|
257
|
-
.where(eq(
|
|
239
|
+
.from(learnings)
|
|
240
|
+
.where(eq(learnings.projectId, projectId));
|
|
258
241
|
return {
|
|
259
242
|
success: true,
|
|
260
243
|
coreMemory: {
|
|
@@ -277,8 +260,7 @@ export async function getContextStatus(sessionId, projectId) {
|
|
|
277
260
|
* Clear all loaded memories from working set
|
|
278
261
|
*/
|
|
279
262
|
export async function clearLoadedMemories(sessionId) {
|
|
280
|
-
const db =
|
|
281
|
-
const schema = await getSchema();
|
|
263
|
+
const { db, schema } = await getDbClient();
|
|
282
264
|
const { contextSessions } = schema;
|
|
283
265
|
await db
|
|
284
266
|
.update(contextSessions)
|
|
@@ -296,8 +278,7 @@ export async function clearLoadedMemories(sessionId) {
|
|
|
296
278
|
* Get all memories currently marked as in-context for a session
|
|
297
279
|
*/
|
|
298
280
|
export async function getInContextMemories(sessionId) {
|
|
299
|
-
const db =
|
|
300
|
-
const schema = await getSchema();
|
|
281
|
+
const { db, schema } = await getDbClient();
|
|
301
282
|
const { contextSessions } = schema;
|
|
302
283
|
// Get session to find project
|
|
303
284
|
const session = await db
|
|
@@ -327,8 +308,7 @@ export async function getInContextMemories(sessionId) {
|
|
|
327
308
|
* Get out-of-context (archived) memories for a project
|
|
328
309
|
*/
|
|
329
310
|
export async function getOutOfContextMemories(projectId, limit = 10) {
|
|
330
|
-
const db =
|
|
331
|
-
const schema = await getSchema();
|
|
311
|
+
const { db, schema } = await getDbClient();
|
|
332
312
|
const { memories } = schema;
|
|
333
313
|
// Get out-of-context memories, ordered by last accessed
|
|
334
314
|
const outOfContextMemories = await db
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export interface ContextWindowConfig {
|
|
2
|
+
maxTokens: number;
|
|
3
|
+
warningThreshold: number;
|
|
4
|
+
criticalThreshold: number;
|
|
5
|
+
}
|
|
6
|
+
export declare const DEFAULT_CONTEXT_CONFIG: ContextWindowConfig;
|
|
7
|
+
export interface TokenUsageStats {
|
|
8
|
+
coreMemoryTokens: number;
|
|
9
|
+
memoriesTokens: number;
|
|
10
|
+
totalTokens: number;
|
|
11
|
+
maxTokens: number;
|
|
12
|
+
usagePercent: number;
|
|
13
|
+
status: 'ok' | 'warning' | 'critical';
|
|
14
|
+
remainingTokens: number;
|
|
15
|
+
}
|
|
16
|
+
export interface OptimizationSuggestion {
|
|
17
|
+
type: 'drop' | 'summarize' | 'consolidate';
|
|
18
|
+
memoryId: string;
|
|
19
|
+
memoryType: string;
|
|
20
|
+
contentPreview: string;
|
|
21
|
+
tokens: number;
|
|
22
|
+
reason: string;
|
|
23
|
+
priority: number;
|
|
24
|
+
}
|
|
25
|
+
export declare function estimateTokens(content: string): number;
|
|
26
|
+
export declare function getTokenUsage(projectPath: string): Promise<TokenUsageStats>;
|
|
27
|
+
export declare function checkContextLimit(projectPath: string, additionalTokens: number): Promise<{
|
|
28
|
+
ok: boolean;
|
|
29
|
+
warning?: string;
|
|
30
|
+
stats: TokenUsageStats;
|
|
31
|
+
}>;
|
|
32
|
+
export declare function getOptimizationSuggestions(projectPath: string): Promise<OptimizationSuggestion[]>;
|
|
33
|
+
export declare function getContextWindowStatus(projectPath: string): Promise<{
|
|
34
|
+
config: ContextWindowConfig;
|
|
35
|
+
usage: TokenUsageStats;
|
|
36
|
+
suggestions: OptimizationSuggestion[];
|
|
37
|
+
memoryCount: number;
|
|
38
|
+
coreMemorySections: number;
|
|
39
|
+
}>;
|
|
40
|
+
//# sourceMappingURL=context-window.d.ts.map
|