@vinaes/succ 1.3.19
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/LICENSE +87 -0
- package/README.md +588 -0
- package/agents/succ-checkpoint-manager.md +51 -0
- package/agents/succ-code-reviewer.md +181 -0
- package/agents/succ-context-optimizer.md +83 -0
- package/agents/succ-debug.md +224 -0
- package/agents/succ-decision-auditor.md +74 -0
- package/agents/succ-deep-search.md +41 -0
- package/agents/succ-diff-reviewer.md +123 -0
- package/agents/succ-explore.md +83 -0
- package/agents/succ-general.md +109 -0
- package/agents/succ-knowledge-indexer.md +45 -0
- package/agents/succ-knowledge-mapper.md +61 -0
- package/agents/succ-memory-curator.md +43 -0
- package/agents/succ-memory-health-monitor.md +55 -0
- package/agents/succ-pattern-detective.md +62 -0
- package/agents/succ-plan.md +172 -0
- package/agents/succ-quality-improvement-coach.md +63 -0
- package/agents/succ-readiness-improver.md +62 -0
- package/agents/succ-session-handoff-orchestrator.md +54 -0
- package/agents/succ-session-reviewer.md +46 -0
- package/agents/succ-style-tracker.md +73 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +749 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/agents-md.d.ts +16 -0
- package/dist/commands/agents-md.d.ts.map +1 -0
- package/dist/commands/agents-md.js +33 -0
- package/dist/commands/agents-md.js.map +1 -0
- package/dist/commands/analyze-agents.d.ts +20 -0
- package/dist/commands/analyze-agents.d.ts.map +1 -0
- package/dist/commands/analyze-agents.js +305 -0
- package/dist/commands/analyze-agents.js.map +1 -0
- package/dist/commands/analyze-helpers.d.ts +22 -0
- package/dist/commands/analyze-helpers.d.ts.map +1 -0
- package/dist/commands/analyze-helpers.js +38 -0
- package/dist/commands/analyze-helpers.js.map +1 -0
- package/dist/commands/analyze-profile.d.ts +53 -0
- package/dist/commands/analyze-profile.d.ts.map +1 -0
- package/dist/commands/analyze-profile.js +638 -0
- package/dist/commands/analyze-profile.js.map +1 -0
- package/dist/commands/analyze-recursive.d.ts +20 -0
- package/dist/commands/analyze-recursive.d.ts.map +1 -0
- package/dist/commands/analyze-recursive.js +326 -0
- package/dist/commands/analyze-recursive.js.map +1 -0
- package/dist/commands/analyze-utils.d.ts +83 -0
- package/dist/commands/analyze-utils.d.ts.map +1 -0
- package/dist/commands/analyze-utils.js +541 -0
- package/dist/commands/analyze-utils.js.map +1 -0
- package/dist/commands/analyze.d.ts +15 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +265 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/backfill.d.ts +22 -0
- package/dist/commands/backfill.d.ts.map +1 -0
- package/dist/commands/backfill.js +62 -0
- package/dist/commands/backfill.js.map +1 -0
- package/dist/commands/benchmark-quality.d.ts +18 -0
- package/dist/commands/benchmark-quality.d.ts.map +1 -0
- package/dist/commands/benchmark-quality.js +316 -0
- package/dist/commands/benchmark-quality.js.map +1 -0
- package/dist/commands/benchmark-sqlite-vec.d.ts +12 -0
- package/dist/commands/benchmark-sqlite-vec.d.ts.map +1 -0
- package/dist/commands/benchmark-sqlite-vec.js +281 -0
- package/dist/commands/benchmark-sqlite-vec.js.map +1 -0
- package/dist/commands/benchmark.d.ts +57 -0
- package/dist/commands/benchmark.d.ts.map +1 -0
- package/dist/commands/benchmark.js +682 -0
- package/dist/commands/benchmark.js.map +1 -0
- package/dist/commands/chat.d.ts +14 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +84 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/checkpoint.d.ts +27 -0
- package/dist/commands/checkpoint.d.ts.map +1 -0
- package/dist/commands/checkpoint.js +181 -0
- package/dist/commands/checkpoint.js.map +1 -0
- package/dist/commands/clear.d.ts +9 -0
- package/dist/commands/clear.d.ts.map +1 -0
- package/dist/commands/clear.js +31 -0
- package/dist/commands/clear.js.map +1 -0
- package/dist/commands/config.d.ts +26 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +247 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/consolidate.d.ts +21 -0
- package/dist/commands/consolidate.d.ts.map +1 -0
- package/dist/commands/consolidate.js +117 -0
- package/dist/commands/consolidate.js.map +1 -0
- package/dist/commands/daemon.d.ts +48 -0
- package/dist/commands/daemon.d.ts.map +1 -0
- package/dist/commands/daemon.js +218 -0
- package/dist/commands/daemon.js.map +1 -0
- package/dist/commands/embedding.d.ts +26 -0
- package/dist/commands/embedding.d.ts.map +1 -0
- package/dist/commands/embedding.js +168 -0
- package/dist/commands/embedding.js.map +1 -0
- package/dist/commands/graph.d.ts +20 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +128 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/index-code.d.ts +23 -0
- package/dist/commands/index-code.d.ts.map +1 -0
- package/dist/commands/index-code.js +218 -0
- package/dist/commands/index-code.js.map +1 -0
- package/dist/commands/index.d.ts +23 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +217 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init-templates.d.ts +21 -0
- package/dist/commands/init-templates.d.ts.map +1 -0
- package/dist/commands/init-templates.js +487 -0
- package/dist/commands/init-templates.js.map +1 -0
- package/dist/commands/init.d.ts +10 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +865 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/memories.d.ts +47 -0
- package/dist/commands/memories.d.ts.map +1 -0
- package/dist/commands/memories.js +597 -0
- package/dist/commands/memories.js.map +1 -0
- package/dist/commands/migrate.d.ts +19 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +154 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/prd.d.ts +46 -0
- package/dist/commands/prd.d.ts.map +1 -0
- package/dist/commands/prd.js +378 -0
- package/dist/commands/prd.js.map +1 -0
- package/dist/commands/precompute-context.d.ts +11 -0
- package/dist/commands/precompute-context.d.ts.map +1 -0
- package/dist/commands/precompute-context.js +12 -0
- package/dist/commands/precompute-context.js.map +1 -0
- package/dist/commands/progress.d.ts +16 -0
- package/dist/commands/progress.d.ts.map +1 -0
- package/dist/commands/progress.js +38 -0
- package/dist/commands/progress.js.map +1 -0
- package/dist/commands/reindex.d.ts +17 -0
- package/dist/commands/reindex.d.ts.map +1 -0
- package/dist/commands/reindex.js +83 -0
- package/dist/commands/reindex.js.map +1 -0
- package/dist/commands/retention.d.ts +19 -0
- package/dist/commands/retention.d.ts.map +1 -0
- package/dist/commands/retention.js +162 -0
- package/dist/commands/retention.js.map +1 -0
- package/dist/commands/score.d.ts +10 -0
- package/dist/commands/score.d.ts.map +1 -0
- package/dist/commands/score.js +28 -0
- package/dist/commands/score.js.map +1 -0
- package/dist/commands/search.d.ts +7 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +89 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/session-summary.d.ts +15 -0
- package/dist/commands/session-summary.d.ts.map +1 -0
- package/dist/commands/session-summary.js +16 -0
- package/dist/commands/session-summary.js.map +1 -0
- package/dist/commands/setup.d.ts +6 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +222 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/soul.d.ts +9 -0
- package/dist/commands/soul.d.ts.map +1 -0
- package/dist/commands/soul.js +256 -0
- package/dist/commands/soul.js.map +1 -0
- package/dist/commands/stats.d.ts +18 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +138 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +145 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/train-bpe.d.ts +8 -0
- package/dist/commands/train-bpe.d.ts.map +1 -0
- package/dist/commands/train-bpe.js +35 -0
- package/dist/commands/train-bpe.js.map +1 -0
- package/dist/commands/watch.d.ts +22 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +171 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/daemon/analyzer.d.ts +54 -0
- package/dist/daemon/analyzer.d.ts.map +1 -0
- package/dist/daemon/analyzer.js +362 -0
- package/dist/daemon/analyzer.js.map +1 -0
- package/dist/daemon/client.d.ts +87 -0
- package/dist/daemon/client.d.ts.map +1 -0
- package/dist/daemon/client.js +356 -0
- package/dist/daemon/client.js.map +1 -0
- package/dist/daemon/index.d.ts +12 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +12 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/service.d.ts +51 -0
- package/dist/daemon/service.d.ts.map +1 -0
- package/dist/daemon/service.js +1203 -0
- package/dist/daemon/service.js.map +1 -0
- package/dist/daemon/session-processor.d.ts +85 -0
- package/dist/daemon/session-processor.d.ts.map +1 -0
- package/dist/daemon/session-processor.js +571 -0
- package/dist/daemon/session-processor.js.map +1 -0
- package/dist/daemon/sessions.d.ts +62 -0
- package/dist/daemon/sessions.d.ts.map +1 -0
- package/dist/daemon/sessions.js +192 -0
- package/dist/daemon/sessions.js.map +1 -0
- package/dist/daemon/watcher.d.ts +52 -0
- package/dist/daemon/watcher.d.ts.map +1 -0
- package/dist/daemon/watcher.js +363 -0
- package/dist/daemon/watcher.js.map +1 -0
- package/dist/lib/agents-md-generator.d.ts +33 -0
- package/dist/lib/agents-md-generator.d.ts.map +1 -0
- package/dist/lib/agents-md-generator.js +156 -0
- package/dist/lib/agents-md-generator.js.map +1 -0
- package/dist/lib/ai-readiness.d.ts +132 -0
- package/dist/lib/ai-readiness.d.ts.map +1 -0
- package/dist/lib/ai-readiness.js +702 -0
- package/dist/lib/ai-readiness.js.map +1 -0
- package/dist/lib/analyze-state.d.ts +34 -0
- package/dist/lib/analyze-state.d.ts.map +1 -0
- package/dist/lib/analyze-state.js +106 -0
- package/dist/lib/analyze-state.js.map +1 -0
- package/dist/lib/benchmark.d.ts +250 -0
- package/dist/lib/benchmark.d.ts.map +1 -0
- package/dist/lib/benchmark.js +778 -0
- package/dist/lib/benchmark.js.map +1 -0
- package/dist/lib/bm25.d.ts +114 -0
- package/dist/lib/bm25.d.ts.map +1 -0
- package/dist/lib/bm25.js +727 -0
- package/dist/lib/bm25.js.map +1 -0
- package/dist/lib/bpe.d.ts +70 -0
- package/dist/lib/bpe.d.ts.map +1 -0
- package/dist/lib/bpe.js +270 -0
- package/dist/lib/bpe.js.map +1 -0
- package/dist/lib/checkpoint.d.ts +124 -0
- package/dist/lib/checkpoint.d.ts.map +1 -0
- package/dist/lib/checkpoint.js +321 -0
- package/dist/lib/checkpoint.js.map +1 -0
- package/dist/lib/chunker.d.ts +47 -0
- package/dist/lib/chunker.d.ts.map +1 -0
- package/dist/lib/chunker.js +358 -0
- package/dist/lib/chunker.js.map +1 -0
- package/dist/lib/claude-ws-transport.d.ts +76 -0
- package/dist/lib/claude-ws-transport.d.ts.map +1 -0
- package/dist/lib/claude-ws-transport.js +487 -0
- package/dist/lib/claude-ws-transport.js.map +1 -0
- package/dist/lib/compact-briefing.d.ts +22 -0
- package/dist/lib/compact-briefing.d.ts.map +1 -0
- package/dist/lib/compact-briefing.js +180 -0
- package/dist/lib/compact-briefing.js.map +1 -0
- package/dist/lib/config-defaults.d.ts +41 -0
- package/dist/lib/config-defaults.d.ts.map +1 -0
- package/dist/lib/config-defaults.js +99 -0
- package/dist/lib/config-defaults.js.map +1 -0
- package/dist/lib/config-display.d.ts +16 -0
- package/dist/lib/config-display.d.ts.map +1 -0
- package/dist/lib/config-display.js +408 -0
- package/dist/lib/config-display.js.map +1 -0
- package/dist/lib/config-types.d.ts +601 -0
- package/dist/lib/config-types.d.ts.map +1 -0
- package/dist/lib/config-types.js +7 -0
- package/dist/lib/config-types.js.map +1 -0
- package/dist/lib/config-validation.d.ts +19 -0
- package/dist/lib/config-validation.d.ts.map +1 -0
- package/dist/lib/config-validation.js +136 -0
- package/dist/lib/config-validation.js.map +1 -0
- package/dist/lib/config.d.ts +143 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +689 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/consolidate.d.ts +115 -0
- package/dist/lib/consolidate.d.ts.map +1 -0
- package/dist/lib/consolidate.js +600 -0
- package/dist/lib/consolidate.js.map +1 -0
- package/dist/lib/db/bm25-indexes.d.ts +58 -0
- package/dist/lib/db/bm25-indexes.d.ts.map +1 -0
- package/dist/lib/db/bm25-indexes.js +333 -0
- package/dist/lib/db/bm25-indexes.js.map +1 -0
- package/dist/lib/db/bpe.d.ts +18 -0
- package/dist/lib/db/bpe.d.ts.map +1 -0
- package/dist/lib/db/bpe.js +44 -0
- package/dist/lib/db/bpe.js.map +1 -0
- package/dist/lib/db/connection.d.ts +47 -0
- package/dist/lib/db/connection.d.ts.map +1 -0
- package/dist/lib/db/connection.js +114 -0
- package/dist/lib/db/connection.js.map +1 -0
- package/dist/lib/db/documents.d.ts +58 -0
- package/dist/lib/db/documents.d.ts.map +1 -0
- package/dist/lib/db/documents.js +374 -0
- package/dist/lib/db/documents.js.map +1 -0
- package/dist/lib/db/file-hash.d.ts +26 -0
- package/dist/lib/db/file-hash.d.ts.map +1 -0
- package/dist/lib/db/file-hash.js +56 -0
- package/dist/lib/db/file-hash.js.map +1 -0
- package/dist/lib/db/global-memories.d.ts +62 -0
- package/dist/lib/db/global-memories.d.ts.map +1 -0
- package/dist/lib/db/global-memories.js +173 -0
- package/dist/lib/db/global-memories.js.map +1 -0
- package/dist/lib/db/graph.d.ts +163 -0
- package/dist/lib/db/graph.d.ts.map +1 -0
- package/dist/lib/db/graph.js +488 -0
- package/dist/lib/db/graph.js.map +1 -0
- package/dist/lib/db/helpers.d.ts +13 -0
- package/dist/lib/db/helpers.d.ts.map +1 -0
- package/dist/lib/db/helpers.js +21 -0
- package/dist/lib/db/helpers.js.map +1 -0
- package/dist/lib/db/hybrid-search.d.ts +64 -0
- package/dist/lib/db/hybrid-search.d.ts.map +1 -0
- package/dist/lib/db/hybrid-search.js +549 -0
- package/dist/lib/db/hybrid-search.js.map +1 -0
- package/dist/lib/db/index.d.ts +23 -0
- package/dist/lib/db/index.d.ts.map +1 -0
- package/dist/lib/db/index.js +23 -0
- package/dist/lib/db/index.js.map +1 -0
- package/dist/lib/db/memories.d.ts +174 -0
- package/dist/lib/db/memories.d.ts.map +1 -0
- package/dist/lib/db/memories.js +866 -0
- package/dist/lib/db/memories.js.map +1 -0
- package/dist/lib/db/retention.d.ts +64 -0
- package/dist/lib/db/retention.d.ts.map +1 -0
- package/dist/lib/db/retention.js +115 -0
- package/dist/lib/db/retention.js.map +1 -0
- package/dist/lib/db/schema.d.ts +29 -0
- package/dist/lib/db/schema.d.ts.map +1 -0
- package/dist/lib/db/schema.js +832 -0
- package/dist/lib/db/schema.js.map +1 -0
- package/dist/lib/db/skills.d.ts +65 -0
- package/dist/lib/db/skills.d.ts.map +1 -0
- package/dist/lib/db/skills.js +119 -0
- package/dist/lib/db/skills.js.map +1 -0
- package/dist/lib/db/token-frequency.d.ts +34 -0
- package/dist/lib/db/token-frequency.d.ts.map +1 -0
- package/dist/lib/db/token-frequency.js +92 -0
- package/dist/lib/db/token-frequency.js.map +1 -0
- package/dist/lib/db/token-stats.d.ts +43 -0
- package/dist/lib/db/token-stats.d.ts.map +1 -0
- package/dist/lib/db/token-stats.js +59 -0
- package/dist/lib/db/token-stats.js.map +1 -0
- package/dist/lib/db/types.d.ts +57 -0
- package/dist/lib/db/types.d.ts.map +1 -0
- package/dist/lib/db/types.js +5 -0
- package/dist/lib/db/types.js.map +1 -0
- package/dist/lib/db/web-search-history.d.ts +22 -0
- package/dist/lib/db/web-search-history.d.ts.map +1 -0
- package/dist/lib/db/web-search-history.js +107 -0
- package/dist/lib/db/web-search-history.js.map +1 -0
- package/dist/lib/debug/state.d.ts +17 -0
- package/dist/lib/debug/state.d.ts.map +1 -0
- package/dist/lib/debug/state.js +131 -0
- package/dist/lib/debug/state.js.map +1 -0
- package/dist/lib/debug/types.d.ts +74 -0
- package/dist/lib/debug/types.d.ts.map +1 -0
- package/dist/lib/debug/types.js +85 -0
- package/dist/lib/debug/types.js.map +1 -0
- package/dist/lib/embedding-pool.d.ts +37 -0
- package/dist/lib/embedding-pool.d.ts.map +1 -0
- package/dist/lib/embedding-pool.js +159 -0
- package/dist/lib/embedding-pool.js.map +1 -0
- package/dist/lib/embedding-worker.d.ts +7 -0
- package/dist/lib/embedding-worker.d.ts.map +1 -0
- package/dist/lib/embedding-worker.js +49 -0
- package/dist/lib/embedding-worker.js.map +1 -0
- package/dist/lib/embeddings.d.ts +54 -0
- package/dist/lib/embeddings.d.ts.map +1 -0
- package/dist/lib/embeddings.js +437 -0
- package/dist/lib/embeddings.js.map +1 -0
- package/dist/lib/errors.d.ts +40 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +66 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/fault-logger.d.ts +35 -0
- package/dist/lib/fault-logger.d.ts.map +1 -0
- package/dist/lib/fault-logger.js +182 -0
- package/dist/lib/fault-logger.js.map +1 -0
- package/dist/lib/graph/centrality.d.ts +34 -0
- package/dist/lib/graph/centrality.d.ts.map +1 -0
- package/dist/lib/graph/centrality.js +76 -0
- package/dist/lib/graph/centrality.js.map +1 -0
- package/dist/lib/graph/cleanup.d.ts +36 -0
- package/dist/lib/graph/cleanup.d.ts.map +1 -0
- package/dist/lib/graph/cleanup.js +96 -0
- package/dist/lib/graph/cleanup.js.map +1 -0
- package/dist/lib/graph/community-detection.d.ts +61 -0
- package/dist/lib/graph/community-detection.d.ts.map +1 -0
- package/dist/lib/graph/community-detection.js +218 -0
- package/dist/lib/graph/community-detection.js.map +1 -0
- package/dist/lib/graph/contextual-proximity.d.ts +41 -0
- package/dist/lib/graph/contextual-proximity.d.ts.map +1 -0
- package/dist/lib/graph/contextual-proximity.js +125 -0
- package/dist/lib/graph/contextual-proximity.js.map +1 -0
- package/dist/lib/graph/llm-relations.d.ts +54 -0
- package/dist/lib/graph/llm-relations.d.ts.map +1 -0
- package/dist/lib/graph/llm-relations.js +265 -0
- package/dist/lib/graph/llm-relations.js.map +1 -0
- package/dist/lib/graph-export.d.ts +13 -0
- package/dist/lib/graph-export.d.ts.map +1 -0
- package/dist/lib/graph-export.js +637 -0
- package/dist/lib/graph-export.js.map +1 -0
- package/dist/lib/graph-scheduler.d.ts +7 -0
- package/dist/lib/graph-scheduler.d.ts.map +1 -0
- package/dist/lib/graph-scheduler.js +21 -0
- package/dist/lib/graph-scheduler.js.map +1 -0
- package/dist/lib/indexer.d.ts +36 -0
- package/dist/lib/indexer.d.ts.map +1 -0
- package/dist/lib/indexer.js +226 -0
- package/dist/lib/indexer.js.map +1 -0
- package/dist/lib/learning-delta.d.ts +35 -0
- package/dist/lib/learning-delta.d.ts.map +1 -0
- package/dist/lib/learning-delta.js +53 -0
- package/dist/lib/learning-delta.js.map +1 -0
- package/dist/lib/llm.d.ts +118 -0
- package/dist/lib/llm.d.ts.map +1 -0
- package/dist/lib/llm.js +439 -0
- package/dist/lib/llm.js.map +1 -0
- package/dist/lib/lock.d.ts +27 -0
- package/dist/lib/lock.d.ts.map +1 -0
- package/dist/lib/lock.js +143 -0
- package/dist/lib/lock.js.map +1 -0
- package/dist/lib/md-fetch.d.ts +61 -0
- package/dist/lib/md-fetch.d.ts.map +1 -0
- package/dist/lib/md-fetch.js +141 -0
- package/dist/lib/md-fetch.js.map +1 -0
- package/dist/lib/mmr.d.ts +29 -0
- package/dist/lib/mmr.d.ts.map +1 -0
- package/dist/lib/mmr.js +89 -0
- package/dist/lib/mmr.js.map +1 -0
- package/dist/lib/onboarding/ai-chat.d.ts +11 -0
- package/dist/lib/onboarding/ai-chat.d.ts.map +1 -0
- package/dist/lib/onboarding/ai-chat.js +85 -0
- package/dist/lib/onboarding/ai-chat.js.map +1 -0
- package/dist/lib/onboarding/index.d.ts +7 -0
- package/dist/lib/onboarding/index.d.ts.map +1 -0
- package/dist/lib/onboarding/index.js +7 -0
- package/dist/lib/onboarding/index.js.map +1 -0
- package/dist/lib/onboarding/wizard.d.ts +11 -0
- package/dist/lib/onboarding/wizard.d.ts.map +1 -0
- package/dist/lib/onboarding/wizard.js +104 -0
- package/dist/lib/onboarding/wizard.js.map +1 -0
- package/dist/lib/ort-provider.d.ts +27 -0
- package/dist/lib/ort-provider.d.ts.map +1 -0
- package/dist/lib/ort-provider.js +83 -0
- package/dist/lib/ort-provider.js.map +1 -0
- package/dist/lib/ort-session.d.ts +32 -0
- package/dist/lib/ort-session.d.ts.map +1 -0
- package/dist/lib/ort-session.js +227 -0
- package/dist/lib/ort-session.js.map +1 -0
- package/dist/lib/patterns.d.ts +43 -0
- package/dist/lib/patterns.d.ts.map +1 -0
- package/dist/lib/patterns.js +395 -0
- package/dist/lib/patterns.js.map +1 -0
- package/dist/lib/prd/codebase-context.d.ts +27 -0
- package/dist/lib/prd/codebase-context.d.ts.map +1 -0
- package/dist/lib/prd/codebase-context.js +420 -0
- package/dist/lib/prd/codebase-context.js.map +1 -0
- package/dist/lib/prd/context.d.ts +24 -0
- package/dist/lib/prd/context.d.ts.map +1 -0
- package/dist/lib/prd/context.js +68 -0
- package/dist/lib/prd/context.js.map +1 -0
- package/dist/lib/prd/executor.d.ts +52 -0
- package/dist/lib/prd/executor.d.ts.map +1 -0
- package/dist/lib/prd/executor.js +154 -0
- package/dist/lib/prd/executor.js.map +1 -0
- package/dist/lib/prd/export.d.ts +40 -0
- package/dist/lib/prd/export.d.ts.map +1 -0
- package/dist/lib/prd/export.js +511 -0
- package/dist/lib/prd/export.js.map +1 -0
- package/dist/lib/prd/gates.d.ts +30 -0
- package/dist/lib/prd/gates.d.ts.map +1 -0
- package/dist/lib/prd/gates.js +100 -0
- package/dist/lib/prd/gates.js.map +1 -0
- package/dist/lib/prd/generate.d.ts +56 -0
- package/dist/lib/prd/generate.d.ts.map +1 -0
- package/dist/lib/prd/generate.js +357 -0
- package/dist/lib/prd/generate.js.map +1 -0
- package/dist/lib/prd/parse.d.ts +21 -0
- package/dist/lib/prd/parse.d.ts.map +1 -0
- package/dist/lib/prd/parse.js +270 -0
- package/dist/lib/prd/parse.js.map +1 -0
- package/dist/lib/prd/prompt-builder.d.ts +18 -0
- package/dist/lib/prd/prompt-builder.d.ts.map +1 -0
- package/dist/lib/prd/prompt-builder.js +61 -0
- package/dist/lib/prd/prompt-builder.js.map +1 -0
- package/dist/lib/prd/runner.d.ts +54 -0
- package/dist/lib/prd/runner.d.ts.map +1 -0
- package/dist/lib/prd/runner.js +563 -0
- package/dist/lib/prd/runner.js.map +1 -0
- package/dist/lib/prd/scheduler.d.ts +27 -0
- package/dist/lib/prd/scheduler.d.ts.map +1 -0
- package/dist/lib/prd/scheduler.js +113 -0
- package/dist/lib/prd/scheduler.js.map +1 -0
- package/dist/lib/prd/state.d.ts +77 -0
- package/dist/lib/prd/state.d.ts.map +1 -0
- package/dist/lib/prd/state.js +253 -0
- package/dist/lib/prd/state.js.map +1 -0
- package/dist/lib/prd/team-runner.d.ts +48 -0
- package/dist/lib/prd/team-runner.d.ts.map +1 -0
- package/dist/lib/prd/team-runner.js +261 -0
- package/dist/lib/prd/team-runner.js.map +1 -0
- package/dist/lib/prd/types.d.ts +169 -0
- package/dist/lib/prd/types.d.ts.map +1 -0
- package/dist/lib/prd/types.js +143 -0
- package/dist/lib/prd/types.js.map +1 -0
- package/dist/lib/prd/worktree.d.ts +54 -0
- package/dist/lib/prd/worktree.d.ts.map +1 -0
- package/dist/lib/prd/worktree.js +255 -0
- package/dist/lib/prd/worktree.js.map +1 -0
- package/dist/lib/precompute-context.d.ts +48 -0
- package/dist/lib/precompute-context.d.ts.map +1 -0
- package/dist/lib/precompute-context.js +265 -0
- package/dist/lib/precompute-context.js.map +1 -0
- package/dist/lib/pricing.d.ts +60 -0
- package/dist/lib/pricing.d.ts.map +1 -0
- package/dist/lib/pricing.js +258 -0
- package/dist/lib/pricing.js.map +1 -0
- package/dist/lib/process-registry.d.ts +30 -0
- package/dist/lib/process-registry.d.ts.map +1 -0
- package/dist/lib/process-registry.js +92 -0
- package/dist/lib/process-registry.js.map +1 -0
- package/dist/lib/progress-log.d.ts +44 -0
- package/dist/lib/progress-log.d.ts.map +1 -0
- package/dist/lib/progress-log.js +58 -0
- package/dist/lib/progress-log.js.map +1 -0
- package/dist/lib/public-api.d.ts +56 -0
- package/dist/lib/public-api.d.ts.map +1 -0
- package/dist/lib/public-api.js +63 -0
- package/dist/lib/public-api.js.map +1 -0
- package/dist/lib/quality.d.ts +66 -0
- package/dist/lib/quality.d.ts.map +1 -0
- package/dist/lib/quality.js +486 -0
- package/dist/lib/quality.js.map +1 -0
- package/dist/lib/query-expansion.d.ts +16 -0
- package/dist/lib/query-expansion.d.ts.map +1 -0
- package/dist/lib/query-expansion.js +53 -0
- package/dist/lib/query-expansion.js.map +1 -0
- package/dist/lib/readiness.d.ts +35 -0
- package/dist/lib/readiness.d.ts.map +1 -0
- package/dist/lib/readiness.js +142 -0
- package/dist/lib/readiness.js.map +1 -0
- package/dist/lib/reference-embeddings.d.ts +39 -0
- package/dist/lib/reference-embeddings.d.ts.map +1 -0
- package/dist/lib/reference-embeddings.js +95 -0
- package/dist/lib/reference-embeddings.js.map +1 -0
- package/dist/lib/reflection-synthesizer.d.ts +27 -0
- package/dist/lib/reflection-synthesizer.d.ts.map +1 -0
- package/dist/lib/reflection-synthesizer.js +149 -0
- package/dist/lib/reflection-synthesizer.js.map +1 -0
- package/dist/lib/retention.d.ts +105 -0
- package/dist/lib/retention.d.ts.map +1 -0
- package/dist/lib/retention.js +246 -0
- package/dist/lib/retention.js.map +1 -0
- package/dist/lib/sensitive-filter.d.ts +34 -0
- package/dist/lib/sensitive-filter.d.ts.map +1 -0
- package/dist/lib/sensitive-filter.js +344 -0
- package/dist/lib/sensitive-filter.js.map +1 -0
- package/dist/lib/session-observations.d.ts +59 -0
- package/dist/lib/session-observations.d.ts.map +1 -0
- package/dist/lib/session-observations.js +128 -0
- package/dist/lib/session-observations.js.map +1 -0
- package/dist/lib/session-summary.d.ts +65 -0
- package/dist/lib/session-summary.d.ts.map +1 -0
- package/dist/lib/session-summary.js +344 -0
- package/dist/lib/session-summary.js.map +1 -0
- package/dist/lib/similarity-worker.d.ts +7 -0
- package/dist/lib/similarity-worker.d.ts.map +1 -0
- package/dist/lib/similarity-worker.js +36 -0
- package/dist/lib/similarity-worker.js.map +1 -0
- package/dist/lib/skills.d.ts +78 -0
- package/dist/lib/skills.d.ts.map +1 -0
- package/dist/lib/skills.js +439 -0
- package/dist/lib/skills.js.map +1 -0
- package/dist/lib/skyll-client.d.ts +59 -0
- package/dist/lib/skyll-client.d.ts.map +1 -0
- package/dist/lib/skyll-client.js +257 -0
- package/dist/lib/skyll-client.js.map +1 -0
- package/dist/lib/storage/backends/interface.d.ts +383 -0
- package/dist/lib/storage/backends/interface.d.ts.map +1 -0
- package/dist/lib/storage/backends/interface.js +12 -0
- package/dist/lib/storage/backends/interface.js.map +1 -0
- package/dist/lib/storage/backends/postgresql.d.ts +454 -0
- package/dist/lib/storage/backends/postgresql.d.ts.map +1 -0
- package/dist/lib/storage/backends/postgresql.js +2528 -0
- package/dist/lib/storage/backends/postgresql.js.map +1 -0
- package/dist/lib/storage/benchmark.d.ts +16 -0
- package/dist/lib/storage/benchmark.d.ts.map +1 -0
- package/dist/lib/storage/benchmark.js +219 -0
- package/dist/lib/storage/benchmark.js.map +1 -0
- package/dist/lib/storage/dispatcher-export.d.ts +108 -0
- package/dist/lib/storage/dispatcher-export.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher-export.js +593 -0
- package/dist/lib/storage/dispatcher-export.js.map +1 -0
- package/dist/lib/storage/dispatcher.d.ts +468 -0
- package/dist/lib/storage/dispatcher.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher.js +1926 -0
- package/dist/lib/storage/dispatcher.js.map +1 -0
- package/dist/lib/storage/index.d.ts +481 -0
- package/dist/lib/storage/index.d.ts.map +1 -0
- package/dist/lib/storage/index.js +727 -0
- package/dist/lib/storage/index.js.map +1 -0
- package/dist/lib/storage/migration/export-import.d.ts +133 -0
- package/dist/lib/storage/migration/export-import.d.ts.map +1 -0
- package/dist/lib/storage/migration/export-import.js +264 -0
- package/dist/lib/storage/migration/export-import.js.map +1 -0
- package/dist/lib/storage/types.d.ts +313 -0
- package/dist/lib/storage/types.d.ts.map +1 -0
- package/dist/lib/storage/types.js +30 -0
- package/dist/lib/storage/types.js.map +1 -0
- package/dist/lib/storage/vector/interface.d.ts +89 -0
- package/dist/lib/storage/vector/interface.d.ts.map +1 -0
- package/dist/lib/storage/vector/interface.js +10 -0
- package/dist/lib/storage/vector/interface.js.map +1 -0
- package/dist/lib/storage/vector/qdrant.d.ts +221 -0
- package/dist/lib/storage/vector/qdrant.d.ts.map +1 -0
- package/dist/lib/storage/vector/qdrant.js +880 -0
- package/dist/lib/storage/vector/qdrant.js.map +1 -0
- package/dist/lib/supersession.d.ts +26 -0
- package/dist/lib/supersession.d.ts.map +1 -0
- package/dist/lib/supersession.js +97 -0
- package/dist/lib/supersession.js.map +1 -0
- package/dist/lib/temporal.d.ts +140 -0
- package/dist/lib/temporal.d.ts.map +1 -0
- package/dist/lib/temporal.js +303 -0
- package/dist/lib/temporal.js.map +1 -0
- package/dist/lib/token-budget.d.ts +79 -0
- package/dist/lib/token-budget.d.ts.map +1 -0
- package/dist/lib/token-budget.js +146 -0
- package/dist/lib/token-budget.js.map +1 -0
- package/dist/lib/token-counter.d.ts +27 -0
- package/dist/lib/token-counter.d.ts.map +1 -0
- package/dist/lib/token-counter.js +52 -0
- package/dist/lib/token-counter.js.map +1 -0
- package/dist/lib/tree-sitter/chunker-ts.d.ts +24 -0
- package/dist/lib/tree-sitter/chunker-ts.d.ts.map +1 -0
- package/dist/lib/tree-sitter/chunker-ts.js +206 -0
- package/dist/lib/tree-sitter/chunker-ts.js.map +1 -0
- package/dist/lib/tree-sitter/extractor.d.ts +43 -0
- package/dist/lib/tree-sitter/extractor.d.ts.map +1 -0
- package/dist/lib/tree-sitter/extractor.js +297 -0
- package/dist/lib/tree-sitter/extractor.js.map +1 -0
- package/dist/lib/tree-sitter/index.d.ts +13 -0
- package/dist/lib/tree-sitter/index.d.ts.map +1 -0
- package/dist/lib/tree-sitter/index.js +14 -0
- package/dist/lib/tree-sitter/index.js.map +1 -0
- package/dist/lib/tree-sitter/parser.d.ts +70 -0
- package/dist/lib/tree-sitter/parser.d.ts.map +1 -0
- package/dist/lib/tree-sitter/parser.js +354 -0
- package/dist/lib/tree-sitter/parser.js.map +1 -0
- package/dist/lib/tree-sitter/public.d.ts +28 -0
- package/dist/lib/tree-sitter/public.d.ts.map +1 -0
- package/dist/lib/tree-sitter/public.js +50 -0
- package/dist/lib/tree-sitter/public.js.map +1 -0
- package/dist/lib/tree-sitter/queries.d.ts +28 -0
- package/dist/lib/tree-sitter/queries.d.ts.map +1 -0
- package/dist/lib/tree-sitter/queries.js +383 -0
- package/dist/lib/tree-sitter/queries.js.map +1 -0
- package/dist/lib/tree-sitter/types.d.ts +69 -0
- package/dist/lib/tree-sitter/types.d.ts.map +1 -0
- package/dist/lib/tree-sitter/types.js +131 -0
- package/dist/lib/tree-sitter/types.js.map +1 -0
- package/dist/lib/working-memory-pipeline.d.ts +118 -0
- package/dist/lib/working-memory-pipeline.d.ts.map +1 -0
- package/dist/lib/working-memory-pipeline.js +344 -0
- package/dist/lib/working-memory-pipeline.js.map +1 -0
- package/dist/mcp/helpers.d.ts +44 -0
- package/dist/mcp/helpers.d.ts.map +1 -0
- package/dist/mcp/helpers.js +244 -0
- package/dist/mcp/helpers.js.map +1 -0
- package/dist/mcp/index.d.ts +10 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +15 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/resources.d.ts +12 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +136 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts +22 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +131 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/config.d.ts +10 -0
- package/dist/mcp/tools/config.d.ts.map +1 -0
- package/dist/mcp/tools/config.js +236 -0
- package/dist/mcp/tools/config.js.map +1 -0
- package/dist/mcp/tools/dead-end.d.ts +9 -0
- package/dist/mcp/tools/dead-end.d.ts.map +1 -0
- package/dist/mcp/tools/dead-end.js +137 -0
- package/dist/mcp/tools/dead-end.js.map +1 -0
- package/dist/mcp/tools/debug.d.ts +9 -0
- package/dist/mcp/tools/debug.d.ts.map +1 -0
- package/dist/mcp/tools/debug.js +387 -0
- package/dist/mcp/tools/debug.js.map +1 -0
- package/dist/mcp/tools/graph.d.ts +9 -0
- package/dist/mcp/tools/graph.d.ts.map +1 -0
- package/dist/mcp/tools/graph.js +337 -0
- package/dist/mcp/tools/graph.js.map +1 -0
- package/dist/mcp/tools/indexing.d.ts +12 -0
- package/dist/mcp/tools/indexing.d.ts.map +1 -0
- package/dist/mcp/tools/indexing.js +289 -0
- package/dist/mcp/tools/indexing.js.map +1 -0
- package/dist/mcp/tools/memory.d.ts +14 -0
- package/dist/mcp/tools/memory.d.ts.map +1 -0
- package/dist/mcp/tools/memory.js +1170 -0
- package/dist/mcp/tools/memory.js.map +1 -0
- package/dist/mcp/tools/prd.d.ts +12 -0
- package/dist/mcp/tools/prd.d.ts.map +1 -0
- package/dist/mcp/tools/prd.js +276 -0
- package/dist/mcp/tools/prd.js.map +1 -0
- package/dist/mcp/tools/search.d.ts +9 -0
- package/dist/mcp/tools/search.d.ts.map +1 -0
- package/dist/mcp/tools/search.js +279 -0
- package/dist/mcp/tools/search.js.map +1 -0
- package/dist/mcp/tools/status.d.ts +10 -0
- package/dist/mcp/tools/status.d.ts.map +1 -0
- package/dist/mcp/tools/status.js +296 -0
- package/dist/mcp/tools/status.js.map +1 -0
- package/dist/mcp/tools/web-fetch.d.ts +10 -0
- package/dist/mcp/tools/web-fetch.d.ts.map +1 -0
- package/dist/mcp/tools/web-fetch.js +107 -0
- package/dist/mcp/tools/web-fetch.js.map +1 -0
- package/dist/mcp/tools/web-search.d.ts +14 -0
- package/dist/mcp/tools/web-search.d.ts.map +1 -0
- package/dist/mcp/tools/web-search.js +427 -0
- package/dist/mcp/tools/web-search.js.map +1 -0
- package/dist/mcp/types.d.ts +16 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +5 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/mcp-server.d.ts +9 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +9 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/prompts/analyze.d.ts +21 -0
- package/dist/prompts/analyze.d.ts.map +1 -0
- package/dist/prompts/analyze.js +27 -0
- package/dist/prompts/analyze.js.map +1 -0
- package/dist/prompts/briefing.d.ts +27 -0
- package/dist/prompts/briefing.d.ts.map +1 -0
- package/dist/prompts/briefing.js +123 -0
- package/dist/prompts/briefing.js.map +1 -0
- package/dist/prompts/chat.d.ts +8 -0
- package/dist/prompts/chat.d.ts.map +1 -0
- package/dist/prompts/chat.js +39 -0
- package/dist/prompts/chat.js.map +1 -0
- package/dist/prompts/daemon.d.ts +16 -0
- package/dist/prompts/daemon.d.ts.map +1 -0
- package/dist/prompts/daemon.js +46 -0
- package/dist/prompts/daemon.js.map +1 -0
- package/dist/prompts/extraction.d.ts +13 -0
- package/dist/prompts/extraction.d.ts.map +1 -0
- package/dist/prompts/extraction.js +93 -0
- package/dist/prompts/extraction.js.map +1 -0
- package/dist/prompts/index.d.ts +17 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +27 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/memory.d.ts +11 -0
- package/dist/prompts/memory.d.ts.map +1 -0
- package/dist/prompts/memory.js +23 -0
- package/dist/prompts/memory.js.map +1 -0
- package/dist/prompts/onboarding.d.ts +16 -0
- package/dist/prompts/onboarding.d.ts.map +1 -0
- package/dist/prompts/onboarding.js +183 -0
- package/dist/prompts/onboarding.js.map +1 -0
- package/dist/prompts/prd.d.ts +12 -0
- package/dist/prompts/prd.d.ts.map +1 -0
- package/dist/prompts/prd.js +211 -0
- package/dist/prompts/prd.js.map +1 -0
- package/dist/prompts/quality.d.ts +11 -0
- package/dist/prompts/quality.d.ts.map +1 -0
- package/dist/prompts/quality.js +11 -0
- package/dist/prompts/quality.js.map +1 -0
- package/dist/prompts/skills.d.ts +16 -0
- package/dist/prompts/skills.d.ts.map +1 -0
- package/dist/prompts/skills.js +30 -0
- package/dist/prompts/skills.js.map +1 -0
- package/hooks/succ-post-tool.cjs +227 -0
- package/hooks/succ-pre-tool.cjs +312 -0
- package/hooks/succ-session-end.cjs +85 -0
- package/hooks/succ-session-start.cjs +618 -0
- package/hooks/succ-stop-reflection.cjs +87 -0
- package/hooks/succ-user-prompt.cjs +220 -0
- package/package.json +128 -0
|
@@ -0,0 +1,832 @@
|
|
|
1
|
+
import * as sqliteVec from 'sqlite-vec';
|
|
2
|
+
import { getConfig, getLLMTaskConfig } from '../config.js';
|
|
3
|
+
import { logWarn } from '../fault-logger.js';
|
|
4
|
+
import { getModelDimension } from '../embeddings.js';
|
|
5
|
+
// Flag to track if sqlite-vec is available
|
|
6
|
+
export let sqliteVecAvailable = true;
|
|
7
|
+
/**
|
|
8
|
+
* Load sqlite-vec extension into database
|
|
9
|
+
*/
|
|
10
|
+
export function loadSqliteVec(database) {
|
|
11
|
+
if (!sqliteVecAvailable)
|
|
12
|
+
return false;
|
|
13
|
+
try {
|
|
14
|
+
sqliteVec.load(database);
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
sqliteVecAvailable = false;
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
// Valid memory types
|
|
23
|
+
export const MEMORY_TYPES = [
|
|
24
|
+
'observation',
|
|
25
|
+
'decision',
|
|
26
|
+
'learning',
|
|
27
|
+
'error',
|
|
28
|
+
'pattern',
|
|
29
|
+
'dead_end',
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* Initialize local database schema
|
|
33
|
+
*/
|
|
34
|
+
export function initDb(database) {
|
|
35
|
+
database.exec(`
|
|
36
|
+
CREATE TABLE IF NOT EXISTS documents (
|
|
37
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
38
|
+
file_path TEXT NOT NULL,
|
|
39
|
+
chunk_index INTEGER NOT NULL,
|
|
40
|
+
content TEXT NOT NULL,
|
|
41
|
+
start_line INTEGER NOT NULL,
|
|
42
|
+
end_line INTEGER NOT NULL,
|
|
43
|
+
embedding BLOB NOT NULL,
|
|
44
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
45
|
+
updated_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
46
|
+
UNIQUE(file_path, chunk_index)
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
CREATE INDEX IF NOT EXISTS idx_documents_file_path ON documents(file_path);
|
|
50
|
+
|
|
51
|
+
CREATE TABLE IF NOT EXISTS metadata (
|
|
52
|
+
key TEXT PRIMARY KEY,
|
|
53
|
+
value TEXT NOT NULL
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
CREATE TABLE IF NOT EXISTS file_hashes (
|
|
57
|
+
file_path TEXT PRIMARY KEY,
|
|
58
|
+
content_hash TEXT NOT NULL,
|
|
59
|
+
indexed_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
CREATE TABLE IF NOT EXISTS memories (
|
|
63
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
64
|
+
content TEXT NOT NULL,
|
|
65
|
+
tags TEXT,
|
|
66
|
+
source TEXT,
|
|
67
|
+
type TEXT DEFAULT 'observation',
|
|
68
|
+
quality_score REAL,
|
|
69
|
+
quality_factors TEXT,
|
|
70
|
+
embedding BLOB NOT NULL,
|
|
71
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
CREATE INDEX IF NOT EXISTS idx_memories_created_at ON memories(created_at);
|
|
75
|
+
CREATE INDEX IF NOT EXISTS idx_memories_quality ON memories(quality_score);
|
|
76
|
+
|
|
77
|
+
CREATE TABLE IF NOT EXISTS memory_links (
|
|
78
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
79
|
+
source_id INTEGER NOT NULL,
|
|
80
|
+
target_id INTEGER NOT NULL,
|
|
81
|
+
relation TEXT NOT NULL DEFAULT 'related',
|
|
82
|
+
weight REAL DEFAULT 1.0,
|
|
83
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
84
|
+
FOREIGN KEY (source_id) REFERENCES memories(id) ON DELETE CASCADE,
|
|
85
|
+
FOREIGN KEY (target_id) REFERENCES memories(id) ON DELETE CASCADE,
|
|
86
|
+
UNIQUE(source_id, target_id, relation)
|
|
87
|
+
);
|
|
88
|
+
|
|
89
|
+
CREATE INDEX IF NOT EXISTS idx_memory_links_source ON memory_links(source_id);
|
|
90
|
+
CREATE INDEX IF NOT EXISTS idx_memory_links_target ON memory_links(target_id);
|
|
91
|
+
|
|
92
|
+
CREATE TABLE IF NOT EXISTS token_frequencies (
|
|
93
|
+
token TEXT PRIMARY KEY,
|
|
94
|
+
frequency INTEGER NOT NULL DEFAULT 1,
|
|
95
|
+
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
CREATE INDEX IF NOT EXISTS idx_token_freq ON token_frequencies(frequency DESC);
|
|
99
|
+
|
|
100
|
+
CREATE TABLE IF NOT EXISTS token_stats (
|
|
101
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
102
|
+
event_type TEXT NOT NULL,
|
|
103
|
+
query TEXT,
|
|
104
|
+
returned_tokens INTEGER NOT NULL DEFAULT 0,
|
|
105
|
+
full_source_tokens INTEGER NOT NULL DEFAULT 0,
|
|
106
|
+
savings_tokens INTEGER NOT NULL DEFAULT 0,
|
|
107
|
+
files_count INTEGER,
|
|
108
|
+
chunks_count INTEGER,
|
|
109
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
CREATE INDEX IF NOT EXISTS idx_token_stats_type ON token_stats(event_type);
|
|
113
|
+
CREATE INDEX IF NOT EXISTS idx_token_stats_created ON token_stats(created_at);
|
|
114
|
+
|
|
115
|
+
CREATE TABLE IF NOT EXISTS skills (
|
|
116
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
117
|
+
name TEXT UNIQUE NOT NULL,
|
|
118
|
+
description TEXT NOT NULL,
|
|
119
|
+
source TEXT NOT NULL,
|
|
120
|
+
path TEXT,
|
|
121
|
+
content TEXT,
|
|
122
|
+
embedding BLOB,
|
|
123
|
+
skyll_id TEXT,
|
|
124
|
+
usage_count INTEGER DEFAULT 0,
|
|
125
|
+
last_used TEXT,
|
|
126
|
+
cached_at TEXT,
|
|
127
|
+
cache_expires TEXT,
|
|
128
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
129
|
+
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
CREATE INDEX IF NOT EXISTS idx_skills_name ON skills(name);
|
|
133
|
+
CREATE INDEX IF NOT EXISTS idx_skills_source ON skills(source);
|
|
134
|
+
`);
|
|
135
|
+
// Migration: add type column if missing (for existing databases)
|
|
136
|
+
try {
|
|
137
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN type TEXT DEFAULT 'observation'`).run();
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// Column already exists, ignore
|
|
141
|
+
}
|
|
142
|
+
// Create index on type after migration
|
|
143
|
+
try {
|
|
144
|
+
database.prepare(`CREATE INDEX IF NOT EXISTS idx_memories_type ON memories(type)`).run();
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// Index may already exist
|
|
148
|
+
}
|
|
149
|
+
// Migration: add quality_score and quality_factors columns
|
|
150
|
+
try {
|
|
151
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN quality_score REAL`).run();
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
// Column already exists, ignore
|
|
155
|
+
}
|
|
156
|
+
try {
|
|
157
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN quality_factors TEXT`).run();
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
// Column already exists, ignore
|
|
161
|
+
}
|
|
162
|
+
try {
|
|
163
|
+
database
|
|
164
|
+
.prepare(`CREATE INDEX IF NOT EXISTS idx_memories_quality ON memories(quality_score)`)
|
|
165
|
+
.run();
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
// Index may already exist
|
|
169
|
+
}
|
|
170
|
+
// Migration: add access_count and last_accessed columns for retention decay
|
|
171
|
+
try {
|
|
172
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN access_count REAL DEFAULT 0`).run();
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
// Column already exists, ignore
|
|
176
|
+
}
|
|
177
|
+
try {
|
|
178
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN last_accessed TEXT`).run();
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
// Column already exists, ignore
|
|
182
|
+
}
|
|
183
|
+
// Migration: add valid_from and valid_until columns for temporal awareness
|
|
184
|
+
try {
|
|
185
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN valid_from TEXT`).run();
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// Column already exists, ignore
|
|
189
|
+
}
|
|
190
|
+
try {
|
|
191
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN valid_until TEXT`).run();
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
// Column already exists, ignore
|
|
195
|
+
}
|
|
196
|
+
// Migration: add temporal fields to memory_links
|
|
197
|
+
try {
|
|
198
|
+
database.prepare(`ALTER TABLE memory_links ADD COLUMN valid_from TEXT`).run();
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
// Column already exists, ignore
|
|
202
|
+
}
|
|
203
|
+
try {
|
|
204
|
+
database.prepare(`ALTER TABLE memory_links ADD COLUMN valid_until TEXT`).run();
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
// Column already exists, ignore
|
|
208
|
+
}
|
|
209
|
+
// Migration: add model and estimated_cost columns to token_stats
|
|
210
|
+
try {
|
|
211
|
+
database.prepare(`ALTER TABLE token_stats ADD COLUMN model TEXT`).run();
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
// Column already exists, ignore
|
|
215
|
+
}
|
|
216
|
+
try {
|
|
217
|
+
database.prepare(`ALTER TABLE token_stats ADD COLUMN estimated_cost REAL DEFAULT 0`).run();
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
// Column already exists, ignore
|
|
221
|
+
}
|
|
222
|
+
// Migration: add project_id column to skills table for project scoping
|
|
223
|
+
try {
|
|
224
|
+
database.prepare(`ALTER TABLE skills ADD COLUMN project_id TEXT`).run();
|
|
225
|
+
// Note: SQLite doesn't support dropping and recreating unique constraints easily.
|
|
226
|
+
// For existing databases, the old UNIQUE(name) constraint remains.
|
|
227
|
+
// The code handles this by using ON CONFLICT with name only for SQLite.
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
// Column already exists, ignore
|
|
231
|
+
}
|
|
232
|
+
try {
|
|
233
|
+
database
|
|
234
|
+
.prepare(`CREATE INDEX IF NOT EXISTS idx_skills_project_id ON skills(project_id)`)
|
|
235
|
+
.run();
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
// Index already exists, ignore
|
|
239
|
+
}
|
|
240
|
+
// Migration: add invalidated_by column for soft-delete during consolidation
|
|
241
|
+
try {
|
|
242
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN invalidated_by INTEGER`).run();
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
// Column already exists, ignore
|
|
246
|
+
}
|
|
247
|
+
try {
|
|
248
|
+
database
|
|
249
|
+
.prepare(`CREATE INDEX IF NOT EXISTS idx_memories_invalidated_by ON memories(invalidated_by)`)
|
|
250
|
+
.run();
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
// Index already exists, ignore
|
|
254
|
+
}
|
|
255
|
+
// Migration: add correction_count and is_invariant columns for working memory pins
|
|
256
|
+
try {
|
|
257
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN correction_count INTEGER DEFAULT 0`).run();
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
// Column already exists, ignore
|
|
261
|
+
}
|
|
262
|
+
try {
|
|
263
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN is_invariant INTEGER DEFAULT 0`).run();
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
// Column already exists, ignore
|
|
267
|
+
}
|
|
268
|
+
try {
|
|
269
|
+
database
|
|
270
|
+
.prepare(`CREATE INDEX IF NOT EXISTS idx_memories_pinned ON memories(correction_count, is_invariant)`)
|
|
271
|
+
.run();
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
// Index already exists, ignore
|
|
275
|
+
}
|
|
276
|
+
// Migration: add priority_score column for working memory ranking
|
|
277
|
+
try {
|
|
278
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN priority_score REAL DEFAULT NULL`).run();
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
// Column already exists, ignore
|
|
282
|
+
}
|
|
283
|
+
try {
|
|
284
|
+
database
|
|
285
|
+
.prepare(`CREATE INDEX IF NOT EXISTS idx_memories_priority ON memories(priority_score DESC)`)
|
|
286
|
+
.run();
|
|
287
|
+
}
|
|
288
|
+
catch {
|
|
289
|
+
// Index already exists, ignore
|
|
290
|
+
}
|
|
291
|
+
// Migration: add AST metadata columns to documents table (tree-sitter integration)
|
|
292
|
+
for (const col of ['symbol_name TEXT', 'symbol_type TEXT', 'signature TEXT']) {
|
|
293
|
+
try {
|
|
294
|
+
database.prepare(`ALTER TABLE documents ADD COLUMN ${col}`).run();
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
// Column already exists, ignore
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
try {
|
|
301
|
+
database
|
|
302
|
+
.prepare(`CREATE INDEX IF NOT EXISTS idx_documents_symbol_type ON documents(symbol_type)`)
|
|
303
|
+
.run();
|
|
304
|
+
}
|
|
305
|
+
catch {
|
|
306
|
+
// Index already exists, ignore
|
|
307
|
+
}
|
|
308
|
+
try {
|
|
309
|
+
database
|
|
310
|
+
.prepare(`CREATE INDEX IF NOT EXISTS idx_documents_symbol_name ON documents(symbol_name)`)
|
|
311
|
+
.run();
|
|
312
|
+
}
|
|
313
|
+
catch {
|
|
314
|
+
// Index already exists, ignore
|
|
315
|
+
}
|
|
316
|
+
// Migration: add performance indexes for common query patterns
|
|
317
|
+
try {
|
|
318
|
+
database.prepare(`CREATE INDEX IF NOT EXISTS idx_memories_source ON memories(source)`).run();
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
// Index already exists, ignore
|
|
322
|
+
}
|
|
323
|
+
try {
|
|
324
|
+
database
|
|
325
|
+
.prepare(`CREATE INDEX IF NOT EXISTS idx_memories_valid_from ON memories(valid_from)`)
|
|
326
|
+
.run();
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
// Index already exists, ignore
|
|
330
|
+
}
|
|
331
|
+
try {
|
|
332
|
+
database
|
|
333
|
+
.prepare(`CREATE INDEX IF NOT EXISTS idx_memories_valid_until ON memories(valid_until)`)
|
|
334
|
+
.run();
|
|
335
|
+
}
|
|
336
|
+
catch {
|
|
337
|
+
// Index already exists, ignore
|
|
338
|
+
}
|
|
339
|
+
try {
|
|
340
|
+
database
|
|
341
|
+
.prepare(`CREATE INDEX IF NOT EXISTS idx_documents_updated_at ON documents(updated_at)`)
|
|
342
|
+
.run();
|
|
343
|
+
}
|
|
344
|
+
catch {
|
|
345
|
+
// Index already exists, ignore
|
|
346
|
+
}
|
|
347
|
+
// Migration: create learning_deltas table for session progress tracking
|
|
348
|
+
database.exec(`
|
|
349
|
+
CREATE TABLE IF NOT EXISTS learning_deltas (
|
|
350
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
351
|
+
timestamp TEXT NOT NULL,
|
|
352
|
+
source TEXT NOT NULL,
|
|
353
|
+
memories_before INTEGER NOT NULL DEFAULT 0,
|
|
354
|
+
memories_after INTEGER NOT NULL DEFAULT 0,
|
|
355
|
+
new_memories INTEGER NOT NULL DEFAULT 0,
|
|
356
|
+
types_added TEXT,
|
|
357
|
+
avg_quality REAL,
|
|
358
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
359
|
+
);
|
|
360
|
+
|
|
361
|
+
CREATE INDEX IF NOT EXISTS idx_learning_deltas_timestamp ON learning_deltas(timestamp);
|
|
362
|
+
CREATE INDEX IF NOT EXISTS idx_learning_deltas_source ON learning_deltas(source);
|
|
363
|
+
`);
|
|
364
|
+
// Migration: add llm_enriched column to memory_links (for LLM relation extraction)
|
|
365
|
+
try {
|
|
366
|
+
database.prepare(`ALTER TABLE memory_links ADD COLUMN llm_enriched INTEGER DEFAULT 0`).run();
|
|
367
|
+
}
|
|
368
|
+
catch {
|
|
369
|
+
// Column already exists, ignore
|
|
370
|
+
}
|
|
371
|
+
// Migration: create memory_centrality cache table
|
|
372
|
+
database.exec(`
|
|
373
|
+
CREATE TABLE IF NOT EXISTS memory_centrality (
|
|
374
|
+
memory_id INTEGER PRIMARY KEY,
|
|
375
|
+
degree REAL DEFAULT 0,
|
|
376
|
+
normalized_degree REAL DEFAULT 0,
|
|
377
|
+
updated_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
378
|
+
);
|
|
379
|
+
`);
|
|
380
|
+
// Web search history table
|
|
381
|
+
database.exec(`
|
|
382
|
+
CREATE TABLE IF NOT EXISTS web_search_history (
|
|
383
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
384
|
+
tool_name TEXT NOT NULL,
|
|
385
|
+
model TEXT NOT NULL,
|
|
386
|
+
query TEXT NOT NULL,
|
|
387
|
+
prompt_tokens INTEGER NOT NULL DEFAULT 0,
|
|
388
|
+
completion_tokens INTEGER NOT NULL DEFAULT 0,
|
|
389
|
+
estimated_cost_usd REAL NOT NULL DEFAULT 0,
|
|
390
|
+
citations_count INTEGER NOT NULL DEFAULT 0,
|
|
391
|
+
has_reasoning INTEGER NOT NULL DEFAULT 0,
|
|
392
|
+
response_length_chars INTEGER NOT NULL DEFAULT 0,
|
|
393
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
394
|
+
);
|
|
395
|
+
|
|
396
|
+
CREATE INDEX IF NOT EXISTS idx_wsh_created ON web_search_history(created_at);
|
|
397
|
+
CREATE INDEX IF NOT EXISTS idx_wsh_tool ON web_search_history(tool_name);
|
|
398
|
+
`);
|
|
399
|
+
// Check if embedding model changed - warn user if reindex needed
|
|
400
|
+
checkModelCompatibility(database);
|
|
401
|
+
// Migration: create sqlite-vec virtual tables for fast vector search
|
|
402
|
+
initVecTables(database);
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Check if the embedding model has changed since last index.
|
|
406
|
+
* If so, warn the user that they need to reindex.
|
|
407
|
+
*/
|
|
408
|
+
function checkModelCompatibility(database) {
|
|
409
|
+
getConfig();
|
|
410
|
+
const currentModel = getLLMTaskConfig('embeddings').model;
|
|
411
|
+
// Get stored model
|
|
412
|
+
const stored = database
|
|
413
|
+
.prepare('SELECT value FROM metadata WHERE key = ?')
|
|
414
|
+
.get('embedding_model');
|
|
415
|
+
if (stored && stored.value !== currentModel) {
|
|
416
|
+
const currentDim = getModelDimension(currentModel);
|
|
417
|
+
const storedDim = getModelDimension(stored.value);
|
|
418
|
+
// Different dimensions = incompatible, must reindex
|
|
419
|
+
if (currentDim && storedDim && currentDim !== storedDim) {
|
|
420
|
+
logWarn('db-schema', `Embedding model changed: ${stored.value} (dim=${storedDim}) -> ${currentModel} (dim=${currentDim})`);
|
|
421
|
+
logWarn('db-schema', 'Dimensions are incompatible — existing embeddings will not work correctly');
|
|
422
|
+
logWarn('db-schema', 'Run "succ reindex" to regenerate all embeddings with the new model');
|
|
423
|
+
}
|
|
424
|
+
else if (stored.value !== currentModel) {
|
|
425
|
+
// Same dimension but different model - still should reindex for accuracy
|
|
426
|
+
logWarn('db-schema', `Embedding model changed: ${stored.value} -> ${currentModel} (same dimension=${currentDim})`);
|
|
427
|
+
logWarn('db-schema', 'Run "succ reindex" to regenerate embeddings for best accuracy');
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
// Store current model
|
|
431
|
+
database
|
|
432
|
+
.prepare('INSERT OR REPLACE INTO metadata (key, value) VALUES (?, ?)')
|
|
433
|
+
.run('embedding_model', currentModel);
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Initialize sqlite-vec virtual tables for fast KNN search.
|
|
437
|
+
* Creates vec_memories and vec_documents tables, migrates existing data.
|
|
438
|
+
*
|
|
439
|
+
* Note: sqlite-vec doesn't support custom primary keys well, so we use a mapping table
|
|
440
|
+
* that maps vec rowid -> memory/document id.
|
|
441
|
+
*/
|
|
442
|
+
export function initVecTables(database) {
|
|
443
|
+
if (!sqliteVecAvailable)
|
|
444
|
+
return;
|
|
445
|
+
const configDims = getConfig().llm?.embeddings?.dimensions;
|
|
446
|
+
const dims = configDims ?? getModelDimension(getLLMTaskConfig('embeddings').model) ?? 384;
|
|
447
|
+
// Check if vec tables already exist
|
|
448
|
+
const vecMemoriesExists = database
|
|
449
|
+
.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='vec_memories'")
|
|
450
|
+
.get();
|
|
451
|
+
// Check persistent migration flag to avoid re-running migrations
|
|
452
|
+
const vecMemoriesMigrated = database
|
|
453
|
+
.prepare("SELECT value FROM metadata WHERE key = 'vec_memories_migrated_dims'")
|
|
454
|
+
.get();
|
|
455
|
+
// Check if migration is needed:
|
|
456
|
+
// 1. Table empty but memories exist (initial migration)
|
|
457
|
+
// 2. Dimensions changed since last migration
|
|
458
|
+
let needsMemoriesMigration = false;
|
|
459
|
+
let memoriesDimChange = false; // true = old embeddings are wrong dims, skip re-insertion
|
|
460
|
+
if (vecMemoriesExists) {
|
|
461
|
+
if (vecMemoriesMigrated && Number(vecMemoriesMigrated.value) !== dims) {
|
|
462
|
+
// Dimensions changed — recreate vec table (old embeddings are incompatible)
|
|
463
|
+
logWarn('sqlite-vec', `vec_memories dimension change: ${vecMemoriesMigrated.value} -> ${dims}. Recreating. Re-indexing required.`);
|
|
464
|
+
needsMemoriesMigration = true;
|
|
465
|
+
memoriesDimChange = true;
|
|
466
|
+
}
|
|
467
|
+
else if (!vecMemoriesMigrated) {
|
|
468
|
+
try {
|
|
469
|
+
const vecCount = database.prepare('SELECT COUNT(*) as cnt FROM vec_memories').get();
|
|
470
|
+
const memCount = database
|
|
471
|
+
.prepare('SELECT COUNT(*) as cnt FROM memories WHERE embedding IS NOT NULL')
|
|
472
|
+
.get();
|
|
473
|
+
needsMemoriesMigration = vecCount.cnt === 0 && memCount.cnt > 0;
|
|
474
|
+
}
|
|
475
|
+
catch {
|
|
476
|
+
needsMemoriesMigration = false;
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
if (!vecMemoriesExists || needsMemoriesMigration) {
|
|
481
|
+
try {
|
|
482
|
+
if (needsMemoriesMigration) {
|
|
483
|
+
// Drop old table with wrong schema
|
|
484
|
+
database.prepare('DROP TABLE IF EXISTS vec_memories').run();
|
|
485
|
+
database.prepare('DROP TABLE IF EXISTS vec_memories_map').run();
|
|
486
|
+
}
|
|
487
|
+
// Create vec0 virtual table for memories (simple schema, rowid auto-assigned)
|
|
488
|
+
database
|
|
489
|
+
.prepare(`
|
|
490
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS vec_memories USING vec0(
|
|
491
|
+
embedding float[${dims}] distance_metric=cosine
|
|
492
|
+
)
|
|
493
|
+
`)
|
|
494
|
+
.run();
|
|
495
|
+
// Create mapping table: vec rowid -> memory id
|
|
496
|
+
database
|
|
497
|
+
.prepare(`
|
|
498
|
+
CREATE TABLE IF NOT EXISTS vec_memories_map (
|
|
499
|
+
vec_rowid INTEGER PRIMARY KEY,
|
|
500
|
+
memory_id INTEGER NOT NULL UNIQUE
|
|
501
|
+
)
|
|
502
|
+
`)
|
|
503
|
+
.run();
|
|
504
|
+
// Migrate existing embeddings (only if same dimensions — skip on dim change)
|
|
505
|
+
if (!memoriesDimChange) {
|
|
506
|
+
const memories = database
|
|
507
|
+
.prepare('SELECT id, embedding FROM memories WHERE embedding IS NOT NULL ORDER BY id')
|
|
508
|
+
.all();
|
|
509
|
+
if (memories.length > 0) {
|
|
510
|
+
const insertVec = database.prepare('INSERT INTO vec_memories(embedding) VALUES (?)');
|
|
511
|
+
const insertMap = database.prepare('INSERT INTO vec_memories_map(vec_rowid, memory_id) VALUES (?, ?)');
|
|
512
|
+
const migrate = database.transaction(() => {
|
|
513
|
+
for (const mem of memories) {
|
|
514
|
+
const result = insertVec.run(mem.embedding);
|
|
515
|
+
insertMap.run(result.lastInsertRowid, mem.id);
|
|
516
|
+
}
|
|
517
|
+
});
|
|
518
|
+
migrate();
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
// Store persistent migration flag to prevent re-running
|
|
522
|
+
database
|
|
523
|
+
.prepare("INSERT OR REPLACE INTO metadata (key, value) VALUES ('vec_memories_migrated_dims', ?)")
|
|
524
|
+
.run(String(dims));
|
|
525
|
+
}
|
|
526
|
+
catch {
|
|
527
|
+
// sqlite-vec may not support this syntax or other error
|
|
528
|
+
sqliteVecAvailable = false;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
const vecDocumentsExists = database
|
|
532
|
+
.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='vec_documents'")
|
|
533
|
+
.get();
|
|
534
|
+
// Check persistent migration flag for documents
|
|
535
|
+
const vecDocumentsMigrated = database
|
|
536
|
+
.prepare("SELECT value FROM metadata WHERE key = 'vec_documents_migrated_dims'")
|
|
537
|
+
.get();
|
|
538
|
+
// Check if migration is needed for documents:
|
|
539
|
+
// 1. Table empty but documents exist (initial migration)
|
|
540
|
+
// 2. Dimensions changed since last migration
|
|
541
|
+
let needsDocumentsMigration = false;
|
|
542
|
+
let documentsDimChange = false;
|
|
543
|
+
if (vecDocumentsExists && sqliteVecAvailable) {
|
|
544
|
+
if (vecDocumentsMigrated && Number(vecDocumentsMigrated.value) !== dims) {
|
|
545
|
+
logWarn('sqlite-vec', `vec_documents dimension change: ${vecDocumentsMigrated.value} -> ${dims}. Recreating. Re-indexing required.`);
|
|
546
|
+
needsDocumentsMigration = true;
|
|
547
|
+
documentsDimChange = true;
|
|
548
|
+
}
|
|
549
|
+
else if (!vecDocumentsMigrated) {
|
|
550
|
+
try {
|
|
551
|
+
const vecCount = database.prepare('SELECT COUNT(*) as cnt FROM vec_documents').get();
|
|
552
|
+
const docCount = database
|
|
553
|
+
.prepare('SELECT COUNT(*) as cnt FROM documents WHERE embedding IS NOT NULL')
|
|
554
|
+
.get();
|
|
555
|
+
needsDocumentsMigration = vecCount.cnt === 0 && docCount.cnt > 0;
|
|
556
|
+
}
|
|
557
|
+
catch {
|
|
558
|
+
needsDocumentsMigration = false;
|
|
559
|
+
}
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
if ((!vecDocumentsExists || needsDocumentsMigration) && sqliteVecAvailable) {
|
|
563
|
+
try {
|
|
564
|
+
if (needsDocumentsMigration) {
|
|
565
|
+
database.prepare('DROP TABLE IF EXISTS vec_documents').run();
|
|
566
|
+
database.prepare('DROP TABLE IF EXISTS vec_documents_map').run();
|
|
567
|
+
}
|
|
568
|
+
// Create vec0 virtual table for documents
|
|
569
|
+
database
|
|
570
|
+
.prepare(`
|
|
571
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS vec_documents USING vec0(
|
|
572
|
+
embedding float[${dims}] distance_metric=cosine
|
|
573
|
+
)
|
|
574
|
+
`)
|
|
575
|
+
.run();
|
|
576
|
+
// Create mapping table: vec rowid -> document id
|
|
577
|
+
database
|
|
578
|
+
.prepare(`
|
|
579
|
+
CREATE TABLE IF NOT EXISTS vec_documents_map (
|
|
580
|
+
vec_rowid INTEGER PRIMARY KEY,
|
|
581
|
+
doc_id INTEGER NOT NULL UNIQUE
|
|
582
|
+
)
|
|
583
|
+
`)
|
|
584
|
+
.run();
|
|
585
|
+
// Migrate existing embeddings (only if same dimensions — skip on dim change)
|
|
586
|
+
if (!documentsDimChange) {
|
|
587
|
+
const docs = database
|
|
588
|
+
.prepare('SELECT id, embedding FROM documents WHERE embedding IS NOT NULL ORDER BY id')
|
|
589
|
+
.all();
|
|
590
|
+
if (docs.length > 0) {
|
|
591
|
+
const insertVec = database.prepare('INSERT INTO vec_documents(embedding) VALUES (?)');
|
|
592
|
+
const insertMap = database.prepare('INSERT INTO vec_documents_map(vec_rowid, doc_id) VALUES (?, ?)');
|
|
593
|
+
const migrate = database.transaction(() => {
|
|
594
|
+
for (const doc of docs) {
|
|
595
|
+
const result = insertVec.run(doc.embedding);
|
|
596
|
+
insertMap.run(result.lastInsertRowid, doc.id);
|
|
597
|
+
}
|
|
598
|
+
});
|
|
599
|
+
migrate();
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
// Store persistent migration flag to prevent re-running
|
|
603
|
+
database
|
|
604
|
+
.prepare("INSERT OR REPLACE INTO metadata (key, value) VALUES ('vec_documents_migrated_dims', ?)")
|
|
605
|
+
.run(String(dims));
|
|
606
|
+
}
|
|
607
|
+
catch {
|
|
608
|
+
// Ignore errors for documents table
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
/**
|
|
613
|
+
* Initialize global database schema
|
|
614
|
+
*/
|
|
615
|
+
export function initGlobalDb(database) {
|
|
616
|
+
// Global DB has memories table (shared across projects) and metadata for BM25 index
|
|
617
|
+
database.exec(`
|
|
618
|
+
CREATE TABLE IF NOT EXISTS memories (
|
|
619
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
620
|
+
content TEXT NOT NULL,
|
|
621
|
+
tags TEXT,
|
|
622
|
+
source TEXT,
|
|
623
|
+
project TEXT,
|
|
624
|
+
type TEXT DEFAULT 'observation',
|
|
625
|
+
quality_score REAL,
|
|
626
|
+
quality_factors TEXT,
|
|
627
|
+
embedding BLOB NOT NULL,
|
|
628
|
+
created_at TEXT DEFAULT CURRENT_TIMESTAMP
|
|
629
|
+
);
|
|
630
|
+
|
|
631
|
+
CREATE TABLE IF NOT EXISTS metadata (
|
|
632
|
+
key TEXT PRIMARY KEY,
|
|
633
|
+
value TEXT NOT NULL
|
|
634
|
+
);
|
|
635
|
+
|
|
636
|
+
CREATE INDEX IF NOT EXISTS idx_global_memories_created_at ON memories(created_at);
|
|
637
|
+
CREATE INDEX IF NOT EXISTS idx_global_memories_project ON memories(project);
|
|
638
|
+
CREATE INDEX IF NOT EXISTS idx_global_memories_quality ON memories(quality_score);
|
|
639
|
+
`);
|
|
640
|
+
// Migration: add type column if missing
|
|
641
|
+
try {
|
|
642
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN type TEXT DEFAULT 'observation'`).run();
|
|
643
|
+
}
|
|
644
|
+
catch {
|
|
645
|
+
// Column already exists, ignore
|
|
646
|
+
}
|
|
647
|
+
// Create index on type after migration
|
|
648
|
+
try {
|
|
649
|
+
database.prepare(`CREATE INDEX IF NOT EXISTS idx_global_memories_type ON memories(type)`).run();
|
|
650
|
+
}
|
|
651
|
+
catch {
|
|
652
|
+
// Index may already exist
|
|
653
|
+
}
|
|
654
|
+
// Migration: add quality_score and quality_factors columns
|
|
655
|
+
try {
|
|
656
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN quality_score REAL`).run();
|
|
657
|
+
}
|
|
658
|
+
catch {
|
|
659
|
+
// Column already exists, ignore
|
|
660
|
+
}
|
|
661
|
+
try {
|
|
662
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN quality_factors TEXT`).run();
|
|
663
|
+
}
|
|
664
|
+
catch {
|
|
665
|
+
// Column already exists, ignore
|
|
666
|
+
}
|
|
667
|
+
try {
|
|
668
|
+
database
|
|
669
|
+
.prepare(`CREATE INDEX IF NOT EXISTS idx_global_memories_quality ON memories(quality_score)`)
|
|
670
|
+
.run();
|
|
671
|
+
}
|
|
672
|
+
catch {
|
|
673
|
+
// Index may already exist
|
|
674
|
+
}
|
|
675
|
+
// Migration: add access_count and last_accessed columns for retention decay
|
|
676
|
+
try {
|
|
677
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN access_count REAL DEFAULT 0`).run();
|
|
678
|
+
}
|
|
679
|
+
catch {
|
|
680
|
+
// Column already exists, ignore
|
|
681
|
+
}
|
|
682
|
+
try {
|
|
683
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN last_accessed TEXT`).run();
|
|
684
|
+
}
|
|
685
|
+
catch {
|
|
686
|
+
// Column already exists, ignore
|
|
687
|
+
}
|
|
688
|
+
// Migration: add valid_from and valid_until columns for temporal awareness
|
|
689
|
+
try {
|
|
690
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN valid_from TEXT`).run();
|
|
691
|
+
}
|
|
692
|
+
catch {
|
|
693
|
+
// Column already exists, ignore
|
|
694
|
+
}
|
|
695
|
+
try {
|
|
696
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN valid_until TEXT`).run();
|
|
697
|
+
}
|
|
698
|
+
catch {
|
|
699
|
+
// Column already exists, ignore
|
|
700
|
+
}
|
|
701
|
+
// Migration: add invalidated_by column for soft-delete during consolidation
|
|
702
|
+
try {
|
|
703
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN invalidated_by INTEGER`).run();
|
|
704
|
+
}
|
|
705
|
+
catch {
|
|
706
|
+
// Column already exists, ignore
|
|
707
|
+
}
|
|
708
|
+
try {
|
|
709
|
+
database
|
|
710
|
+
.prepare(`CREATE INDEX IF NOT EXISTS idx_global_memories_invalidated_by ON memories(invalidated_by)`)
|
|
711
|
+
.run();
|
|
712
|
+
}
|
|
713
|
+
catch {
|
|
714
|
+
// Index already exists, ignore
|
|
715
|
+
}
|
|
716
|
+
// Migration: add correction_count and is_invariant columns for working memory pins
|
|
717
|
+
try {
|
|
718
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN correction_count INTEGER DEFAULT 0`).run();
|
|
719
|
+
}
|
|
720
|
+
catch {
|
|
721
|
+
// Column already exists, ignore
|
|
722
|
+
}
|
|
723
|
+
try {
|
|
724
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN is_invariant INTEGER DEFAULT 0`).run();
|
|
725
|
+
}
|
|
726
|
+
catch {
|
|
727
|
+
// Column already exists, ignore
|
|
728
|
+
}
|
|
729
|
+
try {
|
|
730
|
+
database
|
|
731
|
+
.prepare(`CREATE INDEX IF NOT EXISTS idx_memories_pinned ON memories(correction_count, is_invariant)`)
|
|
732
|
+
.run();
|
|
733
|
+
}
|
|
734
|
+
catch {
|
|
735
|
+
// Index already exists, ignore
|
|
736
|
+
}
|
|
737
|
+
// Migration: add priority_score column for working memory ranking
|
|
738
|
+
try {
|
|
739
|
+
database.prepare(`ALTER TABLE memories ADD COLUMN priority_score REAL DEFAULT NULL`).run();
|
|
740
|
+
}
|
|
741
|
+
catch {
|
|
742
|
+
// Column already exists, ignore
|
|
743
|
+
}
|
|
744
|
+
try {
|
|
745
|
+
database
|
|
746
|
+
.prepare(`CREATE INDEX IF NOT EXISTS idx_memories_priority ON memories(priority_score DESC)`)
|
|
747
|
+
.run();
|
|
748
|
+
}
|
|
749
|
+
catch {
|
|
750
|
+
// Index already exists, ignore
|
|
751
|
+
}
|
|
752
|
+
// Migration: create sqlite-vec virtual table for global memories
|
|
753
|
+
initGlobalVecTable(database);
|
|
754
|
+
}
|
|
755
|
+
/**
|
|
756
|
+
* Initialize sqlite-vec virtual table for global memories
|
|
757
|
+
*/
|
|
758
|
+
export function initGlobalVecTable(database) {
|
|
759
|
+
if (!sqliteVecAvailable)
|
|
760
|
+
return;
|
|
761
|
+
const configDims = getConfig().llm?.embeddings?.dimensions;
|
|
762
|
+
const dims = configDims ?? getModelDimension(getLLMTaskConfig('embeddings').model) ?? 384;
|
|
763
|
+
const vecMemoriesExists = database
|
|
764
|
+
.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='vec_memories'")
|
|
765
|
+
.get();
|
|
766
|
+
// Check persistent migration flag
|
|
767
|
+
const vecMigrated = database
|
|
768
|
+
.prepare("SELECT value FROM metadata WHERE key = 'vec_memories_migrated_dims'")
|
|
769
|
+
.get();
|
|
770
|
+
// Check if migration is needed — skip if persistent flag exists
|
|
771
|
+
let needsMigration = false;
|
|
772
|
+
if (vecMemoriesExists && !vecMigrated) {
|
|
773
|
+
try {
|
|
774
|
+
const vecCount = database.prepare('SELECT COUNT(*) as cnt FROM vec_memories').get();
|
|
775
|
+
const memCount = database
|
|
776
|
+
.prepare('SELECT COUNT(*) as cnt FROM memories WHERE embedding IS NOT NULL')
|
|
777
|
+
.get();
|
|
778
|
+
needsMigration = vecCount.cnt === 0 && memCount.cnt > 0;
|
|
779
|
+
}
|
|
780
|
+
catch {
|
|
781
|
+
needsMigration = false;
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
if (!vecMemoriesExists || needsMigration) {
|
|
785
|
+
try {
|
|
786
|
+
if (needsMigration) {
|
|
787
|
+
database.prepare('DROP TABLE IF EXISTS vec_memories').run();
|
|
788
|
+
database.prepare('DROP TABLE IF EXISTS vec_memories_map').run();
|
|
789
|
+
}
|
|
790
|
+
// Create vec0 virtual table (simple schema)
|
|
791
|
+
database
|
|
792
|
+
.prepare(`
|
|
793
|
+
CREATE VIRTUAL TABLE IF NOT EXISTS vec_memories USING vec0(
|
|
794
|
+
embedding float[${dims}] distance_metric=cosine
|
|
795
|
+
)
|
|
796
|
+
`)
|
|
797
|
+
.run();
|
|
798
|
+
// Create mapping table
|
|
799
|
+
database
|
|
800
|
+
.prepare(`
|
|
801
|
+
CREATE TABLE IF NOT EXISTS vec_memories_map (
|
|
802
|
+
vec_rowid INTEGER PRIMARY KEY,
|
|
803
|
+
memory_id INTEGER NOT NULL UNIQUE
|
|
804
|
+
)
|
|
805
|
+
`)
|
|
806
|
+
.run();
|
|
807
|
+
// Migrate existing embeddings
|
|
808
|
+
const memories = database
|
|
809
|
+
.prepare('SELECT id, embedding FROM memories WHERE embedding IS NOT NULL ORDER BY id')
|
|
810
|
+
.all();
|
|
811
|
+
if (memories.length > 0) {
|
|
812
|
+
const insertVec = database.prepare('INSERT INTO vec_memories(embedding) VALUES (?)');
|
|
813
|
+
const insertMap = database.prepare('INSERT INTO vec_memories_map(vec_rowid, memory_id) VALUES (?, ?)');
|
|
814
|
+
const migrate = database.transaction(() => {
|
|
815
|
+
for (const mem of memories) {
|
|
816
|
+
const result = insertVec.run(mem.embedding);
|
|
817
|
+
insertMap.run(result.lastInsertRowid, mem.id);
|
|
818
|
+
}
|
|
819
|
+
});
|
|
820
|
+
migrate();
|
|
821
|
+
}
|
|
822
|
+
// Store persistent migration flag
|
|
823
|
+
database
|
|
824
|
+
.prepare("INSERT OR REPLACE INTO metadata (key, value) VALUES ('vec_memories_migrated_dims', ?)")
|
|
825
|
+
.run(String(dims));
|
|
826
|
+
}
|
|
827
|
+
catch {
|
|
828
|
+
// sqlite-vec may not be available for global db
|
|
829
|
+
}
|
|
830
|
+
}
|
|
831
|
+
}
|
|
832
|
+
//# sourceMappingURL=schema.js.map
|