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,546 @@
|
|
|
1
|
+
import { config } from '../config.js';
|
|
2
|
+
import { getGoogleMultimodalEmbedding, isMultimodalInput } from './google-multimodal.js';
|
|
3
|
+
import { logger } from '../logger.js';
|
|
4
|
+
// Lazy-import transformers to avoid loading unless requested
|
|
5
|
+
let transformersLocal = null;
|
|
6
|
+
async function getTransformersLocal() {
|
|
7
|
+
if (!transformersLocal) {
|
|
8
|
+
transformersLocal = import('./transformers-local.js');
|
|
9
|
+
}
|
|
10
|
+
return transformersLocal;
|
|
11
|
+
}
|
|
12
|
+
function missingModelError(provider, envVar) {
|
|
13
|
+
return new Error(`Embedding provider "${provider}" requires ${envVar} to be set`);
|
|
14
|
+
}
|
|
15
|
+
function requireModel(provider, envVar, model) {
|
|
16
|
+
if (!model.trim()) {
|
|
17
|
+
throw missingModelError(provider, envVar);
|
|
18
|
+
}
|
|
19
|
+
return model;
|
|
20
|
+
}
|
|
21
|
+
// Retry utility with exponential backoff
|
|
22
|
+
async function withRetry(fn, maxRetries = config.embeddingsMaxRetries, baseDelayMs = config.embeddingsRetryDelayMs) {
|
|
23
|
+
let lastError;
|
|
24
|
+
for (let attempt = 0; attempt < maxRetries; attempt++) {
|
|
25
|
+
try {
|
|
26
|
+
return await fn();
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
lastError = error;
|
|
30
|
+
// Only retry on network errors (5xx, ECONNRESET, ETIMEDOUT, etc.)
|
|
31
|
+
if (error instanceof Error && shouldRetryError(error)) {
|
|
32
|
+
const delay = baseDelayMs * Math.pow(2, attempt) + Math.random() * baseDelayMs;
|
|
33
|
+
logger.debug(`Embedding request failed (attempt ${attempt + 1}/${maxRetries}), retrying in ${delay.toFixed(0)}ms`, { error: error });
|
|
34
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
// Don't retry on 4xx errors or non-retryable errors
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
throw lastError;
|
|
42
|
+
}
|
|
43
|
+
function shouldRetryError(error) {
|
|
44
|
+
const message = error.message.toLowerCase();
|
|
45
|
+
// Network errors that are typically transient
|
|
46
|
+
const retryablePatterns = [
|
|
47
|
+
'econnreset',
|
|
48
|
+
'etimedout',
|
|
49
|
+
'econnrefused',
|
|
50
|
+
'esocket',
|
|
51
|
+
'network error',
|
|
52
|
+
'fetch failed',
|
|
53
|
+
'timeout',
|
|
54
|
+
'request timed out',
|
|
55
|
+
'service unavailable',
|
|
56
|
+
'too many requests',
|
|
57
|
+
'rate limit',
|
|
58
|
+
'internal server error',
|
|
59
|
+
'bad gateway',
|
|
60
|
+
'gateway timeout',
|
|
61
|
+
];
|
|
62
|
+
return retryablePatterns.some(pattern => message.includes(pattern));
|
|
63
|
+
}
|
|
64
|
+
// Timeout wrapper using AbortController
|
|
65
|
+
async function withTimeout(promise, timeoutMs) {
|
|
66
|
+
const controller = new AbortController();
|
|
67
|
+
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
|
|
68
|
+
try {
|
|
69
|
+
return await promise;
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
clearTimeout(timeoutId);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Fetch wrapper that combines retry and timeout
|
|
76
|
+
async function fetchWithRetryAndTimeout(url, options, timeoutMs = config.embeddingsTimeoutMs) {
|
|
77
|
+
return withRetry(async () => {
|
|
78
|
+
return withTimeout(fetch(url, options), timeoutMs);
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
// Simple in-memory cache for embeddings (LRU with 1000 entries)
|
|
82
|
+
const embeddingCache = new Map();
|
|
83
|
+
const MAX_CACHE_SIZE = 1000;
|
|
84
|
+
function getCacheKey(input, provider) {
|
|
85
|
+
// Simple hash of input + provider
|
|
86
|
+
let hash = 0;
|
|
87
|
+
const str = input + provider;
|
|
88
|
+
for (let i = 0; i < str.length; i++) {
|
|
89
|
+
const char = str.charCodeAt(i);
|
|
90
|
+
hash = ((hash << 5) - hash) + char;
|
|
91
|
+
hash = hash & hash; // Convert to 32bit integer
|
|
92
|
+
}
|
|
93
|
+
return hash.toString();
|
|
94
|
+
}
|
|
95
|
+
function getCachedEmbedding(key) {
|
|
96
|
+
return embeddingCache.get(key);
|
|
97
|
+
}
|
|
98
|
+
function setCachedEmbedding(key, embedding) {
|
|
99
|
+
if (embeddingCache.size >= MAX_CACHE_SIZE) {
|
|
100
|
+
// Remove oldest entry (first one)
|
|
101
|
+
const firstKey = embeddingCache.keys().next().value;
|
|
102
|
+
if (firstKey) {
|
|
103
|
+
embeddingCache.delete(firstKey);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
embeddingCache.set(key, embedding);
|
|
107
|
+
}
|
|
108
|
+
export async function getEmbedding(input) {
|
|
109
|
+
if (!input || (typeof input !== 'string' && !isMultimodalInput(input))) {
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
const provider = config.embeddingsProvider;
|
|
113
|
+
const cacheKey = typeof input === 'string'
|
|
114
|
+
? getCacheKey(input, provider)
|
|
115
|
+
: getCacheKey(JSON.stringify(input), provider);
|
|
116
|
+
// Check cache first
|
|
117
|
+
const cached = getCachedEmbedding(cacheKey);
|
|
118
|
+
if (cached) {
|
|
119
|
+
return cached;
|
|
120
|
+
}
|
|
121
|
+
let result = null;
|
|
122
|
+
// Handle multimodal input
|
|
123
|
+
if (isMultimodalInput(input) && provider === 'google') {
|
|
124
|
+
requireModel('google', 'SQUISH_GOOGLE_EMBEDDING_MODEL', config.googleEmbeddingModel);
|
|
125
|
+
const multimodalResult = await getGoogleMultimodalEmbedding(input);
|
|
126
|
+
if (multimodalResult) {
|
|
127
|
+
result = multimodalResult.embedding;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Handle text-only input
|
|
131
|
+
if (!result && typeof input === 'string') {
|
|
132
|
+
const textInput = input;
|
|
133
|
+
if (provider === 'none') {
|
|
134
|
+
result = null;
|
|
135
|
+
}
|
|
136
|
+
else if (provider === 'google') {
|
|
137
|
+
requireModel('google', 'SQUISH_GOOGLE_EMBEDDING_MODEL', config.googleEmbeddingModel);
|
|
138
|
+
const multimodalResult = await getGoogleMultimodalEmbedding({ text: textInput });
|
|
139
|
+
result = multimodalResult?.embedding || null;
|
|
140
|
+
}
|
|
141
|
+
else if (provider === 'openai') {
|
|
142
|
+
requireModel('openai', 'SQUISH_OPENAI_EMBEDDING_MODEL', config.openAiEmbeddingModel);
|
|
143
|
+
result = await getOpenAiEmbedding(textInput);
|
|
144
|
+
}
|
|
145
|
+
else if (provider === 'ollama') {
|
|
146
|
+
requireModel('ollama', 'SQUISH_OLLAMA_EMBEDDING_MODEL', config.ollamaEmbeddingModel);
|
|
147
|
+
result = await getOllamaEmbedding(textInput);
|
|
148
|
+
}
|
|
149
|
+
else if (provider === 'lmstudio') {
|
|
150
|
+
requireModel('lmstudio', 'SQUISH_LM_STUDIO_EMBEDDING_MODEL', config.lmStudioEmbeddingModel);
|
|
151
|
+
result = await getLmStudioEmbedding(textInput);
|
|
152
|
+
}
|
|
153
|
+
else if (provider === 'transformers') {
|
|
154
|
+
requireModel('transformers', 'SQUISH_LOCAL_MODEL', config.transformersLocalModel);
|
|
155
|
+
try {
|
|
156
|
+
const mod = await getTransformersLocal();
|
|
157
|
+
result = await mod.getEmbedding(textInput);
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
logger.debug(`Transformers not available, falling back to TF-IDF: ${error}`);
|
|
161
|
+
}
|
|
162
|
+
// If transformers failed, use TF-IDF
|
|
163
|
+
if (!result) {
|
|
164
|
+
result = getLocalEmbedding(textInput);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else if (provider === 'local') {
|
|
168
|
+
result = getLocalEmbedding(textInput);
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
// Auto mode: cloud -> transformers -> TF-IDF (smart fallback)
|
|
172
|
+
// Step 1: Try cloud providers
|
|
173
|
+
if (config.openAiApiKey && config.openAiEmbeddingModel) {
|
|
174
|
+
result = await getOpenAiEmbedding(textInput);
|
|
175
|
+
}
|
|
176
|
+
// Step 2: Try Ollama
|
|
177
|
+
if (!result && config.ollamaUrl && config.ollamaEmbeddingModel) {
|
|
178
|
+
result = await getOllamaEmbedding(textInput);
|
|
179
|
+
}
|
|
180
|
+
// Step 3: Try LM Studio
|
|
181
|
+
if (!result && config.lmStudioUrl && config.lmStudioEmbeddingModel) {
|
|
182
|
+
result = await getLmStudioEmbedding(textInput);
|
|
183
|
+
}
|
|
184
|
+
// Step 4: Try Transformers.js local
|
|
185
|
+
if (!result && config.transformersLocalModel) {
|
|
186
|
+
try {
|
|
187
|
+
const mod = await getTransformersLocal();
|
|
188
|
+
result = await mod.getEmbedding(textInput);
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
// Transformers not available, continue to fallback
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
// Step 5: Fall back to TF-IDF (always works)
|
|
195
|
+
if (!result) {
|
|
196
|
+
result = getLocalEmbedding(textInput);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// Cache the result if valid
|
|
201
|
+
if (result) {
|
|
202
|
+
setCachedEmbedding(cacheKey, result);
|
|
203
|
+
}
|
|
204
|
+
return result;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Get embeddings for multiple inputs in parallel batches
|
|
208
|
+
* Processes inputs in batches to respect rate limits while parallelizing
|
|
209
|
+
*/
|
|
210
|
+
export async function getBatchEmbeddings(inputs, batchSize = 20) {
|
|
211
|
+
if (inputs.length === 0)
|
|
212
|
+
return [];
|
|
213
|
+
const results = new Array(inputs.length).fill(null);
|
|
214
|
+
const provider = config.embeddingsProvider;
|
|
215
|
+
// Check cache for all inputs first
|
|
216
|
+
const uncachedIndices = [];
|
|
217
|
+
const uncachedInputs = [];
|
|
218
|
+
for (let i = 0; i < inputs.length; i++) {
|
|
219
|
+
const cacheKey = getCacheKey(inputs[i], provider);
|
|
220
|
+
const cached = getCachedEmbedding(cacheKey);
|
|
221
|
+
if (cached) {
|
|
222
|
+
results[i] = cached;
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
uncachedIndices.push(i);
|
|
226
|
+
uncachedInputs.push(inputs[i]);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// Process only uncached inputs in batches
|
|
230
|
+
for (let i = 0; i < uncachedInputs.length; i += batchSize) {
|
|
231
|
+
const batchEnd = Math.min(i + batchSize, uncachedInputs.length);
|
|
232
|
+
const batch = uncachedInputs.slice(i, batchEnd);
|
|
233
|
+
const indices = uncachedIndices.slice(i, batchEnd);
|
|
234
|
+
// Parallelize embeddings within batch using Promise.all
|
|
235
|
+
const batchResults = await Promise.all(batch.map((input) => getEmbedding(input)));
|
|
236
|
+
// Store results in correct positions and cache
|
|
237
|
+
for (let j = 0; j < batchResults.length; j++) {
|
|
238
|
+
results[indices[j]] = batchResults[j];
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return results;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Clear the embedding cache
|
|
245
|
+
*/
|
|
246
|
+
export function clearEmbeddingCache() {
|
|
247
|
+
embeddingCache.clear();
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Get embedding cache statistics
|
|
251
|
+
*/
|
|
252
|
+
export function getEmbeddingCacheStats() {
|
|
253
|
+
return {
|
|
254
|
+
size: embeddingCache.size,
|
|
255
|
+
maxSize: MAX_CACHE_SIZE,
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Local TF-IDF embedding using character n-grams and word hashing
|
|
260
|
+
* Creates a 768-dimensional vector for fast offline similarity.
|
|
261
|
+
* Fast, no API calls, works offline
|
|
262
|
+
*/
|
|
263
|
+
function getLocalEmbedding(input) {
|
|
264
|
+
if (!input || typeof input !== 'string') {
|
|
265
|
+
return null;
|
|
266
|
+
}
|
|
267
|
+
// Normalize text
|
|
268
|
+
const text = input.toLowerCase()
|
|
269
|
+
.replace(/[^a-z0-9\s]/g, ' ')
|
|
270
|
+
.replace(/\s+/g, ' ')
|
|
271
|
+
.trim();
|
|
272
|
+
if (text.length === 0) {
|
|
273
|
+
return null;
|
|
274
|
+
}
|
|
275
|
+
// Embedding dimensions
|
|
276
|
+
const dimensions = 768;
|
|
277
|
+
const vector = new Array(dimensions).fill(0);
|
|
278
|
+
// Character n-grams (3-5 grams for semantic similarity)
|
|
279
|
+
const ngrams = [3, 4, 5];
|
|
280
|
+
for (const n of ngrams) {
|
|
281
|
+
for (let i = 0; i <= text.length - n; i++) {
|
|
282
|
+
const gram = text.substring(i, i + n);
|
|
283
|
+
const hash = djb2Hash(gram);
|
|
284
|
+
const idx = Math.abs(hash) % dimensions;
|
|
285
|
+
vector[idx] += 1;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// Word-level hashing for semantic capture
|
|
289
|
+
const words = text.split(/\s+/).filter(w => w.length > 2);
|
|
290
|
+
for (const word of words) {
|
|
291
|
+
const hash = djb2Hash(word);
|
|
292
|
+
const idx = Math.abs(hash) % dimensions;
|
|
293
|
+
vector[idx] += 2; // Words weighted higher than n-grams
|
|
294
|
+
// Bigrams
|
|
295
|
+
if (words.length > 1) {
|
|
296
|
+
const idx2 = words.indexOf(word);
|
|
297
|
+
if (idx2 < words.length - 1) {
|
|
298
|
+
const bigram = `${word}_${words[idx2 + 1]}`;
|
|
299
|
+
const bigramHash = djb2Hash(bigram);
|
|
300
|
+
const bigramIdx = Math.abs(bigramHash) % dimensions;
|
|
301
|
+
vector[bigramIdx] += 3; // Bigrams weighted highest
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
// Apply TF-IDF-like scaling: square root to dampen high frequencies
|
|
306
|
+
for (let i = 0; i < dimensions; i++) {
|
|
307
|
+
if (vector[i] > 0) {
|
|
308
|
+
vector[i] = Math.sqrt(vector[i]);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// L2 normalize
|
|
312
|
+
const norm = Math.sqrt(vector.reduce((sum, val) => sum + val * val, 0));
|
|
313
|
+
if (norm > 0) {
|
|
314
|
+
for (let i = 0; i < dimensions; i++) {
|
|
315
|
+
vector[i] /= norm;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
return vector;
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* DJB2 hash function - fast, good distribution
|
|
322
|
+
*/
|
|
323
|
+
function djb2Hash(str) {
|
|
324
|
+
let hash = 5381;
|
|
325
|
+
for (let i = 0; i < str.length; i++) {
|
|
326
|
+
hash = ((hash << 5) + hash) + str.charCodeAt(i);
|
|
327
|
+
}
|
|
328
|
+
return hash;
|
|
329
|
+
}
|
|
330
|
+
async function getOpenAiEmbedding(input) {
|
|
331
|
+
if (!config.openAiApiKey)
|
|
332
|
+
return null;
|
|
333
|
+
if (!config.openAiEmbeddingModel)
|
|
334
|
+
return null;
|
|
335
|
+
try {
|
|
336
|
+
const response = await fetchWithRetryAndTimeout(config.openAiApiUrl, {
|
|
337
|
+
method: 'POST',
|
|
338
|
+
headers: {
|
|
339
|
+
'Content-Type': 'application/json',
|
|
340
|
+
Authorization: `Bearer ${config.openAiApiKey}`,
|
|
341
|
+
},
|
|
342
|
+
body: JSON.stringify({
|
|
343
|
+
model: config.openAiEmbeddingModel,
|
|
344
|
+
input,
|
|
345
|
+
}),
|
|
346
|
+
}, config.openAiTimeoutMs);
|
|
347
|
+
if (!response.ok) {
|
|
348
|
+
const message = await response.text();
|
|
349
|
+
logger.warn(`OpenAI embeddings failed: ${response.status} ${message}`);
|
|
350
|
+
return null; // Return null to allow fallback
|
|
351
|
+
}
|
|
352
|
+
const payload = await response.json();
|
|
353
|
+
const embedding = payload.data?.[0]?.embedding;
|
|
354
|
+
return embedding ?? null;
|
|
355
|
+
}
|
|
356
|
+
catch (error) {
|
|
357
|
+
logger.warn('OpenAI embeddings error:', { error: error });
|
|
358
|
+
return null; // Return null to allow fallback
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
async function getOllamaEmbedding(input) {
|
|
362
|
+
if (!config.ollamaEmbeddingModel)
|
|
363
|
+
return null;
|
|
364
|
+
try {
|
|
365
|
+
const response = await fetchWithRetryAndTimeout(`${config.ollamaUrl}/api/embeddings`, {
|
|
366
|
+
method: 'POST',
|
|
367
|
+
headers: { 'Content-Type': 'application/json' },
|
|
368
|
+
body: JSON.stringify({
|
|
369
|
+
model: config.ollamaEmbeddingModel,
|
|
370
|
+
prompt: input,
|
|
371
|
+
}),
|
|
372
|
+
}, config.ollamaTimeoutMs);
|
|
373
|
+
if (!response.ok) {
|
|
374
|
+
const message = await response.text();
|
|
375
|
+
logger.warn(`Ollama embeddings failed: ${response.status} ${message}`);
|
|
376
|
+
return null; // Return null to allow fallback
|
|
377
|
+
}
|
|
378
|
+
const payload = await response.json();
|
|
379
|
+
return payload.embedding ?? null;
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
logger.warn('Ollama embeddings error:', { error: error });
|
|
383
|
+
return null; // Return null to allow fallback
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
// LM Studio uses OpenAI-compatible API
|
|
387
|
+
async function getLmStudioEmbedding(input) {
|
|
388
|
+
if (!config.lmStudioEmbeddingModel)
|
|
389
|
+
return null;
|
|
390
|
+
try {
|
|
391
|
+
const response = await fetchWithRetryAndTimeout(`${config.lmStudioUrl}/v1/embeddings`, {
|
|
392
|
+
method: 'POST',
|
|
393
|
+
headers: { 'Content-Type': 'application/json' },
|
|
394
|
+
body: JSON.stringify({
|
|
395
|
+
model: config.lmStudioEmbeddingModel,
|
|
396
|
+
input: input,
|
|
397
|
+
}),
|
|
398
|
+
}, config.ollamaTimeoutMs); // Reuse Ollama timeout
|
|
399
|
+
if (!response.ok) {
|
|
400
|
+
const message = await response.text();
|
|
401
|
+
logger.warn(`LM Studio embeddings failed: ${response.status} ${message}`);
|
|
402
|
+
return null; // Return null to allow fallback
|
|
403
|
+
}
|
|
404
|
+
const payload = await response.json();
|
|
405
|
+
return payload.data?.[0]?.embedding ?? null;
|
|
406
|
+
}
|
|
407
|
+
catch (error) {
|
|
408
|
+
logger.warn('LM Studio embeddings error:', { error: error });
|
|
409
|
+
return null; // Return null to allow fallback
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Check health of all configured embedding providers
|
|
414
|
+
* Returns availability and latency for each provider
|
|
415
|
+
*/
|
|
416
|
+
export async function checkEmbeddingProviderHealth() {
|
|
417
|
+
const results = new Map();
|
|
418
|
+
const providers = ['local', 'openai', 'ollama', 'lmstudio', 'transformers', 'google', 'none', 'auto'];
|
|
419
|
+
// Test local provider (always available)
|
|
420
|
+
results.set('local', { available: true, latencyMs: 0 });
|
|
421
|
+
// Test OpenAI if configured
|
|
422
|
+
if (config.openAiApiKey && config.openAiEmbeddingModel) {
|
|
423
|
+
const start = Date.now();
|
|
424
|
+
try {
|
|
425
|
+
const testInput = 'health check';
|
|
426
|
+
const embedding = await withRetry(() => withTimeout(getOpenAiEmbedding(testInput), config.openAiTimeoutMs), config.embeddingsMaxRetries, config.embeddingsRetryDelayMs);
|
|
427
|
+
const latency = Date.now() - start;
|
|
428
|
+
results.set('openai', {
|
|
429
|
+
available: embedding !== null && embedding.length > 0,
|
|
430
|
+
latencyMs: latency
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
catch (error) {
|
|
434
|
+
results.set('openai', {
|
|
435
|
+
available: false,
|
|
436
|
+
error: error.message
|
|
437
|
+
});
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
results.set('openai', { available: false, error: 'Not configured' });
|
|
442
|
+
}
|
|
443
|
+
// Test Ollama if configured
|
|
444
|
+
if (config.ollamaUrl && config.ollamaEmbeddingModel) {
|
|
445
|
+
const start = Date.now();
|
|
446
|
+
try {
|
|
447
|
+
const testInput = 'health check';
|
|
448
|
+
const embedding = await withRetry(() => withTimeout(getOllamaEmbedding(testInput), config.ollamaTimeoutMs), config.embeddingsMaxRetries, config.embeddingsRetryDelayMs);
|
|
449
|
+
const latency = Date.now() - start;
|
|
450
|
+
results.set('ollama', {
|
|
451
|
+
available: embedding !== null && embedding.length > 0,
|
|
452
|
+
latencyMs: latency
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
catch (error) {
|
|
456
|
+
results.set('ollama', {
|
|
457
|
+
available: false,
|
|
458
|
+
error: error.message
|
|
459
|
+
});
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
else {
|
|
463
|
+
results.set('ollama', { available: false, error: 'Not configured' });
|
|
464
|
+
}
|
|
465
|
+
// Test LM Studio if configured
|
|
466
|
+
if (config.lmStudioUrl && config.lmStudioEmbeddingModel) {
|
|
467
|
+
const start = Date.now();
|
|
468
|
+
try {
|
|
469
|
+
const testInput = 'health check';
|
|
470
|
+
const embedding = await withRetry(() => withTimeout(getLmStudioEmbedding(testInput), config.ollamaTimeoutMs), config.embeddingsMaxRetries, config.embeddingsRetryDelayMs);
|
|
471
|
+
const latency = Date.now() - start;
|
|
472
|
+
results.set('lmstudio', {
|
|
473
|
+
available: embedding !== null && embedding.length > 0,
|
|
474
|
+
latencyMs: latency
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
catch (error) {
|
|
478
|
+
results.set('lmstudio', {
|
|
479
|
+
available: false,
|
|
480
|
+
error: error.message
|
|
481
|
+
});
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
else {
|
|
485
|
+
results.set('lmstudio', { available: false, error: 'Not configured' });
|
|
486
|
+
}
|
|
487
|
+
// Test Transformers.js local if requested
|
|
488
|
+
const transformersHealth = async () => {
|
|
489
|
+
try {
|
|
490
|
+
const mod = await getTransformersLocal();
|
|
491
|
+
const health = await mod.checkHealth();
|
|
492
|
+
return health;
|
|
493
|
+
}
|
|
494
|
+
catch (error) {
|
|
495
|
+
return { available: false, error: error.message };
|
|
496
|
+
}
|
|
497
|
+
};
|
|
498
|
+
// Try to test transformers (library must be installed)
|
|
499
|
+
if (!config.transformersLocalModel) {
|
|
500
|
+
results.set('transformers', {
|
|
501
|
+
available: false,
|
|
502
|
+
error: 'Not configured',
|
|
503
|
+
});
|
|
504
|
+
}
|
|
505
|
+
else
|
|
506
|
+
try {
|
|
507
|
+
const start = Date.now();
|
|
508
|
+
const mod = await getTransformersLocal();
|
|
509
|
+
const health = await mod.checkHealth();
|
|
510
|
+
const latency = Date.now() - start;
|
|
511
|
+
results.set('transformers', {
|
|
512
|
+
available: health.available,
|
|
513
|
+
latencyMs: latency,
|
|
514
|
+
error: health.error,
|
|
515
|
+
});
|
|
516
|
+
}
|
|
517
|
+
catch (error) {
|
|
518
|
+
results.set('transformers', {
|
|
519
|
+
available: false,
|
|
520
|
+
error: error.message,
|
|
521
|
+
});
|
|
522
|
+
}
|
|
523
|
+
// Test Google if configured
|
|
524
|
+
if ((config.googleCloudApiKey || config.googleCloudProject) && config.googleEmbeddingModel) {
|
|
525
|
+
const start = Date.now();
|
|
526
|
+
try {
|
|
527
|
+
const result = await withRetry(() => withTimeout(getGoogleMultimodalEmbedding({ text: 'health check' }), config.googleTimeoutMs), config.embeddingsMaxRetries, config.embeddingsRetryDelayMs);
|
|
528
|
+
const latency = Date.now() - start;
|
|
529
|
+
results.set('google', {
|
|
530
|
+
available: result !== null && result.embedding.length > 0,
|
|
531
|
+
latencyMs: latency
|
|
532
|
+
});
|
|
533
|
+
}
|
|
534
|
+
catch (error) {
|
|
535
|
+
results.set('google', {
|
|
536
|
+
available: false,
|
|
537
|
+
error: error.message
|
|
538
|
+
});
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
else {
|
|
542
|
+
results.set('google', { available: false, error: 'Not configured' });
|
|
543
|
+
}
|
|
544
|
+
return results;
|
|
545
|
+
}
|
|
546
|
+
//# sourceMappingURL=embeddings.js.map
|
|
@@ -5,10 +5,14 @@ export async function getGoogleMultimodalEmbedding(input) {
|
|
|
5
5
|
logger.debug('Google Cloud credentials not configured');
|
|
6
6
|
return null;
|
|
7
7
|
}
|
|
8
|
+
if (!config.googleEmbeddingModel) {
|
|
9
|
+
logger.debug('Google embedding model not configured');
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
8
12
|
try {
|
|
9
13
|
const endpoint = config.googleCloudLocation === 'global'
|
|
10
|
-
? `https://aiplatform.googleapis.com/v1/projects/${config.googleCloudProject}/locations/${config.googleCloudLocation}/publishers/google/models
|
|
11
|
-
: `https://${config.googleCloudLocation}-aiplatform.googleapis.com/v1/projects/${config.googleCloudProject}/locations/${config.googleCloudLocation}/publishers/google/models
|
|
14
|
+
? `https://aiplatform.googleapis.com/v1/projects/${config.googleCloudProject}/locations/${config.googleCloudLocation}/publishers/google/models/${config.googleEmbeddingModel}:predict`
|
|
15
|
+
: `https://${config.googleCloudLocation}-aiplatform.googleapis.com/v1/projects/${config.googleCloudProject}/locations/${config.googleCloudLocation}/publishers/google/models/${config.googleEmbeddingModel}:predict`;
|
|
12
16
|
const instances = [];
|
|
13
17
|
if (input.text) {
|
|
14
18
|
instances.push({ text: input.text });
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for local embeddings
|
|
3
|
+
* Note: Actual embedding generation is in core/embeddings.ts
|
|
4
|
+
*/
|
|
5
|
+
import { cosineSimilarity as vectorCosineSimilarity } from '../utils/vector-operations.js';
|
|
6
|
+
/**
|
|
7
|
+
* @deprecated Use cosineSimilarity from core/utils/vector-operations.ts directly.
|
|
8
|
+
* This re-export is for backward compatibility and will be removed in v1.2.0.
|
|
9
|
+
*/
|
|
10
|
+
export declare const cosineSimilarity: typeof vectorCosineSimilarity;
|
|
11
|
+
//# sourceMappingURL=local-embeddings.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility functions for local embeddings
|
|
3
|
+
* Note: Actual embedding generation is in core/embeddings.ts
|
|
4
|
+
*/
|
|
5
|
+
import { cosineSimilarity as vectorCosineSimilarity } from '../utils/vector-operations.js';
|
|
6
|
+
/**
|
|
7
|
+
* @deprecated Use cosineSimilarity from core/utils/vector-operations.ts directly.
|
|
8
|
+
* This re-export is for backward compatibility and will be removed in v1.2.0.
|
|
9
|
+
*/
|
|
10
|
+
export const cosineSimilarity = vectorCosineSimilarity;
|
|
11
|
+
//# sourceMappingURL=local-embeddings.js.map
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
19
19
|
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
20
20
|
import { spawn } from 'child_process';
|
|
21
|
-
import { logger } from '../logger
|
|
21
|
+
import { logger } from '../logger';
|
|
22
22
|
/**
|
|
23
23
|
* QMD MCP Client class
|
|
24
24
|
*
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transformers.js Local Embedding Provider
|
|
3
|
+
*
|
|
4
|
+
* Uses ONNX-based transformer models for high-quality local embeddings.
|
|
5
|
+
* Supports Hugging Face ONNX embedding models.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* Set SQUISH_EMBEDDINGS_PROVIDER=transformers
|
|
9
|
+
* Required: SQUISH_LOCAL_MODEL=<huggingface-onnx-model>
|
|
10
|
+
*
|
|
11
|
+
* Download models automatically on first use. Models cached in HuggingFace cache directory.
|
|
12
|
+
*/
|
|
13
|
+
export interface TransformersLocalConfig {
|
|
14
|
+
model: string;
|
|
15
|
+
device: 'cpu' | 'webgpu';
|
|
16
|
+
dtype: 'q8' | 'q4' | 'f16' | 'f32';
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Check if pipeline is loaded
|
|
20
|
+
*/
|
|
21
|
+
export declare function isReady(): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Get embedding dimension for current model
|
|
24
|
+
*/
|
|
25
|
+
export declare function getEmbeddingDimension(): number;
|
|
26
|
+
/**
|
|
27
|
+
* Generate embedding for a single text input
|
|
28
|
+
* Uses mean pooling + L2 normalization
|
|
29
|
+
*/
|
|
30
|
+
export declare function getEmbedding(text: string): Promise<number[] | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Generate embeddings for multiple texts in batch
|
|
33
|
+
* Processes efficiently with batching
|
|
34
|
+
*/
|
|
35
|
+
export declare function getBatchEmbeddings(texts: string[], batchSize?: number): Promise<Array<number[] | null>>;
|
|
36
|
+
/**
|
|
37
|
+
* Check health of the transformers provider
|
|
38
|
+
*/
|
|
39
|
+
export declare function checkHealth(): Promise<{
|
|
40
|
+
available: boolean;
|
|
41
|
+
latencyMs?: number;
|
|
42
|
+
error?: string;
|
|
43
|
+
model?: string;
|
|
44
|
+
dimension?: number;
|
|
45
|
+
}>;
|
|
46
|
+
/**
|
|
47
|
+
* Unload the pipeline (for testing or memory management)
|
|
48
|
+
*/
|
|
49
|
+
export declare function unload(): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* Warm up the model with a test input
|
|
52
|
+
*/
|
|
53
|
+
export declare function warmup(): Promise<boolean>;
|
|
54
|
+
declare const _default: {
|
|
55
|
+
isReady: typeof isReady;
|
|
56
|
+
getEmbeddingDimension: typeof getEmbeddingDimension;
|
|
57
|
+
getEmbedding: typeof getEmbedding;
|
|
58
|
+
getBatchEmbeddings: typeof getBatchEmbeddings;
|
|
59
|
+
checkHealth: typeof checkHealth;
|
|
60
|
+
unload: typeof unload;
|
|
61
|
+
warmup: typeof warmup;
|
|
62
|
+
};
|
|
63
|
+
export default _default;
|
|
64
|
+
//# sourceMappingURL=transformers-local.d.ts.map
|