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,47 @@
|
|
|
1
|
+
import { getDb } from '../../db/index.js';
|
|
2
|
+
import { memories } from '../../db/drizzle/schema.js';
|
|
3
|
+
import { eq } from 'drizzle-orm';
|
|
4
|
+
import { logger } from '../logger.js';
|
|
5
|
+
/** Promote a memory to a higher tier (cold -> hot only, simplified from warm hierarchy) */
|
|
6
|
+
export async function promoteTier(memoryId) {
|
|
7
|
+
const db = await getDb();
|
|
8
|
+
// @ts-ignore - drizzle overloads
|
|
9
|
+
const row = await db.select().from(memories).where(eq(memories.id, memoryId)).limit(1);
|
|
10
|
+
const mem = row[0];
|
|
11
|
+
if (!mem)
|
|
12
|
+
return;
|
|
13
|
+
// Simplified: cold -> hot (no warm tier)
|
|
14
|
+
if (mem.tier === 'cold') {
|
|
15
|
+
await db.update(memories).set({ tier: 'hot' }).where(eq(memories.id, memoryId));
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/** Demote a memory tier or expire it based on decay (simplified: hot -> cold only) */
|
|
19
|
+
export async function demoteTier(memoryId) {
|
|
20
|
+
const db = await getDb();
|
|
21
|
+
// @ts-ignore
|
|
22
|
+
const row = await db.select().from(memories).where(eq(memories.id, memoryId)).limit(1);
|
|
23
|
+
const mem = row[0];
|
|
24
|
+
if (!mem)
|
|
25
|
+
return;
|
|
26
|
+
// Simplified: hot -> cold (no warm tier)
|
|
27
|
+
if (mem.tier === 'hot') {
|
|
28
|
+
await db.update(memories).set({ tier: 'cold' }).where(eq(memories.id, memoryId));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export async function expireMemory(memoryId) {
|
|
32
|
+
const db = await getDb();
|
|
33
|
+
// @ts-ignore
|
|
34
|
+
await db.update(memories).set({ status: 'expired' }).where(eq(memories.id, memoryId));
|
|
35
|
+
}
|
|
36
|
+
export async function markMerged(memoryId, targetId) {
|
|
37
|
+
const db = await getDb();
|
|
38
|
+
// @ts-ignore
|
|
39
|
+
await db.update(memories).set({ is_merged: true, merged_into_id: targetId }).where(eq(memories.id, memoryId));
|
|
40
|
+
}
|
|
41
|
+
export async function markSuperseded(memoryId) {
|
|
42
|
+
const db = await getDb();
|
|
43
|
+
// @ts-ignore
|
|
44
|
+
await db.update(memories).set({ is_merged: true }).where(eq(memories.id, memoryId));
|
|
45
|
+
}
|
|
46
|
+
logger.info('Memory lifecycle helpers loaded');
|
|
47
|
+
//# sourceMappingURL=memory-lifecycle.js.map
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Migration Module
|
|
3
|
+
* Migrate memories between .squish directories/databases
|
|
4
|
+
*/
|
|
5
|
+
export interface MigrateOptions {
|
|
6
|
+
dryRun?: boolean;
|
|
7
|
+
deleteSource?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface MigrateResult {
|
|
10
|
+
memoriesCopied: number;
|
|
11
|
+
observationsCopied: number;
|
|
12
|
+
associationsCopied: number;
|
|
13
|
+
projectsMapped: number;
|
|
14
|
+
sourceDeleted?: boolean;
|
|
15
|
+
message: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Migrate memories from one .squish directory to another
|
|
19
|
+
*/
|
|
20
|
+
export declare function migrateMemories(sourceDir: string, targetDir: string, options?: MigrateOptions): Promise<MigrateResult>;
|
|
21
|
+
//# sourceMappingURL=migrate.d.ts.map
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Migration Module
|
|
3
|
+
* Migrate memories between .squish directories/databases
|
|
4
|
+
*/
|
|
5
|
+
import { randomUUID } from 'crypto';
|
|
6
|
+
import { existsSync } from 'fs';
|
|
7
|
+
import { join } from 'path';
|
|
8
|
+
import { getDbClient } from '../lib/db-client.js';
|
|
9
|
+
/**
|
|
10
|
+
* Migrate memories from one .squish directory to another
|
|
11
|
+
*/
|
|
12
|
+
export async function migrateMemories(sourceDir, targetDir, options = {}) {
|
|
13
|
+
const { dryRun = false, deleteSource = false } = options;
|
|
14
|
+
const sourceDbPath = join(sourceDir, 'squish.db');
|
|
15
|
+
const targetDbPath = join(targetDir, 'squish.db');
|
|
16
|
+
if (!existsSync(sourceDbPath)) {
|
|
17
|
+
throw new Error(`Source database not found: ${sourceDbPath}`);
|
|
18
|
+
}
|
|
19
|
+
if (!existsSync(targetDbPath)) {
|
|
20
|
+
throw new Error(`Target database not found: ${targetDbPath}`);
|
|
21
|
+
}
|
|
22
|
+
// Use bun:sqlite for direct source DB access
|
|
23
|
+
// @ts-ignore - bun:sqlite module not found in types but works at runtime
|
|
24
|
+
const SqliteDatabase = (await import('bun:sqlite')).default;
|
|
25
|
+
const sourceDb = new SqliteDatabase(sourceDbPath, { readonly: true });
|
|
26
|
+
// Get target DB through the app's existing mechanism
|
|
27
|
+
const { db: targetDb, schema } = await getDbClient();
|
|
28
|
+
// Get all projects from source
|
|
29
|
+
const sourceProjects = sourceDb.query('SELECT * FROM projects').all();
|
|
30
|
+
// Map old project IDs to new project IDs
|
|
31
|
+
const projectIdMap = new Map();
|
|
32
|
+
for (const project of sourceProjects) {
|
|
33
|
+
// Check if project with same path exists in target
|
|
34
|
+
const existing = await targetDb.select()
|
|
35
|
+
.from(schema.projects)
|
|
36
|
+
.where((tbl, { eq }) => eq(tbl.path, project.path))
|
|
37
|
+
.limit(1);
|
|
38
|
+
if (existing.length > 0) {
|
|
39
|
+
projectIdMap.set(project.id, existing[0].id);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
// Create new project in target
|
|
43
|
+
const newId = randomUUID();
|
|
44
|
+
await targetDb.insert(schema.projects).values({
|
|
45
|
+
id: newId,
|
|
46
|
+
path: project.path,
|
|
47
|
+
name: project.name || 'migrated',
|
|
48
|
+
createdAt: new Date(),
|
|
49
|
+
});
|
|
50
|
+
projectIdMap.set(project.id, newId);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// Migrate memories
|
|
54
|
+
const sourceMemories = sourceDb.query('SELECT * FROM memories').all();
|
|
55
|
+
let memoriesCopied = 0;
|
|
56
|
+
for (const mem of sourceMemories) {
|
|
57
|
+
const oldProjectId = mem.project_id;
|
|
58
|
+
const newProjectId = projectIdMap.get(oldProjectId);
|
|
59
|
+
if (!newProjectId) {
|
|
60
|
+
console.warn(`Skipping memory ${mem.id}: no project mapping found`);
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (!dryRun) {
|
|
64
|
+
// Add 'imported' tag to track migrated memories
|
|
65
|
+
const existingTags = mem.tags ? JSON.parse(mem.tags) : [];
|
|
66
|
+
const newTags = [...existingTags, 'imported'];
|
|
67
|
+
await targetDb.insert(schema.memories).values({
|
|
68
|
+
id: randomUUID(),
|
|
69
|
+
projectId: newProjectId,
|
|
70
|
+
type: mem.type,
|
|
71
|
+
content: mem.content,
|
|
72
|
+
summary: mem.summary,
|
|
73
|
+
source: mem.source || 'migrated',
|
|
74
|
+
confidence: mem.confidence ?? 50,
|
|
75
|
+
confidenceLevel: mem.confidence_level || 'speculative',
|
|
76
|
+
tags: newTags,
|
|
77
|
+
metadata: { ...mem.metadata, migratedAt: new Date().toISOString(), originalId: mem.id },
|
|
78
|
+
isActive: mem.is_active ?? 1,
|
|
79
|
+
createdAt: mem.created_at ? new Date(mem.created_at * 1000) : new Date(),
|
|
80
|
+
updatedAt: new Date(),
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
memoriesCopied++;
|
|
84
|
+
}
|
|
85
|
+
// Migrate learnings (renamed from observations)
|
|
86
|
+
const sourceLearnings = sourceDb.query('SELECT * FROM learnings').all();
|
|
87
|
+
let learningsCopied = 0;
|
|
88
|
+
for (const learn of sourceLearnings) {
|
|
89
|
+
const oldProjectId = learn.project_id;
|
|
90
|
+
const newProjectId = projectIdMap.get(oldProjectId);
|
|
91
|
+
if (!newProjectId)
|
|
92
|
+
continue;
|
|
93
|
+
if (!dryRun) {
|
|
94
|
+
// Add is_imported flag to track migrated learnings
|
|
95
|
+
await targetDb.insert(schema.learnings).values({
|
|
96
|
+
id: randomUUID(),
|
|
97
|
+
projectId: newProjectId,
|
|
98
|
+
type: learn.type,
|
|
99
|
+
action: learn.action,
|
|
100
|
+
summary: learn.summary,
|
|
101
|
+
target: learn.target,
|
|
102
|
+
details: learn.details,
|
|
103
|
+
isImported: true,
|
|
104
|
+
createdAt: new Date(),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
learningsCopied++;
|
|
108
|
+
}
|
|
109
|
+
// Migrate memory associations (simplified - skip for now)
|
|
110
|
+
const sourceAssoc = sourceDb.query('SELECT * FROM memory_associations').all();
|
|
111
|
+
let associationsCopied = 0;
|
|
112
|
+
if (!dryRun && sourceAssoc.length > 0) {
|
|
113
|
+
console.warn(`Note: ${sourceAssoc.length} associations not migrated (requires ID mapping)`);
|
|
114
|
+
}
|
|
115
|
+
// Close source DB
|
|
116
|
+
sourceDb.close();
|
|
117
|
+
// Delete source if requested
|
|
118
|
+
let sourceDeleted = false;
|
|
119
|
+
if (!dryRun && deleteSource && memoriesCopied > 0) {
|
|
120
|
+
// Implementation would delete the file
|
|
121
|
+
console.warn('Source deletion not implemented - requires manual removal');
|
|
122
|
+
}
|
|
123
|
+
return {
|
|
124
|
+
memoriesCopied,
|
|
125
|
+
observationsCopied: learningsCopied,
|
|
126
|
+
associationsCopied,
|
|
127
|
+
projectsMapped: projectIdMap.size,
|
|
128
|
+
sourceDeleted,
|
|
129
|
+
message: dryRun
|
|
130
|
+
? 'Dry run complete - no changes made'
|
|
131
|
+
: `Successfully migrated ${memoriesCopied} memories, ${learningsCopied} learnings`
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=migrate.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory normalization utilities
|
|
3
|
+
* Shared between memories.ts and loader.ts to avoid circular dependencies
|
|
4
|
+
*/
|
|
5
|
+
import type { MemoryRecord } from '../lib/types.js';
|
|
6
|
+
export declare function normalizeMemory(row: any): MemoryRecord;
|
|
7
|
+
//# sourceMappingURL=normalization.d.ts.map
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory normalization utilities
|
|
3
|
+
* Shared between memories.ts and loader.ts to avoid circular dependencies
|
|
4
|
+
*/
|
|
5
|
+
import { deserializeTags, deserializeMetadata } from './serialization.js';
|
|
6
|
+
import { normalizeTimestamp } from '../lib/utils.js';
|
|
7
|
+
export function normalizeMemory(row) {
|
|
8
|
+
const tags = deserializeTags(row.tags ?? null);
|
|
9
|
+
const metadata = deserializeMetadata(row.metadata ?? null);
|
|
10
|
+
const createdAtStr = normalizeTimestamp(row.createdAt ?? row.created_at);
|
|
11
|
+
return {
|
|
12
|
+
id: row.id,
|
|
13
|
+
projectId: row.projectId ?? row.project_id ?? null,
|
|
14
|
+
type: row.type,
|
|
15
|
+
content: row.content,
|
|
16
|
+
summary: row.summary ?? null,
|
|
17
|
+
tags,
|
|
18
|
+
metadata,
|
|
19
|
+
createdAt: createdAtStr,
|
|
20
|
+
validFrom: row.validFrom ?? row.valid_from ?? null,
|
|
21
|
+
validTo: row.validTo ?? row.valid_to ?? null,
|
|
22
|
+
recordedAt: row.recordedAt ?? row.recorded_at ?? null,
|
|
23
|
+
confidenceLevel: row.confidenceLevel ?? row.confidence_level ?? null,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=normalization.js.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path Strengthener
|
|
3
|
+
*
|
|
4
|
+
* Strengthens association paths that led to successful retrievals and
|
|
5
|
+
* weakens paths that led to irrelevant results. This implements the
|
|
6
|
+
* "optimize" concept: the graph develops its own sense of relevance
|
|
7
|
+
* over time based on actual usage patterns.
|
|
8
|
+
*
|
|
9
|
+
* A customer support agent's graph naturally strengthens paths through
|
|
10
|
+
* product docs and refund policies while letting rarely-queried HR
|
|
11
|
+
* edges decay.
|
|
12
|
+
*/
|
|
13
|
+
export interface PathStrengthResult {
|
|
14
|
+
strengthened: number;
|
|
15
|
+
weakened: number;
|
|
16
|
+
pruned: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Strengthen the association path between memories that were
|
|
20
|
+
* retrieved together and found useful.
|
|
21
|
+
*/
|
|
22
|
+
export declare function strengthenPath(memoryIds: string[], boostAmount?: number): Promise<number>;
|
|
23
|
+
/**
|
|
24
|
+
* Weaken association paths that led to irrelevant results.
|
|
25
|
+
*/
|
|
26
|
+
export declare function weakenPath(memoryIds: string[], decayAmount?: number): Promise<number>;
|
|
27
|
+
/**
|
|
28
|
+
* Prune associations that have decayed below a threshold.
|
|
29
|
+
*/
|
|
30
|
+
export declare function pruneWeakAssociations(minWeight?: number, maxAge?: number): Promise<number>;
|
|
31
|
+
/**
|
|
32
|
+
* Run a full optimize cycle: strengthen useful paths, weaken unused ones,
|
|
33
|
+
* prune dead associations, and derive implicit facts.
|
|
34
|
+
*/
|
|
35
|
+
export declare function runPruneCycle(options?: {
|
|
36
|
+
minWeight?: number;
|
|
37
|
+
maxAge?: number;
|
|
38
|
+
}): Promise<PathStrengthResult>;
|
|
39
|
+
//# sourceMappingURL=path-strengthener.d.ts.map
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Path Strengthener
|
|
3
|
+
*
|
|
4
|
+
* Strengthens association paths that led to successful retrievals and
|
|
5
|
+
* weakens paths that led to irrelevant results. This implements the
|
|
6
|
+
* "optimize" concept: the graph develops its own sense of relevance
|
|
7
|
+
* over time based on actual usage patterns.
|
|
8
|
+
*
|
|
9
|
+
* A customer support agent's graph naturally strengthens paths through
|
|
10
|
+
* product docs and refund policies while letting rarely-queried HR
|
|
11
|
+
* edges decay.
|
|
12
|
+
*/
|
|
13
|
+
import { eq, and, or, sql } from 'drizzle-orm';
|
|
14
|
+
import { getDb } from '../../db/index.js';
|
|
15
|
+
import { getSchema } from '../../db/schema.js';
|
|
16
|
+
import { logger } from '../logger.js';
|
|
17
|
+
/**
|
|
18
|
+
* Strengthen the association path between memories that were
|
|
19
|
+
* retrieved together and found useful.
|
|
20
|
+
*/
|
|
21
|
+
export async function strengthenPath(memoryIds, boostAmount = 2) {
|
|
22
|
+
if (memoryIds.length < 2)
|
|
23
|
+
return 0;
|
|
24
|
+
const db = await getDb();
|
|
25
|
+
const schema = await getSchema();
|
|
26
|
+
let strengthened = 0;
|
|
27
|
+
// Generate all pairs
|
|
28
|
+
for (let i = 0; i < memoryIds.length; i++) {
|
|
29
|
+
for (let j = i + 1; j < memoryIds.length; j++) {
|
|
30
|
+
try {
|
|
31
|
+
// Check if association exists
|
|
32
|
+
const existing = await db
|
|
33
|
+
.select()
|
|
34
|
+
.from(schema.memoryAssociations)
|
|
35
|
+
.where(or(and(eq(schema.memoryAssociations.fromMemoryId, memoryIds[i]), eq(schema.memoryAssociations.toMemoryId, memoryIds[j])), and(eq(schema.memoryAssociations.fromMemoryId, memoryIds[j]), eq(schema.memoryAssociations.toMemoryId, memoryIds[i]))))
|
|
36
|
+
.limit(1);
|
|
37
|
+
if (existing.length > 0) {
|
|
38
|
+
// Strengthen existing association
|
|
39
|
+
await db
|
|
40
|
+
.update(schema.memoryAssociations)
|
|
41
|
+
.set({
|
|
42
|
+
weight: sql `${schema.memoryAssociations.weight} + ${boostAmount}`,
|
|
43
|
+
coactivationCount: sql `${schema.memoryAssociations.coactivationCount} + 1`,
|
|
44
|
+
lastCoactivatedAt: new Date(),
|
|
45
|
+
})
|
|
46
|
+
.where(eq(schema.memoryAssociations.id, existing[0].id));
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// Create new association
|
|
50
|
+
await db.insert(schema.memoryAssociations).values({
|
|
51
|
+
fromMemoryId: memoryIds[i],
|
|
52
|
+
toMemoryId: memoryIds[j],
|
|
53
|
+
associationType: 'co_occurred',
|
|
54
|
+
weight: boostAmount,
|
|
55
|
+
coactivationCount: 1,
|
|
56
|
+
lastCoactivatedAt: new Date(),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
strengthened++;
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
logger.debug('Error strengthening path', {
|
|
63
|
+
from: memoryIds[i],
|
|
64
|
+
to: memoryIds[j],
|
|
65
|
+
error: error,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return strengthened;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Weaken association paths that led to irrelevant results.
|
|
74
|
+
*/
|
|
75
|
+
export async function weakenPath(memoryIds, decayAmount = 0.5) {
|
|
76
|
+
if (memoryIds.length < 2)
|
|
77
|
+
return 0;
|
|
78
|
+
const db = await getDb();
|
|
79
|
+
const schema = await getSchema();
|
|
80
|
+
let weakened = 0;
|
|
81
|
+
for (let i = 0; i < memoryIds.length; i++) {
|
|
82
|
+
for (let j = i + 1; j < memoryIds.length; j++) {
|
|
83
|
+
try {
|
|
84
|
+
const existing = await db
|
|
85
|
+
.select()
|
|
86
|
+
.from(schema.memoryAssociations)
|
|
87
|
+
.where(or(and(eq(schema.memoryAssociations.fromMemoryId, memoryIds[i]), eq(schema.memoryAssociations.toMemoryId, memoryIds[j])), and(eq(schema.memoryAssociations.fromMemoryId, memoryIds[j]), eq(schema.memoryAssociations.toMemoryId, memoryIds[i]))))
|
|
88
|
+
.limit(1);
|
|
89
|
+
if (existing.length > 0) {
|
|
90
|
+
// Weaken but don't remove (minimum weight of 1)
|
|
91
|
+
await db
|
|
92
|
+
.update(schema.memoryAssociations)
|
|
93
|
+
.set({
|
|
94
|
+
weight: sql `GREATEST(${schema.memoryAssociations.weight} - ${decayAmount}, 1)`,
|
|
95
|
+
})
|
|
96
|
+
.where(eq(schema.memoryAssociations.id, existing[0].id));
|
|
97
|
+
weakened++;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
logger.debug('Error weakening path', {
|
|
102
|
+
from: memoryIds[i],
|
|
103
|
+
to: memoryIds[j],
|
|
104
|
+
error: error,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return weakened;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Prune associations that have decayed below a threshold.
|
|
113
|
+
*/
|
|
114
|
+
export async function pruneWeakAssociations(minWeight = 2, maxAge = 90 // days
|
|
115
|
+
) {
|
|
116
|
+
const db = await getDb();
|
|
117
|
+
const schema = await getSchema();
|
|
118
|
+
const cutoffDate = new Date();
|
|
119
|
+
cutoffDate.setDate(cutoffDate.getDate() - maxAge);
|
|
120
|
+
try {
|
|
121
|
+
// Delete associations that are weak AND old
|
|
122
|
+
const result = await db
|
|
123
|
+
.delete(schema.memoryAssociations)
|
|
124
|
+
.where(and(sql `${schema.memoryAssociations.weight} < ${minWeight}`, sql `${schema.memoryAssociations.lastCoactivatedAt} < ${cutoffDate}`));
|
|
125
|
+
const pruned = result?.rowCount ?? 0;
|
|
126
|
+
logger.info('Pruned weak associations', { pruned, minWeight, maxAge });
|
|
127
|
+
return pruned;
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
logger.error('Error pruning weak associations', { error: error });
|
|
131
|
+
return 0;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Run a full optimize cycle: strengthen useful paths, weaken unused ones,
|
|
136
|
+
* prune dead associations, and derive implicit facts.
|
|
137
|
+
*/
|
|
138
|
+
export async function runPruneCycle(options) {
|
|
139
|
+
const { minWeight = 2, maxAge = 90 } = options || {};
|
|
140
|
+
logger.info('Starting prune cycle', { minWeight, maxAge });
|
|
141
|
+
// Step 1: Prune weak associations
|
|
142
|
+
const pruned = await pruneWeakAssociations(minWeight, maxAge);
|
|
143
|
+
logger.info('Prune cycle completed', { pruned });
|
|
144
|
+
return {
|
|
145
|
+
strengthened: 0, // Strengthening happens via retrieval feedback
|
|
146
|
+
weakened: 0, // Weakening happens via retrieval feedback
|
|
147
|
+
pruned,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=path-strengthener.js.map
|
|
@@ -2,7 +2,7 @@ import { randomUUID } from 'crypto';
|
|
|
2
2
|
import { eq, desc, and, sql } from 'drizzle-orm';
|
|
3
3
|
import { getDb } from '../../db/index.js';
|
|
4
4
|
import { getSchema } from '../../db/schema.js';
|
|
5
|
-
import { createDatabaseClient } from '
|
|
5
|
+
import { createDatabaseClient } from '../storage/database.js';
|
|
6
6
|
const PREVIEW_TOKENS = 50;
|
|
7
7
|
const MAX_PRELOAD_CANDIDATES = 20;
|
|
8
8
|
const TOKEN_ESTIMATE_CHARS = 4;
|
|
@@ -36,9 +36,43 @@ export function expandQuery(query) {
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
// Extract
|
|
40
|
-
const
|
|
41
|
-
|
|
39
|
+
// Extract entities (capitalized words), filtering common stopwords
|
|
40
|
+
const STOP_WORDS = new Set([
|
|
41
|
+
'The', 'A', 'An', 'This', 'That', 'These', 'Those',
|
|
42
|
+
'I', 'You', 'We', 'They', 'He', 'She', 'It',
|
|
43
|
+
'What', 'When', 'Where', 'Why', 'How',
|
|
44
|
+
'My', 'Your', 'Our', 'Their', 'Its',
|
|
45
|
+
'If', 'But', 'Or', 'And', 'So', 'Then',
|
|
46
|
+
'Just', 'Only', 'Also', 'Very', 'Too',
|
|
47
|
+
'Has', 'Have', 'Had', 'Does', 'Did', 'Will', 'Would', 'Could', 'Should',
|
|
48
|
+
'Can', 'May', 'Might', 'Must', 'Shall',
|
|
49
|
+
'With', 'Without', 'From', 'Into', 'About', 'After', 'Before', 'Between',
|
|
50
|
+
'During', 'Through', 'Under', 'Over', 'Above', 'Below',
|
|
51
|
+
'All', 'Some', 'Any', 'No', 'Not', 'Each', 'Every', 'Most', 'Many', 'Much',
|
|
52
|
+
'Few', 'Both', 'Either', 'Neither', 'Another', 'Other',
|
|
53
|
+
'Such', 'Same', 'Different', 'New', 'Old', 'First', 'Last', 'Next', 'Last',
|
|
54
|
+
'See', 'Get', 'Make', 'Do', 'Say', 'Tell', 'Know', 'Think', 'Want', 'Use',
|
|
55
|
+
'Find', 'Give', 'Take', 'Show', 'Send', 'Put', 'Keep', 'Let', 'Begin', 'Seem',
|
|
56
|
+
]);
|
|
57
|
+
// Common tech stack terms that ARE entities (preserves known entities)
|
|
58
|
+
const TECH_TERMS = new Set([
|
|
59
|
+
'TypeScript', 'JavaScript', 'Python', 'Java', 'Go', 'Rust', 'Ruby', 'PHP',
|
|
60
|
+
'React', 'Vue', 'Angular', 'Svelte', 'Next', 'Nuxt', 'Astro',
|
|
61
|
+
'Node', 'Express', 'Fastify', 'Deno', 'Bun',
|
|
62
|
+
'PostgreSQL', 'MySQL', 'MongoDB', 'Redis', 'SQLite', 'DynamoDB',
|
|
63
|
+
'AWS', 'GCP', 'Azure', 'Docker', 'Kubernetes', 'Terraform',
|
|
64
|
+
'OpenAI', 'Anthropic', 'Google', 'Meta', 'Microsoft', 'Apple',
|
|
65
|
+
'HTML', 'CSS', 'Tailwind', 'GraphQL', 'REST', 'gRPC', 'WebSocket',
|
|
66
|
+
'CI', 'CD', 'Git', 'GitHub', 'GitLab', 'Bitbucket',
|
|
67
|
+
]);
|
|
68
|
+
const entityMatches = query.match(/\b[A-Z][a-z]{2,}\b/g) || [];
|
|
69
|
+
const entities = [...new Set(entityMatches)].filter(e => {
|
|
70
|
+
// Always include known tech terms
|
|
71
|
+
if (TECH_TERMS.has(e))
|
|
72
|
+
return true;
|
|
73
|
+
// Filter out stopwords
|
|
74
|
+
return !STOP_WORDS.has(e);
|
|
75
|
+
});
|
|
42
76
|
return {
|
|
43
77
|
original: query,
|
|
44
78
|
expanded: [...new Set(expanded)], // Deduplicate
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
import { logger } from '../logger.js';
|
|
3
3
|
import { config } from '../../config.js';
|
|
4
4
|
import { expandQuery } from './query-processor.js';
|
|
5
|
-
const REWRITE_SYSTEM_PROMPT = `You are a search query optimizer. Given a conversation context and a user's latest message, rewrite the message into the single most effective search query to retrieve relevant memories.
|
|
6
|
-
|
|
7
|
-
Rules:
|
|
8
|
-
1. Output ONLY the optimized search query - no explanations or extra text
|
|
9
|
-
2. Remove filler words (please, can you, etc.)
|
|
10
|
-
3. Focus on the core information need
|
|
11
|
-
4. Preserve important entities (names, dates, technical terms)
|
|
12
|
-
5. Add synonyms for key terms if helpful
|
|
13
|
-
6. Consider what memories would be most relevant
|
|
5
|
+
const REWRITE_SYSTEM_PROMPT = `You are a search query optimizer. Given a conversation context and a user's latest message, rewrite the message into the single most effective search query to retrieve relevant memories.
|
|
6
|
+
|
|
7
|
+
Rules:
|
|
8
|
+
1. Output ONLY the optimized search query - no explanations or extra text
|
|
9
|
+
2. Remove filler words (please, can you, etc.)
|
|
10
|
+
3. Focus on the core information need
|
|
11
|
+
4. Preserve important entities (names, dates, technical terms)
|
|
12
|
+
5. Add synonyms for key terms if helpful
|
|
13
|
+
6. Consider what memories would be most relevant
|
|
14
14
|
7. If the message is about recalling something specific, include those details`;
|
|
15
15
|
export async function rewriteQuery(query, context) {
|
|
16
16
|
if (!config.queryRewritingEnabled) {
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Retrieval Feedback System
|
|
3
|
+
*
|
|
4
|
+
* Tracks whether retrieved memories were useful in responses.
|
|
5
|
+
* Strengthens useful paths, prunes stale nodes, tunes edge weights.
|
|
6
|
+
*/
|
|
7
|
+
export interface RetrievalFeedback {
|
|
8
|
+
memoryId: string;
|
|
9
|
+
query: string;
|
|
10
|
+
wasUseful: boolean;
|
|
11
|
+
cited: boolean;
|
|
12
|
+
responseId?: string;
|
|
13
|
+
timestamp: Date;
|
|
14
|
+
}
|
|
15
|
+
export interface FeedbackStats {
|
|
16
|
+
totalRetrievals: number;
|
|
17
|
+
usefulRetrievals: number;
|
|
18
|
+
citedRetrievals: number;
|
|
19
|
+
usefulnessRate: number;
|
|
20
|
+
citationRate: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Record that a memory was retrieved for a query.
|
|
24
|
+
* Call this when a memory appears in search results.
|
|
25
|
+
*/
|
|
26
|
+
export declare function recordRetrieval(memoryId: string, query: string, options?: {
|
|
27
|
+
sessionId?: string;
|
|
28
|
+
}): void;
|
|
29
|
+
/**
|
|
30
|
+
* Record that a retrieved memory was actually useful.
|
|
31
|
+
* Call this when a memory is cited or referenced in a response.
|
|
32
|
+
*/
|
|
33
|
+
export declare function recordUsefulRetrieval(memoryId: string, query: string, options?: {
|
|
34
|
+
cited?: boolean;
|
|
35
|
+
responseId?: string;
|
|
36
|
+
sessionId?: string;
|
|
37
|
+
}): void;
|
|
38
|
+
/**
|
|
39
|
+
* Record that a memory was cited in a response.
|
|
40
|
+
* This is stronger feedback than just "useful" - it means the memory
|
|
41
|
+
* was explicitly referenced.
|
|
42
|
+
*/
|
|
43
|
+
export declare function recordCitation(memoryId: string, responseId: string, options?: {
|
|
44
|
+
sessionId?: string;
|
|
45
|
+
}): void;
|
|
46
|
+
/**
|
|
47
|
+
* Get feedback statistics for a specific memory.
|
|
48
|
+
*/
|
|
49
|
+
export declare function getRetrievalStats(memoryId: string): FeedbackStats;
|
|
50
|
+
/**
|
|
51
|
+
* Get overall feedback statistics.
|
|
52
|
+
*/
|
|
53
|
+
export declare function getOverallFeedbackStats(): FeedbackStats;
|
|
54
|
+
/**
|
|
55
|
+
* Flush feedback to the database, updating association weights.
|
|
56
|
+
*/
|
|
57
|
+
export declare function flushFeedback(): Promise<{
|
|
58
|
+
strengthened: number;
|
|
59
|
+
weakened: number;
|
|
60
|
+
total: number;
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* Start the periodic feedback flush timer.
|
|
64
|
+
*/
|
|
65
|
+
export declare function startFeedbackFlushTimer(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Stop the periodic feedback flush timer.
|
|
68
|
+
*/
|
|
69
|
+
export declare function stopFeedbackFlushTimer(): void;
|
|
70
|
+
//# sourceMappingURL=retrieval-feedback.d.ts.map
|