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,178 +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 { getQMDClient } from '../embeddings/qmd-client.js';
|
|
18
|
-
import { searchMemories } from '../memory/memories.js';
|
|
19
|
-
import { logger } from '../logger.js';
|
|
20
|
-
import { config } from '../../config.js';
|
|
21
|
-
/**
|
|
22
|
-
* Search memories using QMD's hybrid search
|
|
23
|
-
*
|
|
24
|
-
* @param options - Search options including query, type, limit, etc.
|
|
25
|
-
* @returns QMD-enhanced search results
|
|
26
|
-
*/
|
|
27
|
-
export async function searchWithQMD(options) {
|
|
28
|
-
const client = await getQMDClient();
|
|
29
|
-
if (!(await client.isAvailable())) {
|
|
30
|
-
logger.warn('QMD unavailable, falling back to Squish search');
|
|
31
|
-
// Fallback to Squish search
|
|
32
|
-
const squishResults = await searchMemories(options);
|
|
33
|
-
return squishResults.map((r) => ({
|
|
34
|
-
...r,
|
|
35
|
-
source: 'squish'
|
|
36
|
-
}));
|
|
37
|
-
}
|
|
38
|
-
// Determine collection based on memory type mapping
|
|
39
|
-
const collection = options.collection || getCollectionForType(options.type);
|
|
40
|
-
try {
|
|
41
|
-
let qmdResults = [];
|
|
42
|
-
if (options.useHybrid !== false) {
|
|
43
|
-
// Use qmd_query (hybrid with reranking) - best quality
|
|
44
|
-
qmdResults = await client.query({
|
|
45
|
-
query: options.query,
|
|
46
|
-
collection,
|
|
47
|
-
limit: options.limit || 10,
|
|
48
|
-
minScore: 0.2
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
// Use qmd_vsearch (semantic only) - faster
|
|
53
|
-
qmdResults = await client.vsearch({
|
|
54
|
-
query: options.query,
|
|
55
|
-
collection,
|
|
56
|
-
limit: options.limit || 10,
|
|
57
|
-
minScore: 0.2
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
// Map QMD results to Squish format
|
|
61
|
-
return qmdResults.map((result) => ({
|
|
62
|
-
id: result.docid || result.path,
|
|
63
|
-
content: result.snippet || result.title,
|
|
64
|
-
type: options.type || 'observation',
|
|
65
|
-
tags: [],
|
|
66
|
-
projectId: options.project ? options.project : null,
|
|
67
|
-
similarity: result.score,
|
|
68
|
-
qmdScore: result.score,
|
|
69
|
-
source: 'qmd',
|
|
70
|
-
createdAt: new Date().toISOString() // QMD doesn't provide timestamps
|
|
71
|
-
}));
|
|
72
|
-
}
|
|
73
|
-
catch (error) {
|
|
74
|
-
logger.error(`QMD search failed: ${error}`);
|
|
75
|
-
// Fallback to Squish search
|
|
76
|
-
const squishResults = await searchMemories(options);
|
|
77
|
-
return squishResults.map((r) => ({
|
|
78
|
-
...r,
|
|
79
|
-
source: 'squish'
|
|
80
|
-
}));
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Fused search: combine Squish and QMD results
|
|
85
|
-
*
|
|
86
|
-
* Runs both searches in parallel and merges results with deduplication.
|
|
87
|
-
*
|
|
88
|
-
* @param options - Search options
|
|
89
|
-
* @returns Fused search results from both sources
|
|
90
|
-
*/
|
|
91
|
-
export async function fusedSearch(options) {
|
|
92
|
-
const client = await getQMDClient();
|
|
93
|
-
const qmdAvailable = await client.isAvailable();
|
|
94
|
-
// Run searches in parallel
|
|
95
|
-
const results = await Promise.allSettled([
|
|
96
|
-
searchMemories(options),
|
|
97
|
-
qmdAvailable ? searchWithQMD({ ...options, includeSquishResults: false }) : []
|
|
98
|
-
]);
|
|
99
|
-
const squishResults = results[0].status === 'fulfilled'
|
|
100
|
-
? results[0].value.map((r) => ({ ...r, source: 'squish' }))
|
|
101
|
-
: [];
|
|
102
|
-
const qmdResults = results[1].status === 'fulfilled'
|
|
103
|
-
? results[1].value
|
|
104
|
-
: [];
|
|
105
|
-
// Deduplicate by content similarity
|
|
106
|
-
const seenContent = new Set();
|
|
107
|
-
const merged = [];
|
|
108
|
-
for (const result of [...squishResults, ...qmdResults]) {
|
|
109
|
-
// Create a content key for deduplication (first 100 chars)
|
|
110
|
-
const contentKey = result.content.substring(0, 100);
|
|
111
|
-
if (!seenContent.has(contentKey)) {
|
|
112
|
-
seenContent.add(contentKey);
|
|
113
|
-
merged.push(result);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
// Re-rank by combined score
|
|
117
|
-
merged.sort((a, b) => {
|
|
118
|
-
const scoreA = (a.similarity || 0) + (a.qmdScore || 0) / 2;
|
|
119
|
-
const scoreB = (b.similarity || 0) + (b.qmdScore || 0) / 2;
|
|
120
|
-
return scoreB - scoreA;
|
|
121
|
-
});
|
|
122
|
-
return merged.slice(0, options.limit || 10);
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Get QMD collection name for a memory type
|
|
126
|
-
*
|
|
127
|
-
* Uses the configured collection mapping from config.
|
|
128
|
-
*
|
|
129
|
-
* @param type - Memory type (observation, fact, decision, context, preference)
|
|
130
|
-
* @returns QMD collection name
|
|
131
|
-
*/
|
|
132
|
-
function getCollectionForType(type) {
|
|
133
|
-
if (!type) {
|
|
134
|
-
return 'squish-all';
|
|
135
|
-
}
|
|
136
|
-
const mapping = config.qmdCollectionMapping || {};
|
|
137
|
-
return mapping[type] || `squish-${type}`;
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Check if QMD is available and configured
|
|
141
|
-
*
|
|
142
|
-
* @returns true if QMD is enabled and available
|
|
143
|
-
*/
|
|
144
|
-
export async function isQMDAvailable() {
|
|
145
|
-
if (!config.qmdEnabled) {
|
|
146
|
-
return false;
|
|
147
|
-
}
|
|
148
|
-
try {
|
|
149
|
-
const client = await getQMDClient();
|
|
150
|
-
return await client.isAvailable();
|
|
151
|
-
}
|
|
152
|
-
catch {
|
|
153
|
-
return false;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Get QMD status and collection info
|
|
158
|
-
*
|
|
159
|
-
* @returns QMD status or null if unavailable
|
|
160
|
-
*/
|
|
161
|
-
export async function getQMDStatus() {
|
|
162
|
-
try {
|
|
163
|
-
const client = await getQMDClient();
|
|
164
|
-
const available = await client.isAvailable();
|
|
165
|
-
if (!available) {
|
|
166
|
-
return { available: false, collections: [] };
|
|
167
|
-
}
|
|
168
|
-
const status = await client.status();
|
|
169
|
-
return {
|
|
170
|
-
available: true,
|
|
171
|
-
collections: status?.collections || []
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
catch {
|
|
175
|
-
return null;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
//# sourceMappingURL=qmd-search.js.map
|
package/dist/core/snapshots.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
export interface MemoryDiff {
|
|
2
|
-
added?: string[];
|
|
3
|
-
removed?: string[];
|
|
4
|
-
changed?: Record<string, {
|
|
5
|
-
from: unknown;
|
|
6
|
-
to: unknown;
|
|
7
|
-
}>;
|
|
8
|
-
}
|
|
9
|
-
export declare function createBeforeSnapshot(memoryId: string): Promise<string>;
|
|
10
|
-
export declare function createAfterSnapshot(memoryId: string, beforeSnapshotId: string): Promise<{
|
|
11
|
-
snapshotId: string;
|
|
12
|
-
diff: MemoryDiff;
|
|
13
|
-
}>;
|
|
14
|
-
export declare function createPeriodicSnapshot(memoryId: string): Promise<string>;
|
|
15
|
-
export declare function getMemoryHistory(memoryId: string, limit?: number): Promise<any[]>;
|
|
16
|
-
export declare function getMemorySnapshot(snapshotId: string): Promise<any>;
|
|
17
|
-
export declare function deleteOldSnapshots(olderThanDays?: number): Promise<number>;
|
|
18
|
-
export declare function compareSnapshots(snapshotId1: string, snapshotId2: string): Promise<{
|
|
19
|
-
diff: MemoryDiff;
|
|
20
|
-
contextBefore: string;
|
|
21
|
-
contextAfter: string;
|
|
22
|
-
}>;
|
|
23
|
-
export declare function getSnapshotStats(memoryId?: string): Promise<{
|
|
24
|
-
totalSnapshots: number;
|
|
25
|
-
byType: Record<string, number>;
|
|
26
|
-
oldestSnapshot: Date | null;
|
|
27
|
-
newestSnapshot: Date | null;
|
|
28
|
-
}>;
|
|
29
|
-
//# sourceMappingURL=snapshots.d.ts.map
|
package/dist/core/snapshots.js
DELETED
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
// Memory Snapshots for Auditability & Diffs
|
|
2
|
-
import { eq, desc } from 'drizzle-orm';
|
|
3
|
-
import { randomUUID } from 'crypto';
|
|
4
|
-
import { getDb } from '../db/index.js';
|
|
5
|
-
import { getSchema } from '../db/schema.js';
|
|
6
|
-
import { cleanupOldMemorySnapshots } from './utils/cleanup-operations.js';
|
|
7
|
-
import { logger } from './logger.js';
|
|
8
|
-
export async function createBeforeSnapshot(memoryId) {
|
|
9
|
-
try {
|
|
10
|
-
const db = await getDb();
|
|
11
|
-
const schema = await getSchema();
|
|
12
|
-
const memory = await db
|
|
13
|
-
.select()
|
|
14
|
-
.from(schema.memories)
|
|
15
|
-
.where(eq(schema.memories.id, memoryId))
|
|
16
|
-
.limit(1);
|
|
17
|
-
if (memory.length === 0) {
|
|
18
|
-
throw new Error('Memory not found: ' + memoryId);
|
|
19
|
-
}
|
|
20
|
-
const snapshotId = randomUUID();
|
|
21
|
-
await db.insert(schema.memorySnapshots).values({
|
|
22
|
-
id: snapshotId,
|
|
23
|
-
memoryId,
|
|
24
|
-
snapshotType: 'before_update',
|
|
25
|
-
content: memory[0].content,
|
|
26
|
-
metadata: extractMetadata(memory[0]),
|
|
27
|
-
createdAt: new Date(),
|
|
28
|
-
});
|
|
29
|
-
return snapshotId;
|
|
30
|
-
}
|
|
31
|
-
catch (error) {
|
|
32
|
-
logger.error('Error creating before snapshot', error);
|
|
33
|
-
throw error;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
export async function createAfterSnapshot(memoryId, beforeSnapshotId) {
|
|
37
|
-
try {
|
|
38
|
-
const db = await getDb();
|
|
39
|
-
const schema = await getSchema();
|
|
40
|
-
const memory = await db
|
|
41
|
-
.select()
|
|
42
|
-
.from(schema.memories)
|
|
43
|
-
.where(eq(schema.memories.id, memoryId))
|
|
44
|
-
.limit(1);
|
|
45
|
-
if (memory.length === 0) {
|
|
46
|
-
throw new Error('Memory not found');
|
|
47
|
-
}
|
|
48
|
-
const before = await db
|
|
49
|
-
.select()
|
|
50
|
-
.from(schema.memorySnapshots)
|
|
51
|
-
.where(eq(schema.memorySnapshots.id, beforeSnapshotId))
|
|
52
|
-
.limit(1);
|
|
53
|
-
if (before.length === 0) {
|
|
54
|
-
throw new Error('Before snapshot not found');
|
|
55
|
-
}
|
|
56
|
-
const diff = calculateDiff(before[0].content, memory[0].content);
|
|
57
|
-
const snapshotId = randomUUID();
|
|
58
|
-
await db.insert(schema.memorySnapshots).values({
|
|
59
|
-
id: snapshotId,
|
|
60
|
-
memoryId,
|
|
61
|
-
snapshotType: 'after_update',
|
|
62
|
-
content: memory[0].content,
|
|
63
|
-
metadata: extractMetadata(memory[0]),
|
|
64
|
-
diff,
|
|
65
|
-
createdAt: new Date(),
|
|
66
|
-
});
|
|
67
|
-
return { snapshotId, diff };
|
|
68
|
-
}
|
|
69
|
-
catch (error) {
|
|
70
|
-
logger.error('Error creating after snapshot', error);
|
|
71
|
-
throw error;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
export async function createPeriodicSnapshot(memoryId) {
|
|
75
|
-
try {
|
|
76
|
-
const db = await getDb();
|
|
77
|
-
const schema = await getSchema();
|
|
78
|
-
const memory = await db
|
|
79
|
-
.select()
|
|
80
|
-
.from(schema.memories)
|
|
81
|
-
.where(eq(schema.memories.id, memoryId))
|
|
82
|
-
.limit(1);
|
|
83
|
-
if (memory.length === 0) {
|
|
84
|
-
throw new Error('Memory not found');
|
|
85
|
-
}
|
|
86
|
-
const snapshotId = randomUUID();
|
|
87
|
-
await db.insert(schema.memorySnapshots).values({
|
|
88
|
-
id: snapshotId,
|
|
89
|
-
memoryId,
|
|
90
|
-
snapshotType: 'periodic',
|
|
91
|
-
content: memory[0].content,
|
|
92
|
-
metadata: extractMetadata(memory[0]),
|
|
93
|
-
createdAt: new Date(),
|
|
94
|
-
});
|
|
95
|
-
return snapshotId;
|
|
96
|
-
}
|
|
97
|
-
catch (error) {
|
|
98
|
-
logger.error('Error creating periodic snapshot', error);
|
|
99
|
-
throw error;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
export async function getMemoryHistory(memoryId, limit = 50) {
|
|
103
|
-
try {
|
|
104
|
-
const db = await getDb();
|
|
105
|
-
const schema = await getSchema();
|
|
106
|
-
return await db
|
|
107
|
-
.select()
|
|
108
|
-
.from(schema.memorySnapshots)
|
|
109
|
-
.where(eq(schema.memorySnapshots.memoryId, memoryId))
|
|
110
|
-
.orderBy(desc(schema.memorySnapshots.createdAt))
|
|
111
|
-
.limit(limit);
|
|
112
|
-
}
|
|
113
|
-
catch (error) {
|
|
114
|
-
logger.error('Error getting memory history', error);
|
|
115
|
-
return [];
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
export async function getMemorySnapshot(snapshotId) {
|
|
119
|
-
try {
|
|
120
|
-
const db = await getDb();
|
|
121
|
-
const schema = await getSchema();
|
|
122
|
-
const snapshot = await db
|
|
123
|
-
.select()
|
|
124
|
-
.from(schema.memorySnapshots)
|
|
125
|
-
.where(eq(schema.memorySnapshots.id, snapshotId))
|
|
126
|
-
.limit(1);
|
|
127
|
-
return snapshot.length > 0 ? snapshot[0] : null;
|
|
128
|
-
}
|
|
129
|
-
catch (error) {
|
|
130
|
-
logger.error('Error getting snapshot', error);
|
|
131
|
-
return null;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
export async function deleteOldSnapshots(olderThanDays = 90) {
|
|
135
|
-
return cleanupOldMemorySnapshots(olderThanDays);
|
|
136
|
-
}
|
|
137
|
-
function extractMetadata(memory) {
|
|
138
|
-
return {
|
|
139
|
-
type: memory.type,
|
|
140
|
-
sector: memory.sector,
|
|
141
|
-
confidence: memory.confidence,
|
|
142
|
-
relevanceScore: memory.relevanceScore,
|
|
143
|
-
tags: memory.tags,
|
|
144
|
-
agentId: memory.agentId,
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
function calculateDiff(before, after) {
|
|
148
|
-
const beforeLines = before.split('\n');
|
|
149
|
-
const afterLines = after.split('\n');
|
|
150
|
-
const beforeSet = new Set(beforeLines);
|
|
151
|
-
const afterSet = new Set(afterLines);
|
|
152
|
-
const added = afterLines.filter(line => !beforeSet.has(line));
|
|
153
|
-
const removed = beforeLines.filter(line => !afterSet.has(line));
|
|
154
|
-
return {
|
|
155
|
-
added: added.length > 0 ? added : undefined,
|
|
156
|
-
removed: removed.length > 0 ? removed : undefined,
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
export async function compareSnapshots(snapshotId1, snapshotId2) {
|
|
160
|
-
try {
|
|
161
|
-
const snap1 = await getMemorySnapshot(snapshotId1);
|
|
162
|
-
const snap2 = await getMemorySnapshot(snapshotId2);
|
|
163
|
-
if (!snap1 || !snap2) {
|
|
164
|
-
throw new Error('One or both snapshots not found');
|
|
165
|
-
}
|
|
166
|
-
return {
|
|
167
|
-
diff: calculateDiff(snap1.content, snap2.content),
|
|
168
|
-
contextBefore: snap1.content.substring(0, 200),
|
|
169
|
-
contextAfter: snap2.content.substring(0, 200),
|
|
170
|
-
};
|
|
171
|
-
}
|
|
172
|
-
catch (error) {
|
|
173
|
-
logger.error('Error comparing snapshots', error);
|
|
174
|
-
throw error;
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
export async function getSnapshotStats(memoryId) {
|
|
178
|
-
try {
|
|
179
|
-
const db = await getDb();
|
|
180
|
-
const schema = await getSchema();
|
|
181
|
-
const where = memoryId ? eq(schema.memorySnapshots.memoryId, memoryId) : undefined;
|
|
182
|
-
const snapshots = await db
|
|
183
|
-
.select()
|
|
184
|
-
.from(schema.memorySnapshots)
|
|
185
|
-
.where(where);
|
|
186
|
-
const stats = {
|
|
187
|
-
totalSnapshots: snapshots.length,
|
|
188
|
-
byType: {
|
|
189
|
-
before_update: 0,
|
|
190
|
-
after_update: 0,
|
|
191
|
-
periodic: 0,
|
|
192
|
-
},
|
|
193
|
-
oldestSnapshot: null,
|
|
194
|
-
newestSnapshot: null,
|
|
195
|
-
};
|
|
196
|
-
let oldest = null;
|
|
197
|
-
let newest = null;
|
|
198
|
-
for (const snap of snapshots) {
|
|
199
|
-
stats.byType[snap.snapshotType]++;
|
|
200
|
-
const date = new Date(snap.createdAt);
|
|
201
|
-
if (!oldest || date < oldest)
|
|
202
|
-
oldest = date;
|
|
203
|
-
if (!newest || date > newest)
|
|
204
|
-
newest = date;
|
|
205
|
-
}
|
|
206
|
-
stats.oldestSnapshot = oldest;
|
|
207
|
-
stats.newestSnapshot = newest;
|
|
208
|
-
return stats;
|
|
209
|
-
}
|
|
210
|
-
catch (error) {
|
|
211
|
-
logger.error('Error getting snapshot stats', error);
|
|
212
|
-
return {
|
|
213
|
-
totalSnapshots: 0,
|
|
214
|
-
byType: {},
|
|
215
|
-
oldestSnapshot: null,
|
|
216
|
-
newestSnapshot: null,
|
|
217
|
-
};
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
//# sourceMappingURL=snapshots.js.map
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* QMD Memory Synchronization
|
|
3
|
-
*
|
|
4
|
-
* Syncs Squish memories to QMD collections for hybrid search.
|
|
5
|
-
* Writes memories as markdown files to QMD collection directories.
|
|
6
|
-
*
|
|
7
|
-
* QMD automatically indexes files in collection directories, so we just
|
|
8
|
-
* need to write files to the right location.
|
|
9
|
-
*
|
|
10
|
-
* Collection Structure:
|
|
11
|
-
* - qmd-collections/squish-observations/ - Observation memories
|
|
12
|
-
* - qmd-collections/squish-facts/ - Fact memories
|
|
13
|
-
* - qmd-collections/squish-decisions/ - Decision memories
|
|
14
|
-
* - qmd-collections/squish-context/ - Context memories
|
|
15
|
-
* - qmd-collections/squish-preferences/ - Preference memories
|
|
16
|
-
*/
|
|
17
|
-
import type { MemoryRecord } from '../memory/memories.js';
|
|
18
|
-
export interface CollectionMapping {
|
|
19
|
-
[memoryType: string]: string;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* QMD Memory Sync class
|
|
23
|
-
*
|
|
24
|
-
* Manages synchronization of Squish memories to QMD collections.
|
|
25
|
-
*/
|
|
26
|
-
export declare class QMDMemorySync {
|
|
27
|
-
private collectionsPath;
|
|
28
|
-
private client;
|
|
29
|
-
private initialized;
|
|
30
|
-
constructor();
|
|
31
|
-
/**
|
|
32
|
-
* Initialize the sync layer
|
|
33
|
-
*
|
|
34
|
-
* Creates collection directories and verifies QMD connection.
|
|
35
|
-
*/
|
|
36
|
-
initialize(): Promise<void>;
|
|
37
|
-
/**
|
|
38
|
-
* Sync a memory to QMD
|
|
39
|
-
*
|
|
40
|
-
* Writes memory as markdown to the appropriate collection directory.
|
|
41
|
-
* QMD will automatically index the file on its next update cycle.
|
|
42
|
-
*
|
|
43
|
-
* @param memory - Memory record to sync
|
|
44
|
-
*/
|
|
45
|
-
syncMemory(memory: MemoryRecord): Promise<void>;
|
|
46
|
-
/**
|
|
47
|
-
* Batch sync multiple memories
|
|
48
|
-
*
|
|
49
|
-
* @param memories - Array of memory records to sync
|
|
50
|
-
*/
|
|
51
|
-
syncMemories(memories: MemoryRecord[]): Promise<void>;
|
|
52
|
-
/**
|
|
53
|
-
* Trigger QMD re-index
|
|
54
|
-
*
|
|
55
|
-
* Note: This would typically call `qmd update` or `qmd embed`.
|
|
56
|
-
* For now, we just log that documents are ready for indexing.
|
|
57
|
-
*/
|
|
58
|
-
reindex(): Promise<void>;
|
|
59
|
-
/**
|
|
60
|
-
* Get collection name for a memory
|
|
61
|
-
*
|
|
62
|
-
* @param memory - Memory record
|
|
63
|
-
* @returns QMD collection name
|
|
64
|
-
*/
|
|
65
|
-
private getCollectionForMemory;
|
|
66
|
-
/**
|
|
67
|
-
* Generate filename for memory
|
|
68
|
-
*
|
|
69
|
-
* Uses a docid-like format (6-char hash) for consistent naming.
|
|
70
|
-
*
|
|
71
|
-
* @param memory - Memory record
|
|
72
|
-
* @returns Filename for the memory
|
|
73
|
-
*/
|
|
74
|
-
private getFilenameForMemory;
|
|
75
|
-
/**
|
|
76
|
-
* Format memory as markdown for QMD indexing
|
|
77
|
-
*
|
|
78
|
-
* Uses frontmatter for metadata and standard markdown for content.
|
|
79
|
-
*
|
|
80
|
-
* @param memory - Memory record
|
|
81
|
-
* @returns Markdown formatted string
|
|
82
|
-
*/
|
|
83
|
-
private formatMemoryAsMarkdown;
|
|
84
|
-
/**
|
|
85
|
-
* Capitalize first letter of a string
|
|
86
|
-
*/
|
|
87
|
-
private capitalize;
|
|
88
|
-
/**
|
|
89
|
-
* Create a QMD collection directory
|
|
90
|
-
*
|
|
91
|
-
* @param name - Collection name
|
|
92
|
-
*/
|
|
93
|
-
private createCollection;
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Get the singleton QMD memory sync instance
|
|
97
|
-
*
|
|
98
|
-
* @returns QMDMemorySync instance
|
|
99
|
-
*/
|
|
100
|
-
export declare function getQMDMemorySync(): Promise<QMDMemorySync>;
|
|
101
|
-
/**
|
|
102
|
-
* Reset the singleton sync instance
|
|
103
|
-
* Useful for testing or when configuration changes.
|
|
104
|
-
*/
|
|
105
|
-
export declare function resetQMDMemorySync(): void;
|
|
106
|
-
//# sourceMappingURL=qmd-sync.d.ts.map
|