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 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../core/summarization/stats.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvE,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC,CA6CD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Summarization Statistics
|
|
3
|
+
* Analytics and statistics for summarization operations
|
|
4
|
+
*/
|
|
5
|
+
import { eq } from 'drizzle-orm';
|
|
6
|
+
import { getDb } from '../../db/index.js';
|
|
7
|
+
import { getSchema } from '../../db/schema.js';
|
|
8
|
+
import { logger } from '../logger.js';
|
|
9
|
+
/**
|
|
10
|
+
* Get summarization statistics
|
|
11
|
+
*/
|
|
12
|
+
export async function getSummarizationStats(projectId) {
|
|
13
|
+
try {
|
|
14
|
+
const db = await getDb();
|
|
15
|
+
const schema = await getSchema();
|
|
16
|
+
const where = projectId ? eq(schema.sessionSummaries.projectId, projectId) : undefined;
|
|
17
|
+
const summaries = await db.select().from(schema.sessionSummaries).where(where);
|
|
18
|
+
const stats = {
|
|
19
|
+
totalSummaries: summaries.length,
|
|
20
|
+
byType: {
|
|
21
|
+
incremental: 0,
|
|
22
|
+
rolling: 0,
|
|
23
|
+
final: 0,
|
|
24
|
+
},
|
|
25
|
+
totalTokensSaved: 0,
|
|
26
|
+
avgCompressionRatio: 0,
|
|
27
|
+
};
|
|
28
|
+
for (const s of summaries) {
|
|
29
|
+
stats.byType[s.summaryType] = (stats.byType[s.summaryType] || 0) + 1;
|
|
30
|
+
stats.totalTokensSaved += s.tokensSaved || 0;
|
|
31
|
+
}
|
|
32
|
+
// Calculate average compression ratio
|
|
33
|
+
let totalRatio = 0;
|
|
34
|
+
for (const s of summaries) {
|
|
35
|
+
if (s.compressedFrom && s.compressedFrom > 0) {
|
|
36
|
+
totalRatio += s.tokensSaved / (s.compressedFrom * 100); // Rough estimate
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
stats.avgCompressionRatio = summaries.length > 0 ? totalRatio / summaries.length : 0;
|
|
40
|
+
return stats;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
logger.error('Error getting summarization stats', error);
|
|
44
|
+
return {
|
|
45
|
+
totalSummaries: 0,
|
|
46
|
+
byType: {},
|
|
47
|
+
totalTokensSaved: 0,
|
|
48
|
+
avgCompressionRatio: 0,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=stats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../../core/summarization/stats.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,SAAkB;IAM5D,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,KAAK,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAC;QAEjC,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEvF,MAAM,SAAS,GAAG,MAAO,EAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAExF,MAAM,KAAK,GAAG;YACZ,cAAc,EAAE,SAAS,CAAC,MAAM;YAChC,MAAM,EAAE;gBACN,WAAW,EAAE,CAAC;gBACd,OAAO,EAAE,CAAC;gBACV,KAAK,EAAE,CAAC;aACiB;YAC3B,gBAAgB,EAAE,CAAC;YACnB,mBAAmB,EAAE,CAAC;SACvB,CAAC;QAEF,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACrE,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;QAC/C,CAAC;QAED,sCAAsC;QACtC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;gBAC7C,UAAU,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,CAAC,iBAAiB;YAC3E,CAAC;QACH,CAAC;QAED,KAAK,CAAC,mBAAmB,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAErF,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;QACzD,OAAO;YACL,cAAc,EAAE,CAAC;YACjB,MAAM,EAAE,EAAE;YACV,gBAAgB,EAAE,CAAC;YACnB,mBAAmB,EAAE,CAAC;SACvB,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Summarization Strategies
|
|
3
|
+
* Implements different summarization algorithms
|
|
4
|
+
*/
|
|
5
|
+
export type SummaryType = 'incremental' | 'rolling' | 'final';
|
|
6
|
+
export interface SummarizationConfig {
|
|
7
|
+
incrementalThreshold: number;
|
|
8
|
+
rollingWindowSize: number;
|
|
9
|
+
compressionRatio: number;
|
|
10
|
+
enabled: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Create incremental summary (summary in chunks)
|
|
14
|
+
*/
|
|
15
|
+
export declare function createIncrementalSummary(messages: any[], config: SummarizationConfig): Promise<string>;
|
|
16
|
+
/**
|
|
17
|
+
* Create rolling summary (last N messages)
|
|
18
|
+
*/
|
|
19
|
+
export declare function createRollingSummary(messages: any[], config: SummarizationConfig): Promise<string>;
|
|
20
|
+
/**
|
|
21
|
+
* Create final summary (entire conversation)
|
|
22
|
+
*/
|
|
23
|
+
export declare function createFinalSummary(messages: any[], config: SummarizationConfig): Promise<string>;
|
|
24
|
+
//# sourceMappingURL=strategies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategies.d.ts","sourceRoot":"","sources":["../../../core/summarization/strategies.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,GAAG,EAAE,EACf,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,GAAG,EAAE,EACf,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,GAAG,EAAE,EACf,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAEjB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Summarization Strategies
|
|
3
|
+
* Implements different summarization algorithms
|
|
4
|
+
*/
|
|
5
|
+
import { chunkMessages, getRollingWindow, } from '../utils/summarization-helpers.js';
|
|
6
|
+
import { extractMessageContent, generateExtractiveSummary } from '../utils/content-extraction.js';
|
|
7
|
+
/**
|
|
8
|
+
* Create incremental summary (summary in chunks)
|
|
9
|
+
*/
|
|
10
|
+
export async function createIncrementalSummary(messages, config) {
|
|
11
|
+
const chunks = chunkMessages(messages, config.incrementalThreshold);
|
|
12
|
+
const summaries = chunks.map(chunk => generateExtractiveSummary(extractMessageContent(chunk)));
|
|
13
|
+
return summaries.join('\n---\n');
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Create rolling summary (last N messages)
|
|
17
|
+
*/
|
|
18
|
+
export async function createRollingSummary(messages, config) {
|
|
19
|
+
const window = getRollingWindow(messages, config.rollingWindowSize);
|
|
20
|
+
return generateExtractiveSummary(extractMessageContent(window));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create final summary (entire conversation)
|
|
24
|
+
*/
|
|
25
|
+
export async function createFinalSummary(messages, config) {
|
|
26
|
+
return generateExtractiveSummary(extractMessageContent(messages));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=strategies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strategies.js","sourceRoot":"","sources":["../../../core/summarization/strategies.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,aAAa,EACb,gBAAgB,GACjB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAWlG;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,QAAe,EACf,MAA2B;IAE3B,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpE,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/F,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,QAAe,EACf,MAA2B;IAE3B,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;IACpE,OAAO,yBAAyB,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAe,EACf,MAA2B;IAE3B,OAAO,yBAAyB,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aggressive Session Summarization
|
|
3
|
+
* Implements incremental, rolling, and final summarization
|
|
4
|
+
*/
|
|
5
|
+
export type SummaryType = 'incremental' | 'rolling' | 'final';
|
|
6
|
+
export interface SummarizationConfig {
|
|
7
|
+
incrementalThreshold: number;
|
|
8
|
+
rollingWindowSize: number;
|
|
9
|
+
compressionRatio: number;
|
|
10
|
+
enabled: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Summarize a conversation session
|
|
14
|
+
*/
|
|
15
|
+
export declare function summarizeSession(conversationId: string, summaryType: SummaryType, customConfig?: Partial<SummarizationConfig>): Promise<{
|
|
16
|
+
summaryId: string;
|
|
17
|
+
tokensSaved: number;
|
|
18
|
+
summary: string;
|
|
19
|
+
}>;
|
|
20
|
+
/**
|
|
21
|
+
* Get recent summaries for a conversation
|
|
22
|
+
*/
|
|
23
|
+
export declare function getRecentSummaries(conversationId: string, limit?: number): Promise<any[]>;
|
|
24
|
+
/**
|
|
25
|
+
* Get summarization statistics
|
|
26
|
+
*/
|
|
27
|
+
export declare function getSummarizationStats(projectId?: string): Promise<{
|
|
28
|
+
totalSummaries: number;
|
|
29
|
+
byType: Record<string, number>;
|
|
30
|
+
totalTokensSaved: number;
|
|
31
|
+
avgCompressionRatio: number;
|
|
32
|
+
}>;
|
|
33
|
+
/**
|
|
34
|
+
* Delete old summaries to save space
|
|
35
|
+
*/
|
|
36
|
+
export declare function pruneOldSummaries(olderThanDays?: number): Promise<number>;
|
|
37
|
+
//# sourceMappingURL=summarization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarization.d.ts","sourceRoot":"","sources":["../../core/summarization.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH,MAAM,MAAM,WAAW,GAAG,aAAa,GAAG,SAAS,GAAG,OAAO,CAAC;AAE9D,MAAM,WAAW,mBAAmB;IAClC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;CAClB;AASD;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,WAAW,EACxB,YAAY,GAAE,OAAO,CAAC,mBAAmB,CAAM,GAC9C,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAsEtE;AAkDD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,cAAc,EAAE,MAAM,EACtB,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,GAAG,EAAE,CAAC,CAehB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACvE,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC,CA6CD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,aAAa,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAEnF"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Aggressive Session Summarization
|
|
3
|
+
* Implements incremental, rolling, and final summarization
|
|
4
|
+
*/
|
|
5
|
+
import { eq, desc } from 'drizzle-orm';
|
|
6
|
+
import { randomUUID } from 'crypto';
|
|
7
|
+
import { getDb } from '../db/index.js';
|
|
8
|
+
import { getSchema } from '../db/schema.js';
|
|
9
|
+
import { config } from '../config.js';
|
|
10
|
+
import { getEmbedding } from './embeddings.js';
|
|
11
|
+
import { cleanupOldSessionSummaries } from './utils/cleanup-operations.js';
|
|
12
|
+
import { chunkMessages, getRollingWindow, calculateTokensSaved } from './utils/summarization-helpers.js';
|
|
13
|
+
import { extractMessageContent, generateExtractiveSummary } from './utils/content-extraction.js';
|
|
14
|
+
import { logger } from './logger.js';
|
|
15
|
+
const DEFAULT_CONFIG = {
|
|
16
|
+
incrementalThreshold: config.incrementalThreshold || 10,
|
|
17
|
+
rollingWindowSize: 50,
|
|
18
|
+
compressionRatio: 0.2, // 5:1 compression
|
|
19
|
+
enabled: config.summarizationEnabled !== false,
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Summarize a conversation session
|
|
23
|
+
*/
|
|
24
|
+
export async function summarizeSession(conversationId, summaryType, customConfig = {}) {
|
|
25
|
+
const finalConfig = { ...DEFAULT_CONFIG, ...customConfig };
|
|
26
|
+
if (!finalConfig.enabled) {
|
|
27
|
+
return { summaryId: '', tokensSaved: 0, summary: '' };
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
const db = await getDb();
|
|
31
|
+
const schema = await getSchema();
|
|
32
|
+
// Fetch messages for this conversation
|
|
33
|
+
const messages = await db
|
|
34
|
+
.select()
|
|
35
|
+
.from(schema.messages)
|
|
36
|
+
.where(eq(schema.messages.conversationId, conversationId))
|
|
37
|
+
.orderBy(schema.messages.createdAt);
|
|
38
|
+
if (messages.length === 0) {
|
|
39
|
+
return { summaryId: '', tokensSaved: 0, summary: '' };
|
|
40
|
+
}
|
|
41
|
+
let summary = '';
|
|
42
|
+
switch (summaryType) {
|
|
43
|
+
case 'incremental':
|
|
44
|
+
summary = await createIncrementalSummary(messages, finalConfig);
|
|
45
|
+
break;
|
|
46
|
+
case 'rolling':
|
|
47
|
+
summary = await createRollingSummary(messages, finalConfig);
|
|
48
|
+
break;
|
|
49
|
+
case 'final':
|
|
50
|
+
summary = await createFinalSummary(messages, finalConfig);
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
if (summary) {
|
|
54
|
+
// Store summary with embedding
|
|
55
|
+
const embedding = await getEmbedding(summary);
|
|
56
|
+
const conversation = await db
|
|
57
|
+
.select()
|
|
58
|
+
.from(schema.conversations)
|
|
59
|
+
.where(eq(schema.conversations.id, conversationId))
|
|
60
|
+
.limit(1);
|
|
61
|
+
if (conversation.length > 0) {
|
|
62
|
+
const tokensSaved = estimateTokensSaved(messages, summary);
|
|
63
|
+
const summaryId = randomUUID();
|
|
64
|
+
await db.insert(schema.sessionSummaries).values({
|
|
65
|
+
id: summaryId,
|
|
66
|
+
conversationId,
|
|
67
|
+
projectId: conversation[0].projectId,
|
|
68
|
+
summaryType,
|
|
69
|
+
content: summary,
|
|
70
|
+
compressedFrom: messages.length,
|
|
71
|
+
tokensSaved,
|
|
72
|
+
embedding: embedding || null,
|
|
73
|
+
createdAt: new Date(),
|
|
74
|
+
});
|
|
75
|
+
return { summaryId, tokensSaved, summary };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return { summaryId: '', tokensSaved: 0, summary };
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
logger.error('Error summarizing session', error);
|
|
82
|
+
return { summaryId: '', tokensSaved: 0, summary: '' };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Create incremental summary (summary in chunks)
|
|
87
|
+
*/
|
|
88
|
+
async function createIncrementalSummary(messages, config) {
|
|
89
|
+
const chunks = chunkMessages(messages, config.incrementalThreshold);
|
|
90
|
+
const summaries = chunks.map(chunk => generateExtractiveSummary(extractMessageContent(chunk)));
|
|
91
|
+
return summaries.join('\n---\n');
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Create rolling summary (last N messages)
|
|
95
|
+
*/
|
|
96
|
+
async function createRollingSummary(messages, config) {
|
|
97
|
+
const window = getRollingWindow(messages, config.rollingWindowSize);
|
|
98
|
+
return generateExtractiveSummary(extractMessageContent(window));
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Create final summary (entire conversation)
|
|
102
|
+
*/
|
|
103
|
+
async function createFinalSummary(messages, config) {
|
|
104
|
+
return generateExtractiveSummary(extractMessageContent(messages));
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Generate basic extractive summary of messages
|
|
108
|
+
*/
|
|
109
|
+
function summarizeChunk(messages) {
|
|
110
|
+
if (messages.length === 0)
|
|
111
|
+
return '';
|
|
112
|
+
return generateExtractiveSummary(extractMessageContent(messages));
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Estimate tokens saved by summarization
|
|
116
|
+
*/
|
|
117
|
+
function estimateTokensSaved(messages, summary) {
|
|
118
|
+
return calculateTokensSaved(messages, summary);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Get recent summaries for a conversation
|
|
122
|
+
*/
|
|
123
|
+
export async function getRecentSummaries(conversationId, limit = 10) {
|
|
124
|
+
try {
|
|
125
|
+
const db = await getDb();
|
|
126
|
+
const schema = await getSchema();
|
|
127
|
+
return await db
|
|
128
|
+
.select()
|
|
129
|
+
.from(schema.sessionSummaries)
|
|
130
|
+
.where(eq(schema.sessionSummaries.conversationId, conversationId))
|
|
131
|
+
.orderBy(desc(schema.sessionSummaries.createdAt))
|
|
132
|
+
.limit(limit);
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
logger.error('Error getting recent summaries', error);
|
|
136
|
+
return [];
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Get summarization statistics
|
|
141
|
+
*/
|
|
142
|
+
export async function getSummarizationStats(projectId) {
|
|
143
|
+
try {
|
|
144
|
+
const db = await getDb();
|
|
145
|
+
const schema = await getSchema();
|
|
146
|
+
const where = projectId ? eq(schema.sessionSummaries.projectId, projectId) : undefined;
|
|
147
|
+
const summaries = await db.select().from(schema.sessionSummaries).where(where);
|
|
148
|
+
const stats = {
|
|
149
|
+
totalSummaries: summaries.length,
|
|
150
|
+
byType: {
|
|
151
|
+
incremental: 0,
|
|
152
|
+
rolling: 0,
|
|
153
|
+
final: 0,
|
|
154
|
+
},
|
|
155
|
+
totalTokensSaved: 0,
|
|
156
|
+
avgCompressionRatio: 0,
|
|
157
|
+
};
|
|
158
|
+
for (const s of summaries) {
|
|
159
|
+
stats.byType[s.summaryType] = (stats.byType[s.summaryType] || 0) + 1;
|
|
160
|
+
stats.totalTokensSaved += s.tokensSaved || 0;
|
|
161
|
+
}
|
|
162
|
+
// Calculate average compression ratio
|
|
163
|
+
let totalRatio = 0;
|
|
164
|
+
for (const s of summaries) {
|
|
165
|
+
if (s.compressedFrom && s.compressedFrom > 0) {
|
|
166
|
+
totalRatio += s.tokensSaved / (s.compressedFrom * 100); // Rough estimate
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
stats.avgCompressionRatio = summaries.length > 0 ? totalRatio / summaries.length : 0;
|
|
170
|
+
return stats;
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
logger.error('Error getting summarization stats', error);
|
|
174
|
+
return {
|
|
175
|
+
totalSummaries: 0,
|
|
176
|
+
byType: {},
|
|
177
|
+
totalTokensSaved: 0,
|
|
178
|
+
avgCompressionRatio: 0,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Delete old summaries to save space
|
|
184
|
+
*/
|
|
185
|
+
export async function pruneOldSummaries(olderThanDays = 30) {
|
|
186
|
+
return cleanupOldSessionSummaries(olderThanDays);
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=summarization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"summarization.js","sourceRoot":"","sources":["../../core/summarization.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QMD Memory Synchronization
|
|
3
|
+
*
|
|
4
|
+
* Syncs Squish memories to QMD collections for hybrid search.
|
|
5
|
+
* Writes memories as markdown files to QMD collection directories.
|
|
6
|
+
*
|
|
7
|
+
* QMD automatically indexes files in collection directories, so we just
|
|
8
|
+
* need to write files to the right location.
|
|
9
|
+
*
|
|
10
|
+
* Collection Structure:
|
|
11
|
+
* - qmd-collections/squish-observations/ - Observation memories
|
|
12
|
+
* - qmd-collections/squish-facts/ - Fact memories
|
|
13
|
+
* - qmd-collections/squish-decisions/ - Decision memories
|
|
14
|
+
* - qmd-collections/squish-context/ - Context memories
|
|
15
|
+
* - qmd-collections/squish-preferences/ - Preference memories
|
|
16
|
+
*/
|
|
17
|
+
import type { MemoryRecord } from '../memory/memories.js';
|
|
18
|
+
export interface CollectionMapping {
|
|
19
|
+
[memoryType: string]: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* QMD Memory Sync class
|
|
23
|
+
*
|
|
24
|
+
* Manages synchronization of Squish memories to QMD collections.
|
|
25
|
+
*/
|
|
26
|
+
export declare class QMDMemorySync {
|
|
27
|
+
private collectionsPath;
|
|
28
|
+
private client;
|
|
29
|
+
private initialized;
|
|
30
|
+
constructor();
|
|
31
|
+
/**
|
|
32
|
+
* Initialize the sync layer
|
|
33
|
+
*
|
|
34
|
+
* Creates collection directories and verifies QMD connection.
|
|
35
|
+
*/
|
|
36
|
+
initialize(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Sync a memory to QMD
|
|
39
|
+
*
|
|
40
|
+
* Writes memory as markdown to the appropriate collection directory.
|
|
41
|
+
* QMD will automatically index the file on its next update cycle.
|
|
42
|
+
*
|
|
43
|
+
* @param memory - Memory record to sync
|
|
44
|
+
*/
|
|
45
|
+
syncMemory(memory: MemoryRecord): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Batch sync multiple memories
|
|
48
|
+
*
|
|
49
|
+
* @param memories - Array of memory records to sync
|
|
50
|
+
*/
|
|
51
|
+
syncMemories(memories: MemoryRecord[]): Promise<void>;
|
|
52
|
+
/**
|
|
53
|
+
* Trigger QMD re-index
|
|
54
|
+
*
|
|
55
|
+
* Note: This would typically call `qmd update` or `qmd embed`.
|
|
56
|
+
* For now, we just log that documents are ready for indexing.
|
|
57
|
+
*/
|
|
58
|
+
reindex(): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Get collection name for a memory
|
|
61
|
+
*
|
|
62
|
+
* @param memory - Memory record
|
|
63
|
+
* @returns QMD collection name
|
|
64
|
+
*/
|
|
65
|
+
private getCollectionForMemory;
|
|
66
|
+
/**
|
|
67
|
+
* Generate filename for memory
|
|
68
|
+
*
|
|
69
|
+
* Uses a docid-like format (6-char hash) for consistent naming.
|
|
70
|
+
*
|
|
71
|
+
* @param memory - Memory record
|
|
72
|
+
* @returns Filename for the memory
|
|
73
|
+
*/
|
|
74
|
+
private getFilenameForMemory;
|
|
75
|
+
/**
|
|
76
|
+
* Format memory as markdown for QMD indexing
|
|
77
|
+
*
|
|
78
|
+
* Uses frontmatter for metadata and standard markdown for content.
|
|
79
|
+
*
|
|
80
|
+
* @param memory - Memory record
|
|
81
|
+
* @returns Markdown formatted string
|
|
82
|
+
*/
|
|
83
|
+
private formatMemoryAsMarkdown;
|
|
84
|
+
/**
|
|
85
|
+
* Capitalize first letter of a string
|
|
86
|
+
*/
|
|
87
|
+
private capitalize;
|
|
88
|
+
/**
|
|
89
|
+
* Create a QMD collection directory
|
|
90
|
+
*
|
|
91
|
+
* @param name - Collection name
|
|
92
|
+
*/
|
|
93
|
+
private createCollection;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get the singleton QMD memory sync instance
|
|
97
|
+
*
|
|
98
|
+
* @returns QMDMemorySync instance
|
|
99
|
+
*/
|
|
100
|
+
export declare function getQMDMemorySync(): Promise<QMDMemorySync>;
|
|
101
|
+
/**
|
|
102
|
+
* Reset the singleton sync instance
|
|
103
|
+
* Useful for testing or when configuration changes.
|
|
104
|
+
*/
|
|
105
|
+
export declare function resetQMDMemorySync(): void;
|
|
106
|
+
//# sourceMappingURL=qmd-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qmd-sync.d.ts","sourceRoot":"","sources":["../../../core/sync/qmd-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAI1D,MAAM,WAAW,iBAAiB;IAChC,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,WAAW,CAAS;;IAM5B;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAkCjC;;;;;;;OAOG;IACG,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BrD;;;;OAIG;IACG,YAAY,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAM3D;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAW9B;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;IAK9B;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IAU5B;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;;;OAIG;YACW,gBAAgB;CAK/B;AAKD;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CAM/D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|