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,37 +0,0 @@
|
|
|
1
|
-
export interface ConsolidationStats {
|
|
2
|
-
clustered: number;
|
|
3
|
-
merged: number;
|
|
4
|
-
tokensRecovered: number;
|
|
5
|
-
deduped: number;
|
|
6
|
-
consolidated: number;
|
|
7
|
-
}
|
|
8
|
-
export interface DeduplicationResult {
|
|
9
|
-
duplicatesFound: number;
|
|
10
|
-
mergedCount: number;
|
|
11
|
-
tokensRecovered: number;
|
|
12
|
-
groups: DuplicateGroup[];
|
|
13
|
-
}
|
|
14
|
-
export interface DuplicateGroup {
|
|
15
|
-
canonicalId: string;
|
|
16
|
-
duplicateIds: string[];
|
|
17
|
-
similarity: number;
|
|
18
|
-
reason: string;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Run automated deduplication job
|
|
22
|
-
* Finds and marks duplicates for review or auto-merges high-confidence duplicates
|
|
23
|
-
*/
|
|
24
|
-
export declare function runDeduplicationJob(projectId?: string): Promise<DeduplicationResult>;
|
|
25
|
-
/**
|
|
26
|
-
* Run full consolidation job (dedup + memory consolidation)
|
|
27
|
-
*/
|
|
28
|
-
export declare function runFullConsolidationJob(projectId?: string): Promise<ConsolidationStats>;
|
|
29
|
-
/**
|
|
30
|
-
* Get deduplication statistics
|
|
31
|
-
*/
|
|
32
|
-
export declare function getDeduplicationStats(projectId?: string): Promise<{
|
|
33
|
-
totalMemories: number;
|
|
34
|
-
mergedMemories: number;
|
|
35
|
-
pendingDuplicates: number;
|
|
36
|
-
}>;
|
|
37
|
-
//# sourceMappingURL=consolidation.d.ts.map
|
|
@@ -1,248 +0,0 @@
|
|
|
1
|
-
// Memory Consolidation & Deduplication
|
|
2
|
-
import { eq, inArray, and } from 'drizzle-orm';
|
|
3
|
-
import { getDb } from '../db/index.js';
|
|
4
|
-
import { getSchema } from '../db/schema.js';
|
|
5
|
-
import { createAssociation } from './associations.js';
|
|
6
|
-
import { logger } from './logger.js';
|
|
7
|
-
import { consolidateMemories } from './memory/consolidation.js';
|
|
8
|
-
/**
|
|
9
|
-
* Run automated deduplication job
|
|
10
|
-
* Finds and marks duplicates for review or auto-merges high-confidence duplicates
|
|
11
|
-
*/
|
|
12
|
-
export async function runDeduplicationJob(projectId) {
|
|
13
|
-
const result = {
|
|
14
|
-
duplicatesFound: 0,
|
|
15
|
-
mergedCount: 0,
|
|
16
|
-
tokensRecovered: 0,
|
|
17
|
-
groups: [],
|
|
18
|
-
};
|
|
19
|
-
try {
|
|
20
|
-
const db = await getDb();
|
|
21
|
-
const schema = await getSchema();
|
|
22
|
-
// Get active memories for deduplication check
|
|
23
|
-
const whereClause = projectId
|
|
24
|
-
? and(eq(schema.memories.projectId, projectId), eq(schema.memories.status, 'active'))
|
|
25
|
-
: eq(schema.memories.status, 'active');
|
|
26
|
-
const memories = await db
|
|
27
|
-
.select()
|
|
28
|
-
.from(schema.memories)
|
|
29
|
-
.where(whereClause)
|
|
30
|
-
.limit(500);
|
|
31
|
-
if (memories.length < 2) {
|
|
32
|
-
return result;
|
|
33
|
-
}
|
|
34
|
-
// Find duplicate groups using SimHash
|
|
35
|
-
const duplicateGroups = await findDuplicatesBySimHash(memories);
|
|
36
|
-
result.duplicatesFound = duplicateGroups.reduce((sum, g) => sum + g.duplicateIds.length, 0);
|
|
37
|
-
// Auto-merge high-confidence duplicates (>0.95 similarity)
|
|
38
|
-
for (const group of duplicateGroups) {
|
|
39
|
-
if (group.similarity >= 0.95) {
|
|
40
|
-
const tokensSaved = await autoMergeDuplicates(group.canonicalId, group.duplicateIds);
|
|
41
|
-
result.mergedCount += group.duplicateIds.length;
|
|
42
|
-
result.tokensRecovered += tokensSaved;
|
|
43
|
-
}
|
|
44
|
-
else {
|
|
45
|
-
// Lower confidence - just create association for review
|
|
46
|
-
for (const dupId of group.duplicateIds) {
|
|
47
|
-
await createAssociation(group.canonicalId, dupId, 'duplicate', group.similarity);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
result.groups.push(group);
|
|
51
|
-
}
|
|
52
|
-
logger.info('Deduplication job completed', {
|
|
53
|
-
duplicatesFound: result.duplicatesFound,
|
|
54
|
-
mergedCount: result.mergedCount,
|
|
55
|
-
tokensRecovered: result.tokensRecovered,
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
logger.error('Deduplication job error', error);
|
|
60
|
-
}
|
|
61
|
-
return result;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Find duplicates using SimHash (efficient near-duplicate detection)
|
|
65
|
-
*/
|
|
66
|
-
async function findDuplicatesBySimHash(memories) {
|
|
67
|
-
const groups = [];
|
|
68
|
-
const processed = new Set();
|
|
69
|
-
// Compute SimHash for each memory
|
|
70
|
-
const hashes = memories.map(m => ({
|
|
71
|
-
id: m.id,
|
|
72
|
-
hash: computeSimHash(m.content),
|
|
73
|
-
content: m.content,
|
|
74
|
-
createdAt: m.createdAt,
|
|
75
|
-
}));
|
|
76
|
-
// Compare hashes to find similar content
|
|
77
|
-
for (let i = 0; i < hashes.length; i++) {
|
|
78
|
-
if (processed.has(hashes[i].id))
|
|
79
|
-
continue;
|
|
80
|
-
const duplicates = [];
|
|
81
|
-
let maxSimilarity = 0;
|
|
82
|
-
for (let j = i + 1; j < hashes.length; j++) {
|
|
83
|
-
if (processed.has(hashes[j].id))
|
|
84
|
-
continue;
|
|
85
|
-
const hammingDistance = computeHammingDistance(hashes[i].hash, hashes[j].hash);
|
|
86
|
-
const similarity = 1 - (hammingDistance / 64); // 64-bit hash
|
|
87
|
-
if (similarity >= 0.85) {
|
|
88
|
-
duplicates.push(hashes[j].id);
|
|
89
|
-
maxSimilarity = Math.max(maxSimilarity, similarity);
|
|
90
|
-
processed.add(hashes[j].id);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
if (duplicates.length > 0) {
|
|
94
|
-
processed.add(hashes[i].id);
|
|
95
|
-
groups.push({
|
|
96
|
-
canonicalId: hashes[i].id, // Keep oldest as canonical
|
|
97
|
-
duplicateIds: duplicates,
|
|
98
|
-
similarity: maxSimilarity,
|
|
99
|
-
reason: 'content-similarity',
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
return groups;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Compute SimHash for text (64-bit fingerprint)
|
|
107
|
-
*/
|
|
108
|
-
function computeSimHash(text) {
|
|
109
|
-
const tokens = text.toLowerCase().split(/\s+/).filter(t => t.length > 2);
|
|
110
|
-
const weights = new Array(64).fill(0);
|
|
111
|
-
for (const token of tokens) {
|
|
112
|
-
const hash = simpleHash(token);
|
|
113
|
-
for (let i = 0; i < 64; i++) {
|
|
114
|
-
if ((hash >> BigInt(i)) & 1n) {
|
|
115
|
-
weights[i] += 1;
|
|
116
|
-
}
|
|
117
|
-
else {
|
|
118
|
-
weights[i] -= 1;
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
let simHash = 0n;
|
|
123
|
-
for (let i = 0; i < 64; i++) {
|
|
124
|
-
if (weights[i] > 0) {
|
|
125
|
-
simHash |= (1n << BigInt(i));
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return simHash;
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* Simple hash function for strings
|
|
132
|
-
*/
|
|
133
|
-
function simpleHash(str) {
|
|
134
|
-
let hash = 0n;
|
|
135
|
-
for (let i = 0; i < str.length; i++) {
|
|
136
|
-
const char = BigInt(str.charCodeAt(i));
|
|
137
|
-
hash = ((hash << 5n) - hash) + char;
|
|
138
|
-
hash = hash & hash; // Convert to 64bit integer
|
|
139
|
-
}
|
|
140
|
-
return hash;
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Compute Hamming distance between two hashes
|
|
144
|
-
*/
|
|
145
|
-
function computeHammingDistance(a, b) {
|
|
146
|
-
let xor = a ^ b;
|
|
147
|
-
let distance = 0;
|
|
148
|
-
while (xor !== 0n) {
|
|
149
|
-
distance += Number(xor & 1n);
|
|
150
|
-
xor >>= 1n;
|
|
151
|
-
}
|
|
152
|
-
return distance;
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Auto-merge duplicates into canonical memory
|
|
156
|
-
*/
|
|
157
|
-
async function autoMergeDuplicates(canonicalId, duplicateIds) {
|
|
158
|
-
try {
|
|
159
|
-
const db = await getDb();
|
|
160
|
-
const schema = await getSchema();
|
|
161
|
-
const now = new Date();
|
|
162
|
-
// Calculate tokens recovered
|
|
163
|
-
const duplicates = await db
|
|
164
|
-
.select()
|
|
165
|
-
.from(schema.memories)
|
|
166
|
-
.where(inArray(schema.memories.id, duplicateIds));
|
|
167
|
-
let tokensRecovered = 0;
|
|
168
|
-
for (const dup of duplicates) {
|
|
169
|
-
tokensRecovered += Math.ceil((dup.content?.length || 0) / 4);
|
|
170
|
-
}
|
|
171
|
-
// Mark duplicates as merged
|
|
172
|
-
await db
|
|
173
|
-
.update(schema.memories)
|
|
174
|
-
.set({
|
|
175
|
-
status: 'merged',
|
|
176
|
-
mergedInto: canonicalId,
|
|
177
|
-
mergedAt: now,
|
|
178
|
-
updatedAt: now,
|
|
179
|
-
})
|
|
180
|
-
.where(inArray(schema.memories.id, duplicateIds));
|
|
181
|
-
// Create associations for traceability
|
|
182
|
-
for (const dupId of duplicateIds) {
|
|
183
|
-
await createAssociation(canonicalId, dupId, 'merged', 0.95);
|
|
184
|
-
}
|
|
185
|
-
return tokensRecovered;
|
|
186
|
-
}
|
|
187
|
-
catch (error) {
|
|
188
|
-
logger.error('Error auto-merging duplicates', error);
|
|
189
|
-
return 0;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Run full consolidation job (dedup + memory consolidation)
|
|
194
|
-
*/
|
|
195
|
-
export async function runFullConsolidationJob(projectId) {
|
|
196
|
-
const stats = {
|
|
197
|
-
clustered: 0,
|
|
198
|
-
merged: 0,
|
|
199
|
-
tokensRecovered: 0,
|
|
200
|
-
deduped: 0,
|
|
201
|
-
consolidated: 0,
|
|
202
|
-
};
|
|
203
|
-
// Run deduplication first
|
|
204
|
-
const dedupResult = await runDeduplicationJob(projectId);
|
|
205
|
-
stats.deduped = dedupResult.duplicatesFound;
|
|
206
|
-
stats.merged = dedupResult.mergedCount;
|
|
207
|
-
stats.tokensRecovered += dedupResult.tokensRecovered;
|
|
208
|
-
// Run memory consolidation for each project
|
|
209
|
-
if (projectId) {
|
|
210
|
-
const consolidationResults = await consolidateMemories({
|
|
211
|
-
projectId,
|
|
212
|
-
minAge: 60,
|
|
213
|
-
maxImportance: 25,
|
|
214
|
-
minClusterSize: 3,
|
|
215
|
-
limit: 100,
|
|
216
|
-
});
|
|
217
|
-
stats.consolidated = consolidationResults.length;
|
|
218
|
-
stats.clustered = consolidationResults.reduce((sum, r) => sum + r.clusterSize, 0);
|
|
219
|
-
}
|
|
220
|
-
logger.info('Full consolidation job completed', stats);
|
|
221
|
-
return stats;
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Get deduplication statistics
|
|
225
|
-
*/
|
|
226
|
-
export async function getDeduplicationStats(projectId) {
|
|
227
|
-
try {
|
|
228
|
-
const db = await getDb();
|
|
229
|
-
const schema = await getSchema();
|
|
230
|
-
const whereClause = projectId
|
|
231
|
-
? eq(schema.memories.projectId, projectId)
|
|
232
|
-
: undefined;
|
|
233
|
-
const memories = await db
|
|
234
|
-
.select()
|
|
235
|
-
.from(schema.memories)
|
|
236
|
-
.where(whereClause);
|
|
237
|
-
return {
|
|
238
|
-
totalMemories: memories.length,
|
|
239
|
-
mergedMemories: memories.filter((m) => m.status === 'merged').length,
|
|
240
|
-
pendingDuplicates: 0, // Would need to query associations
|
|
241
|
-
};
|
|
242
|
-
}
|
|
243
|
-
catch (error) {
|
|
244
|
-
logger.error('Error getting deduplication stats', error);
|
|
245
|
-
return { totalMemories: 0, mergedMemories: 0, pendingDuplicates: 0 };
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
//# sourceMappingURL=consolidation.js.map
|
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent Context API - Direct access for agents
|
|
3
|
-
*
|
|
4
|
-
* Provides a simple API for agents to get context without CLI calls.
|
|
5
|
-
* Use this instead of spawning squish CLI processes.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* import { getAgentContext, searchWithPlace } from './core/context/agent-context.js';
|
|
9
|
-
*
|
|
10
|
-
* const context = await getAgentContext(projectPath, { task: "fix bug" });
|
|
11
|
-
* const results = await searchWithPlace(projectPath, "error fix", { limit: 5 });
|
|
12
|
-
*/
|
|
13
|
-
export interface AgentContextOptions {
|
|
14
|
-
/** Current task or action (helps auto-detect relevant place) */
|
|
15
|
-
task?: string;
|
|
16
|
-
/** Preferred tier: quick (50 tokens), medium (170), full (500) */
|
|
17
|
-
tier?: 'quick' | 'medium' | 'full';
|
|
18
|
-
/** Max memories to return */
|
|
19
|
-
limit?: number;
|
|
20
|
-
/** Include place context */
|
|
21
|
-
includePlaces?: boolean;
|
|
22
|
-
}
|
|
23
|
-
export interface SearchOptions {
|
|
24
|
-
/** Query string */
|
|
25
|
-
query: string;
|
|
26
|
-
/** Optional place filter */
|
|
27
|
-
place?: string;
|
|
28
|
-
/** Max results */
|
|
29
|
-
limit?: number;
|
|
30
|
-
/** Memory type filter */
|
|
31
|
-
type?: string;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Get agent context - the main function I can call directly
|
|
35
|
-
*
|
|
36
|
-
* Instead of: squish context --tier medium --has-memories
|
|
37
|
-
* Use: const ctx = await getAgentContext(projectPath, { task: "fix bug", tier: "medium" })
|
|
38
|
-
*/
|
|
39
|
-
export declare function getAgentContext(projectPath: string, options?: AgentContextOptions): Promise<{
|
|
40
|
-
ok: boolean;
|
|
41
|
-
memories: Array<{
|
|
42
|
-
id: string;
|
|
43
|
-
type: string;
|
|
44
|
-
content: string;
|
|
45
|
-
place?: string;
|
|
46
|
-
placeType?: string;
|
|
47
|
-
}>;
|
|
48
|
-
places: Array<{
|
|
49
|
-
name: string;
|
|
50
|
-
type: string;
|
|
51
|
-
purpose?: string;
|
|
52
|
-
memories: number;
|
|
53
|
-
preview?: string[];
|
|
54
|
-
}>;
|
|
55
|
-
sessionId?: string;
|
|
56
|
-
tokens?: number;
|
|
57
|
-
}>;
|
|
58
|
-
/**
|
|
59
|
-
* Search memories with automatic place detection
|
|
60
|
-
*
|
|
61
|
-
* If query contains keywords associated with a place (e.g., "fix" -> Workshop),
|
|
62
|
-
* it will automatically include that place in results or boost those results.
|
|
63
|
-
*/
|
|
64
|
-
export declare function searchWithPlace(projectPath: string, query: string, options?: SearchOptions): Promise<{
|
|
65
|
-
ok: boolean;
|
|
66
|
-
query: string;
|
|
67
|
-
autoDetectedPlace?: string;
|
|
68
|
-
count: number;
|
|
69
|
-
results: Array<{
|
|
70
|
-
id: string;
|
|
71
|
-
type: string;
|
|
72
|
-
content: string;
|
|
73
|
-
score: number;
|
|
74
|
-
place?: string;
|
|
75
|
-
placeType?: string;
|
|
76
|
-
}>;
|
|
77
|
-
}>;
|
|
78
|
-
/**
|
|
79
|
-
* Get single memory with place info
|
|
80
|
-
*/
|
|
81
|
-
export declare function getMemoryWithPlace(projectPath: string, memoryId: string): Promise<{
|
|
82
|
-
ok: boolean;
|
|
83
|
-
memory?: {
|
|
84
|
-
id: string;
|
|
85
|
-
type: string;
|
|
86
|
-
content: string;
|
|
87
|
-
tags: string[];
|
|
88
|
-
createdAt: Date;
|
|
89
|
-
place?: string;
|
|
90
|
-
placeType?: string;
|
|
91
|
-
};
|
|
92
|
-
}>;
|
|
93
|
-
/**
|
|
94
|
-
* Quick context for session start - lightweight version
|
|
95
|
-
* Use this when you just need the basics without full context
|
|
96
|
-
*/
|
|
97
|
-
export declare function getQuickContext(projectPath: string, limit?: number): Promise<{
|
|
98
|
-
ok: boolean;
|
|
99
|
-
memories: Array<{
|
|
100
|
-
id: string;
|
|
101
|
-
type: string;
|
|
102
|
-
content: string;
|
|
103
|
-
}>;
|
|
104
|
-
activePlaces: string[];
|
|
105
|
-
}>;
|
|
106
|
-
//# sourceMappingURL=agent-context.d.ts.map
|
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Agent Context API - Direct access for agents
|
|
3
|
-
*
|
|
4
|
-
* Provides a simple API for agents to get context without CLI calls.
|
|
5
|
-
* Use this instead of spawning squish CLI processes.
|
|
6
|
-
*
|
|
7
|
-
* Usage:
|
|
8
|
-
* import { getAgentContext, searchWithPlace } from './core/context/agent-context.js';
|
|
9
|
-
*
|
|
10
|
-
* const context = await getAgentContext(projectPath, { task: "fix bug" });
|
|
11
|
-
* const results = await searchWithPlace(projectPath, "error fix", { limit: 5 });
|
|
12
|
-
*/
|
|
13
|
-
import { getRecent, search } from '../memory/memories.js';
|
|
14
|
-
import { getProjectByPath } from '../projects.js';
|
|
15
|
-
import { ensureProject } from '../projects.js';
|
|
16
|
-
import { initializeDefaultPlaces, getProjectPlaces, getMemoryPlace, getPlace, walkPlace } from '../places/index.js';
|
|
17
|
-
import { logger } from '../logger.js';
|
|
18
|
-
/**
|
|
19
|
-
* Get agent context - the main function I can call directly
|
|
20
|
-
*
|
|
21
|
-
* Instead of: squish context --tier medium --has-memories
|
|
22
|
-
* Use: const ctx = await getAgentContext(projectPath, { task: "fix bug", tier: "medium" })
|
|
23
|
-
*/
|
|
24
|
-
export async function getAgentContext(projectPath, options = {}) {
|
|
25
|
-
try {
|
|
26
|
-
await ensureProject(projectPath);
|
|
27
|
-
const project = await getProjectByPath(projectPath);
|
|
28
|
-
if (!project) {
|
|
29
|
-
return { ok: false, memories: [], places: [] };
|
|
30
|
-
}
|
|
31
|
-
const tier = options.tier || 'medium';
|
|
32
|
-
const limit = options.limit || 5;
|
|
33
|
-
const includePlaces = options.includePlaces !== false;
|
|
34
|
-
// Get recent memories
|
|
35
|
-
const memories = await getRecent(projectPath, limit);
|
|
36
|
-
// Add place info to each memory
|
|
37
|
-
const memoriesWithPlace = await Promise.all(memories.map(async (m) => {
|
|
38
|
-
const placeId = await getMemoryPlace(m.id);
|
|
39
|
-
let placeInfo = {};
|
|
40
|
-
if (placeId) {
|
|
41
|
-
const place = await getPlace(placeId);
|
|
42
|
-
placeInfo = { place: place?.name || null, placeType: place?.placeType || null };
|
|
43
|
-
}
|
|
44
|
-
return {
|
|
45
|
-
id: m.id,
|
|
46
|
-
type: m.type,
|
|
47
|
-
content: m.content || m.content,
|
|
48
|
-
...placeInfo,
|
|
49
|
-
};
|
|
50
|
-
}));
|
|
51
|
-
// Get places context
|
|
52
|
-
let places = [];
|
|
53
|
-
if (includePlaces) {
|
|
54
|
-
await initializeDefaultPlaces(project.id);
|
|
55
|
-
const projectPlaces = await getProjectPlaces(project.id);
|
|
56
|
-
// Filter to populated places only
|
|
57
|
-
const populatedPlaces = projectPlaces.filter(p => p.memoryCount > 0);
|
|
58
|
-
if (tier === 'quick') {
|
|
59
|
-
// Just names
|
|
60
|
-
places = populatedPlaces.map(p => ({
|
|
61
|
-
name: p.name,
|
|
62
|
-
type: p.placeType,
|
|
63
|
-
memories: p.memoryCount,
|
|
64
|
-
}));
|
|
65
|
-
}
|
|
66
|
-
else if (tier === 'medium') {
|
|
67
|
-
// Top 3 per place
|
|
68
|
-
const mediumPlaces = [];
|
|
69
|
-
for (const p of populatedPlaces.slice(0, 5)) {
|
|
70
|
-
const walkResult = await walkPlace(project.id, p.placeType, {
|
|
71
|
-
tokenBudget: 170,
|
|
72
|
-
maxMemoriesPerPlace: 3,
|
|
73
|
-
compressWithToon: false,
|
|
74
|
-
});
|
|
75
|
-
mediumPlaces.push({
|
|
76
|
-
name: p.name,
|
|
77
|
-
type: p.placeType,
|
|
78
|
-
purpose: p.purpose,
|
|
79
|
-
memories: p.memoryCount,
|
|
80
|
-
preview: walkResult?.memories.slice(0, 3).map((m) => m.content?.substring(0, 80)) || [],
|
|
81
|
-
});
|
|
82
|
-
}
|
|
83
|
-
places = mediumPlaces;
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
// Full
|
|
87
|
-
places = populatedPlaces.map(p => ({
|
|
88
|
-
name: p.name,
|
|
89
|
-
type: p.placeType,
|
|
90
|
-
purpose: p.purpose,
|
|
91
|
-
memories: p.memoryCount,
|
|
92
|
-
}));
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
// Estimate token count
|
|
96
|
-
const tokens = tier === 'quick' ? 50 : tier === 'medium' ? 170 : 500;
|
|
97
|
-
return {
|
|
98
|
-
ok: true,
|
|
99
|
-
memories: memoriesWithPlace,
|
|
100
|
-
places,
|
|
101
|
-
tokens,
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
logger.error('[AgentContext] Error getting context:', error);
|
|
106
|
-
return { ok: false, memories: [], places: [] };
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Search memories with automatic place detection
|
|
111
|
-
*
|
|
112
|
-
* If query contains keywords associated with a place (e.g., "fix" -> Workshop),
|
|
113
|
-
* it will automatically include that place in results or boost those results.
|
|
114
|
-
*/
|
|
115
|
-
export async function searchWithPlace(projectPath, query, options = { query, limit: 10 }) {
|
|
116
|
-
try {
|
|
117
|
-
await ensureProject(projectPath);
|
|
118
|
-
const project = await getProjectByPath(projectPath);
|
|
119
|
-
if (!project) {
|
|
120
|
-
return { ok: false, query, count: 0, results: [] };
|
|
121
|
-
}
|
|
122
|
-
// Search
|
|
123
|
-
const results = await search({
|
|
124
|
-
query,
|
|
125
|
-
type: options.type,
|
|
126
|
-
limit: (options.limit || 10) * 2,
|
|
127
|
-
project: projectPath,
|
|
128
|
-
});
|
|
129
|
-
const limited = results.slice(0, options.limit || 10);
|
|
130
|
-
// Auto-detect place from query keywords
|
|
131
|
-
const autoPlace = detectPlaceFromQuery(query);
|
|
132
|
-
// Add place info to results
|
|
133
|
-
const resultsWithPlace = await Promise.all(limited.map(async (r) => {
|
|
134
|
-
const placeId = await getMemoryPlace(r.id);
|
|
135
|
-
let placeInfo = { place: null, placeType: null };
|
|
136
|
-
if (placeId) {
|
|
137
|
-
const place = await getPlace(placeId);
|
|
138
|
-
placeInfo = {
|
|
139
|
-
place: place?.name || null,
|
|
140
|
-
placeType: place?.placeType || null,
|
|
141
|
-
};
|
|
142
|
-
}
|
|
143
|
-
return {
|
|
144
|
-
id: r.id,
|
|
145
|
-
type: r.type,
|
|
146
|
-
content: r.content,
|
|
147
|
-
score: r.similarity ?? 0,
|
|
148
|
-
...placeInfo,
|
|
149
|
-
};
|
|
150
|
-
}));
|
|
151
|
-
// Filter by place if specified or auto-detected
|
|
152
|
-
let filtered = resultsWithPlace;
|
|
153
|
-
const placeFilter = options.place || autoPlace;
|
|
154
|
-
if (placeFilter) {
|
|
155
|
-
filtered = resultsWithPlace.filter((r) => r.placeType === placeFilter);
|
|
156
|
-
}
|
|
157
|
-
return {
|
|
158
|
-
ok: true,
|
|
159
|
-
query,
|
|
160
|
-
autoDetectedPlace: autoPlace || undefined,
|
|
161
|
-
count: filtered.length,
|
|
162
|
-
results: filtered,
|
|
163
|
-
};
|
|
164
|
-
}
|
|
165
|
-
catch (error) {
|
|
166
|
-
logger.error('[AgentContext] Error searching:', error);
|
|
167
|
-
return { ok: false, query, count: 0, results: [] };
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
/**
|
|
171
|
-
* Detect place type from query keywords
|
|
172
|
-
*
|
|
173
|
-
* Maps common terms to place types:
|
|
174
|
-
* - fix, bug, error, issue -> workshop (fixing stuff)
|
|
175
|
-
* - design, plan, architecture, api -> library (learning/docs)
|
|
176
|
-
* - task, todo, manage, organize -> office (work management)
|
|
177
|
-
* - code, implement, feature -> workshop
|
|
178
|
-
* - research, learn, study -> library
|
|
179
|
-
* - experiment, test, try -> lab
|
|
180
|
-
* - review, archive -> archive
|
|
181
|
-
*/
|
|
182
|
-
function detectPlaceFromQuery(query) {
|
|
183
|
-
const q = query.toLowerCase();
|
|
184
|
-
// Map keywords to places
|
|
185
|
-
const keywords = {
|
|
186
|
-
workshop: ['fix', 'bug', 'error', 'issue', 'code', 'implement', 'feature', 'refactor', 'debug'],
|
|
187
|
-
library: ['design', 'plan', 'architecture', 'api', 'learn', 'research', 'study', 'documentation', 'docs'],
|
|
188
|
-
office: ['task', 'todo', 'manage', 'organize', 'schedule', 'meeting', 'project'],
|
|
189
|
-
lab: ['test', 'experiment', 'try', 'verify', 'prototype', 'poc'],
|
|
190
|
-
garden: ['idea', 'brainstorm', 'create', 'design', 'concept'],
|
|
191
|
-
archive: ['review', 'archive', 'old', 'past', 'historical'],
|
|
192
|
-
};
|
|
193
|
-
// Check each place's keywords
|
|
194
|
-
for (const [placeType, words] of Object.entries(keywords)) {
|
|
195
|
-
for (const word of words) {
|
|
196
|
-
if (q.includes(word)) {
|
|
197
|
-
return placeType;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
return null;
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Get single memory with place info
|
|
205
|
-
*/
|
|
206
|
-
export async function getMemoryWithPlace(projectPath, memoryId) {
|
|
207
|
-
try {
|
|
208
|
-
const { getMemory } = await import('../memory/memories.js');
|
|
209
|
-
const memory = await getMemory(memoryId);
|
|
210
|
-
if (!memory) {
|
|
211
|
-
return { ok: false };
|
|
212
|
-
}
|
|
213
|
-
// Get place info
|
|
214
|
-
const placeId = await getMemoryPlace(memoryId);
|
|
215
|
-
let placeInfo = {};
|
|
216
|
-
if (placeId) {
|
|
217
|
-
const place = await getPlace(placeId);
|
|
218
|
-
placeInfo = {
|
|
219
|
-
place: place?.name || null,
|
|
220
|
-
placeType: place?.placeType || null,
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
return {
|
|
224
|
-
ok: true,
|
|
225
|
-
memory: {
|
|
226
|
-
id: memory.id,
|
|
227
|
-
type: memory.type,
|
|
228
|
-
content: memory.content || '',
|
|
229
|
-
tags: memory.tags || [],
|
|
230
|
-
createdAt: memory.createdAt,
|
|
231
|
-
...placeInfo,
|
|
232
|
-
},
|
|
233
|
-
};
|
|
234
|
-
}
|
|
235
|
-
catch (error) {
|
|
236
|
-
logger.error('[AgentContext] Error getting memory:', error);
|
|
237
|
-
return { ok: false };
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
/**
|
|
241
|
-
* Quick context for session start - lightweight version
|
|
242
|
-
* Use this when you just need the basics without full context
|
|
243
|
-
*/
|
|
244
|
-
export async function getQuickContext(projectPath, limit = 3) {
|
|
245
|
-
try {
|
|
246
|
-
await ensureProject(projectPath);
|
|
247
|
-
const project = await getProjectByPath(projectPath);
|
|
248
|
-
if (!project) {
|
|
249
|
-
return { ok: false, memories: [], activePlaces: [] };
|
|
250
|
-
}
|
|
251
|
-
// Get recent memories
|
|
252
|
-
const memories = await getRecent(projectPath, limit);
|
|
253
|
-
// Get places with memories
|
|
254
|
-
await initializeDefaultPlaces(project.id);
|
|
255
|
-
const places = await getProjectPlaces(project.id);
|
|
256
|
-
const activePlaces = places
|
|
257
|
-
.filter(p => p.memoryCount > 0)
|
|
258
|
-
.map(p => p.name);
|
|
259
|
-
return {
|
|
260
|
-
ok: true,
|
|
261
|
-
memories: memories.map((m) => ({
|
|
262
|
-
id: m.id,
|
|
263
|
-
type: m.type,
|
|
264
|
-
content: m.content?.substring(0, 100) || '',
|
|
265
|
-
})),
|
|
266
|
-
activePlaces,
|
|
267
|
-
};
|
|
268
|
-
}
|
|
269
|
-
catch (error) {
|
|
270
|
-
logger.error('[AgentContext] Error getting quick context:', error);
|
|
271
|
-
return { ok: false, memories: [], activePlaces: [] };
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
//# sourceMappingURL=agent-context.js.map
|