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
package/dist/db/bootstrap.js
CHANGED
|
@@ -6,534 +6,791 @@ import { getDataDir } from '../config.js';
|
|
|
6
6
|
* SQLite uses INTEGER 0/1 for boolean values (no native boolean type)
|
|
7
7
|
* PostgreSQL uses native BOOLEAN type
|
|
8
8
|
*/
|
|
9
|
-
const sqliteSchemaSql = `
|
|
10
|
-
PRAGMA foreign_keys = ON;
|
|
11
|
-
|
|
12
|
-
CREATE TABLE IF NOT EXISTS users (
|
|
13
|
-
id TEXT PRIMARY KEY,
|
|
14
|
-
external_id TEXT UNIQUE,
|
|
15
|
-
name TEXT,
|
|
16
|
-
email TEXT,
|
|
17
|
-
preferences TEXT,
|
|
18
|
-
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
19
|
-
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
20
|
-
);
|
|
21
|
-
|
|
22
|
-
CREATE TABLE IF NOT EXISTS projects (
|
|
23
|
-
id TEXT PRIMARY KEY,
|
|
24
|
-
name TEXT NOT NULL,
|
|
25
|
-
path TEXT NOT NULL,
|
|
26
|
-
description TEXT,
|
|
27
|
-
metadata TEXT,
|
|
28
|
-
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
29
|
-
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
30
|
-
);
|
|
31
|
-
|
|
32
|
-
CREATE INDEX IF NOT EXISTS projects_path_idx ON projects(path);
|
|
33
|
-
|
|
34
|
-
CREATE TABLE IF NOT EXISTS memories (
|
|
35
|
-
id TEXT PRIMARY KEY,
|
|
36
|
-
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
37
|
-
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
38
|
-
type TEXT NOT NULL,
|
|
39
|
-
content TEXT NOT NULL,
|
|
40
|
-
summary TEXT,
|
|
41
|
-
embedding_json TEXT,
|
|
42
|
-
embedding BLOB,
|
|
43
|
-
source TEXT,
|
|
44
|
-
confidence INTEGER DEFAULT
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
)
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
CREATE INDEX IF NOT EXISTS
|
|
95
|
-
CREATE INDEX IF NOT EXISTS
|
|
96
|
-
CREATE INDEX IF NOT EXISTS
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
)
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
CREATE
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
CREATE
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
);
|
|
179
|
-
|
|
180
|
-
CREATE INDEX IF NOT EXISTS
|
|
181
|
-
CREATE INDEX IF NOT EXISTS
|
|
182
|
-
CREATE INDEX IF NOT EXISTS
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
CREATE
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
)
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
CREATE
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
CREATE
|
|
223
|
-
content,
|
|
224
|
-
content
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
CREATE
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
)
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
CREATE TABLE IF NOT EXISTS
|
|
263
|
-
id TEXT PRIMARY KEY,
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
);
|
|
276
|
-
|
|
277
|
-
CREATE INDEX IF NOT EXISTS
|
|
278
|
-
|
|
279
|
-
CREATE
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
)
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
);
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
)
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
9
|
+
const sqliteSchemaSql = `
|
|
10
|
+
PRAGMA foreign_keys = ON;
|
|
11
|
+
|
|
12
|
+
CREATE TABLE IF NOT EXISTS users (
|
|
13
|
+
id TEXT PRIMARY KEY,
|
|
14
|
+
external_id TEXT UNIQUE,
|
|
15
|
+
name TEXT,
|
|
16
|
+
email TEXT,
|
|
17
|
+
preferences TEXT,
|
|
18
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
19
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
CREATE TABLE IF NOT EXISTS projects (
|
|
23
|
+
id TEXT PRIMARY KEY,
|
|
24
|
+
name TEXT NOT NULL,
|
|
25
|
+
path TEXT NOT NULL,
|
|
26
|
+
description TEXT,
|
|
27
|
+
metadata TEXT,
|
|
28
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
29
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
CREATE INDEX IF NOT EXISTS projects_path_idx ON projects(path);
|
|
33
|
+
|
|
34
|
+
CREATE TABLE IF NOT EXISTS memories (
|
|
35
|
+
id TEXT PRIMARY KEY,
|
|
36
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
37
|
+
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
38
|
+
type TEXT NOT NULL,
|
|
39
|
+
content TEXT NOT NULL,
|
|
40
|
+
summary TEXT,
|
|
41
|
+
embedding_json TEXT,
|
|
42
|
+
embedding BLOB,
|
|
43
|
+
source TEXT,
|
|
44
|
+
confidence INTEGER DEFAULT 50,
|
|
45
|
+
confidence_level TEXT DEFAULT 'speculative',
|
|
46
|
+
tags TEXT,
|
|
47
|
+
metadata TEXT,
|
|
48
|
+
is_private INTEGER DEFAULT 0,
|
|
49
|
+
has_secrets INTEGER DEFAULT 0,
|
|
50
|
+
relevance_score INTEGER DEFAULT 50,
|
|
51
|
+
is_active INTEGER DEFAULT 1,
|
|
52
|
+
expires_at INTEGER,
|
|
53
|
+
access_count INTEGER DEFAULT 0,
|
|
54
|
+
last_accessed_at INTEGER,
|
|
55
|
+
is_merged INTEGER DEFAULT 0,
|
|
56
|
+
merged_into_id TEXT,
|
|
57
|
+
merged_at INTEGER,
|
|
58
|
+
is_canonical INTEGER DEFAULT 0,
|
|
59
|
+
merge_source_ids TEXT,
|
|
60
|
+
is_mergeable INTEGER DEFAULT 1,
|
|
61
|
+
merge_version INTEGER DEFAULT 1,
|
|
62
|
+
importance_score INTEGER DEFAULT 50,
|
|
63
|
+
importance_decay_rate INTEGER DEFAULT 30,
|
|
64
|
+
last_importance_recalc INTEGER,
|
|
65
|
+
consolidated_into TEXT,
|
|
66
|
+
consolidated_at INTEGER,
|
|
67
|
+
is_consolidated INTEGER DEFAULT 0,
|
|
68
|
+
sector TEXT DEFAULT 'episodic',
|
|
69
|
+
tier TEXT DEFAULT 'hot',
|
|
70
|
+
context_status TEXT DEFAULT 'out-of-context',
|
|
71
|
+
decay_rate INTEGER DEFAULT 30,
|
|
72
|
+
coactivation_score INTEGER DEFAULT 0,
|
|
73
|
+
last_decay_at INTEGER DEFAULT (strftime('%s','now')),
|
|
74
|
+
agent_id TEXT,
|
|
75
|
+
agent_role TEXT,
|
|
76
|
+
visibility_scope TEXT DEFAULT 'private',
|
|
77
|
+
is_protected INTEGER DEFAULT 0,
|
|
78
|
+
is_pinned INTEGER DEFAULT 0,
|
|
79
|
+
is_immutable INTEGER DEFAULT 0,
|
|
80
|
+
write_scope TEXT,
|
|
81
|
+
read_scope TEXT,
|
|
82
|
+
triggered_by TEXT,
|
|
83
|
+
capture_reason TEXT,
|
|
84
|
+
last_used_at INTEGER,
|
|
85
|
+
usage_count INTEGER DEFAULT 0,
|
|
86
|
+
valid_from INTEGER,
|
|
87
|
+
valid_to INTEGER,
|
|
88
|
+
superseded_by TEXT,
|
|
89
|
+
version INTEGER DEFAULT 1,
|
|
90
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
91
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
CREATE INDEX IF NOT EXISTS memories_project_idx ON memories(project_id);
|
|
95
|
+
CREATE INDEX IF NOT EXISTS memories_type_idx ON memories(type);
|
|
96
|
+
CREATE INDEX IF NOT EXISTS memories_created_idx ON memories(created_at);
|
|
97
|
+
CREATE INDEX IF NOT EXISTS memories_tags_idx ON memories(tags);
|
|
98
|
+
|
|
99
|
+
CREATE TABLE IF NOT EXISTS memory_associations (
|
|
100
|
+
id TEXT PRIMARY KEY,
|
|
101
|
+
from_memory_id TEXT NOT NULL,
|
|
102
|
+
to_memory_id TEXT NOT NULL,
|
|
103
|
+
association_type TEXT NOT NULL,
|
|
104
|
+
weight REAL DEFAULT 1,
|
|
105
|
+
coactivation_count INTEGER DEFAULT 1,
|
|
106
|
+
metadata TEXT,
|
|
107
|
+
last_coactivated_at INTEGER,
|
|
108
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
109
|
+
UNIQUE(from_memory_id, to_memory_id)
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
-- Composite index for graph traversal (v1.1.0)
|
|
113
|
+
CREATE INDEX IF NOT EXISTS associations_graph_traversal_idx ON memory_associations(from_memory_id, to_memory_id, weight, association_type);
|
|
114
|
+
|
|
115
|
+
CREATE TABLE IF NOT EXISTS conversations (
|
|
116
|
+
id TEXT PRIMARY KEY,
|
|
117
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
118
|
+
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
119
|
+
session_id TEXT NOT NULL,
|
|
120
|
+
title TEXT,
|
|
121
|
+
summary TEXT,
|
|
122
|
+
message_count INTEGER DEFAULT 0,
|
|
123
|
+
token_count INTEGER DEFAULT 0,
|
|
124
|
+
started_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
125
|
+
ended_at INTEGER,
|
|
126
|
+
metadata TEXT,
|
|
127
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
128
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
CREATE INDEX IF NOT EXISTS conversations_project_idx ON conversations(project_id);
|
|
132
|
+
CREATE INDEX IF NOT EXISTS conversations_session_idx ON conversations(session_id);
|
|
133
|
+
CREATE INDEX IF NOT EXISTS conversations_started_idx ON conversations(started_at);
|
|
134
|
+
|
|
135
|
+
CREATE TABLE IF NOT EXISTS messages (
|
|
136
|
+
id TEXT PRIMARY KEY,
|
|
137
|
+
conversation_id TEXT NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
|
|
138
|
+
role TEXT NOT NULL,
|
|
139
|
+
content TEXT NOT NULL,
|
|
140
|
+
embedding_json TEXT,
|
|
141
|
+
token_count INTEGER,
|
|
142
|
+
tool_calls TEXT,
|
|
143
|
+
metadata TEXT,
|
|
144
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
CREATE INDEX IF NOT EXISTS messages_conversation_idx ON messages(conversation_id);
|
|
148
|
+
CREATE INDEX IF NOT EXISTS messages_role_idx ON messages(role);
|
|
149
|
+
CREATE INDEX IF NOT EXISTS messages_created_idx ON messages(created_at);
|
|
150
|
+
|
|
151
|
+
-- Learnings table (renamed from observations)
|
|
152
|
+
CREATE TABLE IF NOT EXISTS learnings (
|
|
153
|
+
id TEXT PRIMARY KEY,
|
|
154
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
155
|
+
conversation_id TEXT REFERENCES conversations(id) ON DELETE SET NULL,
|
|
156
|
+
type TEXT NOT NULL,
|
|
157
|
+
action TEXT NOT NULL,
|
|
158
|
+
target TEXT,
|
|
159
|
+
summary TEXT NOT NULL,
|
|
160
|
+
details TEXT,
|
|
161
|
+
embedding_json TEXT,
|
|
162
|
+
embedding BLOB,
|
|
163
|
+
memory_id TEXT REFERENCES memories(id) ON DELETE SET NULL,
|
|
164
|
+
folder_path TEXT,
|
|
165
|
+
project_path TEXT,
|
|
166
|
+
is_private INTEGER DEFAULT 0,
|
|
167
|
+
has_secrets INTEGER DEFAULT 0,
|
|
168
|
+
relevance_score INTEGER DEFAULT 50,
|
|
169
|
+
category TEXT,
|
|
170
|
+
importance INTEGER DEFAULT 50,
|
|
171
|
+
metadata TEXT,
|
|
172
|
+
is_imported INTEGER DEFAULT 0,
|
|
173
|
+
-- UAM: Agent integration columns
|
|
174
|
+
agent_id TEXT,
|
|
175
|
+
tool_name TEXT,
|
|
176
|
+
session_id TEXT,
|
|
177
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
CREATE INDEX IF NOT EXISTS learnings_project_idx ON learnings(project_id);
|
|
181
|
+
CREATE INDEX IF NOT EXISTS learnings_type_idx ON learnings(type);
|
|
182
|
+
CREATE INDEX IF NOT EXISTS learnings_action_idx ON learnings(action);
|
|
183
|
+
CREATE INDEX IF NOT EXISTS observations_created_idx ON observations(created_at);
|
|
184
|
+
|
|
185
|
+
CREATE TABLE IF NOT EXISTS entities (
|
|
186
|
+
id TEXT PRIMARY KEY,
|
|
187
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
188
|
+
name TEXT NOT NULL,
|
|
189
|
+
type TEXT NOT NULL,
|
|
190
|
+
description TEXT,
|
|
191
|
+
embedding_json TEXT,
|
|
192
|
+
properties TEXT,
|
|
193
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
194
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
195
|
+
);
|
|
196
|
+
|
|
197
|
+
CREATE INDEX IF NOT EXISTS entities_project_idx ON entities(project_id);
|
|
198
|
+
CREATE INDEX IF NOT EXISTS entities_type_idx ON entities(type);
|
|
199
|
+
CREATE INDEX IF NOT EXISTS entities_name_idx ON entities(name);
|
|
200
|
+
|
|
201
|
+
CREATE TABLE IF NOT EXISTS entity_relations (
|
|
202
|
+
id TEXT PRIMARY KEY,
|
|
203
|
+
from_entity_id TEXT NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
|
|
204
|
+
to_entity_id TEXT NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
|
|
205
|
+
type TEXT NOT NULL,
|
|
206
|
+
weight INTEGER DEFAULT 1,
|
|
207
|
+
properties TEXT,
|
|
208
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
209
|
+
);
|
|
210
|
+
|
|
211
|
+
CREATE INDEX IF NOT EXISTS relations_from_idx ON entity_relations(from_entity_id);
|
|
212
|
+
CREATE INDEX IF NOT EXISTS relations_to_idx ON entity_relations(to_entity_id);
|
|
213
|
+
CREATE INDEX IF NOT EXISTS relations_type_idx ON entity_relations(type);
|
|
214
|
+
|
|
215
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS memories_fts USING fts5(
|
|
216
|
+
content,
|
|
217
|
+
tags,
|
|
218
|
+
content='memories',
|
|
219
|
+
content_rowid='rowid'
|
|
220
|
+
);
|
|
221
|
+
|
|
222
|
+
CREATE TRIGGER IF NOT EXISTS memories_ai AFTER INSERT ON memories BEGIN
|
|
223
|
+
INSERT INTO memories_fts(rowid, content, tags)
|
|
224
|
+
VALUES (new.rowid, new.content, COALESCE(new.tags, ''));
|
|
225
|
+
END;
|
|
226
|
+
|
|
227
|
+
CREATE TRIGGER IF NOT EXISTS memories_ad AFTER DELETE ON memories BEGIN
|
|
228
|
+
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
|
|
229
|
+
VALUES ('delete', old.rowid, old.content, COALESCE(old.tags, ''));
|
|
230
|
+
END;
|
|
231
|
+
|
|
232
|
+
CREATE TRIGGER IF NOT EXISTS memories_au AFTER UPDATE ON memories BEGIN
|
|
233
|
+
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
|
|
234
|
+
VALUES ('delete', old.rowid, old.content, COALESCE(old.tags, ''));
|
|
235
|
+
INSERT INTO memories_fts(rowid, content, tags)
|
|
236
|
+
VALUES (new.rowid, new.content, COALESCE(new.tags, ''));
|
|
237
|
+
END;
|
|
238
|
+
|
|
239
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS messages_fts USING fts5(
|
|
240
|
+
content,
|
|
241
|
+
content='messages',
|
|
242
|
+
content_rowid='rowid'
|
|
243
|
+
);
|
|
244
|
+
|
|
245
|
+
CREATE TRIGGER IF NOT EXISTS messages_ai AFTER INSERT ON messages BEGIN
|
|
246
|
+
INSERT INTO messages_fts(rowid, content)
|
|
247
|
+
VALUES (new.rowid, new.content);
|
|
248
|
+
END;
|
|
249
|
+
|
|
250
|
+
CREATE TRIGGER IF NOT EXISTS messages_ad AFTER DELETE ON messages BEGIN
|
|
251
|
+
INSERT INTO messages_fts(messages_fts, rowid, content)
|
|
252
|
+
VALUES ('delete', old.rowid, old.content);
|
|
253
|
+
END;
|
|
254
|
+
|
|
255
|
+
CREATE TRIGGER IF NOT EXISTS messages_au AFTER UPDATE ON messages BEGIN
|
|
256
|
+
INSERT INTO messages_fts(messages_fts, rowid, content)
|
|
257
|
+
VALUES ('delete', old.rowid, old.content);
|
|
258
|
+
INSERT INTO messages_fts(rowid, content)
|
|
259
|
+
VALUES (new.rowid, new.content);
|
|
260
|
+
END;
|
|
261
|
+
|
|
262
|
+
CREATE TABLE IF NOT EXISTS core_memory (
|
|
263
|
+
id TEXT PRIMARY KEY,
|
|
264
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
265
|
+
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
266
|
+
section TEXT NOT NULL,
|
|
267
|
+
content TEXT NOT NULL DEFAULT '',
|
|
268
|
+
size_bytes INTEGER DEFAULT 0 NOT NULL,
|
|
269
|
+
tokens_estimate INTEGER DEFAULT 0 NOT NULL,
|
|
270
|
+
version INTEGER DEFAULT 1 NOT NULL,
|
|
271
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
272
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
273
|
+
);
|
|
274
|
+
|
|
275
|
+
CREATE INDEX IF NOT EXISTS core_memory_project_idx ON core_memory(project_id);
|
|
276
|
+
CREATE INDEX IF NOT EXISTS core_memory_user_idx ON core_memory(user_id);
|
|
277
|
+
CREATE INDEX IF NOT EXISTS core_memory_section_idx ON core_memory(section);
|
|
278
|
+
|
|
279
|
+
CREATE TABLE IF NOT EXISTS context_sessions (
|
|
280
|
+
id TEXT PRIMARY KEY,
|
|
281
|
+
session_id TEXT NOT NULL UNIQUE,
|
|
282
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
283
|
+
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
284
|
+
loaded_memory_ids TEXT,
|
|
285
|
+
token_budget INTEGER DEFAULT 8000 NOT NULL,
|
|
286
|
+
tokens_used INTEGER DEFAULT 0 NOT NULL,
|
|
287
|
+
core_memory_tokens INTEGER DEFAULT 0 NOT NULL,
|
|
288
|
+
loaded_memories_tokens INTEGER DEFAULT 0 NOT NULL,
|
|
289
|
+
metadata TEXT,
|
|
290
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
291
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
292
|
+
);
|
|
293
|
+
|
|
294
|
+
CREATE INDEX IF NOT EXISTS context_sessions_session_idx ON context_sessions(session_id);
|
|
295
|
+
CREATE INDEX IF NOT EXISTS context_sessions_project_idx ON context_sessions(project_id);
|
|
296
|
+
CREATE INDEX IF NOT EXISTS context_sessions_created_idx ON context_sessions(created_at);
|
|
297
|
+
|
|
298
|
+
-- v0.8.0: Memory Merge Tables
|
|
299
|
+
CREATE TABLE IF NOT EXISTS memory_merge_proposals (
|
|
300
|
+
id TEXT PRIMARY KEY,
|
|
301
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
302
|
+
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
303
|
+
source_memory_ids TEXT NOT NULL,
|
|
304
|
+
proposed_content TEXT NOT NULL,
|
|
305
|
+
proposed_summary TEXT,
|
|
306
|
+
proposed_tags TEXT,
|
|
307
|
+
proposed_metadata TEXT,
|
|
308
|
+
detection_method TEXT NOT NULL,
|
|
309
|
+
similarity_score TEXT NOT NULL,
|
|
310
|
+
confidence_level TEXT NOT NULL,
|
|
311
|
+
merge_reason TEXT NOT NULL,
|
|
312
|
+
conflict_warnings TEXT,
|
|
313
|
+
status TEXT DEFAULT 'pending' NOT NULL,
|
|
314
|
+
reviewed_at INTEGER,
|
|
315
|
+
review_notes TEXT,
|
|
316
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
317
|
+
expires_at INTEGER
|
|
318
|
+
);
|
|
319
|
+
|
|
320
|
+
CREATE INDEX IF NOT EXISTS memory_merge_proposals_project_status_idx ON memory_merge_proposals(project_id, status);
|
|
321
|
+
CREATE INDEX IF NOT EXISTS memory_merge_proposals_created_at_idx ON memory_merge_proposals(created_at);
|
|
322
|
+
|
|
323
|
+
CREATE TABLE IF NOT EXISTS memory_merge_history (
|
|
324
|
+
id TEXT PRIMARY KEY,
|
|
325
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
326
|
+
user_id TEXT REFERENCES users(id) ON DELETE SET NULL,
|
|
327
|
+
proposal_id TEXT REFERENCES memory_merge_proposals(id) ON DELETE SET NULL,
|
|
328
|
+
source_memory_ids TEXT NOT NULL,
|
|
329
|
+
canonical_memory_id TEXT NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
|
|
330
|
+
source_memories_snapshot TEXT NOT NULL,
|
|
331
|
+
merge_strategy TEXT NOT NULL,
|
|
332
|
+
tokens_saved INTEGER,
|
|
333
|
+
is_reversed INTEGER DEFAULT 0,
|
|
334
|
+
reversed_at INTEGER,
|
|
335
|
+
reversed_by TEXT,
|
|
336
|
+
merged_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
337
|
+
);
|
|
338
|
+
|
|
339
|
+
CREATE TABLE IF NOT EXISTS memory_hash_cache (
|
|
340
|
+
memory_id TEXT PRIMARY KEY REFERENCES memories(id) ON DELETE CASCADE,
|
|
341
|
+
project_id TEXT NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
342
|
+
simhash TEXT,
|
|
343
|
+
minhash TEXT,
|
|
344
|
+
content_hash TEXT NOT NULL,
|
|
345
|
+
last_updated INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
346
|
+
);
|
|
347
|
+
|
|
348
|
+
CREATE INDEX IF NOT EXISTS memory_hash_cache_project_id_idx ON memory_hash_cache(project_id);
|
|
349
|
+
CREATE INDEX IF NOT EXISTS memory_hash_cache_simhash_idx ON memory_hash_cache(simhash);
|
|
350
|
+
|
|
351
|
+
-- Namespaces table (v1.0.x) - Hierarchical organization
|
|
352
|
+
CREATE TABLE IF NOT EXISTS namespaces (
|
|
353
|
+
id TEXT PRIMARY KEY,
|
|
354
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE,
|
|
355
|
+
name TEXT NOT NULL,
|
|
356
|
+
path TEXT,
|
|
357
|
+
description TEXT,
|
|
358
|
+
parent_id TEXT REFERENCES namespaces(id) ON DELETE SET NULL,
|
|
359
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
360
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
361
|
+
);
|
|
362
|
+
CREATE INDEX IF NOT EXISTS namespaces_project_idx ON namespaces(project_id);
|
|
363
|
+
CREATE INDEX IF NOT EXISTS namespaces_parent_idx ON namespaces(parent_id);
|
|
364
|
+
|
|
365
|
+
-- Maintenance jobs table (v1.0.x) - Cron scheduler
|
|
366
|
+
CREATE TABLE IF NOT EXISTS maintenance_jobs (
|
|
367
|
+
id TEXT PRIMARY KEY,
|
|
368
|
+
job_name TEXT NOT NULL UNIQUE,
|
|
369
|
+
job_type TEXT NOT NULL,
|
|
370
|
+
cron_expression TEXT,
|
|
371
|
+
enabled INTEGER DEFAULT 1 NOT NULL,
|
|
372
|
+
last_run_at INTEGER,
|
|
373
|
+
last_run_duration INTEGER,
|
|
374
|
+
last_run_status TEXT,
|
|
375
|
+
last_run_error TEXT,
|
|
376
|
+
total_runs INTEGER DEFAULT 0,
|
|
377
|
+
success_count INTEGER DEFAULT 0,
|
|
378
|
+
failure_count INTEGER DEFAULT 0,
|
|
379
|
+
job_config TEXT,
|
|
380
|
+
next_run_at INTEGER,
|
|
381
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
382
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
383
|
+
);
|
|
384
|
+
CREATE INDEX IF NOT EXISTS maintenance_jobs_name_idx ON maintenance_jobs(job_name);
|
|
385
|
+
CREATE INDEX IF NOT EXISTS maintenance_jobs_next_run_idx ON maintenance_jobs(next_run_at);
|
|
386
|
+
CREATE INDEX IF NOT EXISTS maintenance_jobs_type_idx ON maintenance_jobs(job_type);
|
|
387
|
+
CREATE INDEX IF NOT EXISTS maintenance_jobs_enabled_idx ON maintenance_jobs(enabled);
|
|
388
|
+
|
|
389
|
+
-- Places table (v1.1.5) - Spatial memory organization
|
|
390
|
+
CREATE TABLE IF NOT EXISTS places (
|
|
391
|
+
id TEXT PRIMARY KEY,
|
|
392
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE NOT NULL,
|
|
393
|
+
name TEXT NOT NULL,
|
|
394
|
+
place_type TEXT NOT NULL,
|
|
395
|
+
parent_id TEXT REFERENCES places(id) ON DELETE SET NULL,
|
|
396
|
+
loci_index INTEGER DEFAULT 0,
|
|
397
|
+
position_x INTEGER DEFAULT 0,
|
|
398
|
+
position_y INTEGER DEFAULT 0,
|
|
399
|
+
description TEXT,
|
|
400
|
+
purpose TEXT,
|
|
401
|
+
memory_count INTEGER DEFAULT 0,
|
|
402
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
403
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
404
|
+
);
|
|
405
|
+
CREATE INDEX IF NOT EXISTS places_project_idx ON places(project_id);
|
|
406
|
+
CREATE INDEX IF NOT EXISTS places_type_idx ON places(place_type);
|
|
407
|
+
CREATE INDEX IF NOT EXISTS places_parent_idx ON places(parent_id);
|
|
408
|
+
CREATE INDEX IF NOT EXISTS places_loci_idx ON places(project_id, loci_index);
|
|
409
|
+
|
|
410
|
+
-- Memory-Place assignments
|
|
411
|
+
CREATE TABLE IF NOT EXISTS memory_places (
|
|
412
|
+
id TEXT PRIMARY KEY,
|
|
413
|
+
memory_id TEXT REFERENCES memories(id) ON DELETE CASCADE NOT NULL,
|
|
414
|
+
place_id TEXT REFERENCES places(id) ON DELETE CASCADE NOT NULL,
|
|
415
|
+
is_manual INTEGER DEFAULT 0,
|
|
416
|
+
rule_id TEXT,
|
|
417
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
418
|
+
);
|
|
419
|
+
CREATE INDEX IF NOT EXISTS memory_places_memory_idx ON memory_places(memory_id);
|
|
420
|
+
CREATE INDEX IF NOT EXISTS memory_places_place_idx ON memory_places(place_id);
|
|
421
|
+
|
|
422
|
+
-- Place auto-assignment rules
|
|
423
|
+
CREATE TABLE IF NOT EXISTS place_rules (
|
|
424
|
+
id TEXT PRIMARY KEY,
|
|
425
|
+
project_id TEXT REFERENCES projects(id) ON DELETE CASCADE NOT NULL,
|
|
426
|
+
name TEXT NOT NULL,
|
|
427
|
+
place_type TEXT NOT NULL,
|
|
428
|
+
match_tool TEXT,
|
|
429
|
+
match_keyword TEXT,
|
|
430
|
+
match_tag TEXT,
|
|
431
|
+
match_memory_type TEXT,
|
|
432
|
+
priority INTEGER DEFAULT 0,
|
|
433
|
+
enabled INTEGER DEFAULT 1,
|
|
434
|
+
created_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL,
|
|
435
|
+
updated_at INTEGER DEFAULT (strftime('%s','now')) NOT NULL
|
|
436
|
+
);
|
|
437
|
+
CREATE INDEX IF NOT EXISTS place_rules_project_idx ON place_rules(project_id);
|
|
438
|
+
CREATE INDEX IF NOT EXISTS place_rules_type_idx ON place_rules(place_type);
|
|
333
439
|
`;
|
|
334
440
|
const postgresStatements = [
|
|
335
441
|
`CREATE EXTENSION IF NOT EXISTS pgcrypto;`,
|
|
336
442
|
`CREATE EXTENSION IF NOT EXISTS vector;`,
|
|
337
443
|
`CREATE EXTENSION IF NOT EXISTS pg_trgm;`,
|
|
338
|
-
`CREATE TABLE IF NOT EXISTS users (
|
|
339
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
340
|
-
external_id TEXT UNIQUE,
|
|
341
|
-
name TEXT,
|
|
342
|
-
email TEXT,
|
|
343
|
-
preferences JSONB,
|
|
344
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
345
|
-
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
444
|
+
`CREATE TABLE IF NOT EXISTS users (
|
|
445
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
446
|
+
external_id TEXT UNIQUE,
|
|
447
|
+
name TEXT,
|
|
448
|
+
email TEXT,
|
|
449
|
+
preferences JSONB,
|
|
450
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
451
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
346
452
|
);`,
|
|
347
|
-
`CREATE TABLE IF NOT EXISTS projects (
|
|
348
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
349
|
-
name TEXT NOT NULL,
|
|
350
|
-
path TEXT NOT NULL,
|
|
351
|
-
description TEXT,
|
|
352
|
-
metadata JSONB,
|
|
353
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
354
|
-
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
453
|
+
`CREATE TABLE IF NOT EXISTS projects (
|
|
454
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
455
|
+
name TEXT NOT NULL,
|
|
456
|
+
path TEXT NOT NULL,
|
|
457
|
+
description TEXT,
|
|
458
|
+
metadata JSONB,
|
|
459
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
460
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
355
461
|
);`,
|
|
356
462
|
`CREATE INDEX IF NOT EXISTS projects_path_idx ON projects(path);`,
|
|
357
|
-
`CREATE TABLE IF NOT EXISTS memories (
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
463
|
+
`CREATE TABLE IF NOT EXISTS memories (
|
|
464
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
465
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
466
|
+
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
467
|
+
type TEXT NOT NULL,
|
|
468
|
+
content TEXT NOT NULL,
|
|
469
|
+
summary TEXT,
|
|
470
|
+
embedding_json TEXT,
|
|
471
|
+
embedding vector(1536),
|
|
472
|
+
source TEXT,
|
|
473
|
+
confidence INTEGER DEFAULT 50,
|
|
474
|
+
confidence_level TEXT DEFAULT 'speculative',
|
|
475
|
+
tags TEXT[],
|
|
476
|
+
metadata JSONB,
|
|
477
|
+
is_private BOOLEAN DEFAULT FALSE,
|
|
478
|
+
has_secrets BOOLEAN DEFAULT FALSE,
|
|
479
|
+
relevance_score INTEGER DEFAULT 50,
|
|
480
|
+
is_active BOOLEAN DEFAULT TRUE,
|
|
481
|
+
is_merged BOOLEAN DEFAULT FALSE,
|
|
482
|
+
merged_into_id UUID,
|
|
483
|
+
merged_at TIMESTAMPTZ,
|
|
484
|
+
is_canonical BOOLEAN DEFAULT TRUE,
|
|
485
|
+
merge_source_ids TEXT[],
|
|
486
|
+
is_mergeable BOOLEAN DEFAULT TRUE,
|
|
487
|
+
merge_version INTEGER DEFAULT 1,
|
|
488
|
+
importance_score INTEGER DEFAULT 50,
|
|
489
|
+
importance_decay_rate INTEGER DEFAULT 30,
|
|
490
|
+
last_importance_recalc TIMESTAMPTZ,
|
|
491
|
+
consolidated_into UUID,
|
|
492
|
+
consolidated_at TIMESTAMPTZ,
|
|
493
|
+
is_consolidated BOOLEAN DEFAULT FALSE,
|
|
494
|
+
sector TEXT DEFAULT 'episodic',
|
|
495
|
+
tier TEXT DEFAULT 'hot',
|
|
496
|
+
status TEXT DEFAULT 'active',
|
|
497
|
+
context_status TEXT DEFAULT 'out-of-context',
|
|
498
|
+
decay_rate INTEGER DEFAULT 30,
|
|
499
|
+
coactivation_score INTEGER DEFAULT 0,
|
|
500
|
+
last_decay_at TIMESTAMPTZ,
|
|
501
|
+
agent_id TEXT,
|
|
502
|
+
agent_role TEXT,
|
|
503
|
+
visibility_scope TEXT DEFAULT 'private',
|
|
504
|
+
is_protected BOOLEAN DEFAULT FALSE,
|
|
505
|
+
is_pinned BOOLEAN DEFAULT FALSE,
|
|
506
|
+
is_immutable BOOLEAN DEFAULT FALSE,
|
|
507
|
+
write_scope TEXT[],
|
|
508
|
+
read_scope TEXT[],
|
|
509
|
+
triggered_by TEXT,
|
|
510
|
+
capture_reason TEXT,
|
|
511
|
+
last_used_at TIMESTAMPTZ,
|
|
512
|
+
usage_count INTEGER DEFAULT 0,
|
|
513
|
+
tokens_estimate INTEGER DEFAULT 0,
|
|
514
|
+
valid_from TIMESTAMPTZ,
|
|
515
|
+
valid_to TIMESTAMPTZ,
|
|
516
|
+
recorded_at TIMESTAMPTZ DEFAULT NOW(),
|
|
517
|
+
superseded_by UUID,
|
|
518
|
+
version INTEGER DEFAULT 1,
|
|
519
|
+
expires_at TIMESTAMPTZ,
|
|
520
|
+
access_count INTEGER DEFAULT 0,
|
|
521
|
+
last_accessed_at TIMESTAMPTZ,
|
|
522
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
523
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
524
|
+
);`,
|
|
376
525
|
`CREATE INDEX IF NOT EXISTS memories_project_idx ON memories(project_id);`,
|
|
377
526
|
`CREATE INDEX IF NOT EXISTS memories_type_idx ON memories(type);`,
|
|
378
527
|
`CREATE INDEX IF NOT EXISTS memories_created_idx ON memories(created_at);`,
|
|
379
528
|
`CREATE INDEX IF NOT EXISTS memories_tags_idx ON memories USING GIN(tags);`,
|
|
380
529
|
`CREATE INDEX IF NOT EXISTS memories_content_trgm_idx ON memories USING GIN (content gin_trgm_ops);`,
|
|
381
|
-
`CREATE TABLE IF NOT EXISTS conversations (
|
|
382
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
383
|
-
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
384
|
-
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
385
|
-
session_id TEXT NOT NULL,
|
|
386
|
-
title TEXT,
|
|
387
|
-
summary TEXT,
|
|
388
|
-
message_count INTEGER DEFAULT 0,
|
|
389
|
-
token_count INTEGER DEFAULT 0,
|
|
390
|
-
started_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
391
|
-
ended_at TIMESTAMPTZ,
|
|
392
|
-
metadata JSONB,
|
|
393
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
394
|
-
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
530
|
+
`CREATE TABLE IF NOT EXISTS conversations (
|
|
531
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
532
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
533
|
+
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
534
|
+
session_id TEXT NOT NULL,
|
|
535
|
+
title TEXT,
|
|
536
|
+
summary TEXT,
|
|
537
|
+
message_count INTEGER DEFAULT 0,
|
|
538
|
+
token_count INTEGER DEFAULT 0,
|
|
539
|
+
started_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
540
|
+
ended_at TIMESTAMPTZ,
|
|
541
|
+
metadata JSONB,
|
|
542
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
543
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
395
544
|
);`,
|
|
396
545
|
`CREATE INDEX IF NOT EXISTS conversations_project_idx ON conversations(project_id);`,
|
|
397
546
|
`CREATE INDEX IF NOT EXISTS conversations_session_idx ON conversations(session_id);`,
|
|
398
547
|
`CREATE INDEX IF NOT EXISTS conversations_started_idx ON conversations(started_at);`,
|
|
399
|
-
`CREATE TABLE IF NOT EXISTS messages (
|
|
400
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
401
|
-
conversation_id UUID NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
|
|
402
|
-
role TEXT NOT NULL,
|
|
403
|
-
content TEXT NOT NULL,
|
|
404
|
-
embedding vector(1536),
|
|
405
|
-
token_count INTEGER,
|
|
406
|
-
tool_calls JSONB,
|
|
407
|
-
metadata JSONB,
|
|
408
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
548
|
+
`CREATE TABLE IF NOT EXISTS messages (
|
|
549
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
550
|
+
conversation_id UUID NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
|
|
551
|
+
role TEXT NOT NULL,
|
|
552
|
+
content TEXT NOT NULL,
|
|
553
|
+
embedding vector(1536),
|
|
554
|
+
token_count INTEGER,
|
|
555
|
+
tool_calls JSONB,
|
|
556
|
+
metadata JSONB,
|
|
557
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
409
558
|
);`,
|
|
410
559
|
`CREATE INDEX IF NOT EXISTS messages_conversation_idx ON messages(conversation_id);`,
|
|
411
560
|
`CREATE INDEX IF NOT EXISTS messages_role_idx ON messages(role);`,
|
|
412
561
|
`CREATE INDEX IF NOT EXISTS messages_created_idx ON messages(created_at);`,
|
|
413
562
|
`CREATE INDEX IF NOT EXISTS messages_content_trgm_idx ON messages USING GIN (content gin_trgm_ops);`,
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
563
|
+
// Learnings table (renamed from observations)
|
|
564
|
+
`CREATE TABLE IF NOT EXISTS learnings (
|
|
565
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
566
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
567
|
+
conversation_id UUID REFERENCES conversations(id) ON DELETE SET NULL,
|
|
568
|
+
type TEXT NOT NULL,
|
|
569
|
+
action TEXT NOT NULL,
|
|
570
|
+
target TEXT,
|
|
571
|
+
summary TEXT NOT NULL,
|
|
572
|
+
details JSONB,
|
|
573
|
+
embedding vector(1536),
|
|
574
|
+
memory_id UUID REFERENCES memories(id) ON DELETE SET NULL,
|
|
575
|
+
category TEXT,
|
|
576
|
+
importance INTEGER DEFAULT 50,
|
|
577
|
+
metadata JSONB,
|
|
578
|
+
is_imported BOOLEAN DEFAULT FALSE,
|
|
579
|
+
-- UAM: Agent integration columns
|
|
580
|
+
agent_id TEXT,
|
|
581
|
+
tool_name TEXT,
|
|
582
|
+
session_id TEXT,
|
|
583
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
428
584
|
);`,
|
|
429
|
-
`CREATE INDEX IF NOT EXISTS
|
|
430
|
-
`CREATE INDEX IF NOT EXISTS
|
|
431
|
-
`CREATE INDEX IF NOT EXISTS
|
|
432
|
-
`CREATE
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
585
|
+
`CREATE INDEX IF NOT EXISTS learnings_project_idx ON learnings(project_id);`,
|
|
586
|
+
`CREATE INDEX IF NOT EXISTS learnings_type_idx ON learnings(type);`,
|
|
587
|
+
`CREATE INDEX IF NOT EXISTS learnings_action_idx ON learnings(action);`,
|
|
588
|
+
`CREATE TABLE IF NOT EXISTS entities (
|
|
589
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
590
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
591
|
+
name TEXT NOT NULL,
|
|
592
|
+
type TEXT NOT NULL,
|
|
593
|
+
description TEXT,
|
|
594
|
+
embedding vector(1536),
|
|
595
|
+
properties JSONB,
|
|
596
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
597
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
443
598
|
);`,
|
|
444
599
|
`CREATE INDEX IF NOT EXISTS entities_project_idx ON entities(project_id);`,
|
|
445
600
|
`CREATE INDEX IF NOT EXISTS entities_type_idx ON entities(type);`,
|
|
446
601
|
`CREATE INDEX IF NOT EXISTS entities_name_idx ON entities(name);`,
|
|
447
|
-
`CREATE TABLE IF NOT EXISTS entity_relations (
|
|
448
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
449
|
-
from_entity_id UUID NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
|
|
450
|
-
to_entity_id UUID NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
|
|
451
|
-
type TEXT NOT NULL,
|
|
452
|
-
weight INTEGER DEFAULT 1,
|
|
453
|
-
properties JSONB,
|
|
454
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
602
|
+
`CREATE TABLE IF NOT EXISTS entity_relations (
|
|
603
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
604
|
+
from_entity_id UUID NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
|
|
605
|
+
to_entity_id UUID NOT NULL REFERENCES entities(id) ON DELETE CASCADE,
|
|
606
|
+
type TEXT NOT NULL,
|
|
607
|
+
weight INTEGER DEFAULT 1,
|
|
608
|
+
properties JSONB,
|
|
609
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
455
610
|
);`,
|
|
456
611
|
`CREATE INDEX IF NOT EXISTS relations_from_idx ON entity_relations(from_entity_id);`,
|
|
457
612
|
`CREATE INDEX IF NOT EXISTS relations_to_idx ON entity_relations(to_entity_id);`,
|
|
458
613
|
`CREATE INDEX IF NOT EXISTS relations_type_idx ON entity_relations(type);`,
|
|
459
|
-
`CREATE TABLE IF NOT EXISTS core_memory (
|
|
460
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
461
|
-
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
462
|
-
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
463
|
-
section TEXT NOT NULL,
|
|
464
|
-
content TEXT NOT NULL DEFAULT '',
|
|
465
|
-
size_bytes INTEGER DEFAULT 0 NOT NULL,
|
|
466
|
-
version INTEGER DEFAULT 1 NOT NULL,
|
|
467
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
468
|
-
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
614
|
+
`CREATE TABLE IF NOT EXISTS core_memory (
|
|
615
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
616
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
617
|
+
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
618
|
+
section TEXT NOT NULL,
|
|
619
|
+
content TEXT NOT NULL DEFAULT '',
|
|
620
|
+
size_bytes INTEGER DEFAULT 0 NOT NULL,
|
|
621
|
+
version INTEGER DEFAULT 1 NOT NULL,
|
|
622
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
623
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
469
624
|
);`,
|
|
470
625
|
`CREATE INDEX IF NOT EXISTS core_memory_project_idx ON core_memory(project_id);`,
|
|
471
626
|
`CREATE INDEX IF NOT EXISTS core_memory_user_idx ON core_memory(user_id);`,
|
|
472
627
|
`CREATE INDEX IF NOT EXISTS core_memory_section_idx ON core_memory(section);`,
|
|
473
|
-
`CREATE TABLE IF NOT EXISTS context_sessions (
|
|
474
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
475
|
-
session_id TEXT NOT NULL UNIQUE,
|
|
476
|
-
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
477
|
-
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
478
|
-
loaded_memory_ids JSONB,
|
|
479
|
-
token_budget INTEGER DEFAULT 8000 NOT NULL,
|
|
480
|
-
tokens_used INTEGER DEFAULT 0 NOT NULL,
|
|
481
|
-
core_memory_tokens INTEGER DEFAULT 0 NOT NULL,
|
|
482
|
-
loaded_memories_tokens INTEGER DEFAULT 0 NOT NULL,
|
|
483
|
-
metadata JSONB,
|
|
484
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
485
|
-
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
628
|
+
`CREATE TABLE IF NOT EXISTS context_sessions (
|
|
629
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
630
|
+
session_id TEXT NOT NULL UNIQUE,
|
|
631
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
632
|
+
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
633
|
+
loaded_memory_ids JSONB,
|
|
634
|
+
token_budget INTEGER DEFAULT 8000 NOT NULL,
|
|
635
|
+
tokens_used INTEGER DEFAULT 0 NOT NULL,
|
|
636
|
+
core_memory_tokens INTEGER DEFAULT 0 NOT NULL,
|
|
637
|
+
loaded_memories_tokens INTEGER DEFAULT 0 NOT NULL,
|
|
638
|
+
metadata JSONB,
|
|
639
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
640
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
486
641
|
);`,
|
|
487
642
|
`CREATE INDEX IF NOT EXISTS context_sessions_session_idx ON context_sessions(session_id);`,
|
|
488
643
|
`CREATE INDEX IF NOT EXISTS context_sessions_project_idx ON context_sessions(project_id);`,
|
|
489
644
|
`CREATE INDEX IF NOT EXISTS context_sessions_created_idx ON context_sessions(created_at);`,
|
|
490
|
-
`CREATE TABLE IF NOT EXISTS memory_merge_proposals (
|
|
491
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
492
|
-
project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
493
|
-
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
494
|
-
source_memory_ids TEXT NOT NULL,
|
|
495
|
-
proposed_content TEXT NOT NULL,
|
|
496
|
-
proposed_summary TEXT,
|
|
497
|
-
proposed_tags TEXT[],
|
|
498
|
-
proposed_metadata JSONB,
|
|
499
|
-
detection_method TEXT NOT NULL,
|
|
500
|
-
similarity_score TEXT NOT NULL,
|
|
501
|
-
confidence_level TEXT NOT NULL,
|
|
502
|
-
merge_reason TEXT NOT NULL,
|
|
503
|
-
conflict_warnings JSONB,
|
|
504
|
-
status TEXT DEFAULT 'pending' NOT NULL,
|
|
505
|
-
reviewed_at TIMESTAMPTZ,
|
|
506
|
-
review_notes TEXT,
|
|
507
|
-
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
508
|
-
expires_at TIMESTAMPTZ
|
|
645
|
+
`CREATE TABLE IF NOT EXISTS memory_merge_proposals (
|
|
646
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
647
|
+
project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
648
|
+
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
649
|
+
source_memory_ids TEXT NOT NULL,
|
|
650
|
+
proposed_content TEXT NOT NULL,
|
|
651
|
+
proposed_summary TEXT,
|
|
652
|
+
proposed_tags TEXT[],
|
|
653
|
+
proposed_metadata JSONB,
|
|
654
|
+
detection_method TEXT NOT NULL,
|
|
655
|
+
similarity_score TEXT NOT NULL,
|
|
656
|
+
confidence_level TEXT NOT NULL,
|
|
657
|
+
merge_reason TEXT NOT NULL,
|
|
658
|
+
conflict_warnings JSONB,
|
|
659
|
+
status TEXT DEFAULT 'pending' NOT NULL,
|
|
660
|
+
reviewed_at TIMESTAMPTZ,
|
|
661
|
+
review_notes TEXT,
|
|
662
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
663
|
+
expires_at TIMESTAMPTZ
|
|
509
664
|
);`,
|
|
510
665
|
`CREATE INDEX IF NOT EXISTS memory_merge_proposals_project_status_idx ON memory_merge_proposals(project_id, status);`,
|
|
511
666
|
`CREATE INDEX IF NOT EXISTS memory_merge_proposals_created_at_idx ON memory_merge_proposals(created_at);`,
|
|
512
|
-
`CREATE TABLE IF NOT EXISTS memory_merge_history (
|
|
513
|
-
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
514
|
-
project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
515
|
-
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
516
|
-
proposal_id UUID REFERENCES memory_merge_proposals(id) ON DELETE SET NULL,
|
|
517
|
-
source_memory_ids TEXT NOT NULL,
|
|
518
|
-
canonical_memory_id UUID NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
|
|
519
|
-
source_memories_snapshot JSONB NOT NULL,
|
|
520
|
-
merge_strategy TEXT NOT NULL,
|
|
521
|
-
tokens_saved INTEGER,
|
|
522
|
-
is_reversed BOOLEAN DEFAULT FALSE,
|
|
523
|
-
reversed_at TIMESTAMPTZ,
|
|
524
|
-
reversed_by UUID,
|
|
525
|
-
merged_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
667
|
+
`CREATE TABLE IF NOT EXISTS memory_merge_history (
|
|
668
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
669
|
+
project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
670
|
+
user_id UUID REFERENCES users(id) ON DELETE SET NULL,
|
|
671
|
+
proposal_id UUID REFERENCES memory_merge_proposals(id) ON DELETE SET NULL,
|
|
672
|
+
source_memory_ids TEXT NOT NULL,
|
|
673
|
+
canonical_memory_id UUID NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
|
|
674
|
+
source_memories_snapshot JSONB NOT NULL,
|
|
675
|
+
merge_strategy TEXT NOT NULL,
|
|
676
|
+
tokens_saved INTEGER,
|
|
677
|
+
is_reversed BOOLEAN DEFAULT FALSE,
|
|
678
|
+
reversed_at TIMESTAMPTZ,
|
|
679
|
+
reversed_by UUID,
|
|
680
|
+
merged_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
526
681
|
);`,
|
|
527
|
-
`CREATE TABLE IF NOT EXISTS memory_hash_cache (
|
|
528
|
-
memory_id UUID PRIMARY KEY REFERENCES memories(id) ON DELETE CASCADE,
|
|
529
|
-
project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
530
|
-
simhash TEXT,
|
|
531
|
-
minhash TEXT,
|
|
532
|
-
content_hash TEXT NOT NULL,
|
|
533
|
-
last_updated TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
682
|
+
`CREATE TABLE IF NOT EXISTS memory_hash_cache (
|
|
683
|
+
memory_id UUID PRIMARY KEY REFERENCES memories(id) ON DELETE CASCADE,
|
|
684
|
+
project_id UUID NOT NULL REFERENCES projects(id) ON DELETE CASCADE,
|
|
685
|
+
simhash TEXT,
|
|
686
|
+
minhash TEXT,
|
|
687
|
+
content_hash TEXT NOT NULL,
|
|
688
|
+
last_updated TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
534
689
|
);`,
|
|
535
690
|
`CREATE INDEX IF NOT EXISTS memory_hash_cache_project_id_idx ON memory_hash_cache(project_id);`,
|
|
536
|
-
`CREATE INDEX IF NOT EXISTS memory_hash_cache_simhash_idx ON memory_hash_cache(simhash)
|
|
691
|
+
`CREATE INDEX IF NOT EXISTS memory_hash_cache_simhash_idx ON memory_hash_cache(simhash);`,
|
|
692
|
+
// memory_associations table (v1.1.0+)
|
|
693
|
+
`CREATE TABLE IF NOT EXISTS memory_associations (
|
|
694
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
695
|
+
from_memory_id UUID NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
|
|
696
|
+
to_memory_id UUID NOT NULL REFERENCES memories(id) ON DELETE CASCADE,
|
|
697
|
+
association_type TEXT NOT NULL,
|
|
698
|
+
weight REAL DEFAULT 1,
|
|
699
|
+
coactivation_count INTEGER DEFAULT 1,
|
|
700
|
+
metadata TEXT,
|
|
701
|
+
last_coactivated_at TIMESTAMPTZ,
|
|
702
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
703
|
+
UNIQUE(from_memory_id, to_memory_id)
|
|
704
|
+
);`,
|
|
705
|
+
`CREATE INDEX IF NOT EXISTS associations_graph_traversal_idx ON memory_associations(from_memory_id, to_memory_id, weight, association_type);`,
|
|
706
|
+
// namespaces table
|
|
707
|
+
`CREATE TABLE IF NOT EXISTS namespaces (
|
|
708
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
709
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
710
|
+
name TEXT NOT NULL,
|
|
711
|
+
path TEXT NOT NULL,
|
|
712
|
+
description TEXT,
|
|
713
|
+
parent_id UUID REFERENCES namespaces(id) ON DELETE SET NULL,
|
|
714
|
+
metadata TEXT,
|
|
715
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
716
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
717
|
+
);`,
|
|
718
|
+
`CREATE INDEX IF NOT EXISTS namespaces_project_idx ON namespaces(project_id);`,
|
|
719
|
+
`CREATE INDEX IF NOT EXISTS namespaces_parent_idx ON namespaces(parent_id);`,
|
|
720
|
+
// maintenance_jobs table
|
|
721
|
+
`CREATE TABLE IF NOT EXISTS maintenance_jobs (
|
|
722
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
723
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE,
|
|
724
|
+
job_name TEXT NOT NULL,
|
|
725
|
+
job_type TEXT NOT NULL,
|
|
726
|
+
description TEXT,
|
|
727
|
+
enabled BOOLEAN DEFAULT TRUE,
|
|
728
|
+
cron_expression TEXT,
|
|
729
|
+
interval_ms INTEGER,
|
|
730
|
+
next_run_at TIMESTAMPTZ,
|
|
731
|
+
last_run_at TIMESTAMPTZ,
|
|
732
|
+
last_run_duration INTEGER,
|
|
733
|
+
last_run_status TEXT,
|
|
734
|
+
last_run_error TEXT,
|
|
735
|
+
total_runs INTEGER DEFAULT 0,
|
|
736
|
+
success_count INTEGER DEFAULT 0,
|
|
737
|
+
failure_count INTEGER DEFAULT 0,
|
|
738
|
+
job_config TEXT,
|
|
739
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
740
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
741
|
+
);`,
|
|
742
|
+
`CREATE INDEX IF NOT EXISTS maintenance_jobs_name_idx ON maintenance_jobs(job_name);`,
|
|
743
|
+
`CREATE INDEX IF NOT EXISTS maintenance_jobs_next_run_idx ON maintenance_jobs(next_run_at);`,
|
|
744
|
+
`CREATE INDEX IF NOT EXISTS maintenance_jobs_type_idx ON maintenance_jobs(job_type);`,
|
|
745
|
+
`CREATE INDEX IF NOT EXISTS maintenance_jobs_enabled_idx ON maintenance_jobs(enabled);`,
|
|
746
|
+
// places table (v1.1.5) - Spatial memory organization
|
|
747
|
+
`CREATE TABLE IF NOT EXISTS places (
|
|
748
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
749
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE NOT NULL,
|
|
750
|
+
name TEXT NOT NULL,
|
|
751
|
+
place_type TEXT NOT NULL,
|
|
752
|
+
parent_id UUID REFERENCES places(id) ON DELETE SET NULL,
|
|
753
|
+
loci_index INTEGER DEFAULT 0,
|
|
754
|
+
position_x INTEGER DEFAULT 0,
|
|
755
|
+
position_y INTEGER DEFAULT 0,
|
|
756
|
+
description TEXT,
|
|
757
|
+
purpose TEXT,
|
|
758
|
+
memory_count INTEGER DEFAULT 0,
|
|
759
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
760
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
761
|
+
);`,
|
|
762
|
+
`CREATE INDEX IF NOT EXISTS places_project_idx ON places(project_id);`,
|
|
763
|
+
`CREATE INDEX IF NOT EXISTS places_type_idx ON places(place_type);`,
|
|
764
|
+
`CREATE INDEX IF NOT EXISTS places_parent_idx ON places(parent_id);`,
|
|
765
|
+
`CREATE INDEX IF NOT EXISTS places_loci_idx ON places(project_id, loci_index);`,
|
|
766
|
+
// memory_places table
|
|
767
|
+
`CREATE TABLE IF NOT EXISTS memory_places (
|
|
768
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
769
|
+
memory_id UUID REFERENCES memories(id) ON DELETE CASCADE NOT NULL,
|
|
770
|
+
place_id UUID REFERENCES places(id) ON DELETE CASCADE NOT NULL,
|
|
771
|
+
is_manual BOOLEAN DEFAULT FALSE,
|
|
772
|
+
rule_id UUID,
|
|
773
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
774
|
+
);`,
|
|
775
|
+
`CREATE INDEX IF NOT EXISTS memory_places_memory_idx ON memory_places(memory_id);`,
|
|
776
|
+
`CREATE INDEX IF NOT EXISTS memory_places_place_idx ON memory_places(place_id);`,
|
|
777
|
+
// place_rules table
|
|
778
|
+
`CREATE TABLE IF NOT EXISTS place_rules (
|
|
779
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
780
|
+
project_id UUID REFERENCES projects(id) ON DELETE CASCADE NOT NULL,
|
|
781
|
+
name TEXT NOT NULL,
|
|
782
|
+
place_type TEXT NOT NULL,
|
|
783
|
+
match_tool TEXT,
|
|
784
|
+
match_keyword TEXT,
|
|
785
|
+
match_tag TEXT,
|
|
786
|
+
match_memory_type TEXT,
|
|
787
|
+
priority INTEGER DEFAULT 0,
|
|
788
|
+
enabled BOOLEAN DEFAULT TRUE,
|
|
789
|
+
created_at TIMESTAMPTZ DEFAULT NOW() NOT NULL,
|
|
790
|
+
updated_at TIMESTAMPTZ DEFAULT NOW() NOT NULL
|
|
791
|
+
);`,
|
|
792
|
+
`CREATE INDEX IF NOT EXISTS place_rules_project_idx ON place_rules(project_id);`,
|
|
793
|
+
`CREATE INDEX IF NOT EXISTS place_rules_type_idx ON place_rules(place_type);`
|
|
537
794
|
];
|
|
538
795
|
/**
|
|
539
796
|
* Ensure the data directory exists (.squish folder in project root)
|
|
@@ -565,97 +822,84 @@ async function runSqliteMigrations(sqlite) {
|
|
|
565
822
|
// No migrations needed
|
|
566
823
|
return;
|
|
567
824
|
}
|
|
568
|
-
// Migrations for memories table
|
|
825
|
+
// Migrations for memories table (deduplicated, ordered by version)
|
|
569
826
|
const memoriesMigrations = [
|
|
827
|
+
// Base columns (v0.1.x - v0.5.x)
|
|
570
828
|
{ col: 'embedding', sql: 'ALTER TABLE memories ADD COLUMN embedding BLOB' },
|
|
571
|
-
{ col: 'is_private', sql: 'ALTER TABLE memories ADD COLUMN is_private INTEGER DEFAULT 0' },
|
|
572
|
-
{ col: 'has_secrets', sql: 'ALTER TABLE memories ADD COLUMN has_secrets INTEGER DEFAULT 0' },
|
|
573
829
|
{ col: 'relevance_score', sql: 'ALTER TABLE memories ADD COLUMN relevance_score INTEGER DEFAULT 50' },
|
|
830
|
+
// Merge tracking (v0.6.x)
|
|
574
831
|
{ col: 'is_merged', sql: 'ALTER TABLE memories ADD COLUMN is_merged INTEGER DEFAULT 0' },
|
|
575
832
|
{ col: 'merged_into_id', sql: 'ALTER TABLE memories ADD COLUMN merged_into_id TEXT' },
|
|
576
833
|
{ col: 'is_mergeable', sql: 'ALTER TABLE memories ADD COLUMN is_mergeable INTEGER DEFAULT 1' },
|
|
577
834
|
{ col: 'is_canonical', sql: 'ALTER TABLE memories ADD COLUMN is_canonical INTEGER DEFAULT 0' },
|
|
578
|
-
|
|
835
|
+
{ col: 'merged_at', sql: 'ALTER TABLE memories ADD COLUMN merged_at INTEGER' },
|
|
836
|
+
{ col: 'merge_source_ids', sql: 'ALTER TABLE memories ADD COLUMN merge_source_ids TEXT' },
|
|
837
|
+
{ col: 'merge_version', sql: 'ALTER TABLE memories ADD COLUMN merge_version INTEGER DEFAULT 1' },
|
|
838
|
+
// Importance scoring (v0.8.0)
|
|
579
839
|
{ col: 'importance_score', sql: 'ALTER TABLE memories ADD COLUMN importance_score INTEGER DEFAULT 50' },
|
|
580
840
|
{ col: 'importance_decay_rate', sql: 'ALTER TABLE memories ADD COLUMN importance_decay_rate INTEGER DEFAULT 30' },
|
|
581
841
|
{ col: 'last_importance_recalc', sql: 'ALTER TABLE memories ADD COLUMN last_importance_recalc INTEGER' },
|
|
582
|
-
// v0.8.0
|
|
842
|
+
// Consolidation (v0.8.0)
|
|
583
843
|
{ col: 'consolidated_into', sql: 'ALTER TABLE memories ADD COLUMN consolidated_into TEXT' },
|
|
584
844
|
{ col: 'consolidated_at', sql: 'ALTER TABLE memories ADD COLUMN consolidated_at INTEGER' },
|
|
585
845
|
{ col: 'is_consolidated', sql: 'ALTER TABLE memories ADD COLUMN is_consolidated INTEGER DEFAULT 0' },
|
|
586
|
-
|
|
846
|
+
// Memory lifecycle (v0.8.0)
|
|
587
847
|
{ col: 'sector', sql: 'ALTER TABLE memories ADD COLUMN sector TEXT DEFAULT "episodic"' },
|
|
588
848
|
{ col: 'tier', sql: 'ALTER TABLE memories ADD COLUMN tier TEXT DEFAULT "hot"' },
|
|
589
849
|
{ col: 'context_status', sql: 'ALTER TABLE memories ADD COLUMN context_status TEXT DEFAULT "out-of-context"' },
|
|
590
850
|
{ col: 'decay_rate', sql: 'ALTER TABLE memories ADD COLUMN decay_rate INTEGER DEFAULT 30' },
|
|
591
851
|
{ col: 'coactivation_score', sql: 'ALTER TABLE memories ADD COLUMN coactivation_score INTEGER DEFAULT 0' },
|
|
592
852
|
{ col: 'last_decay_at', sql: 'ALTER TABLE memories ADD COLUMN last_decay_at INTEGER DEFAULT (strftime(\'%s\',\'now\'))' },
|
|
853
|
+
// Agent tracking (v0.8.0)
|
|
593
854
|
{ col: 'agent_id', sql: 'ALTER TABLE memories ADD COLUMN agent_id TEXT' },
|
|
594
855
|
{ col: 'agent_role', sql: 'ALTER TABLE memories ADD COLUMN agent_role TEXT' },
|
|
595
856
|
{ col: 'retrieval_priority', sql: 'ALTER TABLE memories ADD COLUMN retrieval_priority INTEGER DEFAULT 50' },
|
|
596
|
-
// v0.9.0
|
|
857
|
+
// Data governance (v0.9.0)
|
|
597
858
|
{ col: 'recorded_at', sql: 'ALTER TABLE memories ADD COLUMN recorded_at INTEGER DEFAULT (strftime(\'%s\',\'now\'))' },
|
|
598
|
-
{ col: 'confidence', sql: 'ALTER TABLE memories ADD COLUMN confidence INTEGER DEFAULT
|
|
599
|
-
{ col: 'is_private', sql: 'ALTER TABLE memories ADD COLUMN is_private INTEGER DEFAULT 0' },
|
|
600
|
-
{ col: 'has_secrets', sql: 'ALTER TABLE memories ADD COLUMN has_secrets INTEGER DEFAULT 0' },
|
|
859
|
+
{ col: 'confidence', sql: 'ALTER TABLE memories ADD COLUMN confidence INTEGER DEFAULT 50' },
|
|
601
860
|
{ col: 'valid_from', sql: 'ALTER TABLE memories ADD COLUMN valid_from INTEGER' },
|
|
602
861
|
{ col: 'valid_to', sql: 'ALTER TABLE memories ADD COLUMN valid_to INTEGER' },
|
|
603
862
|
{ col: 'superseded_by', sql: 'ALTER TABLE memories ADD COLUMN superseded_by TEXT' },
|
|
604
863
|
{ col: 'version', sql: 'ALTER TABLE memories ADD COLUMN version INTEGER DEFAULT 1' },
|
|
605
|
-
{ col: 'merge_source_ids', sql: 'ALTER TABLE memories ADD COLUMN merge_source_ids TEXT' },
|
|
606
|
-
{ col: 'merge_version', sql: 'ALTER TABLE memories ADD COLUMN merge_version INTEGER DEFAULT 1' },
|
|
607
|
-
{ col: 'user_id', sql: 'ALTER TABLE memories ADD COLUMN user_id TEXT' },
|
|
608
|
-
{ col: 'confidence', sql: 'ALTER TABLE memories ADD COLUMN confidence INTEGER DEFAULT 100' },
|
|
609
864
|
{ col: 'is_active', sql: 'ALTER TABLE memories ADD COLUMN is_active INTEGER DEFAULT 1' },
|
|
610
865
|
{ col: 'expires_at', sql: 'ALTER TABLE memories ADD COLUMN expires_at INTEGER' },
|
|
611
|
-
|
|
612
|
-
{ col: '
|
|
613
|
-
{ col: '
|
|
614
|
-
{ col: 'agent_id', sql: 'ALTER TABLE memories ADD COLUMN agent_id TEXT' },
|
|
615
|
-
{ col: 'agent_role', sql: 'ALTER TABLE memories ADD COLUMN agent_role TEXT' },
|
|
616
|
-
{ col: 'retrieval_priority', sql: 'ALTER TABLE memories ADD COLUMN retrieval_priority INTEGER DEFAULT 50' },
|
|
617
|
-
// v0.8.0: Consolidation
|
|
618
|
-
{ col: 'consolidated_into', sql: 'ALTER TABLE memories ADD COLUMN consolidated_into TEXT' },
|
|
619
|
-
{ col: 'consolidated_at', sql: 'ALTER TABLE memories ADD COLUMN consolidated_at INTEGER' },
|
|
620
|
-
{ col: 'is_consolidated', sql: 'ALTER TABLE memories ADD COLUMN is_consolidated INTEGER DEFAULT 0' },
|
|
621
|
-
{ col: 'merged_at', sql: 'ALTER TABLE memories ADD COLUMN merged_at INTEGER' },
|
|
622
|
-
{ col: 'sector', sql: 'ALTER TABLE memories ADD COLUMN sector TEXT DEFAULT "episodic"' },
|
|
623
|
-
{ col: 'tier', sql: 'ALTER TABLE memories ADD COLUMN tier TEXT DEFAULT "hot"' },
|
|
624
|
-
{ col: 'context_status', sql: 'ALTER TABLE memories ADD COLUMN context_status TEXT DEFAULT "out-of-context"' },
|
|
625
|
-
{ col: 'decay_rate', sql: 'ALTER TABLE memories ADD COLUMN decay_rate INTEGER DEFAULT 30' },
|
|
626
|
-
{ col: 'coactivation_score', sql: 'ALTER TABLE memories ADD COLUMN coactivation_score INTEGER DEFAULT 0' },
|
|
627
|
-
{ col: 'last_decay_at', sql: 'ALTER TABLE memories ADD COLUMN last_decay_at INTEGER DEFAULT (strftime(\'%s\',\'now\'))' },
|
|
628
|
-
{ col: 'agent_id', sql: 'ALTER TABLE memories ADD COLUMN agent_id TEXT' },
|
|
629
|
-
{ col: 'agent_role', sql: 'ALTER TABLE memories ADD COLUMN agent_role TEXT' },
|
|
866
|
+
// Privacy & access (v0.9.0)
|
|
867
|
+
{ col: 'is_private', sql: 'ALTER TABLE memories ADD COLUMN is_private INTEGER DEFAULT 0' },
|
|
868
|
+
{ col: 'has_secrets', sql: 'ALTER TABLE memories ADD COLUMN has_secrets INTEGER DEFAULT 0' },
|
|
630
869
|
{ col: 'visibility_scope', sql: 'ALTER TABLE memories ADD COLUMN visibility_scope TEXT DEFAULT "private"' },
|
|
631
870
|
{ col: 'is_protected', sql: 'ALTER TABLE memories ADD COLUMN is_protected INTEGER DEFAULT 0' },
|
|
632
871
|
{ col: 'is_pinned', sql: 'ALTER TABLE memories ADD COLUMN is_pinned INTEGER DEFAULT 0' },
|
|
633
872
|
{ col: 'is_immutable', sql: 'ALTER TABLE memories ADD COLUMN is_immutable INTEGER DEFAULT 0' },
|
|
634
873
|
{ col: 'write_scope', sql: 'ALTER TABLE memories ADD COLUMN write_scope TEXT' },
|
|
635
874
|
{ col: 'read_scope', sql: 'ALTER TABLE memories ADD COLUMN read_scope TEXT' },
|
|
875
|
+
// Usage tracking (v0.9.0)
|
|
636
876
|
{ col: 'triggered_by', sql: 'ALTER TABLE memories ADD COLUMN triggered_by TEXT' },
|
|
637
877
|
{ col: 'capture_reason', sql: 'ALTER TABLE memories ADD COLUMN capture_reason TEXT' },
|
|
638
878
|
{ col: 'last_used_at', sql: 'ALTER TABLE memories ADD COLUMN last_used_at INTEGER' },
|
|
639
879
|
{ col: 'usage_count', sql: 'ALTER TABLE memories ADD COLUMN usage_count INTEGER DEFAULT 0' },
|
|
640
|
-
{ col: 'valid_from', sql: 'ALTER TABLE memories ADD COLUMN valid_from INTEGER' },
|
|
641
|
-
{ col: 'valid_to', sql: 'ALTER TABLE memories ADD COLUMN valid_to INTEGER' },
|
|
642
|
-
{ col: 'superseded_by', sql: 'ALTER TABLE memories ADD COLUMN superseded_by TEXT' },
|
|
643
|
-
{ col: 'version', sql: 'ALTER TABLE memories ADD COLUMN version INTEGER DEFAULT 1' },
|
|
644
|
-
{ col: 'merge_source_ids', sql: 'ALTER TABLE memories ADD COLUMN merge_source_ids TEXT' },
|
|
645
|
-
{ col: 'merge_version', sql: 'ALTER TABLE memories ADD COLUMN merge_version INTEGER DEFAULT 1' },
|
|
646
880
|
{ col: 'user_id', sql: 'ALTER TABLE memories ADD COLUMN user_id TEXT' },
|
|
647
|
-
|
|
648
|
-
{ col: '
|
|
649
|
-
{ col: '
|
|
650
|
-
{ col: '
|
|
651
|
-
|
|
652
|
-
{ col: '
|
|
653
|
-
{ col: '
|
|
654
|
-
|
|
655
|
-
{ col: '
|
|
656
|
-
{ col: '
|
|
657
|
-
|
|
658
|
-
{ col: '
|
|
881
|
+
// Layer tracking (v0.9.x)
|
|
882
|
+
{ col: 'has_l0_abstract', sql: 'ALTER TABLE memories ADD COLUMN has_l0_abstract INTEGER DEFAULT 0' },
|
|
883
|
+
{ col: 'has_l1_overview', sql: 'ALTER TABLE memories ADD COLUMN has_l1_overview INTEGER DEFAULT 0' },
|
|
884
|
+
{ col: 'last_layer_update', sql: 'ALTER TABLE memories ADD COLUMN last_layer_update INTEGER' },
|
|
885
|
+
// Namespace support (v1.0.x)
|
|
886
|
+
{ col: 'namespace_id', sql: 'ALTER TABLE memories ADD COLUMN namespace_id TEXT REFERENCES namespaces(id) ON DELETE SET NULL' },
|
|
887
|
+
{ col: 'namespace_path', sql: 'ALTER TABLE memories ADD COLUMN namespace_path TEXT' },
|
|
888
|
+
// Places support (v1.1.5) - Spatial memory organization
|
|
889
|
+
{ col: 'place_id', sql: 'ALTER TABLE memories ADD COLUMN place_id TEXT REFERENCES places(id) ON DELETE SET NULL' },
|
|
890
|
+
{ col: 'place_loci_index', sql: 'ALTER TABLE memories ADD COLUMN place_loci_index INTEGER' },
|
|
891
|
+
// Token tracking (v1.0.x)
|
|
892
|
+
{ col: 'tokens_estimate', sql: 'ALTER TABLE memories ADD COLUMN tokens_estimate INTEGER DEFAULT 0' },
|
|
893
|
+
// Iteration 3: Confidence flags (default: speculative)
|
|
894
|
+
{ col: 'confidence_level', sql: 'ALTER TABLE memories ADD COLUMN confidence_level TEXT DEFAULT "speculative"' },
|
|
895
|
+
// v1.1.0: Status and encryption
|
|
896
|
+
{ col: 'status', sql: 'ALTER TABLE memories ADD COLUMN status TEXT DEFAULT "active"' },
|
|
897
|
+
{ col: 'encrypted_content', sql: 'ALTER TABLE memories ADD COLUMN encrypted_content TEXT' },
|
|
898
|
+
{ col: 'encryption_nonce', sql: 'ALTER TABLE memories ADD COLUMN encryption_nonce TEXT' },
|
|
899
|
+
{ col: 'is_encrypted', sql: 'ALTER TABLE memories ADD COLUMN is_encrypted INTEGER DEFAULT 0' },
|
|
900
|
+
// Places support (v1.1.5) - Spatial memory organization
|
|
901
|
+
{ col: 'place_id', sql: 'ALTER TABLE memories ADD COLUMN place_id UUID REFERENCES places(id) ON DELETE SET NULL' },
|
|
902
|
+
{ col: 'place_loci_index', sql: 'ALTER TABLE memories ADD COLUMN place_loci_index INTEGER' }
|
|
659
903
|
];
|
|
660
904
|
// Get existing columns for memories table
|
|
661
905
|
const tableInfo = sqlite.prepare("PRAGMA table_info(memories)").all();
|
|
@@ -676,28 +920,156 @@ async function runSqliteMigrations(sqlite) {
|
|
|
676
920
|
throw new Error(`Migration failed for column ${migration.col}: ${msg}`);
|
|
677
921
|
}
|
|
678
922
|
}
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
// v0.9.2: Add tokens_estimate to core_memory
|
|
926
|
+
const coreMemoryTableCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='core_memory'").get();
|
|
927
|
+
if (coreMemoryTableCheck) {
|
|
928
|
+
const coreMemoryInfo = sqlite.prepare("PRAGMA table_info(core_memory)").all();
|
|
929
|
+
const existingCoreMemoryColumns = new Set(coreMemoryInfo.map(col => col.name));
|
|
930
|
+
const coreMemoryMigrations = [
|
|
931
|
+
{ col: 'tokens_estimate', sql: 'ALTER TABLE core_memory ADD COLUMN tokens_estimate INTEGER DEFAULT 0 NOT NULL' },
|
|
932
|
+
];
|
|
933
|
+
for (const migration of coreMemoryMigrations) {
|
|
934
|
+
if (!existingCoreMemoryColumns.has(migration.col)) {
|
|
935
|
+
try {
|
|
936
|
+
sqlite.exec(migration.sql);
|
|
937
|
+
logger.info(`Migration: Added column ${migration.col} to core_memory table`);
|
|
938
|
+
}
|
|
939
|
+
catch (error) {
|
|
940
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
941
|
+
if (msg.includes('duplicate column name')) {
|
|
942
|
+
logger.debug(`Migration skipped for ${migration.col}: column already exists`);
|
|
943
|
+
}
|
|
944
|
+
else {
|
|
945
|
+
throw new Error(`Migration failed for column ${migration.col}: ${msg}`);
|
|
946
|
+
}
|
|
947
|
+
}
|
|
948
|
+
}
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
// Migrations for learnings table (v1.2.x) - renamed from observations
|
|
952
|
+
// First, check if we need to rename observations -> learnings
|
|
953
|
+
const observationsTableCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='observations'").get();
|
|
954
|
+
const learningsTableCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='learnings'").get();
|
|
955
|
+
if (observationsTableCheck && !learningsTableCheck) {
|
|
956
|
+
// Rename observations to learnings
|
|
957
|
+
try {
|
|
958
|
+
sqlite.exec("ALTER TABLE observations RENAME TO learnings");
|
|
959
|
+
logger.info("Migration: Renamed observations table to learnings");
|
|
960
|
+
}
|
|
961
|
+
catch (error) {
|
|
962
|
+
const err = error instanceof Error ? error.message : String(error);
|
|
963
|
+
logger.warn(`Migration note: Could not rename observations to learnings: ${err}`);
|
|
964
|
+
}
|
|
965
|
+
}
|
|
966
|
+
// Now run migrations on learnings table (whether renamed or new)
|
|
967
|
+
const learningsInfo = sqlite.prepare("PRAGMA table_info(learnings)").all();
|
|
968
|
+
const existingLearningsColumns = new Set(learningsInfo.map(col => col.name));
|
|
969
|
+
const learningsMigrations = [
|
|
970
|
+
{ col: 'embedding', sql: 'ALTER TABLE learnings ADD COLUMN embedding BLOB' },
|
|
971
|
+
{ col: 'folder_path', sql: 'ALTER TABLE learnings ADD COLUMN folder_path TEXT' },
|
|
972
|
+
{ col: 'project_path', sql: 'ALTER TABLE learnings ADD COLUMN project_path TEXT' },
|
|
973
|
+
{ col: 'is_private', sql: 'ALTER TABLE learnings ADD COLUMN is_private INTEGER DEFAULT 0' },
|
|
974
|
+
{ col: 'has_secrets', sql: 'ALTER TABLE learnings ADD COLUMN has_secrets INTEGER DEFAULT 0' },
|
|
975
|
+
{ col: 'relevance_score', sql: 'ALTER TABLE learnings ADD COLUMN relevance_score INTEGER DEFAULT 50' },
|
|
976
|
+
{ col: 'memory_id', sql: 'ALTER TABLE learnings ADD COLUMN memory_id TEXT REFERENCES memories(id) ON DELETE SET NULL' },
|
|
977
|
+
{ col: 'is_imported', sql: 'ALTER TABLE learnings ADD COLUMN is_imported INTEGER DEFAULT 0' },
|
|
978
|
+
];
|
|
979
|
+
for (const migration of learningsMigrations) {
|
|
980
|
+
if (!existingLearningsColumns.has(migration.col)) {
|
|
981
|
+
try {
|
|
982
|
+
sqlite.exec(migration.sql);
|
|
983
|
+
logger.info(`Migration: Added column ${migration.col} to learnings table`);
|
|
984
|
+
}
|
|
985
|
+
catch (error) {
|
|
986
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
987
|
+
if (msg.includes('duplicate column name')) {
|
|
988
|
+
logger.debug(`Migration skipped for ${migration.col}: column already exists`);
|
|
989
|
+
}
|
|
990
|
+
else {
|
|
991
|
+
logger.warn(`Migration note for ${migration.col}: ${msg}`);
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
}
|
|
995
|
+
}
|
|
996
|
+
// Add indexes if they don't exist
|
|
997
|
+
const existingIndexes = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='index' AND tbl_name='learnings'").all();
|
|
998
|
+
const existingIndexNames = new Set(existingIndexes.map(idx => idx.name));
|
|
999
|
+
const indexMigrations = [
|
|
1000
|
+
{ name: 'learnings_folder_idx', sql: 'CREATE INDEX IF NOT EXISTS learnings_folder_idx ON learnings(folder_path)' },
|
|
1001
|
+
{ name: 'learnings_relevance_idx', sql: 'CREATE INDEX IF NOT EXISTS learnings_relevance_idx ON learnings(relevance_score)' },
|
|
1002
|
+
{ name: 'learnings_private_idx', sql: 'CREATE INDEX IF NOT EXISTS learnings_private_idx ON learnings(is_private)' },
|
|
1003
|
+
{ name: 'learnings_memory_idx', sql: 'CREATE INDEX IF NOT EXISTS learnings_memory_idx ON learnings(memory_id)' },
|
|
1004
|
+
];
|
|
1005
|
+
for (const idx of indexMigrations) {
|
|
1006
|
+
if (!existingIndexNames.has(idx.name)) {
|
|
1007
|
+
try {
|
|
1008
|
+
sqlite.exec(idx.sql);
|
|
1009
|
+
logger.info(`Migration: Added index ${idx.name} to learnings table`);
|
|
1010
|
+
}
|
|
1011
|
+
catch (error) {
|
|
1012
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
1013
|
+
logger.warn(`Index migration note for ${idx.name}: ${msg}`);
|
|
1014
|
+
}
|
|
1015
|
+
}
|
|
1016
|
+
}
|
|
1017
|
+
// Migrations for maintenance_jobs table (v1.0.x)
|
|
1018
|
+
const maintenanceJobsTableCheck = sqlite.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='maintenance_jobs'").get();
|
|
1019
|
+
if (maintenanceJobsTableCheck) {
|
|
1020
|
+
const maintenanceJobsInfo = sqlite.prepare("PRAGMA table_info(maintenance_jobs)").all();
|
|
1021
|
+
const existingMaintenanceJobsColumns = new Set(maintenanceJobsInfo.map(col => col.name));
|
|
1022
|
+
// Check if table has wrong schema (camelCase columns from bug in earlier version)
|
|
1023
|
+
const hasCamelCaseColumns = existingMaintenanceJobsColumns.has('jobName') ||
|
|
1024
|
+
existingMaintenanceJobsColumns.has('jobType') ||
|
|
1025
|
+
existingMaintenanceJobsColumns.has('cronExpression');
|
|
1026
|
+
if (hasCamelCaseColumns) {
|
|
1027
|
+
// Table has incorrect camelCase schema - need to recreate it
|
|
1028
|
+
logger.warn('Maintenance jobs table has incorrect schema (camelCase columns). Recreating...');
|
|
1029
|
+
try {
|
|
1030
|
+
// Drop the malformed table
|
|
1031
|
+
sqlite.exec('DROP TABLE IF EXISTS maintenance_jobs');
|
|
1032
|
+
// Recreate with correct schema - it will be created by the schema SQL
|
|
1033
|
+
logger.info('Dropped malformed maintenance_jobs table. It will be recreated with correct schema.');
|
|
1034
|
+
}
|
|
1035
|
+
catch (error) {
|
|
1036
|
+
logger.error('Failed to recreate maintenance_jobs table:', error);
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
else {
|
|
1040
|
+
// Normal migrations for correct schema
|
|
1041
|
+
const maintenanceJobsMigrations = [
|
|
1042
|
+
{ col: 'schedule', sql: 'ALTER TABLE maintenance_jobs DROP COLUMN schedule' },
|
|
1043
|
+
{ col: 'cron_expression', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN cron_expression TEXT' },
|
|
1044
|
+
{ col: 'last_run_at', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN last_run_at INTEGER' },
|
|
1045
|
+
{ col: 'last_run_duration', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN last_run_duration INTEGER' },
|
|
1046
|
+
{ col: 'last_run_status', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN last_run_status TEXT' },
|
|
1047
|
+
{ col: 'last_run_error', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN last_run_error TEXT' },
|
|
1048
|
+
{ col: 'total_runs', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN total_runs INTEGER DEFAULT 0' },
|
|
1049
|
+
{ col: 'success_count', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN success_count INTEGER DEFAULT 0' },
|
|
1050
|
+
{ col: 'failure_count', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN failure_count INTEGER DEFAULT 0' },
|
|
1051
|
+
{ col: 'job_config', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN job_config TEXT' },
|
|
1052
|
+
{ col: 'next_run_at', sql: 'ALTER TABLE maintenance_jobs ADD COLUMN next_run_at INTEGER' },
|
|
1053
|
+
{ col: 'run_count', sql: 'ALTER TABLE maintenance_jobs DROP COLUMN run_count' },
|
|
1054
|
+
];
|
|
1055
|
+
for (const migration of maintenanceJobsMigrations) {
|
|
1056
|
+
// For DROP migrations, only run if column EXISTS
|
|
1057
|
+
// For ADD migrations, only run if column does NOT exist
|
|
1058
|
+
const shouldRun = migration.sql.startsWith('ALTER TABLE maintenance_jobs DROP COLUMN')
|
|
1059
|
+
? existingMaintenanceJobsColumns.has(migration.col)
|
|
1060
|
+
: !existingMaintenanceJobsColumns.has(migration.col);
|
|
1061
|
+
if (shouldRun) {
|
|
1062
|
+
try {
|
|
1063
|
+
sqlite.exec(migration.sql);
|
|
1064
|
+
logger.info(`Migration: ${migration.col} on maintenance_jobs table`);
|
|
1065
|
+
}
|
|
1066
|
+
catch (error) {
|
|
1067
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
1068
|
+
if (msg.includes('duplicate column name') || msg.includes('no such column')) {
|
|
1069
|
+
logger.debug(`Migration skipped for ${migration.col}: ${msg.includes('duplicate column name') ? 'column already exists' : 'column does not exist'}`);
|
|
692
1070
|
}
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
if (msg.includes('duplicate column name')) {
|
|
696
|
-
logger.debug(`Migration skipped for ${migration.col}: column already exists`);
|
|
697
|
-
}
|
|
698
|
-
else {
|
|
699
|
-
throw new Error(`Migration failed for column ${migration.col}: ${msg}`);
|
|
700
|
-
}
|
|
1071
|
+
else {
|
|
1072
|
+
throw new Error(`Migration failed for column ${migration.col}: ${msg}`);
|
|
701
1073
|
}
|
|
702
1074
|
}
|
|
703
1075
|
}
|