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,214 @@
|
|
|
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
|
+
import { eq, and, sql } from 'drizzle-orm';
|
|
8
|
+
import { getDb } from '../db/index.js';
|
|
9
|
+
import { getSchema } from '../db/schema.js';
|
|
10
|
+
import { createDatabaseClient } from './database.js';
|
|
11
|
+
const MAX_TOTAL_SIZE_BYTES = 2048; // 2KB limit
|
|
12
|
+
const MAX_SECTION_SIZE_BYTES = 1024; // 1KB per section
|
|
13
|
+
/**
|
|
14
|
+
* Initialize core memory for a project
|
|
15
|
+
*/
|
|
16
|
+
export async function initializeCoreMemory(projectId, userId) {
|
|
17
|
+
const db = createDatabaseClient(await getDb());
|
|
18
|
+
const schema = await getSchema();
|
|
19
|
+
const { coreMemory } = schema;
|
|
20
|
+
const sections = ['persona', 'user_info', 'project_context', 'working_notes'];
|
|
21
|
+
for (const section of sections) {
|
|
22
|
+
const existing = await db
|
|
23
|
+
.select()
|
|
24
|
+
.from(coreMemory)
|
|
25
|
+
.where(and(eq(coreMemory.projectId, projectId), eq(coreMemory.section, section)))
|
|
26
|
+
.limit(1);
|
|
27
|
+
if (existing.length === 0) {
|
|
28
|
+
await db.insert(coreMemory).values({
|
|
29
|
+
projectId: projectId,
|
|
30
|
+
userId: userId,
|
|
31
|
+
section,
|
|
32
|
+
content: '',
|
|
33
|
+
sizeBytes: 0,
|
|
34
|
+
version: 1,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Get all core memory sections for a project
|
|
41
|
+
*/
|
|
42
|
+
export async function getCoreMemory(projectId) {
|
|
43
|
+
const db = createDatabaseClient(await getDb());
|
|
44
|
+
const schema = await getSchema();
|
|
45
|
+
const { coreMemory } = schema;
|
|
46
|
+
const sections = await db
|
|
47
|
+
.select()
|
|
48
|
+
.from(coreMemory)
|
|
49
|
+
.where(eq(coreMemory.projectId, projectId));
|
|
50
|
+
const content = {
|
|
51
|
+
persona: '',
|
|
52
|
+
user_info: '',
|
|
53
|
+
project_context: '',
|
|
54
|
+
working_notes: '',
|
|
55
|
+
};
|
|
56
|
+
for (const section of sections) {
|
|
57
|
+
const key = section.section;
|
|
58
|
+
content[key] = section.content || '';
|
|
59
|
+
}
|
|
60
|
+
return content;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get a specific core memory section
|
|
64
|
+
*/
|
|
65
|
+
export async function getCoreMemorySection(projectId, section) {
|
|
66
|
+
const db = createDatabaseClient(await getDb());
|
|
67
|
+
const schema = await getSchema();
|
|
68
|
+
const { coreMemory } = schema;
|
|
69
|
+
const result = await db
|
|
70
|
+
.select()
|
|
71
|
+
.from(coreMemory)
|
|
72
|
+
.where(and(eq(coreMemory.projectId, projectId), eq(coreMemory.section, section)))
|
|
73
|
+
.limit(1);
|
|
74
|
+
return result[0]?.content || '';
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Update (replace) a core memory section
|
|
78
|
+
*/
|
|
79
|
+
export async function editCoreMemorySection(projectId, section, content) {
|
|
80
|
+
const sizeBytes = Buffer.byteLength(content, 'utf8');
|
|
81
|
+
// Check section size limit
|
|
82
|
+
if (sizeBytes > MAX_SECTION_SIZE_BYTES) {
|
|
83
|
+
return {
|
|
84
|
+
success: false,
|
|
85
|
+
message: `Content exceeds section limit of ${MAX_SECTION_SIZE_BYTES} bytes (got ${sizeBytes} bytes)`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
// Check total size limit
|
|
89
|
+
const totalSize = await getTotalCoreMemorySize(projectId, section, sizeBytes);
|
|
90
|
+
if (totalSize > MAX_TOTAL_SIZE_BYTES) {
|
|
91
|
+
return {
|
|
92
|
+
success: false,
|
|
93
|
+
message: `Total core memory would exceed ${MAX_TOTAL_SIZE_BYTES} bytes (would be ${totalSize} bytes)`,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
const db = createDatabaseClient(await getDb());
|
|
97
|
+
const schema = await getSchema();
|
|
98
|
+
const { coreMemory } = schema;
|
|
99
|
+
await db
|
|
100
|
+
.update(coreMemory)
|
|
101
|
+
.set({
|
|
102
|
+
content,
|
|
103
|
+
sizeBytes,
|
|
104
|
+
version: sql `${coreMemory.version} + 1`,
|
|
105
|
+
updatedAt: new Date(),
|
|
106
|
+
})
|
|
107
|
+
.where(and(eq(coreMemory.projectId, projectId), eq(coreMemory.section, section)));
|
|
108
|
+
return { success: true, sizeBytes };
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Append content to a core memory section
|
|
112
|
+
*/
|
|
113
|
+
export async function appendCoreMemorySection(projectId, section, text) {
|
|
114
|
+
const currentContent = await getCoreMemorySection(projectId, section);
|
|
115
|
+
const newContent = currentContent ? `${currentContent}\n${text}` : text;
|
|
116
|
+
return editCoreMemorySection(projectId, section, newContent);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Replace text within a core memory section
|
|
120
|
+
*/
|
|
121
|
+
export async function replaceCoreMemoryText(projectId, section, oldText, newText) {
|
|
122
|
+
const currentContent = await getCoreMemorySection(projectId, section);
|
|
123
|
+
if (!currentContent.includes(oldText)) {
|
|
124
|
+
return {
|
|
125
|
+
success: false,
|
|
126
|
+
message: `Text "${oldText}" not found in section "${section}"`,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
const newContent = currentContent.replace(oldText, newText);
|
|
130
|
+
return editCoreMemorySection(projectId, section, newContent);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get total size of core memory (excluding one section if calculating new size)
|
|
134
|
+
*/
|
|
135
|
+
async function getTotalCoreMemorySize(projectId, excludeSection, newSectionSize) {
|
|
136
|
+
const db = createDatabaseClient(await getDb());
|
|
137
|
+
const schema = await getSchema();
|
|
138
|
+
const { coreMemory } = schema;
|
|
139
|
+
const sections = await db
|
|
140
|
+
.select()
|
|
141
|
+
.from(coreMemory)
|
|
142
|
+
.where(eq(coreMemory.projectId, projectId));
|
|
143
|
+
let total = 0;
|
|
144
|
+
for (const section of sections) {
|
|
145
|
+
if (section.section === excludeSection) {
|
|
146
|
+
total += newSectionSize || 0;
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
total += section.sizeBytes || 0;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return total;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Get core memory stats
|
|
156
|
+
*/
|
|
157
|
+
export async function getCoreMemoryStats(projectId) {
|
|
158
|
+
const db = createDatabaseClient(await getDb());
|
|
159
|
+
const schema = await getSchema();
|
|
160
|
+
const { coreMemory } = schema;
|
|
161
|
+
const sections = await db
|
|
162
|
+
.select()
|
|
163
|
+
.from(coreMemory)
|
|
164
|
+
.where(eq(coreMemory.projectId, projectId));
|
|
165
|
+
const totalBytes = sections.reduce((sum, s) => sum + (s.sizeBytes || 0), 0);
|
|
166
|
+
return {
|
|
167
|
+
totalBytes,
|
|
168
|
+
maxBytes: MAX_TOTAL_SIZE_BYTES,
|
|
169
|
+
usagePercent: (totalBytes / MAX_TOTAL_SIZE_BYTES) * 100,
|
|
170
|
+
sections: sections.map((s) => ({
|
|
171
|
+
section: s.section,
|
|
172
|
+
sizeBytes: s.sizeBytes || 0,
|
|
173
|
+
version: s.version || 1,
|
|
174
|
+
updatedAt: s.updatedAt,
|
|
175
|
+
})),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Estimate token count from text (rough approximation: 1 token ≈ 4 chars)
|
|
180
|
+
*/
|
|
181
|
+
export function estimateTokens(text) {
|
|
182
|
+
return Math.ceil(text.length / 4);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get core memory formatted for context injection
|
|
186
|
+
*/
|
|
187
|
+
export async function formatCoreMemoryForInjection(projectId) {
|
|
188
|
+
const content = await getCoreMemory(projectId);
|
|
189
|
+
const stats = await getCoreMemoryStats(projectId);
|
|
190
|
+
let formatted = `# Core Memory (Always-In-Context)\n\n`;
|
|
191
|
+
if (content.persona) {
|
|
192
|
+
formatted += `## Agent Persona\n${content.persona}\n\n`;
|
|
193
|
+
}
|
|
194
|
+
if (content.user_info) {
|
|
195
|
+
formatted += `## User Information\n${content.user_info}\n\n`;
|
|
196
|
+
}
|
|
197
|
+
if (content.project_context) {
|
|
198
|
+
formatted += `## Project Context\n${content.project_context}\n\n`;
|
|
199
|
+
}
|
|
200
|
+
if (content.working_notes) {
|
|
201
|
+
formatted += `## Working Notes\n${content.working_notes}\n\n`;
|
|
202
|
+
}
|
|
203
|
+
formatted += `---\n`;
|
|
204
|
+
formatted += `Core Memory Usage: ${stats.totalBytes}/${stats.maxBytes} bytes (${stats.usagePercent.toFixed(1)}%)\n`;
|
|
205
|
+
formatted += `Estimated Tokens: ~${estimateTokens(formatted)}\n\n`;
|
|
206
|
+
// Add tool usage hints for agent-driven retrieval
|
|
207
|
+
formatted += `### Memory Tools Available\n`;
|
|
208
|
+
formatted += `When you need to recall information or store something important, use these tools:\n`;
|
|
209
|
+
formatted += `- **Search**: Use \`/squish:search\` to find stored memories matching a query\n`;
|
|
210
|
+
formatted += `- **Store**: Use \`/squish:remember\` to save new information for future use\n`;
|
|
211
|
+
formatted += `- **Update Core Memory**: Use \`/squish:core-memory\` to edit this always-visible memory\n`;
|
|
212
|
+
return formatted;
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=core-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core-memory.js","sourceRoot":"","sources":["../../core/core-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Database } from 'better-sqlite3';
|
|
2
|
+
import type { Pool } from 'pg';
|
|
3
|
+
export interface DatabaseClient {
|
|
4
|
+
$client: Database | Pool;
|
|
5
|
+
$clientType: 'sqlite' | 'postgres';
|
|
6
|
+
select: (...args: any[]) => any;
|
|
7
|
+
insert: (...args: any[]) => any;
|
|
8
|
+
update: (...args: any[]) => any;
|
|
9
|
+
delete: (...args: any[]) => any;
|
|
10
|
+
}
|
|
11
|
+
export declare function createDatabaseClient(db: any): DatabaseClient;
|
|
12
|
+
//# sourceMappingURL=database.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../core/database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE/B,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,QAAQ,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,QAAQ,GAAG,UAAU,CAAC;IACnC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IAChC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IAChC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;IAChC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC;CACjC;AAED,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,GAAG,GAAG,cAAc,CAU5D"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function createDatabaseClient(db) {
|
|
2
|
+
const isSqlite = typeof db.$client.prepare === 'function';
|
|
3
|
+
return {
|
|
4
|
+
$client: db.$client,
|
|
5
|
+
$clientType: isSqlite ? 'sqlite' : 'postgres',
|
|
6
|
+
select: (...args) => db.select(...args),
|
|
7
|
+
insert: (...args) => db.insert(...args),
|
|
8
|
+
update: (...args) => db.update(...args),
|
|
9
|
+
delete: (...args) => db.delete(...args),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=database.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../core/database.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,oBAAoB,CAAC,EAAO;IAC1C,MAAM,QAAQ,GAAG,OAAQ,EAAE,CAAC,OAAe,CAAC,OAAO,KAAK,UAAU,CAAC;IACnE,OAAO;QACL,OAAO,EAAE,EAAE,CAAC,OAAO;QACnB,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU;QAC7C,MAAM,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QAC9C,MAAM,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QAC9C,MAAM,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QAC9C,MAAM,EAAE,CAAC,GAAG,IAAW,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;KAC/C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QMD MCP Client
|
|
3
|
+
*
|
|
4
|
+
* Connects to QMD (Quick Markdown Search) MCP server for hybrid search capabilities.
|
|
5
|
+
* QMD provides BM25 full-text search, vector semantic search, and LLM re-ranking.
|
|
6
|
+
*
|
|
7
|
+
* Installation: bun install -g qmd
|
|
8
|
+
* GitHub: https://github.com/tobi/qmd
|
|
9
|
+
*
|
|
10
|
+
* QMD MCP Tools:
|
|
11
|
+
* - qmd_search: Fast BM25 keyword search
|
|
12
|
+
* - qmd_vsearch: Semantic vector search
|
|
13
|
+
* - qmd_query: Hybrid search with re-ranking (best quality)
|
|
14
|
+
* - qmd_get: Retrieve document by path or docid
|
|
15
|
+
* - qmd_multi_get: Retrieve multiple documents
|
|
16
|
+
* - qmd_status: Index health and collection info
|
|
17
|
+
*/
|
|
18
|
+
export interface QMDSearchOptions {
|
|
19
|
+
query: string;
|
|
20
|
+
collection?: string;
|
|
21
|
+
limit?: number;
|
|
22
|
+
minScore?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface QMDSearchResult {
|
|
25
|
+
docid: string;
|
|
26
|
+
path: string;
|
|
27
|
+
title: string;
|
|
28
|
+
context: string;
|
|
29
|
+
score: number;
|
|
30
|
+
snippet: string;
|
|
31
|
+
}
|
|
32
|
+
export interface QMDStatusResult {
|
|
33
|
+
indexHealth: string;
|
|
34
|
+
collections: Array<{
|
|
35
|
+
name: string;
|
|
36
|
+
path: string;
|
|
37
|
+
documentCount: number;
|
|
38
|
+
}>;
|
|
39
|
+
}
|
|
40
|
+
export interface QMDGetOptions {
|
|
41
|
+
pathOrDocid: string;
|
|
42
|
+
full?: boolean;
|
|
43
|
+
maxBytes?: number;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* QMD MCP Client class
|
|
47
|
+
*
|
|
48
|
+
* Manages connection to QMD MCP server and provides methods for
|
|
49
|
+
* search, document retrieval, and status checking.
|
|
50
|
+
*/
|
|
51
|
+
export declare class QMDClient {
|
|
52
|
+
private client;
|
|
53
|
+
private transport;
|
|
54
|
+
private connected;
|
|
55
|
+
private connecting;
|
|
56
|
+
/**
|
|
57
|
+
* Check if QMD is installed on the system
|
|
58
|
+
*/
|
|
59
|
+
checkQMDInstalled(): Promise<boolean>;
|
|
60
|
+
/**
|
|
61
|
+
* Connect to QMD MCP server
|
|
62
|
+
* QMD must be installed: bun install -g qmd
|
|
63
|
+
*/
|
|
64
|
+
connect(): Promise<boolean>;
|
|
65
|
+
/**
|
|
66
|
+
* Check if QMD is available
|
|
67
|
+
*/
|
|
68
|
+
isAvailable(): Promise<boolean>;
|
|
69
|
+
/**
|
|
70
|
+
* Fast BM25 keyword search
|
|
71
|
+
* Uses SQLite FTS5 for fast full-text search
|
|
72
|
+
*/
|
|
73
|
+
search(options: QMDSearchOptions): Promise<QMDSearchResult[]>;
|
|
74
|
+
/**
|
|
75
|
+
* Semantic vector search
|
|
76
|
+
* Uses embedding-based similarity search
|
|
77
|
+
*/
|
|
78
|
+
vsearch(options: QMDSearchOptions): Promise<QMDSearchResult[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Hybrid search with re-ranking (best quality)
|
|
81
|
+
* Combines BM25 + vector search + LLM re-ranking
|
|
82
|
+
*/
|
|
83
|
+
query(options: QMDSearchOptions): Promise<QMDSearchResult[]>;
|
|
84
|
+
/**
|
|
85
|
+
* Get QMD index status and collection info
|
|
86
|
+
*/
|
|
87
|
+
status(): Promise<QMDStatusResult | null>;
|
|
88
|
+
/**
|
|
89
|
+
* Get document by path or docid
|
|
90
|
+
*/
|
|
91
|
+
get(options: QMDGetOptions): Promise<string>;
|
|
92
|
+
/**
|
|
93
|
+
* Get multiple documents by glob pattern or list
|
|
94
|
+
*/
|
|
95
|
+
multiGet(patternOrList: string | string[], options?: {
|
|
96
|
+
maxBytes?: number;
|
|
97
|
+
limit?: number;
|
|
98
|
+
}): Promise<string[]>;
|
|
99
|
+
/**
|
|
100
|
+
* Disconnect from QMD MCP server
|
|
101
|
+
*/
|
|
102
|
+
disconnect(): Promise<void>;
|
|
103
|
+
/**
|
|
104
|
+
* Parse search results from QMD response
|
|
105
|
+
*/
|
|
106
|
+
private parseSearchResults;
|
|
107
|
+
/**
|
|
108
|
+
* Parse QMD's text output format into structured results
|
|
109
|
+
*/
|
|
110
|
+
private parseTextSearchResults;
|
|
111
|
+
/**
|
|
112
|
+
* Finalize a parsed result with defaults
|
|
113
|
+
*/
|
|
114
|
+
private finalizeResult;
|
|
115
|
+
/**
|
|
116
|
+
* Parse status result
|
|
117
|
+
*/
|
|
118
|
+
private parseStatusResult;
|
|
119
|
+
/**
|
|
120
|
+
* Parse get result
|
|
121
|
+
*/
|
|
122
|
+
private parseGetResult;
|
|
123
|
+
/**
|
|
124
|
+
* Parse multi-get result
|
|
125
|
+
*/
|
|
126
|
+
private parseMultiGetResult;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get the singleton QMD client instance
|
|
130
|
+
*/
|
|
131
|
+
export declare function getQMDClient(): Promise<QMDClient>;
|
|
132
|
+
/**
|
|
133
|
+
* Reset the singleton QMD client (useful for testing)
|
|
134
|
+
*/
|
|
135
|
+
export declare function resetQMDClient(): void;
|
|
136
|
+
//# sourceMappingURL=qmd-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qmd-client.d.ts","sourceRoot":"","sources":["../../../core/embeddings/qmd-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,KAAK,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAE3B;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC;IAuB3C;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAwCjC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAOrC;;;OAGG;IACG,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAkBnE;;;OAGG;IACG,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAkBpE;;;OAGG;IACG,KAAK,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAkBlE;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAkB/C;;OAEG;IACG,GAAG,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBlD;;OAEG;IACG,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAwBpH;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAyD9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA6BzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAoBtB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAS5B;AAKD;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,SAAS,CAAC,CAKvD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAKrC"}
|