squish-memory 1.0.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +146 -0
- package/CHANGELOG.md +202 -0
- package/README.md +192 -287
- package/{scripts → bin}/dependency-manager.mjs +217 -217
- package/{scripts → bin}/detect-clients.mjs +78 -78
- package/bin/install-interactive.mjs +321 -0
- package/bin/squish-mcp.mjs +46 -0
- package/bin/squish.mjs +33 -0
- package/config/mcp-migration-map.json +1 -6
- package/config/mcp-mode-semantics.json +10 -12
- package/config/mcp-remote-auth.json +3 -26
- package/config/mcp-universal.schema.json +5 -35
- package/config/settings.json +78 -22
- package/config.js +5 -0
- package/config.ts +218 -0
- package/core/adapters/config/claude-code.ts +133 -0
- package/core/adapters/config/cursor.ts +90 -0
- package/core/adapters/config/opencode.ts +89 -0
- package/core/adapters/config/windsurf.ts +90 -0
- package/core/adapters/index.ts +102 -0
- package/core/adapters/timeline.ts +116 -0
- package/core/adapters/types.ts +166 -0
- package/core/agent-preferences.ts +140 -0
- package/core/algorithms/analytics/token-estimator.ts +216 -0
- package/core/algorithms/detection/hash-filters.ts +260 -0
- package/core/algorithms/detection/semantic-ranker.ts +194 -0
- package/core/algorithms/detection/two-stage-detector.ts +421 -0
- package/core/algorithms/handlers/approve-merge.ts +215 -0
- package/core/algorithms/handlers/detect-duplicates.ts +192 -0
- package/core/algorithms/handlers/get-stats.ts +132 -0
- package/core/algorithms/handlers/list-proposals.ts +130 -0
- package/core/algorithms/handlers/preview-merge.ts +139 -0
- package/core/algorithms/handlers/reject-merge.ts +93 -0
- package/core/algorithms/handlers/reverse-merge.ts +155 -0
- package/core/algorithms/index.ts +39 -0
- package/core/algorithms/operations/cache-maintenance.ts +182 -0
- package/core/algorithms/safety/safety-checks.ts +256 -0
- package/core/algorithms/strategies/merge-strategies.ts +381 -0
- package/core/algorithms/types.ts +140 -0
- package/core/algorithms/utils/response-builder.ts +61 -0
- package/core/associations.ts +363 -0
- package/core/beliefs/decay.ts +289 -0
- package/core/beliefs/extractor.ts +131 -0
- package/core/beliefs/store.ts +557 -0
- package/core/beliefs/types.ts +38 -0
- package/core/commands/mcp-server.ts +5 -0
- package/core/compression.ts +177 -0
- package/core/config.js +2 -0
- package/core/consolidation.ts +330 -0
- package/core/context/agent-context.ts +388 -0
- package/core/context/context-paging.ts +449 -0
- package/core/context/context-window.ts +234 -0
- package/core/context/context.ts +35 -0
- package/core/embeddings/embeddings.ts +616 -0
- package/core/embeddings/google-multimodal.ts +200 -0
- package/core/embeddings/local-embeddings.ts +12 -0
- package/core/embeddings/qmd-client.ts +495 -0
- package/core/embeddings/transformers-local.ts +261 -0
- package/core/embeddings.js +4 -0
- package/core/error-handling.ts +206 -0
- package/core/external +219 -0
- package/core/graph/entity-deduplicator.ts +232 -0
- package/core/graph/graph-builder.ts +257 -0
- package/core/graph/graph-traversal.ts +490 -0
- package/core/graph/index.ts +24 -0
- package/core/graph/llm-entity-extractor.ts +402 -0
- package/core/graph/multi-hop-retrieval.ts +317 -0
- package/core/graph/relationship-extractor.ts +465 -0
- package/core/hooks/agent-hooks.ts +653 -0
- package/core/hooks/auto-tagger.ts +149 -0
- package/core/hooks/capture-filter.ts +169 -0
- package/core/hot-cache.ts +388 -0
- package/core/index.ts +10 -0
- package/core/ingestion/agent-memory.ts +167 -0
- package/core/ingestion/core-memory.ts +326 -0
- package/core/ingestion/learnings.ts +260 -0
- package/core/ingestion/signal-engine.ts +266 -0
- package/core/integrations/obsidian-vault.ts +197 -0
- package/core/layers/generator.ts +115 -0
- package/core/lib/db-client.ts +168 -0
- package/core/lib/parse-embedding.ts +59 -0
- package/core/lib/schemas.ts +102 -0
- package/core/lib/types.ts +49 -0
- package/core/lib/utils.ts +151 -0
- package/core/lib/validation.ts +180 -0
- package/core/lifecycle.ts +353 -0
- package/core/logger.ts +59 -0
- package/core/memory/bridge-discovery.ts +395 -0
- package/core/memory/categorizer.ts +390 -0
- package/core/memory/conflict-detector.ts +62 -0
- package/core/memory/consolidation.ts +372 -0
- package/core/memory/context-collector.ts +75 -0
- package/core/memory/contradiction-resolver.ts +494 -0
- package/core/memory/edit-workflow.ts +174 -0
- package/core/memory/entity-extractor.ts +426 -0
- package/core/memory/entity-resolver.ts +89 -0
- package/core/memory/explain.ts +112 -0
- package/core/memory/fact-deriver.ts +300 -0
- package/core/memory/fact-extractor.ts +120 -0
- package/core/memory/feedback-tracker.ts +200 -0
- package/core/memory/hooks.ts +230 -0
- package/core/memory/hybrid-retrieval.ts +65 -0
- package/core/memory/hybrid-scorer.ts +325 -0
- package/core/memory/hybrid-search.ts +748 -0
- package/core/memory/importance.ts +319 -0
- package/core/memory/index.ts +11 -0
- package/core/memory/loader.ts +178 -0
- package/core/memory/markdown/markdown-storage.ts +318 -0
- package/core/memory/memories.ts +565 -0
- package/core/memory/memory-lifecycle.ts +51 -0
- package/core/memory/memory-manager.ts +53 -0
- package/core/memory/migrate.ts +173 -0
- package/core/memory/normalization.ts +30 -0
- package/core/memory/path-strengthener.ts +211 -0
- package/core/memory/progressive-disclosure.ts +392 -0
- package/core/memory/query-processor.ts +130 -0
- package/core/memory/query-rewriter.ts +153 -0
- package/core/memory/response-analyzer.ts +81 -0
- package/core/memory/retrieval-feedback.ts +276 -0
- package/core/memory/serialization.ts +83 -0
- package/core/memory/stale-cleaner.ts +147 -0
- package/core/memory/stats.ts +181 -0
- package/core/memory/telemetry.ts +392 -0
- package/core/memory/temporal-facts.ts +356 -0
- package/core/memory/temporal-parser.ts +477 -0
- package/core/memory/trigger-detector.ts +104 -0
- package/core/memory/write-gate.ts +288 -0
- package/core/places/index.ts +14 -0
- package/core/places/memory-places.ts +339 -0
- package/core/places/places.ts +406 -0
- package/core/places/rules.ts +308 -0
- package/core/places/walking.ts +192 -0
- package/core/projects +89 -0
- package/core/projects.ts +131 -0
- package/core/redis.ts +82 -0
- package/core/responses.ts +187 -0
- package/core/runtime/trust-report.ts +195 -0
- package/core/runtime/trust-state.ts +360 -0
- package/core/scheduler/cron-scheduler.ts +581 -0
- package/core/scheduler/heartbeat.ts +91 -0
- package/core/scheduler/index.ts +8 -0
- package/core/scheduler/job-runner.ts +197 -0
- package/core/search/conversations.ts +166 -0
- package/core/search/entities.ts +46 -0
- package/core/search/folder-context.ts +154 -0
- package/core/search/graph-boost.ts +22 -0
- package/core/search/index.ts +4 -0
- package/core/search/qmd-wrapper.ts +84 -0
- package/core/security/encrypt.ts +51 -0
- package/core/security/governance.ts +102 -0
- package/core/security/privacy.ts +108 -0
- package/core/security/secret-detector.ts +122 -0
- package/core/session/auto-load.ts +160 -0
- package/core/session/entity-tracker.ts +363 -0
- package/core/session/index.ts +7 -0
- package/core/session/reference-resolver.ts +158 -0
- package/core/session/self-iteration-job.ts +478 -0
- package/core/session/session-hooks.ts +69 -0
- package/core/session/types.ts +36 -0
- package/core/session/working-set.ts +275 -0
- package/core/snapshots/cleanup.ts +13 -0
- package/core/snapshots/comparison.ts +59 -0
- package/core/snapshots/creation.ts +139 -0
- package/core/snapshots/retrieval.ts +44 -0
- package/core/snapshots/stats.ts +63 -0
- package/core/storage/cache.ts +241 -0
- package/core/storage/database.ts +23 -0
- package/core/summarization/cleanup.ts +13 -0
- package/core/summarization/queries.ts +32 -0
- package/core/summarization/stats.ts +64 -0
- package/core/summarization/strategies.ts +52 -0
- package/core/summarization.ts +248 -0
- package/core/temporal-facts.ts +244 -0
- package/core/tracing/collector.ts +470 -0
- package/core/tracing/visualizer.ts +195 -0
- package/core/utils/cleanup-operations.ts +50 -0
- package/core/utils/content-extraction.ts +95 -0
- package/core/utils/filter-builder.ts +56 -0
- package/core/utils/history-traversal.ts +63 -0
- package/core/utils/memory-operations.ts +56 -0
- package/core/utils/query-operations.ts +83 -0
- package/core/utils/summarization-helpers.ts +45 -0
- package/core/utils/temporal-queries.ts +39 -0
- package/core/utils/vector-operations.ts +135 -0
- package/core/utils/version-management.ts +74 -0
- package/core/worker.ts +324 -0
- package/db/adapter.ts +215 -0
- package/db/bootstrap.ts +1055 -0
- package/db/drizzle/migrations/0000_needy_cerebro.sql +402 -0
- package/db/drizzle/migrations/meta/0000_snapshot.json +3451 -0
- package/db/drizzle/migrations/meta/_journal.json +13 -0
- package/db/drizzle/schema-sqlite.ts +1032 -0
- package/db/drizzle/schema.ts +1128 -0
- package/db/drizzle.config.ts +12 -0
- package/db/index.ts +83 -0
- package/db/init.sql +5 -0
- package/db/migrations/associations.ts +35 -0
- package/db/migrations/beliefs.ts +89 -0
- package/db/migrations/core-memory.ts +35 -0
- package/db/migrations/fts.ts +59 -0
- package/db/migrations/index.ts +54 -0
- package/db/migrations/indexes.ts +36 -0
- package/db/migrations/learnings.ts +34 -0
- package/db/migrations/maintenance.ts +68 -0
- package/db/migrations/memories.ts +22 -0
- package/db/migrations/memory-places.ts +35 -0
- package/db/migrations/places.ts +49 -0
- package/db/migrations/projects.ts +21 -0
- package/db/migrations/tier-conversion.ts +24 -0
- package/db/neon.ts +22 -0
- package/db/schema/beliefs.ts +50 -0
- package/db/schema/generator.ts +159 -0
- package/db/schema/index.ts +58 -0
- package/db/schema/learnings.ts +32 -0
- package/db/schema/memories.ts +83 -0
- package/db/schema/projects.ts +33 -0
- package/db/schema.ts +13 -0
- package/db/supabase.ts +27 -0
- package/dist/config.d.ts +61 -14
- package/dist/config.js +159 -139
- package/dist/core/adapters/config/claude-code.d.ts +45 -0
- package/dist/core/adapters/config/claude-code.js +113 -0
- package/dist/core/adapters/config/cursor.d.ts +26 -0
- package/dist/core/adapters/config/cursor.js +74 -0
- package/dist/core/adapters/config/opencode.d.ts +23 -0
- package/dist/core/adapters/config/opencode.js +73 -0
- package/dist/core/adapters/config/windsurf.d.ts +26 -0
- package/dist/core/adapters/config/windsurf.js +74 -0
- package/dist/core/adapters/index.d.ts +45 -0
- package/dist/core/adapters/index.js +84 -0
- package/dist/core/adapters/scripts/install-adapter.d.ts +19 -0
- package/dist/core/adapters/scripts/install-adapter.js +149 -0
- package/dist/core/adapters/timeline.d.ts +23 -0
- package/dist/core/adapters/timeline.js +88 -0
- package/dist/core/adapters/types.d.ts +137 -0
- package/dist/core/adapters/types.js +50 -0
- package/dist/core/agent-preferences.d.ts +16 -0
- package/dist/core/agent-preferences.js +124 -0
- package/dist/{algorithms → core/algorithms}/analytics/token-estimator.d.ts +1 -1
- package/dist/{algorithms → core/algorithms}/analytics/token-estimator.js +3 -3
- package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.d.ts +1 -1
- package/dist/{algorithms → core/algorithms}/detection/semantic-ranker.js +1 -1
- package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.d.ts +1 -1
- package/dist/{algorithms → core/algorithms}/detection/two-stage-detector.js +7 -10
- package/dist/{algorithms → core/algorithms}/handlers/approve-merge.js +4 -4
- package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/get-stats.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/list-proposals.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/preview-merge.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/reject-merge.js +3 -3
- package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.js +3 -3
- package/dist/core/algorithms/index.d.ts +21 -0
- package/dist/core/algorithms/index.js +26 -0
- package/dist/core/algorithms/operations/cache-maintenance.d.ts +12 -0
- package/dist/core/algorithms/operations/cache-maintenance.js +157 -0
- package/dist/{algorithms → core/algorithms}/safety/safety-checks.d.ts +2 -6
- package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.d.ts +19 -1
- package/dist/{algorithms → core/algorithms}/strategies/merge-strategies.js +74 -123
- package/dist/core/algorithms/types.d.ts +125 -0
- package/dist/core/algorithms/types.js +5 -0
- package/dist/core/associations.d.ts +3 -2
- package/dist/core/associations.js +37 -2
- package/dist/core/autosave.d.ts +19 -0
- package/dist/core/autosave.js +16 -0
- package/dist/core/beliefs/decay.d.ts +27 -0
- package/dist/core/beliefs/decay.js +217 -0
- package/dist/core/beliefs/extractor.d.ts +9 -0
- package/dist/core/beliefs/extractor.js +113 -0
- package/dist/core/beliefs/store.d.ts +46 -0
- package/dist/core/beliefs/store.js +466 -0
- package/dist/core/beliefs/types.d.ts +28 -0
- package/dist/core/beliefs/types.js +2 -0
- package/dist/core/commands/mcp-server.d.ts +2 -0
- package/dist/core/commands/mcp-server.js +6 -0
- package/dist/core/commands/remember.d.ts +24 -0
- package/dist/core/commands/remember.js +144 -0
- package/dist/core/compression.d.ts +45 -0
- package/dist/core/compression.js +160 -0
- package/dist/core/context/agent-context.d.ts +106 -0
- package/dist/core/context/agent-context.js +274 -0
- package/dist/core/{context-paging.d.ts → context/context-paging.d.ts} +2 -12
- package/dist/core/{context-paging.js → context/context-paging.js} +19 -39
- package/dist/core/context/context-window.d.ts +40 -0
- package/dist/core/context/context-window.js +177 -0
- package/dist/core/context/context.js +22 -0
- package/dist/core/embeddings/embeddings.d.ts +29 -0
- package/dist/core/embeddings/embeddings.js +546 -0
- package/dist/core/embeddings/google-multimodal.js +6 -2
- package/dist/core/embeddings/local-embeddings.d.ts +11 -0
- package/dist/core/embeddings/local-embeddings.js +11 -0
- package/dist/core/embeddings/qmd-client.js +1 -1
- package/dist/core/embeddings/transformers-local.d.ts +64 -0
- package/dist/core/embeddings/transformers-local.js +213 -0
- package/dist/core/embeddings.d.ts +1 -28
- package/dist/core/embeddings.js +2 -401
- package/dist/core/error-handling.d.ts +63 -0
- package/dist/core/error-handling.js +173 -0
- package/dist/core/graph/entity-deduplicator.d.ts +24 -0
- package/dist/core/graph/entity-deduplicator.js +183 -0
- package/dist/core/graph/graph-builder.d.ts +46 -0
- package/dist/core/graph/graph-builder.js +174 -0
- package/dist/core/graph/graph-traversal.d.ts +80 -0
- package/dist/core/graph/graph-traversal.js +315 -0
- package/dist/core/graph/index.d.ts +19 -0
- package/dist/core/graph/index.js +13 -0
- package/dist/core/graph/llm-entity-extractor.d.ts +49 -0
- package/dist/core/graph/llm-entity-extractor.js +313 -0
- package/dist/core/graph/multi-hop-retrieval.d.ts +48 -0
- package/dist/core/graph/multi-hop-retrieval.js +215 -0
- package/dist/core/graph/relationship-extractor.d.ts +48 -0
- package/dist/core/graph/relationship-extractor.js +351 -0
- package/dist/core/hooks/agent-hooks.d.ts +83 -0
- package/dist/core/hooks/agent-hooks.js +521 -0
- package/dist/core/hooks/auto-tagger.d.ts +19 -0
- package/dist/core/hooks/auto-tagger.js +155 -0
- package/dist/core/hooks/capture-filter.d.ts +41 -0
- package/dist/core/hooks/capture-filter.js +128 -0
- package/dist/core/hot-cache.d.ts +86 -0
- package/dist/core/hot-cache.js +285 -0
- package/dist/core/index.d.ts +9 -9
- package/dist/core/index.js +9 -12
- package/dist/core/{agent-memory.js → ingestion/agent-memory.js} +5 -7
- package/dist/core/{core-memory.d.ts → ingestion/core-memory.d.ts} +2 -2
- package/dist/core/{core-memory.js → ingestion/core-memory.js} +7 -7
- package/dist/core/ingestion/learnings.d.ts +57 -0
- package/dist/core/ingestion/learnings.js +205 -0
- package/dist/core/ingestion/signal-engine.d.ts +41 -0
- package/dist/core/ingestion/signal-engine.js +201 -0
- package/dist/core/integrations/obsidian-vault.d.ts +31 -0
- package/dist/core/integrations/obsidian-vault.js +156 -0
- package/dist/core/lib/db-client.d.ts +114 -0
- package/dist/core/lib/db-client.js +130 -0
- package/dist/core/lib/parse-embedding.d.ts +9 -0
- package/dist/core/lib/parse-embedding.js +58 -0
- package/dist/core/lib/schemas.d.ts +132 -0
- package/dist/core/lib/schemas.js +87 -0
- package/dist/core/lib/types.d.ts +45 -0
- package/dist/core/lib/types.js +6 -0
- package/dist/core/{utils.d.ts → lib/utils.d.ts} +5 -0
- package/dist/core/lib/utils.js +145 -0
- package/dist/core/lib/validation.d.ts +38 -0
- package/dist/core/lib/validation.js +151 -0
- package/dist/core/lifecycle.d.ts +7 -1
- package/dist/core/lifecycle.js +152 -42
- package/dist/core/logger.d.ts +1 -0
- package/dist/core/logger.js +13 -1
- package/dist/core/mcp/tools.d.ts +0 -2
- package/dist/core/mcp/tools.js +35 -90
- package/dist/core/mcp/types.d.ts +25 -253
- package/dist/core/mcp/types.js +2 -2
- package/dist/core/memory/categorizer.js +2 -0
- package/dist/core/memory/conflict-detector.js +1 -1
- package/dist/core/memory/consolidation.d.ts +1 -10
- package/dist/core/memory/consolidation.js +4 -39
- package/dist/core/memory/context-collector.js +1 -1
- package/dist/core/memory/edit-workflow.js +1 -1
- package/dist/core/memory/entity-extractor.d.ts +4 -0
- package/dist/core/memory/entity-extractor.js +30 -16
- package/dist/core/memory/entity-resolver.js +7 -7
- package/dist/core/memory/explain.d.ts +18 -0
- package/dist/core/memory/explain.js +92 -0
- package/dist/core/memory/fact-deriver.d.ts +31 -0
- package/dist/core/memory/fact-deriver.js +236 -0
- package/dist/core/memory/fact-extractor.js +12 -12
- package/dist/core/memory/feedback-tracker.js +1 -1
- package/dist/core/memory/hooks.d.ts +88 -0
- package/dist/core/memory/hooks.js +174 -0
- package/dist/core/memory/hybrid-retrieval.d.ts +14 -16
- package/dist/core/memory/hybrid-retrieval.js +25 -127
- package/dist/core/memory/hybrid-scorer.js +6 -23
- package/dist/core/memory/hybrid-search.d.ts +9 -11
- package/dist/core/memory/hybrid-search.js +496 -273
- package/dist/core/memory/importance.d.ts +2 -24
- package/dist/core/memory/importance.js +7 -91
- package/dist/core/memory/index.d.ts +1 -0
- package/dist/core/memory/index.js +1 -0
- package/dist/core/memory/loader.d.ts +31 -0
- package/dist/core/memory/loader.js +141 -0
- package/dist/core/memory/markdown/markdown-storage.d.ts +72 -0
- package/dist/core/memory/markdown/markdown-storage.js +243 -0
- package/dist/core/memory/memories.d.ts +23 -19
- package/dist/core/memory/memories.js +243 -228
- package/dist/core/memory/memory-lifecycle.d.ts +8 -0
- package/dist/core/memory/memory-lifecycle.js +47 -0
- package/dist/core/memory/migrate.d.ts +21 -0
- package/dist/core/memory/migrate.js +134 -0
- package/dist/core/memory/normalization.d.ts +7 -0
- package/dist/core/memory/normalization.js +26 -0
- package/dist/core/memory/path-strengthener.d.ts +39 -0
- package/dist/core/memory/path-strengthener.js +150 -0
- package/dist/core/memory/progressive-disclosure.js +1 -1
- package/dist/core/memory/query-processor.js +37 -3
- package/dist/core/memory/query-rewriter.js +9 -9
- package/dist/core/memory/retrieval-feedback.d.ts +70 -0
- package/dist/core/memory/retrieval-feedback.js +213 -0
- package/dist/core/memory/serialization.d.ts +4 -0
- package/dist/core/memory/serialization.js +49 -0
- package/dist/core/memory/stale-cleaner.d.ts +26 -0
- package/dist/core/memory/stale-cleaner.js +97 -0
- package/dist/core/memory/stats.d.ts +15 -0
- package/dist/core/memory/stats.js +69 -13
- package/dist/core/memory/temporal-facts.js +21 -0
- package/dist/core/memory/trigger-detector.d.ts +8 -1
- package/dist/core/memory/trigger-detector.js +42 -5
- package/dist/core/memory/write-gate.js +1 -1
- package/dist/core/places/index.d.ts +14 -0
- package/dist/core/places/index.js +14 -0
- package/dist/core/places/memory-places.d.ts +68 -0
- package/dist/core/places/memory-places.js +261 -0
- package/dist/core/places/places.d.ts +88 -0
- package/dist/core/places/places.js +314 -0
- package/dist/core/places/rules.d.ts +74 -0
- package/dist/core/places/rules.js +240 -0
- package/dist/core/places/walking.d.ts +56 -0
- package/dist/core/places/walking.js +121 -0
- package/dist/core/projects.d.ts +5 -0
- package/dist/core/projects.js +47 -18
- package/dist/core/responses.d.ts +96 -0
- package/dist/core/responses.js +122 -0
- package/dist/core/runtime/trust-report.d.ts +102 -0
- package/dist/core/runtime/trust-report.js +107 -0
- package/dist/core/runtime/trust-state.d.ts +12 -0
- package/dist/core/runtime/trust-state.js +309 -0
- package/dist/core/scheduler/cron-scheduler.d.ts +1 -1
- package/dist/core/scheduler/cron-scheduler.js +193 -10
- package/dist/core/scheduler/index.d.ts +1 -1
- package/dist/core/scheduler/index.js +1 -1
- package/dist/core/scheduler/job-runner.js +2 -2
- package/dist/core/search/conversations.js +40 -42
- package/dist/core/search/entities.js +6 -9
- package/dist/core/search/graph-boost.d.ts +7 -0
- package/dist/core/search/graph-boost.js +23 -0
- package/dist/core/search/qmd-wrapper.d.ts +36 -0
- package/dist/core/search/qmd-wrapper.js +58 -0
- package/dist/core/security/encrypt.d.ts +6 -0
- package/dist/core/security/encrypt.js +47 -0
- package/dist/core/{governance.d.ts → security/governance.d.ts} +6 -1
- package/dist/core/security/governance.js +79 -0
- package/dist/core/session/auto-load.js +34 -9
- package/dist/core/session/entity-tracker.d.ts +62 -0
- package/dist/core/session/entity-tracker.js +287 -0
- package/dist/core/session/index.d.ts +1 -1
- package/dist/core/session/index.js +1 -1
- package/dist/core/session/reference-resolver.d.ts +26 -0
- package/dist/core/session/reference-resolver.js +121 -0
- package/dist/core/{session-hooks → session}/self-iteration-job.d.ts +15 -0
- package/dist/core/{session-hooks → session}/self-iteration-job.js +195 -90
- package/dist/core/session/working-set.d.ts +50 -0
- package/dist/core/session/working-set.js +212 -0
- package/dist/core/snapshots/creation.d.ts +2 -8
- package/dist/core/snapshots/creation.js +3 -12
- package/dist/core/{cache.js → storage/cache.js} +2 -2
- package/dist/core/utils/memory-operations.js +1 -1
- package/dist/core/utils/summarization-helpers.d.ts +0 -4
- package/dist/core/utils/summarization-helpers.js +1 -6
- package/dist/core/utils/vector-operations.d.ts +71 -0
- package/dist/core/utils/vector-operations.js +129 -0
- package/dist/db/adapter.d.ts +3 -3
- package/dist/db/adapter.js +99 -88
- package/dist/db/bootstrap.d.ts +2 -0
- package/dist/db/bootstrap.js +921 -674
- package/dist/{drizzle → db/drizzle}/schema-sqlite.d.ts +775 -25
- package/dist/{drizzle → db/drizzle}/schema-sqlite.js +170 -24
- package/dist/{drizzle → db/drizzle}/schema.d.ts +731 -32
- package/dist/{drizzle → db/drizzle}/schema.js +192 -32
- package/dist/db/drizzle.config.d.ts +3 -0
- package/dist/db/drizzle.config.js +12 -0
- package/dist/db/index.d.ts +1 -5
- package/dist/db/index.js +51 -8
- package/dist/db/migrations/associations.d.ts +6 -0
- package/dist/db/migrations/associations.js +29 -0
- package/dist/db/migrations/beliefs.d.ts +10 -0
- package/dist/db/migrations/beliefs.js +76 -0
- package/dist/db/migrations/core-memory.d.ts +6 -0
- package/dist/db/migrations/core-memory.js +29 -0
- package/dist/db/migrations/fts.d.ts +6 -0
- package/dist/db/migrations/fts.js +52 -0
- package/dist/db/migrations/index.d.ts +25 -0
- package/dist/db/migrations/index.js +51 -0
- package/dist/db/migrations/indexes.d.ts +6 -0
- package/dist/db/migrations/indexes.js +30 -0
- package/dist/db/migrations/learnings.d.ts +7 -0
- package/dist/db/migrations/learnings.js +26 -0
- package/dist/db/migrations/maintenance.d.ts +6 -0
- package/dist/db/migrations/maintenance.js +61 -0
- package/dist/db/migrations/memories.d.ts +7 -0
- package/dist/db/migrations/memories.js +16 -0
- package/dist/db/migrations/memory-places.d.ts +6 -0
- package/dist/db/migrations/memory-places.js +29 -0
- package/dist/db/migrations/places.d.ts +6 -0
- package/dist/db/migrations/places.js +43 -0
- package/dist/db/migrations/projects.d.ts +3 -0
- package/dist/db/migrations/projects.js +13 -0
- package/dist/db/migrations/tier-conversion.d.ts +7 -0
- package/dist/db/migrations/tier-conversion.js +20 -0
- package/dist/db/neon.d.ts +8 -0
- package/dist/db/neon.js +20 -0
- package/dist/db/schema/beliefs.d.ts +9 -0
- package/dist/db/schema/beliefs.js +46 -0
- package/dist/db/schema/generator.d.ts +38 -0
- package/dist/db/schema/generator.js +108 -0
- package/dist/db/schema/index.d.ts +39 -0
- package/dist/db/schema/index.js +51 -0
- package/dist/db/schema/learnings.d.ts +7 -0
- package/dist/db/schema/learnings.js +30 -0
- package/dist/db/schema/memories.d.ts +7 -0
- package/dist/db/schema/memories.js +81 -0
- package/dist/db/schema/projects.d.ts +4 -0
- package/dist/db/schema/projects.js +31 -0
- package/dist/db/schema/tables/context-sessions.d.ts +9 -0
- package/dist/db/schema/tables/context-sessions.js +37 -0
- package/dist/db/schema/tables/conversations.d.ts +9 -0
- package/dist/db/schema/tables/conversations.js +47 -0
- package/dist/db/schema/tables/core-memory.d.ts +9 -0
- package/dist/db/schema/tables/core-memory.js +41 -0
- package/dist/db/schema/tables/entities.d.ts +9 -0
- package/dist/db/schema/tables/entities.js +39 -0
- package/dist/db/schema/tables/entity-relations.d.ts +9 -0
- package/dist/db/schema/tables/entity-relations.js +31 -0
- package/dist/db/schema/tables/learnings.d.ts +9 -0
- package/dist/db/schema/tables/learnings.js +66 -0
- package/dist/db/schema/tables/memories.d.ts +9 -0
- package/dist/db/schema/tables/memories.js +161 -0
- package/dist/db/schema/tables/memory-associations.d.ts +9 -0
- package/dist/db/schema/tables/memory-associations.js +39 -0
- package/dist/db/schema/tables/memory-hash-cache.d.ts +9 -0
- package/dist/db/schema/tables/memory-hash-cache.js +29 -0
- package/dist/db/schema/tables/memory-merge-history.d.ts +9 -0
- package/dist/db/schema/tables/memory-merge-history.js +33 -0
- package/dist/db/schema/tables/memory-merge-proposals.d.ts +9 -0
- package/dist/db/schema/tables/memory-merge-proposals.js +39 -0
- package/dist/db/schema/tables/messages.d.ts +9 -0
- package/dist/db/schema/tables/messages.js +41 -0
- package/dist/db/schema/tables/namespaces.d.ts +9 -0
- package/dist/db/schema/tables/namespaces.js +37 -0
- package/dist/db/schema/tables/projects.d.ts +9 -0
- package/dist/db/schema/tables/projects.js +31 -0
- package/dist/db/schema/tables/users.d.ts +9 -0
- package/dist/db/schema/tables/users.js +27 -0
- package/dist/db/schema.d.ts +1 -1
- package/dist/db/schema.js +2 -2
- package/dist/db/supabase.d.ts +9 -0
- package/dist/db/supabase.js +24 -0
- package/dist/packages/mcp/src/index.d.ts +3 -0
- package/dist/packages/mcp/src/index.js +733 -0
- package/mcp.json.example +8 -0
- package/package.json +132 -173
- package/packages/cli/package.json +22 -0
- package/packages/cli/src/commands/clean.ts +68 -0
- package/packages/cli/src/commands/context.ts +79 -0
- package/packages/cli/src/commands/doctor.ts +357 -0
- package/packages/cli/src/commands/forget.ts +72 -0
- package/packages/cli/src/commands/health.ts +36 -0
- package/packages/cli/src/commands/inspect.ts +41 -0
- package/packages/cli/src/commands/link.ts +50 -0
- package/packages/cli/src/commands/migrate.ts +93 -0
- package/packages/cli/src/commands/recall.ts +99 -0
- package/packages/cli/src/commands/recent.ts +57 -0
- package/packages/cli/src/commands/remember.ts +139 -0
- package/packages/cli/src/commands/run.ts +58 -0
- package/packages/cli/src/commands/stale.ts +43 -0
- package/packages/cli/src/commands/stats.ts +42 -0
- package/packages/cli/src/index.ts +57 -0
- package/packages/cli/tsconfig.json +24 -0
- package/packages/mcp/package.json +26 -0
- package/packages/mcp/src/index.ts +877 -0
- package/packages/mcp/tsconfig.json +20 -0
- package/skills/squish-memory/SKILL.md +107 -114
- package/skills/squish-memory/install.sh +3 -3
- package/skills/squish-memory/{claude-desktop.json → references/claude-desktop.json} +12 -12
- package/skills/squish-memory/{openclaw.json → references/openclaw.json} +13 -13
- package/skills/squish-memory/{opencode.json → references/opencode.json} +14 -14
- package/.claude-plugin/marketplace.json +0 -20
- package/.claude-plugin/plugin.json +0 -32
- package/.env.mcp.example +0 -60
- package/.mcp.json +0 -11
- package/QUICK-START.md +0 -71
- package/bin/squish-add.mjs +0 -32
- package/bin/squish-rm.mjs +0 -21
- package/commands/context-paging.md +0 -51
- package/commands/context-status.md +0 -22
- package/commands/context.md +0 -5
- package/commands/core-memory.md +0 -56
- package/commands/health.md +0 -5
- package/commands/init.md +0 -39
- package/commands/merge.md +0 -113
- package/commands/observe.md +0 -5
- package/commands/recall.md +0 -5
- package/commands/remember.md +0 -11
- package/commands/search.md +0 -10
- package/config/mcp-cli-fallback-policy.json +0 -22
- package/config/mcp.json +0 -38
- package/config/plugin-manifest.json +0 -152
- package/config/plugin-manifest.schema.json +0 -244
- package/config/remote-memory-policy.json +0 -32
- package/dist/api/web/index.d.ts +0 -3
- package/dist/api/web/index.js +0 -4
- package/dist/api/web/web-server.d.ts +0 -3
- package/dist/api/web/web-server.js +0 -6
- package/dist/api/web/web.d.ts +0 -4
- package/dist/api/web/web.js +0 -639
- package/dist/commands/managed-sync.d.ts +0 -10
- package/dist/commands/managed-sync.js +0 -64
- package/dist/commands/mcp-server.d.ts +0 -3
- package/dist/commands/mcp-server.js +0 -393
- package/dist/core/context.js +0 -24
- package/dist/core/governance.js +0 -64
- package/dist/core/local-embeddings.d.ts +0 -6
- package/dist/core/local-embeddings.js +0 -20
- package/dist/core/namespaces/index.d.ts +0 -71
- package/dist/core/namespaces/index.js +0 -305
- package/dist/core/namespaces/uri-parser.d.ts +0 -31
- package/dist/core/namespaces/uri-parser.js +0 -74
- package/dist/core/observations.d.ts +0 -26
- package/dist/core/observations.js +0 -110
- package/dist/core/requirements.d.ts +0 -20
- package/dist/core/requirements.js +0 -35
- package/dist/core/search/qmd-search.d.ts +0 -61
- package/dist/core/search/qmd-search.js +0 -178
- package/dist/core/snapshots.d.ts +0 -29
- package/dist/core/snapshots.js +0 -220
- package/dist/core/sync/qmd-sync.d.ts +0 -106
- package/dist/core/sync/qmd-sync.js +0 -213
- package/dist/core/utils.js +0 -74
- package/dist/index.d.ts +0 -19
- package/dist/index.js +0 -997
- package/generated/mcp/manifest.json +0 -23
- package/generated/mcp/mcp-servers.json +0 -25
- package/generated/mcp/mcporter.json +0 -34
- package/generated/mcp/openclaw-memory-qmd.json +0 -17
- package/generated/mcp/runtime.json +0 -12
- package/hooks/hooks.json +0 -52
- package/hooks/post-tool-use.js +0 -26
- package/hooks/session-end.js +0 -28
- package/hooks/session-start.js +0 -33
- package/hooks/user-prompt-submit.js +0 -26
- package/hooks/utils.js +0 -153
- package/npx-installer.js +0 -208
- package/packages/plugin-claude-code/README.md +0 -73
- package/packages/plugin-claude-code/dist/plugin-wrapper.d.ts +0 -35
- package/packages/plugin-claude-code/dist/plugin-wrapper.js +0 -191
- package/packages/plugin-claude-code/package.json +0 -31
- package/packages/plugin-openclaw/README.md +0 -70
- package/packages/plugin-openclaw/dist/index.d.ts +0 -49
- package/packages/plugin-openclaw/dist/index.js +0 -262
- package/packages/plugin-openclaw/openclaw.plugin.json +0 -94
- package/packages/plugin-openclaw/package.json +0 -31
- package/packages/plugin-opencode/install.mjs +0 -217
- package/packages/plugin-opencode/package.json +0 -21
- package/plugin.json +0 -32
- package/scripts/build-release.sh +0 -36
- package/scripts/check-secrets.js +0 -132
- package/scripts/db/check-db.mjs +0 -88
- package/scripts/db/fix-all-columns.mjs +0 -52
- package/scripts/db/fix-schema-all.mjs +0 -55
- package/scripts/db/fix-schema-full.mjs +0 -46
- package/scripts/db/fix-schema.mjs +0 -38
- package/scripts/db/init-db.mjs +0 -13
- package/scripts/db/recreate-db.mjs +0 -14
- package/scripts/generate-mcp.mjs +0 -264
- package/scripts/github-release.sh +0 -77
- package/scripts/init-dirs.mjs +0 -13
- package/scripts/install-interactive.mjs +0 -677
- package/scripts/install-mcp.mjs +0 -116
- package/scripts/install-plugin.mjs +0 -415
- package/scripts/install-web.sh +0 -120
- package/scripts/install.mjs +0 -340
- package/scripts/openclaw-bootstrap.mjs +0 -127
- package/scripts/package-release.sh +0 -71
- package/scripts/remote-preflight.mjs +0 -62
- package/scripts/squish-fallback.mjs +0 -132
- package/scripts/test/test-all-systems.mjs +0 -139
- package/scripts/test/test-memory-system.mjs +0 -139
- package/scripts/test/test-v0.5.0.mjs +0 -210
- package/scripts/test-interactive.mjs +0 -131
- package/scripts/verify-mcp.mjs +0 -214
- package/skills/memory-guide/SKILL.md +0 -332
- package/skills/squish-cli/SKILL.md +0 -240
- package/skills/squish-mcp/SKILL.md +0 -355
- package/skills/squish-memory/install.mjs +0 -335
- package/skills/squish-memory/skill.json +0 -32
- /package/dist/{algorithms → core/algorithms}/detection/hash-filters.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/detection/hash-filters.js +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/approve-merge.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/detect-duplicates.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/get-stats.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/list-proposals.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/preview-merge.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/reject-merge.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/handlers/reverse-merge.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/safety/safety-checks.js +0 -0
- /package/dist/{algorithms → core/algorithms}/utils/response-builder.d.ts +0 -0
- /package/dist/{algorithms → core/algorithms}/utils/response-builder.js +0 -0
- /package/dist/core/{context.d.ts → context/context.d.ts} +0 -0
- /package/dist/core/{agent-memory.d.ts → ingestion/agent-memory.d.ts} +0 -0
- /package/dist/core/{privacy.d.ts → security/privacy.d.ts} +0 -0
- /package/dist/core/{privacy.js → security/privacy.js} +0 -0
- /package/dist/core/{secret-detector.d.ts → security/secret-detector.d.ts} +0 -0
- /package/dist/core/{secret-detector.js → security/secret-detector.js} +0 -0
- /package/dist/core/{session-hooks → session}/session-hooks.d.ts +0 -0
- /package/dist/core/{session-hooks → session}/session-hooks.js +0 -0
- /package/dist/core/{cache.d.ts → storage/cache.d.ts} +0 -0
- /package/dist/core/{database.d.ts → storage/database.d.ts} +0 -0
- /package/dist/core/{database.js → storage/database.js} +0 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TOON Compression - Token-efficient memory format
|
|
3
|
+
*
|
|
4
|
+
* Compact format for memory context using abbreviated notation.
|
|
5
|
+
* Achieves efficient token usage for context injection.
|
|
6
|
+
*
|
|
7
|
+
* Format:
|
|
8
|
+
* {
|
|
9
|
+
* m:[type], // memory type (1-2 chars)
|
|
10
|
+
* c:"...", // content (truncated)
|
|
11
|
+
* t:[], // tags (array)
|
|
12
|
+
* d:123 // days ago
|
|
13
|
+
* }
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* Compress a memory to TOON format
|
|
17
|
+
*/
|
|
18
|
+
export declare function compressForContext(content: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Decompress TOON back to readable format
|
|
21
|
+
*/
|
|
22
|
+
export declare function decompressFromContext(toonString: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Estimate compression ratio
|
|
25
|
+
*/
|
|
26
|
+
export declare function estimateCompressionRatio(content: string): number;
|
|
27
|
+
/**
|
|
28
|
+
* Check if content is JSON
|
|
29
|
+
*/
|
|
30
|
+
export declare function isJson(content: string): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Check if content is compressed format
|
|
33
|
+
*/
|
|
34
|
+
export declare function isCompressed(content: string): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Count tokens (rough estimate)
|
|
37
|
+
* Import from context-window.ts - single source of truth
|
|
38
|
+
*/
|
|
39
|
+
import { estimateTokens } from './context/context-window.js';
|
|
40
|
+
export { estimateTokens };
|
|
41
|
+
/**
|
|
42
|
+
* Truncate to token budget
|
|
43
|
+
*/
|
|
44
|
+
export declare function truncateToTokenBudget(content: string, maxTokens: number): string;
|
|
45
|
+
//# sourceMappingURL=compression.d.ts.map
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TOON Compression - Token-efficient memory format
|
|
3
|
+
*
|
|
4
|
+
* Compact format for memory context using abbreviated notation.
|
|
5
|
+
* Achieves efficient token usage for context injection.
|
|
6
|
+
*
|
|
7
|
+
* Format:
|
|
8
|
+
* {
|
|
9
|
+
* m:[type], // memory type (1-2 chars)
|
|
10
|
+
* c:"...", // content (truncated)
|
|
11
|
+
* t:[], // tags (array)
|
|
12
|
+
* d:123 // days ago
|
|
13
|
+
* }
|
|
14
|
+
*/
|
|
15
|
+
const MAX_CONTENT_LENGTH = 80; // Max chars per content
|
|
16
|
+
const MAX_TAGS = 3; // Max tags to include
|
|
17
|
+
/**
|
|
18
|
+
* Compress a memory to TOON format
|
|
19
|
+
*/
|
|
20
|
+
export function compressForContext(content) {
|
|
21
|
+
// If not JSON or already short, just return
|
|
22
|
+
if (!isJson(content) || content.length <= MAX_CONTENT_LENGTH) {
|
|
23
|
+
return content;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const parsed = JSON.parse(content);
|
|
27
|
+
// Build compact TOON object
|
|
28
|
+
const toon = {
|
|
29
|
+
m: parsed.type?.substring(0, 2) || 'ob', // observation -> ob
|
|
30
|
+
};
|
|
31
|
+
// Truncate content
|
|
32
|
+
if (parsed.content) {
|
|
33
|
+
const truncated = parsed.content.substring(0, MAX_CONTENT_LENGTH);
|
|
34
|
+
toon.c = truncated.length < parsed.content.length ? truncated + '..' : truncated;
|
|
35
|
+
}
|
|
36
|
+
// Add tags (limited)
|
|
37
|
+
if (parsed.tags && Array.isArray(parsed.tags)) {
|
|
38
|
+
toon.t = parsed.tags.slice(0, MAX_TAGS);
|
|
39
|
+
}
|
|
40
|
+
// Add days ago if there's a date
|
|
41
|
+
if (parsed.createdAt) {
|
|
42
|
+
const days = Math.floor((Date.now() - new Date(parsed.createdAt).getTime()) / (1000 * 60 * 60 * 24));
|
|
43
|
+
if (days > 0) {
|
|
44
|
+
toon.d = days;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return JSON.stringify(toon);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Not parseable JSON, return truncated content
|
|
51
|
+
return content.substring(0, MAX_CONTENT_LENGTH);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Decompress TOON back to readable format
|
|
56
|
+
*/
|
|
57
|
+
export function decompressFromContext(toonString) {
|
|
58
|
+
// Check if it's TOON format
|
|
59
|
+
if (!isCompressed(toonString)) {
|
|
60
|
+
return toonString;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
const parsed = JSON.parse(toonString);
|
|
64
|
+
// If it has TOON markers, expand it
|
|
65
|
+
if (parsed.m || parsed.c || parsed.t) {
|
|
66
|
+
const typeMap = {
|
|
67
|
+
ob: 'observation',
|
|
68
|
+
su: 'success',
|
|
69
|
+
f: 'failure',
|
|
70
|
+
fx: 'fix',
|
|
71
|
+
i: 'insight',
|
|
72
|
+
};
|
|
73
|
+
const type = typeMap[parsed.m] || 'observation';
|
|
74
|
+
const parts = [`[${type}]`];
|
|
75
|
+
if (parsed.c) {
|
|
76
|
+
parts.push(parsed.c);
|
|
77
|
+
}
|
|
78
|
+
if (parsed.t && parsed.t.length > 0) {
|
|
79
|
+
parts.push(`#${parsed.t.join(' #')}`);
|
|
80
|
+
}
|
|
81
|
+
if (parsed.d) {
|
|
82
|
+
parts.push(`(${parsed.d}d ago)`);
|
|
83
|
+
}
|
|
84
|
+
return parts.join(' ');
|
|
85
|
+
}
|
|
86
|
+
return toonString;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// Not valid TOON, return as-is
|
|
90
|
+
return toonString;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Estimate compression ratio
|
|
95
|
+
*/
|
|
96
|
+
export function estimateCompressionRatio(content) {
|
|
97
|
+
if (!isJson(content) || content.length <= MAX_CONTENT_LENGTH) {
|
|
98
|
+
return 1.0;
|
|
99
|
+
}
|
|
100
|
+
const compressed = compressForContext(content);
|
|
101
|
+
return compressed.length / content.length;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Check if content is JSON
|
|
105
|
+
*/
|
|
106
|
+
export function isJson(content) {
|
|
107
|
+
try {
|
|
108
|
+
JSON.parse(content);
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Check if content is compressed format
|
|
117
|
+
*/
|
|
118
|
+
export function isCompressed(content) {
|
|
119
|
+
if (!content.startsWith('{') || !content.endsWith('}')) {
|
|
120
|
+
return false;
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
const parsed = JSON.parse(content);
|
|
124
|
+
// Has compressed markers
|
|
125
|
+
return parsed.m !== undefined || parsed.c !== undefined;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Count tokens (rough estimate)
|
|
133
|
+
* Import from context-window.ts - single source of truth
|
|
134
|
+
*/
|
|
135
|
+
import { estimateTokens } from './context/context-window.js';
|
|
136
|
+
export { estimateTokens };
|
|
137
|
+
/**
|
|
138
|
+
* Truncate to token budget
|
|
139
|
+
*/
|
|
140
|
+
export function truncateToTokenBudget(content, maxTokens) {
|
|
141
|
+
const tokens = estimateTokens(content);
|
|
142
|
+
if (tokens <= maxTokens) {
|
|
143
|
+
return content;
|
|
144
|
+
}
|
|
145
|
+
// Binary search for the right length
|
|
146
|
+
let low = 0;
|
|
147
|
+
let high = content.length;
|
|
148
|
+
while (low < high) {
|
|
149
|
+
const mid = Math.floor((low + high) / 2);
|
|
150
|
+
const estimated = estimateTokens(content.substring(0, mid));
|
|
151
|
+
if (estimated <= maxTokens) {
|
|
152
|
+
low = mid + 1;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
high = mid;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return content.substring(0, low) + '...';
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=compression.js.map
|
|
@@ -0,0 +1,106 @@
|
|
|
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
|
|
@@ -0,0 +1,274 @@
|
|
|
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
|
+
compressWithCompression: 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
|
|
@@ -1,14 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Context Paging Service - Agent-controlled memory loading
|
|
3
|
-
*
|
|
4
|
-
* Simple memory tracking system that allows agents to:
|
|
5
|
-
* - Load memories into their working set
|
|
6
|
-
* - Evict memories from working set
|
|
7
|
-
* - View what's currently in their working set
|
|
8
|
-
*
|
|
9
|
-
* Note: This does NOT track tokens - Claude is context-aware and manages
|
|
10
|
-
* its own token budget. This just tracks WHAT memories are in the agent's
|
|
11
|
-
* current working set for visibility and management.
|
|
2
|
+
* Context Paging Service - Agent-controlled memory loading
|
|
3
|
+
* Allows agents to load/evict memories from working set
|
|
12
4
|
*/
|
|
13
5
|
interface LoadedMemory {
|
|
14
6
|
id: string;
|
|
@@ -24,7 +16,6 @@ interface LoadedMemory {
|
|
|
24
16
|
export declare function initializeContextSession(sessionId: string, projectId: string, userId?: string): Promise<void>;
|
|
25
17
|
/**
|
|
26
18
|
* Load a memory into working set
|
|
27
|
-
* Note: Claude manages its own context - this just tracks what you've loaded
|
|
28
19
|
*/
|
|
29
20
|
export declare function loadMemoryToContext(sessionId: string, memoryId: string): Promise<{
|
|
30
21
|
success: boolean;
|
|
@@ -48,7 +39,6 @@ export declare function viewLoadedMemories(sessionId: string): Promise<{
|
|
|
48
39
|
}>;
|
|
49
40
|
/**
|
|
50
41
|
* Get context status - what's in your working set and what's available
|
|
51
|
-
* Note: Claude manages its own context/tokens - this just shows WHAT you have loaded
|
|
52
42
|
*/
|
|
53
43
|
export declare function getContextStatus(sessionId: string, projectId: string): Promise<{
|
|
54
44
|
success: boolean;
|