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,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Importance Scoring System
|
|
3
|
-
* Calculates and manages memory importance scores (0-100) with temporal decay
|
|
4
|
-
*/
|
|
5
|
-
import type { Memory } from '../../db/drizzle/schema.js';
|
|
6
|
-
import { cosineSimilarity as vectorCosineSimilarity } from '../utils/vector-operations.js';
|
|
7
|
-
export interface ImportanceScore {
|
|
8
|
-
score: number;
|
|
9
|
-
components: {
|
|
10
|
-
base: number;
|
|
11
|
-
recency: number;
|
|
12
|
-
accessFrequency: number;
|
|
13
|
-
typeWeight: number;
|
|
14
|
-
userFlags: number;
|
|
15
|
-
};
|
|
16
|
-
explanation: string;
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Calculate importance score for a memory
|
|
20
|
-
*
|
|
21
|
-
* Formula: base + recency + accessFrequency + typeWeight + userFlags
|
|
22
|
-
* All values are clamped to 0-100 range
|
|
23
|
-
*/
|
|
24
|
-
export declare function calculateImportance(memory: Partial<Memory>): ImportanceScore;
|
|
25
|
-
/**
|
|
26
|
-
* Update importance score for a memory
|
|
27
|
-
* Used when memory is accessed or modified
|
|
28
|
-
*/
|
|
29
|
-
export declare function updateImportanceScore(memoryId: string, incrementAccess?: boolean): Promise<number>;
|
|
30
|
-
/**
|
|
31
|
-
* Decay importance scores for old memories
|
|
32
|
-
* Should be run periodically (e.g., daily) to reduce scores of stale memories
|
|
33
|
-
*
|
|
34
|
-
* This function applies exponential decay to all memories that haven't been
|
|
35
|
-
* recalculated recently, keeping the system's importance scores current.
|
|
36
|
-
*
|
|
37
|
-
* Fixed: Uses batch update instead of N+1 individual queries
|
|
38
|
-
*/
|
|
39
|
-
export declare function decayImportanceScores(projectId?: string): Promise<number>;
|
|
40
|
-
/**
|
|
41
|
-
* Get low-importance memories that are candidates for consolidation
|
|
42
|
-
* These are old, rarely accessed memories with low importance scores
|
|
43
|
-
*/
|
|
44
|
-
export declare function getLowImportanceMemories(projectId: string, options?: {
|
|
45
|
-
minAge?: number;
|
|
46
|
-
maxImportance?: number;
|
|
47
|
-
limit?: number;
|
|
48
|
-
}): Promise<any[]>;
|
|
49
|
-
/**
|
|
50
|
-
* Set importance score manually (for user override)
|
|
51
|
-
*/
|
|
52
|
-
export declare function setImportanceScore(memoryId: string, score: number): Promise<void>;
|
|
53
|
-
/**
|
|
54
|
-
* Pin a memory to prevent decay and consolidation
|
|
55
|
-
*/
|
|
56
|
-
export declare function pinMemory(memoryId: string, pinned?: boolean): Promise<void>;
|
|
57
|
-
/**
|
|
58
|
-
* Calculate cosine similarity between two vectors
|
|
59
|
-
* Re-exported from core/utils/vector-operations.ts for backward compatibility.
|
|
60
|
-
* This will be removed in v1.2.0 - import directly from core/utils/vector-operations.ts
|
|
61
|
-
*/
|
|
62
|
-
export declare const cosineSimilarity: typeof vectorCosineSimilarity;
|
|
63
|
-
//# sourceMappingURL=importance.d.ts.map
|
|
@@ -1,298 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Importance Scoring System
|
|
3
|
-
* Calculates and manages memory importance scores (0-100) with temporal decay
|
|
4
|
-
*/
|
|
5
|
-
import { eq } from 'drizzle-orm';
|
|
6
|
-
import { cosineSimilarity as vectorCosineSimilarity } from '../utils/vector-operations.js';
|
|
7
|
-
import { getDbClient } from '../lib/db-client.js';
|
|
8
|
-
/**
|
|
9
|
-
* Type weights for importance scoring
|
|
10
|
-
* Higher values = more important memory types
|
|
11
|
-
*/
|
|
12
|
-
const TYPE_WEIGHTS = {
|
|
13
|
-
decision: 15,
|
|
14
|
-
fact: 10,
|
|
15
|
-
preference: 8,
|
|
16
|
-
context: 5,
|
|
17
|
-
observation: 0,
|
|
18
|
-
};
|
|
19
|
-
/**
|
|
20
|
-
* Calculate importance score for a memory
|
|
21
|
-
*
|
|
22
|
-
* Formula: base + recency + accessFrequency + typeWeight + userFlags
|
|
23
|
-
* All values are clamped to 0-100 range
|
|
24
|
-
*/
|
|
25
|
-
export function calculateImportance(memory) {
|
|
26
|
-
const components = {
|
|
27
|
-
base: 50, // Neutral starting point
|
|
28
|
-
recency: calculateRecencyComponent(memory),
|
|
29
|
-
accessFrequency: calculateAccessFrequencyComponent(memory),
|
|
30
|
-
typeWeight: calculateTypeWeightComponent(memory),
|
|
31
|
-
userFlags: calculateUserFlagsComponent(memory),
|
|
32
|
-
};
|
|
33
|
-
// Calculate total score (clamped to 0-100)
|
|
34
|
-
const score = Math.min(100, Math.max(0, components.base +
|
|
35
|
-
components.recency +
|
|
36
|
-
components.accessFrequency +
|
|
37
|
-
components.typeWeight +
|
|
38
|
-
components.userFlags));
|
|
39
|
-
return {
|
|
40
|
-
score,
|
|
41
|
-
components,
|
|
42
|
-
explanation: generateImportanceExplanation(components, memory),
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* Calculate recency component (0-30 points)
|
|
47
|
-
* Uses exponential decay based on memory age
|
|
48
|
-
*/
|
|
49
|
-
function calculateRecencyComponent(memory) {
|
|
50
|
-
if (!memory.createdAt)
|
|
51
|
-
return 0;
|
|
52
|
-
const now = Date.now();
|
|
53
|
-
const createdAt = new Date(memory.createdAt).getTime();
|
|
54
|
-
const ageDays = (now - createdAt) / (1000 * 60 * 60 * 24);
|
|
55
|
-
// Decay rate: default 30 days half-life
|
|
56
|
-
const decayRate = memory.importanceDecayRate ?? 30;
|
|
57
|
-
// Exponential decay: 30 * (0.5 ^ (age / halfLife))
|
|
58
|
-
// Maximum 30 points for very recent memories
|
|
59
|
-
const recencyScore = 30 * Math.pow(0.5, ageDays / decayRate);
|
|
60
|
-
return Math.max(0, Math.min(30, recencyScore));
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Calculate access frequency component (0-15 points)
|
|
64
|
-
* More frequently accessed memories are more important
|
|
65
|
-
*/
|
|
66
|
-
function calculateAccessFrequencyComponent(memory) {
|
|
67
|
-
const accessCount = memory.accessCount ?? 0;
|
|
68
|
-
const usageCount = memory.usageCount ?? 0;
|
|
69
|
-
// Combined access count (from both fields)
|
|
70
|
-
const totalAccess = accessCount + usageCount;
|
|
71
|
-
// Logarithmic scaling: 15 * log10(totalAccess + 1)
|
|
72
|
-
// This gives diminishing returns for high access counts
|
|
73
|
-
const accessScore = 15 * Math.log10(totalAccess + 1);
|
|
74
|
-
return Math.min(15, accessScore);
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Calculate type weight component (0-15 points)
|
|
78
|
-
* Different memory types have different inherent importance
|
|
79
|
-
*/
|
|
80
|
-
function calculateTypeWeightComponent(memory) {
|
|
81
|
-
const type = memory.type ?? 'observation';
|
|
82
|
-
return TYPE_WEIGHTS[type] ?? 0;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Calculate user flags component (0 or +20 points)
|
|
86
|
-
* Pinned or protected memories get maximum importance
|
|
87
|
-
*/
|
|
88
|
-
function calculateUserFlagsComponent(memory) {
|
|
89
|
-
// Pinned memories get maximum boost
|
|
90
|
-
if (memory.isPinned)
|
|
91
|
-
return 20;
|
|
92
|
-
// Protected memories also get significant boost
|
|
93
|
-
if (memory.isProtected)
|
|
94
|
-
return 15;
|
|
95
|
-
// Immutable memories are important but not as much
|
|
96
|
-
if (memory.isImmutable)
|
|
97
|
-
return 10;
|
|
98
|
-
return 0;
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* Generate human-readable explanation for importance score
|
|
102
|
-
*/
|
|
103
|
-
function generateImportanceExplanation(components, memory) {
|
|
104
|
-
const parts = [];
|
|
105
|
-
// Base score
|
|
106
|
-
parts.push(`base: ${components.base}`);
|
|
107
|
-
// Recency
|
|
108
|
-
if (components.recency > 20) {
|
|
109
|
-
parts.push('very recent');
|
|
110
|
-
}
|
|
111
|
-
else if (components.recency > 10) {
|
|
112
|
-
parts.push('recent');
|
|
113
|
-
}
|
|
114
|
-
else if (components.recency > 0) {
|
|
115
|
-
parts.push('somewhat recent');
|
|
116
|
-
}
|
|
117
|
-
// Access frequency
|
|
118
|
-
const totalAccess = (memory.accessCount ?? 0) + (memory.usageCount ?? 0);
|
|
119
|
-
if (totalAccess > 10) {
|
|
120
|
-
parts.push('frequently accessed');
|
|
121
|
-
}
|
|
122
|
-
else if (totalAccess > 3) {
|
|
123
|
-
parts.push('occasionally accessed');
|
|
124
|
-
}
|
|
125
|
-
// Type
|
|
126
|
-
const type = memory.type ?? 'observation';
|
|
127
|
-
if (type !== 'observation') {
|
|
128
|
-
parts.push(`${type} type`);
|
|
129
|
-
}
|
|
130
|
-
// User flags
|
|
131
|
-
if (memory.isPinned) {
|
|
132
|
-
parts.push('pinned by user');
|
|
133
|
-
}
|
|
134
|
-
else if (memory.isProtected) {
|
|
135
|
-
parts.push('protected');
|
|
136
|
-
}
|
|
137
|
-
return parts.join(', ');
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Update importance score for a memory
|
|
141
|
-
* Used when memory is accessed or modified
|
|
142
|
-
*/
|
|
143
|
-
export async function updateImportanceScore(memoryId, incrementAccess = false) {
|
|
144
|
-
const { db, schema } = await getDbClient();
|
|
145
|
-
// Get current memory
|
|
146
|
-
const memories = await db
|
|
147
|
-
.select()
|
|
148
|
-
.from(schema.memories)
|
|
149
|
-
.where(eq(schema.memories.id, memoryId))
|
|
150
|
-
.limit(1);
|
|
151
|
-
if (memories.length === 0) {
|
|
152
|
-
throw new Error(`Memory not found: ${memoryId}`);
|
|
153
|
-
}
|
|
154
|
-
const memory = memories[0];
|
|
155
|
-
// Calculate new importance score
|
|
156
|
-
const importance = calculateImportance(memory);
|
|
157
|
-
// Update memory with new score
|
|
158
|
-
const updateData = {
|
|
159
|
-
importanceScore: importance.score,
|
|
160
|
-
lastImportanceRecalc: new Date(),
|
|
161
|
-
};
|
|
162
|
-
// Increment access count if requested
|
|
163
|
-
if (incrementAccess) {
|
|
164
|
-
updateData.accessCount = (memory.accessCount ?? 0) + 1;
|
|
165
|
-
updateData.lastAccessedAt = new Date();
|
|
166
|
-
}
|
|
167
|
-
await db
|
|
168
|
-
.update(schema.memories)
|
|
169
|
-
.set(updateData)
|
|
170
|
-
.where(eq(schema.memories.id, memoryId));
|
|
171
|
-
return importance.score;
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Decay importance scores for old memories
|
|
175
|
-
* Should be run periodically (e.g., daily) to reduce scores of stale memories
|
|
176
|
-
*
|
|
177
|
-
* This function applies exponential decay to all memories that haven't been
|
|
178
|
-
* recalculated recently, keeping the system's importance scores current.
|
|
179
|
-
*
|
|
180
|
-
* Fixed: Uses batch update instead of N+1 individual queries
|
|
181
|
-
*/
|
|
182
|
-
export async function decayImportanceScores(projectId) {
|
|
183
|
-
const { db, schema, raw } = await getDbClient();
|
|
184
|
-
// Get memories that need recalculation
|
|
185
|
-
// (those not recalculated in the last 24 hours or never)
|
|
186
|
-
const oneDayAgo = new Date(Date.now() - 24 * 60 * 60 * 1000);
|
|
187
|
-
// Use raw SQL for bulk update - avoids N+1 queries - let's use raw SQL for efficiency
|
|
188
|
-
// Build a single UPDATE that sets importance to base 50 (neutral) minus decay
|
|
189
|
-
// The JS calculation is too complex to port to SQL, but we can at least
|
|
190
|
-
// use a simpler approach: just reset to default and let individual recalc happen on access
|
|
191
|
-
// For now, use a more efficient approach: bulk update with raw SQL
|
|
192
|
-
// This avoids N+1 queries while still using the JS calculation logic
|
|
193
|
-
const clientType = raw.$clientType || 'sqlite';
|
|
194
|
-
const now = new Date().toISOString();
|
|
195
|
-
if (clientType === 'sqlite') {
|
|
196
|
-
const sqliteClient = raw.$client;
|
|
197
|
-
// Single SQL update - set all non-pinned/consolidated memories to base decay
|
|
198
|
-
// Note: We can't fully replicate the JS calculation in SQL, so we apply
|
|
199
|
-
// a simple decay multiplier. Full recalculation happens on access.
|
|
200
|
-
const result = sqliteClient.prepare(`
|
|
201
|
-
UPDATE memories
|
|
202
|
-
SET importance_score = MAX(0, importance_score - 1),
|
|
203
|
-
last_importance_recalc = ?
|
|
204
|
-
WHERE (is_pinned = 0 AND is_protected = 0 AND is_consolidated = 0)
|
|
205
|
-
AND (last_importance_recalc IS NULL OR last_importance_recalc < ?)
|
|
206
|
-
${projectId ? 'AND project_id = ?' : ''}
|
|
207
|
-
`).run(now, oneDayAgo.toISOString(), ...(projectId ? [projectId] : []));
|
|
208
|
-
return result.changes;
|
|
209
|
-
}
|
|
210
|
-
else {
|
|
211
|
-
// PostgreSQL
|
|
212
|
-
const pgClient = raw.$client;
|
|
213
|
-
const result = await pgClient.query(`
|
|
214
|
-
UPDATE memories
|
|
215
|
-
SET importance_score = GREATEST(0, importance_score - 1),
|
|
216
|
-
last_importance_recalc = $1
|
|
217
|
-
WHERE (is_pinned = FALSE AND is_protected = FALSE AND is_consolidated = FALSE)
|
|
218
|
-
AND (last_importance_recalc IS NULL OR last_importance_recalc < $2)
|
|
219
|
-
${projectId ? 'AND project_id = $3' : ''}
|
|
220
|
-
`, [now, oneDayAgo.toISOString(), ...(projectId ? [projectId] : [])]);
|
|
221
|
-
return result.rowCount || 0;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
/**
|
|
225
|
-
* Get low-importance memories that are candidates for consolidation
|
|
226
|
-
* These are old, rarely accessed memories with low importance scores
|
|
227
|
-
*/
|
|
228
|
-
export async function getLowImportanceMemories(projectId, options = {}) {
|
|
229
|
-
const { db, schema } = await getDbClient();
|
|
230
|
-
const { minAge = 90, // 90 days old by default
|
|
231
|
-
maxImportance = 30, // importance score below 30
|
|
232
|
-
limit = 100, } = options;
|
|
233
|
-
const minAgeTimestamp = new Date(Date.now() - minAge * 24 * 60 * 60 * 1000);
|
|
234
|
-
const memories = await db
|
|
235
|
-
.select()
|
|
236
|
-
.from(schema.memories)
|
|
237
|
-
.where(eq(schema.memories.projectId, projectId))
|
|
238
|
-
.all();
|
|
239
|
-
// Filter by criteria
|
|
240
|
-
return memories
|
|
241
|
-
.filter((m) => {
|
|
242
|
-
// Skip pinned/protected/consolidated
|
|
243
|
-
if (m.isPinned || m.isProtected || m.isConsolidated) {
|
|
244
|
-
return false;
|
|
245
|
-
}
|
|
246
|
-
// Check age
|
|
247
|
-
if (m.createdAt) {
|
|
248
|
-
const createdAt = new Date(m.createdAt).getTime();
|
|
249
|
-
if (createdAt > minAgeTimestamp.getTime()) {
|
|
250
|
-
return false;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
// Check importance
|
|
254
|
-
if ((m.importanceScore ?? 50) > maxImportance) {
|
|
255
|
-
return false;
|
|
256
|
-
}
|
|
257
|
-
return true;
|
|
258
|
-
})
|
|
259
|
-
.slice(0, limit);
|
|
260
|
-
}
|
|
261
|
-
/**
|
|
262
|
-
* Set importance score manually (for user override)
|
|
263
|
-
*/
|
|
264
|
-
export async function setImportanceScore(memoryId, score) {
|
|
265
|
-
if (score < 0 || score > 100) {
|
|
266
|
-
throw new Error('Importance score must be between 0 and 100');
|
|
267
|
-
}
|
|
268
|
-
const { db, schema } = await getDbClient();
|
|
269
|
-
await db
|
|
270
|
-
.update(schema.memories)
|
|
271
|
-
.set({
|
|
272
|
-
importanceScore: Math.round(score),
|
|
273
|
-
lastImportanceRecalc: new Date(),
|
|
274
|
-
})
|
|
275
|
-
.where(eq(schema.memories.id, memoryId));
|
|
276
|
-
}
|
|
277
|
-
/**
|
|
278
|
-
* Pin a memory to prevent decay and consolidation
|
|
279
|
-
*/
|
|
280
|
-
export async function pinMemory(memoryId, pinned = true) {
|
|
281
|
-
const { db, schema } = await getDbClient();
|
|
282
|
-
await db
|
|
283
|
-
.update(schema.memories)
|
|
284
|
-
.set({
|
|
285
|
-
isPinned: pinned ? 1 : 0,
|
|
286
|
-
// When pinning, set max importance; when unpinning, recalculate
|
|
287
|
-
importanceScore: pinned ? 100 : undefined,
|
|
288
|
-
lastImportanceRecalc: new Date(),
|
|
289
|
-
})
|
|
290
|
-
.where(eq(schema.memories.id, memoryId));
|
|
291
|
-
}
|
|
292
|
-
/**
|
|
293
|
-
* Calculate cosine similarity between two vectors
|
|
294
|
-
* Re-exported from core/utils/vector-operations.ts for backward compatibility.
|
|
295
|
-
* This will be removed in v1.2.0 - import directly from core/utils/vector-operations.ts
|
|
296
|
-
*/
|
|
297
|
-
export const cosineSimilarity = vectorCosineSimilarity;
|
|
298
|
-
//# sourceMappingURL=importance.js.map
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export * from './memories.js';
|
|
2
|
-
export * from './memory-manager.js';
|
|
3
|
-
export * from './serialization.js';
|
|
4
|
-
export * from './temporal-parser.js';
|
|
5
|
-
export * from './entity-extractor.js';
|
|
6
|
-
export * from './hybrid-scorer.js';
|
|
7
|
-
export * from './bridge-discovery.js';
|
|
8
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Memory Loading Abstraction
|
|
3
|
-
* Unified utilities for loading memories by ID with configurable options
|
|
4
|
-
*/
|
|
5
|
-
import { type MemoryRecord } from './normalization.js';
|
|
6
|
-
export interface LoadMemoryOptions {
|
|
7
|
-
incrementAccess?: boolean;
|
|
8
|
-
decrypt?: boolean;
|
|
9
|
-
normalize?: boolean;
|
|
10
|
-
includeSensitive?: boolean;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Load a single memory by ID with configurable options
|
|
14
|
-
*/
|
|
15
|
-
export declare function loadMemory(id: string, options?: LoadMemoryOptions): Promise<MemoryRecord | any | null>;
|
|
16
|
-
/**
|
|
17
|
-
* Load multiple memories by IDs efficiently
|
|
18
|
-
* Returns a Map keyed by memory ID
|
|
19
|
-
*/
|
|
20
|
-
export declare function loadMemories(ids: string[], options?: LoadMemoryOptions): Promise<Map<string, any>>;
|
|
21
|
-
/**
|
|
22
|
-
* Load a memory by ID with raw database access, no processing.
|
|
23
|
-
*
|
|
24
|
-
* This is for special cases that need the raw database row without
|
|
25
|
-
* normalization, decryption, or access count updates.
|
|
26
|
-
*
|
|
27
|
-
* @param id - Memory UUID
|
|
28
|
-
* @returns Raw database row or null if not found
|
|
29
|
-
*/
|
|
30
|
-
export declare function loadMemoryRaw(id: string): Promise<any | null>;
|
|
31
|
-
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Memory Loading Abstraction
|
|
3
|
-
* Unified utilities for loading memories by ID with configurable options
|
|
4
|
-
*/
|
|
5
|
-
import { eq, inArray } from 'drizzle-orm';
|
|
6
|
-
import { getDbClient } from '../lib/db-client.js';
|
|
7
|
-
import { decrypt } from '../security/encrypt.js';
|
|
8
|
-
import { normalizeMemory } from './normalization.js';
|
|
9
|
-
import { requireUuid } from '../lib/validation.js';
|
|
10
|
-
/**
|
|
11
|
-
* Load a single memory by ID with configurable options
|
|
12
|
-
*/
|
|
13
|
-
export async function loadMemory(id, options = {}) {
|
|
14
|
-
const { incrementAccess = true, decrypt: shouldDecrypt = true, normalize = true, includeSensitive = false } = options;
|
|
15
|
-
// Validate UUID
|
|
16
|
-
requireUuid(id);
|
|
17
|
-
const { db, schema } = await getDbClient();
|
|
18
|
-
// Query the memory
|
|
19
|
-
const rows = await db.select().from(schema.memories).where(eq(schema.memories.id, id)).limit(1);
|
|
20
|
-
const row = rows[0];
|
|
21
|
-
if (!row)
|
|
22
|
-
return null;
|
|
23
|
-
// Increment access count if needed
|
|
24
|
-
if (incrementAccess) {
|
|
25
|
-
await db.update(schema.memories)
|
|
26
|
-
.set({
|
|
27
|
-
accessCount: (row.accessCount ?? 0) + 1,
|
|
28
|
-
lastAccessedAt: new Date(),
|
|
29
|
-
})
|
|
30
|
-
.where(eq(schema.memories.id, id));
|
|
31
|
-
}
|
|
32
|
-
// Determine content: decrypt if needed
|
|
33
|
-
let content = row.content;
|
|
34
|
-
let encryptedContent = row.encrypted_content;
|
|
35
|
-
let encryptionNonce = row.encryption_nonce;
|
|
36
|
-
if (shouldDecrypt && row.is_encrypted) {
|
|
37
|
-
try {
|
|
38
|
-
content = decrypt(encryptedContent, encryptionNonce);
|
|
39
|
-
}
|
|
40
|
-
catch (e) {
|
|
41
|
-
console.warn('Failed to decrypt memory', e);
|
|
42
|
-
content = row.content; // fallback to stored content (encrypted)
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
// Build result object
|
|
46
|
-
let result = { ...row, content };
|
|
47
|
-
// If not decrypting and includeSensitive, keep encrypted fields
|
|
48
|
-
if (!shouldDecrypt && includeSensitive) {
|
|
49
|
-
result.encrypted_content = encryptedContent;
|
|
50
|
-
result.encryption_nonce = encryptionNonce;
|
|
51
|
-
}
|
|
52
|
-
// If normalize, convert to MemoryRecord shape
|
|
53
|
-
if (normalize) {
|
|
54
|
-
return normalizeMemory(result);
|
|
55
|
-
}
|
|
56
|
-
// Otherwise return raw-ish row (with content possibly decrypted)
|
|
57
|
-
return result;
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Load multiple memories by IDs efficiently
|
|
61
|
-
* Returns a Map keyed by memory ID
|
|
62
|
-
*/
|
|
63
|
-
export async function loadMemories(ids, options = {}) {
|
|
64
|
-
const { incrementAccess = true, decrypt: shouldDecrypt = true, normalize = true, includeSensitive = false } = options;
|
|
65
|
-
if (ids.length === 0) {
|
|
66
|
-
return new Map();
|
|
67
|
-
}
|
|
68
|
-
// Validate all UUIDs
|
|
69
|
-
for (const id of ids) {
|
|
70
|
-
requireUuid(id);
|
|
71
|
-
}
|
|
72
|
-
const { db, schema } = await getDbClient();
|
|
73
|
-
// Batch query using IN operator
|
|
74
|
-
const rows = await db
|
|
75
|
-
.select()
|
|
76
|
-
.from(schema.memories)
|
|
77
|
-
.where(inArray(schema.memories.id, ids));
|
|
78
|
-
// Create a map from id to row
|
|
79
|
-
const rowMap = new Map();
|
|
80
|
-
for (const row of rows) {
|
|
81
|
-
rowMap.set(row.id, row);
|
|
82
|
-
}
|
|
83
|
-
// Increment access counts if needed
|
|
84
|
-
if (incrementAccess) {
|
|
85
|
-
const now = new Date();
|
|
86
|
-
for (const row of rows) {
|
|
87
|
-
await db.update(schema.memories)
|
|
88
|
-
.set({
|
|
89
|
-
accessCount: (row.accessCount ?? 0) + 1,
|
|
90
|
-
lastAccessedAt: now,
|
|
91
|
-
})
|
|
92
|
-
.where(eq(schema.memories.id, row.id));
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
// Process each row according to options
|
|
96
|
-
const resultMap = new Map();
|
|
97
|
-
for (const row of rows) {
|
|
98
|
-
let content = row.content;
|
|
99
|
-
let encryptedContent = row.encrypted_content;
|
|
100
|
-
let encryptionNonce = row.encryption_nonce;
|
|
101
|
-
if (shouldDecrypt && row.is_encrypted) {
|
|
102
|
-
try {
|
|
103
|
-
content = decrypt(encryptedContent, encryptionNonce);
|
|
104
|
-
}
|
|
105
|
-
catch (e) {
|
|
106
|
-
console.warn('Failed to decrypt memory', e);
|
|
107
|
-
content = row.content;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
let result = { ...row, content };
|
|
111
|
-
if (!shouldDecrypt && includeSensitive) {
|
|
112
|
-
result.encrypted_content = encryptedContent;
|
|
113
|
-
result.encryption_nonce = encryptionNonce;
|
|
114
|
-
}
|
|
115
|
-
if (normalize) {
|
|
116
|
-
resultMap.set(row.id, normalizeMemory(result));
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
resultMap.set(row.id, result);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
return resultMap;
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Load a memory by ID with raw database access, no processing.
|
|
126
|
-
*
|
|
127
|
-
* This is for special cases that need the raw database row without
|
|
128
|
-
* normalization, decryption, or access count updates.
|
|
129
|
-
*
|
|
130
|
-
* @param id - Memory UUID
|
|
131
|
-
* @returns Raw database row or null if not found
|
|
132
|
-
*/
|
|
133
|
-
export async function loadMemoryRaw(id) {
|
|
134
|
-
// Validate UUID
|
|
135
|
-
requireUuid(id);
|
|
136
|
-
const { db, schema } = await getDbClient();
|
|
137
|
-
// Direct query without any processing
|
|
138
|
-
const rows = await db.select().from(schema.memories).where(eq(schema.memories.id, id)).limit(1);
|
|
139
|
-
return rows[0] || null;
|
|
140
|
-
}
|
|
141
|
-
//# sourceMappingURL=loader.js.map
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Memory Markdown Storage
|
|
3
|
-
*
|
|
4
|
-
* Stores memories as markdown files in .squish/memory/
|
|
5
|
-
* Following Karpathy LLM Memory pattern:
|
|
6
|
-
* - raw/ : Append-only memory files (never edit)
|
|
7
|
-
* - processed/ : LLM-generated articles (future)
|
|
8
|
-
* - outputs/ : Query responses (future)
|
|
9
|
-
*
|
|
10
|
-
* Each memory = one .md file with YAML frontmatter
|
|
11
|
-
*/
|
|
12
|
-
import type { MemoryType } from '../memories.js';
|
|
13
|
-
export interface MarkdownMemoryInput {
|
|
14
|
-
content: string;
|
|
15
|
-
type?: MemoryType;
|
|
16
|
-
tags?: string[];
|
|
17
|
-
reasoning?: string;
|
|
18
|
-
memoryContext?: string;
|
|
19
|
-
examples?: string;
|
|
20
|
-
exceptions?: string;
|
|
21
|
-
source?: string;
|
|
22
|
-
project?: string;
|
|
23
|
-
}
|
|
24
|
-
export interface MarkdownMemoryFile {
|
|
25
|
-
id: string;
|
|
26
|
-
type: MemoryType;
|
|
27
|
-
content: string;
|
|
28
|
-
tags: string[];
|
|
29
|
-
createdAt: string;
|
|
30
|
-
source?: string;
|
|
31
|
-
project?: string;
|
|
32
|
-
reasoning?: string;
|
|
33
|
-
memoryContext?: string;
|
|
34
|
-
examples?: string;
|
|
35
|
-
exceptions?: string;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Save a memory to memory raw folder
|
|
39
|
-
*/
|
|
40
|
-
export declare function saveToMarkdown(input: MarkdownMemoryInput): Promise<MarkdownMemoryFile>;
|
|
41
|
-
/**
|
|
42
|
-
* Get all memories from memory raw folder
|
|
43
|
-
*/
|
|
44
|
-
export declare function getMarkdownMemories(options?: {
|
|
45
|
-
since?: Date;
|
|
46
|
-
until?: Date;
|
|
47
|
-
tags?: string[];
|
|
48
|
-
type?: MemoryType;
|
|
49
|
-
project?: string;
|
|
50
|
-
}): Promise<MarkdownMemoryFile[]>;
|
|
51
|
-
/**
|
|
52
|
-
* Get a specific memory by ID
|
|
53
|
-
*/
|
|
54
|
-
export declare function getMarkdownMemory(id: string): Promise<MarkdownMemoryFile | null>;
|
|
55
|
-
/**
|
|
56
|
-
* Delete a memory from memory
|
|
57
|
-
*/
|
|
58
|
-
export declare function deleteMarkdownMemory(id: string): Promise<boolean>;
|
|
59
|
-
/**
|
|
60
|
-
* Get memory storage stats
|
|
61
|
-
*/
|
|
62
|
-
export declare function getMemoryStats(): Promise<{
|
|
63
|
-
totalMemories: number;
|
|
64
|
-
byType: Record<string, number>;
|
|
65
|
-
byTag: Record<string, number>;
|
|
66
|
-
storageSizeBytes: number;
|
|
67
|
-
}>;
|
|
68
|
-
/**
|
|
69
|
-
* Check if memory storage is available
|
|
70
|
-
*/
|
|
71
|
-
export declare function isMemoryStorageAvailable(): boolean;
|
|
72
|
-
//# sourceMappingURL=markdown-storage.d.ts.map
|