squish-memory 1.0.2 → 1.2.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/.env.example +146 -0
- package/CHANGELOG.md +202 -0
- package/README.md +192 -287
- package/{scripts → bin}/dependency-manager.mjs +217 -217
- package/{scripts → bin}/detect-clients.mjs +78 -78
- package/bin/install-interactive.mjs +321 -0
- package/bin/squish-mcp.mjs +46 -0
- package/bin/squish.mjs +33 -0
- package/config/mcp-migration-map.json +1 -6
- package/config/mcp-mode-semantics.json +10 -12
- package/config/mcp-remote-auth.json +3 -26
- package/config/mcp-universal.schema.json +5 -35
- package/config/settings.json +78 -22
- package/config.js +5 -0
- package/config.ts +218 -0
- package/core/adapters/config/claude-code.ts +133 -0
- package/core/adapters/config/cursor.ts +90 -0
- package/core/adapters/config/opencode.ts +89 -0
- package/core/adapters/config/windsurf.ts +90 -0
- package/core/adapters/index.ts +102 -0
- package/core/adapters/timeline.ts +116 -0
- package/core/adapters/types.ts +166 -0
- package/core/agent-preferences.ts +140 -0
- package/core/algorithms/analytics/token-estimator.ts +216 -0
- package/core/algorithms/detection/hash-filters.ts +260 -0
- package/core/algorithms/detection/semantic-ranker.ts +194 -0
- package/core/algorithms/detection/two-stage-detector.ts +421 -0
- package/core/algorithms/handlers/approve-merge.ts +215 -0
- package/core/algorithms/handlers/detect-duplicates.ts +192 -0
- package/core/algorithms/handlers/get-stats.ts +132 -0
- package/core/algorithms/handlers/list-proposals.ts +130 -0
- package/core/algorithms/handlers/preview-merge.ts +139 -0
- package/core/algorithms/handlers/reject-merge.ts +93 -0
- package/core/algorithms/handlers/reverse-merge.ts +155 -0
- package/core/algorithms/index.ts +39 -0
- package/core/algorithms/operations/cache-maintenance.ts +182 -0
- package/core/algorithms/safety/safety-checks.ts +256 -0
- package/core/algorithms/strategies/merge-strategies.ts +381 -0
- package/core/algorithms/types.ts +140 -0
- package/core/algorithms/utils/response-builder.ts +61 -0
- package/core/associations.ts +363 -0
- package/core/beliefs/decay.ts +289 -0
- package/core/beliefs/extractor.ts +131 -0
- package/core/beliefs/store.ts +557 -0
- package/core/beliefs/types.ts +38 -0
- package/core/commands/mcp-server.ts +5 -0
- package/core/compression.ts +177 -0
- package/core/config.js +2 -0
- package/core/consolidation.ts +330 -0
- package/core/context/agent-context.ts +388 -0
- package/core/context/context-paging.ts +449 -0
- package/core/context/context-window.ts +234 -0
- package/core/context/context.ts +35 -0
- package/core/embeddings/embeddings.ts +616 -0
- package/core/embeddings/google-multimodal.ts +200 -0
- package/core/embeddings/local-embeddings.ts +12 -0
- package/core/embeddings/qmd-client.ts +495 -0
- package/core/embeddings/transformers-local.ts +261 -0
- package/core/embeddings.js +4 -0
- package/core/error-handling.ts +206 -0
- package/core/external +219 -0
- package/core/graph/entity-deduplicator.ts +232 -0
- package/core/graph/graph-builder.ts +257 -0
- package/core/graph/graph-traversal.ts +490 -0
- package/core/graph/index.ts +24 -0
- package/core/graph/llm-entity-extractor.ts +402 -0
- package/core/graph/multi-hop-retrieval.ts +317 -0
- package/core/graph/relationship-extractor.ts +465 -0
- package/core/hooks/agent-hooks.ts +653 -0
- package/core/hooks/auto-tagger.ts +149 -0
- package/core/hooks/capture-filter.ts +169 -0
- package/core/hot-cache.ts +388 -0
- package/core/index.ts +10 -0
- package/core/ingestion/agent-memory.ts +167 -0
- package/core/ingestion/core-memory.ts +326 -0
- package/core/ingestion/learnings.ts +260 -0
- package/core/ingestion/signal-engine.ts +266 -0
- package/core/integrations/obsidian-vault.ts +197 -0
- package/core/layers/generator.ts +115 -0
- package/core/lib/db-client.ts +168 -0
- package/core/lib/parse-embedding.ts +59 -0
- package/core/lib/schemas.ts +102 -0
- package/core/lib/types.ts +49 -0
- package/core/lib/utils.ts +151 -0
- package/core/lib/validation.ts +180 -0
- package/core/lifecycle.ts +353 -0
- package/core/logger.ts +59 -0
- package/core/memory/bridge-discovery.ts +395 -0
- package/core/memory/categorizer.ts +390 -0
- package/core/memory/conflict-detector.ts +62 -0
- package/core/memory/consolidation.ts +372 -0
- package/core/memory/context-collector.ts +75 -0
- package/core/memory/contradiction-resolver.ts +494 -0
- package/core/memory/edit-workflow.ts +174 -0
- package/core/memory/entity-extractor.ts +426 -0
- package/core/memory/entity-resolver.ts +89 -0
- package/core/memory/explain.ts +112 -0
- package/core/memory/fact-deriver.ts +300 -0
- package/core/memory/fact-extractor.ts +120 -0
- package/core/memory/feedback-tracker.ts +200 -0
- package/core/memory/hooks.ts +230 -0
- package/core/memory/hybrid-retrieval.ts +65 -0
- package/core/memory/hybrid-scorer.ts +325 -0
- package/core/memory/hybrid-search.ts +748 -0
- package/core/memory/importance.ts +319 -0
- package/core/memory/index.ts +11 -0
- package/core/memory/loader.ts +178 -0
- package/core/memory/markdown/markdown-storage.ts +318 -0
- package/core/memory/memories.ts +565 -0
- package/core/memory/memory-lifecycle.ts +51 -0
- package/core/memory/memory-manager.ts +53 -0
- package/core/memory/migrate.ts +173 -0
- package/core/memory/normalization.ts +30 -0
- package/core/memory/path-strengthener.ts +211 -0
- package/core/memory/progressive-disclosure.ts +392 -0
- package/core/memory/query-processor.ts +130 -0
- package/core/memory/query-rewriter.ts +153 -0
- package/core/memory/response-analyzer.ts +81 -0
- package/core/memory/retrieval-feedback.ts +276 -0
- package/core/memory/serialization.ts +83 -0
- package/core/memory/stale-cleaner.ts +147 -0
- package/core/memory/stats.ts +181 -0
- package/core/memory/telemetry.ts +392 -0
- package/core/memory/temporal-facts.ts +356 -0
- package/core/memory/temporal-parser.ts +477 -0
- package/core/memory/trigger-detector.ts +104 -0
- package/core/memory/write-gate.ts +288 -0
- package/core/places/index.ts +14 -0
- package/core/places/memory-places.ts +339 -0
- package/core/places/places.ts +406 -0
- package/core/places/rules.ts +308 -0
- package/core/places/walking.ts +192 -0
- package/core/projects +89 -0
- package/core/projects.ts +131 -0
- package/core/redis.ts +82 -0
- package/core/responses.ts +187 -0
- package/core/runtime/trust-report.ts +195 -0
- package/core/runtime/trust-state.ts +360 -0
- package/core/scheduler/cron-scheduler.ts +581 -0
- package/core/scheduler/heartbeat.ts +91 -0
- package/core/scheduler/index.ts +8 -0
- package/core/scheduler/job-runner.ts +197 -0
- package/core/search/conversations.ts +166 -0
- package/core/search/entities.ts +46 -0
- package/core/search/folder-context.ts +154 -0
- package/core/search/graph-boost.ts +22 -0
- package/core/search/index.ts +4 -0
- package/core/search/qmd-wrapper.ts +84 -0
- package/core/security/encrypt.ts +51 -0
- package/core/security/governance.ts +102 -0
- package/core/security/privacy.ts +108 -0
- package/core/security/secret-detector.ts +122 -0
- package/core/session/auto-load.ts +160 -0
- package/core/session/entity-tracker.ts +363 -0
- package/core/session/index.ts +7 -0
- package/core/session/reference-resolver.ts +158 -0
- package/core/session/self-iteration-job.ts +478 -0
- package/core/session/session-hooks.ts +69 -0
- package/core/session/types.ts +36 -0
- package/core/session/working-set.ts +275 -0
- package/core/snapshots/cleanup.ts +13 -0
- package/core/snapshots/comparison.ts +59 -0
- package/core/snapshots/creation.ts +139 -0
- package/core/snapshots/retrieval.ts +44 -0
- package/core/snapshots/stats.ts +63 -0
- package/core/storage/cache.ts +241 -0
- package/core/storage/database.ts +23 -0
- package/core/summarization/cleanup.ts +13 -0
- package/core/summarization/queries.ts +32 -0
- package/core/summarization/stats.ts +64 -0
- package/core/summarization/strategies.ts +52 -0
- package/core/summarization.ts +248 -0
- package/core/temporal-facts.ts +244 -0
- package/core/tracing/collector.ts +470 -0
- package/core/tracing/visualizer.ts +195 -0
- package/core/utils/cleanup-operations.ts +50 -0
- package/core/utils/content-extraction.ts +95 -0
- package/core/utils/filter-builder.ts +56 -0
- package/core/utils/history-traversal.ts +63 -0
- package/core/utils/memory-operations.ts +56 -0
- package/core/utils/query-operations.ts +83 -0
- package/core/utils/summarization-helpers.ts +45 -0
- package/core/utils/temporal-queries.ts +39 -0
- package/core/utils/vector-operations.ts +135 -0
- package/core/utils/version-management.ts +74 -0
- package/core/worker.ts +324 -0
- package/db/adapter.ts +215 -0
- package/db/bootstrap.ts +1055 -0
- package/db/drizzle/migrations/0000_needy_cerebro.sql +402 -0
- package/db/drizzle/migrations/meta/0000_snapshot.json +3451 -0
- package/db/drizzle/migrations/meta/_journal.json +13 -0
- package/db/drizzle/schema-sqlite.ts +1032 -0
- package/db/drizzle/schema.ts +1128 -0
- package/db/drizzle.config.ts +12 -0
- package/db/index.ts +83 -0
- package/db/init.sql +5 -0
- package/db/migrations/associations.ts +35 -0
- package/db/migrations/beliefs.ts +89 -0
- package/db/migrations/core-memory.ts +35 -0
- package/db/migrations/fts.ts +59 -0
- package/db/migrations/index.ts +54 -0
- package/db/migrations/indexes.ts +36 -0
- package/db/migrations/learnings.ts +34 -0
- package/db/migrations/maintenance.ts +68 -0
- package/db/migrations/memories.ts +22 -0
- package/db/migrations/memory-places.ts +35 -0
- package/db/migrations/places.ts +49 -0
- package/db/migrations/projects.ts +21 -0
- package/db/migrations/tier-conversion.ts +24 -0
- package/db/neon.ts +22 -0
- package/db/schema/beliefs.ts +50 -0
- package/db/schema/generator.ts +159 -0
- package/db/schema/index.ts +58 -0
- package/db/schema/learnings.ts +32 -0
- package/db/schema/memories.ts +83 -0
- package/db/schema/projects.ts +33 -0
- package/db/schema.ts +13 -0
- package/db/supabase.ts +27 -0
- package/dist/config.d.ts +61 -14
- package/dist/config.js +159 -139
- package/dist/core/adapters/config/claude-code.d.ts +45 -0
- package/dist/core/adapters/config/claude-code.js +113 -0
- package/dist/core/adapters/config/cursor.d.ts +26 -0
- package/dist/core/adapters/config/cursor.js +74 -0
- package/dist/core/adapters/config/opencode.d.ts +23 -0
- package/dist/core/adapters/config/opencode.js +73 -0
- package/dist/core/adapters/config/windsurf.d.ts +26 -0
- package/dist/core/adapters/config/windsurf.js +74 -0
- package/dist/core/adapters/index.d.ts +45 -0
- package/dist/core/adapters/index.js +84 -0
- package/dist/core/adapters/scripts/install-adapter.d.ts +19 -0
- package/dist/core/adapters/scripts/install-adapter.js +149 -0
- package/dist/core/adapters/timeline.d.ts +23 -0
- package/dist/core/adapters/timeline.js +88 -0
- package/dist/core/adapters/types.d.ts +137 -0
- package/dist/core/adapters/types.js +50 -0
- package/dist/core/agent-preferences.d.ts +16 -0
- package/dist/core/agent-preferences.js +124 -0
- package/dist/{algorithms → core/algorithms}/analytics/token-estimator.d.ts +1 -1
- package/dist/{algorithms → core/algorithms}/analytics/token-estimator.js +3 -3
- package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.d.ts +1 -1
- package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.js +1 -1
- package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.d.ts +1 -1
- package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.js +7 -10
- package/dist/{algorithms → core/algorithms}/handlers/approve-merge.js +4 -4
- package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/get-stats.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/list-proposals.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/preview-merge.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/reject-merge.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.js +3 -3
- package/dist/core/algorithms/index.d.ts +21 -0
- package/dist/core/algorithms/index.js +26 -0
- package/dist/core/algorithms/operations/cache-maintenance.d.ts +12 -0
- package/dist/core/algorithms/operations/cache-maintenance.js +157 -0
- package/dist/{algorithms → core/algorithms}/safety/safety-checks.d.ts +2 -6
- package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.d.ts +19 -1
- package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.js +74 -123
- package/dist/core/algorithms/types.d.ts +125 -0
- package/dist/core/algorithms/types.js +5 -0
- package/dist/core/associations.d.ts +3 -2
- package/dist/core/associations.js +37 -2
- package/dist/core/autosave.d.ts +19 -0
- package/dist/core/autosave.js +16 -0
- package/dist/core/beliefs/decay.d.ts +27 -0
- package/dist/core/beliefs/decay.js +217 -0
- package/dist/core/beliefs/extractor.d.ts +9 -0
- package/dist/core/beliefs/extractor.js +113 -0
- package/dist/core/beliefs/store.d.ts +46 -0
- package/dist/core/beliefs/store.js +466 -0
- package/dist/core/beliefs/types.d.ts +28 -0
- package/dist/core/beliefs/types.js +2 -0
- package/dist/core/commands/mcp-server.d.ts +2 -0
- package/dist/core/commands/mcp-server.js +6 -0
- package/dist/core/commands/remember.d.ts +24 -0
- package/dist/core/commands/remember.js +144 -0
- package/dist/core/compression.d.ts +45 -0
- package/dist/core/compression.js +160 -0
- package/dist/core/context/agent-context.d.ts +106 -0
- package/dist/core/context/agent-context.js +274 -0
- package/dist/core/{context-paging.d.ts → context/context-paging.d.ts} +2 -12
- package/dist/core/{context-paging.js → context/context-paging.js} +19 -39
- package/dist/core/context/context-window.d.ts +40 -0
- package/dist/core/context/context-window.js +177 -0
- package/dist/core/context/context.js +22 -0
- package/dist/core/embeddings/embeddings.d.ts +29 -0
- package/dist/core/embeddings/embeddings.js +546 -0
- package/dist/core/embeddings/google-multimodal.js +6 -2
- package/dist/core/embeddings/local-embeddings.d.ts +11 -0
- package/dist/core/embeddings/local-embeddings.js +11 -0
- package/dist/core/embeddings/qmd-client.js +1 -1
- package/dist/core/embeddings/transformers-local.d.ts +64 -0
- package/dist/core/embeddings/transformers-local.js +213 -0
- package/dist/core/embeddings.d.ts +1 -28
- package/dist/core/embeddings.js +2 -401
- package/dist/core/error-handling.d.ts +63 -0
- package/dist/core/error-handling.js +173 -0
- package/dist/core/graph/entity-deduplicator.d.ts +24 -0
- package/dist/core/graph/entity-deduplicator.js +183 -0
- package/dist/core/graph/graph-builder.d.ts +46 -0
- package/dist/core/graph/graph-builder.js +174 -0
- package/dist/core/graph/graph-traversal.d.ts +80 -0
- package/dist/core/graph/graph-traversal.js +315 -0
- package/dist/core/graph/index.d.ts +19 -0
- package/dist/core/graph/index.js +13 -0
- package/dist/core/graph/llm-entity-extractor.d.ts +49 -0
- package/dist/core/graph/llm-entity-extractor.js +313 -0
- package/dist/core/graph/multi-hop-retrieval.d.ts +48 -0
- package/dist/core/graph/multi-hop-retrieval.js +215 -0
- package/dist/core/graph/relationship-extractor.d.ts +48 -0
- package/dist/core/graph/relationship-extractor.js +351 -0
- package/dist/core/hooks/agent-hooks.d.ts +83 -0
- package/dist/core/hooks/agent-hooks.js +521 -0
- package/dist/core/hooks/auto-tagger.d.ts +19 -0
- package/dist/core/hooks/auto-tagger.js +155 -0
- package/dist/core/hooks/capture-filter.d.ts +41 -0
- package/dist/core/hooks/capture-filter.js +128 -0
- package/dist/core/hot-cache.d.ts +86 -0
- package/dist/core/hot-cache.js +285 -0
- package/dist/core/index.d.ts +9 -9
- package/dist/core/index.js +9 -12
- package/dist/core/{agent-memory.js → ingestion/agent-memory.js} +5 -7
- package/dist/core/{core-memory.d.ts → ingestion/core-memory.d.ts} +2 -2
- package/dist/core/{core-memory.js → ingestion/core-memory.js} +7 -7
- package/dist/core/ingestion/learnings.d.ts +57 -0
- package/dist/core/ingestion/learnings.js +205 -0
- package/dist/core/ingestion/signal-engine.d.ts +41 -0
- package/dist/core/ingestion/signal-engine.js +201 -0
- package/dist/core/integrations/obsidian-vault.d.ts +31 -0
- package/dist/core/integrations/obsidian-vault.js +156 -0
- package/dist/core/lib/db-client.d.ts +114 -0
- package/dist/core/lib/db-client.js +130 -0
- package/dist/core/lib/parse-embedding.d.ts +9 -0
- package/dist/core/lib/parse-embedding.js +58 -0
- package/dist/core/lib/schemas.d.ts +132 -0
- package/dist/core/lib/schemas.js +87 -0
- package/dist/core/lib/types.d.ts +45 -0
- package/dist/core/lib/types.js +6 -0
- package/dist/core/{utils.d.ts → lib/utils.d.ts} +5 -0
- package/dist/core/lib/utils.js +145 -0
- package/dist/core/lib/validation.d.ts +38 -0
- package/dist/core/lib/validation.js +151 -0
- package/dist/core/lifecycle.d.ts +7 -1
- package/dist/core/lifecycle.js +152 -42
- package/dist/core/logger.d.ts +1 -0
- package/dist/core/logger.js +13 -1
- package/dist/core/mcp/tools.d.ts +0 -2
- package/dist/core/mcp/tools.js +35 -90
- package/dist/core/mcp/types.d.ts +25 -253
- package/dist/core/mcp/types.js +2 -2
- package/dist/core/memory/categorizer.js +2 -0
- package/dist/core/memory/conflict-detector.js +1 -1
- package/dist/core/memory/consolidation.d.ts +1 -10
- package/dist/core/memory/consolidation.js +4 -39
- package/dist/core/memory/context-collector.js +1 -1
- package/dist/core/memory/edit-workflow.js +1 -1
- package/dist/core/memory/entity-extractor.d.ts +4 -0
- package/dist/core/memory/entity-extractor.js +30 -16
- package/dist/core/memory/entity-resolver.js +7 -7
- package/dist/core/memory/explain.d.ts +18 -0
- package/dist/core/memory/explain.js +92 -0
- package/dist/core/memory/fact-deriver.d.ts +31 -0
- package/dist/core/memory/fact-deriver.js +236 -0
- package/dist/core/memory/fact-extractor.js +12 -12
- package/dist/core/memory/feedback-tracker.js +1 -1
- package/dist/core/memory/hooks.d.ts +88 -0
- package/dist/core/memory/hooks.js +174 -0
- package/dist/core/memory/hybrid-retrieval.d.ts +14 -16
- package/dist/core/memory/hybrid-retrieval.js +25 -127
- package/dist/core/memory/hybrid-scorer.js +6 -23
- package/dist/core/memory/hybrid-search.d.ts +9 -11
- package/dist/core/memory/hybrid-search.js +496 -273
- package/dist/core/memory/importance.d.ts +2 -24
- package/dist/core/memory/importance.js +7 -91
- package/dist/core/memory/index.d.ts +1 -0
- package/dist/core/memory/index.js +1 -0
- package/dist/core/memory/loader.d.ts +31 -0
- package/dist/core/memory/loader.js +141 -0
- package/dist/core/memory/markdown/markdown-storage.d.ts +72 -0
- package/dist/core/memory/markdown/markdown-storage.js +243 -0
- package/dist/core/memory/memories.d.ts +23 -19
- package/dist/core/memory/memories.js +243 -228
- package/dist/core/memory/memory-lifecycle.d.ts +8 -0
- package/dist/core/memory/memory-lifecycle.js +47 -0
- package/dist/core/memory/migrate.d.ts +21 -0
- package/dist/core/memory/migrate.js +134 -0
- package/dist/core/memory/normalization.d.ts +7 -0
- package/dist/core/memory/normalization.js +26 -0
- package/dist/core/memory/path-strengthener.d.ts +39 -0
- package/dist/core/memory/path-strengthener.js +150 -0
- package/dist/core/memory/progressive-disclosure.js +1 -1
- package/dist/core/memory/query-processor.js +37 -3
- package/dist/core/memory/query-rewriter.js +9 -9
- package/dist/core/memory/retrieval-feedback.d.ts +70 -0
- package/dist/core/memory/retrieval-feedback.js +213 -0
- package/dist/core/memory/serialization.d.ts +4 -0
- package/dist/core/memory/serialization.js +49 -0
- package/dist/core/memory/stale-cleaner.d.ts +26 -0
- package/dist/core/memory/stale-cleaner.js +97 -0
- package/dist/core/memory/stats.d.ts +15 -0
- package/dist/core/memory/stats.js +69 -13
- package/dist/core/memory/temporal-facts.js +21 -0
- package/dist/core/memory/trigger-detector.d.ts +8 -1
- package/dist/core/memory/trigger-detector.js +42 -5
- package/dist/core/memory/write-gate.js +1 -1
- package/dist/core/places/index.d.ts +14 -0
- package/dist/core/places/index.js +14 -0
- package/dist/core/places/memory-places.d.ts +68 -0
- package/dist/core/places/memory-places.js +261 -0
- package/dist/core/places/places.d.ts +88 -0
- package/dist/core/places/places.js +314 -0
- package/dist/core/places/rules.d.ts +74 -0
- package/dist/core/places/rules.js +240 -0
- package/dist/core/places/walking.d.ts +56 -0
- package/dist/core/places/walking.js +121 -0
- package/dist/core/projects.d.ts +5 -0
- package/dist/core/projects.js +47 -18
- package/dist/core/responses.d.ts +96 -0
- package/dist/core/responses.js +122 -0
- package/dist/core/runtime/trust-report.d.ts +102 -0
- package/dist/core/runtime/trust-report.js +107 -0
- package/dist/core/runtime/trust-state.d.ts +12 -0
- package/dist/core/runtime/trust-state.js +309 -0
- package/dist/core/scheduler/cron-scheduler.d.ts +1 -1
- package/dist/core/scheduler/cron-scheduler.js +193 -10
- package/dist/core/scheduler/index.d.ts +1 -1
- package/dist/core/scheduler/index.js +1 -1
- package/dist/core/scheduler/job-runner.js +2 -2
- package/dist/core/search/conversations.js +40 -42
- package/dist/core/search/entities.js +6 -9
- package/dist/core/search/graph-boost.d.ts +7 -0
- package/dist/core/search/graph-boost.js +23 -0
- package/dist/core/search/qmd-wrapper.d.ts +36 -0
- package/dist/core/search/qmd-wrapper.js +58 -0
- package/dist/core/security/encrypt.d.ts +6 -0
- package/dist/core/security/encrypt.js +47 -0
- package/dist/core/{governance.d.ts → security/governance.d.ts} +6 -1
- package/dist/core/security/governance.js +79 -0
- package/dist/core/session/auto-load.js +34 -9
- package/dist/core/session/entity-tracker.d.ts +62 -0
- package/dist/core/session/entity-tracker.js +287 -0
- package/dist/core/session/index.d.ts +1 -1
- package/dist/core/session/index.js +1 -1
- package/dist/core/session/reference-resolver.d.ts +26 -0
- package/dist/core/session/reference-resolver.js +121 -0
- package/dist/core/{session-hooks → session}/self-iteration-job.d.ts +15 -0
- package/dist/core/{session-hooks → session}/self-iteration-job.js +195 -90
- package/dist/core/session/working-set.d.ts +50 -0
- package/dist/core/session/working-set.js +212 -0
- package/dist/core/snapshots/creation.d.ts +2 -8
- package/dist/core/snapshots/creation.js +3 -12
- package/dist/core/{cache.js → storage/cache.js} +2 -2
- package/dist/core/utils/memory-operations.js +1 -1
- package/dist/core/utils/summarization-helpers.d.ts +0 -4
- package/dist/core/utils/summarization-helpers.js +1 -6
- package/dist/core/utils/vector-operations.d.ts +71 -0
- package/dist/core/utils/vector-operations.js +129 -0
- package/dist/db/adapter.d.ts +3 -3
- package/dist/db/adapter.js +99 -88
- package/dist/db/bootstrap.d.ts +2 -0
- package/dist/db/bootstrap.js +921 -674
- package/dist/{drizzle → db/drizzle}/schema-sqlite.d.ts +775 -25
- package/dist/{drizzle → db/drizzle}/schema-sqlite.js +170 -24
- package/dist/{drizzle → db/drizzle}/schema.d.ts +731 -32
- package/dist/{drizzle → db/drizzle}/schema.js +192 -32
- package/dist/db/drizzle.config.d.ts +3 -0
- package/dist/db/drizzle.config.js +12 -0
- package/dist/db/index.d.ts +1 -5
- package/dist/db/index.js +51 -8
- package/dist/db/migrations/associations.d.ts +6 -0
- package/dist/db/migrations/associations.js +29 -0
- package/dist/db/migrations/beliefs.d.ts +10 -0
- package/dist/db/migrations/beliefs.js +76 -0
- package/dist/db/migrations/core-memory.d.ts +6 -0
- package/dist/db/migrations/core-memory.js +29 -0
- package/dist/db/migrations/fts.d.ts +6 -0
- package/dist/db/migrations/fts.js +52 -0
- package/dist/db/migrations/index.d.ts +25 -0
- package/dist/db/migrations/index.js +51 -0
- package/dist/db/migrations/indexes.d.ts +6 -0
- package/dist/db/migrations/indexes.js +30 -0
- package/dist/db/migrations/learnings.d.ts +7 -0
- package/dist/db/migrations/learnings.js +26 -0
- package/dist/db/migrations/maintenance.d.ts +6 -0
- package/dist/db/migrations/maintenance.js +61 -0
- package/dist/db/migrations/memories.d.ts +7 -0
- package/dist/db/migrations/memories.js +16 -0
- package/dist/db/migrations/memory-places.d.ts +6 -0
- package/dist/db/migrations/memory-places.js +29 -0
- package/dist/db/migrations/places.d.ts +6 -0
- package/dist/db/migrations/places.js +43 -0
- package/dist/db/migrations/projects.d.ts +3 -0
- package/dist/db/migrations/projects.js +13 -0
- package/dist/db/migrations/tier-conversion.d.ts +7 -0
- package/dist/db/migrations/tier-conversion.js +20 -0
- package/dist/db/neon.d.ts +8 -0
- package/dist/db/neon.js +20 -0
- package/dist/db/schema/beliefs.d.ts +9 -0
- package/dist/db/schema/beliefs.js +46 -0
- package/dist/db/schema/generator.d.ts +38 -0
- package/dist/db/schema/generator.js +108 -0
- package/dist/db/schema/index.d.ts +39 -0
- package/dist/db/schema/index.js +51 -0
- package/dist/db/schema/learnings.d.ts +7 -0
- package/dist/db/schema/learnings.js +30 -0
- package/dist/db/schema/memories.d.ts +7 -0
- package/dist/db/schema/memories.js +81 -0
- package/dist/db/schema/projects.d.ts +4 -0
- package/dist/db/schema/projects.js +31 -0
- package/dist/db/schema/tables/context-sessions.d.ts +9 -0
- package/dist/db/schema/tables/context-sessions.js +37 -0
- package/dist/db/schema/tables/conversations.d.ts +9 -0
- package/dist/db/schema/tables/conversations.js +47 -0
- package/dist/db/schema/tables/core-memory.d.ts +9 -0
- package/dist/db/schema/tables/core-memory.js +41 -0
- package/dist/db/schema/tables/entities.d.ts +9 -0
- package/dist/db/schema/tables/entities.js +39 -0
- package/dist/db/schema/tables/entity-relations.d.ts +9 -0
- package/dist/db/schema/tables/entity-relations.js +31 -0
- package/dist/db/schema/tables/learnings.d.ts +9 -0
- package/dist/db/schema/tables/learnings.js +66 -0
- package/dist/db/schema/tables/memories.d.ts +9 -0
- package/dist/db/schema/tables/memories.js +161 -0
- package/dist/db/schema/tables/memory-associations.d.ts +9 -0
- package/dist/db/schema/tables/memory-associations.js +39 -0
- package/dist/db/schema/tables/memory-hash-cache.d.ts +9 -0
- package/dist/db/schema/tables/memory-hash-cache.js +29 -0
- package/dist/db/schema/tables/memory-merge-history.d.ts +9 -0
- package/dist/db/schema/tables/memory-merge-history.js +33 -0
- package/dist/db/schema/tables/memory-merge-proposals.d.ts +9 -0
- package/dist/db/schema/tables/memory-merge-proposals.js +39 -0
- package/dist/db/schema/tables/messages.d.ts +9 -0
- package/dist/db/schema/tables/messages.js +41 -0
- package/dist/db/schema/tables/namespaces.d.ts +9 -0
- package/dist/db/schema/tables/namespaces.js +37 -0
- package/dist/db/schema/tables/projects.d.ts +9 -0
- package/dist/db/schema/tables/projects.js +31 -0
- package/dist/db/schema/tables/users.d.ts +9 -0
- package/dist/db/schema/tables/users.js +27 -0
- package/dist/db/schema.d.ts +1 -1
- package/dist/db/schema.js +2 -2
- package/dist/db/supabase.d.ts +9 -0
- package/dist/db/supabase.js +24 -0
- package/dist/packages/mcp/src/index.d.ts +3 -0
- package/dist/packages/mcp/src/index.js +733 -0
- package/mcp.json.example +8 -0
- package/package.json +132 -173
- package/packages/cli/package.json +22 -0
- package/packages/cli/src/commands/clean.ts +68 -0
- package/packages/cli/src/commands/context.ts +79 -0
- package/packages/cli/src/commands/doctor.ts +357 -0
- package/packages/cli/src/commands/forget.ts +72 -0
- package/packages/cli/src/commands/health.ts +36 -0
- package/packages/cli/src/commands/inspect.ts +41 -0
- package/packages/cli/src/commands/link.ts +50 -0
- package/packages/cli/src/commands/migrate.ts +93 -0
- package/packages/cli/src/commands/recall.ts +99 -0
- package/packages/cli/src/commands/recent.ts +57 -0
- package/packages/cli/src/commands/remember.ts +139 -0
- package/packages/cli/src/commands/run.ts +58 -0
- package/packages/cli/src/commands/stale.ts +43 -0
- package/packages/cli/src/commands/stats.ts +42 -0
- package/packages/cli/src/index.ts +57 -0
- package/packages/cli/tsconfig.json +24 -0
- package/packages/mcp/package.json +26 -0
- package/packages/mcp/src/index.ts +877 -0
- package/packages/mcp/tsconfig.json +20 -0
- package/skills/squish-memory/SKILL.md +107 -114
- package/skills/squish-memory/install.sh +3 -3
- package/skills/squish-memory/{claude-desktop.json → references/claude-desktop.json} +12 -12
- package/skills/squish-memory/{openclaw.json → references/openclaw.json} +13 -13
- package/skills/squish-memory/{opencode.json → references/opencode.json} +14 -14
- package/.claude-plugin/marketplace.json +0 -20
- package/.claude-plugin/plugin.json +0 -32
- package/.env.mcp.example +0 -60
- package/.mcp.json +0 -11
- package/QUICK-START.md +0 -71
- package/bin/squish-add.mjs +0 -32
- package/bin/squish-rm.mjs +0 -21
- package/commands/context-paging.md +0 -51
- package/commands/context-status.md +0 -22
- package/commands/context.md +0 -5
- package/commands/core-memory.md +0 -56
- package/commands/health.md +0 -5
- package/commands/init.md +0 -39
- package/commands/merge.md +0 -113
- package/commands/observe.md +0 -5
- package/commands/recall.md +0 -5
- package/commands/remember.md +0 -11
- package/commands/search.md +0 -10
- package/config/mcp-cli-fallback-policy.json +0 -22
- package/config/mcp.json +0 -38
- package/config/plugin-manifest.json +0 -152
- package/config/plugin-manifest.schema.json +0 -244
- package/config/remote-memory-policy.json +0 -32
- package/dist/api/web/index.d.ts +0 -3
- package/dist/api/web/index.js +0 -4
- package/dist/api/web/web-server.d.ts +0 -3
- package/dist/api/web/web-server.js +0 -6
- package/dist/api/web/web.d.ts +0 -4
- package/dist/api/web/web.js +0 -639
- package/dist/commands/managed-sync.d.ts +0 -10
- package/dist/commands/managed-sync.js +0 -64
- package/dist/commands/mcp-server.d.ts +0 -3
- package/dist/commands/mcp-server.js +0 -393
- package/dist/core/context.js +0 -24
- package/dist/core/governance.js +0 -64
- package/dist/core/local-embeddings.d.ts +0 -6
- package/dist/core/local-embeddings.js +0 -20
- package/dist/core/namespaces/index.d.ts +0 -71
- package/dist/core/namespaces/index.js +0 -305
- package/dist/core/namespaces/uri-parser.d.ts +0 -31
- package/dist/core/namespaces/uri-parser.js +0 -74
- package/dist/core/observations.d.ts +0 -26
- package/dist/core/observations.js +0 -110
- package/dist/core/requirements.d.ts +0 -20
- package/dist/core/requirements.js +0 -35
- package/dist/core/search/qmd-search.d.ts +0 -61
- package/dist/core/search/qmd-search.js +0 -178
- package/dist/core/snapshots.d.ts +0 -29
- package/dist/core/snapshots.js +0 -220
- package/dist/core/sync/qmd-sync.d.ts +0 -106
- package/dist/core/sync/qmd-sync.js +0 -213
- package/dist/core/utils.js +0 -74
- package/dist/index.d.ts +0 -19
- package/dist/index.js +0 -997
- package/generated/mcp/manifest.json +0 -23
- package/generated/mcp/mcp-servers.json +0 -25
- package/generated/mcp/mcporter.json +0 -34
- package/generated/mcp/openclaw-memory-qmd.json +0 -17
- package/generated/mcp/runtime.json +0 -12
- package/hooks/hooks.json +0 -52
- package/hooks/post-tool-use.js +0 -26
- package/hooks/session-end.js +0 -28
- package/hooks/session-start.js +0 -33
- package/hooks/user-prompt-submit.js +0 -26
- package/hooks/utils.js +0 -153
- package/npx-installer.js +0 -208
- package/packages/plugin-claude-code/README.md +0 -73
- package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +0 -35
- package/packages/plugin-claude-code/dist/plugin-wrapper.js +0 -191
- package/packages/plugin-claude-code/package.json +0 -31
- package/packages/plugin-openclaw/README.md +0 -70
- package/packages/plugin-openclaw/dist/index.d.ts +0 -49
- package/packages/plugin-openclaw/dist/index.js +0 -262
- package/packages/plugin-openclaw/openclaw.plugin.json +0 -94
- package/packages/plugin-openclaw/package.json +0 -31
- package/packages/plugin-opencode/install.mjs +0 -217
- package/packages/plugin-opencode/package.json +0 -21
- package/plugin.json +0 -32
- package/scripts/build-release.sh +0 -36
- package/scripts/check-secrets.js +0 -132
- package/scripts/db/check-db.mjs +0 -88
- package/scripts/db/fix-all-columns.mjs +0 -52
- package/scripts/db/fix-schema-all.mjs +0 -55
- package/scripts/db/fix-schema-full.mjs +0 -46
- package/scripts/db/fix-schema.mjs +0 -38
- package/scripts/db/init-db.mjs +0 -13
- package/scripts/db/recreate-db.mjs +0 -14
- package/scripts/generate-mcp.mjs +0 -264
- package/scripts/github-release.sh +0 -77
- package/scripts/init-dirs.mjs +0 -13
- package/scripts/install-interactive.mjs +0 -677
- package/scripts/install-mcp.mjs +0 -116
- package/scripts/install-plugin.mjs +0 -415
- package/scripts/install-web.sh +0 -120
- package/scripts/install.mjs +0 -340
- package/scripts/openclaw-bootstrap.mjs +0 -127
- package/scripts/package-release.sh +0 -71
- package/scripts/remote-preflight.mjs +0 -62
- package/scripts/squish-fallback.mjs +0 -132
- package/scripts/test/test-all-systems.mjs +0 -139
- package/scripts/test/test-memory-system.mjs +0 -139
- package/scripts/test/test-v0.5.0.mjs +0 -210
- package/scripts/test-interactive.mjs +0 -131
- package/scripts/verify-mcp.mjs +0 -214
- package/skills/memory-guide/SKILL.md +0 -332
- package/skills/squish-cli/SKILL.md +0 -240
- package/skills/squish-mcp/SKILL.md +0 -355
- package/skills/squish-memory/install.mjs +0 -335
- package/skills/squish-memory/skill.json +0 -32
- /package/dist/{algorithms → core/algorithms}/detection/hash-filters.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/detection/hash-filters.js +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/approve-merge.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/get-stats.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/list-proposals.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/preview-merge.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/reject-merge.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/safety/safety-checks.js +0 -0
- /package/dist/{algorithms → core/algorithms}/utils/response-builder.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/utils/response-builder.js +0 -0
- /package/dist/core/{context.d.ts → context/context.d.ts} +0 -0
- /package/dist/core/{agent-memory.d.ts → ingestion/agent-memory.d.ts} +0 -0
- /package/dist/core/{privacy.d.ts → security/privacy.d.ts} +0 -0
- /package/dist/core/{privacy.js → security/privacy.js} +0 -0
- /package/dist/core/{secret-detector.d.ts → security/secret-detector.d.ts} +0 -0
- /package/dist/core/{secret-detector.js → security/secret-detector.js} +0 -0
- /package/dist/core/{session-hooks → session}/session-hooks.d.ts +0 -0
- /package/dist/core/{session-hooks → session}/session-hooks.js +0 -0
- /package/dist/core/{cache.d.ts → storage/cache.d.ts} +0 -0
- /package/dist/core/{database.d.ts → storage/database.d.ts} +0 -0
- /package/dist/core/{database.js → storage/database.js} +0 -0
|
@@ -1,305 +0,0 @@
|
|
|
1
|
-
/** Namespace Management - Hierarchical folder-like namespaces for memories */
|
|
2
|
-
import { randomUUID } from 'crypto';
|
|
3
|
-
import { eq, and, isNull } from 'drizzle-orm';
|
|
4
|
-
import { getDb } from '../../db/index.js';
|
|
5
|
-
import { getSchema } from '../../db/schema.js';
|
|
6
|
-
import { logger } from '../logger.js';
|
|
7
|
-
/**
|
|
8
|
-
* Create a new namespace
|
|
9
|
-
*/
|
|
10
|
-
export async function createNamespace(input) {
|
|
11
|
-
const db = await getDb();
|
|
12
|
-
if (!db) {
|
|
13
|
-
throw new Error('Database unavailable');
|
|
14
|
-
}
|
|
15
|
-
const schema = await getSchema();
|
|
16
|
-
const id = randomUUID();
|
|
17
|
-
// Check if namespace with same name exists under parent
|
|
18
|
-
const sqliteDb = db;
|
|
19
|
-
const existing = await sqliteDb.select()
|
|
20
|
-
.from(schema.namespaces)
|
|
21
|
-
.where(and(eq(schema.namespaces.projectId, input.projectId), eq(schema.namespaces.name, input.name), input.parentId
|
|
22
|
-
? eq(schema.namespaces.parentId, input.parentId)
|
|
23
|
-
: isNull(schema.namespaces.parentId)))
|
|
24
|
-
.limit(1);
|
|
25
|
-
if (existing.length > 0) {
|
|
26
|
-
throw new Error(`Namespace "${input.name}" already exists under ${input.parentId || 'root'}`);
|
|
27
|
-
}
|
|
28
|
-
// Build namespace path
|
|
29
|
-
const path = await buildNamespacePath(input.projectId, input.name, input.parentId ?? null);
|
|
30
|
-
await sqliteDb.insert(schema.namespaces).values({
|
|
31
|
-
id,
|
|
32
|
-
projectId: input.projectId,
|
|
33
|
-
name: input.name,
|
|
34
|
-
type: input.type,
|
|
35
|
-
parentId: input.parentId || null,
|
|
36
|
-
description: input.description || null,
|
|
37
|
-
createdAt: new Date(),
|
|
38
|
-
updatedAt: new Date(),
|
|
39
|
-
});
|
|
40
|
-
logger.info(`[Namespaces] Created namespace: ${path}`);
|
|
41
|
-
return {
|
|
42
|
-
id,
|
|
43
|
-
projectId: input.projectId,
|
|
44
|
-
name: input.name,
|
|
45
|
-
type: input.type,
|
|
46
|
-
parentId: input.parentId || null,
|
|
47
|
-
description: input.description || null,
|
|
48
|
-
path,
|
|
49
|
-
createdAt: new Date(),
|
|
50
|
-
updatedAt: new Date(),
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Build full namespace path from parent
|
|
55
|
-
*/
|
|
56
|
-
async function buildNamespacePath(projectId, name, parentId) {
|
|
57
|
-
if (!parentId) {
|
|
58
|
-
return name;
|
|
59
|
-
}
|
|
60
|
-
const db = await getDb();
|
|
61
|
-
const schema = await getSchema();
|
|
62
|
-
const sqliteDb = db;
|
|
63
|
-
const [parent] = await sqliteDb.select()
|
|
64
|
-
.from(schema.namespaces)
|
|
65
|
-
.where(eq(schema.namespaces.id, parentId))
|
|
66
|
-
.limit(1);
|
|
67
|
-
if (!parent) {
|
|
68
|
-
return name;
|
|
69
|
-
}
|
|
70
|
-
return `${parent.path}/${name}`;
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Get a namespace by ID
|
|
74
|
-
*/
|
|
75
|
-
export async function getNamespaceById(id) {
|
|
76
|
-
const db = await getDb();
|
|
77
|
-
if (!db)
|
|
78
|
-
return null;
|
|
79
|
-
const schema = await getSchema();
|
|
80
|
-
const sqliteDb = db;
|
|
81
|
-
const [row] = await sqliteDb.select()
|
|
82
|
-
.from(schema.namespaces)
|
|
83
|
-
.where(eq(schema.namespaces.id, id))
|
|
84
|
-
.limit(1);
|
|
85
|
-
if (!row)
|
|
86
|
-
return null;
|
|
87
|
-
return {
|
|
88
|
-
id: row.id,
|
|
89
|
-
projectId: row.projectId,
|
|
90
|
-
name: row.name,
|
|
91
|
-
type: row.type,
|
|
92
|
-
parentId: row.parentId,
|
|
93
|
-
description: row.description,
|
|
94
|
-
path: row.path,
|
|
95
|
-
createdAt: new Date(row.createdAt),
|
|
96
|
-
updatedAt: new Date(row.updatedAt),
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Resolve a namespace path to a namespace ID
|
|
101
|
-
* @example resolveNamespacePath('my-project', ['user', 'preferences']) -> namespaceId
|
|
102
|
-
*/
|
|
103
|
-
export async function resolveNamespacePath(projectId, path) {
|
|
104
|
-
if (path.length === 0)
|
|
105
|
-
return null;
|
|
106
|
-
const db = await getDb();
|
|
107
|
-
if (!db)
|
|
108
|
-
return null;
|
|
109
|
-
const schema = await getSchema();
|
|
110
|
-
const sqliteDb = db;
|
|
111
|
-
let parentId = null;
|
|
112
|
-
let targetNamespace = null;
|
|
113
|
-
// Traverse path segments
|
|
114
|
-
for (const segment of path) {
|
|
115
|
-
const [result] = await sqliteDb.select()
|
|
116
|
-
.from(schema.namespaces)
|
|
117
|
-
.where(and(eq(schema.namespaces.projectId, projectId), eq(schema.namespaces.name, segment), parentId
|
|
118
|
-
? eq(schema.namespaces.parentId, parentId)
|
|
119
|
-
: isNull(schema.namespaces.parentId)))
|
|
120
|
-
.limit(1);
|
|
121
|
-
if (!result)
|
|
122
|
-
return null;
|
|
123
|
-
targetNamespace = result;
|
|
124
|
-
parentId = result.id;
|
|
125
|
-
}
|
|
126
|
-
return targetNamespace?.id || null;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Get namespace tree for a project
|
|
130
|
-
*/
|
|
131
|
-
export async function getNamespaceTree(projectId) {
|
|
132
|
-
const db = await getDb();
|
|
133
|
-
if (!db)
|
|
134
|
-
return [];
|
|
135
|
-
const schema = await getSchema();
|
|
136
|
-
const sqliteDb = db;
|
|
137
|
-
// Get all namespaces for project
|
|
138
|
-
const all = await sqliteDb.select()
|
|
139
|
-
.from(schema.namespaces)
|
|
140
|
-
.where(eq(schema.namespaces.projectId, projectId))
|
|
141
|
-
.orderBy(schema.namespaces.name);
|
|
142
|
-
// Build tree structure
|
|
143
|
-
const map = new Map();
|
|
144
|
-
const roots = [];
|
|
145
|
-
for (const row of all) {
|
|
146
|
-
const node = {
|
|
147
|
-
id: row.id,
|
|
148
|
-
name: row.name,
|
|
149
|
-
type: row.type,
|
|
150
|
-
description: row.description,
|
|
151
|
-
path: row.path,
|
|
152
|
-
children: [],
|
|
153
|
-
};
|
|
154
|
-
map.set(row.id, node);
|
|
155
|
-
if (!row.parentId) {
|
|
156
|
-
roots.push(node);
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
const parent = map.get(row.parentId);
|
|
160
|
-
if (parent) {
|
|
161
|
-
parent.children.push(node);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
return roots;
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Get or create default namespaces for a project
|
|
169
|
-
*/
|
|
170
|
-
export async function getDefaultNamespaces(projectId) {
|
|
171
|
-
const db = await getDb();
|
|
172
|
-
if (!db)
|
|
173
|
-
return [];
|
|
174
|
-
const schema = await getSchema();
|
|
175
|
-
const sqliteDb = db;
|
|
176
|
-
const created = [];
|
|
177
|
-
const defaults = [
|
|
178
|
-
{ name: 'user', type: 'user', description: 'User-specific memories and preferences' },
|
|
179
|
-
{ name: 'agent', type: 'agent', description: 'Agent-specific knowledge and state' },
|
|
180
|
-
{ name: 'project', type: 'project', description: 'Project-specific decisions and context' },
|
|
181
|
-
];
|
|
182
|
-
const defaultNames = ['user', 'agent', 'project'];
|
|
183
|
-
// Check all default namespaces at once with IN clause
|
|
184
|
-
const existing = await sqliteDb.select()
|
|
185
|
-
.from(schema.namespaces)
|
|
186
|
-
.where(and(eq(schema.namespaces.projectId, projectId), eq(schema.namespaces.name, defaultNames[0]), eq(schema.namespaces.type, 'user'), isNull(schema.namespaces.parentId)));
|
|
187
|
-
if (existing.length > 0) {
|
|
188
|
-
const ns = await createNamespace({
|
|
189
|
-
projectId,
|
|
190
|
-
name: defaultNames[0],
|
|
191
|
-
type: 'user',
|
|
192
|
-
parentId: null,
|
|
193
|
-
});
|
|
194
|
-
created.push({
|
|
195
|
-
id: ns.id,
|
|
196
|
-
projectId: ns.projectId,
|
|
197
|
-
name: ns.name,
|
|
198
|
-
type: ns.type,
|
|
199
|
-
parentId: ns.parentId,
|
|
200
|
-
description: ns.description,
|
|
201
|
-
path: ns.path,
|
|
202
|
-
createdAt: new Date(ns.createdAt),
|
|
203
|
-
updatedAt: new Date(ns.updatedAt),
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
// Check remaining defaults sequentially (agent and project)
|
|
207
|
-
for (const defName of defaultNames.slice(1)) {
|
|
208
|
-
const existing = await sqliteDb.select()
|
|
209
|
-
.from(schema.namespaces)
|
|
210
|
-
.where(and(eq(schema.namespaces.projectId, projectId), eq(schema.namespaces.name, defName), eq(schema.namespaces.type, defName), isNull(schema.namespaces.parentId)))
|
|
211
|
-
.limit(1);
|
|
212
|
-
if (existing.length === 0) {
|
|
213
|
-
const ns = await createNamespace({
|
|
214
|
-
projectId,
|
|
215
|
-
name: defName,
|
|
216
|
-
type: defName === 'agent' ? 'agent' : 'project',
|
|
217
|
-
parentId: null,
|
|
218
|
-
});
|
|
219
|
-
created.push(ns);
|
|
220
|
-
}
|
|
221
|
-
else {
|
|
222
|
-
created.push({
|
|
223
|
-
id: existing[0].id,
|
|
224
|
-
projectId: existing[0].projectId,
|
|
225
|
-
name: existing[0].name,
|
|
226
|
-
type: existing[0].type,
|
|
227
|
-
parentId: existing[0].parentId,
|
|
228
|
-
description: existing[0].description,
|
|
229
|
-
path: existing[0].path,
|
|
230
|
-
createdAt: new Date(existing[0].createdAt),
|
|
231
|
-
updatedAt: new Date(existing[0].updatedAt),
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
logger.info(`[Namespaces] Default namespaces ready for project: ${projectId}`);
|
|
236
|
-
return created;
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* List namespaces with optional filtering
|
|
240
|
-
*/
|
|
241
|
-
export async function listNamespaces(options = {}) {
|
|
242
|
-
const db = await getDb();
|
|
243
|
-
if (!db)
|
|
244
|
-
return [];
|
|
245
|
-
const schema = await getSchema();
|
|
246
|
-
const sqliteDb = db;
|
|
247
|
-
const conditions = [];
|
|
248
|
-
if (options.projectId) {
|
|
249
|
-
conditions.push(eq(schema.namespaces.projectId, options.projectId));
|
|
250
|
-
}
|
|
251
|
-
if (options.type) {
|
|
252
|
-
conditions.push(eq(schema.namespaces.type, options.type));
|
|
253
|
-
}
|
|
254
|
-
if (options.parentId !== undefined) {
|
|
255
|
-
if (options.parentId === null) {
|
|
256
|
-
conditions.push(isNull(schema.namespaces.parentId));
|
|
257
|
-
}
|
|
258
|
-
else {
|
|
259
|
-
conditions.push(eq(schema.namespaces.parentId, options.parentId));
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
const rows = await sqliteDb.select()
|
|
263
|
-
.from(schema.namespaces)
|
|
264
|
-
.where(conditions.length > 0 ? and(...conditions) : undefined)
|
|
265
|
-
.orderBy(schema.namespaces.name);
|
|
266
|
-
return rows.map((row) => ({
|
|
267
|
-
id: row.id,
|
|
268
|
-
projectId: row.projectId,
|
|
269
|
-
name: row.name,
|
|
270
|
-
type: row.type,
|
|
271
|
-
parentId: row.parentId,
|
|
272
|
-
description: row.description,
|
|
273
|
-
path: row.path,
|
|
274
|
-
createdAt: new Date(row.createdAt),
|
|
275
|
-
updatedAt: new Date(row.updatedAt),
|
|
276
|
-
}));
|
|
277
|
-
}
|
|
278
|
-
/**
|
|
279
|
-
* Delete a namespace (cascades to child namespaces)
|
|
280
|
-
*/
|
|
281
|
-
export async function deleteNamespace(id) {
|
|
282
|
-
const db = await getDb();
|
|
283
|
-
if (!db)
|
|
284
|
-
return;
|
|
285
|
-
const schema = await getSchema();
|
|
286
|
-
const sqliteDb = db;
|
|
287
|
-
await sqliteDb.delete(schema.namespaces).where(eq(schema.namespaces.id, id));
|
|
288
|
-
logger.info(`[Namespaces] Deleted namespace: ${id}`);
|
|
289
|
-
}
|
|
290
|
-
/**
|
|
291
|
-
* Update namespace
|
|
292
|
-
*/
|
|
293
|
-
export async function updateNamespace(id, updates) {
|
|
294
|
-
const db = await getDb();
|
|
295
|
-
if (!db)
|
|
296
|
-
return;
|
|
297
|
-
const schema = await getSchema();
|
|
298
|
-
const sqliteDb = db;
|
|
299
|
-
await sqliteDb.update(schema.namespaces).set({
|
|
300
|
-
...updates,
|
|
301
|
-
updatedAt: new Date(),
|
|
302
|
-
}).where(eq(schema.namespaces.id, id));
|
|
303
|
-
logger.info(`[Namespaces] Updated namespace: ${id}`);
|
|
304
|
-
}
|
|
305
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/** URI Parser for Squish namespace scheme (squish://) */
|
|
2
|
-
export interface SquishURIParsed {
|
|
3
|
-
type: 'namespace';
|
|
4
|
-
projectId: string;
|
|
5
|
-
namespacePath: string[];
|
|
6
|
-
memoryId?: string;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Parse a squish:// URI into components
|
|
10
|
-
* @example parseSquishURI('squish://my-project/user/preferences') -> { type: 'namespace', projectId: 'my-project', namespacePath: ['user', 'preferences'] }
|
|
11
|
-
*/
|
|
12
|
-
export declare function parseSquishURI(uri: string): SquishURIParsed | null;
|
|
13
|
-
/**
|
|
14
|
-
* Build a squish:// URI from components
|
|
15
|
-
* @example buildSquishURI('my-project', ['user', 'preferences']) -> 'squish://my-project/user/preferences'
|
|
16
|
-
*/
|
|
17
|
-
export declare function buildSquishURI(projectId: string, path: string[], memoryId?: string): string;
|
|
18
|
-
/**
|
|
19
|
-
* Validate a namespace path (no "..", no empty segments)
|
|
20
|
-
*/
|
|
21
|
-
export declare function validateNamespacePath(path: string[]): boolean;
|
|
22
|
-
/**
|
|
23
|
-
* Get parent namespace path
|
|
24
|
-
* @example getParentPath(['user', 'preferences', 'coding']) -> ['user', 'preferences']
|
|
25
|
-
*/
|
|
26
|
-
export declare function getParentPath(path: string[]): string[] | null;
|
|
27
|
-
/**
|
|
28
|
-
* Join namespace path segments
|
|
29
|
-
*/
|
|
30
|
-
export declare function joinNamespacePath(...segments: (string | string[])[]): string[];
|
|
31
|
-
//# sourceMappingURL=uri-parser.d.ts.map
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/** URI Parser for Squish namespace scheme (squish://) */
|
|
2
|
-
/**
|
|
3
|
-
* Parse a squish:// URI into components
|
|
4
|
-
* @example parseSquishURI('squish://my-project/user/preferences') -> { type: 'namespace', projectId: 'my-project', namespacePath: ['user', 'preferences'] }
|
|
5
|
-
*/
|
|
6
|
-
export function parseSquishURI(uri) {
|
|
7
|
-
if (!uri || typeof uri !== 'string') {
|
|
8
|
-
return null;
|
|
9
|
-
}
|
|
10
|
-
// Match squish://project/path/to/memory
|
|
11
|
-
const match = uri.match(/^squish:\/\/([^\/]+)\/(.*)$/);
|
|
12
|
-
if (!match) {
|
|
13
|
-
return null;
|
|
14
|
-
}
|
|
15
|
-
const [, projectId, pathPart] = match;
|
|
16
|
-
const namespacePath = pathPart ? pathPart.split('/').filter(Boolean) : [];
|
|
17
|
-
// If path ends with a UUID, it's a memory ID
|
|
18
|
-
const lastSegment = namespacePath[namespacePath.length - 1];
|
|
19
|
-
let memoryId;
|
|
20
|
-
if (lastSegment && /^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/.test(lastSegment)) {
|
|
21
|
-
memoryId = lastSegment;
|
|
22
|
-
namespacePath.pop();
|
|
23
|
-
}
|
|
24
|
-
return {
|
|
25
|
-
type: 'namespace',
|
|
26
|
-
projectId,
|
|
27
|
-
namespacePath,
|
|
28
|
-
memoryId,
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Build a squish:// URI from components
|
|
33
|
-
* @example buildSquishURI('my-project', ['user', 'preferences']) -> 'squish://my-project/user/preferences'
|
|
34
|
-
*/
|
|
35
|
-
export function buildSquishURI(projectId, path, memoryId) {
|
|
36
|
-
if (!projectId) {
|
|
37
|
-
throw new Error('Project ID is required');
|
|
38
|
-
}
|
|
39
|
-
const cleanPath = path.filter(Boolean);
|
|
40
|
-
const basePath = `squish://${projectId}${cleanPath.length > 0 ? '/' + cleanPath.join('/') : ''}`;
|
|
41
|
-
return memoryId ? `${basePath}/${memoryId}` : basePath;
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Validate a namespace path (no "..", no empty segments)
|
|
45
|
-
*/
|
|
46
|
-
export function validateNamespacePath(path) {
|
|
47
|
-
if (path.length === 0)
|
|
48
|
-
return true;
|
|
49
|
-
for (const segment of path) {
|
|
50
|
-
if (!segment || segment.length === 0) {
|
|
51
|
-
return false;
|
|
52
|
-
}
|
|
53
|
-
if (segment.includes('..')) {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return true;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Get parent namespace path
|
|
61
|
-
* @example getParentPath(['user', 'preferences', 'coding']) -> ['user', 'preferences']
|
|
62
|
-
*/
|
|
63
|
-
export function getParentPath(path) {
|
|
64
|
-
if (path.length <= 1)
|
|
65
|
-
return null;
|
|
66
|
-
return path.slice(0, -1);
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Join namespace path segments
|
|
70
|
-
*/
|
|
71
|
-
export function joinNamespacePath(...segments) {
|
|
72
|
-
return segments.flat().filter(Boolean);
|
|
73
|
-
}
|
|
74
|
-
//# sourceMappingURL=uri-parser.js.map
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
export type ObservationType = 'tool_use' | 'file_change' | 'error' | 'pattern' | 'insight';
|
|
2
|
-
export interface ObservationInput {
|
|
3
|
-
type: ObservationType;
|
|
4
|
-
action: string;
|
|
5
|
-
target?: string;
|
|
6
|
-
summary: string;
|
|
7
|
-
details?: Record<string, unknown>;
|
|
8
|
-
session?: string;
|
|
9
|
-
project?: string;
|
|
10
|
-
}
|
|
11
|
-
export interface ObservationRecord {
|
|
12
|
-
id: string;
|
|
13
|
-
projectId?: string | null;
|
|
14
|
-
conversationId?: string | null;
|
|
15
|
-
type: ObservationType;
|
|
16
|
-
action: string;
|
|
17
|
-
target?: string | null;
|
|
18
|
-
summary: string;
|
|
19
|
-
details?: Record<string, unknown> | null;
|
|
20
|
-
createdAt?: string | null;
|
|
21
|
-
}
|
|
22
|
-
export declare function createObservation(input: ObservationInput): Promise<ObservationRecord>;
|
|
23
|
-
export declare function getObservationsForProject(projectPath: string, limit: number): Promise<ObservationRecord[]>;
|
|
24
|
-
export declare function getRecentObservations(projectPath: string, limit?: number): Promise<ObservationRecord[]>;
|
|
25
|
-
export declare function getObservationById(observationId: string): Promise<ObservationRecord | null>;
|
|
26
|
-
//# sourceMappingURL=observations.d.ts.map
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from 'crypto';
|
|
2
|
-
import { desc, eq } from 'drizzle-orm';
|
|
3
|
-
import { getDb } from '../db/index.js';
|
|
4
|
-
import { getSchema } from '../db/schema.js';
|
|
5
|
-
import { config } from '../config.js';
|
|
6
|
-
import { getEmbedding } from './embeddings.js';
|
|
7
|
-
import { ensureProject, getProjectByPath } from './projects.js';
|
|
8
|
-
import { fromSqliteJson, toSqliteJson } from './memory/serialization.js';
|
|
9
|
-
import { createDatabaseClient } from './database.js';
|
|
10
|
-
import { normalizeTimestamp, prepareEmbedding } from './utils.js';
|
|
11
|
-
import { logger } from './logger.js';
|
|
12
|
-
export async function createObservation(input) {
|
|
13
|
-
const db = createDatabaseClient(await getDb());
|
|
14
|
-
const schema = await getSchema();
|
|
15
|
-
const project = await ensureProject(input.project);
|
|
16
|
-
const embedding = await getEmbedding(input.summary);
|
|
17
|
-
const id = randomUUID();
|
|
18
|
-
const baseValues = {
|
|
19
|
-
id,
|
|
20
|
-
projectId: project?.id ?? null,
|
|
21
|
-
type: input.type,
|
|
22
|
-
action: input.action,
|
|
23
|
-
target: input.target ?? null,
|
|
24
|
-
summary: input.summary,
|
|
25
|
-
};
|
|
26
|
-
const embeddingValues = prepareEmbedding(embedding);
|
|
27
|
-
const detailsValue = config.isTeamMode ? input.details ?? null : toSqliteJson(input.details ?? null);
|
|
28
|
-
await db.insert(schema.observations).values({
|
|
29
|
-
...baseValues,
|
|
30
|
-
details: detailsValue,
|
|
31
|
-
...embeddingValues,
|
|
32
|
-
createdAt: new Date(),
|
|
33
|
-
});
|
|
34
|
-
return {
|
|
35
|
-
id,
|
|
36
|
-
projectId: project?.id ?? null,
|
|
37
|
-
conversationId: null,
|
|
38
|
-
type: input.type,
|
|
39
|
-
action: input.action,
|
|
40
|
-
target: input.target ?? null,
|
|
41
|
-
summary: input.summary,
|
|
42
|
-
details: input.details ?? null,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
export async function getObservationsForProject(projectPath, limit) {
|
|
46
|
-
try {
|
|
47
|
-
const db = createDatabaseClient(await getDb());
|
|
48
|
-
const schema = await getSchema();
|
|
49
|
-
const project = await getProjectByPath(projectPath);
|
|
50
|
-
if (!project)
|
|
51
|
-
return [];
|
|
52
|
-
const rows = await db.select().from(schema.observations)
|
|
53
|
-
.where(eq(schema.observations.projectId, project.id))
|
|
54
|
-
.orderBy(desc(schema.observations.createdAt))
|
|
55
|
-
.limit(limit);
|
|
56
|
-
return rows.map((row) => normalizeObservation(row));
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
throw error;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
export async function getRecentObservations(projectPath, limit = 10) {
|
|
63
|
-
try {
|
|
64
|
-
const db = createDatabaseClient(await getDb());
|
|
65
|
-
const schema = await getSchema();
|
|
66
|
-
const project = await getProjectByPath(projectPath);
|
|
67
|
-
if (!project)
|
|
68
|
-
return [];
|
|
69
|
-
const rows = await db.select().from(schema.observations)
|
|
70
|
-
.where(eq(schema.observations.projectId, project.id))
|
|
71
|
-
.orderBy(desc(schema.observations.createdAt))
|
|
72
|
-
.limit(limit);
|
|
73
|
-
return rows.map((row) => normalizeObservation(row));
|
|
74
|
-
}
|
|
75
|
-
catch (error) {
|
|
76
|
-
logger.error('Error getting recent observations', error);
|
|
77
|
-
throw error;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
export async function getObservationById(observationId) {
|
|
81
|
-
try {
|
|
82
|
-
const db = createDatabaseClient(await getDb());
|
|
83
|
-
const schema = await getSchema();
|
|
84
|
-
const rows = await db.select().from(schema.observations)
|
|
85
|
-
.where(eq(schema.observations.id, observationId))
|
|
86
|
-
.limit(1);
|
|
87
|
-
if (rows.length === 0)
|
|
88
|
-
return null;
|
|
89
|
-
return normalizeObservation(rows[0]);
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
logger.error('Error getting observation', error);
|
|
93
|
-
throw error;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
function normalizeObservation(row) {
|
|
97
|
-
const details = config.isTeamMode ? row.details : fromSqliteJson(row.details ?? null);
|
|
98
|
-
return {
|
|
99
|
-
id: row.id,
|
|
100
|
-
projectId: row.projectId ?? row.project_id ?? null,
|
|
101
|
-
conversationId: row.conversationId ?? row.conversation_id ?? null,
|
|
102
|
-
type: row.type,
|
|
103
|
-
action: row.action,
|
|
104
|
-
target: row.target ?? null,
|
|
105
|
-
summary: row.summary,
|
|
106
|
-
details,
|
|
107
|
-
createdAt: normalizeTimestamp(row.createdAt ?? row.created_at),
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
//# sourceMappingURL=observations.js.map
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export interface MemoryCriteria {
|
|
2
|
-
tag?: string;
|
|
3
|
-
type?: string;
|
|
4
|
-
types?: string[];
|
|
5
|
-
sector?: string;
|
|
6
|
-
minAge?: number;
|
|
7
|
-
maxAge?: number;
|
|
8
|
-
minConfidence?: number;
|
|
9
|
-
minRelevance?: number;
|
|
10
|
-
projectId?: string;
|
|
11
|
-
agentId?: string;
|
|
12
|
-
visibilityScope?: string;
|
|
13
|
-
}
|
|
14
|
-
export declare function requireMemory(criteria: MemoryCriteria): Promise<any>;
|
|
15
|
-
export declare function assertMemoryPresent(memoryId: string): Promise<void>;
|
|
16
|
-
export declare function assertMemoryNotPresent(criteria: MemoryCriteria): Promise<void>;
|
|
17
|
-
export declare function requireMemories(criteria: MemoryCriteria, minCount?: number): Promise<any[]>;
|
|
18
|
-
export declare function requireHighConfidenceMemory(criteria: MemoryCriteria, minConfidence?: number): Promise<any>;
|
|
19
|
-
export declare function requireRecentMemory(criteria: MemoryCriteria, maxAgeDays?: number): Promise<any>;
|
|
20
|
-
//# sourceMappingURL=requirements.d.ts.map
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
// Deterministic Memory Requirements
|
|
2
|
-
import { eq } from 'drizzle-orm';
|
|
3
|
-
import { getSchema } from '../db/schema.js';
|
|
4
|
-
import { buildMemoryFilters, buildMemoryFiltersPartial } from './utils/filter-builder.js';
|
|
5
|
-
import { executeMemoryAssertion } from './utils/query-operations.js';
|
|
6
|
-
export async function requireMemory(criteria) {
|
|
7
|
-
const schema = await getSchema();
|
|
8
|
-
const filters = buildMemoryFilters(criteria, schema);
|
|
9
|
-
const memories = await executeMemoryAssertion(criteria, filters, 1, 'memory requirement', 'Required memory not found');
|
|
10
|
-
return memories[0];
|
|
11
|
-
}
|
|
12
|
-
export async function assertMemoryPresent(memoryId) {
|
|
13
|
-
const criteria = { memoryId };
|
|
14
|
-
const schema = await getSchema();
|
|
15
|
-
const filters = [eq(schema.memories.id, memoryId)];
|
|
16
|
-
await executeMemoryAssertion(criteria, filters, 1, 'asserting memory presence', 'Required memory is not present: ' + memoryId);
|
|
17
|
-
}
|
|
18
|
-
export async function assertMemoryNotPresent(criteria) {
|
|
19
|
-
const schema = await getSchema();
|
|
20
|
-
const filters = buildMemoryFiltersPartial(criteria, schema);
|
|
21
|
-
await executeMemoryAssertion(criteria, filters, 0, 'checking memory non-presence', 'Memory should not exist but was found');
|
|
22
|
-
}
|
|
23
|
-
export async function requireMemories(criteria, minCount = 1) {
|
|
24
|
-
const schema = await getSchema();
|
|
25
|
-
const filters = buildMemoryFilters(criteria, schema);
|
|
26
|
-
return executeMemoryAssertion(criteria, filters, minCount, 'checking memory requirements', `Required ${minCount} memories but found fewer`);
|
|
27
|
-
}
|
|
28
|
-
export async function requireHighConfidenceMemory(criteria, minConfidence = 80) {
|
|
29
|
-
return requireMemory({ ...criteria, minConfidence });
|
|
30
|
-
}
|
|
31
|
-
export async function requireRecentMemory(criteria, maxAgeDays = 7) {
|
|
32
|
-
const maxAge = maxAgeDays * 24 * 60 * 60 * 1000;
|
|
33
|
-
return requireMemory({ ...criteria, maxAge });
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=requirements.js.map
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* QMD Hybrid Search Integration
|
|
3
|
-
*
|
|
4
|
-
* Integrates QMD's BM25+vector+rerank pipeline with Squish memories.
|
|
5
|
-
* Provides enhanced search capabilities when QMD is available.
|
|
6
|
-
*
|
|
7
|
-
* QMD Search Pipeline:
|
|
8
|
-
* 1. Query Expansion (LLM generates alternative queries)
|
|
9
|
-
* 2. Parallel BM25 (FTS5) + Vector Search
|
|
10
|
-
* 3. RRF Fusion (Reciprocal Rank Fusion)
|
|
11
|
-
* 4. LLM Re-ranking (yes/no with logprobs)
|
|
12
|
-
* 5. Position-Aware Blending
|
|
13
|
-
*
|
|
14
|
-
* Installation: bun install -g qmd
|
|
15
|
-
* GitHub: https://github.com/tobi/qmd
|
|
16
|
-
*/
|
|
17
|
-
import type { SearchInput, SearchResult } from '../memory/memories.js';
|
|
18
|
-
export interface QMDSearchOptions extends SearchInput {
|
|
19
|
-
useHybrid?: boolean;
|
|
20
|
-
collection?: string;
|
|
21
|
-
includeSquishResults?: boolean;
|
|
22
|
-
}
|
|
23
|
-
export interface QMDHybridSearchResult extends SearchResult {
|
|
24
|
-
qmdScore?: number;
|
|
25
|
-
source: 'squish' | 'qmd' | 'hybrid';
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Search memories using QMD's hybrid search
|
|
29
|
-
*
|
|
30
|
-
* @param options - Search options including query, type, limit, etc.
|
|
31
|
-
* @returns QMD-enhanced search results
|
|
32
|
-
*/
|
|
33
|
-
export declare function searchWithQMD(options: QMDSearchOptions): Promise<QMDHybridSearchResult[]>;
|
|
34
|
-
/**
|
|
35
|
-
* Fused search: combine Squish and QMD results
|
|
36
|
-
*
|
|
37
|
-
* Runs both searches in parallel and merges results with deduplication.
|
|
38
|
-
*
|
|
39
|
-
* @param options - Search options
|
|
40
|
-
* @returns Fused search results from both sources
|
|
41
|
-
*/
|
|
42
|
-
export declare function fusedSearch(options: QMDSearchOptions): Promise<QMDHybridSearchResult[]>;
|
|
43
|
-
/**
|
|
44
|
-
* Check if QMD is available and configured
|
|
45
|
-
*
|
|
46
|
-
* @returns true if QMD is enabled and available
|
|
47
|
-
*/
|
|
48
|
-
export declare function isQMDAvailable(): Promise<boolean>;
|
|
49
|
-
/**
|
|
50
|
-
* Get QMD status and collection info
|
|
51
|
-
*
|
|
52
|
-
* @returns QMD status or null if unavailable
|
|
53
|
-
*/
|
|
54
|
-
export declare function getQMDStatus(): Promise<{
|
|
55
|
-
available: boolean;
|
|
56
|
-
collections: Array<{
|
|
57
|
-
name: string;
|
|
58
|
-
documentCount: number;
|
|
59
|
-
}>;
|
|
60
|
-
} | null>;
|
|
61
|
-
//# sourceMappingURL=qmd-search.d.ts.map
|