squish-memory 1.1.5 → 1.2.1
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 +32 -16
- package/CHANGELOG.md +147 -0
- package/README.md +120 -78
- 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 +44 -0
- package/bin/squish.mjs +33 -0
- package/config/mcp-migration-map.json +1 -6
- package/config/mcp-mode-semantics.json +19 -23
- package/config/mcp-remote-auth.json +3 -26
- package/config/mcp-universal.schema.json +5 -35
- package/config/settings.json +107 -52
- 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/{dist/core/algorithms/index.js → core/algorithms/index.ts} +39 -26
- 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/{dist/core/local-embeddings.js → core/embeddings/local-embeddings.ts} +12 -11
- 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/{dist/core/lib/db-client.d.ts → core/lib/db-client.ts} +168 -114
- package/core/lib/parse-embedding.ts +59 -0
- package/{dist/core/lib/schemas.js → core/lib/schemas.ts} +102 -87
- 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/{dist/core/memory/index.js → core/memory/index.ts} +11 -10
- 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/{dist/core/places/index.js → core/places/index.ts} +12 -12
- 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 +590 -0
- package/core/scheduler/heartbeat.ts +91 -0
- package/{dist/core/scheduler/index.js → core/scheduler/index.ts} +8 -8
- 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/{dist/core/search/index.js → core/search/index.ts} +4 -5
- 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/{dist/core/session/index.js → core/session/index.ts} +7 -7
- 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/{dist/core/snapshots/cleanup.js → core/snapshots/cleanup.ts} +13 -12
- 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/{dist/core/summarization/cleanup.js → core/summarization/cleanup.ts} +13 -12
- 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/{dist/core/utils/vector-operations.js → core/utils/vector-operations.ts} +135 -129
- package/core/utils/version-management.ts +74 -0
- package/core/worker.ts +333 -0
- package/db/adapter.ts +215 -0
- package/{dist/db/bootstrap.js → db/bootstrap.ts} +388 -418
- 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/mcp.json.example +8 -11
- package/package.json +140 -159
- 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 +940 -0
- package/packages/mcp/tsconfig.json +20 -0
- package/skills/squish-memory/SKILL.md +38 -35
- package/skills/squish-memory/{scripts/install.sh → install.sh} +1 -1
- package/skills/squish-memory/references/claude-desktop.json +12 -0
- package/skills/squish-memory/references/openclaw.json +13 -0
- package/skills/squish-memory/references/opencode.json +14 -0
- package/config/hooks/claude-code-hooks.json +0 -39
- package/config/hooks/cursor-hooks.json +0 -30
- package/config/hooks/opencode-hooks.json +0 -30
- package/config/hooks/windsurf-hooks.json +0 -30
- package/config/mcp-cli-fallback-policy.json +0 -22
- package/config/mcp.json +0 -38
- package/config/plugin-manifest.json +0 -101
- package/config/plugin-manifest.schema.json +0 -244
- package/config/plugin.json +0 -32
- package/config/remote-memory-policy.json +0 -32
- package/core/commands/context-paging.md +0 -51
- package/core/commands/context-status.md +0 -22
- package/core/commands/context.md +0 -5
- package/core/commands/core-memory.md +0 -56
- package/core/commands/health.md +0 -5
- package/core/commands/init.md +0 -39
- package/core/commands/merge.md +0 -113
- package/core/commands/recall.md +0 -5
- package/core/commands/remember.md +0 -11
- package/core/commands/search.md +0 -10
- package/dist/config.d.ts +0 -83
- package/dist/config.js +0 -242
- package/dist/core/adapters/config/claude-code.d.ts +0 -45
- package/dist/core/adapters/config/claude-code.js +0 -113
- package/dist/core/adapters/config/cursor.d.ts +0 -26
- package/dist/core/adapters/config/cursor.js +0 -74
- package/dist/core/adapters/config/opencode.d.ts +0 -23
- package/dist/core/adapters/config/opencode.js +0 -73
- package/dist/core/adapters/config/windsurf.d.ts +0 -26
- package/dist/core/adapters/config/windsurf.js +0 -74
- package/dist/core/adapters/index.d.ts +0 -45
- package/dist/core/adapters/index.js +0 -84
- package/dist/core/adapters/scripts/install-adapter.d.ts +0 -19
- package/dist/core/adapters/scripts/install-adapter.js +0 -149
- package/dist/core/adapters/timeline.d.ts +0 -23
- package/dist/core/adapters/timeline.js +0 -88
- package/dist/core/adapters/types.d.ts +0 -157
- package/dist/core/adapters/types.js +0 -50
- package/dist/core/algorithms/analytics/token-estimator.d.ts +0 -50
- package/dist/core/algorithms/analytics/token-estimator.js +0 -154
- package/dist/core/algorithms/detection/hash-filters.d.ts +0 -47
- package/dist/core/algorithms/detection/hash-filters.js +0 -190
- package/dist/core/algorithms/detection/semantic-ranker.d.ts +0 -32
- package/dist/core/algorithms/detection/semantic-ranker.js +0 -118
- package/dist/core/algorithms/detection/two-stage-detector.d.ts +0 -52
- package/dist/core/algorithms/detection/two-stage-detector.js +0 -299
- package/dist/core/algorithms/handlers/approve-merge.d.ts +0 -22
- package/dist/core/algorithms/handlers/approve-merge.js +0 -179
- package/dist/core/algorithms/handlers/detect-duplicates.d.ts +0 -47
- package/dist/core/algorithms/handlers/detect-duplicates.js +0 -145
- package/dist/core/algorithms/handlers/get-stats.d.ts +0 -39
- package/dist/core/algorithms/handlers/get-stats.js +0 -88
- package/dist/core/algorithms/handlers/list-proposals.d.ts +0 -45
- package/dist/core/algorithms/handlers/list-proposals.js +0 -83
- package/dist/core/algorithms/handlers/preview-merge.d.ts +0 -39
- package/dist/core/algorithms/handlers/preview-merge.js +0 -93
- package/dist/core/algorithms/handlers/reject-merge.d.ts +0 -28
- package/dist/core/algorithms/handlers/reject-merge.js +0 -69
- package/dist/core/algorithms/handlers/reverse-merge.d.ts +0 -21
- package/dist/core/algorithms/handlers/reverse-merge.js +0 -121
- package/dist/core/algorithms/index.d.ts +0 -21
- package/dist/core/algorithms/operations/cache-maintenance.d.ts +0 -12
- package/dist/core/algorithms/operations/cache-maintenance.js +0 -157
- package/dist/core/algorithms/safety/safety-checks.d.ts +0 -22
- package/dist/core/algorithms/safety/safety-checks.js +0 -179
- package/dist/core/algorithms/strategies/merge-strategies.d.ts +0 -50
- package/dist/core/algorithms/strategies/merge-strategies.js +0 -288
- package/dist/core/algorithms/types.d.ts +0 -133
- package/dist/core/algorithms/types.js +0 -5
- package/dist/core/algorithms/utils/response-builder.d.ts +0 -28
- package/dist/core/algorithms/utils/response-builder.js +0 -37
- package/dist/core/associations.d.ts +0 -31
- package/dist/core/associations.js +0 -248
- package/dist/core/autosave.d.ts +0 -19
- package/dist/core/autosave.js +0 -16
- package/dist/core/commands/managed-sync.d.ts +0 -10
- package/dist/core/commands/managed-sync.js +0 -64
- package/dist/core/commands/mcp-server.d.ts +0 -3
- package/dist/core/commands/mcp-server.js +0 -739
- package/dist/core/consolidation.d.ts +0 -37
- package/dist/core/consolidation.js +0 -248
- package/dist/core/context/agent-context.d.ts +0 -106
- package/dist/core/context/agent-context.js +0 -274
- package/dist/core/context/context-paging.d.ts +0 -80
- package/dist/core/context/context-paging.js +0 -328
- package/dist/core/context/context-window.d.ts +0 -40
- package/dist/core/context/context-window.js +0 -177
- package/dist/core/context/context.d.ts +0 -7
- package/dist/core/context/context.js +0 -22
- package/dist/core/embeddings/google-multimodal.d.ts +0 -14
- package/dist/core/embeddings/google-multimodal.js +0 -142
- package/dist/core/embeddings/qmd-client.d.ts +0 -136
- package/dist/core/embeddings/qmd-client.js +0 -403
- package/dist/core/embeddings.d.ts +0 -29
- package/dist/core/embeddings.js +0 -454
- package/dist/core/error-handling.d.ts +0 -63
- package/dist/core/error-handling.js +0 -173
- package/dist/core/external-folder/index.d.ts +0 -102
- package/dist/core/external-folder/index.js +0 -294
- package/dist/core/hooks/agent-hooks.d.ts +0 -74
- package/dist/core/hooks/agent-hooks.js +0 -244
- package/dist/core/hooks/auto-tagger.d.ts +0 -19
- package/dist/core/hooks/auto-tagger.js +0 -155
- package/dist/core/hooks/capture-filter.d.ts +0 -41
- package/dist/core/hooks/capture-filter.js +0 -128
- package/dist/core/index.d.ts +0 -10
- package/dist/core/index.js +0 -14
- package/dist/core/ingestion/agent-memory.d.ts +0 -22
- package/dist/core/ingestion/agent-memory.js +0 -109
- package/dist/core/ingestion/core-memory.d.ts +0 -78
- package/dist/core/ingestion/core-memory.js +0 -226
- package/dist/core/ingestion/learnings.d.ts +0 -57
- package/dist/core/ingestion/learnings.js +0 -202
- package/dist/core/layers/generator.d.ts +0 -25
- package/dist/core/layers/generator.js +0 -76
- package/dist/core/lib/db-client.js +0 -130
- package/dist/core/lib/schemas.d.ts +0 -129
- package/dist/core/lib/utils.d.ts +0 -14
- package/dist/core/lib/utils.js +0 -90
- package/dist/core/lib/validation.d.ts +0 -38
- package/dist/core/lib/validation.js +0 -151
- package/dist/core/lifecycle.d.ts +0 -26
- package/dist/core/lifecycle.js +0 -302
- package/dist/core/local-embeddings.d.ts +0 -11
- package/dist/core/logger.d.ts +0 -16
- package/dist/core/logger.js +0 -40
- package/dist/core/mcp/client.d.ts +0 -17
- package/dist/core/mcp/client.js +0 -101
- package/dist/core/mcp/index.d.ts +0 -6
- package/dist/core/mcp/index.js +0 -6
- package/dist/core/mcp/server.d.ts +0 -18
- package/dist/core/mcp/server.js +0 -157
- package/dist/core/mcp/standalone-server.d.ts +0 -13
- package/dist/core/mcp/standalone-server.js +0 -46
- package/dist/core/mcp/tools.d.ts +0 -9
- package/dist/core/mcp/tools.js +0 -365
- package/dist/core/mcp/types.d.ts +0 -315
- package/dist/core/mcp/types.js +0 -48
- package/dist/core/memory/bridge-discovery.d.ts +0 -50
- package/dist/core/memory/bridge-discovery.js +0 -291
- package/dist/core/memory/categorizer.d.ts +0 -27
- package/dist/core/memory/categorizer.js +0 -305
- package/dist/core/memory/conflict-detector.d.ts +0 -7
- package/dist/core/memory/conflict-detector.js +0 -43
- package/dist/core/memory/consolidation.d.ts +0 -42
- package/dist/core/memory/consolidation.js +0 -303
- package/dist/core/memory/context-collector.d.ts +0 -10
- package/dist/core/memory/context-collector.js +0 -56
- package/dist/core/memory/contradiction-resolver.d.ts +0 -40
- package/dist/core/memory/contradiction-resolver.js +0 -368
- package/dist/core/memory/edit-workflow.d.ts +0 -19
- package/dist/core/memory/edit-workflow.js +0 -120
- package/dist/core/memory/entity-extractor.d.ts +0 -33
- package/dist/core/memory/entity-extractor.js +0 -336
- package/dist/core/memory/entity-resolver.d.ts +0 -23
- package/dist/core/memory/entity-resolver.js +0 -64
- package/dist/core/memory/fact-extractor.d.ts +0 -24
- package/dist/core/memory/fact-extractor.js +0 -89
- package/dist/core/memory/feedback-tracker.d.ts +0 -12
- package/dist/core/memory/feedback-tracker.js +0 -155
- package/dist/core/memory/hooks.d.ts +0 -88
- package/dist/core/memory/hooks.js +0 -174
- package/dist/core/memory/hybrid-retrieval.d.ts +0 -29
- package/dist/core/memory/hybrid-retrieval.js +0 -139
- package/dist/core/memory/hybrid-scorer.d.ts +0 -40
- package/dist/core/memory/hybrid-scorer.js +0 -284
- package/dist/core/memory/hybrid-search.d.ts +0 -20
- package/dist/core/memory/hybrid-search.js +0 -359
- package/dist/core/memory/importance.d.ts +0 -63
- package/dist/core/memory/importance.js +0 -298
- package/dist/core/memory/index.d.ts +0 -8
- package/dist/core/memory/loader.d.ts +0 -31
- package/dist/core/memory/loader.js +0 -141
- package/dist/core/memory/markdown/markdown-storage.d.ts +0 -72
- package/dist/core/memory/markdown/markdown-storage.js +0 -243
- package/dist/core/memory/memories.d.ts +0 -47
- package/dist/core/memory/memories.js +0 -449
- package/dist/core/memory/memory-lifecycle.d.ts +0 -8
- package/dist/core/memory/memory-lifecycle.js +0 -55
- package/dist/core/memory/memory-manager.d.ts +0 -15
- package/dist/core/memory/memory-manager.js +0 -46
- package/dist/core/memory/migrate.d.ts +0 -21
- package/dist/core/memory/migrate.js +0 -134
- package/dist/core/memory/normalization.d.ts +0 -22
- package/dist/core/memory/normalization.js +0 -26
- package/dist/core/memory/progressive-disclosure.d.ts +0 -43
- package/dist/core/memory/progressive-disclosure.js +0 -280
- package/dist/core/memory/query-processor.d.ts +0 -21
- package/dist/core/memory/query-processor.js +0 -72
- package/dist/core/memory/query-rewriter.d.ts +0 -13
- package/dist/core/memory/query-rewriter.js +0 -118
- package/dist/core/memory/response-analyzer.d.ts +0 -9
- package/dist/core/memory/response-analyzer.js +0 -61
- package/dist/core/memory/serialization.d.ts +0 -10
- package/dist/core/memory/serialization.js +0 -84
- package/dist/core/memory/stats.d.ts +0 -22
- package/dist/core/memory/stats.js +0 -138
- package/dist/core/memory/telemetry.d.ts +0 -69
- package/dist/core/memory/telemetry.js +0 -313
- package/dist/core/memory/temporal-facts.d.ts +0 -41
- package/dist/core/memory/temporal-facts.js +0 -283
- package/dist/core/memory/temporal-parser.d.ts +0 -32
- package/dist/core/memory/temporal-parser.js +0 -385
- package/dist/core/memory/trigger-detector.d.ts +0 -14
- package/dist/core/memory/trigger-detector.js +0 -42
- package/dist/core/memory/write-gate.d.ts +0 -54
- package/dist/core/memory/write-gate.js +0 -210
- 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/obsidian-vault.d.ts +0 -30
- package/dist/core/obsidian-vault.js +0 -94
- package/dist/core/places/index.d.ts +0 -14
- package/dist/core/places/memory-places.d.ts +0 -68
- package/dist/core/places/memory-places.js +0 -261
- package/dist/core/places/places.d.ts +0 -88
- package/dist/core/places/places.js +0 -314
- package/dist/core/places/rules.d.ts +0 -74
- package/dist/core/places/rules.js +0 -240
- package/dist/core/places/walking.d.ts +0 -56
- package/dist/core/places/walking.js +0 -121
- package/dist/core/projects.d.ts +0 -17
- package/dist/core/projects.js +0 -108
- package/dist/core/redis.d.ts +0 -11
- package/dist/core/redis.js +0 -69
- package/dist/core/responses.d.ts +0 -96
- package/dist/core/responses.js +0 -122
- package/dist/core/scheduler/cron-scheduler.d.ts +0 -32
- package/dist/core/scheduler/cron-scheduler.js +0 -332
- package/dist/core/scheduler/heartbeat.d.ts +0 -11
- package/dist/core/scheduler/heartbeat.js +0 -73
- package/dist/core/scheduler/index.d.ts +0 -8
- package/dist/core/scheduler/job-runner.d.ts +0 -11
- package/dist/core/scheduler/job-runner.js +0 -164
- package/dist/core/search/conversations.d.ts +0 -25
- package/dist/core/search/conversations.js +0 -110
- package/dist/core/search/entities.d.ts +0 -12
- package/dist/core/search/entities.js +0 -31
- package/dist/core/search/folder-context.d.ts +0 -25
- package/dist/core/search/folder-context.js +0 -119
- package/dist/core/search/graph-boost.d.ts +0 -7
- package/dist/core/search/graph-boost.js +0 -23
- package/dist/core/search/index.d.ts +0 -4
- package/dist/core/search/qmd-search.d.ts +0 -61
- package/dist/core/search/qmd-search.js +0 -178
- package/dist/core/security/encrypt.d.ts +0 -6
- package/dist/core/security/encrypt.js +0 -47
- package/dist/core/security/governance.d.ts +0 -26
- package/dist/core/security/governance.js +0 -79
- package/dist/core/security/privacy.d.ts +0 -23
- package/dist/core/security/privacy.js +0 -82
- package/dist/core/security/secret-detector.d.ts +0 -32
- package/dist/core/security/secret-detector.js +0 -88
- package/dist/core/session/auto-load.d.ts +0 -6
- package/dist/core/session/auto-load.js +0 -119
- package/dist/core/session/index.d.ts +0 -7
- package/dist/core/session/self-iteration-job.d.ts +0 -20
- package/dist/core/session/self-iteration-job.js +0 -282
- package/dist/core/session/session-hooks.d.ts +0 -18
- package/dist/core/session/session-hooks.js +0 -58
- package/dist/core/session/types.d.ts +0 -26
- package/dist/core/session/types.js +0 -10
- package/dist/core/session-hooks/self-iteration-job.d.ts +0 -20
- package/dist/core/session-hooks/self-iteration-job.js +0 -282
- package/dist/core/session-hooks/session-hooks.d.ts +0 -18
- package/dist/core/session-hooks/session-hooks.js +0 -58
- package/dist/core/snapshots/cleanup.d.ts +0 -9
- package/dist/core/snapshots/comparison.d.ts +0 -19
- package/dist/core/snapshots/comparison.js +0 -43
- package/dist/core/snapshots/creation.d.ts +0 -19
- package/dist/core/snapshots/creation.js +0 -126
- package/dist/core/snapshots/retrieval.d.ts +0 -7
- package/dist/core/snapshots/retrieval.js +0 -41
- package/dist/core/snapshots/stats.d.ts +0 -11
- package/dist/core/snapshots/stats.js +0 -52
- package/dist/core/snapshots.d.ts +0 -29
- package/dist/core/snapshots.js +0 -220
- package/dist/core/storage/cache.d.ts +0 -13
- package/dist/core/storage/cache.js +0 -202
- package/dist/core/storage/database.d.ts +0 -12
- package/dist/core/storage/database.js +0 -12
- package/dist/core/summarization/cleanup.d.ts +0 -9
- package/dist/core/summarization/queries.d.ts +0 -9
- package/dist/core/summarization/queries.js +0 -28
- package/dist/core/summarization/stats.d.ts +0 -14
- package/dist/core/summarization/stats.js +0 -52
- package/dist/core/summarization/strategies.d.ts +0 -24
- package/dist/core/summarization/strategies.js +0 -28
- package/dist/core/summarization.d.ts +0 -37
- package/dist/core/summarization.js +0 -188
- package/dist/core/sync/qmd-sync.d.ts +0 -94
- package/dist/core/sync/qmd-sync.js +0 -201
- package/dist/core/temporal-facts.d.ts +0 -54
- package/dist/core/temporal-facts.js +0 -193
- package/dist/core/toon.d.ts +0 -43
- package/dist/core/toon.js +0 -160
- package/dist/core/tracing/collector.d.ts +0 -111
- package/dist/core/tracing/collector.js +0 -350
- package/dist/core/tracing/visualizer.d.ts +0 -32
- package/dist/core/tracing/visualizer.js +0 -165
- package/dist/core/utils/cleanup-operations.d.ts +0 -13
- package/dist/core/utils/cleanup-operations.js +0 -44
- package/dist/core/utils/content-extraction.d.ts +0 -19
- package/dist/core/utils/content-extraction.js +0 -75
- package/dist/core/utils/filter-builder.d.ts +0 -13
- package/dist/core/utils/filter-builder.js +0 -44
- package/dist/core/utils/history-traversal.d.ts +0 -13
- package/dist/core/utils/history-traversal.js +0 -50
- package/dist/core/utils/memory-operations.d.ts +0 -17
- package/dist/core/utils/memory-operations.js +0 -43
- package/dist/core/utils/query-operations.d.ts +0 -18
- package/dist/core/utils/query-operations.js +0 -65
- package/dist/core/utils/summarization-helpers.d.ts +0 -21
- package/dist/core/utils/summarization-helpers.js +0 -38
- package/dist/core/utils/temporal-queries.d.ts +0 -13
- package/dist/core/utils/temporal-queries.js +0 -27
- package/dist/core/utils/vector-operations.d.ts +0 -71
- package/dist/core/utils/version-management.d.ts +0 -9
- package/dist/core/utils/version-management.js +0 -61
- package/dist/core/worker.d.ts +0 -82
- package/dist/core/worker.js +0 -272
- package/dist/db/adapter.d.ts +0 -7
- package/dist/db/adapter.js +0 -175
- package/dist/db/bootstrap.d.ts +0 -9
- package/dist/db/drizzle/schema-sqlite.d.ts +0 -4837
- package/dist/db/drizzle/schema-sqlite.js +0 -684
- package/dist/db/drizzle/schema.d.ts +0 -4082
- package/dist/db/drizzle/schema.js +0 -770
- package/dist/db/drizzle.config.d.ts +0 -3
- package/dist/db/drizzle.config.js +0 -12
- package/dist/db/index.d.ts +0 -7
- package/dist/db/index.js +0 -89
- package/dist/db/neon.d.ts +0 -8
- package/dist/db/neon.js +0 -20
- package/dist/db/schema/index.d.ts +0 -40
- package/dist/db/schema/index.js +0 -105
- package/dist/db/schema/tables/context-sessions.d.ts +0 -9
- package/dist/db/schema/tables/context-sessions.js +0 -37
- package/dist/db/schema/tables/conversations.d.ts +0 -9
- package/dist/db/schema/tables/conversations.js +0 -47
- package/dist/db/schema/tables/core-memory.d.ts +0 -9
- package/dist/db/schema/tables/core-memory.js +0 -41
- package/dist/db/schema/tables/entities.d.ts +0 -9
- package/dist/db/schema/tables/entities.js +0 -39
- package/dist/db/schema/tables/entity-relations.d.ts +0 -9
- package/dist/db/schema/tables/entity-relations.js +0 -31
- package/dist/db/schema/tables/learnings.d.ts +0 -9
- package/dist/db/schema/tables/learnings.js +0 -66
- package/dist/db/schema/tables/memories.d.ts +0 -9
- package/dist/db/schema/tables/memories.js +0 -161
- package/dist/db/schema/tables/memory-associations.d.ts +0 -9
- package/dist/db/schema/tables/memory-associations.js +0 -39
- package/dist/db/schema/tables/memory-hash-cache.d.ts +0 -9
- package/dist/db/schema/tables/memory-hash-cache.js +0 -29
- package/dist/db/schema/tables/memory-merge-history.d.ts +0 -9
- package/dist/db/schema/tables/memory-merge-history.js +0 -33
- package/dist/db/schema/tables/memory-merge-proposals.d.ts +0 -9
- package/dist/db/schema/tables/memory-merge-proposals.js +0 -39
- package/dist/db/schema/tables/messages.d.ts +0 -9
- package/dist/db/schema/tables/messages.js +0 -41
- package/dist/db/schema/tables/namespaces.d.ts +0 -9
- package/dist/db/schema/tables/namespaces.js +0 -37
- package/dist/db/schema/tables/projects.d.ts +0 -9
- package/dist/db/schema/tables/projects.js +0 -31
- package/dist/db/schema/tables/users.d.ts +0 -9
- package/dist/db/schema/tables/users.js +0 -27
- package/dist/db/schema.d.ts +0 -3
- package/dist/db/schema.js +0 -11
- package/dist/db/supabase.d.ts +0 -9
- package/dist/db/supabase.js +0 -24
- package/dist/index.d.ts +0 -7
- package/dist/index.js +0 -1677
- package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
- package/dist/webui/server.d.ts +0 -5
- package/dist/webui/server.js +0 -642
- 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/scripts/README.md +0 -60
- package/scripts/build-release.sh +0 -36
- package/scripts/check-secrets.js +0 -132
- package/scripts/copy-runtime-assets.mjs +0 -26
- package/scripts/generate-mcp.mjs +0 -264
- package/scripts/github-release.sh +0 -77
- package/scripts/init-dirs.mjs +0 -13
- package/scripts/install-claude-code.sh +0 -85
- package/scripts/install-cursor.sh +0 -56
- package/scripts/install-hooks.sh +0 -73
- package/scripts/install-interactive.mjs +0 -357
- package/scripts/install-opencode.sh +0 -75
- package/scripts/install-plugin.mjs +0 -415
- package/scripts/install-windsurf.sh +0 -67
- package/scripts/remote-preflight.mjs +0 -62
- package/scripts/squish-fallback.mjs +0 -132
- package/scripts/test-interactive.mjs +0 -131
- package/scripts/verify-mcp.mjs +0 -214
- package/skills/squish-memory/scripts/install.mjs +0 -335
- package/skills/squish-memory/write_skill.js +0 -2
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* UAM Adapter Types
|
|
3
|
-
*
|
|
4
|
-
* Universal Agent Memory - Adapter interfaces for different AI coding agents.
|
|
5
|
-
* Each agent (Claude Code, OpenCode, Cursor, Windsurf, etc.) has its own adapter
|
|
6
|
-
* that defines how to integrate with Squish.
|
|
7
|
-
*
|
|
8
|
-
* Key concepts:
|
|
9
|
-
* - Agent adapters use native config formats where possible
|
|
10
|
-
* - Hooks are explicit (calls squish_learn) not hidden
|
|
11
|
-
* - Uses existing MCP tools (squish_context, squish_learn)
|
|
12
|
-
*/
|
|
13
|
-
import { z } from 'zod';
|
|
14
|
-
/** Zod schemas for validation */
|
|
15
|
-
export const SessionContextInputSchema = z.object({
|
|
16
|
-
project: z.string(),
|
|
17
|
-
mode: z.enum(['startup', 'resume', 'compact']).default('startup'),
|
|
18
|
-
sessionId: z.string().optional(),
|
|
19
|
-
});
|
|
20
|
-
export const ToolObservationInputSchema = z.object({
|
|
21
|
-
toolName: z.string(),
|
|
22
|
-
toolInput: z.record(z.unknown()),
|
|
23
|
-
toolResult: z.unknown(),
|
|
24
|
-
project: z.string(),
|
|
25
|
-
sessionId: z.string().optional(),
|
|
26
|
-
});
|
|
27
|
-
export const TimelineInputSchema = z.object({
|
|
28
|
-
query: z.string(),
|
|
29
|
-
depth: z.enum(['index', 'timeline', 'detail']).default('index'),
|
|
30
|
-
limit: z.number().min(1).max(100).default(10),
|
|
31
|
-
});
|
|
32
|
-
/** Tool category mapping */
|
|
33
|
-
export const TOOL_CATEGORIES = {
|
|
34
|
-
'Read': 'reading',
|
|
35
|
-
'Write': 'modification',
|
|
36
|
-
'Edit': 'modification',
|
|
37
|
-
'Bash': 'command',
|
|
38
|
-
'grep': 'search',
|
|
39
|
-
'Glob': 'search',
|
|
40
|
-
'TodoWrite': 'planning',
|
|
41
|
-
'TodoRead': 'planning',
|
|
42
|
-
'Task': 'planning',
|
|
43
|
-
};
|
|
44
|
-
/**
|
|
45
|
-
* Categorize a tool call
|
|
46
|
-
*/
|
|
47
|
-
export function categorizeTool(toolName) {
|
|
48
|
-
return TOOL_CATEGORIES[toolName] || 'other';
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=types.js.map
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Token estimation for calculating context window savings from merges.
|
|
3
|
-
* Uses simple heuristic: 1 token ≈ 4 characters (can be upgraded to tiktoken for accuracy).
|
|
4
|
-
*/
|
|
5
|
-
import type { Memory } from '../../../db/drizzle/schema.js';
|
|
6
|
-
import type { MergedMemory } from '../strategies/merge-strategies.js';
|
|
7
|
-
export declare function estimateTokensSaved(sources: Memory[], merged: MergedMemory): number;
|
|
8
|
-
export declare function calculateProjectTokenSavings(projectId: string): Promise<{
|
|
9
|
-
totalSaved: number;
|
|
10
|
-
mergeCount: number;
|
|
11
|
-
avgSavingsPerMerge: number;
|
|
12
|
-
tokenSavingPercentage: number;
|
|
13
|
-
totalMemoryTokens: number;
|
|
14
|
-
}>;
|
|
15
|
-
/**
|
|
16
|
-
* Format token counts for display
|
|
17
|
-
*
|
|
18
|
-
* Converts token count to human-readable format with context usage
|
|
19
|
-
*/
|
|
20
|
-
export declare function formatTokenCount(tokens: number): string;
|
|
21
|
-
/**
|
|
22
|
-
* Format savings report
|
|
23
|
-
*/
|
|
24
|
-
export declare function formatSavingsReport(savings: {
|
|
25
|
-
totalSaved: number;
|
|
26
|
-
mergeCount: number;
|
|
27
|
-
avgSavingsPerMerge: number;
|
|
28
|
-
tokenSavingPercentage: number;
|
|
29
|
-
totalMemoryTokens: number;
|
|
30
|
-
}): string;
|
|
31
|
-
/**
|
|
32
|
-
* Estimate savings for a proposed merge (preview)
|
|
33
|
-
*
|
|
34
|
-
* Used in merge preview to show user estimated savings
|
|
35
|
-
*/
|
|
36
|
-
export declare function estimateMergeSavingsPreview(sources: Memory[], merged: MergedMemory): {
|
|
37
|
-
savedTokens: number;
|
|
38
|
-
savedPercentage: number;
|
|
39
|
-
};
|
|
40
|
-
/**
|
|
41
|
-
* Get token statistics for a set of memories
|
|
42
|
-
*/
|
|
43
|
-
export declare function getTokenStatistics(memories: Memory[]): {
|
|
44
|
-
total: number;
|
|
45
|
-
min: number;
|
|
46
|
-
max: number;
|
|
47
|
-
average: number;
|
|
48
|
-
median: number;
|
|
49
|
-
};
|
|
50
|
-
//# sourceMappingURL=token-estimator.d.ts.map
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Token estimation for calculating context window savings from merges.
|
|
3
|
-
* Uses simple heuristic: 1 token ≈ 4 characters (can be upgraded to tiktoken for accuracy).
|
|
4
|
-
*/
|
|
5
|
-
import { getDb } from '../../../db/index.js';
|
|
6
|
-
import { getSchema } from '../../../db/schema.js';
|
|
7
|
-
import { createDatabaseClient } from '../../../core/storage/database.js';
|
|
8
|
-
import { eq } from 'drizzle-orm';
|
|
9
|
-
function estimateTokensSimple(text) {
|
|
10
|
-
if (!text)
|
|
11
|
-
return 0;
|
|
12
|
-
return Math.ceil(text.length / 4);
|
|
13
|
-
}
|
|
14
|
-
function estimateMetadataOverhead() {
|
|
15
|
-
return 25;
|
|
16
|
-
}
|
|
17
|
-
function estimateMemoryTokens(memory) {
|
|
18
|
-
let tokens = 0;
|
|
19
|
-
tokens += estimateTokensSimple(memory.content);
|
|
20
|
-
if (memory.summary) {
|
|
21
|
-
tokens += estimateTokensSimple(memory.summary);
|
|
22
|
-
}
|
|
23
|
-
if (memory.tags && memory.tags.length > 0) {
|
|
24
|
-
tokens += estimateTokensSimple(memory.tags.join(' '));
|
|
25
|
-
}
|
|
26
|
-
if (memory.metadata) {
|
|
27
|
-
tokens += estimateTokensSimple(JSON.stringify(memory.metadata));
|
|
28
|
-
}
|
|
29
|
-
tokens += estimateMetadataOverhead();
|
|
30
|
-
return tokens;
|
|
31
|
-
}
|
|
32
|
-
function estimateMergedMemoryTokens(merged) {
|
|
33
|
-
let tokens = 0;
|
|
34
|
-
tokens += estimateTokensSimple(merged.content);
|
|
35
|
-
if (merged.summary) {
|
|
36
|
-
tokens += estimateTokensSimple(merged.summary);
|
|
37
|
-
}
|
|
38
|
-
if (merged.tags && merged.tags.length > 0) {
|
|
39
|
-
tokens += estimateTokensSimple(merged.tags.join(' '));
|
|
40
|
-
}
|
|
41
|
-
tokens += estimateTokensSimple(JSON.stringify(merged.metadata));
|
|
42
|
-
tokens += estimateMetadataOverhead();
|
|
43
|
-
return tokens;
|
|
44
|
-
}
|
|
45
|
-
export function estimateTokensSaved(sources, merged) {
|
|
46
|
-
const sourceTokens = sources.reduce((sum, memory) => sum + estimateMemoryTokens(memory), 0);
|
|
47
|
-
const mergedTokens = estimateMergedMemoryTokens(merged);
|
|
48
|
-
const savings = sourceTokens - mergedTokens;
|
|
49
|
-
return Math.max(0, savings);
|
|
50
|
-
}
|
|
51
|
-
export async function calculateProjectTokenSavings(projectId) {
|
|
52
|
-
const db = createDatabaseClient(await getDb());
|
|
53
|
-
const schema = await getSchema();
|
|
54
|
-
const memories = await db
|
|
55
|
-
.select()
|
|
56
|
-
.from(schema.memories)
|
|
57
|
-
.where(eq(schema.memories.projectId, projectId));
|
|
58
|
-
const totalMemoryTokens = memories.reduce((sum, m) => sum + estimateMemoryTokens(m), 0);
|
|
59
|
-
if (!schema.memoryMergeHistory) {
|
|
60
|
-
return {
|
|
61
|
-
totalSaved: 0,
|
|
62
|
-
mergeCount: 0,
|
|
63
|
-
avgSavingsPerMerge: 0,
|
|
64
|
-
tokenSavingPercentage: 0,
|
|
65
|
-
totalMemoryTokens,
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
const mergeHistory = await db
|
|
69
|
-
.select()
|
|
70
|
-
.from(schema.memoryMergeHistory)
|
|
71
|
-
.where(eq(schema.memoryMergeHistory.projectId, projectId));
|
|
72
|
-
// Sum up token savings
|
|
73
|
-
const totalSaved = mergeHistory.reduce((sum, record) => sum + (record.tokensSaved || 0), 0);
|
|
74
|
-
const mergeCount = mergeHistory.length;
|
|
75
|
-
const avgSavingsPerMerge = mergeCount > 0 ? Math.round(totalSaved / mergeCount) : 0;
|
|
76
|
-
const tokenSavingPercentage = totalMemoryTokens > 0 ? (totalSaved / totalMemoryTokens) * 100 : 0;
|
|
77
|
-
return {
|
|
78
|
-
totalSaved,
|
|
79
|
-
mergeCount,
|
|
80
|
-
avgSavingsPerMerge,
|
|
81
|
-
tokenSavingPercentage,
|
|
82
|
-
totalMemoryTokens,
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Format token counts for display
|
|
87
|
-
*
|
|
88
|
-
* Converts token count to human-readable format with context usage
|
|
89
|
-
*/
|
|
90
|
-
export function formatTokenCount(tokens) {
|
|
91
|
-
// Show percentage of typical context window
|
|
92
|
-
// Claude 3 / GPT-4: 128k tokens (~32k practical for context)
|
|
93
|
-
const contextWindow = 128000;
|
|
94
|
-
const typicalUseful = 32000;
|
|
95
|
-
const percentage = (tokens / contextWindow) * 100;
|
|
96
|
-
const usefulPercent = (tokens / typicalUseful) * 100;
|
|
97
|
-
if (tokens < 1000) {
|
|
98
|
-
return `${tokens} tokens (${percentage.toFixed(3)}% of context)`;
|
|
99
|
-
}
|
|
100
|
-
const kiloTokens = (tokens / 1000).toFixed(1);
|
|
101
|
-
return `${kiloTokens}k tokens (${usefulPercent.toFixed(1)}% of typical recall window)`;
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* Format savings report
|
|
105
|
-
*/
|
|
106
|
-
export function formatSavingsReport(savings) {
|
|
107
|
-
const lines = [];
|
|
108
|
-
lines.push('Memory Merge Savings Report');
|
|
109
|
-
lines.push('='.repeat(40));
|
|
110
|
-
if (savings.mergeCount === 0) {
|
|
111
|
-
lines.push('No merges completed yet');
|
|
112
|
-
return lines.join('\n');
|
|
113
|
-
}
|
|
114
|
-
lines.push(`Total Merges: ${savings.mergeCount}`);
|
|
115
|
-
lines.push(`Total Tokens Saved: ${formatTokenCount(savings.totalSaved)}`);
|
|
116
|
-
lines.push(`Avg Savings per Merge: ${formatTokenCount(savings.avgSavingsPerMerge)}`);
|
|
117
|
-
lines.push(`Reduction: ${savings.tokenSavingPercentage.toFixed(2)}%`);
|
|
118
|
-
lines.push(`Total Memory Tokens: ${formatTokenCount(savings.totalMemoryTokens)}`);
|
|
119
|
-
return lines.join('\n');
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Estimate savings for a proposed merge (preview)
|
|
123
|
-
*
|
|
124
|
-
* Used in merge preview to show user estimated savings
|
|
125
|
-
*/
|
|
126
|
-
export function estimateMergeSavingsPreview(sources, merged) {
|
|
127
|
-
const sourceTokens = sources.reduce((sum, m) => sum + estimateMemoryTokens(m), 0);
|
|
128
|
-
const mergedTokens = estimateMergedMemoryTokens(merged);
|
|
129
|
-
const savedTokens = Math.max(0, sourceTokens - mergedTokens);
|
|
130
|
-
const savedPercentage = sourceTokens > 0 ? (savedTokens / sourceTokens) * 100 : 0;
|
|
131
|
-
return { savedTokens, savedPercentage };
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Get token statistics for a set of memories
|
|
135
|
-
*/
|
|
136
|
-
export function getTokenStatistics(memories) {
|
|
137
|
-
const counts = memories.map((m) => estimateMemoryTokens(m));
|
|
138
|
-
const total = counts.reduce((a, b) => a + b, 0);
|
|
139
|
-
const min = Math.min(...counts);
|
|
140
|
-
const max = Math.max(...counts);
|
|
141
|
-
const average = Math.round(total / counts.length);
|
|
142
|
-
// Calculate median
|
|
143
|
-
const sorted = [...counts].sort((a, b) => a - b);
|
|
144
|
-
const middle = Math.floor(sorted.length / 2);
|
|
145
|
-
const median = sorted.length % 2 !== 0 ? sorted[middle] : (sorted[middle - 1] + sorted[middle]) / 2;
|
|
146
|
-
return {
|
|
147
|
-
total,
|
|
148
|
-
min,
|
|
149
|
-
max,
|
|
150
|
-
average,
|
|
151
|
-
median: Math.round(median),
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
//# sourceMappingURL=token-estimator.js.map
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hash-based duplicate detection filters (Stage 1).
|
|
3
|
-
* Uses SimHash and MinHash for fast approximate matching before semantic analysis.
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* SimHash: Fast fingerprinting for near-duplicate detection.
|
|
7
|
-
* Tokenizes content, weights by frequency, and produces comparable hash fingerprints.
|
|
8
|
-
* Similar documents produce similar hashes with Hamming distance indicating edit distance.
|
|
9
|
-
*/
|
|
10
|
-
export declare class SimHashFilter {
|
|
11
|
-
private readonly dimensions;
|
|
12
|
-
generateHash(content: string): string;
|
|
13
|
-
hammingDistance(hash1: string, hash2: string): number;
|
|
14
|
-
findCandidates(targetHash: string, allHashes: Map<string, string>, threshold: number): string[];
|
|
15
|
-
private hashToken;
|
|
16
|
-
private popcount;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* MinHash: Estimates Jaccard similarity using character n-grams and multiple hash functions.
|
|
20
|
-
* Keeps minimum hash for each function, resulting in comparable signatures.
|
|
21
|
-
* More effective than SimHash for paraphrases. 128 functions give ~1% error margin.
|
|
22
|
-
*/
|
|
23
|
-
export declare class MinHashFilter {
|
|
24
|
-
private readonly numPermutations;
|
|
25
|
-
private readonly ngramSize;
|
|
26
|
-
generateSignature(content: string): number[];
|
|
27
|
-
jaccardSimilarity(sig1: number[], sig2: number[]): number;
|
|
28
|
-
findCandidates(targetSig: number[], allSigs: Map<string, number[]>, threshold: number): string[];
|
|
29
|
-
private generateNgrams;
|
|
30
|
-
private hashNgramWithSeed;
|
|
31
|
-
}
|
|
32
|
-
export interface Stage1CandidatePair {
|
|
33
|
-
memoryId1: string;
|
|
34
|
-
memoryId2: string;
|
|
35
|
-
simhashDistance: number;
|
|
36
|
-
minhashSimilarity: number;
|
|
37
|
-
matched: 'simhash' | 'minhash' | 'both';
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Combine SimHash and MinHash filters using union approach.
|
|
41
|
-
* Candidates pass if they match EITHER filter, casting wider net for stage 2 ranking.
|
|
42
|
-
*/
|
|
43
|
-
export declare function findCandidatePairs(memories: Map<string, string>, allSimhashes: Map<string, string>, allMinhashes: Map<string, number[]>, options: {
|
|
44
|
-
simhashThreshold?: number;
|
|
45
|
-
minhashThreshold?: number;
|
|
46
|
-
}): Stage1CandidatePair[];
|
|
47
|
-
//# sourceMappingURL=hash-filters.d.ts.map
|
|
@@ -1,190 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Hash-based duplicate detection filters (Stage 1).
|
|
3
|
-
* Uses SimHash and MinHash for fast approximate matching before semantic analysis.
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* SimHash: Fast fingerprinting for near-duplicate detection.
|
|
7
|
-
* Tokenizes content, weights by frequency, and produces comparable hash fingerprints.
|
|
8
|
-
* Similar documents produce similar hashes with Hamming distance indicating edit distance.
|
|
9
|
-
*/
|
|
10
|
-
export class SimHashFilter {
|
|
11
|
-
dimensions = 32; // 32-bit hash
|
|
12
|
-
generateHash(content) {
|
|
13
|
-
if (!content || content.trim().length === 0) {
|
|
14
|
-
return '0'.repeat(16);
|
|
15
|
-
}
|
|
16
|
-
const tokens = content
|
|
17
|
-
.toLowerCase()
|
|
18
|
-
.split(/\W+/)
|
|
19
|
-
.filter((token) => token.length > 0);
|
|
20
|
-
if (tokens.length === 0) {
|
|
21
|
-
return '0'.repeat(16);
|
|
22
|
-
}
|
|
23
|
-
const tokenFreq = new Map();
|
|
24
|
-
for (const token of tokens) {
|
|
25
|
-
tokenFreq.set(token, (tokenFreq.get(token) || 0) + 1);
|
|
26
|
-
}
|
|
27
|
-
const hashBits = new Array(this.dimensions).fill(0);
|
|
28
|
-
for (const [token, freq] of tokenFreq.entries()) {
|
|
29
|
-
const tokenHash = this.hashToken(token);
|
|
30
|
-
for (let i = 0; i < this.dimensions; i++) {
|
|
31
|
-
const bitSet = (tokenHash >>> i) & 1;
|
|
32
|
-
hashBits[i] += bitSet === 1 ? freq : -freq;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
let result = 0;
|
|
36
|
-
for (let i = 0; i < this.dimensions; i++) {
|
|
37
|
-
if (hashBits[i] > 0) {
|
|
38
|
-
result |= 1 << i;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
return (result >>> 0).toString(16).padStart(16, '0');
|
|
42
|
-
}
|
|
43
|
-
hammingDistance(hash1, hash2) {
|
|
44
|
-
const num1 = BigInt('0x' + hash1);
|
|
45
|
-
const num2 = BigInt('0x' + hash2);
|
|
46
|
-
const xor = num1 ^ num2;
|
|
47
|
-
return this.popcount(xor);
|
|
48
|
-
}
|
|
49
|
-
findCandidates(targetHash, allHashes, threshold) {
|
|
50
|
-
const candidates = [];
|
|
51
|
-
for (const [memoryId, hash] of allHashes.entries()) {
|
|
52
|
-
const distance = this.hammingDistance(targetHash, hash);
|
|
53
|
-
if (distance <= threshold) {
|
|
54
|
-
candidates.push(memoryId);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return candidates;
|
|
58
|
-
}
|
|
59
|
-
hashToken(token) {
|
|
60
|
-
let hash = 2166136261;
|
|
61
|
-
for (let i = 0; i < token.length; i++) {
|
|
62
|
-
hash ^= token.charCodeAt(i);
|
|
63
|
-
hash = (hash * 16777619) & 0xffffffff;
|
|
64
|
-
}
|
|
65
|
-
const high = hash >>> 16;
|
|
66
|
-
const low = hash & 0xffff;
|
|
67
|
-
return (high * 65599 + low) >>> 0;
|
|
68
|
-
}
|
|
69
|
-
popcount(n) {
|
|
70
|
-
let count = 0;
|
|
71
|
-
while (n > 0n) {
|
|
72
|
-
count += Number(n & 1n);
|
|
73
|
-
n = n >> 1n;
|
|
74
|
-
}
|
|
75
|
-
return count;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* MinHash: Estimates Jaccard similarity using character n-grams and multiple hash functions.
|
|
80
|
-
* Keeps minimum hash for each function, resulting in comparable signatures.
|
|
81
|
-
* More effective than SimHash for paraphrases. 128 functions give ~1% error margin.
|
|
82
|
-
*/
|
|
83
|
-
export class MinHashFilter {
|
|
84
|
-
numPermutations = 128; // Number of independent hash functions
|
|
85
|
-
ngramSize = 3; // Character n-gram size
|
|
86
|
-
generateSignature(content) {
|
|
87
|
-
if (!content || content.trim().length === 0) {
|
|
88
|
-
return new Array(this.numPermutations).fill(0);
|
|
89
|
-
}
|
|
90
|
-
const ngrams = this.generateNgrams(content.toLowerCase(), this.ngramSize);
|
|
91
|
-
if (ngrams.length === 0) {
|
|
92
|
-
return new Array(this.numPermutations).fill(0);
|
|
93
|
-
}
|
|
94
|
-
const signature = new Array(this.numPermutations).fill(Number.MAX_SAFE_INTEGER);
|
|
95
|
-
for (const ngram of ngrams) {
|
|
96
|
-
for (let i = 0; i < this.numPermutations; i++) {
|
|
97
|
-
const hashValue = this.hashNgramWithSeed(ngram, i);
|
|
98
|
-
signature[i] = Math.min(signature[i], hashValue);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
return signature;
|
|
102
|
-
}
|
|
103
|
-
jaccardSimilarity(sig1, sig2) {
|
|
104
|
-
if (sig1.length !== sig2.length) {
|
|
105
|
-
return 0;
|
|
106
|
-
}
|
|
107
|
-
if (sig1.length === 0) {
|
|
108
|
-
return 1;
|
|
109
|
-
}
|
|
110
|
-
let matches = 0;
|
|
111
|
-
for (let i = 0; i < sig1.length; i++) {
|
|
112
|
-
if (sig1[i] === sig2[i]) {
|
|
113
|
-
matches++;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
return matches / sig1.length;
|
|
117
|
-
}
|
|
118
|
-
findCandidates(targetSig, allSigs, threshold) {
|
|
119
|
-
const candidates = [];
|
|
120
|
-
for (const [memoryId, sig] of allSigs.entries()) {
|
|
121
|
-
const similarity = this.jaccardSimilarity(targetSig, sig);
|
|
122
|
-
if (similarity >= threshold) {
|
|
123
|
-
candidates.push(memoryId);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
return candidates;
|
|
127
|
-
}
|
|
128
|
-
generateNgrams(content, size) {
|
|
129
|
-
const ngrams = [];
|
|
130
|
-
const padded = ' '.repeat(size - 1) + content + ' '.repeat(size - 1);
|
|
131
|
-
for (let i = 0; i <= padded.length - size; i++) {
|
|
132
|
-
ngrams.push(padded.substring(i, i + size));
|
|
133
|
-
}
|
|
134
|
-
return ngrams;
|
|
135
|
-
}
|
|
136
|
-
hashNgramWithSeed(ngram, seed) {
|
|
137
|
-
let hash = seed;
|
|
138
|
-
for (let i = 0; i < ngram.length; i++) {
|
|
139
|
-
hash = (hash << 5) - hash + ngram.charCodeAt(i);
|
|
140
|
-
hash = hash & hash;
|
|
141
|
-
}
|
|
142
|
-
return Math.abs(hash);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Combine SimHash and MinHash filters using union approach.
|
|
147
|
-
* Candidates pass if they match EITHER filter, casting wider net for stage 2 ranking.
|
|
148
|
-
*/
|
|
149
|
-
export function findCandidatePairs(memories, allSimhashes, allMinhashes, options) {
|
|
150
|
-
const simhashThreshold = options.simhashThreshold ?? 4;
|
|
151
|
-
const minhashThreshold = options.minhashThreshold ?? 0.7;
|
|
152
|
-
const simhashFilter = new SimHashFilter();
|
|
153
|
-
const minhashFilter = new MinHashFilter();
|
|
154
|
-
const candidatePairs = [];
|
|
155
|
-
const seen = new Set();
|
|
156
|
-
const memoryIds = Array.from(memories.keys());
|
|
157
|
-
for (let i = 0; i < memoryIds.length; i++) {
|
|
158
|
-
const id1 = memoryIds[i];
|
|
159
|
-
const simhash1 = allSimhashes.get(id1);
|
|
160
|
-
const minhash1 = allMinhashes.get(id1);
|
|
161
|
-
if (!simhash1 || !minhash1)
|
|
162
|
-
continue;
|
|
163
|
-
for (let j = i + 1; j < memoryIds.length; j++) {
|
|
164
|
-
const id2 = memoryIds[j];
|
|
165
|
-
const simhash2 = allSimhashes.get(id2);
|
|
166
|
-
const minhash2 = allMinhashes.get(id2);
|
|
167
|
-
if (!simhash2 || !minhash2)
|
|
168
|
-
continue;
|
|
169
|
-
const pairKey = id1 < id2 ? `${id1}:${id2}` : `${id2}:${id1}`;
|
|
170
|
-
if (seen.has(pairKey))
|
|
171
|
-
continue;
|
|
172
|
-
const simhashDist = simhashFilter.hammingDistance(simhash1, simhash2);
|
|
173
|
-
const simhashMatch = simhashDist <= simhashThreshold;
|
|
174
|
-
const minhashSim = minhashFilter.jaccardSimilarity(minhash1, minhash2);
|
|
175
|
-
const minhashMatch = minhashSim >= minhashThreshold;
|
|
176
|
-
if (simhashMatch || minhashMatch) {
|
|
177
|
-
seen.add(pairKey);
|
|
178
|
-
candidatePairs.push({
|
|
179
|
-
memoryId1: id1,
|
|
180
|
-
memoryId2: id2,
|
|
181
|
-
simhashDistance: simhashDist,
|
|
182
|
-
minhashSimilarity: minhashSim,
|
|
183
|
-
matched: simhashMatch && minhashMatch ? 'both' : simhashMatch ? 'simhash' : 'minhash',
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
return candidatePairs;
|
|
189
|
-
}
|
|
190
|
-
//# sourceMappingURL=hash-filters.js.map
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Semantic ranking using embeddings (Stage 2 of two-stage detection).
|
|
3
|
-
* Ranks candidates from Stage 1 by semantic similarity using cosine distance.
|
|
4
|
-
*/
|
|
5
|
-
import type { Memory } from '../../../db/drizzle/schema.js';
|
|
6
|
-
export interface RankedCandidate {
|
|
7
|
-
memoryId1: string;
|
|
8
|
-
memoryId2: string;
|
|
9
|
-
memory1: Memory;
|
|
10
|
-
memory2: Memory;
|
|
11
|
-
cosineSimilarity: number;
|
|
12
|
-
confidenceLevel: 'high' | 'medium' | 'low';
|
|
13
|
-
mergeReason: string;
|
|
14
|
-
}
|
|
15
|
-
export declare function rankCandidates(candidates: Array<{
|
|
16
|
-
memoryId1: string;
|
|
17
|
-
memoryId2: string;
|
|
18
|
-
}>, memories: Map<string, Memory>, embeddings: Map<string, number[]>, options: {
|
|
19
|
-
semanticThreshold?: number;
|
|
20
|
-
topK?: number;
|
|
21
|
-
}): Promise<RankedCandidate[]>;
|
|
22
|
-
export declare function analyzePair(memory1: Memory, memory2: Memory, embedding1: number[], embedding2: number[]): {
|
|
23
|
-
cosineSimilarity: number;
|
|
24
|
-
confidenceLevel: 'high' | 'medium' | 'low';
|
|
25
|
-
mergeReason: string;
|
|
26
|
-
factors: {
|
|
27
|
-
sameType: boolean;
|
|
28
|
-
tagOverlap: number;
|
|
29
|
-
contentLengthSimilarity: number;
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
//# sourceMappingURL=semantic-ranker.d.ts.map
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Semantic ranking using embeddings (Stage 2 of two-stage detection).
|
|
3
|
-
* Ranks candidates from Stage 1 by semantic similarity using cosine distance.
|
|
4
|
-
*/
|
|
5
|
-
import { cosineSimilarity } from '../../../core/utils/vector-operations.js';
|
|
6
|
-
function calculateConfidence(memory1, memory2, cosineSim) {
|
|
7
|
-
if (cosineSim >= 0.90) {
|
|
8
|
-
const factors = calculateConfidenceFactors(memory1, memory2);
|
|
9
|
-
if (factors.sameType && factors.tagOverlap > 0.5) {
|
|
10
|
-
return 'high';
|
|
11
|
-
}
|
|
12
|
-
if (factors.sameType || factors.tagOverlap > 0.3) {
|
|
13
|
-
return 'high';
|
|
14
|
-
}
|
|
15
|
-
return 'medium';
|
|
16
|
-
}
|
|
17
|
-
if (cosineSim >= 0.80) {
|
|
18
|
-
const factors = calculateConfidenceFactors(memory1, memory2);
|
|
19
|
-
if (factors.sameType && factors.contentLengthSimilarity > 0.7) {
|
|
20
|
-
return 'medium';
|
|
21
|
-
}
|
|
22
|
-
return 'medium';
|
|
23
|
-
}
|
|
24
|
-
return 'low';
|
|
25
|
-
}
|
|
26
|
-
function calculateConfidenceFactors(memory1, memory2) {
|
|
27
|
-
const sameType = memory1.type === memory2.type;
|
|
28
|
-
const tags1 = new Set(memory1.tags || []);
|
|
29
|
-
const tags2 = new Set(memory2.tags || []);
|
|
30
|
-
const overlap = Array.from(tags1).filter((tag) => tags2.has(tag)).length;
|
|
31
|
-
const union = new Set([...tags1, ...tags2]).size;
|
|
32
|
-
const tagOverlap = union === 0 ? 0 : overlap / union;
|
|
33
|
-
const len1 = memory1.content.length;
|
|
34
|
-
const len2 = memory2.content.length;
|
|
35
|
-
const maxLen = Math.max(len1, len2);
|
|
36
|
-
const minLen = Math.min(len1, len2);
|
|
37
|
-
const contentLengthSimilarity = maxLen === 0 ? 1 : minLen / maxLen;
|
|
38
|
-
return {
|
|
39
|
-
sameType,
|
|
40
|
-
tagOverlap,
|
|
41
|
-
contentLengthSimilarity,
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
function generateMergeReason(memory1, memory2, cosineSim, confidenceLevel) {
|
|
45
|
-
const factors = calculateConfidenceFactors(memory1, memory2);
|
|
46
|
-
const parts = [];
|
|
47
|
-
parts.push(`Semantic similarity: ${(cosineSim * 100).toFixed(1)}%`);
|
|
48
|
-
if (factors.sameType) {
|
|
49
|
-
parts.push(`Same type (${memory1.type})`);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
parts.push(`Different types (${memory1.type} vs ${memory2.type})`);
|
|
53
|
-
}
|
|
54
|
-
if (factors.tagOverlap > 0) {
|
|
55
|
-
parts.push(`${(factors.tagOverlap * 100).toFixed(0)}% tag overlap`);
|
|
56
|
-
}
|
|
57
|
-
const len1 = memory1.content.length;
|
|
58
|
-
const len2 = memory2.content.length;
|
|
59
|
-
const diffPercent = Math.abs(len1 - len2) / Math.max(len1, len2);
|
|
60
|
-
parts.push(`Content length difference: ${(diffPercent * 100).toFixed(0)}%`);
|
|
61
|
-
parts.push(`Confidence: ${confidenceLevel}`);
|
|
62
|
-
return parts.join(' • ');
|
|
63
|
-
}
|
|
64
|
-
export async function rankCandidates(candidates, memories, embeddings, options) {
|
|
65
|
-
const semanticThreshold = options.semanticThreshold ?? 0.85;
|
|
66
|
-
const topK = options.topK ?? 10;
|
|
67
|
-
const rankedCandidates = [];
|
|
68
|
-
for (const { memoryId1, memoryId2 } of candidates) {
|
|
69
|
-
const memory1 = memories.get(memoryId1);
|
|
70
|
-
const memory2 = memories.get(memoryId2);
|
|
71
|
-
const embedding1 = embeddings.get(memoryId1);
|
|
72
|
-
const embedding2 = embeddings.get(memoryId2);
|
|
73
|
-
if (!memory1 || !memory2 || !embedding1 || !embedding2) {
|
|
74
|
-
continue;
|
|
75
|
-
}
|
|
76
|
-
const similarity = cosineSimilarity(embedding1, embedding2);
|
|
77
|
-
if (similarity < semanticThreshold) {
|
|
78
|
-
continue;
|
|
79
|
-
}
|
|
80
|
-
const confidence = calculateConfidence(memory1, memory2, similarity);
|
|
81
|
-
const mergeReason = generateMergeReason(memory1, memory2, similarity, confidence);
|
|
82
|
-
rankedCandidates.push({
|
|
83
|
-
memoryId1,
|
|
84
|
-
memoryId2,
|
|
85
|
-
memory1,
|
|
86
|
-
memory2,
|
|
87
|
-
cosineSimilarity: similarity,
|
|
88
|
-
confidenceLevel: confidence,
|
|
89
|
-
mergeReason,
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
rankedCandidates.sort((a, b) => b.cosineSimilarity - a.cosineSimilarity);
|
|
93
|
-
const selectedByMemory = new Map();
|
|
94
|
-
const filtered = [];
|
|
95
|
-
for (const candidate of rankedCandidates) {
|
|
96
|
-
const count1 = (selectedByMemory.get(candidate.memoryId1) || 0) + 1;
|
|
97
|
-
const count2 = (selectedByMemory.get(candidate.memoryId2) || 0) + 1;
|
|
98
|
-
if (count1 <= topK && count2 <= topK) {
|
|
99
|
-
filtered.push(candidate);
|
|
100
|
-
selectedByMemory.set(candidate.memoryId1, count1);
|
|
101
|
-
selectedByMemory.set(candidate.memoryId2, count2);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
return filtered;
|
|
105
|
-
}
|
|
106
|
-
export function analyzePair(memory1, memory2, embedding1, embedding2) {
|
|
107
|
-
const similarity = cosineSimilarity(embedding1, embedding2);
|
|
108
|
-
const confidence = calculateConfidence(memory1, memory2, similarity);
|
|
109
|
-
const mergeReason = generateMergeReason(memory1, memory2, similarity, confidence);
|
|
110
|
-
const factors = calculateConfidenceFactors(memory1, memory2);
|
|
111
|
-
return {
|
|
112
|
-
cosineSimilarity: similarity,
|
|
113
|
-
confidenceLevel: confidence,
|
|
114
|
-
mergeReason,
|
|
115
|
-
factors,
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=semantic-ranker.js.map
|