squish-memory 1.1.5 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +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 +46 -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/core/algorithms/index.ts +39 -0
- package/core/algorithms/operations/cache-maintenance.ts +182 -0
- package/core/algorithms/safety/safety-checks.ts +256 -0
- package/core/algorithms/strategies/merge-strategies.ts +381 -0
- package/core/algorithms/types.ts +140 -0
- package/core/algorithms/utils/response-builder.ts +61 -0
- package/core/associations.ts +363 -0
- package/core/beliefs/decay.ts +289 -0
- package/core/beliefs/extractor.ts +131 -0
- package/core/beliefs/store.ts +557 -0
- package/core/beliefs/types.ts +38 -0
- package/core/commands/mcp-server.ts +5 -0
- package/core/compression.ts +177 -0
- package/core/config.js +2 -0
- package/core/consolidation.ts +330 -0
- package/core/context/agent-context.ts +388 -0
- package/core/context/context-paging.ts +449 -0
- package/core/context/context-window.ts +234 -0
- package/core/context/context.ts +35 -0
- package/core/embeddings/embeddings.ts +616 -0
- package/core/embeddings/google-multimodal.ts +200 -0
- package/{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/core/lib/db-client.ts +168 -0
- package/core/lib/parse-embedding.ts +59 -0
- package/core/lib/schemas.ts +102 -0
- package/core/lib/types.ts +49 -0
- package/core/lib/utils.ts +151 -0
- package/core/lib/validation.ts +180 -0
- package/core/lifecycle.ts +353 -0
- package/core/logger.ts +59 -0
- package/core/memory/bridge-discovery.ts +395 -0
- package/core/memory/categorizer.ts +390 -0
- package/core/memory/conflict-detector.ts +62 -0
- package/core/memory/consolidation.ts +372 -0
- package/core/memory/context-collector.ts +75 -0
- package/core/memory/contradiction-resolver.ts +494 -0
- package/core/memory/edit-workflow.ts +174 -0
- package/core/memory/entity-extractor.ts +426 -0
- package/core/memory/entity-resolver.ts +89 -0
- package/core/memory/explain.ts +112 -0
- package/core/memory/fact-deriver.ts +300 -0
- package/core/memory/fact-extractor.ts +120 -0
- package/core/memory/feedback-tracker.ts +200 -0
- package/core/memory/hooks.ts +230 -0
- package/core/memory/hybrid-retrieval.ts +65 -0
- package/core/memory/hybrid-scorer.ts +325 -0
- package/core/memory/hybrid-search.ts +748 -0
- package/core/memory/importance.ts +319 -0
- package/core/memory/index.ts +11 -0
- package/core/memory/loader.ts +178 -0
- package/core/memory/markdown/markdown-storage.ts +318 -0
- package/core/memory/memories.ts +565 -0
- package/core/memory/memory-lifecycle.ts +51 -0
- package/core/memory/memory-manager.ts +53 -0
- package/core/memory/migrate.ts +173 -0
- package/core/memory/normalization.ts +30 -0
- package/core/memory/path-strengthener.ts +211 -0
- package/core/memory/progressive-disclosure.ts +392 -0
- package/core/memory/query-processor.ts +130 -0
- package/core/memory/query-rewriter.ts +153 -0
- package/core/memory/response-analyzer.ts +81 -0
- package/core/memory/retrieval-feedback.ts +276 -0
- package/core/memory/serialization.ts +83 -0
- package/core/memory/stale-cleaner.ts +147 -0
- package/core/memory/stats.ts +181 -0
- package/core/memory/telemetry.ts +392 -0
- package/core/memory/temporal-facts.ts +356 -0
- package/core/memory/temporal-parser.ts +477 -0
- package/core/memory/trigger-detector.ts +104 -0
- package/core/memory/write-gate.ts +288 -0
- package/core/places/index.ts +14 -0
- package/core/places/memory-places.ts +339 -0
- package/core/places/places.ts +406 -0
- package/core/places/rules.ts +308 -0
- package/core/places/walking.ts +192 -0
- package/core/projects +89 -0
- package/core/projects.ts +131 -0
- package/core/redis.ts +82 -0
- package/core/responses.ts +187 -0
- package/core/runtime/trust-report.ts +195 -0
- package/core/runtime/trust-state.ts +360 -0
- package/core/scheduler/cron-scheduler.ts +581 -0
- package/core/scheduler/heartbeat.ts +91 -0
- package/core/scheduler/index.ts +8 -0
- package/core/scheduler/job-runner.ts +197 -0
- package/core/search/conversations.ts +166 -0
- package/core/search/entities.ts +46 -0
- package/core/search/folder-context.ts +154 -0
- package/core/search/graph-boost.ts +22 -0
- package/core/search/index.ts +4 -0
- package/core/search/qmd-wrapper.ts +84 -0
- package/core/security/encrypt.ts +51 -0
- package/core/security/governance.ts +102 -0
- package/core/security/privacy.ts +108 -0
- package/core/security/secret-detector.ts +122 -0
- package/core/session/auto-load.ts +160 -0
- package/core/session/entity-tracker.ts +363 -0
- package/core/session/index.ts +7 -0
- package/core/session/reference-resolver.ts +158 -0
- package/core/session/self-iteration-job.ts +478 -0
- package/core/session/session-hooks.ts +69 -0
- package/core/session/types.ts +36 -0
- package/core/session/working-set.ts +275 -0
- package/core/snapshots/cleanup.ts +13 -0
- package/core/snapshots/comparison.ts +59 -0
- package/core/snapshots/creation.ts +139 -0
- package/core/snapshots/retrieval.ts +44 -0
- package/core/snapshots/stats.ts +63 -0
- package/core/storage/cache.ts +241 -0
- package/core/storage/database.ts +23 -0
- package/core/summarization/cleanup.ts +13 -0
- package/core/summarization/queries.ts +32 -0
- package/core/summarization/stats.ts +64 -0
- package/core/summarization/strategies.ts +52 -0
- package/core/summarization.ts +248 -0
- package/core/temporal-facts.ts +244 -0
- package/core/tracing/collector.ts +470 -0
- package/core/tracing/visualizer.ts +195 -0
- package/core/utils/cleanup-operations.ts +50 -0
- package/core/utils/content-extraction.ts +95 -0
- package/core/utils/filter-builder.ts +56 -0
- package/core/utils/history-traversal.ts +63 -0
- package/core/utils/memory-operations.ts +56 -0
- package/core/utils/query-operations.ts +83 -0
- package/core/utils/summarization-helpers.ts +45 -0
- package/core/utils/temporal-queries.ts +39 -0
- package/core/utils/vector-operations.ts +135 -0
- package/core/utils/version-management.ts +74 -0
- package/core/worker.ts +324 -0
- package/db/adapter.ts +215 -0
- package/db/bootstrap.ts +1055 -0
- package/db/drizzle/migrations/0000_needy_cerebro.sql +402 -0
- package/db/drizzle/migrations/meta/0000_snapshot.json +3451 -0
- package/db/drizzle/migrations/meta/_journal.json +13 -0
- package/db/drizzle/schema-sqlite.ts +1032 -0
- package/db/drizzle/schema.ts +1128 -0
- package/db/drizzle.config.ts +12 -0
- package/db/index.ts +83 -0
- package/db/init.sql +5 -0
- package/db/migrations/associations.ts +35 -0
- package/db/migrations/beliefs.ts +89 -0
- package/db/migrations/core-memory.ts +35 -0
- package/db/migrations/fts.ts +59 -0
- package/db/migrations/index.ts +54 -0
- package/db/migrations/indexes.ts +36 -0
- package/db/migrations/learnings.ts +34 -0
- package/db/migrations/maintenance.ts +68 -0
- package/db/migrations/memories.ts +22 -0
- package/db/migrations/memory-places.ts +35 -0
- package/db/migrations/places.ts +49 -0
- package/db/migrations/projects.ts +21 -0
- package/db/migrations/tier-conversion.ts +24 -0
- package/db/neon.ts +22 -0
- package/db/schema/beliefs.ts +50 -0
- package/db/schema/generator.ts +159 -0
- package/db/schema/index.ts +58 -0
- package/db/schema/learnings.ts +32 -0
- package/db/schema/memories.ts +83 -0
- package/db/schema/projects.ts +33 -0
- package/db/schema.ts +13 -0
- package/db/supabase.ts +27 -0
- package/dist/config.d.ts +40 -17
- package/dist/config.js +150 -198
- package/dist/core/adapters/types.d.ts +13 -33
- package/dist/core/adapters/types.js +1 -1
- package/dist/core/agent-preferences.d.ts +16 -0
- package/dist/core/agent-preferences.js +124 -0
- package/dist/core/algorithms/safety/safety-checks.d.ts +1 -5
- package/dist/core/algorithms/types.d.ts +0 -8
- package/dist/core/associations.d.ts +3 -1
- package/dist/core/associations.js +37 -1
- package/dist/core/beliefs/decay.d.ts +27 -0
- package/dist/core/beliefs/decay.js +217 -0
- package/dist/core/beliefs/extractor.d.ts +9 -0
- package/dist/core/beliefs/extractor.js +113 -0
- package/dist/core/beliefs/store.d.ts +46 -0
- package/dist/core/beliefs/store.js +466 -0
- package/dist/core/beliefs/types.d.ts +28 -0
- package/dist/core/beliefs/types.js +2 -0
- package/dist/core/commands/mcp-server.d.ts +0 -1
- package/dist/core/commands/mcp-server.js +4 -737
- package/dist/core/commands/remember.d.ts +24 -0
- package/dist/core/commands/remember.js +144 -0
- package/dist/core/{toon.d.ts → compression.d.ts} +6 -4
- package/dist/core/{toon.js → compression.js} +8 -8
- package/dist/core/context/agent-context.js +1 -1
- package/dist/core/embeddings/embeddings.d.ts +29 -0
- package/dist/core/embeddings/embeddings.js +546 -0
- package/dist/core/embeddings/google-multimodal.js +6 -2
- package/dist/core/{local-embeddings.d.ts → embeddings/local-embeddings.d.ts} +1 -1
- package/dist/core/embeddings/local-embeddings.js +11 -0
- package/dist/core/embeddings/qmd-client.js +1 -1
- package/dist/core/embeddings/transformers-local.d.ts +64 -0
- package/dist/core/embeddings/transformers-local.js +213 -0
- package/dist/core/embeddings.d.ts +1 -28
- package/dist/core/embeddings.js +2 -453
- package/dist/core/graph/entity-deduplicator.d.ts +24 -0
- package/dist/core/graph/entity-deduplicator.js +183 -0
- package/dist/core/graph/graph-builder.d.ts +46 -0
- package/dist/core/graph/graph-builder.js +174 -0
- package/dist/core/graph/graph-traversal.d.ts +80 -0
- package/dist/core/graph/graph-traversal.js +315 -0
- package/dist/core/graph/index.d.ts +19 -0
- package/dist/core/graph/index.js +13 -0
- package/dist/core/graph/llm-entity-extractor.d.ts +49 -0
- package/dist/core/graph/llm-entity-extractor.js +313 -0
- package/dist/core/graph/multi-hop-retrieval.d.ts +48 -0
- package/dist/core/graph/multi-hop-retrieval.js +215 -0
- package/dist/core/graph/relationship-extractor.d.ts +48 -0
- package/dist/core/graph/relationship-extractor.js +351 -0
- package/dist/core/hooks/agent-hooks.d.ts +10 -1
- package/dist/core/hooks/agent-hooks.js +301 -24
- package/dist/core/hot-cache.d.ts +86 -0
- package/dist/core/hot-cache.js +285 -0
- package/dist/core/index.d.ts +9 -9
- package/dist/core/index.js +9 -12
- package/dist/core/ingestion/core-memory.d.ts +2 -2
- package/dist/core/ingestion/core-memory.js +3 -3
- package/dist/core/ingestion/learnings.js +3 -0
- package/dist/core/ingestion/signal-engine.d.ts +41 -0
- package/dist/core/ingestion/signal-engine.js +201 -0
- package/dist/core/{obsidian-vault.d.ts → integrations/obsidian-vault.d.ts} +2 -1
- package/dist/core/{obsidian-vault.js → integrations/obsidian-vault.js} +69 -7
- package/dist/core/lib/parse-embedding.d.ts +9 -0
- package/dist/core/lib/parse-embedding.js +58 -0
- package/dist/core/lib/schemas.d.ts +57 -54
- package/dist/core/lib/types.d.ts +45 -0
- package/dist/core/lib/types.js +6 -0
- package/dist/core/lib/utils.d.ts +4 -0
- package/dist/core/lib/utils.js +55 -0
- package/dist/core/lifecycle.d.ts +0 -1
- package/dist/core/lifecycle.js +13 -23
- package/dist/core/logger.d.ts +1 -0
- package/dist/core/logger.js +14 -8
- package/dist/core/mcp/tools.d.ts +0 -2
- package/dist/core/mcp/tools.js +0 -87
- package/dist/core/mcp/types.d.ts +25 -253
- package/dist/core/mcp/types.js +2 -2
- package/dist/core/memory/categorizer.js +1 -0
- package/dist/core/memory/consolidation.js +2 -28
- package/dist/core/memory/entity-extractor.d.ts +4 -0
- package/dist/core/memory/entity-extractor.js +30 -16
- package/dist/core/memory/explain.d.ts +18 -0
- package/dist/core/memory/explain.js +92 -0
- package/dist/core/memory/fact-deriver.d.ts +31 -0
- package/dist/core/memory/fact-deriver.js +236 -0
- package/dist/core/memory/hybrid-retrieval.d.ts +14 -16
- package/dist/core/memory/hybrid-retrieval.js +25 -127
- package/dist/core/memory/hybrid-scorer.js +6 -23
- package/dist/core/memory/hybrid-search.d.ts +10 -7
- package/dist/core/memory/hybrid-search.js +458 -221
- package/dist/core/memory/importance.d.ts +0 -17
- package/dist/core/memory/importance.js +1 -58
- package/dist/core/memory/index.d.ts +1 -0
- package/dist/core/memory/index.js +1 -0
- package/dist/core/memory/memories.d.ts +13 -17
- package/dist/core/memory/memories.js +78 -75
- package/dist/core/memory/memory-lifecycle.d.ts +2 -2
- package/dist/core/memory/memory-lifecycle.js +10 -18
- package/dist/core/memory/normalization.d.ts +1 -16
- package/dist/core/memory/path-strengthener.d.ts +39 -0
- package/dist/core/memory/path-strengthener.js +150 -0
- package/dist/core/memory/query-processor.js +37 -3
- package/dist/core/memory/retrieval-feedback.d.ts +70 -0
- package/dist/core/memory/retrieval-feedback.js +213 -0
- package/dist/core/memory/stale-cleaner.d.ts +26 -0
- package/dist/core/memory/stale-cleaner.js +97 -0
- package/dist/core/memory/stats.d.ts +10 -0
- package/dist/core/memory/stats.js +8 -3
- package/dist/core/memory/trigger-detector.d.ts +8 -1
- package/dist/core/memory/trigger-detector.js +42 -5
- package/dist/core/places/index.d.ts +1 -1
- package/dist/core/places/index.js +1 -1
- package/dist/core/places/places.d.ts +13 -13
- package/dist/core/places/places.js +27 -27
- package/dist/core/places/rules.js +23 -23
- package/dist/core/places/walking.d.ts +3 -3
- package/dist/core/places/walking.js +7 -7
- package/dist/core/projects.js +8 -0
- package/dist/core/runtime/trust-report.d.ts +102 -0
- package/dist/core/runtime/trust-report.js +107 -0
- package/dist/core/runtime/trust-state.d.ts +12 -0
- package/dist/core/runtime/trust-state.js +309 -0
- package/dist/core/scheduler/cron-scheduler.d.ts +1 -1
- package/dist/core/scheduler/cron-scheduler.js +164 -3
- package/dist/core/scheduler/job-runner.js +1 -1
- package/dist/core/search/qmd-wrapper.d.ts +36 -0
- package/dist/core/search/qmd-wrapper.js +58 -0
- package/dist/core/session/auto-load.js +28 -3
- package/dist/core/session/entity-tracker.d.ts +62 -0
- package/dist/core/session/entity-tracker.js +287 -0
- package/dist/core/session/reference-resolver.d.ts +26 -0
- package/dist/core/session/reference-resolver.js +121 -0
- package/dist/core/session/self-iteration-job.d.ts +15 -0
- package/dist/core/session/self-iteration-job.js +163 -58
- package/dist/core/session/working-set.d.ts +50 -0
- package/dist/core/session/working-set.js +212 -0
- package/dist/core/snapshots/creation.d.ts +2 -8
- package/dist/core/snapshots/creation.js +3 -12
- package/dist/core/utils/summarization-helpers.d.ts +0 -4
- package/dist/core/utils/summarization-helpers.js +1 -6
- package/dist/db/bootstrap.d.ts +2 -0
- package/dist/db/bootstrap.js +229 -280
- package/dist/db/drizzle/schema-sqlite.d.ts +702 -1
- package/dist/db/drizzle/schema-sqlite.js +83 -4
- package/dist/db/drizzle/schema.d.ts +653 -1
- package/dist/db/drizzle/schema.js +93 -4
- package/dist/db/migrations/associations.d.ts +6 -0
- package/dist/db/migrations/associations.js +29 -0
- package/dist/db/migrations/beliefs.d.ts +10 -0
- package/dist/db/migrations/beliefs.js +76 -0
- package/dist/db/migrations/core-memory.d.ts +6 -0
- package/dist/db/migrations/core-memory.js +29 -0
- package/dist/db/migrations/fts.d.ts +6 -0
- package/dist/db/migrations/fts.js +52 -0
- package/dist/db/migrations/index.d.ts +25 -0
- package/dist/db/migrations/index.js +51 -0
- package/dist/db/migrations/indexes.d.ts +6 -0
- package/dist/db/migrations/indexes.js +30 -0
- package/dist/db/migrations/learnings.d.ts +7 -0
- package/dist/db/migrations/learnings.js +26 -0
- package/dist/db/migrations/maintenance.d.ts +6 -0
- package/dist/db/migrations/maintenance.js +61 -0
- package/dist/db/migrations/memories.d.ts +7 -0
- package/dist/db/migrations/memories.js +16 -0
- package/dist/db/migrations/memory-places.d.ts +6 -0
- package/dist/db/migrations/memory-places.js +29 -0
- package/dist/db/migrations/places.d.ts +6 -0
- package/dist/db/migrations/places.js +43 -0
- package/dist/db/migrations/projects.d.ts +3 -0
- package/dist/db/migrations/projects.js +13 -0
- package/dist/db/migrations/tier-conversion.d.ts +7 -0
- package/dist/db/migrations/tier-conversion.js +20 -0
- package/dist/db/schema/beliefs.d.ts +9 -0
- package/dist/db/schema/beliefs.js +46 -0
- package/dist/db/schema/generator.d.ts +38 -0
- package/dist/db/schema/generator.js +108 -0
- package/dist/db/schema/index.d.ts +19 -20
- package/dist/db/schema/index.js +25 -79
- package/dist/db/schema/learnings.d.ts +7 -0
- package/dist/db/schema/learnings.js +30 -0
- package/dist/db/schema/memories.d.ts +7 -0
- package/dist/db/schema/memories.js +81 -0
- package/dist/db/schema/projects.d.ts +4 -0
- package/dist/db/schema/projects.js +31 -0
- package/dist/packages/mcp/src/index.d.ts +3 -0
- package/dist/packages/mcp/src/index.js +733 -0
- package/mcp.json.example +8 -11
- package/package.json +57 -76
- package/packages/cli/package.json +22 -0
- package/packages/cli/src/commands/clean.ts +68 -0
- package/packages/cli/src/commands/context.ts +79 -0
- package/packages/cli/src/commands/doctor.ts +357 -0
- package/packages/cli/src/commands/forget.ts +72 -0
- package/packages/cli/src/commands/health.ts +36 -0
- package/packages/cli/src/commands/inspect.ts +41 -0
- package/packages/cli/src/commands/link.ts +50 -0
- package/packages/cli/src/commands/migrate.ts +93 -0
- package/packages/cli/src/commands/recall.ts +99 -0
- package/packages/cli/src/commands/recent.ts +57 -0
- package/packages/cli/src/commands/remember.ts +139 -0
- package/packages/cli/src/commands/run.ts +58 -0
- package/packages/cli/src/commands/stale.ts +43 -0
- package/packages/cli/src/commands/stats.ts +42 -0
- package/packages/cli/src/index.ts +57 -0
- package/packages/cli/tsconfig.json +24 -0
- package/packages/mcp/package.json +26 -0
- package/packages/mcp/src/index.ts +877 -0
- package/packages/mcp/tsconfig.json +20 -0
- package/skills/squish-memory/SKILL.md +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/core/commands/managed-sync.d.ts +0 -10
- package/dist/core/commands/managed-sync.js +0 -64
- package/dist/core/external-folder/index.d.ts +0 -102
- package/dist/core/external-folder/index.js +0 -294
- 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/search/qmd-search.d.ts +0 -61
- package/dist/core/search/qmd-search.js +0 -178
- 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.d.ts +0 -29
- package/dist/core/snapshots.js +0 -220
- package/dist/core/sync/qmd-sync.d.ts +0 -94
- package/dist/core/sync/qmd-sync.js +0 -201
- 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
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
* Appends hot memories to Obsidian daily notes
|
|
4
4
|
* Format: YYYY-MM-DD.md with memory blocks
|
|
5
5
|
*/
|
|
6
|
-
import { existsSync, mkdirSync, appendFileSync } from 'fs';
|
|
6
|
+
import { existsSync, mkdirSync, appendFileSync, readFileSync, readdirSync } from 'fs';
|
|
7
7
|
import { join } from 'path';
|
|
8
|
-
import {
|
|
8
|
+
import { randomUUID } from 'crypto';
|
|
9
|
+
import { logger } from '../logger.js';
|
|
9
10
|
/**
|
|
10
11
|
* Append a memory to the daily note in Obsidian vault
|
|
11
12
|
* Creates YYYY-MM-DD.md file if it doesn't exist
|
|
@@ -83,12 +84,73 @@ export function isObsidianConnected(vaultPath) {
|
|
|
83
84
|
return existsSync(parentDir) || true; // Assume creatable if parent exists
|
|
84
85
|
}
|
|
85
86
|
/**
|
|
86
|
-
* Read existing memories from Obsidian vault (for
|
|
87
|
+
* Read existing memories from Obsidian vault (for import feature)
|
|
88
|
+
* Scans vault for .md files and extracts memory blocks
|
|
87
89
|
*/
|
|
88
90
|
export async function readFromVault(vaultPath) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
if (!existsSync(vaultPath)) {
|
|
92
|
+
logger.warn(`[Obsidian] Vault path does not exist: ${vaultPath}`);
|
|
93
|
+
return [];
|
|
94
|
+
}
|
|
95
|
+
const memories = [];
|
|
96
|
+
// Recursively find all .md files
|
|
97
|
+
const mdFiles = await findMarkdownFiles(vaultPath);
|
|
98
|
+
for (const filePath of mdFiles) {
|
|
99
|
+
try {
|
|
100
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
101
|
+
const filename = filePath.split(/[/\\]/).pop() || '';
|
|
102
|
+
// Extract frontmatter if present
|
|
103
|
+
const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
104
|
+
let tags = [];
|
|
105
|
+
if (frontmatterMatch) {
|
|
106
|
+
const tagMatch = frontmatterMatch[1].match(/tags:\s*\[([^\]]*)\]/);
|
|
107
|
+
if (tagMatch) {
|
|
108
|
+
tags = tagMatch[1].split(',').map((t) => t.trim()).filter(Boolean);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Extract content after frontmatter
|
|
112
|
+
const body = frontmatterMatch ? content.slice(frontmatterMatch[0].length).trim() : content;
|
|
113
|
+
// Skip empty files or very short ones
|
|
114
|
+
if (body.length < 10)
|
|
115
|
+
continue;
|
|
116
|
+
memories.push({
|
|
117
|
+
id: randomUUID(),
|
|
118
|
+
content: body,
|
|
119
|
+
tags,
|
|
120
|
+
type: 'observation'
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
logger.warn(`[Obsidian] Failed to read file ${filePath}: ${error}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
logger.info(`[Obsidian] Found ${memories.length} memories in vault`);
|
|
128
|
+
return memories;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Recursively find all markdown files in a directory
|
|
132
|
+
*/
|
|
133
|
+
async function findMarkdownFiles(dir) {
|
|
134
|
+
const files = [];
|
|
135
|
+
try {
|
|
136
|
+
const entries = readdirSync(dir, { withFileTypes: true });
|
|
137
|
+
for (const entry of entries) {
|
|
138
|
+
const fullPath = join(dir, entry.name);
|
|
139
|
+
if (entry.isDirectory()) {
|
|
140
|
+
// Skip hidden directories
|
|
141
|
+
if (!entry.name.startsWith('.')) {
|
|
142
|
+
const subFiles = await findMarkdownFiles(fullPath);
|
|
143
|
+
files.push(...subFiles);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
147
|
+
files.push(fullPath);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
logger.warn(`[Obsidian] Failed to read directory ${dir}: ${error}`);
|
|
153
|
+
}
|
|
154
|
+
return files;
|
|
93
155
|
}
|
|
94
156
|
//# sourceMappingURL=obsidian-vault.js.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse embedding from various storage formats.
|
|
3
|
+
* Converted from 4 locations: hybrid-search.ts, consolidation.ts, memories.ts, entity-deduplicator.ts
|
|
4
|
+
*
|
|
5
|
+
* @param embeddingData - Input in Float32Array, Buffer, Uint8Array, JSON string, or Array format
|
|
6
|
+
* @returns Array of numbers or null if parsing fails
|
|
7
|
+
*/
|
|
8
|
+
export declare function parseEmbedding(embeddingData: unknown): number[] | null;
|
|
9
|
+
//# sourceMappingURL=parse-embedding.d.ts.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse embedding from various storage formats.
|
|
3
|
+
* Converted from 4 locations: hybrid-search.ts, consolidation.ts, memories.ts, entity-deduplicator.ts
|
|
4
|
+
*
|
|
5
|
+
* @param embeddingData - Input in Float32Array, Buffer, Uint8Array, JSON string, or Array format
|
|
6
|
+
* @returns Array of numbers or null if parsing fails
|
|
7
|
+
*/
|
|
8
|
+
export function parseEmbedding(embeddingData) {
|
|
9
|
+
if (!embeddingData)
|
|
10
|
+
return null;
|
|
11
|
+
// Handle Array directly (most common case)
|
|
12
|
+
if (Array.isArray(embeddingData)) {
|
|
13
|
+
return embeddingData;
|
|
14
|
+
}
|
|
15
|
+
// Handle Float32Array directly
|
|
16
|
+
if (embeddingData instanceof Float32Array) {
|
|
17
|
+
return Array.from(embeddingData);
|
|
18
|
+
}
|
|
19
|
+
// Handle Uint8Array and Buffer - try JSON first, then binary Float32
|
|
20
|
+
if (embeddingData instanceof Uint8Array || Buffer.isBuffer(embeddingData)) {
|
|
21
|
+
// Try to parse as JSON string first
|
|
22
|
+
try {
|
|
23
|
+
const json = JSON.parse(embeddingData.toString());
|
|
24
|
+
if (Array.isArray(json)) {
|
|
25
|
+
return json;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// Not JSON, try binary Float32
|
|
30
|
+
}
|
|
31
|
+
// Try to parse as binary Float32Array
|
|
32
|
+
try {
|
|
33
|
+
const buffer = embeddingData.buffer;
|
|
34
|
+
const arrayBuffer = buffer instanceof ArrayBuffer
|
|
35
|
+
? buffer
|
|
36
|
+
: buffer;
|
|
37
|
+
const floatArray = new Float32Array(arrayBuffer);
|
|
38
|
+
return Array.from(floatArray);
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Handle JSON string
|
|
45
|
+
if (typeof embeddingData === 'string') {
|
|
46
|
+
try {
|
|
47
|
+
const parsed = JSON.parse(embeddingData);
|
|
48
|
+
if (Array.isArray(parsed)) {
|
|
49
|
+
return parsed;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=parse-embedding.js.map
|
|
@@ -25,13 +25,7 @@ export declare const memoryIdSchema: z.ZodString;
|
|
|
25
25
|
export declare const paginationSchema: z.ZodObject<{
|
|
26
26
|
limit: z.ZodDefault<z.ZodNumber>;
|
|
27
27
|
offset: z.ZodDefault<z.ZodNumber>;
|
|
28
|
-
},
|
|
29
|
-
limit: number;
|
|
30
|
-
offset: number;
|
|
31
|
-
}, {
|
|
32
|
-
limit?: number | undefined;
|
|
33
|
-
offset?: number | undefined;
|
|
34
|
-
}>;
|
|
28
|
+
}, z.core.$strip>;
|
|
35
29
|
/**
|
|
36
30
|
* Search query schema: non-empty string
|
|
37
31
|
*/
|
|
@@ -39,11 +33,24 @@ export declare const searchQuerySchema: z.ZodString;
|
|
|
39
33
|
/**
|
|
40
34
|
* Memory type schema
|
|
41
35
|
*/
|
|
42
|
-
export declare const memoryTypeSchema: z.ZodEnum<
|
|
36
|
+
export declare const memoryTypeSchema: z.ZodEnum<{
|
|
37
|
+
observation: "observation";
|
|
38
|
+
fact: "fact";
|
|
39
|
+
decision: "decision";
|
|
40
|
+
context: "context";
|
|
41
|
+
preference: "preference";
|
|
42
|
+
note: "note";
|
|
43
|
+
}>;
|
|
43
44
|
/**
|
|
44
45
|
* Association type schema
|
|
45
46
|
*/
|
|
46
|
-
export declare const associationTypeSchema: z.ZodEnum<
|
|
47
|
+
export declare const associationTypeSchema: z.ZodEnum<{
|
|
48
|
+
supersedes: "supersedes";
|
|
49
|
+
contradicts: "contradicts";
|
|
50
|
+
supports: "supports";
|
|
51
|
+
relates_to: "relates_to";
|
|
52
|
+
duplicate: "duplicate";
|
|
53
|
+
}>;
|
|
47
54
|
/**
|
|
48
55
|
* Weight schema: number between 0 and 1
|
|
49
56
|
*/
|
|
@@ -51,15 +58,30 @@ export declare const weightSchema: z.ZodNumber;
|
|
|
51
58
|
/**
|
|
52
59
|
* Learning type schema
|
|
53
60
|
*/
|
|
54
|
-
export declare const learningTypeSchema: z.ZodEnum<
|
|
61
|
+
export declare const learningTypeSchema: z.ZodEnum<{
|
|
62
|
+
observation: "observation";
|
|
63
|
+
success: "success";
|
|
64
|
+
failure: "failure";
|
|
65
|
+
fix: "fix";
|
|
66
|
+
}>;
|
|
55
67
|
/**
|
|
56
68
|
* Observation type schema
|
|
57
69
|
*/
|
|
58
|
-
export declare const observationTypeSchema: z.ZodEnum<
|
|
70
|
+
export declare const observationTypeSchema: z.ZodEnum<{
|
|
71
|
+
error: "error";
|
|
72
|
+
insight: "insight";
|
|
73
|
+
pattern: "pattern";
|
|
74
|
+
tool_use: "tool_use";
|
|
75
|
+
file_change: "file_change";
|
|
76
|
+
}>;
|
|
59
77
|
/**
|
|
60
78
|
* Confidence level schema
|
|
61
79
|
*/
|
|
62
|
-
export declare const confidenceLevelSchema: z.ZodEnum<
|
|
80
|
+
export declare const confidenceLevelSchema: z.ZodEnum<{
|
|
81
|
+
certain: "certain";
|
|
82
|
+
speculative: "speculative";
|
|
83
|
+
outdated: "outdated";
|
|
84
|
+
}>;
|
|
63
85
|
/**
|
|
64
86
|
* Search input schema (common for search operations)
|
|
65
87
|
*/
|
|
@@ -68,20 +90,15 @@ export declare const searchInputSchema: z.ZodObject<{
|
|
|
68
90
|
limit: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
69
91
|
offset: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
70
92
|
project: z.ZodOptional<z.ZodString>;
|
|
71
|
-
type: z.ZodOptional<z.ZodEnum<
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
project?: string | undefined;
|
|
81
|
-
type?: "observation" | "fact" | "decision" | "context" | "preference" | "note" | undefined;
|
|
82
|
-
limit?: number | undefined;
|
|
83
|
-
offset?: number | undefined;
|
|
84
|
-
}>;
|
|
93
|
+
type: z.ZodOptional<z.ZodEnum<{
|
|
94
|
+
observation: "observation";
|
|
95
|
+
fact: "fact";
|
|
96
|
+
decision: "decision";
|
|
97
|
+
context: "context";
|
|
98
|
+
preference: "preference";
|
|
99
|
+
note: "note";
|
|
100
|
+
}>>;
|
|
101
|
+
}, z.core.$strip>;
|
|
85
102
|
/**
|
|
86
103
|
* Memory recall schema
|
|
87
104
|
*/
|
|
@@ -89,41 +106,27 @@ export declare const recallInputSchema: z.ZodObject<{
|
|
|
89
106
|
memoryId: z.ZodString;
|
|
90
107
|
limit: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
91
108
|
project: z.ZodOptional<z.ZodString>;
|
|
92
|
-
},
|
|
93
|
-
memoryId: string;
|
|
94
|
-
project?: string | undefined;
|
|
95
|
-
limit?: number | undefined;
|
|
96
|
-
}, {
|
|
97
|
-
memoryId: string;
|
|
98
|
-
project?: string | undefined;
|
|
99
|
-
limit?: number | undefined;
|
|
100
|
-
}>;
|
|
109
|
+
}, z.core.$strip>;
|
|
101
110
|
/**
|
|
102
111
|
* Tag operation schema
|
|
103
112
|
*/
|
|
104
113
|
export declare const tagOperationSchema: z.ZodObject<{
|
|
105
|
-
action: z.ZodEnum<
|
|
114
|
+
action: z.ZodEnum<{
|
|
115
|
+
add: "add";
|
|
116
|
+
remove: "remove";
|
|
117
|
+
}>;
|
|
106
118
|
tag: z.ZodString;
|
|
107
119
|
search: z.ZodOptional<z.ZodString>;
|
|
108
120
|
olderThan: z.ZodOptional<z.ZodString>;
|
|
109
|
-
type: z.ZodOptional<z.ZodEnum<
|
|
121
|
+
type: z.ZodOptional<z.ZodEnum<{
|
|
122
|
+
observation: "observation";
|
|
123
|
+
fact: "fact";
|
|
124
|
+
decision: "decision";
|
|
125
|
+
context: "context";
|
|
126
|
+
preference: "preference";
|
|
127
|
+
note: "note";
|
|
128
|
+
}>>;
|
|
110
129
|
limit: z.ZodOptional<z.ZodDefault<z.ZodNumber>>;
|
|
111
130
|
project: z.ZodOptional<z.ZodString>;
|
|
112
|
-
},
|
|
113
|
-
action: "add" | "remove";
|
|
114
|
-
tag: string;
|
|
115
|
-
search?: string | undefined;
|
|
116
|
-
project?: string | undefined;
|
|
117
|
-
type?: "observation" | "fact" | "decision" | "context" | "preference" | "note" | undefined;
|
|
118
|
-
limit?: number | undefined;
|
|
119
|
-
olderThan?: string | undefined;
|
|
120
|
-
}, {
|
|
121
|
-
action: "add" | "remove";
|
|
122
|
-
tag: string;
|
|
123
|
-
search?: string | undefined;
|
|
124
|
-
project?: string | undefined;
|
|
125
|
-
type?: "observation" | "fact" | "decision" | "context" | "preference" | "note" | undefined;
|
|
126
|
-
limit?: number | undefined;
|
|
127
|
-
olderThan?: string | undefined;
|
|
128
|
-
}>;
|
|
131
|
+
}, z.core.$strip>;
|
|
129
132
|
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared type definitions for Squish Memory system
|
|
3
|
+
* Consolidated from core/memory/memories.ts and core/memory/normalization.ts
|
|
4
|
+
*/
|
|
5
|
+
export type MemoryType = 'observation' | 'fact' | 'decision' | 'context' | 'preference' | 'note' | 'task';
|
|
6
|
+
/**
|
|
7
|
+
* Confidence level for memory records
|
|
8
|
+
* - certain: High confidence, verified information
|
|
9
|
+
* - speculative: Low confidence, unverified or uncertain
|
|
10
|
+
* - outdated: Information that may no longer be accurate
|
|
11
|
+
*/
|
|
12
|
+
export type ConfidenceLevel = 'certain' | 'speculative' | 'outdated';
|
|
13
|
+
/**
|
|
14
|
+
* Unified MemoryRecord interface
|
|
15
|
+
* Used across memories.ts and normalization.ts
|
|
16
|
+
*
|
|
17
|
+
* Note: type is string to avoid circular dependency with memories.ts
|
|
18
|
+
* Use MemoryType for type checking when needed
|
|
19
|
+
*/
|
|
20
|
+
export interface MemoryRecord {
|
|
21
|
+
id: string;
|
|
22
|
+
projectId?: string | null;
|
|
23
|
+
type: string;
|
|
24
|
+
content: string;
|
|
25
|
+
summary?: string | null;
|
|
26
|
+
tags: string[];
|
|
27
|
+
metadata?: Record<string, unknown> | null;
|
|
28
|
+
createdAt?: string | null;
|
|
29
|
+
validFrom?: string | null;
|
|
30
|
+
validTo?: string | null;
|
|
31
|
+
recordedAt?: string | null;
|
|
32
|
+
similarity?: number;
|
|
33
|
+
importance?: number;
|
|
34
|
+
confidenceLevel?: ConfidenceLevel | null;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Result of a safety check
|
|
38
|
+
* Used to determine if a merge action can proceed
|
|
39
|
+
*/
|
|
40
|
+
export interface SafetyCheckResult {
|
|
41
|
+
passed: boolean;
|
|
42
|
+
warnings: string[];
|
|
43
|
+
blockers: string[];
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=types.d.ts.map
|
package/dist/core/lib/utils.d.ts
CHANGED
|
@@ -11,4 +11,8 @@ export declare function prepareEmbedding(embedding: number[] | null): {
|
|
|
11
11
|
embeddingJson?: string | null;
|
|
12
12
|
};
|
|
13
13
|
export declare function determineOverallStatus(dbStatus: string, redisOk: boolean): string;
|
|
14
|
+
export declare function parseDate(input: string): Date | null;
|
|
15
|
+
export declare function filterByDateRange<T extends {
|
|
16
|
+
createdAt?: string | null;
|
|
17
|
+
}>(items: T[], since?: string, until?: string): T[];
|
|
14
18
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/core/lib/utils.js
CHANGED
|
@@ -87,4 +87,59 @@ export function determineOverallStatus(dbStatus, redisOk) {
|
|
|
87
87
|
}
|
|
88
88
|
return 'error';
|
|
89
89
|
}
|
|
90
|
+
// Date parsing utilities - shared between CLI and MCP
|
|
91
|
+
// ============================================================================
|
|
92
|
+
export function parseDate(input) {
|
|
93
|
+
if (!input)
|
|
94
|
+
return null;
|
|
95
|
+
const now = new Date();
|
|
96
|
+
const lower = input.toLowerCase().trim();
|
|
97
|
+
// Direct date parse
|
|
98
|
+
const parsed = new Date(input);
|
|
99
|
+
if (!isNaN(parsed.getTime()))
|
|
100
|
+
return parsed;
|
|
101
|
+
// Relative parsing
|
|
102
|
+
const dayMatch = lower.match(/(\d+)\s*day/i);
|
|
103
|
+
const weekMatch = lower.match(/(\d+)\s*week/i);
|
|
104
|
+
const monthMatch = lower.match(/(\d+)\s*month/i);
|
|
105
|
+
if (lower === 'today') {
|
|
106
|
+
const d = new Date(now);
|
|
107
|
+
d.setHours(0, 0, 0, 0);
|
|
108
|
+
return d;
|
|
109
|
+
}
|
|
110
|
+
if (lower === 'yesterday')
|
|
111
|
+
return new Date(now.getTime() - 86400000);
|
|
112
|
+
if (lower === 'thisweek' || lower === 'this week') {
|
|
113
|
+
const d = new Date(now);
|
|
114
|
+
d.setDate(d.getDate() - d.getDay());
|
|
115
|
+
d.setHours(0, 0, 0, 0);
|
|
116
|
+
return d;
|
|
117
|
+
}
|
|
118
|
+
if (lower === 'lastweek' || lower === 'last week') {
|
|
119
|
+
const d = new Date(now);
|
|
120
|
+
d.setDate(d.getDate() - d.getDay() - 7);
|
|
121
|
+
return d;
|
|
122
|
+
}
|
|
123
|
+
if (dayMatch)
|
|
124
|
+
return new Date(now.getTime() - parseInt(dayMatch[1]) * 86400000);
|
|
125
|
+
if (weekMatch)
|
|
126
|
+
return new Date(now.getTime() - parseInt(weekMatch[1]) * 604800000);
|
|
127
|
+
if (monthMatch)
|
|
128
|
+
return new Date(now.getTime() - parseInt(monthMatch[1]) * 2592000000);
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
export function filterByDateRange(items, since, until) {
|
|
132
|
+
const sinceDate = parseDate(since || '');
|
|
133
|
+
const untilDate = parseDate(until || '');
|
|
134
|
+
return items.filter(item => {
|
|
135
|
+
if (!item.createdAt)
|
|
136
|
+
return true;
|
|
137
|
+
const created = new Date(item.createdAt);
|
|
138
|
+
if (sinceDate && created < sinceDate)
|
|
139
|
+
return false;
|
|
140
|
+
if (untilDate && created > untilDate)
|
|
141
|
+
return false;
|
|
142
|
+
return true;
|
|
143
|
+
});
|
|
144
|
+
}
|
|
90
145
|
//# sourceMappingURL=utils.js.map
|
package/dist/core/lifecycle.d.ts
CHANGED
package/dist/core/lifecycle.js
CHANGED
|
@@ -17,13 +17,14 @@ import { triggerTierChange, triggerDecayApplied } from './memory/hooks.js';
|
|
|
17
17
|
/**
|
|
18
18
|
* Default decay intervals by sector (days until decay check)
|
|
19
19
|
* These determine how often memories in each sector are evaluated for decay
|
|
20
|
+
* Can be configured via config.sectorDecayIntervals
|
|
20
21
|
*/
|
|
21
22
|
const SECTOR_DECAY_INTERVAL_DAYS = {
|
|
22
|
-
episodic: 30,
|
|
23
|
-
semantic: 90,
|
|
24
|
-
procedural: 180,
|
|
25
|
-
autobiographical: 365,
|
|
26
|
-
working: 7,
|
|
23
|
+
episodic: config.sectorDecayIntervals?.episodic || 30,
|
|
24
|
+
semantic: config.sectorDecayIntervals?.semantic || 90,
|
|
25
|
+
procedural: config.sectorDecayIntervals?.procedural || 180,
|
|
26
|
+
autobiographical: config.sectorDecayIntervals?.autobiographical || 365,
|
|
27
|
+
working: config.sectorDecayIntervals?.working || 7,
|
|
27
28
|
};
|
|
28
29
|
/**
|
|
29
30
|
* Default decay rates by memory type (percentage per decay cycle)
|
|
@@ -40,7 +41,6 @@ const DEFAULT_DECAY_RATES = {
|
|
|
40
41
|
};
|
|
41
42
|
const TIER_THRESHOLDS = {
|
|
42
43
|
hot: { recency: 7, coactivation: 10, salience: 70 },
|
|
43
|
-
warm: { recency: 30, coactivation: 5, salience: 50 },
|
|
44
44
|
cold: { recency: Infinity, coactivation: 0, salience: 0 },
|
|
45
45
|
};
|
|
46
46
|
/**
|
|
@@ -48,13 +48,13 @@ const TIER_THRESHOLDS = {
|
|
|
48
48
|
*/
|
|
49
49
|
export async function runLifecycleMaintenance(projectId) {
|
|
50
50
|
if (!config.lifecycleEnabled) {
|
|
51
|
-
return { decayed: 0, evicted: 0, promoted: 0, tierChanges: { hot: 0,
|
|
51
|
+
return { decayed: 0, evicted: 0, promoted: 0, tierChanges: { hot: 0, cold: 0 }, expired: 0 };
|
|
52
52
|
}
|
|
53
53
|
const stats = {
|
|
54
54
|
decayed: 0,
|
|
55
55
|
evicted: 0,
|
|
56
56
|
promoted: 0,
|
|
57
|
-
tierChanges: { hot: 0,
|
|
57
|
+
tierChanges: { hot: 0, cold: 0 },
|
|
58
58
|
expired: 0,
|
|
59
59
|
};
|
|
60
60
|
try {
|
|
@@ -187,9 +187,9 @@ async function updateTiers(projectId, stats) {
|
|
|
187
187
|
.from(schema.memories)
|
|
188
188
|
.where(where)
|
|
189
189
|
.limit(10000); // Process larger batches now
|
|
190
|
-
// Calculate tiers in memory
|
|
190
|
+
// Calculate tiers in memory (simplified: hot or cold only)
|
|
191
191
|
const tierAssignments = new Map();
|
|
192
|
-
const tierCounts = { hot: 0,
|
|
192
|
+
const tierCounts = { hot: 0, cold: 0 };
|
|
193
193
|
for (const memory of memories) {
|
|
194
194
|
const recencyDays = (now.getTime() - new Date(memory.createdAt).getTime()) / (24 * 60 * 60 * 1000);
|
|
195
195
|
const coactivation = memory.coactivationScore || 0;
|
|
@@ -200,11 +200,6 @@ async function updateTiers(projectId, stats) {
|
|
|
200
200
|
salience >= TIER_THRESHOLDS.hot.salience) {
|
|
201
201
|
newTier = 'hot';
|
|
202
202
|
}
|
|
203
|
-
else if (recencyDays <= TIER_THRESHOLDS.warm.recency &&
|
|
204
|
-
coactivation >= TIER_THRESHOLDS.warm.coactivation &&
|
|
205
|
-
salience >= TIER_THRESHOLDS.warm.salience) {
|
|
206
|
-
newTier = 'warm';
|
|
207
|
-
}
|
|
208
203
|
if (newTier !== memory.tier) {
|
|
209
204
|
tierAssignments.set(memory.id, newTier);
|
|
210
205
|
tierCounts[newTier]++;
|
|
@@ -216,9 +211,6 @@ async function updateTiers(projectId, stats) {
|
|
|
216
211
|
const hotIds = Array.from(tierAssignments.entries())
|
|
217
212
|
.filter(([_, tier]) => tier === 'hot')
|
|
218
213
|
.map(([id]) => id);
|
|
219
|
-
const warmIds = Array.from(tierAssignments.entries())
|
|
220
|
-
.filter(([_, tier]) => tier === 'warm')
|
|
221
|
-
.map(([id]) => id);
|
|
222
214
|
const coldIds = Array.from(tierAssignments.entries())
|
|
223
215
|
.filter(([_, tier]) => tier === 'cold')
|
|
224
216
|
.map(([id]) => id);
|
|
@@ -229,11 +221,11 @@ async function updateTiers(projectId, stats) {
|
|
|
229
221
|
.set({ tier: 'hot', updatedAt: now })
|
|
230
222
|
.where(inArray(schema.memories.id, hotIds));
|
|
231
223
|
}
|
|
232
|
-
if (
|
|
224
|
+
if (coldIds.length > 0) {
|
|
233
225
|
await db
|
|
234
226
|
.update(schema.memories)
|
|
235
|
-
.set({ tier: '
|
|
236
|
-
.where(inArray(schema.memories.id,
|
|
227
|
+
.set({ tier: 'cold', updatedAt: now })
|
|
228
|
+
.where(inArray(schema.memories.id, coldIds));
|
|
237
229
|
}
|
|
238
230
|
if (coldIds.length > 0) {
|
|
239
231
|
await db
|
|
@@ -268,11 +260,9 @@ async function updateTiers(projectId, stats) {
|
|
|
268
260
|
}
|
|
269
261
|
// Update stats
|
|
270
262
|
stats.tierChanges.hot = tierCounts.hot;
|
|
271
|
-
stats.tierChanges.warm = tierCounts.warm;
|
|
272
263
|
stats.tierChanges.cold = tierCounts.cold;
|
|
273
264
|
logger.debug('Tier updates complete', {
|
|
274
265
|
hot: tierCounts.hot,
|
|
275
|
-
warm: tierCounts.warm,
|
|
276
266
|
cold: tierCounts.cold,
|
|
277
267
|
});
|
|
278
268
|
}
|
package/dist/core/logger.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ declare class Logger {
|
|
|
6
6
|
private debugEnabled;
|
|
7
7
|
constructor(prefix?: string);
|
|
8
8
|
private format;
|
|
9
|
+
private isQuiet;
|
|
9
10
|
info(message: string, context?: LogContext): void;
|
|
10
11
|
warn(message: string, context?: LogContext): void;
|
|
11
12
|
error(message: string, error?: Error | any, context?: LogContext): void;
|
package/dist/core/logger.js
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
function isQuietMode() {
|
|
2
|
-
return process.env.SQUISH_QUIET !== 'false' &&
|
|
3
|
-
process.env.DEBUG !== 'true' &&
|
|
4
|
-
process.env.DEBUG !== '1';
|
|
5
|
-
}
|
|
6
1
|
class Logger {
|
|
7
2
|
prefix;
|
|
8
3
|
debugEnabled;
|
|
@@ -15,14 +10,25 @@ class Logger {
|
|
|
15
10
|
const ctx = context ? ` ${JSON.stringify(context)}` : '';
|
|
16
11
|
return `[${this.prefix}:${level}] ${message}${ctx}`;
|
|
17
12
|
}
|
|
13
|
+
isQuiet() {
|
|
14
|
+
return process.env.SQUISH_QUIET === 'true' || process.env.SQUISH_QUIET === '1';
|
|
15
|
+
}
|
|
18
16
|
info(message, context) {
|
|
19
|
-
if (
|
|
20
|
-
|
|
17
|
+
if (this.isQuiet()) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
console.error(this.format('info', message, context));
|
|
21
21
|
}
|
|
22
22
|
warn(message, context) {
|
|
23
|
+
if (this.isQuiet()) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
23
26
|
console.error(this.format('warn', message, context));
|
|
24
27
|
}
|
|
25
28
|
error(message, error, context) {
|
|
29
|
+
if (this.isQuiet()) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
26
32
|
const errorMsg = error instanceof Error ? error.message : error;
|
|
27
33
|
const ctx = { ...context, error: errorMsg };
|
|
28
34
|
console.error(this.format('error', message, ctx));
|
|
@@ -31,7 +37,7 @@ class Logger {
|
|
|
31
37
|
}
|
|
32
38
|
}
|
|
33
39
|
debug(message, context) {
|
|
34
|
-
if (this.debugEnabled) {
|
|
40
|
+
if (this.debugEnabled && !this.isQuiet()) {
|
|
35
41
|
console.error(this.format('debug', message, context));
|
|
36
42
|
}
|
|
37
43
|
}
|
package/dist/core/mcp/tools.d.ts
CHANGED
|
@@ -2,8 +2,6 @@ import { MCPToolDefinition } from './types.js';
|
|
|
2
2
|
export declare const squishSearchTool: MCPToolDefinition;
|
|
3
3
|
export declare const squishRememberTool: MCPToolDefinition;
|
|
4
4
|
export declare const squishRecallTool: MCPToolDefinition;
|
|
5
|
-
export declare const squishEmbedTool: MCPToolDefinition;
|
|
6
|
-
export declare const squishQMDSearchTool: MCPToolDefinition;
|
|
7
5
|
export declare const squishHealthTool: MCPToolDefinition;
|
|
8
6
|
export declare function getAllSquishTools(): MCPToolDefinition[];
|
|
9
7
|
//# sourceMappingURL=tools.d.ts.map
|