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
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hash cache maintenance - SimHash/MinHash signatures for duplicate detection
|
|
3
|
+
*/
|
|
4
|
+
import { getDb } from '../../../db/index.js';
|
|
5
|
+
import { getSchema } from '../../../db/schema.js';
|
|
6
|
+
import { createDatabaseClient } from '../../../core/storage/database.js';
|
|
7
|
+
import { eq } from 'drizzle-orm';
|
|
8
|
+
import { SimHashFilter, MinHashFilter } from '../detection/hash-filters.js';
|
|
9
|
+
import crypto from 'crypto';
|
|
10
|
+
import { logger } from '../../../core/logger.js';
|
|
11
|
+
function hashContent(content) {
|
|
12
|
+
return crypto.createHash('md5').update(content).digest('hex');
|
|
13
|
+
}
|
|
14
|
+
export async function updateCache(memoryId) {
|
|
15
|
+
try {
|
|
16
|
+
const db = createDatabaseClient(await getDb());
|
|
17
|
+
const schema = await getSchema();
|
|
18
|
+
// Load the memory
|
|
19
|
+
const [memory] = await db
|
|
20
|
+
.select()
|
|
21
|
+
.from(schema.memories)
|
|
22
|
+
.where(eq(schema.memories.id, memoryId));
|
|
23
|
+
if (!memory) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
// Generate hashes
|
|
27
|
+
const simhashFilter = new SimHashFilter();
|
|
28
|
+
const minhashFilter = new MinHashFilter();
|
|
29
|
+
const simhash = simhashFilter.generateHash(memory.content);
|
|
30
|
+
const minhash = minhashFilter.generateSignature(memory.content);
|
|
31
|
+
const contentHash = hashContent(memory.content);
|
|
32
|
+
// Upsert cache entry
|
|
33
|
+
const now = new Date();
|
|
34
|
+
// Check if entry exists
|
|
35
|
+
const [existing] = await db
|
|
36
|
+
.select()
|
|
37
|
+
.from(schema.memoryHashCache)
|
|
38
|
+
.where(eq(schema.memoryHashCache.memoryId, memoryId));
|
|
39
|
+
if (existing) {
|
|
40
|
+
// Update existing
|
|
41
|
+
await db
|
|
42
|
+
.update(schema.memoryHashCache)
|
|
43
|
+
.set({
|
|
44
|
+
simhash,
|
|
45
|
+
minhash: minhash,
|
|
46
|
+
contentHash,
|
|
47
|
+
lastUpdated: now,
|
|
48
|
+
})
|
|
49
|
+
.where(eq(schema.memoryHashCache.memoryId, memoryId));
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Create new
|
|
53
|
+
await db.insert(schema.memoryHashCache).values({
|
|
54
|
+
memoryId,
|
|
55
|
+
projectId: memory.projectId,
|
|
56
|
+
simhash,
|
|
57
|
+
minhash: minhash,
|
|
58
|
+
contentHash,
|
|
59
|
+
lastUpdated: now,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
logger.error(`Failed to update hash cache for ${memoryId}`, error);
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export async function rebuildCache(projectId) {
|
|
70
|
+
try {
|
|
71
|
+
const db = createDatabaseClient(await getDb());
|
|
72
|
+
const schema = await getSchema();
|
|
73
|
+
// Get all memories in project
|
|
74
|
+
const memories = await db
|
|
75
|
+
.select()
|
|
76
|
+
.from(schema.memories)
|
|
77
|
+
.where(eq(schema.memories.projectId, projectId));
|
|
78
|
+
let succeeded = 0;
|
|
79
|
+
let failed = 0;
|
|
80
|
+
for (const memory of memories) {
|
|
81
|
+
const ok = await updateCache(memory.id);
|
|
82
|
+
if (ok) {
|
|
83
|
+
succeeded++;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
failed++;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
processed: memories.length,
|
|
91
|
+
succeeded,
|
|
92
|
+
failed,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
logger.error(`Failed to rebuild hash cache for project ${projectId}`, error);
|
|
97
|
+
return { processed: 0, succeeded: 0, failed: 0 };
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export async function isStale(memoryId) {
|
|
101
|
+
try {
|
|
102
|
+
const db = createDatabaseClient(await getDb());
|
|
103
|
+
const schema = await getSchema();
|
|
104
|
+
const [memory] = await db
|
|
105
|
+
.select()
|
|
106
|
+
.from(schema.memories)
|
|
107
|
+
.where(eq(schema.memories.id, memoryId));
|
|
108
|
+
if (!memory) {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
const [cacheEntry] = await db
|
|
112
|
+
.select()
|
|
113
|
+
.from(schema.memoryHashCache)
|
|
114
|
+
.where(eq(schema.memoryHashCache.memoryId, memoryId));
|
|
115
|
+
if (!cacheEntry) {
|
|
116
|
+
return true; // No cache entry = stale
|
|
117
|
+
}
|
|
118
|
+
const currentContentHash = hashContent(memory.content);
|
|
119
|
+
return currentContentHash !== cacheEntry.contentHash;
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
logger.error('Failed to check hash cache staleness', error);
|
|
123
|
+
return true; // Assume stale on error
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
export async function cleanupOrphaned(projectId) {
|
|
127
|
+
try {
|
|
128
|
+
const db = createDatabaseClient(await getDb());
|
|
129
|
+
const schema = await getSchema();
|
|
130
|
+
// Get all cache entries for project
|
|
131
|
+
const cacheEntries = await db
|
|
132
|
+
.select()
|
|
133
|
+
.from(schema.memoryHashCache)
|
|
134
|
+
.where(eq(schema.memoryHashCache.projectId, projectId));
|
|
135
|
+
let deleted = 0;
|
|
136
|
+
for (const entry of cacheEntries) {
|
|
137
|
+
// Check if memory exists
|
|
138
|
+
const [memory] = await db
|
|
139
|
+
.select()
|
|
140
|
+
.from(schema.memories)
|
|
141
|
+
.where(eq(schema.memories.id, entry.memoryId));
|
|
142
|
+
if (!memory) {
|
|
143
|
+
// Memory doesn't exist, delete cache entry
|
|
144
|
+
await db
|
|
145
|
+
.delete(schema.memoryHashCache)
|
|
146
|
+
.where(eq(schema.memoryHashCache.memoryId, entry.memoryId));
|
|
147
|
+
deleted++;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return deleted;
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
logger.error('Failed to cleanup orphaned hash cache', error);
|
|
154
|
+
return 0;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=cache-maintenance.js.map
|
|
@@ -2,12 +2,8 @@
|
|
|
2
2
|
* Safety checks to prevent bad merges.
|
|
3
3
|
* Checks run before creating merge proposals and are categorized as BLOCKER or WARNING.
|
|
4
4
|
*/
|
|
5
|
-
import type { Memory } from '
|
|
6
|
-
|
|
7
|
-
passed: boolean;
|
|
8
|
-
warnings: string[];
|
|
9
|
-
blockers: string[];
|
|
10
|
-
}
|
|
5
|
+
import type { Memory } from '../../../db/drizzle/schema.js';
|
|
6
|
+
import type { SafetyCheckResult } from '../../lib/types.js';
|
|
11
7
|
export interface SafetyCheck {
|
|
12
8
|
name: string;
|
|
13
9
|
description: string;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Type-specific merge strategies for different memory types.
|
|
3
3
|
* Each type has different merge semantics to preserve meaning and prevent data loss.
|
|
4
4
|
*/
|
|
5
|
-
import type { Memory, MemoryType } from '
|
|
5
|
+
import type { Memory, MemoryType } from '../../../db/drizzle/schema.js';
|
|
6
6
|
export interface MergeStrategy {
|
|
7
7
|
type: MemoryType;
|
|
8
8
|
/**
|
|
@@ -26,6 +26,24 @@ export interface MergedMemory {
|
|
|
26
26
|
mergeReason: string;
|
|
27
27
|
conflictWarnings: string[];
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Base implementation of MergeStrategy with common functionality.
|
|
31
|
+
* Reduces code duplication across specific merge strategies.
|
|
32
|
+
*/
|
|
33
|
+
export declare abstract class BaseMergeStrategy implements MergeStrategy {
|
|
34
|
+
abstract type: MemoryType;
|
|
35
|
+
canMerge(sources: Memory[]): {
|
|
36
|
+
ok: boolean;
|
|
37
|
+
reason?: string;
|
|
38
|
+
};
|
|
39
|
+
protected validateSources(sources: Memory[]): boolean;
|
|
40
|
+
protected handleEmptySources(): MergedMemory;
|
|
41
|
+
protected mergeTags(sources: Memory[]): string[];
|
|
42
|
+
protected buildBaseMetadata(sources: Memory[], extra?: Record<string, unknown>): Record<string, unknown>;
|
|
43
|
+
protected sortByDate(sources: Memory[], order?: 'asc' | 'desc'): Memory[];
|
|
44
|
+
protected sortChronologically(sources: Memory[]): Memory[];
|
|
45
|
+
abstract merge(sources: Memory[]): MergedMemory;
|
|
46
|
+
}
|
|
29
47
|
export declare const MERGE_STRATEGIES: Record<MemoryType, MergeStrategy>;
|
|
30
48
|
export declare function getMergeStrategy(type: MemoryType): MergeStrategy;
|
|
31
49
|
export declare function mergeMemories(sources: Memory[]): MergedMemory;
|
|
@@ -3,28 +3,62 @@
|
|
|
3
3
|
* Each type has different merge semantics to preserve meaning and prevent data loss.
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* Base implementation of MergeStrategy with common functionality.
|
|
7
|
+
* Reduces code duplication across specific merge strategies.
|
|
8
8
|
*/
|
|
9
|
-
class
|
|
10
|
-
type = 'fact';
|
|
9
|
+
export class BaseMergeStrategy {
|
|
11
10
|
canMerge(sources) {
|
|
12
|
-
// Facts can almost always be merged
|
|
13
11
|
if (sources.length < 2) {
|
|
14
12
|
return { ok: false, reason: 'Need at least 2 memories to merge' };
|
|
15
13
|
}
|
|
16
14
|
return { ok: true };
|
|
17
15
|
}
|
|
16
|
+
validateSources(sources) {
|
|
17
|
+
return sources.length >= 2;
|
|
18
|
+
}
|
|
19
|
+
handleEmptySources() {
|
|
20
|
+
return {
|
|
21
|
+
content: '',
|
|
22
|
+
summary: null,
|
|
23
|
+
tags: [],
|
|
24
|
+
metadata: {},
|
|
25
|
+
mergeReason: 'Empty source set',
|
|
26
|
+
conflictWarnings: [],
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
mergeTags(sources) {
|
|
30
|
+
const tagSet = new Set();
|
|
31
|
+
for (const source of sources) {
|
|
32
|
+
for (const tag of source.tags || []) {
|
|
33
|
+
tagSet.add(tag);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return Array.from(tagSet);
|
|
37
|
+
}
|
|
38
|
+
buildBaseMetadata(sources, extra) {
|
|
39
|
+
return {
|
|
40
|
+
mergedFrom: sources.map((m) => m.id),
|
|
41
|
+
mergeCount: sources.length,
|
|
42
|
+
...extra,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
sortByDate(sources, order = 'desc') {
|
|
46
|
+
const sorted = [...sources].sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
|
|
47
|
+
return order === 'asc' ? [...sorted].reverse() : sorted;
|
|
48
|
+
}
|
|
49
|
+
sortChronologically(sources) {
|
|
50
|
+
return [...sources].sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* FACT strategy: Union of information, remove exact duplicates.
|
|
55
|
+
* Combines all unique facts into a unified statement with provenance tracking.
|
|
56
|
+
*/
|
|
57
|
+
class FactMergeStrategy extends BaseMergeStrategy {
|
|
58
|
+
type = 'fact';
|
|
18
59
|
merge(sources) {
|
|
19
60
|
if (sources.length === 0) {
|
|
20
|
-
return
|
|
21
|
-
content: '',
|
|
22
|
-
summary: null,
|
|
23
|
-
tags: [],
|
|
24
|
-
metadata: {},
|
|
25
|
-
mergeReason: 'Empty source set',
|
|
26
|
-
conflictWarnings: [],
|
|
27
|
-
};
|
|
61
|
+
return this.handleEmptySources();
|
|
28
62
|
}
|
|
29
63
|
// Split content into sentences and deduplicate
|
|
30
64
|
const sentenceSet = new Set();
|
|
@@ -45,27 +79,14 @@ class FactMergeStrategy {
|
|
|
45
79
|
// Sort sentences for consistency
|
|
46
80
|
const mergedSentences = Array.from(sentenceSet).sort();
|
|
47
81
|
const content = mergedSentences.join('. ') + (mergedSentences.length > 0 ? '.' : '');
|
|
48
|
-
//
|
|
49
|
-
const
|
|
50
|
-
for (const source of sources) {
|
|
51
|
-
for (const tag of source.tags || []) {
|
|
52
|
-
tagSet.add(tag);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
// Create merged metadata with provenance
|
|
56
|
-
const metadata = {
|
|
57
|
-
mergedFrom: sources.map((m) => ({
|
|
58
|
-
id: m.id,
|
|
59
|
-
createdAt: m.createdAt,
|
|
60
|
-
source: m.source,
|
|
61
|
-
})),
|
|
62
|
-
mergeCount: sources.length,
|
|
82
|
+
// Build merged metadata with provenance
|
|
83
|
+
const metadata = this.buildBaseMetadata(sources, {
|
|
63
84
|
timestamps: timestamps.sort(),
|
|
64
|
-
};
|
|
85
|
+
});
|
|
65
86
|
return {
|
|
66
87
|
content,
|
|
67
88
|
summary: null,
|
|
68
|
-
tags:
|
|
89
|
+
tags: this.mergeTags(sources),
|
|
69
90
|
metadata,
|
|
70
91
|
mergeReason: `Merged ${sources.length} facts by combining all unique statements`,
|
|
71
92
|
conflictWarnings: [],
|
|
@@ -76,27 +97,14 @@ class FactMergeStrategy {
|
|
|
76
97
|
* PREFERENCE strategy: Keep latest by timestamp, track evolution history.
|
|
77
98
|
* Warns if preferences conflict, indicating user changed their mind.
|
|
78
99
|
*/
|
|
79
|
-
class PreferenceMergeStrategy {
|
|
100
|
+
class PreferenceMergeStrategy extends BaseMergeStrategy {
|
|
80
101
|
type = 'preference';
|
|
81
|
-
canMerge(sources) {
|
|
82
|
-
if (sources.length < 2) {
|
|
83
|
-
return { ok: false, reason: 'Need at least 2 memories to merge' };
|
|
84
|
-
}
|
|
85
|
-
return { ok: true };
|
|
86
|
-
}
|
|
87
102
|
merge(sources) {
|
|
88
103
|
if (sources.length === 0) {
|
|
89
|
-
return
|
|
90
|
-
content: '',
|
|
91
|
-
summary: null,
|
|
92
|
-
tags: [],
|
|
93
|
-
metadata: {},
|
|
94
|
-
mergeReason: 'Empty source set',
|
|
95
|
-
conflictWarnings: [],
|
|
96
|
-
};
|
|
104
|
+
return this.handleEmptySources();
|
|
97
105
|
}
|
|
98
106
|
// Sort by creation date (newest first)
|
|
99
|
-
const sorted =
|
|
107
|
+
const sorted = this.sortByDate(sources);
|
|
100
108
|
const latest = sorted[0];
|
|
101
109
|
const warnings = [];
|
|
102
110
|
// Check for conflicting preferences
|
|
@@ -112,12 +120,10 @@ class PreferenceMergeStrategy {
|
|
|
112
120
|
confidence: m.confidence || 100,
|
|
113
121
|
source: m.source,
|
|
114
122
|
}));
|
|
115
|
-
const metadata = {
|
|
116
|
-
mergedFrom: sources.map((m) => m.id),
|
|
123
|
+
const metadata = this.buildBaseMetadata(sources, {
|
|
117
124
|
preferenceHistory: history,
|
|
118
|
-
mergeCount: sources.length,
|
|
119
125
|
latestAt: latest.createdAt,
|
|
120
|
-
};
|
|
126
|
+
});
|
|
121
127
|
const summary = sources.length > 1
|
|
122
128
|
? `Prefers: ${latest.content} (evolved from ${sources.length} preferences)`
|
|
123
129
|
: null;
|
|
@@ -135,27 +141,14 @@ class PreferenceMergeStrategy {
|
|
|
135
141
|
* DECISION strategy: Keep latest decision, link to previous ones in timeline.
|
|
136
142
|
* Warns if decisions contradict, preserving rationale history.
|
|
137
143
|
*/
|
|
138
|
-
class DecisionMergeStrategy {
|
|
144
|
+
class DecisionMergeStrategy extends BaseMergeStrategy {
|
|
139
145
|
type = 'decision';
|
|
140
|
-
canMerge(sources) {
|
|
141
|
-
if (sources.length < 2) {
|
|
142
|
-
return { ok: false, reason: 'Need at least 2 memories to merge' };
|
|
143
|
-
}
|
|
144
|
-
return { ok: true };
|
|
145
|
-
}
|
|
146
146
|
merge(sources) {
|
|
147
147
|
if (sources.length === 0) {
|
|
148
|
-
return
|
|
149
|
-
content: '',
|
|
150
|
-
summary: null,
|
|
151
|
-
tags: [],
|
|
152
|
-
metadata: {},
|
|
153
|
-
mergeReason: 'Empty source set',
|
|
154
|
-
conflictWarnings: [],
|
|
155
|
-
};
|
|
148
|
+
return this.handleEmptySources();
|
|
156
149
|
}
|
|
157
150
|
// Sort by creation date (newest first)
|
|
158
|
-
const sorted =
|
|
151
|
+
const sorted = this.sortByDate(sources);
|
|
159
152
|
const latest = sorted[0];
|
|
160
153
|
const warnings = [];
|
|
161
154
|
// Check for conflicting decisions
|
|
@@ -170,13 +163,11 @@ class DecisionMergeStrategy {
|
|
|
170
163
|
confidence: m.confidence || 100,
|
|
171
164
|
rationale: m.summary || 'No rationale recorded',
|
|
172
165
|
}));
|
|
173
|
-
const metadata = {
|
|
174
|
-
mergedFrom: sources.map((m) => m.id),
|
|
166
|
+
const metadata = this.buildBaseMetadata(sources, {
|
|
175
167
|
decisionTimeline: timeline,
|
|
176
|
-
mergeCount: sources.length,
|
|
177
168
|
currentDecisionAt: latest.createdAt,
|
|
178
169
|
supersedes: sorted.slice(1).map((m) => m.id),
|
|
179
|
-
};
|
|
170
|
+
});
|
|
180
171
|
const summary = sources.length > 1 ? `Decided: ${latest.content} (${sources.length} decisions)` : null;
|
|
181
172
|
return {
|
|
182
173
|
content: latest.content,
|
|
@@ -192,31 +183,17 @@ class DecisionMergeStrategy {
|
|
|
192
183
|
* OBSERVATION strategy: Aggregate observations in chronological order.
|
|
193
184
|
* Preserves temporal patterns and frequency information.
|
|
194
185
|
*/
|
|
195
|
-
class ObservationMergeStrategy {
|
|
186
|
+
class ObservationMergeStrategy extends BaseMergeStrategy {
|
|
196
187
|
type = 'observation';
|
|
197
|
-
canMerge(sources) {
|
|
198
|
-
if (sources.length < 2) {
|
|
199
|
-
return { ok: false, reason: 'Need at least 2 memories to merge' };
|
|
200
|
-
}
|
|
201
|
-
return { ok: true };
|
|
202
|
-
}
|
|
203
188
|
merge(sources) {
|
|
204
189
|
if (sources.length === 0) {
|
|
205
|
-
return
|
|
206
|
-
content: '',
|
|
207
|
-
summary: null,
|
|
208
|
-
tags: [],
|
|
209
|
-
metadata: {},
|
|
210
|
-
mergeReason: 'Empty source set',
|
|
211
|
-
conflictWarnings: [],
|
|
212
|
-
};
|
|
190
|
+
return this.handleEmptySources();
|
|
213
191
|
}
|
|
214
192
|
// Sort chronologically
|
|
215
|
-
const sorted =
|
|
193
|
+
const sorted = this.sortChronologically(sources);
|
|
216
194
|
// Create observation summary
|
|
217
195
|
const observations = sorted.map((m) => `• ${m.content}`).join('\n');
|
|
218
|
-
const metadata = {
|
|
219
|
-
mergedFrom: sources.map((m) => m.id),
|
|
196
|
+
const metadata = this.buildBaseMetadata(sources, {
|
|
220
197
|
observationCount: sources.length,
|
|
221
198
|
timeSpan: {
|
|
222
199
|
start: sorted[0].createdAt,
|
|
@@ -227,18 +204,11 @@ class ObservationMergeStrategy {
|
|
|
227
204
|
content: m.content,
|
|
228
205
|
createdAt: m.createdAt,
|
|
229
206
|
})),
|
|
230
|
-
};
|
|
231
|
-
// Merge tags
|
|
232
|
-
const tagSet = new Set();
|
|
233
|
-
for (const source of sources) {
|
|
234
|
-
for (const tag of source.tags || []) {
|
|
235
|
-
tagSet.add(tag);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
207
|
+
});
|
|
238
208
|
return {
|
|
239
209
|
content: `Observations (${sources.length} total):\n${observations}`,
|
|
240
210
|
summary: `${sources.length} observations over time period`,
|
|
241
|
-
tags:
|
|
211
|
+
tags: this.mergeTags(sources),
|
|
242
212
|
metadata,
|
|
243
213
|
mergeReason: `Merged ${sources.length} observations chronologically`,
|
|
244
214
|
conflictWarnings: [],
|
|
@@ -249,24 +219,11 @@ class ObservationMergeStrategy {
|
|
|
249
219
|
* CONTEXT strategy: Union of unique context, remove exact duplicates.
|
|
250
220
|
* Preserves all distinct context items.
|
|
251
221
|
*/
|
|
252
|
-
class ContextMergeStrategy {
|
|
222
|
+
class ContextMergeStrategy extends BaseMergeStrategy {
|
|
253
223
|
type = 'context';
|
|
254
|
-
canMerge(sources) {
|
|
255
|
-
if (sources.length < 2) {
|
|
256
|
-
return { ok: false, reason: 'Need at least 2 memories to merge' };
|
|
257
|
-
}
|
|
258
|
-
return { ok: true };
|
|
259
|
-
}
|
|
260
224
|
merge(sources) {
|
|
261
225
|
if (sources.length === 0) {
|
|
262
|
-
return
|
|
263
|
-
content: '',
|
|
264
|
-
summary: null,
|
|
265
|
-
tags: [],
|
|
266
|
-
metadata: {},
|
|
267
|
-
mergeReason: 'Empty source set',
|
|
268
|
-
conflictWarnings: [],
|
|
269
|
-
};
|
|
226
|
+
return this.handleEmptySources();
|
|
270
227
|
}
|
|
271
228
|
// Deduplicate by content (exact matches)
|
|
272
229
|
const uniqueContexts = new Map();
|
|
@@ -280,23 +237,15 @@ class ContextMergeStrategy {
|
|
|
280
237
|
.sort()
|
|
281
238
|
.map((content) => `• ${content}`)
|
|
282
239
|
.join('\n');
|
|
283
|
-
const metadata = {
|
|
284
|
-
mergedFrom: sources.map((m) => m.id),
|
|
240
|
+
const metadata = this.buildBaseMetadata(sources, {
|
|
285
241
|
uniqueContextCount: uniqueContexts.size,
|
|
286
242
|
totalContextCount: sources.length,
|
|
287
243
|
deduplicatedEntries: sources.length - uniqueContexts.size,
|
|
288
|
-
};
|
|
289
|
-
// Merge tags
|
|
290
|
-
const tagSet = new Set();
|
|
291
|
-
for (const source of sources) {
|
|
292
|
-
for (const tag of source.tags || []) {
|
|
293
|
-
tagSet.add(tag);
|
|
294
|
-
}
|
|
295
|
-
}
|
|
244
|
+
});
|
|
296
245
|
return {
|
|
297
246
|
content: contextList,
|
|
298
247
|
summary: `${uniqueContexts.size} context items (${sources.length} total)`,
|
|
299
|
-
tags:
|
|
248
|
+
tags: this.mergeTags(sources),
|
|
300
249
|
metadata,
|
|
301
250
|
mergeReason: `Merged ${sources.length} context records into ${uniqueContexts.size} unique items`,
|
|
302
251
|
conflictWarnings: [],
|
|
@@ -309,6 +258,8 @@ export const MERGE_STRATEGIES = {
|
|
|
309
258
|
decision: new DecisionMergeStrategy(),
|
|
310
259
|
observation: new ObservationMergeStrategy(),
|
|
311
260
|
context: new ContextMergeStrategy(),
|
|
261
|
+
reflection: new ObservationMergeStrategy(),
|
|
262
|
+
note: new ObservationMergeStrategy(), // jot uses observation strategy
|
|
312
263
|
};
|
|
313
264
|
export function getMergeStrategy(type) {
|
|
314
265
|
const strategy = MERGE_STRATEGIES[type];
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript types and interfaces for memory merging
|
|
3
|
+
*/
|
|
4
|
+
import type { Memory, MemoryMergeProposal } from '../../db/drizzle/schema.js';
|
|
5
|
+
/**
|
|
6
|
+
* Merge proposal status
|
|
7
|
+
*/
|
|
8
|
+
export type MergeProposalStatus = 'pending' | 'approved' | 'rejected' | 'expired';
|
|
9
|
+
/**
|
|
10
|
+
* Confidence level for merge suggestions
|
|
11
|
+
*/
|
|
12
|
+
export type ConfidenceLevel = 'high' | 'medium' | 'low';
|
|
13
|
+
/**
|
|
14
|
+
* Detection method used to find duplicates
|
|
15
|
+
*/
|
|
16
|
+
export type DetectionMethod = 'simhash' | 'minhash' | 'embedding';
|
|
17
|
+
/**
|
|
18
|
+
* Merge strategy type per memory type
|
|
19
|
+
*/
|
|
20
|
+
export type MergeStrategyType = 'union' | 'latest' | 'voting' | 'custom';
|
|
21
|
+
/**
|
|
22
|
+
* Memory pair candidate for merging
|
|
23
|
+
*/
|
|
24
|
+
export interface MemoryMergePair {
|
|
25
|
+
memory1: Memory;
|
|
26
|
+
memory2: Memory;
|
|
27
|
+
similarityScore: number;
|
|
28
|
+
detectionMethod: DetectionMethod;
|
|
29
|
+
confidenceLevel: ConfidenceLevel;
|
|
30
|
+
mergeReason: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Merge proposal with all details
|
|
34
|
+
*/
|
|
35
|
+
export interface MergeProposalDetails {
|
|
36
|
+
proposal: MemoryMergeProposal;
|
|
37
|
+
sourceMemories: Memory[];
|
|
38
|
+
previewMerged: {
|
|
39
|
+
content: string;
|
|
40
|
+
summary: string | null;
|
|
41
|
+
tags: string[];
|
|
42
|
+
metadata: Record<string, unknown>;
|
|
43
|
+
};
|
|
44
|
+
analysis: {
|
|
45
|
+
savedTokens: number;
|
|
46
|
+
savedPercentage: number;
|
|
47
|
+
conflictWarnings: string[];
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Merge result after approval
|
|
52
|
+
*/
|
|
53
|
+
export interface MergeResult {
|
|
54
|
+
proposalId: string;
|
|
55
|
+
canonicalMemoryId: string;
|
|
56
|
+
mergedMemoryIds: string[];
|
|
57
|
+
tokensSaved: number;
|
|
58
|
+
mergedAt: Date;
|
|
59
|
+
mergeHistoryId?: string;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Merge reversal result
|
|
63
|
+
*/
|
|
64
|
+
export interface MergeReversal {
|
|
65
|
+
mergeHistoryId: string;
|
|
66
|
+
canonicalMemoryId: string;
|
|
67
|
+
restoredMemoryIds: string[];
|
|
68
|
+
reversedAt: Date;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Detection statistics
|
|
72
|
+
*/
|
|
73
|
+
export interface DetectionStatistics {
|
|
74
|
+
totalMemories: number;
|
|
75
|
+
scannedMemories: number;
|
|
76
|
+
candidatesFound: number;
|
|
77
|
+
candidatesRanked: number;
|
|
78
|
+
estimatedTokensSaved: number;
|
|
79
|
+
timeMs: {
|
|
80
|
+
stage1: number;
|
|
81
|
+
stage2: number;
|
|
82
|
+
total: number;
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Project merge statistics
|
|
87
|
+
*/
|
|
88
|
+
export interface ProjectMergeStatistics {
|
|
89
|
+
projectId: string;
|
|
90
|
+
totalMemories: number;
|
|
91
|
+
mergeableMemories: number;
|
|
92
|
+
mergedMemories: number;
|
|
93
|
+
canonicalMemories: number;
|
|
94
|
+
pendingProposals: number;
|
|
95
|
+
approvedMerges: number;
|
|
96
|
+
rejectedProposals: number;
|
|
97
|
+
reversedMerges: number;
|
|
98
|
+
tokensSaved: {
|
|
99
|
+
total: number;
|
|
100
|
+
formatted: string;
|
|
101
|
+
percentage: number;
|
|
102
|
+
};
|
|
103
|
+
averageMergeSize: number;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Hash cache entry for fast duplicate detection
|
|
107
|
+
*/
|
|
108
|
+
export interface HashCacheEntry {
|
|
109
|
+
memoryId: string;
|
|
110
|
+
simhash: string;
|
|
111
|
+
minhash: number[];
|
|
112
|
+
contentHash: string;
|
|
113
|
+
lastUpdated: Date;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Stage 1 candidate pair with hash distances
|
|
117
|
+
*/
|
|
118
|
+
export interface Stage1CandidatePair {
|
|
119
|
+
memoryId1: string;
|
|
120
|
+
memoryId2: string;
|
|
121
|
+
simhashDistance: number;
|
|
122
|
+
minhashSimilarity: number;
|
|
123
|
+
matched: 'simhash' | 'minhash' | 'both';
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -8,9 +8,10 @@ export type AssociationType = 'co_occurred' | 'supersedes' | 'contradicts' | 'su
|
|
|
8
8
|
*/
|
|
9
9
|
export declare function createAssociation(fromMemoryId: string, toMemoryId: string, type: AssociationType, weight?: number): Promise<void>;
|
|
10
10
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* Auto-link memories that share entities
|
|
12
|
+
* Called after storing a memory to link it to related memories
|
|
13
13
|
*/
|
|
14
|
+
export declare function autoLinkByEntities(newMemoryId: string, entityNames: string[], projectId: string): Promise<number>;
|
|
14
15
|
export declare function trackCoactivation(memoryIds: string[]): Promise<void>;
|
|
15
16
|
/**
|
|
16
17
|
* Get related memories via the association graph
|