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
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { pgTable, text, timestamp, uuid, integer, boolean, jsonb, index, vector, numeric } from 'drizzle-orm/pg-core';
|
|
2
2
|
import { relations } from 'drizzle-orm';
|
|
3
|
-
// ============================================================================
|
|
4
3
|
// Core Tables
|
|
5
4
|
// ============================================================================
|
|
6
5
|
/**
|
|
@@ -15,7 +14,6 @@ export const users = pgTable('users', {
|
|
|
15
14
|
createdAt: timestamp('created_at').defaultNow().notNull(),
|
|
16
15
|
updatedAt: timestamp('updated_at').defaultNow().notNull(),
|
|
17
16
|
});
|
|
18
|
-
// ============================================================================
|
|
19
17
|
// Memory Editing Tables
|
|
20
18
|
// ============================================================================
|
|
21
19
|
/**
|
|
@@ -74,7 +72,8 @@ export const memories = pgTable('memories', {
|
|
|
74
72
|
embedding: vector('embedding', { dimensions: 1536 }), // OpenAI ada-002 compatible
|
|
75
73
|
// Metadata
|
|
76
74
|
source: text('source'), // Where this memory came from (tool, hook, user)
|
|
77
|
-
confidence: integer('confidence').default(
|
|
75
|
+
confidence: integer('confidence').default(50), // 0-100 confidence score (default: speculative)
|
|
76
|
+
confidenceLevel: text('confidence_level').default('speculative').$type(), // Iteration 3: Confidence flags (default: speculative)
|
|
78
77
|
tags: text('tags').array(),
|
|
79
78
|
metadata: jsonb('metadata').$type(),
|
|
80
79
|
// v0.2.0: Privacy and relevance
|
|
@@ -84,7 +83,12 @@ export const memories = pgTable('memories', {
|
|
|
84
83
|
// v0.3.0: Lifecycle Management
|
|
85
84
|
sector: text('sector').default('episodic').$type(),
|
|
86
85
|
tier: text('tier').default('hot').$type(),
|
|
87
|
-
|
|
86
|
+
status: text('status').notNull().default('active'),
|
|
87
|
+
encrypted_content: text('encrypted_content'),
|
|
88
|
+
encryption_nonce: text('encryption_nonce'),
|
|
89
|
+
is_encrypted: boolean('is_encrypted').default(false),
|
|
90
|
+
// Per-memory decay rate (integer percentage, e.g., 30 = 30% decay per cycle)
|
|
91
|
+
decayRate: integer('decay_rate').default(30),
|
|
88
92
|
coactivationScore: integer('coactivation_score').default(0), // 0-100
|
|
89
93
|
lastDecayAt: timestamp('last_decay_at').defaultNow(),
|
|
90
94
|
// v0.3.0: Agent-Aware
|
|
@@ -124,10 +128,15 @@ export const memories = pgTable('memories', {
|
|
|
124
128
|
// v0.4.2: Namespace support
|
|
125
129
|
namespaceId: uuid('namespace_id').references(() => namespaces.id, { onDelete: 'set null' }),
|
|
126
130
|
namespacePath: text('namespace_path'),
|
|
131
|
+
// v1.1.5: Places support (spatial memory organization)
|
|
132
|
+
placeId: uuid('place_id').references(() => places.id, { onDelete: 'set null' }),
|
|
133
|
+
placeSortOrder: integer('place_sort_order'),
|
|
127
134
|
// v0.4.3: Layer support
|
|
128
135
|
hasL0Abstract: boolean('has_l0_abstract').default(false),
|
|
129
136
|
hasL1Overview: boolean('has_l1_overview').default(false),
|
|
130
137
|
lastLayerUpdate: timestamp('last_layer_update'),
|
|
138
|
+
// v1.0.x: Token tracking
|
|
139
|
+
tokensEstimate: integer('tokens_estimate').default(0).notNull(),
|
|
131
140
|
createdAt: timestamp('created_at').defaultNow().notNull(),
|
|
132
141
|
updatedAt: timestamp('updated_at').defaultNow().notNull(),
|
|
133
142
|
}, (table) => [
|
|
@@ -205,41 +214,64 @@ export const messages = pgTable('messages', {
|
|
|
205
214
|
index('messages_created_idx').on(table.createdAt),
|
|
206
215
|
]);
|
|
207
216
|
/**
|
|
208
|
-
*
|
|
217
|
+
* Learnings - agent learnings: success, failure, fix, insight
|
|
209
218
|
*/
|
|
210
|
-
export const
|
|
219
|
+
export const learnings = pgTable('learnings', {
|
|
211
220
|
id: uuid('id').primaryKey().defaultRandom(),
|
|
212
221
|
projectId: uuid('project_id').references(() => projects.id, { onDelete: 'cascade' }),
|
|
213
222
|
conversationId: uuid('conversation_id').references(() => conversations.id, { onDelete: 'set null' }),
|
|
214
|
-
//
|
|
223
|
+
// Learning type: success, failure, fix, insight
|
|
215
224
|
type: text('type').notNull().$type(),
|
|
216
|
-
action: text('action').notNull(),
|
|
217
|
-
target: text('target'),
|
|
225
|
+
action: text('action').notNull(),
|
|
226
|
+
target: text('target'),
|
|
218
227
|
// Details
|
|
219
228
|
summary: text('summary').notNull(),
|
|
220
229
|
details: jsonb('details').$type(),
|
|
221
230
|
// Semantic search
|
|
222
231
|
embedding: vector('embedding', { dimensions: 1536 }),
|
|
223
|
-
//
|
|
232
|
+
// Optional link to a memory
|
|
233
|
+
memoryId: uuid('memory_id').references(() => memories.id, { onDelete: 'set null' }),
|
|
234
|
+
// Folder-scoped
|
|
224
235
|
folderPath: text('folder_path'),
|
|
225
236
|
projectPath: text('project_path'),
|
|
226
|
-
//
|
|
237
|
+
// Privacy and relevance
|
|
227
238
|
isPrivate: boolean('is_private').default(false),
|
|
228
239
|
hasSecrets: boolean('has_secrets').default(false),
|
|
229
|
-
relevanceScore: integer('relevance_score').default(50),
|
|
240
|
+
relevanceScore: integer('relevance_score').default(50),
|
|
230
241
|
// Classification
|
|
231
|
-
category: text('category'),
|
|
232
|
-
importance: integer('importance').default(50),
|
|
242
|
+
category: text('category'),
|
|
243
|
+
importance: integer('importance').default(50),
|
|
233
244
|
metadata: jsonb('metadata').$type(),
|
|
245
|
+
// Migration tracking
|
|
246
|
+
isImported: boolean('is_imported').default(false),
|
|
234
247
|
createdAt: timestamp('created_at').defaultNow().notNull(),
|
|
235
248
|
}, (table) => [
|
|
236
|
-
index('
|
|
237
|
-
index('
|
|
238
|
-
index('
|
|
239
|
-
index('
|
|
240
|
-
index('
|
|
241
|
-
index('
|
|
242
|
-
index('
|
|
249
|
+
index('learnings_project_idx').on(table.projectId),
|
|
250
|
+
index('learnings_type_idx').on(table.type),
|
|
251
|
+
index('learnings_action_idx').on(table.action),
|
|
252
|
+
index('learnings_created_idx').on(table.createdAt),
|
|
253
|
+
index('learnings_folder_idx').on(table.folderPath),
|
|
254
|
+
index('learnings_relevance_idx').on(table.relevanceScore),
|
|
255
|
+
index('learnings_private_idx').on(table.isPrivate),
|
|
256
|
+
index('learnings_memory_idx').on(table.memoryId),
|
|
257
|
+
]);
|
|
258
|
+
/**
|
|
259
|
+
* Agent Preferences - learned agent preferences from learnings
|
|
260
|
+
* Enables agents to evolve and remember preferences over time
|
|
261
|
+
*/
|
|
262
|
+
export const agentPreferences = pgTable('agent_preferences', {
|
|
263
|
+
id: uuid('id').primaryKey().defaultRandom(),
|
|
264
|
+
projectId: uuid('project_id').references(() => projects.id, { onDelete: 'cascade' }).notNull(),
|
|
265
|
+
key: text('key').notNull(), // e.g., "prefer_bun", "prefer_typescript"
|
|
266
|
+
value: text('value').notNull(), // e.g., "bun", "true"
|
|
267
|
+
sourceMemoryId: uuid('source_memory_id').references(() => memories.id, { onDelete: 'set null' }),
|
|
268
|
+
confidence: numeric('confidence', { precision: 3, scale: 2 }).default('0.5'), // 0.00 to 1.00
|
|
269
|
+
usageCount: integer('usage_count').default(1),
|
|
270
|
+
lastUpdated: timestamp('last_updated').defaultNow().notNull(),
|
|
271
|
+
createdAt: timestamp('created_at').defaultNow().notNull(),
|
|
272
|
+
}, (table) => [
|
|
273
|
+
index('agent_preferences_project_idx').on(table.projectId),
|
|
274
|
+
index('agent_preferences_key_idx').on(table.key),
|
|
243
275
|
]);
|
|
244
276
|
/**
|
|
245
277
|
* Entities - knowledge graph nodes
|
|
@@ -277,6 +309,63 @@ export const namespaces = pgTable('namespaces', {
|
|
|
277
309
|
index('namespaces_project_idx').on(table.projectId),
|
|
278
310
|
index('namespaces_parent_idx').on(table.parentId),
|
|
279
311
|
]);
|
|
312
|
+
/**
|
|
313
|
+
* Places - Spatial memory organization
|
|
314
|
+
*/
|
|
315
|
+
export const places = pgTable('places', {
|
|
316
|
+
id: uuid('id').primaryKey().defaultRandom(),
|
|
317
|
+
projectId: uuid('project_id').references(() => projects.id, { onDelete: 'cascade' }).notNull(),
|
|
318
|
+
name: text('name').notNull(),
|
|
319
|
+
placeType: text('place_type').notNull(),
|
|
320
|
+
parentId: uuid('parent_id').references(() => places.id, { onDelete: 'set null' }),
|
|
321
|
+
sortOrder: integer('sort_order').default(0),
|
|
322
|
+
positionX: integer('position_x').default(0),
|
|
323
|
+
positionY: integer('position_y').default(0),
|
|
324
|
+
description: text('description'),
|
|
325
|
+
purpose: text('purpose'),
|
|
326
|
+
memoryCount: integer('memory_count').default(0),
|
|
327
|
+
createdAt: timestamp('created_at').defaultNow().notNull(),
|
|
328
|
+
updatedAt: timestamp('updated_at').defaultNow().notNull(),
|
|
329
|
+
}, (table) => [
|
|
330
|
+
index('places_project_idx').on(table.projectId),
|
|
331
|
+
index('places_type_idx').on(table.placeType),
|
|
332
|
+
index('places_parent_idx').on(table.parentId),
|
|
333
|
+
index('places_sort_order_idx').on(table.projectId, table.sortOrder),
|
|
334
|
+
]);
|
|
335
|
+
/**
|
|
336
|
+
* Memory-Place assignments
|
|
337
|
+
*/
|
|
338
|
+
export const memoryPlaces = pgTable('memory_places', {
|
|
339
|
+
id: uuid('id').primaryKey().defaultRandom(),
|
|
340
|
+
memoryId: uuid('memory_id').references(() => memories.id, { onDelete: 'cascade' }).notNull(),
|
|
341
|
+
placeId: uuid('place_id').references(() => places.id, { onDelete: 'cascade' }).notNull(),
|
|
342
|
+
isManual: boolean('is_manual').default(false),
|
|
343
|
+
ruleId: uuid('rule_id'),
|
|
344
|
+
createdAt: timestamp('created_at').defaultNow().notNull(),
|
|
345
|
+
}, (table) => [
|
|
346
|
+
index('memory_places_memory_idx').on(table.memoryId),
|
|
347
|
+
index('memory_places_place_idx').on(table.placeId),
|
|
348
|
+
]);
|
|
349
|
+
/**
|
|
350
|
+
* Place auto-assignment rules
|
|
351
|
+
*/
|
|
352
|
+
export const placeRules = pgTable('place_rules', {
|
|
353
|
+
id: uuid('id').primaryKey().defaultRandom(),
|
|
354
|
+
projectId: uuid('project_id').references(() => projects.id, { onDelete: 'cascade' }).notNull(),
|
|
355
|
+
name: text('name').notNull(),
|
|
356
|
+
placeType: text('place_type').notNull(),
|
|
357
|
+
matchTool: text('match_tool'),
|
|
358
|
+
matchKeyword: text('match_keyword'),
|
|
359
|
+
matchTag: text('match_tag'),
|
|
360
|
+
matchMemoryType: text('match_memory_type'),
|
|
361
|
+
priority: integer('priority').default(0),
|
|
362
|
+
enabled: boolean('enabled').default(true),
|
|
363
|
+
createdAt: timestamp('created_at').defaultNow().notNull(),
|
|
364
|
+
updatedAt: timestamp('updated_at').defaultNow().notNull(),
|
|
365
|
+
}, (table) => [
|
|
366
|
+
index('place_rules_project_idx').on(table.projectId),
|
|
367
|
+
index('place_rules_type_idx').on(table.placeType),
|
|
368
|
+
]);
|
|
280
369
|
/**
|
|
281
370
|
* Memory Layers - Tiered L0/L1/L2 summaries for token-efficient retrieval
|
|
282
371
|
*/
|
|
@@ -308,7 +397,6 @@ export const entityRelations = pgTable('entity_relations', {
|
|
|
308
397
|
index('relations_to_idx').on(table.toEntityId),
|
|
309
398
|
index('relations_type_idx').on(table.type),
|
|
310
399
|
]);
|
|
311
|
-
// ============================================================================
|
|
312
400
|
// v0.3.0: Lifecycle & Governance Tables
|
|
313
401
|
// ============================================================================
|
|
314
402
|
/**
|
|
@@ -366,7 +454,6 @@ export const memorySnapshots = pgTable('memory_snapshots', {
|
|
|
366
454
|
index('snapshots_type_idx').on(table.snapshotType),
|
|
367
455
|
index('snapshots_created_idx').on(table.createdAt),
|
|
368
456
|
]);
|
|
369
|
-
// ============================================================================
|
|
370
457
|
// Progressive Disclosure & Context Paging Tables
|
|
371
458
|
// ============================================================================
|
|
372
459
|
/**
|
|
@@ -415,7 +502,6 @@ export const contextPagingSessions = pgTable('context_paging_sessions', {
|
|
|
415
502
|
index('context_paging_project_idx').on(table.projectId),
|
|
416
503
|
index('context_paging_created_idx').on(table.createdAt),
|
|
417
504
|
]);
|
|
418
|
-
// ============================================================================
|
|
419
505
|
// Memory Merging Tables
|
|
420
506
|
// ============================================================================
|
|
421
507
|
/**
|
|
@@ -559,7 +645,6 @@ export const contextSessions = pgTable('context_sessions', {
|
|
|
559
645
|
index('context_sessions_project_idx').on(table.projectId),
|
|
560
646
|
index('context_sessions_created_idx').on(table.createdAt),
|
|
561
647
|
]);
|
|
562
|
-
// ============================================================================
|
|
563
648
|
// Relations (Drizzle ORM)
|
|
564
649
|
// ============================================================================
|
|
565
650
|
export const usersRelations = relations(users, ({ many }) => ({
|
|
@@ -569,7 +654,7 @@ export const usersRelations = relations(users, ({ many }) => ({
|
|
|
569
654
|
export const projectsRelations = relations(projects, ({ many }) => ({
|
|
570
655
|
memories: many(memories),
|
|
571
656
|
conversations: many(conversations),
|
|
572
|
-
|
|
657
|
+
learnings: many(learnings),
|
|
573
658
|
entities: many(entities),
|
|
574
659
|
}));
|
|
575
660
|
export const memoriesRelations = relations(memories, ({ one }) => ({
|
|
@@ -592,21 +677,35 @@ export const conversationsRelations = relations(conversations, ({ one, many }) =
|
|
|
592
677
|
references: [users.id],
|
|
593
678
|
}),
|
|
594
679
|
messages: many(messages),
|
|
595
|
-
|
|
680
|
+
learnings: many(learnings),
|
|
596
681
|
}));
|
|
597
|
-
export const
|
|
682
|
+
export const learningsRelations = relations(learnings, ({ one }) => ({
|
|
683
|
+
project: one(projects, {
|
|
684
|
+
fields: [learnings.projectId],
|
|
685
|
+
references: [projects.id],
|
|
686
|
+
}),
|
|
598
687
|
conversation: one(conversations, {
|
|
599
|
-
fields: [
|
|
688
|
+
fields: [learnings.conversationId],
|
|
600
689
|
references: [conversations.id],
|
|
601
690
|
}),
|
|
691
|
+
memory: one(memories, {
|
|
692
|
+
fields: [learnings.memoryId],
|
|
693
|
+
references: [memories.id],
|
|
694
|
+
}),
|
|
602
695
|
}));
|
|
603
|
-
export const
|
|
696
|
+
export const agentPreferencesRelations = relations(agentPreferences, ({ one }) => ({
|
|
604
697
|
project: one(projects, {
|
|
605
|
-
fields: [
|
|
698
|
+
fields: [agentPreferences.projectId],
|
|
606
699
|
references: [projects.id],
|
|
607
700
|
}),
|
|
701
|
+
sourceMemory: one(memories, {
|
|
702
|
+
fields: [agentPreferences.sourceMemoryId],
|
|
703
|
+
references: [memories.id],
|
|
704
|
+
}),
|
|
705
|
+
}));
|
|
706
|
+
export const messagesRelations = relations(messages, ({ one }) => ({
|
|
608
707
|
conversation: one(conversations, {
|
|
609
|
-
fields: [
|
|
708
|
+
fields: [messages.conversationId],
|
|
610
709
|
references: [conversations.id],
|
|
611
710
|
}),
|
|
612
711
|
}));
|
|
@@ -696,4 +795,65 @@ export const memoryHashCacheRelations = relations(memoryHashCache, ({ one }) =>
|
|
|
696
795
|
references: [projects.id],
|
|
697
796
|
}),
|
|
698
797
|
}));
|
|
798
|
+
// Belief Systems - Derived Beliefs from Memory
|
|
799
|
+
// ============================================================================
|
|
800
|
+
/**
|
|
801
|
+
* Beliefs - Derived semantic beliefs extracted from memories
|
|
802
|
+
* Represents inferred decisions, preferences, constraints, failure causes
|
|
803
|
+
*/
|
|
804
|
+
export const beliefs = pgTable('beliefs', {
|
|
805
|
+
id: uuid('id').primaryKey().defaultRandom(),
|
|
806
|
+
projectId: uuid('project_id').references(() => projects.id, { onDelete: 'cascade' }),
|
|
807
|
+
// Belief identification
|
|
808
|
+
beliefType: text('belief_type').notNull(),
|
|
809
|
+
statement: text('statement').notNull(),
|
|
810
|
+
normalizedKey: text('normalized_key').notNull(),
|
|
811
|
+
// Confidence and decay
|
|
812
|
+
confidence: integer('confidence').default(50), // 0-100
|
|
813
|
+
beliefDecayRate: integer('belief_decay_rate').default(30), // days half-life
|
|
814
|
+
lastConfirmedAt: timestamp('last_confirmed_at'),
|
|
815
|
+
sourceCount: integer('source_count').default(1),
|
|
816
|
+
// Status
|
|
817
|
+
status: text('status').default('active'),
|
|
818
|
+
// Context and evidence
|
|
819
|
+
reason: text('reason'),
|
|
820
|
+
context: text('context'),
|
|
821
|
+
evidenceSummary: text('evidence_summary'),
|
|
822
|
+
// Metadata (stores edges, derivation info)
|
|
823
|
+
metadata: jsonb('metadata'),
|
|
824
|
+
createdAt: timestamp('created_at').defaultNow().notNull(),
|
|
825
|
+
updatedAt: timestamp('updated_at').defaultNow().notNull(),
|
|
826
|
+
}, (table) => [
|
|
827
|
+
index('beliefs_project_idx').on(table.projectId),
|
|
828
|
+
index('beliefs_type_idx').on(table.beliefType),
|
|
829
|
+
index('beliefs_status_idx').on(table.status),
|
|
830
|
+
index('beliefs_confidence_idx').on(table.confidence),
|
|
831
|
+
index('beliefs_normalized_key_idx').on(table.normalizedKey),
|
|
832
|
+
]);
|
|
833
|
+
/**
|
|
834
|
+
* Belief Memory Sources - Links beliefs to source memories
|
|
835
|
+
*/
|
|
836
|
+
export const beliefMemorySources = pgTable('belief_memory_sources', {
|
|
837
|
+
id: uuid('id').primaryKey().defaultRandom(),
|
|
838
|
+
beliefId: uuid('belief_id').references(() => beliefs.id, { onDelete: 'cascade' }).notNull(),
|
|
839
|
+
memoryId: uuid('memory_id').references(() => memories.id, { onDelete: 'cascade' }).notNull(),
|
|
840
|
+
createdAt: timestamp('created_at').defaultNow().notNull(),
|
|
841
|
+
}, (table) => [
|
|
842
|
+
index('belief_sources_belief_idx').on(table.beliefId),
|
|
843
|
+
index('belief_sources_memory_idx').on(table.memoryId),
|
|
844
|
+
]);
|
|
845
|
+
/**
|
|
846
|
+
* Belief Edges - Relationships between beliefs
|
|
847
|
+
*/
|
|
848
|
+
export const beliefEdges = pgTable('belief_edges', {
|
|
849
|
+
id: uuid('id').primaryKey().defaultRandom(),
|
|
850
|
+
fromBeliefId: uuid('from_belief_id').references(() => beliefs.id, { onDelete: 'cascade' }).notNull(),
|
|
851
|
+
toBeliefId: uuid('to_belief_id').references(() => beliefs.id, { onDelete: 'cascade' }).notNull(),
|
|
852
|
+
edgeType: text('edge_type').notNull(),
|
|
853
|
+
metadata: jsonb('metadata'),
|
|
854
|
+
createdAt: timestamp('created_at').defaultNow().notNull(),
|
|
855
|
+
}, (table) => [
|
|
856
|
+
index('belief_edges_from_idx').on(table.fromBeliefId),
|
|
857
|
+
index('belief_edges_to_idx').on(table.toBeliefId),
|
|
858
|
+
]);
|
|
699
859
|
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { defineConfig } from 'drizzle-kit';
|
|
2
|
+
export default defineConfig({
|
|
3
|
+
schema: './drizzle/schema.ts',
|
|
4
|
+
out: './drizzle/migrations',
|
|
5
|
+
dialect: 'postgresql',
|
|
6
|
+
dbCredentials: {
|
|
7
|
+
url: process.env.DATABASE_URL || 'postgres://squish:squish_dev@localhost:5432/squish',
|
|
8
|
+
},
|
|
9
|
+
verbose: true,
|
|
10
|
+
strict: true,
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=drizzle.config.js.map
|
package/dist/db/index.d.ts
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import { createDb } from './adapter.js';
|
|
2
2
|
import { config } from '../config.js';
|
|
3
|
-
export declare function getDb(): Promise<
|
|
4
|
-
$client: import("pg").Pool;
|
|
5
|
-
}) | (import("drizzle-orm/better-sqlite3").BetterSQLite3Database<typeof import("../drizzle/schema-sqlite.js")> & {
|
|
6
|
-
$client: import("better-sqlite3").Database;
|
|
7
|
-
}) | import("drizzle-orm/sql-js").SQLJsDatabase<typeof import("../drizzle/schema-sqlite.js")>>;
|
|
3
|
+
export declare function getDb(): Promise<any>;
|
|
8
4
|
export declare function checkDatabaseHealth(): Promise<boolean>;
|
|
9
5
|
export { config };
|
|
10
6
|
export { createDb };
|
package/dist/db/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { createDb } from './adapter.js';
|
|
2
2
|
import { config } from '../config.js';
|
|
3
3
|
import { logger } from '../core/logger.js';
|
|
4
|
+
import { isDatabaseUnavailableError } from '../core/lib/utils.js';
|
|
5
|
+
// Use any for db to avoid type conflicts between different drivers
|
|
6
|
+
// The actual type will be determined at runtime based on mode
|
|
4
7
|
let db = null;
|
|
5
8
|
let dbError = null;
|
|
6
9
|
export async function getDb() {
|
|
@@ -9,7 +12,38 @@ export async function getDb() {
|
|
|
9
12
|
}
|
|
10
13
|
if (!db) {
|
|
11
14
|
try {
|
|
12
|
-
|
|
15
|
+
// Priority: remote (user's Supabase/Neon) > team (PostgreSQL) > local (SQLite)
|
|
16
|
+
if (config.isRemoteMode) {
|
|
17
|
+
if (config.remoteBackend === 'neon' && config.neonProjectId && config.neonServiceKey) {
|
|
18
|
+
const { createNeonClient } = await import('./neon.js');
|
|
19
|
+
db = await createNeonClient();
|
|
20
|
+
}
|
|
21
|
+
else if (config.supabaseUrl && config.supabaseKey) {
|
|
22
|
+
const { createSupabaseClient } = await import('./supabase.js');
|
|
23
|
+
db = await createSupabaseClient();
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
throw new Error('Remote backend not configured (need SUPABASE_URL or NEON_PROJECT_ID)');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
else if (config.isTeamMode) {
|
|
30
|
+
// Team mode: PostgreSQL (or Supabase/Neon if explicitly configured)
|
|
31
|
+
if (config.teamBackend === 'supabase' && config.supabaseUrl && config.supabaseKey) {
|
|
32
|
+
const { createSupabaseClient } = await import('./supabase.js');
|
|
33
|
+
db = await createSupabaseClient();
|
|
34
|
+
}
|
|
35
|
+
else if (config.teamBackend === 'neon' && config.neonProjectId && config.neonServiceKey) {
|
|
36
|
+
const { createNeonClient } = await import('./neon.js');
|
|
37
|
+
db = await createNeonClient();
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
db = await createDb();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
// Local mode: SQLite
|
|
45
|
+
db = await createDb();
|
|
46
|
+
}
|
|
13
47
|
}
|
|
14
48
|
catch (error) {
|
|
15
49
|
dbError = error instanceof Error ? error.message : 'Database initialization failed';
|
|
@@ -21,21 +55,30 @@ export async function getDb() {
|
|
|
21
55
|
export async function checkDatabaseHealth() {
|
|
22
56
|
try {
|
|
23
57
|
const database = await getDb();
|
|
24
|
-
|
|
25
|
-
const dbClient = database.$client;
|
|
58
|
+
const dbClient = database.$client ?? database;
|
|
26
59
|
if (dbClient && typeof dbClient.query === 'function') {
|
|
27
60
|
await dbClient.query('SELECT 1');
|
|
28
61
|
}
|
|
62
|
+
else if (dbClient && typeof dbClient.exec === 'function') {
|
|
63
|
+
dbClient.exec('SELECT 1');
|
|
64
|
+
}
|
|
29
65
|
else if (dbClient && typeof dbClient.prepare === 'function') {
|
|
30
|
-
dbClient.prepare('SELECT 1')
|
|
66
|
+
const statement = dbClient.prepare('SELECT 1');
|
|
67
|
+
if (typeof statement.get === 'function') {
|
|
68
|
+
statement.get();
|
|
69
|
+
}
|
|
70
|
+
else if (typeof statement.step === 'function') {
|
|
71
|
+
statement.step();
|
|
72
|
+
}
|
|
73
|
+
if (typeof statement.free === 'function') {
|
|
74
|
+
statement.free();
|
|
75
|
+
}
|
|
31
76
|
}
|
|
32
77
|
return true;
|
|
33
78
|
}
|
|
34
79
|
catch (error) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
error.message?.includes('Database unavailable')) {
|
|
38
|
-
return false; // Graceful degradation - database unavailable but not an error
|
|
80
|
+
if (isDatabaseUnavailableError(error)) {
|
|
81
|
+
return false;
|
|
39
82
|
}
|
|
40
83
|
logger.error('Database health check failed', error);
|
|
41
84
|
return false;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Memory associations table migrations
|
|
3
|
+
*/
|
|
4
|
+
import { logger } from '../../core/logger.js';
|
|
5
|
+
export async function runAssociationsMigrations(sqlite) {
|
|
6
|
+
const associationsTableCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='memory_associations'").get();
|
|
7
|
+
if (!associationsTableCheck)
|
|
8
|
+
return;
|
|
9
|
+
const associationsInfo = sqlite.prepare("PRAGMA table_info(memory_associations)").all();
|
|
10
|
+
const existingAssociationsColumns = new Set(associationsInfo.map(col => col.name));
|
|
11
|
+
const associationsMigrations = [
|
|
12
|
+
{ col: 'metadata', sql: 'ALTER TABLE memory_associations ADD COLUMN metadata TEXT' },
|
|
13
|
+
];
|
|
14
|
+
for (const migration of associationsMigrations) {
|
|
15
|
+
if (!existingAssociationsColumns.has(migration.col)) {
|
|
16
|
+
try {
|
|
17
|
+
sqlite.exec(migration.sql);
|
|
18
|
+
logger.info(`Migration: Added column ${migration.col} to memory_associations table`);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
22
|
+
if (!msg.includes('duplicate column name')) {
|
|
23
|
+
throw new Error(`Migration failed for memory_associations.${migration.col}: ${msg}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=associations.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Beliefs table migrations
|
|
3
|
+
* Uses schema definitions to generate migrations
|
|
4
|
+
*
|
|
5
|
+
* For existing databases without beliefs table (pre-v1.2.0), creates the table.
|
|
6
|
+
* Then runs column migrations for all belief-related tables.
|
|
7
|
+
*/
|
|
8
|
+
import type { Database } from 'better-sqlite3';
|
|
9
|
+
export declare function runBeliefMigrations(sqlite: Database): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=beliefs.d.ts.map
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Beliefs table migrations
|
|
3
|
+
* Uses schema definitions to generate migrations
|
|
4
|
+
*
|
|
5
|
+
* For existing databases without beliefs table (pre-v1.2.0), creates the table.
|
|
6
|
+
* Then runs column migrations for all belief-related tables.
|
|
7
|
+
*/
|
|
8
|
+
import { migrateTable } from '../schema/generator.js';
|
|
9
|
+
import { beliefsSchema, beliefMemorySourcesSchema, beliefEdgesSchema } from '../schema/beliefs.js';
|
|
10
|
+
import { logger } from '../../core/logger.js';
|
|
11
|
+
export async function runBeliefMigrations(sqlite) {
|
|
12
|
+
// Check if beliefs table exists at all (for existing databases pre-v1.2.0)
|
|
13
|
+
const beliefsCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='beliefs'").get();
|
|
14
|
+
if (!beliefsCheck) {
|
|
15
|
+
// Create beliefs table for existing databases upgrading to v1.2.0
|
|
16
|
+
logger.info('Migration: Creating beliefs table for existing database');
|
|
17
|
+
try {
|
|
18
|
+
sqlite.exec(`
|
|
19
|
+
CREATE TABLE IF NOT EXISTS beliefs (
|
|
20
|
+
id TEXT PRIMARY KEY,
|
|
21
|
+
project_id TEXT,
|
|
22
|
+
belief_type TEXT NOT NULL,
|
|
23
|
+
statement TEXT NOT NULL,
|
|
24
|
+
normalized_key TEXT NOT NULL,
|
|
25
|
+
confidence REAL DEFAULT 0.5,
|
|
26
|
+
belief_decay_rate INTEGER DEFAULT 30,
|
|
27
|
+
last_confirmed_at INTEGER,
|
|
28
|
+
source_count INTEGER DEFAULT 1,
|
|
29
|
+
status TEXT DEFAULT 'active',
|
|
30
|
+
reason TEXT,
|
|
31
|
+
context TEXT,
|
|
32
|
+
evidence_summary TEXT,
|
|
33
|
+
metadata TEXT,
|
|
34
|
+
created_at INTEGER,
|
|
35
|
+
updated_at INTEGER,
|
|
36
|
+
UNIQUE(project_id, normalized_key)
|
|
37
|
+
)
|
|
38
|
+
`);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
42
|
+
logger.warn(`Migration: Could not create beliefs table: ${msg}`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const beliefSourcesCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='belief_memory_sources'").get();
|
|
46
|
+
if (!beliefSourcesCheck) {
|
|
47
|
+
sqlite.exec(`
|
|
48
|
+
CREATE TABLE IF NOT EXISTS belief_memory_sources (
|
|
49
|
+
id TEXT PRIMARY KEY,
|
|
50
|
+
belief_id TEXT,
|
|
51
|
+
memory_id TEXT,
|
|
52
|
+
created_at INTEGER,
|
|
53
|
+
UNIQUE(belief_id, memory_id)
|
|
54
|
+
)
|
|
55
|
+
`);
|
|
56
|
+
}
|
|
57
|
+
const beliefEdgesCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='belief_edges'").get();
|
|
58
|
+
if (!beliefEdgesCheck) {
|
|
59
|
+
sqlite.exec(`
|
|
60
|
+
CREATE TABLE IF NOT EXISTS belief_edges (
|
|
61
|
+
id TEXT PRIMARY KEY,
|
|
62
|
+
from_belief_id TEXT,
|
|
63
|
+
to_belief_id TEXT,
|
|
64
|
+
edge_type TEXT NOT NULL,
|
|
65
|
+
metadata TEXT,
|
|
66
|
+
created_at INTEGER,
|
|
67
|
+
UNIQUE(from_belief_id, to_belief_id, edge_type)
|
|
68
|
+
)
|
|
69
|
+
`);
|
|
70
|
+
}
|
|
71
|
+
// Run column migrations - adds missing columns to existing tables
|
|
72
|
+
await migrateTable(sqlite, beliefsSchema);
|
|
73
|
+
await migrateTable(sqlite, beliefMemorySourcesSchema);
|
|
74
|
+
await migrateTable(sqlite, beliefEdgesSchema);
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=beliefs.js.map
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core memory table migrations
|
|
3
|
+
*/
|
|
4
|
+
import { logger } from '../../core/logger.js';
|
|
5
|
+
export async function runCoreMemoryMigrations(sqlite) {
|
|
6
|
+
const coreMemoryTableCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='core_memory'").get();
|
|
7
|
+
if (!coreMemoryTableCheck)
|
|
8
|
+
return;
|
|
9
|
+
const coreMemoryInfo = sqlite.prepare("PRAGMA table_info(core_memory)").all();
|
|
10
|
+
const existingCoreMemoryColumns = new Set(coreMemoryInfo.map(col => col.name));
|
|
11
|
+
const coreMemoryMigrations = [
|
|
12
|
+
{ col: 'tokens_estimate', sql: 'ALTER TABLE core_memory ADD COLUMN tokens_estimate INTEGER DEFAULT 0 NOT NULL' },
|
|
13
|
+
];
|
|
14
|
+
for (const migration of coreMemoryMigrations) {
|
|
15
|
+
if (!existingCoreMemoryColumns.has(migration.col)) {
|
|
16
|
+
try {
|
|
17
|
+
sqlite.exec(migration.sql);
|
|
18
|
+
logger.info(`Migration: Added column ${migration.col} to core_memory table`);
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
22
|
+
if (!msg.includes('duplicate column name')) {
|
|
23
|
+
throw new Error(`Migration failed for core_memory.${migration.col}: ${msg}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=core-memory.js.map
|