squish-memory 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +20 -0
- package/.claude-plugin/plugin.json +32 -0
- package/.mcp.json +14 -0
- package/LICENSE +21 -0
- package/README.md +556 -0
- package/commands/context-paging.md +51 -0
- package/commands/context-status.md +22 -0
- package/commands/context.md +5 -0
- package/commands/core-memory.md +56 -0
- package/commands/health.md +5 -0
- package/commands/init.md +39 -0
- package/commands/merge.md +113 -0
- package/commands/observe.md +5 -0
- package/commands/recall.md +5 -0
- package/commands/remember.md +11 -0
- package/commands/search.md +10 -0
- package/dist/adapters/claude-code/capture.d.ts +11 -0
- package/dist/adapters/claude-code/capture.d.ts.map +1 -0
- package/dist/adapters/claude-code/capture.js +100 -0
- package/dist/adapters/claude-code/capture.js.map +1 -0
- package/dist/adapters/claude-code/index.d.ts +5 -0
- package/dist/adapters/claude-code/index.d.ts.map +1 -0
- package/dist/adapters/claude-code/index.js +6 -0
- package/dist/adapters/claude-code/index.js.map +1 -0
- package/dist/adapters/claude-code/injection.d.ts +34 -0
- package/dist/adapters/claude-code/injection.d.ts.map +1 -0
- package/dist/adapters/claude-code/injection.js +127 -0
- package/dist/adapters/claude-code/injection.js.map +1 -0
- package/dist/adapters/claude-code/plugin-wrapper.d.ts +21 -0
- package/dist/adapters/claude-code/plugin-wrapper.d.ts.map +1 -0
- package/dist/adapters/claude-code/plugin-wrapper.js +239 -0
- package/dist/adapters/claude-code/plugin-wrapper.js.map +1 -0
- package/dist/adapters/claude-code/types.d.ts +46 -0
- package/dist/adapters/claude-code/types.d.ts.map +1 -0
- package/dist/adapters/claude-code/types.js +6 -0
- package/dist/adapters/claude-code/types.js.map +1 -0
- package/dist/algorithms/merge/analytics/token-estimator.d.ts +50 -0
- package/dist/algorithms/merge/analytics/token-estimator.d.ts.map +1 -0
- package/dist/algorithms/merge/analytics/token-estimator.js +154 -0
- package/dist/algorithms/merge/analytics/token-estimator.js.map +1 -0
- package/dist/algorithms/merge/detection/hash-filters.d.ts +47 -0
- package/dist/algorithms/merge/detection/hash-filters.d.ts.map +1 -0
- package/dist/algorithms/merge/detection/hash-filters.js +190 -0
- package/dist/algorithms/merge/detection/hash-filters.js.map +1 -0
- package/dist/algorithms/merge/detection/semantic-ranker.d.ts +32 -0
- package/dist/algorithms/merge/detection/semantic-ranker.d.ts.map +1 -0
- package/dist/algorithms/merge/detection/semantic-ranker.js +118 -0
- package/dist/algorithms/merge/detection/semantic-ranker.js.map +1 -0
- package/dist/algorithms/merge/detection/two-stage-detector.d.ts +49 -0
- package/dist/algorithms/merge/detection/two-stage-detector.d.ts.map +1 -0
- package/dist/algorithms/merge/detection/two-stage-detector.js +185 -0
- package/dist/algorithms/merge/detection/two-stage-detector.js.map +1 -0
- package/dist/algorithms/merge/handlers/approve-merge.d.ts +22 -0
- package/dist/algorithms/merge/handlers/approve-merge.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/approve-merge.js +179 -0
- package/dist/algorithms/merge/handlers/approve-merge.js.map +1 -0
- package/dist/algorithms/merge/handlers/detect-duplicates.d.ts +47 -0
- package/dist/algorithms/merge/handlers/detect-duplicates.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/detect-duplicates.js +165 -0
- package/dist/algorithms/merge/handlers/detect-duplicates.js.map +1 -0
- package/dist/algorithms/merge/handlers/get-stats.d.ts +39 -0
- package/dist/algorithms/merge/handlers/get-stats.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/get-stats.js +88 -0
- package/dist/algorithms/merge/handlers/get-stats.js.map +1 -0
- package/dist/algorithms/merge/handlers/list-proposals.d.ts +45 -0
- package/dist/algorithms/merge/handlers/list-proposals.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/list-proposals.js +83 -0
- package/dist/algorithms/merge/handlers/list-proposals.js.map +1 -0
- package/dist/algorithms/merge/handlers/preview-merge.d.ts +39 -0
- package/dist/algorithms/merge/handlers/preview-merge.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/preview-merge.js +93 -0
- package/dist/algorithms/merge/handlers/preview-merge.js.map +1 -0
- package/dist/algorithms/merge/handlers/reject-merge.d.ts +28 -0
- package/dist/algorithms/merge/handlers/reject-merge.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/reject-merge.js +69 -0
- package/dist/algorithms/merge/handlers/reject-merge.js.map +1 -0
- package/dist/algorithms/merge/handlers/reverse-merge.d.ts +21 -0
- package/dist/algorithms/merge/handlers/reverse-merge.d.ts.map +1 -0
- package/dist/algorithms/merge/handlers/reverse-merge.js +121 -0
- package/dist/algorithms/merge/handlers/reverse-merge.js.map +1 -0
- package/dist/algorithms/merge/safety/safety-checks.d.ts +22 -0
- package/dist/algorithms/merge/safety/safety-checks.d.ts.map +1 -0
- package/dist/algorithms/merge/safety/safety-checks.js +215 -0
- package/dist/algorithms/merge/safety/safety-checks.js.map +1 -0
- package/dist/algorithms/merge/strategies/merge-strategies.d.ts +32 -0
- package/dist/algorithms/merge/strategies/merge-strategies.d.ts.map +1 -0
- package/dist/algorithms/merge/strategies/merge-strategies.js +337 -0
- package/dist/algorithms/merge/strategies/merge-strategies.js.map +1 -0
- package/dist/api/web/web.d.ts +4 -0
- package/dist/api/web/web.d.ts.map +1 -0
- package/dist/api/web/web.js +484 -0
- package/dist/api/web/web.js.map +1 -0
- package/dist/config.d.ts +28 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +83 -0
- package/dist/config.js.map +1 -0
- package/dist/core/agent-memory.d.ts +22 -0
- package/dist/core/agent-memory.d.ts.map +1 -0
- package/dist/core/agent-memory.js +111 -0
- package/dist/core/agent-memory.js.map +1 -0
- package/dist/core/associations.d.ts +32 -0
- package/dist/core/associations.d.ts.map +1 -0
- package/dist/core/associations.js +249 -0
- package/dist/core/associations.js.map +1 -0
- package/dist/core/cache.d.ts +13 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +202 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/consolidation.d.ts +6 -0
- package/dist/core/consolidation.d.ts.map +1 -0
- package/dist/core/consolidation.js +40 -0
- package/dist/core/consolidation.js.map +1 -0
- package/dist/core/context-paging.d.ts +90 -0
- package/dist/core/context-paging.d.ts.map +1 -0
- package/dist/core/context-paging.js +348 -0
- package/dist/core/context-paging.js.map +1 -0
- package/dist/core/context.d.ts +7 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +24 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/core-memory.d.ts +73 -0
- package/dist/core/core-memory.d.ts.map +1 -0
- package/dist/core/core-memory.js +214 -0
- package/dist/core/core-memory.js.map +1 -0
- package/dist/core/database.d.ts +12 -0
- package/dist/core/database.d.ts.map +1 -0
- package/dist/core/database.js +12 -0
- package/dist/core/database.js.map +1 -0
- package/dist/core/embeddings/qmd-client.d.ts +136 -0
- package/dist/core/embeddings/qmd-client.d.ts.map +1 -0
- package/dist/core/embeddings/qmd-client.js +403 -0
- package/dist/core/embeddings/qmd-client.js.map +1 -0
- package/dist/core/embeddings/qmd-provider.d.ts +65 -0
- package/dist/core/embeddings/qmd-provider.d.ts.map +1 -0
- package/dist/core/embeddings/qmd-provider.js +133 -0
- package/dist/core/embeddings/qmd-provider.js.map +1 -0
- package/dist/core/embeddings.d.ts +19 -0
- package/dist/core/embeddings.d.ts.map +1 -0
- package/dist/core/embeddings.js +297 -0
- package/dist/core/embeddings.js.map +1 -0
- package/dist/core/governance.d.ts +21 -0
- package/dist/core/governance.d.ts.map +1 -0
- package/dist/core/governance.js +64 -0
- package/dist/core/governance.js.map +1 -0
- package/dist/core/index.d.ts +10 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +14 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lifecycle.d.ts +19 -0
- package/dist/core/lifecycle.d.ts.map +1 -0
- package/dist/core/lifecycle.js +182 -0
- package/dist/core/lifecycle.js.map +1 -0
- package/dist/core/local-embeddings.d.ts +14 -0
- package/dist/core/local-embeddings.d.ts.map +1 -0
- package/dist/core/local-embeddings.js +94 -0
- package/dist/core/local-embeddings.js.map +1 -0
- package/dist/core/logger.d.ts +16 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +34 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/memory/bridge-discovery.d.ts +50 -0
- package/dist/core/memory/bridge-discovery.d.ts.map +1 -0
- package/dist/core/memory/bridge-discovery.js +291 -0
- package/dist/core/memory/bridge-discovery.js.map +1 -0
- package/dist/core/memory/entity-extractor.d.ts +33 -0
- package/dist/core/memory/entity-extractor.d.ts.map +1 -0
- package/dist/core/memory/entity-extractor.js +336 -0
- package/dist/core/memory/entity-extractor.js.map +1 -0
- package/dist/core/memory/entity-resolver.d.ts +23 -0
- package/dist/core/memory/entity-resolver.d.ts.map +1 -0
- package/dist/core/memory/entity-resolver.js +64 -0
- package/dist/core/memory/entity-resolver.js.map +1 -0
- package/dist/core/memory/fact-extractor.d.ts +24 -0
- package/dist/core/memory/fact-extractor.d.ts.map +1 -0
- package/dist/core/memory/fact-extractor.js +89 -0
- package/dist/core/memory/fact-extractor.js.map +1 -0
- package/dist/core/memory/hybrid-retrieval.d.ts +30 -0
- package/dist/core/memory/hybrid-retrieval.d.ts.map +1 -0
- package/dist/core/memory/hybrid-retrieval.js +63 -0
- package/dist/core/memory/hybrid-retrieval.js.map +1 -0
- package/dist/core/memory/hybrid-scorer.d.ts +51 -0
- package/dist/core/memory/hybrid-scorer.d.ts.map +1 -0
- package/dist/core/memory/hybrid-scorer.js +248 -0
- package/dist/core/memory/hybrid-scorer.js.map +1 -0
- package/dist/core/memory/index.d.ts +8 -0
- package/dist/core/memory/index.d.ts.map +1 -0
- package/dist/core/memory/index.js +10 -0
- package/dist/core/memory/index.js.map +1 -0
- package/dist/core/memory/memories.d.ts +35 -0
- package/dist/core/memory/memories.d.ts.map +1 -0
- package/dist/core/memory/memories.js +338 -0
- package/dist/core/memory/memories.js.map +1 -0
- package/dist/core/memory/memory-manager.d.ts +15 -0
- package/dist/core/memory/memory-manager.d.ts.map +1 -0
- package/dist/core/memory/memory-manager.js +46 -0
- package/dist/core/memory/memory-manager.js.map +1 -0
- package/dist/core/memory/query-processor.d.ts +21 -0
- package/dist/core/memory/query-processor.d.ts.map +1 -0
- package/dist/core/memory/query-processor.js +72 -0
- package/dist/core/memory/query-processor.js.map +1 -0
- package/dist/core/memory/serialization.d.ts +6 -0
- package/dist/core/memory/serialization.d.ts.map +1 -0
- package/dist/core/memory/serialization.js +35 -0
- package/dist/core/memory/serialization.js.map +1 -0
- package/dist/core/memory/temporal-parser.d.ts +32 -0
- package/dist/core/memory/temporal-parser.d.ts.map +1 -0
- package/dist/core/memory/temporal-parser.js +385 -0
- package/dist/core/memory/temporal-parser.js.map +1 -0
- package/dist/core/observations.d.ts +26 -0
- package/dist/core/observations.d.ts.map +1 -0
- package/dist/core/observations.js +118 -0
- package/dist/core/observations.js.map +1 -0
- package/dist/core/privacy.d.ts +23 -0
- package/dist/core/privacy.d.ts.map +1 -0
- package/dist/core/privacy.js +82 -0
- package/dist/core/privacy.js.map +1 -0
- package/dist/core/projects.d.ts +10 -0
- package/dist/core/projects.d.ts.map +1 -0
- package/dist/core/projects.js +66 -0
- package/dist/core/projects.js.map +1 -0
- package/dist/core/redis.d.ts +11 -0
- package/dist/core/redis.d.ts.map +1 -0
- package/dist/core/redis.js +69 -0
- package/dist/core/redis.js.map +1 -0
- package/dist/core/requirements.d.ts +20 -0
- package/dist/core/requirements.d.ts.map +1 -0
- package/dist/core/requirements.js +35 -0
- package/dist/core/requirements.js.map +1 -0
- package/dist/core/search/conversations.d.ts +25 -0
- package/dist/core/search/conversations.d.ts.map +1 -0
- package/dist/core/search/conversations.js +112 -0
- package/dist/core/search/conversations.js.map +1 -0
- package/dist/core/search/entities.d.ts +12 -0
- package/dist/core/search/entities.d.ts.map +1 -0
- package/dist/core/search/entities.js +34 -0
- package/dist/core/search/entities.js.map +1 -0
- package/dist/core/search/folder-context.d.ts +25 -0
- package/dist/core/search/folder-context.d.ts.map +1 -0
- package/dist/core/search/folder-context.js +119 -0
- package/dist/core/search/folder-context.js.map +1 -0
- package/dist/core/search/index.d.ts +4 -0
- package/dist/core/search/index.d.ts.map +1 -0
- package/dist/core/search/index.js +5 -0
- package/dist/core/search/index.js.map +1 -0
- package/dist/core/search/qmd-search.d.ts +61 -0
- package/dist/core/search/qmd-search.d.ts.map +1 -0
- package/dist/core/search/qmd-search.js +178 -0
- package/dist/core/search/qmd-search.js.map +1 -0
- package/dist/core/secret-detector.d.ts +32 -0
- package/dist/core/secret-detector.d.ts.map +1 -0
- package/dist/core/secret-detector.js +88 -0
- package/dist/core/secret-detector.js.map +1 -0
- package/dist/core/snapshots/cleanup.d.ts +9 -0
- package/dist/core/snapshots/cleanup.d.ts.map +1 -0
- package/dist/core/snapshots/cleanup.js +12 -0
- package/dist/core/snapshots/cleanup.js.map +1 -0
- package/dist/core/snapshots/comparison.d.ts +19 -0
- package/dist/core/snapshots/comparison.d.ts.map +1 -0
- package/dist/core/snapshots/comparison.js +37 -0
- package/dist/core/snapshots/comparison.js.map +1 -0
- package/dist/core/snapshots/creation.d.ts +19 -0
- package/dist/core/snapshots/creation.d.ts.map +1 -0
- package/dist/core/snapshots/creation.js +126 -0
- package/dist/core/snapshots/creation.js.map +1 -0
- package/dist/core/snapshots/retrieval.d.ts +7 -0
- package/dist/core/snapshots/retrieval.d.ts.map +1 -0
- package/dist/core/snapshots/retrieval.js +41 -0
- package/dist/core/snapshots/retrieval.js.map +1 -0
- package/dist/core/snapshots/stats.d.ts +11 -0
- package/dist/core/snapshots/stats.d.ts.map +1 -0
- package/dist/core/snapshots/stats.js +52 -0
- package/dist/core/snapshots/stats.js.map +1 -0
- package/dist/core/snapshots.d.ts +29 -0
- package/dist/core/snapshots.d.ts.map +1 -0
- package/dist/core/snapshots.js +220 -0
- package/dist/core/snapshots.js.map +1 -0
- package/dist/core/summarization/cleanup.d.ts +9 -0
- package/dist/core/summarization/cleanup.d.ts.map +1 -0
- package/dist/core/summarization/cleanup.js +12 -0
- package/dist/core/summarization/cleanup.js.map +1 -0
- package/dist/core/summarization/queries.d.ts +9 -0
- package/dist/core/summarization/queries.d.ts.map +1 -0
- package/dist/core/summarization/queries.js +28 -0
- package/dist/core/summarization/queries.js.map +1 -0
- package/dist/core/summarization/stats.d.ts +14 -0
- package/dist/core/summarization/stats.d.ts.map +1 -0
- package/dist/core/summarization/stats.js +52 -0
- package/dist/core/summarization/stats.js.map +1 -0
- package/dist/core/summarization/strategies.d.ts +24 -0
- package/dist/core/summarization/strategies.d.ts.map +1 -0
- package/dist/core/summarization/strategies.js +28 -0
- package/dist/core/summarization/strategies.js.map +1 -0
- package/dist/core/summarization.d.ts +37 -0
- package/dist/core/summarization.d.ts.map +1 -0
- package/dist/core/summarization.js +188 -0
- package/dist/core/summarization.js.map +1 -0
- package/dist/core/sync/qmd-sync.d.ts +106 -0
- package/dist/core/sync/qmd-sync.d.ts.map +1 -0
- package/dist/core/sync/qmd-sync.js +213 -0
- package/dist/core/sync/qmd-sync.js.map +1 -0
- package/dist/core/temporal-facts.d.ts +54 -0
- package/dist/core/temporal-facts.d.ts.map +1 -0
- package/dist/core/temporal-facts.js +193 -0
- package/dist/core/temporal-facts.js.map +1 -0
- package/dist/core/utils/cleanup-operations.d.ts +13 -0
- package/dist/core/utils/cleanup-operations.d.ts.map +1 -0
- package/dist/core/utils/cleanup-operations.js +44 -0
- package/dist/core/utils/cleanup-operations.js.map +1 -0
- package/dist/core/utils/content-extraction.d.ts +19 -0
- package/dist/core/utils/content-extraction.d.ts.map +1 -0
- package/dist/core/utils/content-extraction.js +65 -0
- package/dist/core/utils/content-extraction.js.map +1 -0
- package/dist/core/utils/filter-builder.d.ts +13 -0
- package/dist/core/utils/filter-builder.d.ts.map +1 -0
- package/dist/core/utils/filter-builder.js +44 -0
- package/dist/core/utils/filter-builder.js.map +1 -0
- package/dist/core/utils/history-traversal.d.ts +13 -0
- package/dist/core/utils/history-traversal.d.ts.map +1 -0
- package/dist/core/utils/history-traversal.js +50 -0
- package/dist/core/utils/history-traversal.js.map +1 -0
- package/dist/core/utils/memory-operations.d.ts +17 -0
- package/dist/core/utils/memory-operations.d.ts.map +1 -0
- package/dist/core/utils/memory-operations.js +41 -0
- package/dist/core/utils/memory-operations.js.map +1 -0
- package/dist/core/utils/query-operations.d.ts +18 -0
- package/dist/core/utils/query-operations.d.ts.map +1 -0
- package/dist/core/utils/query-operations.js +65 -0
- package/dist/core/utils/query-operations.js.map +1 -0
- package/dist/core/utils/summarization-helpers.d.ts +21 -0
- package/dist/core/utils/summarization-helpers.d.ts.map +1 -0
- package/dist/core/utils/summarization-helpers.js +35 -0
- package/dist/core/utils/summarization-helpers.js.map +1 -0
- package/dist/core/utils/temporal-queries.d.ts +13 -0
- package/dist/core/utils/temporal-queries.d.ts.map +1 -0
- package/dist/core/utils/temporal-queries.js +27 -0
- package/dist/core/utils/temporal-queries.js.map +1 -0
- package/dist/core/utils/version-management.d.ts +9 -0
- package/dist/core/utils/version-management.d.ts.map +1 -0
- package/dist/core/utils/version-management.js +61 -0
- package/dist/core/utils/version-management.js.map +1 -0
- package/dist/core/utils.d.ts +13 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +51 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/core/worker.d.ts +62 -0
- package/dist/core/worker.d.ts.map +1 -0
- package/dist/core/worker.js +186 -0
- package/dist/core/worker.js.map +1 -0
- package/dist/db/adapter.d.ts +6 -0
- package/dist/db/adapter.d.ts.map +1 -0
- package/dist/db/adapter.js +43 -0
- package/dist/db/adapter.js.map +1 -0
- package/dist/db/bootstrap.d.ts +9 -0
- package/dist/db/bootstrap.d.ts.map +1 -0
- package/dist/db/bootstrap.js +444 -0
- package/dist/db/bootstrap.js.map +1 -0
- package/dist/db/index.d.ts +11 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +43 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/schema.d.ts +3 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +11 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/drizzle/schema-sqlite.d.ts +3046 -0
- package/dist/drizzle/schema-sqlite.d.ts.map +1 -0
- package/dist/drizzle/schema-sqlite.js +405 -0
- package/dist/drizzle/schema-sqlite.js.map +1 -0
- package/dist/drizzle/schema.d.ts +2969 -0
- package/dist/drizzle/schema.d.ts.map +1 -0
- package/dist/drizzle/schema.js +555 -0
- package/dist/drizzle/schema.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +784 -0
- package/dist/index.js.map +1 -0
- package/hooks/hooks.json +52 -0
- package/hooks/post-tool-use.js +26 -0
- package/hooks/session-end.js +28 -0
- package/hooks/session-start.js +33 -0
- package/hooks/user-prompt-submit.js +26 -0
- package/hooks/utils.js +153 -0
- package/npx-installer.js +208 -0
- package/package.json +101 -0
- package/plugin.json +32 -0
- package/skills/memory-guide/SKILL.md +198 -0
- package/skills/squish-memory/SKILL.md +87 -0
- package/skills/squish-memory/install.sh +91 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { config } from '../config.js';
|
|
2
|
+
async function clusterSimilarMemories(memories) {
|
|
3
|
+
const clusters = [];
|
|
4
|
+
const visited = new Set();
|
|
5
|
+
const threshold = config.consolidationSimilarityThreshold || 0.8;
|
|
6
|
+
for (const memory of memories) {
|
|
7
|
+
if (visited.has(memory.id))
|
|
8
|
+
continue;
|
|
9
|
+
const cluster = [memory];
|
|
10
|
+
visited.add(memory.id);
|
|
11
|
+
for (const other of memories) {
|
|
12
|
+
if (visited.has(other.id))
|
|
13
|
+
continue;
|
|
14
|
+
const similarity = computeJaccardSimilarity(memory.content, other.content);
|
|
15
|
+
if (similarity > threshold) {
|
|
16
|
+
cluster.push(other);
|
|
17
|
+
visited.add(other.id);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if (cluster.length > 0) {
|
|
21
|
+
clusters.push(cluster);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return clusters;
|
|
25
|
+
}
|
|
26
|
+
function computeJaccardSimilarity(a, b) {
|
|
27
|
+
const tokensA = new Set(a.toLowerCase().split(/\s+/).filter(t => t.length > 2));
|
|
28
|
+
const tokensB = new Set(b.toLowerCase().split(/\s+/).filter(t => t.length > 2));
|
|
29
|
+
const intersection = new Set([...tokensA].filter(x => tokensB.has(x)));
|
|
30
|
+
const union = new Set([...tokensA, ...tokensB]);
|
|
31
|
+
return union.size > 0 ? intersection.size / union.size : 0;
|
|
32
|
+
}
|
|
33
|
+
function estimateTokenRecovery(cluster) {
|
|
34
|
+
let totalTokens = 0;
|
|
35
|
+
for (const mem of cluster) {
|
|
36
|
+
totalTokens += Math.ceil((mem.content || '').length / 4);
|
|
37
|
+
}
|
|
38
|
+
return Math.max(0, totalTokens - Math.ceil(cluster[0].content.length / 4));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=consolidation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consolidation.js","sourceRoot":"","sources":["../../core/consolidation.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAWtC,KAAK,UAAU,sBAAsB,CAAC,QAAe;IACnD,MAAM,QAAQ,GAAY,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,SAAS,GAAG,MAAM,CAAC,gCAAgC,IAAI,GAAG,CAAC;IAEjE,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAAE,SAAS;QAErC,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEvB,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAE,SAAS;YAEpC,MAAM,UAAU,GAAG,wBAAwB,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3E,IAAI,UAAU,GAAG,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,wBAAwB,CAAC,CAAS,EAAE,CAAS;IACpD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAChF,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAEhF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;IAEhD,OAAO,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAc;IAC3C,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Paging Service - Agent-controlled memory loading (Tier 2)
|
|
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.
|
|
12
|
+
*/
|
|
13
|
+
interface LoadedMemory {
|
|
14
|
+
id: string;
|
|
15
|
+
type: string;
|
|
16
|
+
content: string;
|
|
17
|
+
contentPreview: string;
|
|
18
|
+
loadedAt: Date;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Initialize or get a context session
|
|
22
|
+
* Simplified - just tracks what's loaded, not tokens (Claude manages its own context)
|
|
23
|
+
*/
|
|
24
|
+
export declare function initializeContextSession(sessionId: string, projectId: string, userId?: string): Promise<void>;
|
|
25
|
+
/**
|
|
26
|
+
* Load a memory into working set
|
|
27
|
+
* Note: Claude manages its own context - this just tracks what you've loaded
|
|
28
|
+
*/
|
|
29
|
+
export declare function loadMemoryToContext(sessionId: string, memoryId: string): Promise<{
|
|
30
|
+
success: boolean;
|
|
31
|
+
message?: string;
|
|
32
|
+
memory?: LoadedMemory;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Evict a memory from working set
|
|
36
|
+
*/
|
|
37
|
+
export declare function evictMemoryFromContext(sessionId: string, memoryId: string): Promise<{
|
|
38
|
+
success: boolean;
|
|
39
|
+
message?: string;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* View all memories in working set
|
|
43
|
+
*/
|
|
44
|
+
export declare function viewLoadedMemories(sessionId: string): Promise<{
|
|
45
|
+
success: boolean;
|
|
46
|
+
memories: LoadedMemory[];
|
|
47
|
+
count: number;
|
|
48
|
+
}>;
|
|
49
|
+
/**
|
|
50
|
+
* 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
|
+
*/
|
|
53
|
+
export declare function getContextStatus(sessionId: string, projectId: string): Promise<{
|
|
54
|
+
success: boolean;
|
|
55
|
+
coreMemory: {
|
|
56
|
+
sizeBytes: number;
|
|
57
|
+
maxBytes: number;
|
|
58
|
+
usagePercent: number;
|
|
59
|
+
};
|
|
60
|
+
workingSet: {
|
|
61
|
+
loadedCount: number;
|
|
62
|
+
loadedMemories: Array<{
|
|
63
|
+
id: string;
|
|
64
|
+
type: string;
|
|
65
|
+
contentLength: number;
|
|
66
|
+
}>;
|
|
67
|
+
};
|
|
68
|
+
available: {
|
|
69
|
+
totalMemories: number;
|
|
70
|
+
totalObservations: number;
|
|
71
|
+
};
|
|
72
|
+
note: string;
|
|
73
|
+
}>;
|
|
74
|
+
/**
|
|
75
|
+
* Clear all loaded memories from working set
|
|
76
|
+
*/
|
|
77
|
+
export declare function clearLoadedMemories(sessionId: string): Promise<{
|
|
78
|
+
success: boolean;
|
|
79
|
+
message?: string;
|
|
80
|
+
}>;
|
|
81
|
+
/**
|
|
82
|
+
* Get all memories currently marked as in-context for a session
|
|
83
|
+
*/
|
|
84
|
+
export declare function getInContextMemories(sessionId: string): Promise<LoadedMemory[]>;
|
|
85
|
+
/**
|
|
86
|
+
* Get out-of-context (archived) memories for a project
|
|
87
|
+
*/
|
|
88
|
+
export declare function getOutOfContextMemories(projectId: string, limit?: number): Promise<LoadedMemory[]>;
|
|
89
|
+
export {};
|
|
90
|
+
//# sourceMappingURL=context-paging.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-paging.d.ts","sourceRoot":"","sources":["../../core/context-paging.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AASH,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,IAAI,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,wBAAwB,CAC5C,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC,CAmED;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CAqDD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,CAmDD;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,UAAU,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,KAAK,CAAC;YACpB,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;YACb,aAAa,EAAE,MAAM,CAAC;SACvB,CAAC,CAAC;KACJ,CAAC;IACF,SAAS,EAAE;QACT,aAAa,EAAE,MAAM,CAAC;QACtB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,CAsED;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACpE,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CAiBD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,EAAE,CAAC,CAqCzB;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC,CAyBzB"}
|
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Paging Service - Agent-controlled memory loading (Tier 2)
|
|
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.
|
|
12
|
+
*/
|
|
13
|
+
import { eq, and } from 'drizzle-orm';
|
|
14
|
+
import { sql } from 'drizzle-orm';
|
|
15
|
+
import { getDb } from '../db/index.js';
|
|
16
|
+
import { getSchema } from '../db/schema.js';
|
|
17
|
+
import { createDatabaseClient } from './database.js';
|
|
18
|
+
import { getMemoryById } from './memory/memories.js';
|
|
19
|
+
/**
|
|
20
|
+
* Initialize or get a context session
|
|
21
|
+
* Simplified - just tracks what's loaded, not tokens (Claude manages its own context)
|
|
22
|
+
*/
|
|
23
|
+
export async function initializeContextSession(sessionId, projectId, userId) {
|
|
24
|
+
const db = createDatabaseClient(await getDb());
|
|
25
|
+
const schema = await getSchema();
|
|
26
|
+
const { contextSessions } = schema;
|
|
27
|
+
// Check if session exists
|
|
28
|
+
const existing = await db
|
|
29
|
+
.select()
|
|
30
|
+
.from(contextSessions)
|
|
31
|
+
.where(eq(contextSessions.sessionId, sessionId))
|
|
32
|
+
.limit(1);
|
|
33
|
+
if (existing.length === 0) {
|
|
34
|
+
await db.insert(contextSessions).values({
|
|
35
|
+
sessionId,
|
|
36
|
+
projectId: projectId,
|
|
37
|
+
userId: userId || null,
|
|
38
|
+
loadedMemoryIds: JSON.stringify([]),
|
|
39
|
+
tokenBudget: 8000,
|
|
40
|
+
tokensUsed: 0,
|
|
41
|
+
coreMemoryTokens: 0,
|
|
42
|
+
loadedMemoriesTokens: 0,
|
|
43
|
+
metadata: JSON.stringify({}),
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Load a memory into working set
|
|
49
|
+
* Note: Claude manages its own context - this just tracks what you've loaded
|
|
50
|
+
*/
|
|
51
|
+
export async function loadMemoryToContext(sessionId, memoryId) {
|
|
52
|
+
const db = createDatabaseClient(await getDb());
|
|
53
|
+
const schema = await getSchema();
|
|
54
|
+
const { contextSessions } = schema;
|
|
55
|
+
// Get session
|
|
56
|
+
const session = await db
|
|
57
|
+
.select()
|
|
58
|
+
.from(contextSessions)
|
|
59
|
+
.where(eq(contextSessions.sessionId, sessionId))
|
|
60
|
+
.limit(1);
|
|
61
|
+
if (session.length === 0) {
|
|
62
|
+
return {
|
|
63
|
+
success: false,
|
|
64
|
+
message: `Session "${sessionId}" not found. Initialize session first.`,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const currentSession = session[0];
|
|
68
|
+
const loadedIds = currentSession.loadedMemoryIds || [];
|
|
69
|
+
// Check if already loaded
|
|
70
|
+
if (loadedIds.includes(memoryId)) {
|
|
71
|
+
return {
|
|
72
|
+
success: false,
|
|
73
|
+
message: `Memory "${memoryId}" is already in working set`,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// Get memory
|
|
77
|
+
const memory = await getMemoryById(memoryId);
|
|
78
|
+
if (!memory) {
|
|
79
|
+
return {
|
|
80
|
+
success: false,
|
|
81
|
+
message: `Memory "${memoryId}" not found`,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Update session
|
|
85
|
+
const newLoadedIds = [...loadedIds, memoryId];
|
|
86
|
+
await db
|
|
87
|
+
.update(contextSessions)
|
|
88
|
+
.set({
|
|
89
|
+
loadedMemoryIds: newLoadedIds,
|
|
90
|
+
updatedAt: new Date(),
|
|
91
|
+
})
|
|
92
|
+
.where(eq(contextSessions.sessionId, sessionId));
|
|
93
|
+
// Also update memory's contextStatus to 'in-context'
|
|
94
|
+
await db
|
|
95
|
+
.update(schema.memories)
|
|
96
|
+
.set({
|
|
97
|
+
contextStatus: 'in-context',
|
|
98
|
+
})
|
|
99
|
+
.where(eq(schema.memories.id, memoryId));
|
|
100
|
+
return {
|
|
101
|
+
success: true,
|
|
102
|
+
memory: {
|
|
103
|
+
id: memory.id,
|
|
104
|
+
type: memory.type,
|
|
105
|
+
content: memory.content,
|
|
106
|
+
contentPreview: memory.content.substring(0, 200) + (memory.content.length > 200 ? '...' : ''),
|
|
107
|
+
loadedAt: new Date(),
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Evict a memory from working set
|
|
113
|
+
*/
|
|
114
|
+
export async function evictMemoryFromContext(sessionId, memoryId) {
|
|
115
|
+
const db = createDatabaseClient(await getDb());
|
|
116
|
+
const schema = await getSchema();
|
|
117
|
+
const { contextSessions } = schema;
|
|
118
|
+
// Get session
|
|
119
|
+
const session = await db
|
|
120
|
+
.select()
|
|
121
|
+
.from(contextSessions)
|
|
122
|
+
.where(eq(contextSessions.sessionId, sessionId))
|
|
123
|
+
.limit(1);
|
|
124
|
+
if (session.length === 0) {
|
|
125
|
+
return {
|
|
126
|
+
success: false,
|
|
127
|
+
message: `Session "${sessionId}" not found`,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
const currentSession = session[0];
|
|
131
|
+
const loadedIds = currentSession.loadedMemoryIds || [];
|
|
132
|
+
// Check if loaded
|
|
133
|
+
if (!loadedIds.includes(memoryId)) {
|
|
134
|
+
return {
|
|
135
|
+
success: false,
|
|
136
|
+
message: `Memory "${memoryId}" is not in working set`,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
// Update session
|
|
140
|
+
const newLoadedIds = loadedIds.filter((id) => id !== memoryId);
|
|
141
|
+
await db
|
|
142
|
+
.update(contextSessions)
|
|
143
|
+
.set({
|
|
144
|
+
loadedMemoryIds: newLoadedIds,
|
|
145
|
+
updatedAt: new Date(),
|
|
146
|
+
})
|
|
147
|
+
.where(eq(contextSessions.sessionId, sessionId));
|
|
148
|
+
// Also update memory's contextStatus to 'out-of-context'
|
|
149
|
+
await db
|
|
150
|
+
.update(schema.memories)
|
|
151
|
+
.set({
|
|
152
|
+
contextStatus: 'out-of-context',
|
|
153
|
+
})
|
|
154
|
+
.where(eq(schema.memories.id, memoryId));
|
|
155
|
+
return {
|
|
156
|
+
success: true,
|
|
157
|
+
message: `Memory "${memoryId}" removed from working set`,
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* View all memories in working set
|
|
162
|
+
*/
|
|
163
|
+
export async function viewLoadedMemories(sessionId) {
|
|
164
|
+
const db = createDatabaseClient(await getDb());
|
|
165
|
+
const schema = await getSchema();
|
|
166
|
+
const { contextSessions } = schema;
|
|
167
|
+
// Get session
|
|
168
|
+
const session = await db
|
|
169
|
+
.select()
|
|
170
|
+
.from(contextSessions)
|
|
171
|
+
.where(eq(contextSessions.sessionId, sessionId))
|
|
172
|
+
.limit(1);
|
|
173
|
+
if (session.length === 0) {
|
|
174
|
+
return {
|
|
175
|
+
success: false,
|
|
176
|
+
memories: [],
|
|
177
|
+
count: 0,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
const currentSession = session[0];
|
|
181
|
+
const loadedIds = currentSession.loadedMemoryIds || [];
|
|
182
|
+
if (loadedIds.length === 0) {
|
|
183
|
+
return {
|
|
184
|
+
success: true,
|
|
185
|
+
memories: [],
|
|
186
|
+
count: 0,
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
// Get all loaded memories
|
|
190
|
+
const memories = [];
|
|
191
|
+
for (const id of loadedIds) {
|
|
192
|
+
const memory = await getMemoryById(id);
|
|
193
|
+
if (memory) {
|
|
194
|
+
memories.push({
|
|
195
|
+
id: memory.id,
|
|
196
|
+
type: memory.type,
|
|
197
|
+
content: memory.content,
|
|
198
|
+
contentPreview: memory.content.substring(0, 200) + (memory.content.length > 200 ? '...' : ''),
|
|
199
|
+
loadedAt: currentSession.updatedAt,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return {
|
|
204
|
+
success: true,
|
|
205
|
+
memories,
|
|
206
|
+
count: memories.length,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* 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
|
+
*/
|
|
213
|
+
export async function getContextStatus(sessionId, projectId) {
|
|
214
|
+
const db = createDatabaseClient(await getDb());
|
|
215
|
+
const schema = await getSchema();
|
|
216
|
+
const { contextSessions, memories, observations } = schema;
|
|
217
|
+
// Get session
|
|
218
|
+
const session = await db
|
|
219
|
+
.select()
|
|
220
|
+
.from(contextSessions)
|
|
221
|
+
.where(eq(contextSessions.sessionId, sessionId))
|
|
222
|
+
.limit(1);
|
|
223
|
+
if (session.length === 0) {
|
|
224
|
+
return {
|
|
225
|
+
success: false,
|
|
226
|
+
coreMemory: { sizeBytes: 0, maxBytes: 2048, usagePercent: 0 },
|
|
227
|
+
workingSet: { loadedCount: 0, loadedMemories: [] },
|
|
228
|
+
available: { totalMemories: 0, totalObservations: 0 },
|
|
229
|
+
note: "Session not found. Initialize session first.",
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
const currentSession = session[0];
|
|
233
|
+
// Get core memory stats
|
|
234
|
+
const { getCoreMemoryStats } = await import('./core-memory.js');
|
|
235
|
+
const coreStats = await getCoreMemoryStats(projectId);
|
|
236
|
+
// Get loaded memories
|
|
237
|
+
const loadedIds = currentSession.loadedMemoryIds || [];
|
|
238
|
+
const loadedMemories = [];
|
|
239
|
+
for (const id of loadedIds) {
|
|
240
|
+
const memory = await getMemoryById(id);
|
|
241
|
+
if (memory) {
|
|
242
|
+
loadedMemories.push({
|
|
243
|
+
id: memory.id,
|
|
244
|
+
type: memory.type,
|
|
245
|
+
contentLength: memory.content.length,
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
// Get external context stats (counts)
|
|
250
|
+
const totalMemories = await db
|
|
251
|
+
.select()
|
|
252
|
+
.from(memories)
|
|
253
|
+
.where(eq(memories.projectId, projectId));
|
|
254
|
+
const totalObservations = await db
|
|
255
|
+
.select()
|
|
256
|
+
.from(observations)
|
|
257
|
+
.where(eq(observations.projectId, projectId));
|
|
258
|
+
return {
|
|
259
|
+
success: true,
|
|
260
|
+
coreMemory: {
|
|
261
|
+
sizeBytes: coreStats.totalBytes,
|
|
262
|
+
maxBytes: coreStats.maxBytes,
|
|
263
|
+
usagePercent: coreStats.usagePercent,
|
|
264
|
+
},
|
|
265
|
+
workingSet: {
|
|
266
|
+
loadedCount: loadedMemories.length,
|
|
267
|
+
loadedMemories,
|
|
268
|
+
},
|
|
269
|
+
available: {
|
|
270
|
+
totalMemories: totalMemories.length,
|
|
271
|
+
totalObservations: totalObservations.length,
|
|
272
|
+
},
|
|
273
|
+
note: "Claude manages its own context and token limits. This shows what memories you've loaded into your working set.",
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Clear all loaded memories from working set
|
|
278
|
+
*/
|
|
279
|
+
export async function clearLoadedMemories(sessionId) {
|
|
280
|
+
const db = createDatabaseClient(await getDb());
|
|
281
|
+
const schema = await getSchema();
|
|
282
|
+
const { contextSessions } = schema;
|
|
283
|
+
await db
|
|
284
|
+
.update(contextSessions)
|
|
285
|
+
.set({
|
|
286
|
+
loadedMemoryIds: [],
|
|
287
|
+
updatedAt: new Date(),
|
|
288
|
+
})
|
|
289
|
+
.where(eq(contextSessions.sessionId, sessionId));
|
|
290
|
+
return {
|
|
291
|
+
success: true,
|
|
292
|
+
message: 'All memories cleared from working set',
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Get all memories currently marked as in-context for a session
|
|
297
|
+
*/
|
|
298
|
+
export async function getInContextMemories(sessionId) {
|
|
299
|
+
const db = createDatabaseClient(await getDb());
|
|
300
|
+
const schema = await getSchema();
|
|
301
|
+
const { contextSessions } = schema;
|
|
302
|
+
// Get session to find project
|
|
303
|
+
const session = await db
|
|
304
|
+
.select()
|
|
305
|
+
.from(contextSessions)
|
|
306
|
+
.where(eq(contextSessions.sessionId, sessionId))
|
|
307
|
+
.limit(1);
|
|
308
|
+
if (session.length === 0) {
|
|
309
|
+
return [];
|
|
310
|
+
}
|
|
311
|
+
const { memories } = schema;
|
|
312
|
+
const projectId = session[0].projectId;
|
|
313
|
+
// Get all in-context memories
|
|
314
|
+
const inContextMemories = await db
|
|
315
|
+
.select()
|
|
316
|
+
.from(memories)
|
|
317
|
+
.where(and(eq(memories.projectId, projectId), eq(memories.contextStatus, 'in-context')));
|
|
318
|
+
return inContextMemories.map((mem) => ({
|
|
319
|
+
id: mem.id,
|
|
320
|
+
type: mem.type,
|
|
321
|
+
content: mem.content,
|
|
322
|
+
contentPreview: mem.content.substring(0, 200) + (mem.content.length > 200 ? '...' : ''),
|
|
323
|
+
loadedAt: mem.updatedAt,
|
|
324
|
+
}));
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Get out-of-context (archived) memories for a project
|
|
328
|
+
*/
|
|
329
|
+
export async function getOutOfContextMemories(projectId, limit = 10) {
|
|
330
|
+
const db = createDatabaseClient(await getDb());
|
|
331
|
+
const schema = await getSchema();
|
|
332
|
+
const { memories } = schema;
|
|
333
|
+
// Get out-of-context memories, ordered by last accessed
|
|
334
|
+
const outOfContextMemories = await db
|
|
335
|
+
.select()
|
|
336
|
+
.from(memories)
|
|
337
|
+
.where(and(eq(memories.projectId, projectId), eq(memories.contextStatus, 'out-of-context')))
|
|
338
|
+
.orderBy(sql `COALESCE(${memories.lastAccessedAt}, ${memories.createdAt}) DESC`)
|
|
339
|
+
.limit(limit);
|
|
340
|
+
return outOfContextMemories.map((mem) => ({
|
|
341
|
+
id: mem.id,
|
|
342
|
+
type: mem.type,
|
|
343
|
+
content: mem.content,
|
|
344
|
+
contentPreview: mem.content.substring(0, 200) + (mem.content.length > 200 ? '...' : ''),
|
|
345
|
+
loadedAt: mem.lastAccessedAt || mem.createdAt,
|
|
346
|
+
}));
|
|
347
|
+
}
|
|
348
|
+
//# sourceMappingURL=context-paging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-paging.js","sourceRoot":"","sources":["../../core/context-paging.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export interface ContextInput {
|
|
2
|
+
project: string;
|
|
3
|
+
include?: Array<'memories' | 'observations' | 'entities'>;
|
|
4
|
+
limit?: number;
|
|
5
|
+
}
|
|
6
|
+
export declare function getProjectContext(input: ContextInput): Promise<Record<string, unknown>>;
|
|
7
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../core/context.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG,cAAc,GAAG,UAAU,CAAC,CAAC;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAwB7F"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { getProjectByPath } from './projects.js';
|
|
2
|
+
import { getRecentMemories } from './memory/memories.js';
|
|
3
|
+
import { getObservationsForProject } from './observations.js';
|
|
4
|
+
import { getEntitiesForProject } from './search/entities.js';
|
|
5
|
+
export async function getProjectContext(input) {
|
|
6
|
+
const project = await getProjectByPath(input.project);
|
|
7
|
+
const include = input.include ?? ['memories', 'observations'];
|
|
8
|
+
const limit = Math.min(Math.max(input.limit ?? 10, 1), 100);
|
|
9
|
+
if (!project) {
|
|
10
|
+
return { project: null, memories: [], observations: [] };
|
|
11
|
+
}
|
|
12
|
+
const result = { project };
|
|
13
|
+
if (include.includes('memories')) {
|
|
14
|
+
result.memories = await getRecentMemories(project.path, limit);
|
|
15
|
+
}
|
|
16
|
+
if (include.includes('observations')) {
|
|
17
|
+
result.observations = await getObservationsForProject(project.path, limit);
|
|
18
|
+
}
|
|
19
|
+
if (include.includes('entities')) {
|
|
20
|
+
result.entities = await getEntitiesForProject(project.path, limit);
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../core/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAQ7D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,KAAmB;IACzD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAE5D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,MAAM,GAA4B,EAAE,OAAO,EAAE,CAAC;IAEpD,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,YAAY,GAAG,MAAM,yBAAyB,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,MAAM,CAAC,QAAQ,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Memory Service - Always-in-context memory (Tier 1)
|
|
3
|
+
*
|
|
4
|
+
* Small, persistent, always-visible memory block (< 2KB total).
|
|
5
|
+
* This memory is automatically injected into every agent interaction.
|
|
6
|
+
*/
|
|
7
|
+
type CoreMemorySection = 'persona' | 'user_info' | 'project_context' | 'working_notes';
|
|
8
|
+
interface CoreMemoryContent {
|
|
9
|
+
persona: string;
|
|
10
|
+
user_info: string;
|
|
11
|
+
project_context: string;
|
|
12
|
+
working_notes: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Initialize core memory for a project
|
|
16
|
+
*/
|
|
17
|
+
export declare function initializeCoreMemory(projectId: string, userId?: string): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Get all core memory sections for a project
|
|
20
|
+
*/
|
|
21
|
+
export declare function getCoreMemory(projectId: string): Promise<CoreMemoryContent>;
|
|
22
|
+
/**
|
|
23
|
+
* Get a specific core memory section
|
|
24
|
+
*/
|
|
25
|
+
export declare function getCoreMemorySection(projectId: string, section: CoreMemorySection): Promise<string>;
|
|
26
|
+
/**
|
|
27
|
+
* Update (replace) a core memory section
|
|
28
|
+
*/
|
|
29
|
+
export declare function editCoreMemorySection(projectId: string, section: CoreMemorySection, content: string): Promise<{
|
|
30
|
+
success: boolean;
|
|
31
|
+
message?: string;
|
|
32
|
+
sizeBytes?: number;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* Append content to a core memory section
|
|
36
|
+
*/
|
|
37
|
+
export declare function appendCoreMemorySection(projectId: string, section: CoreMemorySection, text: string): Promise<{
|
|
38
|
+
success: boolean;
|
|
39
|
+
message?: string;
|
|
40
|
+
sizeBytes?: number;
|
|
41
|
+
}>;
|
|
42
|
+
/**
|
|
43
|
+
* Replace text within a core memory section
|
|
44
|
+
*/
|
|
45
|
+
export declare function replaceCoreMemoryText(projectId: string, section: CoreMemorySection, oldText: string, newText: string): Promise<{
|
|
46
|
+
success: boolean;
|
|
47
|
+
message?: string;
|
|
48
|
+
sizeBytes?: number;
|
|
49
|
+
}>;
|
|
50
|
+
/**
|
|
51
|
+
* Get core memory stats
|
|
52
|
+
*/
|
|
53
|
+
export declare function getCoreMemoryStats(projectId: string): Promise<{
|
|
54
|
+
totalBytes: number;
|
|
55
|
+
maxBytes: number;
|
|
56
|
+
usagePercent: number;
|
|
57
|
+
sections: Array<{
|
|
58
|
+
section: string;
|
|
59
|
+
sizeBytes: number;
|
|
60
|
+
version: number;
|
|
61
|
+
updatedAt: Date;
|
|
62
|
+
}>;
|
|
63
|
+
}>;
|
|
64
|
+
/**
|
|
65
|
+
* Estimate token count from text (rough approximation: 1 token ≈ 4 chars)
|
|
66
|
+
*/
|
|
67
|
+
export declare function estimateTokens(text: string): number;
|
|
68
|
+
/**
|
|
69
|
+
* Get core memory formatted for context injection
|
|
70
|
+
*/
|
|
71
|
+
export declare function formatCoreMemoryForInjection(projectId: string): Promise<string>;
|
|
72
|
+
export {};
|
|
73
|
+
//# sourceMappingURL=core-memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-memory.d.ts","sourceRoot":"","sources":["../../core/core-memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,KAAK,iBAAiB,GAAG,SAAS,GAAG,WAAW,GAAG,iBAAiB,GAAG,eAAe,CAAC;AAKvF,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B5F;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAuBjF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,MAAM,CAAC,CAiBjB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwCrE;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAC1B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAKrE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAYrE;AA+BD;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IACnE,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,IAAI,CAAC;KACjB,CAAC,CAAC;CACJ,CAAC,CAuBD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkCrF"}
|