squish-memory 1.0.1 → 1.1.5
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 +130 -0
- package/CHANGELOG.md +55 -0
- package/README.md +155 -274
- package/config/hooks/claude-code-hooks.json +39 -0
- package/config/hooks/cursor-hooks.json +30 -0
- package/config/hooks/opencode-hooks.json +30 -0
- package/config/hooks/windsurf-hooks.json +30 -0
- package/config/mcp-mode-semantics.json +23 -21
- package/config/plugin-manifest.json +101 -152
- package/{plugin.json → config/plugin.json} +2 -2
- package/config/settings.json +52 -51
- package/{commands → core/commands}/init.md +39 -39
- package/dist/config.d.ts +28 -4
- package/dist/config.js +97 -29
- 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 +157 -0
- package/dist/core/adapters/types.js +50 -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 +1 -1
- 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 +133 -0
- package/dist/core/algorithms/types.js +5 -0
- package/dist/core/associations.d.ts +1 -2
- package/dist/core/associations.js +1 -2
- package/dist/core/autosave.d.ts +19 -0
- package/dist/core/autosave.js +16 -0
- package/dist/{commands → core/commands}/managed-sync.js +5 -5
- package/dist/core/commands/mcp-server.js +739 -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.d.ts +1 -1
- package/dist/core/embeddings.js +54 -2
- package/dist/core/error-handling.d.ts +63 -0
- package/dist/core/error-handling.js +173 -0
- package/dist/core/external-folder/index.d.ts +102 -0
- package/dist/core/external-folder/index.js +294 -0
- package/dist/core/hooks/agent-hooks.d.ts +74 -0
- package/dist/core/hooks/agent-hooks.js +244 -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/index.d.ts +6 -6
- package/dist/core/index.js +6 -6
- package/dist/core/{agent-memory.js → ingestion/agent-memory.js} +5 -7
- package/dist/core/{core-memory.js → ingestion/core-memory.js} +4 -4
- package/dist/core/ingestion/learnings.d.ts +57 -0
- package/dist/core/ingestion/learnings.js +202 -0
- package/dist/core/lib/db-client.d.ts +114 -0
- package/dist/core/lib/db-client.js +130 -0
- package/dist/core/lib/schemas.d.ts +129 -0
- package/dist/core/lib/schemas.js +87 -0
- package/dist/core/{utils.d.ts → lib/utils.d.ts} +1 -0
- package/dist/core/{utils.js → lib/utils.js} +31 -15
- package/dist/core/lib/validation.d.ts +38 -0
- package/dist/core/lib/validation.js +151 -0
- package/dist/core/lifecycle.d.ts +7 -0
- package/dist/core/lifecycle.js +140 -20
- package/dist/core/local-embeddings.d.ts +6 -1
- package/dist/core/local-embeddings.js +6 -15
- package/dist/core/logger.js +7 -1
- package/dist/core/mcp/server.js +27 -1
- package/dist/core/mcp/tools.js +35 -3
- package/dist/core/mcp/types.d.ts +4 -4
- package/dist/core/memory/categorizer.js +1 -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 +2 -11
- package/dist/core/memory/context-collector.js +1 -1
- package/dist/core/memory/edit-workflow.js +1 -1
- package/dist/core/memory/entity-resolver.js +7 -7
- 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.js +2 -2
- package/dist/core/memory/hybrid-search.d.ts +1 -6
- package/dist/core/memory/hybrid-search.js +70 -84
- package/dist/core/memory/importance.d.ts +8 -13
- package/dist/core/memory/importance.js +47 -74
- 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 +12 -4
- package/dist/core/memory/memories.js +196 -181
- package/dist/core/memory/memory-lifecycle.d.ts +8 -0
- package/dist/core/memory/memory-lifecycle.js +55 -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 +22 -0
- package/dist/core/memory/normalization.js +26 -0
- package/dist/core/memory/progressive-disclosure.js +1 -1
- package/dist/core/memory/query-rewriter.js +9 -9
- package/dist/core/memory/serialization.d.ts +4 -0
- package/dist/core/memory/serialization.js +49 -0
- package/dist/core/memory/stats.d.ts +5 -0
- package/dist/core/memory/stats.js +63 -12
- package/dist/core/memory/temporal-facts.js +21 -0
- package/dist/core/memory/write-gate.js +1 -1
- package/dist/core/obsidian-vault.d.ts +30 -0
- package/dist/core/obsidian-vault.js +94 -0
- 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 +39 -18
- package/dist/core/responses.d.ts +96 -0
- package/dist/core/responses.js +122 -0
- package/dist/core/scheduler/cron-scheduler.js +89 -14
- package/dist/core/scheduler/index.d.ts +1 -1
- package/dist/core/scheduler/index.js +1 -1
- package/dist/core/scheduler/job-runner.js +1 -1
- 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-search.js +4 -4
- 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 +6 -6
- package/dist/core/session/index.d.ts +1 -1
- package/dist/core/session/index.js +1 -1
- package/dist/core/session/self-iteration-job.d.ts +20 -0
- package/dist/core/session/self-iteration-job.js +282 -0
- package/dist/core/session/session-hooks.d.ts +18 -0
- package/dist/core/session/session-hooks.js +58 -0
- package/dist/core/session-hooks/self-iteration-job.js +35 -35
- package/dist/core/{cache.js → storage/cache.js} +2 -2
- package/dist/core/sync/qmd-sync.d.ts +1 -13
- package/dist/core/sync/qmd-sync.js +1 -13
- package/dist/core/toon.d.ts +43 -0
- package/dist/core/toon.js +160 -0
- package/dist/core/utils/memory-operations.js +1 -1
- 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 +115 -36
- package/dist/db/bootstrap.js +927 -555
- package/dist/{drizzle → db/drizzle}/schema-sqlite.d.ts +74 -25
- package/dist/{drizzle → db/drizzle}/schema-sqlite.js +91 -24
- package/dist/{drizzle → db/drizzle}/schema.d.ts +79 -32
- package/dist/{drizzle → db/drizzle}/schema.js +106 -35
- 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/neon.d.ts +8 -0
- package/dist/db/neon.js +20 -0
- package/dist/db/schema/index.d.ts +40 -0
- package/dist/db/schema/index.js +105 -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/index.d.ts +2 -14
- package/dist/index.js +1457 -631
- package/dist/vendor/sql.js/sql-wasm.wasm +0 -0
- package/dist/webui/server.d.ts +5 -0
- package/dist/{api/web/web.js → webui/server.js} +538 -509
- package/generated/mcp/manifest.json +23 -23
- package/{.mcp.json → mcp.json.example} +1 -1
- package/package.json +159 -169
- package/scripts/README.md +60 -0
- package/scripts/copy-runtime-assets.mjs +26 -0
- package/scripts/generate-mcp.mjs +264 -264
- package/scripts/github-release.sh +4 -4
- package/scripts/install-claude-code.sh +85 -0
- package/scripts/install-cursor.sh +56 -0
- package/scripts/install-hooks.sh +73 -0
- package/scripts/install-interactive.mjs +357 -674
- package/scripts/install-opencode.sh +75 -0
- package/scripts/install-windsurf.sh +67 -0
- package/skills/squish-memory/SKILL.md +104 -100
- package/skills/squish-memory/{install.mjs → scripts/install.mjs} +2 -2
- package/skills/squish-memory/{install.sh → scripts/install.sh} +2 -2
- package/skills/squish-memory/write_skill.js +2 -0
- package/.claude-plugin/marketplace.json +0 -20
- package/.claude-plugin/plugin.json +0 -32
- package/.env.mcp.example +0 -56
- package/QUICK-START.md +0 -71
- package/bin/squish-add.mjs +0 -32
- package/bin/squish-rm.mjs +0 -21
- package/commands/observe.md +0 -5
- package/dist/algorithms/analytics/token-estimator.d.ts.map +0 -1
- package/dist/algorithms/analytics/token-estimator.js.map +0 -1
- package/dist/algorithms/detection/hash-filters.d.ts.map +0 -1
- package/dist/algorithms/detection/hash-filters.js.map +0 -1
- package/dist/algorithms/detection/semantic-ranker.d.ts.map +0 -1
- package/dist/algorithms/detection/semantic-ranker.js.map +0 -1
- package/dist/algorithms/detection/two-stage-detector.d.ts.map +0 -1
- package/dist/algorithms/detection/two-stage-detector.js.map +0 -1
- package/dist/algorithms/handlers/approve-merge.d.ts.map +0 -1
- package/dist/algorithms/handlers/approve-merge.js.map +0 -1
- package/dist/algorithms/handlers/detect-duplicates.d.ts.map +0 -1
- package/dist/algorithms/handlers/detect-duplicates.js.map +0 -1
- package/dist/algorithms/handlers/get-stats.d.ts.map +0 -1
- package/dist/algorithms/handlers/get-stats.js.map +0 -1
- package/dist/algorithms/handlers/list-proposals.d.ts.map +0 -1
- package/dist/algorithms/handlers/list-proposals.js.map +0 -1
- package/dist/algorithms/handlers/preview-merge.d.ts.map +0 -1
- package/dist/algorithms/handlers/preview-merge.js.map +0 -1
- package/dist/algorithms/handlers/reject-merge.d.ts.map +0 -1
- package/dist/algorithms/handlers/reject-merge.js.map +0 -1
- package/dist/algorithms/handlers/reverse-merge.d.ts.map +0 -1
- package/dist/algorithms/handlers/reverse-merge.js.map +0 -1
- package/dist/algorithms/safety/safety-checks.d.ts.map +0 -1
- package/dist/algorithms/safety/safety-checks.js.map +0 -1
- package/dist/algorithms/strategies/merge-strategies.d.ts.map +0 -1
- package/dist/algorithms/strategies/merge-strategies.js.map +0 -1
- package/dist/algorithms/utils/response-builder.d.ts.map +0 -1
- package/dist/algorithms/utils/response-builder.js.map +0 -1
- package/dist/api/web/index.d.ts +0 -3
- package/dist/api/web/index.d.ts.map +0 -1
- package/dist/api/web/index.js +0 -4
- package/dist/api/web/index.js.map +0 -1
- package/dist/api/web/web-server.d.ts +0 -3
- package/dist/api/web/web-server.d.ts.map +0 -1
- package/dist/api/web/web-server.js +0 -6
- package/dist/api/web/web-server.js.map +0 -1
- package/dist/api/web/web.d.ts +0 -4
- package/dist/api/web/web.d.ts.map +0 -1
- package/dist/api/web/web.js.map +0 -1
- package/dist/commands/managed-sync.d.ts.map +0 -1
- package/dist/commands/managed-sync.js.map +0 -1
- package/dist/commands/mcp-server.d.ts.map +0 -1
- package/dist/commands/mcp-server.js +0 -393
- package/dist/commands/mcp-server.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/core/agent-memory.d.ts.map +0 -1
- package/dist/core/agent-memory.js.map +0 -1
- package/dist/core/associations.d.ts.map +0 -1
- package/dist/core/associations.js.map +0 -1
- package/dist/core/cache.d.ts.map +0 -1
- package/dist/core/cache.js.map +0 -1
- package/dist/core/consolidation.d.ts.map +0 -1
- package/dist/core/consolidation.js.map +0 -1
- package/dist/core/context-paging.d.ts.map +0 -1
- package/dist/core/context-paging.js.map +0 -1
- package/dist/core/context.d.ts.map +0 -1
- package/dist/core/context.js +0 -24
- package/dist/core/context.js.map +0 -1
- package/dist/core/core-memory.d.ts.map +0 -1
- package/dist/core/core-memory.js.map +0 -1
- package/dist/core/database.d.ts.map +0 -1
- package/dist/core/database.js.map +0 -1
- package/dist/core/embeddings/google-multimodal.d.ts.map +0 -1
- package/dist/core/embeddings/google-multimodal.js.map +0 -1
- package/dist/core/embeddings/qmd-client.d.ts.map +0 -1
- package/dist/core/embeddings/qmd-client.js.map +0 -1
- package/dist/core/embeddings.d.ts.map +0 -1
- package/dist/core/embeddings.js.map +0 -1
- package/dist/core/governance.d.ts.map +0 -1
- package/dist/core/governance.js +0 -64
- package/dist/core/governance.js.map +0 -1
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js.map +0 -1
- package/dist/core/layers/generator.d.ts.map +0 -1
- package/dist/core/layers/generator.js.map +0 -1
- package/dist/core/lifecycle.d.ts.map +0 -1
- package/dist/core/lifecycle.js.map +0 -1
- package/dist/core/local-embeddings.d.ts.map +0 -1
- package/dist/core/local-embeddings.js.map +0 -1
- package/dist/core/logger.d.ts.map +0 -1
- package/dist/core/logger.js.map +0 -1
- package/dist/core/mcp/client.d.ts.map +0 -1
- package/dist/core/mcp/client.js.map +0 -1
- package/dist/core/mcp/index.d.ts.map +0 -1
- package/dist/core/mcp/index.js.map +0 -1
- package/dist/core/mcp/server.d.ts.map +0 -1
- package/dist/core/mcp/server.js.map +0 -1
- package/dist/core/mcp/standalone-server.d.ts.map +0 -1
- package/dist/core/mcp/standalone-server.js.map +0 -1
- package/dist/core/mcp/tools.d.ts.map +0 -1
- package/dist/core/mcp/tools.js.map +0 -1
- package/dist/core/mcp/types.d.ts.map +0 -1
- package/dist/core/mcp/types.js.map +0 -1
- package/dist/core/memory/bridge-discovery.d.ts.map +0 -1
- package/dist/core/memory/bridge-discovery.js.map +0 -1
- package/dist/core/memory/categorizer.d.ts.map +0 -1
- package/dist/core/memory/categorizer.js.map +0 -1
- package/dist/core/memory/conflict-detector.d.ts.map +0 -1
- package/dist/core/memory/conflict-detector.js.map +0 -1
- package/dist/core/memory/consolidation.d.ts.map +0 -1
- package/dist/core/memory/consolidation.js.map +0 -1
- package/dist/core/memory/context-collector.d.ts.map +0 -1
- package/dist/core/memory/context-collector.js.map +0 -1
- package/dist/core/memory/contradiction-resolver.d.ts.map +0 -1
- package/dist/core/memory/contradiction-resolver.js.map +0 -1
- package/dist/core/memory/edit-workflow.d.ts.map +0 -1
- package/dist/core/memory/edit-workflow.js.map +0 -1
- package/dist/core/memory/entity-extractor.d.ts.map +0 -1
- package/dist/core/memory/entity-extractor.js.map +0 -1
- package/dist/core/memory/entity-resolver.d.ts.map +0 -1
- package/dist/core/memory/entity-resolver.js.map +0 -1
- package/dist/core/memory/fact-extractor.d.ts.map +0 -1
- package/dist/core/memory/fact-extractor.js.map +0 -1
- package/dist/core/memory/feedback-tracker.d.ts.map +0 -1
- package/dist/core/memory/feedback-tracker.js.map +0 -1
- package/dist/core/memory/hybrid-retrieval.d.ts.map +0 -1
- package/dist/core/memory/hybrid-retrieval.js.map +0 -1
- package/dist/core/memory/hybrid-scorer.d.ts.map +0 -1
- package/dist/core/memory/hybrid-scorer.js.map +0 -1
- package/dist/core/memory/hybrid-search.d.ts.map +0 -1
- package/dist/core/memory/hybrid-search.js.map +0 -1
- package/dist/core/memory/importance.d.ts.map +0 -1
- package/dist/core/memory/importance.js.map +0 -1
- package/dist/core/memory/index.d.ts.map +0 -1
- package/dist/core/memory/index.js.map +0 -1
- package/dist/core/memory/memories.d.ts.map +0 -1
- package/dist/core/memory/memories.js.map +0 -1
- package/dist/core/memory/memory-manager.d.ts.map +0 -1
- package/dist/core/memory/memory-manager.js.map +0 -1
- package/dist/core/memory/progressive-disclosure.d.ts.map +0 -1
- package/dist/core/memory/progressive-disclosure.js.map +0 -1
- package/dist/core/memory/query-processor.d.ts.map +0 -1
- package/dist/core/memory/query-processor.js.map +0 -1
- package/dist/core/memory/query-rewriter.d.ts.map +0 -1
- package/dist/core/memory/query-rewriter.js.map +0 -1
- package/dist/core/memory/response-analyzer.d.ts.map +0 -1
- package/dist/core/memory/response-analyzer.js.map +0 -1
- package/dist/core/memory/serialization.d.ts.map +0 -1
- package/dist/core/memory/serialization.js.map +0 -1
- package/dist/core/memory/stats.d.ts.map +0 -1
- package/dist/core/memory/stats.js.map +0 -1
- package/dist/core/memory/telemetry.d.ts.map +0 -1
- package/dist/core/memory/telemetry.js.map +0 -1
- package/dist/core/memory/temporal-facts.d.ts.map +0 -1
- package/dist/core/memory/temporal-facts.js.map +0 -1
- package/dist/core/memory/temporal-parser.d.ts.map +0 -1
- package/dist/core/memory/temporal-parser.js.map +0 -1
- package/dist/core/memory/trigger-detector.d.ts.map +0 -1
- package/dist/core/memory/trigger-detector.js.map +0 -1
- package/dist/core/memory/write-gate.d.ts.map +0 -1
- package/dist/core/memory/write-gate.js.map +0 -1
- package/dist/core/namespaces/index.d.ts.map +0 -1
- package/dist/core/namespaces/index.js.map +0 -1
- package/dist/core/namespaces/uri-parser.d.ts.map +0 -1
- package/dist/core/namespaces/uri-parser.js.map +0 -1
- package/dist/core/observations.d.ts +0 -26
- package/dist/core/observations.d.ts.map +0 -1
- package/dist/core/observations.js +0 -110
- package/dist/core/observations.js.map +0 -1
- package/dist/core/privacy.d.ts.map +0 -1
- package/dist/core/privacy.js.map +0 -1
- package/dist/core/projects.d.ts.map +0 -1
- package/dist/core/projects.js.map +0 -1
- package/dist/core/redis.d.ts.map +0 -1
- package/dist/core/redis.js.map +0 -1
- package/dist/core/requirements.d.ts +0 -20
- package/dist/core/requirements.d.ts.map +0 -1
- package/dist/core/requirements.js +0 -35
- package/dist/core/requirements.js.map +0 -1
- package/dist/core/scheduler/cron-scheduler.d.ts.map +0 -1
- package/dist/core/scheduler/cron-scheduler.js.map +0 -1
- package/dist/core/scheduler/heartbeat.d.ts.map +0 -1
- package/dist/core/scheduler/heartbeat.js.map +0 -1
- package/dist/core/scheduler/index.d.ts.map +0 -1
- package/dist/core/scheduler/index.js.map +0 -1
- package/dist/core/scheduler/job-runner.d.ts.map +0 -1
- package/dist/core/scheduler/job-runner.js.map +0 -1
- package/dist/core/search/conversations.d.ts.map +0 -1
- package/dist/core/search/conversations.js.map +0 -1
- package/dist/core/search/entities.d.ts.map +0 -1
- package/dist/core/search/entities.js.map +0 -1
- package/dist/core/search/folder-context.d.ts.map +0 -1
- package/dist/core/search/folder-context.js.map +0 -1
- package/dist/core/search/index.d.ts.map +0 -1
- package/dist/core/search/index.js.map +0 -1
- package/dist/core/search/qmd-search.d.ts.map +0 -1
- package/dist/core/search/qmd-search.js.map +0 -1
- package/dist/core/secret-detector.d.ts.map +0 -1
- package/dist/core/secret-detector.js.map +0 -1
- package/dist/core/session/auto-load.d.ts.map +0 -1
- package/dist/core/session/auto-load.js.map +0 -1
- package/dist/core/session/index.d.ts.map +0 -1
- package/dist/core/session/index.js.map +0 -1
- package/dist/core/session/types.d.ts.map +0 -1
- package/dist/core/session/types.js.map +0 -1
- package/dist/core/session-hooks/self-iteration-job.d.ts.map +0 -1
- package/dist/core/session-hooks/self-iteration-job.js.map +0 -1
- package/dist/core/session-hooks/session-hooks.d.ts.map +0 -1
- package/dist/core/session-hooks/session-hooks.js.map +0 -1
- package/dist/core/snapshots/cleanup.d.ts.map +0 -1
- package/dist/core/snapshots/cleanup.js.map +0 -1
- package/dist/core/snapshots/comparison.d.ts.map +0 -1
- package/dist/core/snapshots/comparison.js.map +0 -1
- package/dist/core/snapshots/creation.d.ts.map +0 -1
- package/dist/core/snapshots/creation.js.map +0 -1
- package/dist/core/snapshots/retrieval.d.ts.map +0 -1
- package/dist/core/snapshots/retrieval.js.map +0 -1
- package/dist/core/snapshots/stats.d.ts.map +0 -1
- package/dist/core/snapshots/stats.js.map +0 -1
- package/dist/core/snapshots.d.ts.map +0 -1
- package/dist/core/snapshots.js.map +0 -1
- package/dist/core/summarization/cleanup.d.ts.map +0 -1
- package/dist/core/summarization/cleanup.js.map +0 -1
- package/dist/core/summarization/queries.d.ts.map +0 -1
- package/dist/core/summarization/queries.js.map +0 -1
- package/dist/core/summarization/stats.d.ts.map +0 -1
- package/dist/core/summarization/stats.js.map +0 -1
- package/dist/core/summarization/strategies.d.ts.map +0 -1
- package/dist/core/summarization/strategies.js.map +0 -1
- package/dist/core/summarization.d.ts.map +0 -1
- package/dist/core/summarization.js.map +0 -1
- package/dist/core/sync/qmd-sync.d.ts.map +0 -1
- package/dist/core/sync/qmd-sync.js.map +0 -1
- package/dist/core/temporal-facts.d.ts.map +0 -1
- package/dist/core/temporal-facts.js.map +0 -1
- package/dist/core/tracing/collector.d.ts.map +0 -1
- package/dist/core/tracing/collector.js.map +0 -1
- package/dist/core/tracing/visualizer.d.ts.map +0 -1
- package/dist/core/tracing/visualizer.js.map +0 -1
- package/dist/core/utils/cleanup-operations.d.ts.map +0 -1
- package/dist/core/utils/cleanup-operations.js.map +0 -1
- package/dist/core/utils/content-extraction.d.ts.map +0 -1
- package/dist/core/utils/content-extraction.js.map +0 -1
- package/dist/core/utils/filter-builder.d.ts.map +0 -1
- package/dist/core/utils/filter-builder.js.map +0 -1
- package/dist/core/utils/history-traversal.d.ts.map +0 -1
- package/dist/core/utils/history-traversal.js.map +0 -1
- package/dist/core/utils/memory-operations.d.ts.map +0 -1
- package/dist/core/utils/memory-operations.js.map +0 -1
- package/dist/core/utils/query-operations.d.ts.map +0 -1
- package/dist/core/utils/query-operations.js.map +0 -1
- package/dist/core/utils/summarization-helpers.d.ts.map +0 -1
- package/dist/core/utils/summarization-helpers.js.map +0 -1
- package/dist/core/utils/temporal-queries.d.ts.map +0 -1
- package/dist/core/utils/temporal-queries.js.map +0 -1
- package/dist/core/utils/version-management.d.ts.map +0 -1
- package/dist/core/utils/version-management.js.map +0 -1
- package/dist/core/utils.d.ts.map +0 -1
- package/dist/core/utils.js.map +0 -1
- package/dist/core/worker.d.ts.map +0 -1
- package/dist/core/worker.js.map +0 -1
- package/dist/db/adapter.d.ts.map +0 -1
- package/dist/db/adapter.js.map +0 -1
- package/dist/db/bootstrap.d.ts.map +0 -1
- package/dist/db/bootstrap.js.map +0 -1
- package/dist/db/index.d.ts.map +0 -1
- package/dist/db/index.js.map +0 -1
- package/dist/db/schema.d.ts.map +0 -1
- package/dist/db/schema.js.map +0 -1
- package/dist/drizzle/schema-sqlite.d.ts.map +0 -1
- package/dist/drizzle/schema-sqlite.js.map +0 -1
- package/dist/drizzle/schema.d.ts.map +0 -1
- package/dist/drizzle/schema.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- 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.d.ts.map +0 -1
- package/packages/plugin-claude-code/dist/plugin-wrapper.js +0 -191
- package/packages/plugin-claude-code/dist/plugin-wrapper.js.map +0 -1
- 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.d.ts.map +0 -1
- package/packages/plugin-openclaw/dist/index.js +0 -262
- package/packages/plugin-openclaw/dist/index.js.map +0 -1
- 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/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/install-mcp.mjs +0 -116
- 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/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/skills/memory-guide/SKILL.md +0 -256
- package/skills/squish-cli/SKILL.md +0 -200
- package/skills/squish-mcp/SKILL.md +0 -311
- package/skills/squish-memory/claude-desktop.json +0 -12
- package/skills/squish-memory/openclaw.json +0 -13
- package/skills/squish-memory/opencode.json +0 -14
- package/skills/squish-memory/skill.json +0 -32
- /package/{commands → core/commands}/context-paging.md +0 -0
- /package/{commands → core/commands}/context-status.md +0 -0
- /package/{commands → core/commands}/context.md +0 -0
- /package/{commands → core/commands}/core-memory.md +0 -0
- /package/{commands → core/commands}/health.md +0 -0
- /package/{commands → core/commands}/merge.md +0 -0
- /package/{commands → core/commands}/recall.md +0 -0
- /package/{commands → core/commands}/remember.md +0 -0
- /package/{commands → core/commands}/search.md +0 -0
- /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/{commands → core/commands}/managed-sync.d.ts +0 -0
- /package/dist/{commands → core/commands}/mcp-server.d.ts +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/{core-memory.d.ts → ingestion/core-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/{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
|
@@ -2,10 +2,10 @@ import { and, desc, eq, gte, lte } from 'drizzle-orm';
|
|
|
2
2
|
import { getDb } from '../../db/index.js';
|
|
3
3
|
import { getSchema } from '../../db/schema.js';
|
|
4
4
|
import { config } from '../../config.js';
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { createDatabaseClient } from '
|
|
8
|
-
import { normalizeTimestamp, clampLimit } from '
|
|
5
|
+
import { requireProject } from '../../core/projects.js';
|
|
6
|
+
import { deserializeMetadata } from '../../core/memory/serialization.js';
|
|
7
|
+
import { createDatabaseClient } from '../storage/database.js';
|
|
8
|
+
import { normalizeTimestamp, clampLimit } from '../lib/utils.js';
|
|
9
9
|
export async function searchConversations(input) {
|
|
10
10
|
const limit = clampLimit(input.limit, 5, 1, 50);
|
|
11
11
|
if (config.isTeamMode) {
|
|
@@ -19,10 +19,8 @@ export async function getRecentConversations(input) {
|
|
|
19
19
|
const limit = clampLimit(input.n, 3, 1, 50);
|
|
20
20
|
const whereParts = [];
|
|
21
21
|
if (input.project) {
|
|
22
|
-
const project = await
|
|
23
|
-
|
|
24
|
-
whereParts.push(eq(schema.conversations.projectId, project.id));
|
|
25
|
-
}
|
|
22
|
+
const project = await requireProject(input.project);
|
|
23
|
+
whereParts.push(eq(schema.conversations.projectId, project.id));
|
|
26
24
|
}
|
|
27
25
|
if (input.before) {
|
|
28
26
|
whereParts.push(lte(schema.conversations.startedAt, new Date(input.before)));
|
|
@@ -46,24 +44,24 @@ async function searchConversationsSqlite(input, limit) {
|
|
|
46
44
|
params.push(input.role);
|
|
47
45
|
}
|
|
48
46
|
params.push(limit);
|
|
49
|
-
const statement = sqlite.prepare(`
|
|
50
|
-
SELECT DISTINCT
|
|
51
|
-
c.id as id,
|
|
52
|
-
c.project_id as projectId,
|
|
53
|
-
c.session_id as sessionId,
|
|
54
|
-
c.title as title,
|
|
55
|
-
c.summary as summary,
|
|
56
|
-
c.message_count as messageCount,
|
|
57
|
-
c.token_count as tokenCount,
|
|
58
|
-
c.started_at as startedAt,
|
|
59
|
-
c.ended_at as endedAt,
|
|
60
|
-
c.metadata as metadata
|
|
61
|
-
FROM conversations c
|
|
62
|
-
JOIN messages m ON m.conversation_id = c.id
|
|
63
|
-
JOIN messages_fts ON messages_fts.rowid = m.rowid
|
|
64
|
-
WHERE ${where}
|
|
65
|
-
ORDER BY c.started_at DESC
|
|
66
|
-
LIMIT ?
|
|
47
|
+
const statement = sqlite.prepare(`
|
|
48
|
+
SELECT DISTINCT
|
|
49
|
+
c.id as id,
|
|
50
|
+
c.project_id as projectId,
|
|
51
|
+
c.session_id as sessionId,
|
|
52
|
+
c.title as title,
|
|
53
|
+
c.summary as summary,
|
|
54
|
+
c.message_count as messageCount,
|
|
55
|
+
c.token_count as tokenCount,
|
|
56
|
+
c.started_at as startedAt,
|
|
57
|
+
c.ended_at as endedAt,
|
|
58
|
+
c.metadata as metadata
|
|
59
|
+
FROM conversations c
|
|
60
|
+
JOIN messages m ON m.conversation_id = c.id
|
|
61
|
+
JOIN messages_fts ON messages_fts.rowid = m.rowid
|
|
62
|
+
WHERE ${where}
|
|
63
|
+
ORDER BY c.started_at DESC
|
|
64
|
+
LIMIT ?
|
|
67
65
|
`);
|
|
68
66
|
const rows = statement.all(...params);
|
|
69
67
|
return rows.map((row) => normalizeConversation(row));
|
|
@@ -77,26 +75,26 @@ async function searchConversationsPostgres(input, limit) {
|
|
|
77
75
|
whereParts.push(`m.role = $${values.length}`);
|
|
78
76
|
}
|
|
79
77
|
values.push(limit);
|
|
80
|
-
const rows = await db.$client.query(`SELECT DISTINCT ON (c.id)
|
|
81
|
-
c.id as "id",
|
|
82
|
-
c.project_id as "projectId",
|
|
83
|
-
c.session_id as "sessionId",
|
|
84
|
-
c.title as "title",
|
|
85
|
-
c.summary as "summary",
|
|
86
|
-
c.message_count as "messageCount",
|
|
87
|
-
c.token_count as "tokenCount",
|
|
88
|
-
c.started_at as "startedAt",
|
|
89
|
-
c.ended_at as "endedAt",
|
|
90
|
-
c.metadata as "metadata"
|
|
91
|
-
FROM conversations c
|
|
92
|
-
JOIN messages m ON m.conversation_id = c.id
|
|
93
|
-
WHERE ${whereParts.join(' AND ')}
|
|
94
|
-
ORDER BY c.id, c.started_at DESC
|
|
78
|
+
const rows = await db.$client.query(`SELECT DISTINCT ON (c.id)
|
|
79
|
+
c.id as "id",
|
|
80
|
+
c.project_id as "projectId",
|
|
81
|
+
c.session_id as "sessionId",
|
|
82
|
+
c.title as "title",
|
|
83
|
+
c.summary as "summary",
|
|
84
|
+
c.message_count as "messageCount",
|
|
85
|
+
c.token_count as "tokenCount",
|
|
86
|
+
c.started_at as "startedAt",
|
|
87
|
+
c.ended_at as "endedAt",
|
|
88
|
+
c.metadata as "metadata"
|
|
89
|
+
FROM conversations c
|
|
90
|
+
JOIN messages m ON m.conversation_id = c.id
|
|
91
|
+
WHERE ${whereParts.join(' AND ')}
|
|
92
|
+
ORDER BY c.id, c.started_at DESC
|
|
95
93
|
LIMIT $${values.length}`, values);
|
|
96
94
|
return rows.rows.map((row) => normalizeConversation(row));
|
|
97
95
|
}
|
|
98
96
|
function normalizeConversation(row) {
|
|
99
|
-
const metadata =
|
|
97
|
+
const metadata = deserializeMetadata(row.metadata ?? null);
|
|
100
98
|
return {
|
|
101
99
|
id: row.id,
|
|
102
100
|
projectId: row.projectId ?? row.project_id ?? null,
|
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
import { desc, eq } from 'drizzle-orm';
|
|
2
2
|
import { getDb } from '../../db/index.js';
|
|
3
3
|
import { getSchema } from '../../db/schema.js';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { normalizeTimestamp } from '../../core/utils.js';
|
|
4
|
+
import { requireProject } from '../../core/projects.js';
|
|
5
|
+
import { deserializeMetadata } from '../../core/memory/serialization.js';
|
|
6
|
+
import { createDatabaseClient } from '../storage/database.js';
|
|
7
|
+
import { normalizeTimestamp } from '../lib/utils.js';
|
|
9
8
|
export async function getEntitiesForProject(projectPath, limit) {
|
|
10
9
|
const db = createDatabaseClient(await getDb());
|
|
11
10
|
const schema = await getSchema();
|
|
12
|
-
const project = await
|
|
13
|
-
if (!project)
|
|
14
|
-
return [];
|
|
11
|
+
const project = await requireProject(projectPath);
|
|
15
12
|
const rows = await db.select().from(schema.entities)
|
|
16
13
|
.where(eq(schema.entities.projectId, project.id))
|
|
17
14
|
.orderBy(desc(schema.entities.createdAt))
|
|
@@ -19,7 +16,7 @@ export async function getEntitiesForProject(projectPath, limit) {
|
|
|
19
16
|
return rows.map((row) => normalizeEntity(row));
|
|
20
17
|
}
|
|
21
18
|
function normalizeEntity(row) {
|
|
22
|
-
const properties =
|
|
19
|
+
const properties = deserializeMetadata(row.properties ?? null);
|
|
23
20
|
return {
|
|
24
21
|
id: row.id,
|
|
25
22
|
projectId: row.projectId ?? row.project_id ?? null,
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compute a simple graph boost for a set of memory IDs.
|
|
3
|
+
* For each memory, sum (weight * coactivationCount) of outgoing associations.
|
|
4
|
+
* Returns a map from memoryId to boost value (default 0).
|
|
5
|
+
*/
|
|
6
|
+
export declare function computeGraphBoost(memoryIds: string[]): Promise<Record<string, number>>;
|
|
7
|
+
//# sourceMappingURL=graph-boost.d.ts.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { getDb } from '../../db/index.js';
|
|
2
|
+
import { memoryAssociations } from '../../db/drizzle/schema.js';
|
|
3
|
+
import { inArray } from 'drizzle-orm';
|
|
4
|
+
/**
|
|
5
|
+
* Compute a simple graph boost for a set of memory IDs.
|
|
6
|
+
* For each memory, sum (weight * coactivationCount) of outgoing associations.
|
|
7
|
+
* Returns a map from memoryId to boost value (default 0).
|
|
8
|
+
*/
|
|
9
|
+
export async function computeGraphBoost(memoryIds) {
|
|
10
|
+
const boost = {};
|
|
11
|
+
if (memoryIds.length === 0)
|
|
12
|
+
return boost;
|
|
13
|
+
const db = await getDb();
|
|
14
|
+
// @ts-ignore - drizzle overload
|
|
15
|
+
const rows = await db.select().from(memoryAssociations).where(inArray(memoryAssociations.fromMemoryId, memoryIds));
|
|
16
|
+
for (const row of rows) {
|
|
17
|
+
const from = row.fromMemoryId;
|
|
18
|
+
const val = (row.weight ?? 0) * (row.coactivationCount ?? 0);
|
|
19
|
+
boost[from] = (boost[from] ?? 0) + val;
|
|
20
|
+
}
|
|
21
|
+
return boost;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=graph-boost.js.map
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
* GitHub: https://github.com/tobi/qmd
|
|
16
16
|
*/
|
|
17
17
|
import { getQMDClient } from '../embeddings/qmd-client.js';
|
|
18
|
-
import {
|
|
18
|
+
import { search } from '../memory/memories.js';
|
|
19
19
|
import { logger } from '../logger.js';
|
|
20
20
|
import { config } from '../../config.js';
|
|
21
21
|
/**
|
|
@@ -29,7 +29,7 @@ export async function searchWithQMD(options) {
|
|
|
29
29
|
if (!(await client.isAvailable())) {
|
|
30
30
|
logger.warn('QMD unavailable, falling back to Squish search');
|
|
31
31
|
// Fallback to Squish search
|
|
32
|
-
const squishResults = await
|
|
32
|
+
const squishResults = await search(options);
|
|
33
33
|
return squishResults.map((r) => ({
|
|
34
34
|
...r,
|
|
35
35
|
source: 'squish'
|
|
@@ -73,7 +73,7 @@ export async function searchWithQMD(options) {
|
|
|
73
73
|
catch (error) {
|
|
74
74
|
logger.error(`QMD search failed: ${error}`);
|
|
75
75
|
// Fallback to Squish search
|
|
76
|
-
const squishResults = await
|
|
76
|
+
const squishResults = await search(options);
|
|
77
77
|
return squishResults.map((r) => ({
|
|
78
78
|
...r,
|
|
79
79
|
source: 'squish'
|
|
@@ -93,7 +93,7 @@ export async function fusedSearch(options) {
|
|
|
93
93
|
const qmdAvailable = await client.isAvailable();
|
|
94
94
|
// Run searches in parallel
|
|
95
95
|
const results = await Promise.allSettled([
|
|
96
|
-
|
|
96
|
+
search(options),
|
|
97
97
|
qmdAvailable ? searchWithQMD({ ...options, includeSquishResults: false }) : []
|
|
98
98
|
]);
|
|
99
99
|
const squishResults = results[0].status === 'fulfilled'
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { randomBytes, pbkdf2Sync, createCipheriv, createDecipheriv } from 'crypto';
|
|
2
|
+
import { config } from '../../config.js';
|
|
3
|
+
const ITERATIONS = 100_000;
|
|
4
|
+
const KEY_LEN = 32; // 256-bit
|
|
5
|
+
const DIGEST = 'sha256';
|
|
6
|
+
const ALGO = 'aes-256-gcm';
|
|
7
|
+
const NONCE_LEN = 12;
|
|
8
|
+
/**
|
|
9
|
+
* Derive a symmetric key from the passphrase and a salt.
|
|
10
|
+
* The salt is stored in `.squish/salt` (plain text) and is generated once.
|
|
11
|
+
*/
|
|
12
|
+
function getSalt() {
|
|
13
|
+
const fs = require('fs');
|
|
14
|
+
const path = require('path');
|
|
15
|
+
const saltPath = path.join(config.dataDir, 'salt');
|
|
16
|
+
if (!fs.existsSync(saltPath)) {
|
|
17
|
+
const salt = randomBytes(16).toString('hex');
|
|
18
|
+
fs.writeFileSync(saltPath, salt);
|
|
19
|
+
return Buffer.from(salt, 'hex');
|
|
20
|
+
}
|
|
21
|
+
return Buffer.from(fs.readFileSync(saltPath, 'utf-8'), 'hex');
|
|
22
|
+
}
|
|
23
|
+
function deriveKey(passphrase) {
|
|
24
|
+
const salt = getSalt();
|
|
25
|
+
return pbkdf2Sync(passphrase, salt, ITERATIONS, KEY_LEN, DIGEST);
|
|
26
|
+
}
|
|
27
|
+
export function encrypt(plain, passphrase) {
|
|
28
|
+
const key = deriveKey(passphrase || config.encryptionPassphrase);
|
|
29
|
+
const nonce = randomBytes(NONCE_LEN);
|
|
30
|
+
const cipher = createCipheriv(ALGO, key, nonce);
|
|
31
|
+
const encrypted = Buffer.concat([cipher.update(plain, 'utf8'), cipher.final()]);
|
|
32
|
+
const tag = cipher.getAuthTag();
|
|
33
|
+
const ciphertext = Buffer.concat([encrypted, tag]).toString('base64');
|
|
34
|
+
return { ciphertext, nonce: nonce.toString('base64') };
|
|
35
|
+
}
|
|
36
|
+
export function decrypt(ciphertext, nonceB64, passphrase) {
|
|
37
|
+
const key = deriveKey(passphrase || config.encryptionPassphrase);
|
|
38
|
+
const nonce = Buffer.from(nonceB64, 'base64');
|
|
39
|
+
const data = Buffer.from(ciphertext, 'base64');
|
|
40
|
+
const tag = data.slice(data.length - 16);
|
|
41
|
+
const encrypted = data.slice(0, data.length - 16);
|
|
42
|
+
const decipher = createDecipheriv(ALGO, key, nonce);
|
|
43
|
+
decipher.setAuthTag(tag);
|
|
44
|
+
const decrypted = Buffer.concat([decipher.update(encrypted), decipher.final()]);
|
|
45
|
+
return decrypted.toString('utf8');
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=encrypt.js.map
|
|
@@ -16,6 +16,11 @@ export declare function pinMemory(memoryId: string): Promise<void>;
|
|
|
16
16
|
export declare function unpinMemory(memoryId: string): Promise<void>;
|
|
17
17
|
/**
|
|
18
18
|
* Get all pinned memories for auto-injection into context
|
|
19
|
+
* Works regardless of governance settings - pinned memories should always be accessible
|
|
19
20
|
*/
|
|
20
|
-
export declare function getPinnedMemories(): Promise<any[]>;
|
|
21
|
+
export declare function getPinnedMemories(projectId?: string): Promise<any[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Get pinned memories formatted for context injection
|
|
24
|
+
*/
|
|
25
|
+
export declare function getPinnedMemoriesForContext(projectId?: string): Promise<string[]>;
|
|
21
26
|
//# sourceMappingURL=governance.d.ts.map
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory Governance
|
|
3
|
+
* Implements protection, pinning, and immutability rules
|
|
4
|
+
*/
|
|
5
|
+
import { eq } from 'drizzle-orm';
|
|
6
|
+
import { getDb } from '../../db/index.js';
|
|
7
|
+
import { getSchema } from '../../db/schema.js';
|
|
8
|
+
import { performMemoryOperation } from '../utils/memory-operations.js';
|
|
9
|
+
import { logger } from '../logger.js';
|
|
10
|
+
import { createDatabaseClient } from '../storage/database.js';
|
|
11
|
+
/**
|
|
12
|
+
* Mark a memory as protected (cannot be evicted)
|
|
13
|
+
*/
|
|
14
|
+
export async function protectMemory(memoryId, reason) {
|
|
15
|
+
await performMemoryOperation(memoryId, {
|
|
16
|
+
name: 'protecting memory',
|
|
17
|
+
updates: {
|
|
18
|
+
isProtected: true,
|
|
19
|
+
metadata: { protectionReason: reason, protectedAt: new Date().toISOString() },
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Pin a memory for automatic injection into context
|
|
25
|
+
*/
|
|
26
|
+
export async function pinMemory(memoryId) {
|
|
27
|
+
const db = createDatabaseClient(await getDb());
|
|
28
|
+
const schema = await getSchema();
|
|
29
|
+
await db
|
|
30
|
+
.update(schema.memories)
|
|
31
|
+
.set({
|
|
32
|
+
isPinned: true,
|
|
33
|
+
importanceScore: 100,
|
|
34
|
+
lastImportanceRecalc: new Date(),
|
|
35
|
+
})
|
|
36
|
+
.where(eq(schema.memories.id, memoryId));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Unpin a memory
|
|
40
|
+
*/
|
|
41
|
+
export async function unpinMemory(memoryId) {
|
|
42
|
+
const db = createDatabaseClient(await getDb());
|
|
43
|
+
const schema = await getSchema();
|
|
44
|
+
await db
|
|
45
|
+
.update(schema.memories)
|
|
46
|
+
.set({
|
|
47
|
+
isPinned: false,
|
|
48
|
+
lastImportanceRecalc: new Date(),
|
|
49
|
+
})
|
|
50
|
+
.where(eq(schema.memories.id, memoryId));
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get all pinned memories for auto-injection into context
|
|
54
|
+
* Works regardless of governance settings - pinned memories should always be accessible
|
|
55
|
+
*/
|
|
56
|
+
export async function getPinnedMemories(projectId) {
|
|
57
|
+
try {
|
|
58
|
+
const db = await getDb();
|
|
59
|
+
const schema = await getSchema();
|
|
60
|
+
let query = db
|
|
61
|
+
.select()
|
|
62
|
+
.from(schema.memories)
|
|
63
|
+
.where(eq(schema.memories.isPinned, true))
|
|
64
|
+
.limit(50);
|
|
65
|
+
return await query;
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
logger.error('Error retrieving pinned memories', error);
|
|
69
|
+
return [];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get pinned memories formatted for context injection
|
|
74
|
+
*/
|
|
75
|
+
export async function getPinnedMemoriesForContext(projectId) {
|
|
76
|
+
const pinned = await getPinnedMemories(projectId);
|
|
77
|
+
return pinned.map(m => `[Pinned] ${m.content?.substring(0, 500) || '(no content)'}`);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=governance.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/** Session Auto-Load - Automatically load context when MCP session initializes */
|
|
2
2
|
import { logger } from '../logger.js';
|
|
3
3
|
import { config } from '../../config.js';
|
|
4
|
-
import { initializeCoreMemory, getCoreMemory } from '../core-memory.js';
|
|
5
|
-
import {
|
|
6
|
-
import { getProjectContext } from '../context.js';
|
|
7
|
-
import {
|
|
4
|
+
import { initializeCoreMemory, getCoreMemory } from '../ingestion/core-memory.js';
|
|
5
|
+
import { search } from '../memory/memories.js';
|
|
6
|
+
import { getProjectContext } from '../context/context.js';
|
|
7
|
+
import { getOrCreateProject } from '../projects.js';
|
|
8
8
|
import { DEFAULT_AUTO_LOAD_CONFIG } from './types.js';
|
|
9
9
|
function estimateTokens(text) {
|
|
10
10
|
return Math.ceil(text.length / 4);
|
|
@@ -26,7 +26,7 @@ export async function performAutoLoad(projectPath, customConfig) {
|
|
|
26
26
|
return result;
|
|
27
27
|
}
|
|
28
28
|
try {
|
|
29
|
-
const project = await
|
|
29
|
+
const project = await getOrCreateProject(projectPath);
|
|
30
30
|
if (!project) {
|
|
31
31
|
result.warnings.push(`Failed to create/find project: ${projectPath}`);
|
|
32
32
|
result.duration = Date.now() - startTime;
|
|
@@ -52,7 +52,7 @@ export async function performAutoLoad(projectPath, customConfig) {
|
|
|
52
52
|
}
|
|
53
53
|
if (cfg.includeRecentMemories && cfg.recentMemoryCount > 0) {
|
|
54
54
|
try {
|
|
55
|
-
const recentMemories = await
|
|
55
|
+
const recentMemories = await search({
|
|
56
56
|
query: '',
|
|
57
57
|
project: projectPath,
|
|
58
58
|
limit: cfg.recentMemoryCount,
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** Self-Iteration Job - Auto-extract key facts from ended conversations
|
|
2
|
+
*
|
|
3
|
+
* Processes conversations to extract memories and generate summaries
|
|
4
|
+
*/
|
|
5
|
+
import { type JobHandler } from '../scheduler/cron-scheduler.js';
|
|
6
|
+
export interface SelfIterationConfig {
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
extractFacts: boolean;
|
|
9
|
+
generateSummaries: boolean;
|
|
10
|
+
consolidateMemories: boolean;
|
|
11
|
+
minMessageCount: number;
|
|
12
|
+
maxMessagesToProcess: number;
|
|
13
|
+
}
|
|
14
|
+
declare const DEFAULT_CONFIG: SelfIterationConfig;
|
|
15
|
+
/**
|
|
16
|
+
* Register self-iteration job handler
|
|
17
|
+
*/
|
|
18
|
+
declare const selfIterationHandler: JobHandler;
|
|
19
|
+
export { selfIterationHandler, DEFAULT_CONFIG };
|
|
20
|
+
//# sourceMappingURL=self-iteration-job.d.ts.map
|