squish-memory 1.1.5 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +32 -16
- package/CHANGELOG.md +147 -0
- package/README.md +120 -78
- package/{scripts → bin}/dependency-manager.mjs +217 -217
- package/{scripts → bin}/detect-clients.mjs +78 -78
- package/bin/install-interactive.mjs +321 -0
- package/bin/squish-mcp.mjs +44 -0
- package/bin/squish.mjs +33 -0
- package/config/mcp-migration-map.json +1 -6
- package/config/mcp-mode-semantics.json +19 -23
- package/config/mcp-remote-auth.json +3 -26
- package/config/mcp-universal.schema.json +5 -35
- package/config/settings.json +107 -52
- package/config.js +5 -0
- package/config.ts +218 -0
- package/core/adapters/config/claude-code.ts +133 -0
- package/core/adapters/config/cursor.ts +90 -0
- package/core/adapters/config/opencode.ts +89 -0
- package/core/adapters/config/windsurf.ts +90 -0
- package/core/adapters/index.ts +102 -0
- package/core/adapters/timeline.ts +116 -0
- package/core/adapters/types.ts +166 -0
- package/core/agent-preferences.ts +140 -0
- package/core/algorithms/analytics/token-estimator.ts +216 -0
- package/core/algorithms/detection/hash-filters.ts +260 -0
- package/core/algorithms/detection/semantic-ranker.ts +194 -0
- package/core/algorithms/detection/two-stage-detector.ts +421 -0
- package/core/algorithms/handlers/approve-merge.ts +215 -0
- package/core/algorithms/handlers/detect-duplicates.ts +192 -0
- package/core/algorithms/handlers/get-stats.ts +132 -0
- package/core/algorithms/handlers/list-proposals.ts +130 -0
- package/core/algorithms/handlers/preview-merge.ts +139 -0
- package/core/algorithms/handlers/reject-merge.ts +93 -0
- package/core/algorithms/handlers/reverse-merge.ts +155 -0
- package/{dist/core/algorithms/index.js → core/algorithms/index.ts} +39 -26
- package/core/algorithms/operations/cache-maintenance.ts +182 -0
- package/core/algorithms/safety/safety-checks.ts +256 -0
- package/core/algorithms/strategies/merge-strategies.ts +381 -0
- package/core/algorithms/types.ts +140 -0
- package/core/algorithms/utils/response-builder.ts +61 -0
- package/core/associations.ts +363 -0
- package/core/beliefs/decay.ts +289 -0
- package/core/beliefs/extractor.ts +131 -0
- package/core/beliefs/store.ts +557 -0
- package/core/beliefs/types.ts +38 -0
- package/core/commands/mcp-server.ts +5 -0
- package/core/compression.ts +177 -0
- package/core/config.js +2 -0
- package/core/consolidation.ts +330 -0
- package/core/context/agent-context.ts +388 -0
- package/core/context/context-paging.ts +449 -0
- package/core/context/context-window.ts +234 -0
- package/core/context/context.ts +35 -0
- package/core/embeddings/embeddings.ts +616 -0
- package/core/embeddings/google-multimodal.ts +200 -0
- package/{dist/core/local-embeddings.js → core/embeddings/local-embeddings.ts} +12 -11
- package/core/embeddings/qmd-client.ts +495 -0
- package/core/embeddings/transformers-local.ts +261 -0
- package/core/embeddings.js +4 -0
- package/core/error-handling.ts +206 -0
- package/core/external +219 -0
- package/core/graph/entity-deduplicator.ts +232 -0
- package/core/graph/graph-builder.ts +257 -0
- package/core/graph/graph-traversal.ts +490 -0
- package/core/graph/index.ts +24 -0
- package/core/graph/llm-entity-extractor.ts +402 -0
- package/core/graph/multi-hop-retrieval.ts +317 -0
- package/core/graph/relationship-extractor.ts +465 -0
- package/core/hooks/agent-hooks.ts +653 -0
- package/core/hooks/auto-tagger.ts +149 -0
- package/core/hooks/capture-filter.ts +169 -0
- package/core/hot-cache.ts +388 -0
- package/core/index.ts +10 -0
- package/core/ingestion/agent-memory.ts +167 -0
- package/core/ingestion/core-memory.ts +326 -0
- package/core/ingestion/learnings.ts +260 -0
- package/core/ingestion/signal-engine.ts +266 -0
- package/core/integrations/obsidian-vault.ts +197 -0
- package/core/layers/generator.ts +115 -0
- package/{dist/core/lib/db-client.d.ts → core/lib/db-client.ts} +168 -114
- package/core/lib/parse-embedding.ts +59 -0
- package/{dist/core/lib/schemas.js → core/lib/schemas.ts} +102 -87
- package/core/lib/types.ts +49 -0
- package/core/lib/utils.ts +151 -0
- package/core/lib/validation.ts +180 -0
- package/core/lifecycle.ts +353 -0
- package/core/logger.ts +59 -0
- package/core/memory/bridge-discovery.ts +395 -0
- package/core/memory/categorizer.ts +390 -0
- package/core/memory/conflict-detector.ts +62 -0
- package/core/memory/consolidation.ts +372 -0
- package/core/memory/context-collector.ts +75 -0
- package/core/memory/contradiction-resolver.ts +494 -0
- package/core/memory/edit-workflow.ts +174 -0
- package/core/memory/entity-extractor.ts +426 -0
- package/core/memory/entity-resolver.ts +89 -0
- package/core/memory/explain.ts +112 -0
- package/core/memory/fact-deriver.ts +300 -0
- package/core/memory/fact-extractor.ts +120 -0
- package/core/memory/feedback-tracker.ts +200 -0
- package/core/memory/hooks.ts +230 -0
- package/core/memory/hybrid-retrieval.ts +65 -0
- package/core/memory/hybrid-scorer.ts +325 -0
- package/core/memory/hybrid-search.ts +748 -0
- package/core/memory/importance.ts +319 -0
- package/{dist/core/memory/index.js → core/memory/index.ts} +11 -10
- package/core/memory/loader.ts +178 -0
- package/core/memory/markdown/markdown-storage.ts +318 -0
- package/core/memory/memories.ts +565 -0
- package/core/memory/memory-lifecycle.ts +51 -0
- package/core/memory/memory-manager.ts +53 -0
- package/core/memory/migrate.ts +173 -0
- package/core/memory/normalization.ts +30 -0
- package/core/memory/path-strengthener.ts +211 -0
- package/core/memory/progressive-disclosure.ts +392 -0
- package/core/memory/query-processor.ts +130 -0
- package/core/memory/query-rewriter.ts +153 -0
- package/core/memory/response-analyzer.ts +81 -0
- package/core/memory/retrieval-feedback.ts +276 -0
- package/core/memory/serialization.ts +83 -0
- package/core/memory/stale-cleaner.ts +147 -0
- package/core/memory/stats.ts +181 -0
- package/core/memory/telemetry.ts +392 -0
- package/core/memory/temporal-facts.ts +356 -0
- package/core/memory/temporal-parser.ts +477 -0
- package/core/memory/trigger-detector.ts +104 -0
- package/core/memory/write-gate.ts +288 -0
- package/{dist/core/places/index.js → core/places/index.ts} +12 -12
- package/core/places/memory-places.ts +339 -0
- package/core/places/places.ts +406 -0
- package/core/places/rules.ts +308 -0
- package/core/places/walking.ts +192 -0
- package/core/projects +89 -0
- package/core/projects.ts +131 -0
- package/core/redis.ts +82 -0
- package/core/responses.ts +187 -0
- package/core/runtime/trust-report.ts +195 -0
- package/core/runtime/trust-state.ts +360 -0
- package/core/scheduler/cron-scheduler.ts +590 -0
- package/core/scheduler/heartbeat.ts +91 -0
- package/{dist/core/scheduler/index.js → core/scheduler/index.ts} +8 -8
- package/core/scheduler/job-runner.ts +197 -0
- package/core/search/conversations.ts +166 -0
- package/core/search/entities.ts +46 -0
- package/core/search/folder-context.ts +154 -0
- package/core/search/graph-boost.ts +22 -0
- package/{dist/core/search/index.js → core/search/index.ts} +4 -5
- package/core/search/qmd-wrapper.ts +84 -0
- package/core/security/encrypt.ts +51 -0
- package/core/security/governance.ts +102 -0
- package/core/security/privacy.ts +108 -0
- package/core/security/secret-detector.ts +122 -0
- package/core/session/auto-load.ts +160 -0
- package/core/session/entity-tracker.ts +363 -0
- package/{dist/core/session/index.js → core/session/index.ts} +7 -7
- package/core/session/reference-resolver.ts +158 -0
- package/core/session/self-iteration-job.ts +478 -0
- package/core/session/session-hooks.ts +69 -0
- package/core/session/types.ts +36 -0
- package/core/session/working-set.ts +275 -0
- package/{dist/core/snapshots/cleanup.js → core/snapshots/cleanup.ts} +13 -12
- package/core/snapshots/comparison.ts +59 -0
- package/core/snapshots/creation.ts +139 -0
- package/core/snapshots/retrieval.ts +44 -0
- package/core/snapshots/stats.ts +63 -0
- package/core/storage/cache.ts +241 -0
- package/core/storage/database.ts +23 -0
- package/{dist/core/summarization/cleanup.js → core/summarization/cleanup.ts} +13 -12
- package/core/summarization/queries.ts +32 -0
- package/core/summarization/stats.ts +64 -0
- package/core/summarization/strategies.ts +52 -0
- package/core/summarization.ts +248 -0
- package/core/temporal-facts.ts +244 -0
- package/core/tracing/collector.ts +470 -0
- package/core/tracing/visualizer.ts +195 -0
- package/core/utils/cleanup-operations.ts +50 -0
- package/core/utils/content-extraction.ts +95 -0
- package/core/utils/filter-builder.ts +56 -0
- package/core/utils/history-traversal.ts +63 -0
- package/core/utils/memory-operations.ts +56 -0
- package/core/utils/query-operations.ts +83 -0
- package/core/utils/summarization-helpers.ts +45 -0
- package/core/utils/temporal-queries.ts +39 -0
- package/{dist/core/utils/vector-operations.js → core/utils/vector-operations.ts} +135 -129
- package/core/utils/version-management.ts +74 -0
- package/core/worker.ts +333 -0
- package/db/adapter.ts +215 -0
- package/{dist/db/bootstrap.js → db/bootstrap.ts} +388 -418
- package/db/drizzle/migrations/0000_needy_cerebro.sql +402 -0
- package/db/drizzle/migrations/meta/0000_snapshot.json +3451 -0
- package/db/drizzle/migrations/meta/_journal.json +13 -0
- package/db/drizzle/schema-sqlite.ts +1032 -0
- package/db/drizzle/schema.ts +1128 -0
- package/db/drizzle.config.ts +12 -0
- package/db/index.ts +83 -0
- package/db/init.sql +5 -0
- package/db/migrations/associations.ts +35 -0
- package/db/migrations/beliefs.ts +89 -0
- package/db/migrations/core-memory.ts +35 -0
- package/db/migrations/fts.ts +59 -0
- package/db/migrations/index.ts +54 -0
- package/db/migrations/indexes.ts +36 -0
- package/db/migrations/learnings.ts +34 -0
- package/db/migrations/maintenance.ts +68 -0
- package/db/migrations/memories.ts +22 -0
- package/db/migrations/memory-places.ts +35 -0
- package/db/migrations/places.ts +49 -0
- package/db/migrations/projects.ts +21 -0
- package/db/migrations/tier-conversion.ts +24 -0
- package/db/neon.ts +22 -0
- package/db/schema/beliefs.ts +50 -0
- package/db/schema/generator.ts +159 -0
- package/db/schema/index.ts +58 -0
- package/db/schema/learnings.ts +32 -0
- package/db/schema/memories.ts +83 -0
- package/db/schema/projects.ts +33 -0
- package/db/schema.ts +13 -0
- package/db/supabase.ts +27 -0
- package/mcp.json.example +8 -11
- package/package.json +140 -159
- package/packages/cli/package.json +22 -0
- package/packages/cli/src/commands/clean.ts +68 -0
- package/packages/cli/src/commands/context.ts +79 -0
- package/packages/cli/src/commands/doctor.ts +357 -0
- package/packages/cli/src/commands/forget.ts +72 -0
- package/packages/cli/src/commands/health.ts +36 -0
- package/packages/cli/src/commands/inspect.ts +41 -0
- package/packages/cli/src/commands/link.ts +50 -0
- package/packages/cli/src/commands/migrate.ts +93 -0
- package/packages/cli/src/commands/recall.ts +99 -0
- package/packages/cli/src/commands/recent.ts +57 -0
- package/packages/cli/src/commands/remember.ts +139 -0
- package/packages/cli/src/commands/run.ts +58 -0
- package/packages/cli/src/commands/stale.ts +43 -0
- package/packages/cli/src/commands/stats.ts +42 -0
- package/packages/cli/src/index.ts +57 -0
- package/packages/cli/tsconfig.json +24 -0
- package/packages/mcp/package.json +26 -0
- package/packages/mcp/src/index.ts +940 -0
- package/packages/mcp/tsconfig.json +20 -0
- package/skills/squish-memory/SKILL.md +38 -35
- package/skills/squish-memory/{scripts/install.sh → install.sh} +1 -1
- package/skills/squish-memory/references/claude-desktop.json +12 -0
- package/skills/squish-memory/references/openclaw.json +13 -0
- package/skills/squish-memory/references/opencode.json +14 -0
- package/config/hooks/claude-code-hooks.json +0 -39
- package/config/hooks/cursor-hooks.json +0 -30
- package/config/hooks/opencode-hooks.json +0 -30
- package/config/hooks/windsurf-hooks.json +0 -30
- package/config/mcp-cli-fallback-policy.json +0 -22
- package/config/mcp.json +0 -38
- package/config/plugin-manifest.json +0 -101
- package/config/plugin-manifest.schema.json +0 -244
- package/config/plugin.json +0 -32
- package/config/remote-memory-policy.json +0 -32
- package/core/commands/context-paging.md +0 -51
- package/core/commands/context-status.md +0 -22
- package/core/commands/context.md +0 -5
- package/core/commands/core-memory.md +0 -56
- package/core/commands/health.md +0 -5
- package/core/commands/init.md +0 -39
- package/core/commands/merge.md +0 -113
- package/core/commands/recall.md +0 -5
- package/core/commands/remember.md +0 -11
- package/core/commands/search.md +0 -10
- package/dist/config.d.ts +0 -83
- package/dist/config.js +0 -242
- package/dist/core/adapters/config/claude-code.d.ts +0 -45
- package/dist/core/adapters/config/claude-code.js +0 -113
- package/dist/core/adapters/config/cursor.d.ts +0 -26
- package/dist/core/adapters/config/cursor.js +0 -74
- package/dist/core/adapters/config/opencode.d.ts +0 -23
- package/dist/core/adapters/config/opencode.js +0 -73
- package/dist/core/adapters/config/windsurf.d.ts +0 -26
- package/dist/core/adapters/config/windsurf.js +0 -74
- package/dist/core/adapters/index.d.ts +0 -45
- package/dist/core/adapters/index.js +0 -84
- package/dist/core/adapters/scripts/install-adapter.d.ts +0 -19
- package/dist/core/adapters/scripts/install-adapter.js +0 -149
- package/dist/core/adapters/timeline.d.ts +0 -23
- package/dist/core/adapters/timeline.js +0 -88
- package/dist/core/adapters/types.d.ts +0 -157
- package/dist/core/adapters/types.js +0 -50
- package/dist/core/algorithms/analytics/token-estimator.d.ts +0 -50
- package/dist/core/algorithms/analytics/token-estimator.js +0 -154
- package/dist/core/algorithms/detection/hash-filters.d.ts +0 -47
- package/dist/core/algorithms/detection/hash-filters.js +0 -190
- package/dist/core/algorithms/detection/semantic-ranker.d.ts +0 -32
- package/dist/core/algorithms/detection/semantic-ranker.js +0 -118
- package/dist/core/algorithms/detection/two-stage-detector.d.ts +0 -52
- package/dist/core/algorithms/detection/two-stage-detector.js +0 -299
- package/dist/core/algorithms/handlers/approve-merge.d.ts +0 -22
- package/dist/core/algorithms/handlers/approve-merge.js +0 -179
- package/dist/core/algorithms/handlers/detect-duplicates.d.ts +0 -47
- package/dist/core/algorithms/handlers/detect-duplicates.js +0 -145
- package/dist/core/algorithms/handlers/get-stats.d.ts +0 -39
- package/dist/core/algorithms/handlers/get-stats.js +0 -88
- package/dist/core/algorithms/handlers/list-proposals.d.ts +0 -45
- package/dist/core/algorithms/handlers/list-proposals.js +0 -83
- package/dist/core/algorithms/handlers/preview-merge.d.ts +0 -39
- package/dist/core/algorithms/handlers/preview-merge.js +0 -93
- package/dist/core/algorithms/handlers/reject-merge.d.ts +0 -28
- package/dist/core/algorithms/handlers/reject-merge.js +0 -69
- package/dist/core/algorithms/handlers/reverse-merge.d.ts +0 -21
- package/dist/core/algorithms/handlers/reverse-merge.js +0 -121
- package/dist/core/algorithms/index.d.ts +0 -21
- package/dist/core/algorithms/operations/cache-maintenance.d.ts +0 -12
- package/dist/core/algorithms/operations/cache-maintenance.js +0 -157
- package/dist/core/algorithms/safety/safety-checks.d.ts +0 -22
- package/dist/core/algorithms/safety/safety-checks.js +0 -179
- package/dist/core/algorithms/strategies/merge-strategies.d.ts +0 -50
- package/dist/core/algorithms/strategies/merge-strategies.js +0 -288
- package/dist/core/algorithms/types.d.ts +0 -133
- package/dist/core/algorithms/types.js +0 -5
- package/dist/core/algorithms/utils/response-builder.d.ts +0 -28
- package/dist/core/algorithms/utils/response-builder.js +0 -37
- package/dist/core/associations.d.ts +0 -31
- package/dist/core/associations.js +0 -248
- package/dist/core/autosave.d.ts +0 -19
- package/dist/core/autosave.js +0 -16
- package/dist/core/commands/managed-sync.d.ts +0 -10
- package/dist/core/commands/managed-sync.js +0 -64
- package/dist/core/commands/mcp-server.d.ts +0 -3
- package/dist/core/commands/mcp-server.js +0 -739
- package/dist/core/consolidation.d.ts +0 -37
- package/dist/core/consolidation.js +0 -248
- package/dist/core/context/agent-context.d.ts +0 -106
- package/dist/core/context/agent-context.js +0 -274
- package/dist/core/context/context-paging.d.ts +0 -80
- package/dist/core/context/context-paging.js +0 -328
- package/dist/core/context/context-window.d.ts +0 -40
- package/dist/core/context/context-window.js +0 -177
- package/dist/core/context/context.d.ts +0 -7
- package/dist/core/context/context.js +0 -22
- package/dist/core/embeddings/google-multimodal.d.ts +0 -14
- package/dist/core/embeddings/google-multimodal.js +0 -142
- package/dist/core/embeddings/qmd-client.d.ts +0 -136
- package/dist/core/embeddings/qmd-client.js +0 -403
- package/dist/core/embeddings.d.ts +0 -29
- package/dist/core/embeddings.js +0 -454
- package/dist/core/error-handling.d.ts +0 -63
- package/dist/core/error-handling.js +0 -173
- package/dist/core/external-folder/index.d.ts +0 -102
- package/dist/core/external-folder/index.js +0 -294
- package/dist/core/hooks/agent-hooks.d.ts +0 -74
- package/dist/core/hooks/agent-hooks.js +0 -244
- package/dist/core/hooks/auto-tagger.d.ts +0 -19
- package/dist/core/hooks/auto-tagger.js +0 -155
- package/dist/core/hooks/capture-filter.d.ts +0 -41
- package/dist/core/hooks/capture-filter.js +0 -128
- package/dist/core/index.d.ts +0 -10
- package/dist/core/index.js +0 -14
- package/dist/core/ingestion/agent-memory.d.ts +0 -22
- package/dist/core/ingestion/agent-memory.js +0 -109
- package/dist/core/ingestion/core-memory.d.ts +0 -78
- package/dist/core/ingestion/core-memory.js +0 -226
- package/dist/core/ingestion/learnings.d.ts +0 -57
- package/dist/core/ingestion/learnings.js +0 -202
- package/dist/core/layers/generator.d.ts +0 -25
- package/dist/core/layers/generator.js +0 -76
- package/dist/core/lib/db-client.js +0 -130
- package/dist/core/lib/schemas.d.ts +0 -129
- package/dist/core/lib/utils.d.ts +0 -14
- package/dist/core/lib/utils.js +0 -90
- package/dist/core/lib/validation.d.ts +0 -38
- package/dist/core/lib/validation.js +0 -151
- package/dist/core/lifecycle.d.ts +0 -26
- package/dist/core/lifecycle.js +0 -302
- package/dist/core/local-embeddings.d.ts +0 -11
- package/dist/core/logger.d.ts +0 -16
- package/dist/core/logger.js +0 -40
- package/dist/core/mcp/client.d.ts +0 -17
- package/dist/core/mcp/client.js +0 -101
- package/dist/core/mcp/index.d.ts +0 -6
- package/dist/core/mcp/index.js +0 -6
- package/dist/core/mcp/server.d.ts +0 -18
- package/dist/core/mcp/server.js +0 -157
- package/dist/core/mcp/standalone-server.d.ts +0 -13
- package/dist/core/mcp/standalone-server.js +0 -46
- package/dist/core/mcp/tools.d.ts +0 -9
- package/dist/core/mcp/tools.js +0 -365
- package/dist/core/mcp/types.d.ts +0 -315
- package/dist/core/mcp/types.js +0 -48
- package/dist/core/memory/bridge-discovery.d.ts +0 -50
- package/dist/core/memory/bridge-discovery.js +0 -291
- package/dist/core/memory/categorizer.d.ts +0 -27
- package/dist/core/memory/categorizer.js +0 -305
- package/dist/core/memory/conflict-detector.d.ts +0 -7
- package/dist/core/memory/conflict-detector.js +0 -43
- package/dist/core/memory/consolidation.d.ts +0 -42
- package/dist/core/memory/consolidation.js +0 -303
- package/dist/core/memory/context-collector.d.ts +0 -10
- package/dist/core/memory/context-collector.js +0 -56
- package/dist/core/memory/contradiction-resolver.d.ts +0 -40
- package/dist/core/memory/contradiction-resolver.js +0 -368
- package/dist/core/memory/edit-workflow.d.ts +0 -19
- package/dist/core/memory/edit-workflow.js +0 -120
- package/dist/core/memory/entity-extractor.d.ts +0 -33
- package/dist/core/memory/entity-extractor.js +0 -336
- package/dist/core/memory/entity-resolver.d.ts +0 -23
- package/dist/core/memory/entity-resolver.js +0 -64
- package/dist/core/memory/fact-extractor.d.ts +0 -24
- package/dist/core/memory/fact-extractor.js +0 -89
- package/dist/core/memory/feedback-tracker.d.ts +0 -12
- package/dist/core/memory/feedback-tracker.js +0 -155
- package/dist/core/memory/hooks.d.ts +0 -88
- package/dist/core/memory/hooks.js +0 -174
- package/dist/core/memory/hybrid-retrieval.d.ts +0 -29
- package/dist/core/memory/hybrid-retrieval.js +0 -139
- package/dist/core/memory/hybrid-scorer.d.ts +0 -40
- package/dist/core/memory/hybrid-scorer.js +0 -284
- package/dist/core/memory/hybrid-search.d.ts +0 -20
- package/dist/core/memory/hybrid-search.js +0 -359
- package/dist/core/memory/importance.d.ts +0 -63
- package/dist/core/memory/importance.js +0 -298
- package/dist/core/memory/index.d.ts +0 -8
- package/dist/core/memory/loader.d.ts +0 -31
- package/dist/core/memory/loader.js +0 -141
- package/dist/core/memory/markdown/markdown-storage.d.ts +0 -72
- package/dist/core/memory/markdown/markdown-storage.js +0 -243
- package/dist/core/memory/memories.d.ts +0 -47
- package/dist/core/memory/memories.js +0 -449
- package/dist/core/memory/memory-lifecycle.d.ts +0 -8
- package/dist/core/memory/memory-lifecycle.js +0 -55
- package/dist/core/memory/memory-manager.d.ts +0 -15
- package/dist/core/memory/memory-manager.js +0 -46
- package/dist/core/memory/migrate.d.ts +0 -21
- package/dist/core/memory/migrate.js +0 -134
- package/dist/core/memory/normalization.d.ts +0 -22
- package/dist/core/memory/normalization.js +0 -26
- package/dist/core/memory/progressive-disclosure.d.ts +0 -43
- package/dist/core/memory/progressive-disclosure.js +0 -280
- package/dist/core/memory/query-processor.d.ts +0 -21
- package/dist/core/memory/query-processor.js +0 -72
- package/dist/core/memory/query-rewriter.d.ts +0 -13
- package/dist/core/memory/query-rewriter.js +0 -118
- package/dist/core/memory/response-analyzer.d.ts +0 -9
- package/dist/core/memory/response-analyzer.js +0 -61
- package/dist/core/memory/serialization.d.ts +0 -10
- package/dist/core/memory/serialization.js +0 -84
- package/dist/core/memory/stats.d.ts +0 -22
- package/dist/core/memory/stats.js +0 -138
- package/dist/core/memory/telemetry.d.ts +0 -69
- package/dist/core/memory/telemetry.js +0 -313
- package/dist/core/memory/temporal-facts.d.ts +0 -41
- package/dist/core/memory/temporal-facts.js +0 -283
- package/dist/core/memory/temporal-parser.d.ts +0 -32
- package/dist/core/memory/temporal-parser.js +0 -385
- package/dist/core/memory/trigger-detector.d.ts +0 -14
- package/dist/core/memory/trigger-detector.js +0 -42
- package/dist/core/memory/write-gate.d.ts +0 -54
- package/dist/core/memory/write-gate.js +0 -210
- package/dist/core/namespaces/index.d.ts +0 -71
- package/dist/core/namespaces/index.js +0 -305
- package/dist/core/namespaces/uri-parser.d.ts +0 -31
- package/dist/core/namespaces/uri-parser.js +0 -74
- package/dist/core/obsidian-vault.d.ts +0 -30
- package/dist/core/obsidian-vault.js +0 -94
- package/dist/core/places/index.d.ts +0 -14
- package/dist/core/places/memory-places.d.ts +0 -68
- package/dist/core/places/memory-places.js +0 -261
- package/dist/core/places/places.d.ts +0 -88
- package/dist/core/places/places.js +0 -314
- package/dist/core/places/rules.d.ts +0 -74
- package/dist/core/places/rules.js +0 -240
- package/dist/core/places/walking.d.ts +0 -56
- package/dist/core/places/walking.js +0 -121
- package/dist/core/projects.d.ts +0 -17
- package/dist/core/projects.js +0 -108
- package/dist/core/redis.d.ts +0 -11
- package/dist/core/redis.js +0 -69
- package/dist/core/responses.d.ts +0 -96
- package/dist/core/responses.js +0 -122
- package/dist/core/scheduler/cron-scheduler.d.ts +0 -32
- package/dist/core/scheduler/cron-scheduler.js +0 -332
- package/dist/core/scheduler/heartbeat.d.ts +0 -11
- package/dist/core/scheduler/heartbeat.js +0 -73
- package/dist/core/scheduler/index.d.ts +0 -8
- package/dist/core/scheduler/job-runner.d.ts +0 -11
- package/dist/core/scheduler/job-runner.js +0 -164
- package/dist/core/search/conversations.d.ts +0 -25
- package/dist/core/search/conversations.js +0 -110
- package/dist/core/search/entities.d.ts +0 -12
- package/dist/core/search/entities.js +0 -31
- package/dist/core/search/folder-context.d.ts +0 -25
- package/dist/core/search/folder-context.js +0 -119
- package/dist/core/search/graph-boost.d.ts +0 -7
- package/dist/core/search/graph-boost.js +0 -23
- package/dist/core/search/index.d.ts +0 -4
- package/dist/core/search/qmd-search.d.ts +0 -61
- package/dist/core/search/qmd-search.js +0 -178
- package/dist/core/security/encrypt.d.ts +0 -6
- package/dist/core/security/encrypt.js +0 -47
- package/dist/core/security/governance.d.ts +0 -26
- package/dist/core/security/governance.js +0 -79
- package/dist/core/security/privacy.d.ts +0 -23
- package/dist/core/security/privacy.js +0 -82
- package/dist/core/security/secret-detector.d.ts +0 -32
- package/dist/core/security/secret-detector.js +0 -88
- package/dist/core/session/auto-load.d.ts +0 -6
- package/dist/core/session/auto-load.js +0 -119
- package/dist/core/session/index.d.ts +0 -7
- package/dist/core/session/self-iteration-job.d.ts +0 -20
- package/dist/core/session/self-iteration-job.js +0 -282
- package/dist/core/session/session-hooks.d.ts +0 -18
- package/dist/core/session/session-hooks.js +0 -58
- package/dist/core/session/types.d.ts +0 -26
- package/dist/core/session/types.js +0 -10
- package/dist/core/session-hooks/self-iteration-job.d.ts +0 -20
- package/dist/core/session-hooks/self-iteration-job.js +0 -282
- package/dist/core/session-hooks/session-hooks.d.ts +0 -18
- package/dist/core/session-hooks/session-hooks.js +0 -58
- package/dist/core/snapshots/cleanup.d.ts +0 -9
- package/dist/core/snapshots/comparison.d.ts +0 -19
- package/dist/core/snapshots/comparison.js +0 -43
- package/dist/core/snapshots/creation.d.ts +0 -19
- package/dist/core/snapshots/creation.js +0 -126
- package/dist/core/snapshots/retrieval.d.ts +0 -7
- package/dist/core/snapshots/retrieval.js +0 -41
- package/dist/core/snapshots/stats.d.ts +0 -11
- package/dist/core/snapshots/stats.js +0 -52
- package/dist/core/snapshots.d.ts +0 -29
- package/dist/core/snapshots.js +0 -220
- package/dist/core/storage/cache.d.ts +0 -13
- package/dist/core/storage/cache.js +0 -202
- package/dist/core/storage/database.d.ts +0 -12
- package/dist/core/storage/database.js +0 -12
- package/dist/core/summarization/cleanup.d.ts +0 -9
- package/dist/core/summarization/queries.d.ts +0 -9
- package/dist/core/summarization/queries.js +0 -28
- package/dist/core/summarization/stats.d.ts +0 -14
- package/dist/core/summarization/stats.js +0 -52
- package/dist/core/summarization/strategies.d.ts +0 -24
- package/dist/core/summarization/strategies.js +0 -28
- package/dist/core/summarization.d.ts +0 -37
- package/dist/core/summarization.js +0 -188
- package/dist/core/sync/qmd-sync.d.ts +0 -94
- package/dist/core/sync/qmd-sync.js +0 -201
- package/dist/core/temporal-facts.d.ts +0 -54
- package/dist/core/temporal-facts.js +0 -193
- package/dist/core/toon.d.ts +0 -43
- package/dist/core/toon.js +0 -160
- package/dist/core/tracing/collector.d.ts +0 -111
- package/dist/core/tracing/collector.js +0 -350
- package/dist/core/tracing/visualizer.d.ts +0 -32
- package/dist/core/tracing/visualizer.js +0 -165
- package/dist/core/utils/cleanup-operations.d.ts +0 -13
- package/dist/core/utils/cleanup-operations.js +0 -44
- package/dist/core/utils/content-extraction.d.ts +0 -19
- package/dist/core/utils/content-extraction.js +0 -75
- package/dist/core/utils/filter-builder.d.ts +0 -13
- package/dist/core/utils/filter-builder.js +0 -44
- package/dist/core/utils/history-traversal.d.ts +0 -13
- package/dist/core/utils/history-traversal.js +0 -50
- package/dist/core/utils/memory-operations.d.ts +0 -17
- package/dist/core/utils/memory-operations.js +0 -43
- package/dist/core/utils/query-operations.d.ts +0 -18
- package/dist/core/utils/query-operations.js +0 -65
- package/dist/core/utils/summarization-helpers.d.ts +0 -21
- package/dist/core/utils/summarization-helpers.js +0 -38
- package/dist/core/utils/temporal-queries.d.ts +0 -13
- package/dist/core/utils/temporal-queries.js +0 -27
- package/dist/core/utils/vector-operations.d.ts +0 -71
- package/dist/core/utils/version-management.d.ts +0 -9
- package/dist/core/utils/version-management.js +0 -61
- package/dist/core/worker.d.ts +0 -82
- package/dist/core/worker.js +0 -272
- package/dist/db/adapter.d.ts +0 -7
- package/dist/db/adapter.js +0 -175
- package/dist/db/bootstrap.d.ts +0 -9
- package/dist/db/drizzle/schema-sqlite.d.ts +0 -4837
- package/dist/db/drizzle/schema-sqlite.js +0 -684
- package/dist/db/drizzle/schema.d.ts +0 -4082
- package/dist/db/drizzle/schema.js +0 -770
- package/dist/db/drizzle.config.d.ts +0 -3
- package/dist/db/drizzle.config.js +0 -12
- package/dist/db/index.d.ts +0 -7
- package/dist/db/index.js +0 -89
- package/dist/db/neon.d.ts +0 -8
- package/dist/db/neon.js +0 -20
- package/dist/db/schema/index.d.ts +0 -40
- package/dist/db/schema/index.js +0 -105
- package/dist/db/schema/tables/context-sessions.d.ts +0 -9
- package/dist/db/schema/tables/context-sessions.js +0 -37
- package/dist/db/schema/tables/conversations.d.ts +0 -9
- package/dist/db/schema/tables/conversations.js +0 -47
- package/dist/db/schema/tables/core-memory.d.ts +0 -9
- package/dist/db/schema/tables/core-memory.js +0 -41
- package/dist/db/schema/tables/entities.d.ts +0 -9
- package/dist/db/schema/tables/entities.js +0 -39
- package/dist/db/schema/tables/entity-relations.d.ts +0 -9
- package/dist/db/schema/tables/entity-relations.js +0 -31
- package/dist/db/schema/tables/learnings.d.ts +0 -9
- package/dist/db/schema/tables/learnings.js +0 -66
- package/dist/db/schema/tables/memories.d.ts +0 -9
- package/dist/db/schema/tables/memories.js +0 -161
- package/dist/db/schema/tables/memory-associations.d.ts +0 -9
- package/dist/db/schema/tables/memory-associations.js +0 -39
- package/dist/db/schema/tables/memory-hash-cache.d.ts +0 -9
- package/dist/db/schema/tables/memory-hash-cache.js +0 -29
- package/dist/db/schema/tables/memory-merge-history.d.ts +0 -9
- package/dist/db/schema/tables/memory-merge-history.js +0 -33
- package/dist/db/schema/tables/memory-merge-proposals.d.ts +0 -9
- package/dist/db/schema/tables/memory-merge-proposals.js +0 -39
- package/dist/db/schema/tables/messages.d.ts +0 -9
- package/dist/db/schema/tables/messages.js +0 -41
- package/dist/db/schema/tables/namespaces.d.ts +0 -9
- package/dist/db/schema/tables/namespaces.js +0 -37
- package/dist/db/schema/tables/projects.d.ts +0 -9
- package/dist/db/schema/tables/projects.js +0 -31
- package/dist/db/schema/tables/users.d.ts +0 -9
- package/dist/db/schema/tables/users.js +0 -27
- package/dist/db/schema.d.ts +0 -3
- package/dist/db/schema.js +0 -11
- package/dist/db/supabase.d.ts +0 -9
- package/dist/db/supabase.js +0 -24
- package/dist/index.d.ts +0 -7
- package/dist/index.js +0 -1677
- package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
- package/dist/webui/server.d.ts +0 -5
- package/dist/webui/server.js +0 -642
- package/generated/mcp/manifest.json +0 -23
- package/generated/mcp/mcp-servers.json +0 -25
- package/generated/mcp/mcporter.json +0 -34
- package/generated/mcp/openclaw-memory-qmd.json +0 -17
- package/generated/mcp/runtime.json +0 -12
- package/scripts/README.md +0 -60
- package/scripts/build-release.sh +0 -36
- package/scripts/check-secrets.js +0 -132
- package/scripts/copy-runtime-assets.mjs +0 -26
- package/scripts/generate-mcp.mjs +0 -264
- package/scripts/github-release.sh +0 -77
- package/scripts/init-dirs.mjs +0 -13
- package/scripts/install-claude-code.sh +0 -85
- package/scripts/install-cursor.sh +0 -56
- package/scripts/install-hooks.sh +0 -73
- package/scripts/install-interactive.mjs +0 -357
- package/scripts/install-opencode.sh +0 -75
- package/scripts/install-plugin.mjs +0 -415
- package/scripts/install-windsurf.sh +0 -67
- package/scripts/remote-preflight.mjs +0 -62
- package/scripts/squish-fallback.mjs +0 -132
- package/scripts/test-interactive.mjs +0 -131
- package/scripts/verify-mcp.mjs +0 -214
- package/skills/squish-memory/scripts/install.mjs +0 -335
- package/skills/squish-memory/write_skill.js +0 -2
|
@@ -1,129 +1,135 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Vector Operations Utilities
|
|
3
|
-
*
|
|
4
|
-
* Provides mathematical operations for vector computations, primarily focused on
|
|
5
|
-
* cosine similarity calculations for embedding comparisons.
|
|
6
|
-
*
|
|
7
|
-
* All functions handle edge cases gracefully and are optimized for performance.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* - Returns 0 if
|
|
22
|
-
* - Returns 0 if
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* @param
|
|
26
|
-
* @
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
* const
|
|
32
|
-
* const
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
* -
|
|
38
|
-
* -
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
*
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
*
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Vector Operations Utilities
|
|
3
|
+
*
|
|
4
|
+
* Provides mathematical operations for vector computations, primarily focused on
|
|
5
|
+
* cosine similarity calculations for embedding comparisons.
|
|
6
|
+
*
|
|
7
|
+
* All functions handle edge cases gracefully and are optimized for performance.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Calculates the cosine similarity between two vectors.
|
|
12
|
+
*
|
|
13
|
+
* Cosine similarity measures the cosine of the angle between two vectors,
|
|
14
|
+
* providing a normalized measure of similarity that ranges from -1 (opposite)
|
|
15
|
+
* to 1 (identical), with 0 indicating orthogonality (no similarity).
|
|
16
|
+
*
|
|
17
|
+
* The implementation uses the standard formula:
|
|
18
|
+
* cos(θ) = (A · B) / (||A|| * ||B||)
|
|
19
|
+
*
|
|
20
|
+
* Edge case handling:
|
|
21
|
+
* - Returns 0 if either vector is null/undefined
|
|
22
|
+
* - Returns 0 if vectors have different lengths
|
|
23
|
+
* - Returns 0 if either vector has zero magnitude (norm = 0)
|
|
24
|
+
*
|
|
25
|
+
* @param a - First vector as array of numbers
|
|
26
|
+
* @param b - Second vector as array of numbers
|
|
27
|
+
* @returns Cosine similarity value in range [-1, 1], or 0 for invalid inputs
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const vec1 = [1, 2, 3];
|
|
32
|
+
* const vec2 = [4, 5, 6];
|
|
33
|
+
* const similarity = cosineSimilarity(vec1, vec2); // ~0.974
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* @performance
|
|
37
|
+
* - Time complexity: O(n) where n is vector length
|
|
38
|
+
* - Space complexity: O(1) - uses only accumulator variables
|
|
39
|
+
* - Optimized with single-pass computation of dot product and norms
|
|
40
|
+
*/
|
|
41
|
+
export function cosineSimilarity(a: number[] | null | undefined, b: number[] | null | undefined): number {
|
|
42
|
+
// Guard against null/undefined inputs
|
|
43
|
+
if (!a || !b) return 0;
|
|
44
|
+
|
|
45
|
+
// Vectors must have same dimensions
|
|
46
|
+
if (a.length !== b.length) return 0;
|
|
47
|
+
|
|
48
|
+
let dotProduct = 0;
|
|
49
|
+
let normA = 0;
|
|
50
|
+
let normB = 0;
|
|
51
|
+
|
|
52
|
+
// Single pass to compute dot product and norms
|
|
53
|
+
for (let i = 0; i < a.length; i++) {
|
|
54
|
+
dotProduct += a[i] * b[i];
|
|
55
|
+
normA += a[i] * a[i];
|
|
56
|
+
normB += b[i] * b[i];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Handle zero vectors (avoid division by zero)
|
|
60
|
+
if (normA === 0 || normB === 0) return 0;
|
|
61
|
+
|
|
62
|
+
return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Calculates the Euclidean distance between two vectors.
|
|
67
|
+
*
|
|
68
|
+
* @param a - First vector
|
|
69
|
+
* @param b - Second vector
|
|
70
|
+
* @returns Euclidean distance, or Infinity if vectors have different lengths
|
|
71
|
+
*/
|
|
72
|
+
export function euclideanDistance(a: number[] | null | undefined, b: number[] | null | undefined): number {
|
|
73
|
+
if (!a || !b) return Infinity;
|
|
74
|
+
if (a.length !== b.length) return Infinity;
|
|
75
|
+
|
|
76
|
+
let sum = 0;
|
|
77
|
+
for (let i = 0; i < a.length; i++) {
|
|
78
|
+
const diff = a[i] - b[i];
|
|
79
|
+
sum += diff * diff;
|
|
80
|
+
}
|
|
81
|
+
return Math.sqrt(sum);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Normalizes a vector to unit length (magnitude = 1).
|
|
86
|
+
*
|
|
87
|
+
* @param vec - Input vector
|
|
88
|
+
* @returns Normalized vector, or null if input is null or zero vector
|
|
89
|
+
*/
|
|
90
|
+
export function normalizeVector(vec: number[] | null | undefined): number[] | null {
|
|
91
|
+
if (!vec) return null;
|
|
92
|
+
|
|
93
|
+
let norm = 0;
|
|
94
|
+
for (let i = 0; i < vec.length; i++) {
|
|
95
|
+
norm += vec[i] * vec[i];
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (norm === 0) return null;
|
|
99
|
+
|
|
100
|
+
const magnitude = Math.sqrt(norm);
|
|
101
|
+
return vec.map(val => val / magnitude);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Computes the dot product of two vectors.
|
|
106
|
+
*
|
|
107
|
+
* @param a - First vector
|
|
108
|
+
* @param b - Second vector
|
|
109
|
+
* @returns Dot product, or 0 if vectors are invalid or different lengths
|
|
110
|
+
*/
|
|
111
|
+
export function dotProduct(a: number[] | null | undefined, b: number[] | null | undefined): number {
|
|
112
|
+
if (!a || !b || a.length !== b.length) return 0;
|
|
113
|
+
|
|
114
|
+
let result = 0;
|
|
115
|
+
for (let i = 0; i < a.length; i++) {
|
|
116
|
+
result += a[i] * b[i];
|
|
117
|
+
}
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Calculates the magnitude (L2 norm) of a vector.
|
|
123
|
+
*
|
|
124
|
+
* @param vec - Input vector
|
|
125
|
+
* @returns Magnitude of the vector, or 0 if input is null
|
|
126
|
+
*/
|
|
127
|
+
export function magnitude(vec: number[] | null | undefined): number {
|
|
128
|
+
if (!vec) return 0;
|
|
129
|
+
|
|
130
|
+
let sum = 0;
|
|
131
|
+
for (let i = 0; i < vec.length; i++) {
|
|
132
|
+
sum += vec[i] * vec[i];
|
|
133
|
+
}
|
|
134
|
+
return Math.sqrt(sum);
|
|
135
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Version Management Utilities
|
|
3
|
+
* Common patterns for versioning and updating records
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { eq } from 'drizzle-orm';
|
|
7
|
+
import { randomUUID } from 'crypto';
|
|
8
|
+
import { getDb } from '../../db/index.js';
|
|
9
|
+
import { getSchema } from '../../db/schema.js';
|
|
10
|
+
import { logger } from '../logger.js';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Create a new version of a fact by expiring the old one
|
|
14
|
+
*/
|
|
15
|
+
export async function createNewFactVersion(
|
|
16
|
+
oldFactId: string,
|
|
17
|
+
newContent: string,
|
|
18
|
+
additionalFields: Record<string, any> = {},
|
|
19
|
+
reason?: string
|
|
20
|
+
): Promise<string> {
|
|
21
|
+
try {
|
|
22
|
+
const db = await getDb();
|
|
23
|
+
const schema = await getSchema();
|
|
24
|
+
|
|
25
|
+
// Get the old fact
|
|
26
|
+
const oldFacts = await (db as any)
|
|
27
|
+
.select()
|
|
28
|
+
.from(schema.memories)
|
|
29
|
+
.where(eq(schema.memories.id, oldFactId))
|
|
30
|
+
.limit(1);
|
|
31
|
+
|
|
32
|
+
if (oldFacts.length === 0) {
|
|
33
|
+
throw new Error('Previous fact not found');
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const oldFact = oldFacts[0];
|
|
37
|
+
const now = new Date();
|
|
38
|
+
const newFactId = randomUUID();
|
|
39
|
+
|
|
40
|
+
// Expire the old fact
|
|
41
|
+
await (db as any)
|
|
42
|
+
.update(schema.memories)
|
|
43
|
+
.set({ validTo: now, supersededBy: newFactId })
|
|
44
|
+
.where(eq(schema.memories.id, oldFactId));
|
|
45
|
+
|
|
46
|
+
// Create new version
|
|
47
|
+
const newFact: any = {
|
|
48
|
+
id: newFactId,
|
|
49
|
+
type: 'fact',
|
|
50
|
+
sector: 'semantic',
|
|
51
|
+
content: newContent,
|
|
52
|
+
confidence: oldFact.confidence,
|
|
53
|
+
validFrom: now,
|
|
54
|
+
validTo: null,
|
|
55
|
+
version: (oldFact.version || 1) + 1,
|
|
56
|
+
tags: oldFact.tags,
|
|
57
|
+
projectId: oldFact.projectId,
|
|
58
|
+
createdAt: now,
|
|
59
|
+
updatedAt: now,
|
|
60
|
+
...additionalFields,
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
if (reason) {
|
|
64
|
+
newFact.metadata = { supersedes: oldFactId, reason };
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
await (db as any).insert(schema.memories).values(newFact);
|
|
68
|
+
|
|
69
|
+
return newFactId;
|
|
70
|
+
} catch (error) {
|
|
71
|
+
logger.error('Error creating new fact version', error);
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
package/core/worker.ts
ADDED
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Background Worker
|
|
3
|
+
* Handles lifecycle maintenance, summarization, and other async tasks
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { config } from '../config.js';
|
|
7
|
+
import { runLifecycleMaintenance } from './lifecycle.js';
|
|
8
|
+
import { pruneWeakAssociations, getAssociationStats } from './associations.js';
|
|
9
|
+
import { pruneOldSummaries, getSummarizationStats } from './summarization.js';
|
|
10
|
+
import { runFullConsolidationJob, getDeduplicationStats } from './consolidation.js';
|
|
11
|
+
import { logger } from './logger.js';
|
|
12
|
+
|
|
13
|
+
// Skip worker initialization in MCP mode
|
|
14
|
+
const MCP_MODE = process.env.SQUISH_MCP_NO_WORKER === 'true' || process.argv.includes('--mcp');
|
|
15
|
+
|
|
16
|
+
interface WorkerConfig {
|
|
17
|
+
lifecycleInterval: number;
|
|
18
|
+
pruningInterval: number;
|
|
19
|
+
summarizationCheckInterval: number;
|
|
20
|
+
consolidationInterval: number;
|
|
21
|
+
dedupInterval: number;
|
|
22
|
+
associationPruningThreshold: number;
|
|
23
|
+
summaryPruningAge: number;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const DEFAULT_WORKER_CONFIG: WorkerConfig = {
|
|
27
|
+
lifecycleInterval: config.lifecycleInterval || 3600000,
|
|
28
|
+
pruningInterval: 7 * 24 * 60 * 60 * 1000,
|
|
29
|
+
summarizationCheckInterval: 5 * 60 * 1000,
|
|
30
|
+
consolidationInterval: 24 * 60 * 60 * 1000, // Daily
|
|
31
|
+
dedupInterval: 12 * 60 * 60 * 1000, // Twice daily
|
|
32
|
+
associationPruningThreshold: 5,
|
|
33
|
+
summaryPruningAge: 30,
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
class SquishWorker {
|
|
37
|
+
private lifecycleTimer?: NodeJS.Timeout;
|
|
38
|
+
private pruningTimer?: NodeJS.Timeout;
|
|
39
|
+
private summarizationTimer?: NodeJS.Timeout;
|
|
40
|
+
private consolidationTimer?: NodeJS.Timeout;
|
|
41
|
+
private dedupTimer?: NodeJS.Timeout;
|
|
42
|
+
private config: WorkerConfig;
|
|
43
|
+
private isRunning: boolean = false;
|
|
44
|
+
private stats = {
|
|
45
|
+
lifecycleRuns: 0,
|
|
46
|
+
pruningRuns: 0,
|
|
47
|
+
summarizationRuns: 0,
|
|
48
|
+
consolidationRuns: 0,
|
|
49
|
+
dedupRuns: 0,
|
|
50
|
+
lastLifecycle: null as any,
|
|
51
|
+
lastAssociation: null as any,
|
|
52
|
+
lastSummarization: null as any,
|
|
53
|
+
lastConsolidation: null as any,
|
|
54
|
+
lastDedup: null as any,
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
constructor(customConfig: Partial<WorkerConfig> = {}) {
|
|
58
|
+
this.config = { ...DEFAULT_WORKER_CONFIG, ...customConfig };
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async start(): Promise<void> {
|
|
62
|
+
if (this.isRunning) {
|
|
63
|
+
logger.warn('Worker already running');
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Skip in MCP mode for faster startup
|
|
68
|
+
if (MCP_MODE) {
|
|
69
|
+
logger.info('Background worker skipped (MCP mode)');
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
this.isRunning = true;
|
|
74
|
+
logger.info('Starting background worker');
|
|
75
|
+
|
|
76
|
+
if (config.lifecycleEnabled) {
|
|
77
|
+
this.scheduleLifecycleMaintenance();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
this.schedulePruning();
|
|
81
|
+
|
|
82
|
+
if (config.summarizationEnabled) {
|
|
83
|
+
this.scheduleSummarizationCheck();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Schedule consolidation and dedup jobs
|
|
87
|
+
this.scheduleConsolidation();
|
|
88
|
+
this.scheduleDedup();
|
|
89
|
+
|
|
90
|
+
logger.info('Background worker started');
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
async stop(): Promise<void> {
|
|
94
|
+
if (!this.isRunning) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
this.isRunning = false;
|
|
99
|
+
|
|
100
|
+
if (this.lifecycleTimer) clearInterval(this.lifecycleTimer);
|
|
101
|
+
if (this.pruningTimer) clearInterval(this.pruningTimer);
|
|
102
|
+
if (this.summarizationTimer) clearInterval(this.summarizationTimer);
|
|
103
|
+
if (this.consolidationTimer) clearInterval(this.consolidationTimer);
|
|
104
|
+
if (this.dedupTimer) clearInterval(this.dedupTimer);
|
|
105
|
+
|
|
106
|
+
logger.info('Background worker stopped');
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
private scheduleLifecycleMaintenance(): void {
|
|
110
|
+
this.runLifecycleMaintenance().catch((err) => {
|
|
111
|
+
logger.error('Initial lifecycle maintenance failed:', err);
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
this.lifecycleTimer = setInterval(() => {
|
|
115
|
+
this.runLifecycleMaintenance().catch((err) => {
|
|
116
|
+
logger.error('Scheduled lifecycle maintenance failed:', err);
|
|
117
|
+
});
|
|
118
|
+
}, this.config.lifecycleInterval);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private async runLifecycleMaintenance(): Promise<void> {
|
|
122
|
+
try {
|
|
123
|
+
const stats = await runLifecycleMaintenance();
|
|
124
|
+
this.stats.lifecycleRuns++;
|
|
125
|
+
this.stats.lastLifecycle = {
|
|
126
|
+
timestamp: new Date().toISOString(),
|
|
127
|
+
...stats,
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
logger.info('Lifecycle maintenance completed', {
|
|
131
|
+
decayed: stats.decayed,
|
|
132
|
+
evicted: stats.evicted,
|
|
133
|
+
promoted: stats.promoted,
|
|
134
|
+
});
|
|
135
|
+
} catch (error) {
|
|
136
|
+
logger.error('Lifecycle maintenance error:', error);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
private schedulePruning(): void {
|
|
141
|
+
this.runPruning().catch((err) => {
|
|
142
|
+
logger.error('Initial pruning failed:', err);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
this.pruningTimer = setInterval(() => {
|
|
146
|
+
this.runPruning().catch((err) => {
|
|
147
|
+
logger.error('Scheduled pruning failed:', err);
|
|
148
|
+
});
|
|
149
|
+
}, this.config.pruningInterval);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
private async runPruning(): Promise<void> {
|
|
153
|
+
try {
|
|
154
|
+
this.stats.pruningRuns++;
|
|
155
|
+
|
|
156
|
+
const prunedAssociations = await pruneWeakAssociations(
|
|
157
|
+
this.config.associationPruningThreshold
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
const assocStats = await getAssociationStats();
|
|
161
|
+
this.stats.lastAssociation = {
|
|
162
|
+
timestamp: new Date().toISOString(),
|
|
163
|
+
pruned: prunedAssociations,
|
|
164
|
+
...assocStats,
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
const prunedSummaries = await pruneOldSummaries(this.config.summaryPruningAge);
|
|
168
|
+
|
|
169
|
+
logger.info('Pruning completed', {
|
|
170
|
+
associationsPruned: prunedAssociations,
|
|
171
|
+
summariesPruned: prunedSummaries,
|
|
172
|
+
});
|
|
173
|
+
} catch (error) {
|
|
174
|
+
logger.error('Pruning error:', error);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
private scheduleSummarizationCheck(): void {
|
|
179
|
+
this.summarizationTimer = setInterval(() => {
|
|
180
|
+
this.runSummarizationCheck().catch((err) => {
|
|
181
|
+
logger.error('Summarization check failed:', err);
|
|
182
|
+
});
|
|
183
|
+
}, this.config.summarizationCheckInterval);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
private async runSummarizationCheck(): Promise<void> {
|
|
187
|
+
try {
|
|
188
|
+
this.stats.summarizationRuns++;
|
|
189
|
+
const stats = await getSummarizationStats();
|
|
190
|
+
this.stats.lastSummarization = {
|
|
191
|
+
timestamp: new Date().toISOString(),
|
|
192
|
+
...stats,
|
|
193
|
+
};
|
|
194
|
+
} catch (error) {
|
|
195
|
+
logger.error('Summarization check error:', error);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
private scheduleConsolidation(): void {
|
|
200
|
+
// Run immediately on start
|
|
201
|
+
this.runConsolidation().catch((err) => {
|
|
202
|
+
logger.error('Initial consolidation failed:', err);
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
this.consolidationTimer = setInterval(() => {
|
|
206
|
+
this.runConsolidation().catch((err) => {
|
|
207
|
+
logger.error('Scheduled consolidation failed:', err);
|
|
208
|
+
});
|
|
209
|
+
}, this.config.consolidationInterval);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
private async runConsolidation(): Promise<void> {
|
|
213
|
+
try {
|
|
214
|
+
this.stats.consolidationRuns++;
|
|
215
|
+
const stats = await runFullConsolidationJob();
|
|
216
|
+
this.stats.lastConsolidation = {
|
|
217
|
+
timestamp: new Date().toISOString(),
|
|
218
|
+
...stats,
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
logger.info('Consolidation completed', {
|
|
222
|
+
clustered: stats.clustered,
|
|
223
|
+
merged: stats.merged,
|
|
224
|
+
deduped: stats.deduped,
|
|
225
|
+
consolidated: stats.consolidated,
|
|
226
|
+
tokensRecovered: stats.tokensRecovered,
|
|
227
|
+
});
|
|
228
|
+
} catch (error) {
|
|
229
|
+
logger.error('Consolidation error:', error);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
private scheduleDedup(): void {
|
|
234
|
+
// Run immediately on start
|
|
235
|
+
this.runDedup().catch((err) => {
|
|
236
|
+
logger.error('Initial dedup failed:', err);
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
this.dedupTimer = setInterval(() => {
|
|
240
|
+
this.runDedup().catch((err) => {
|
|
241
|
+
logger.error('Scheduled dedup failed:', err);
|
|
242
|
+
});
|
|
243
|
+
}, this.config.dedupInterval);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
private async runDedup(): Promise<void> {
|
|
247
|
+
try {
|
|
248
|
+
this.stats.dedupRuns++;
|
|
249
|
+
const dedupStats = await getDeduplicationStats();
|
|
250
|
+
this.stats.lastDedup = {
|
|
251
|
+
timestamp: new Date().toISOString(),
|
|
252
|
+
...dedupStats,
|
|
253
|
+
};
|
|
254
|
+
} catch (error) {
|
|
255
|
+
logger.error('Dedup check error:', error);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
getStats() {
|
|
260
|
+
return {
|
|
261
|
+
isRunning: this.isRunning,
|
|
262
|
+
stats: this.stats,
|
|
263
|
+
config: this.config,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
async forceLifecycleMaintenance(projectId?: string): Promise<any> {
|
|
268
|
+
return await runLifecycleMaintenance(projectId);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
async forcePruning(): Promise<any> {
|
|
272
|
+
return await this.runPruning();
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
async forceConsolidation(projectId?: string): Promise<any> {
|
|
276
|
+
return await runFullConsolidationJob(projectId);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
async forceDedup(projectId?: string): Promise<any> {
|
|
280
|
+
const { runDeduplicationJob } = await import('./consolidation.js');
|
|
281
|
+
return await runDeduplicationJob(projectId);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
let globalWorker: SquishWorker | null = null;
|
|
286
|
+
|
|
287
|
+
export function getWorker(customConfig?: Partial<WorkerConfig>): SquishWorker {
|
|
288
|
+
if (!globalWorker) {
|
|
289
|
+
globalWorker = new SquishWorker(customConfig);
|
|
290
|
+
}
|
|
291
|
+
return globalWorker;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
export async function startWorker(): Promise<void> {
|
|
295
|
+
const worker = getWorker();
|
|
296
|
+
await worker.start();
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
export async function stopWorker(): Promise<void> {
|
|
300
|
+
if (globalWorker) {
|
|
301
|
+
await globalWorker.stop();
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
export function getWorkerStats() {
|
|
306
|
+
if (!globalWorker) {
|
|
307
|
+
return null;
|
|
308
|
+
}
|
|
309
|
+
return globalWorker.getStats();
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
export async function forceLifecycleMaintenance(projectId?: string): Promise<any> {
|
|
313
|
+
const worker = getWorker();
|
|
314
|
+
return await worker.forceLifecycleMaintenance(projectId);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
export async function forcePruning(): Promise<any> {
|
|
318
|
+
const worker = getWorker();
|
|
319
|
+
return await worker.forcePruning();
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
export async function forceConsolidation(projectId?: string): Promise<any> {
|
|
323
|
+
const worker = getWorker();
|
|
324
|
+
return await worker.forceConsolidation(projectId);
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
export async function forceDedup(projectId?: string): Promise<any> {
|
|
328
|
+
const worker = getWorker();
|
|
329
|
+
return await worker.forceDedup(projectId);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
export type { WorkerConfig };
|
|
333
|
+
export { SquishWorker };
|