@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,702 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI-Readiness Score
|
|
3
|
+
*
|
|
4
|
+
* Measures how "ready" a project is for AI collaboration.
|
|
5
|
+
*
|
|
6
|
+
* Metrics (Total: 100%):
|
|
7
|
+
* - Brain Vault: 20% - CLAUDE.md exists, folder structure
|
|
8
|
+
* - Memory Coverage: 20% - Memories vs project size
|
|
9
|
+
* - Code Index: 15% - % of source files indexed
|
|
10
|
+
* - Soul Document: 10% - soul.md exists and complete
|
|
11
|
+
* - Hooks Active: 10% - session-start/end/user-prompt/post-tool/stop configured
|
|
12
|
+
* - Agents Configured: 5% - Custom Claude Code agents in .claude/agents/
|
|
13
|
+
* - Doc Index: 10% - Markdown docs indexed
|
|
14
|
+
* - Quality Average: 5% - Average memory quality score
|
|
15
|
+
* - Index Freshness: 5% - How up-to-date the index is (stale/deleted files)
|
|
16
|
+
*/
|
|
17
|
+
import fs from 'fs';
|
|
18
|
+
import path from 'path';
|
|
19
|
+
import { getSuccDir, getProjectRoot } from './config.js';
|
|
20
|
+
import { getMemoryStats, getCodeFileCount, getDocsFileCount, getAverageMemoryQuality, getStaleFileCount, } from './storage/index.js';
|
|
21
|
+
// Metric weights (must sum to 100)
|
|
22
|
+
export const METRIC_WEIGHTS = {
|
|
23
|
+
brain_vault: 20,
|
|
24
|
+
memory_coverage: 20,
|
|
25
|
+
code_index: 15,
|
|
26
|
+
soul_document: 10,
|
|
27
|
+
hooks_active: 10,
|
|
28
|
+
agents_configured: 5,
|
|
29
|
+
doc_index: 10,
|
|
30
|
+
quality_average: 5,
|
|
31
|
+
index_freshness: 5,
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Calculate brain vault score (20 points max)
|
|
35
|
+
* - CLAUDE.md exists: 10 points
|
|
36
|
+
* - brain/ folder structure: 5 points
|
|
37
|
+
* - Number of docs (5+ = 5 points)
|
|
38
|
+
*/
|
|
39
|
+
export function calculateBrainVaultScore() {
|
|
40
|
+
const succDir = getSuccDir();
|
|
41
|
+
const brainDir = path.join(succDir, 'brain');
|
|
42
|
+
const maxScore = METRIC_WEIGHTS.brain_vault;
|
|
43
|
+
let score = 0;
|
|
44
|
+
const details = [];
|
|
45
|
+
const suggestions = [];
|
|
46
|
+
// Check CLAUDE.md
|
|
47
|
+
const claudeMdPaths = [path.join(succDir, 'CLAUDE.md'), path.join(getProjectRoot(), 'CLAUDE.md')];
|
|
48
|
+
const claudeMdExists = claudeMdPaths.some((p) => fs.existsSync(p));
|
|
49
|
+
if (claudeMdExists) {
|
|
50
|
+
score += 10;
|
|
51
|
+
details.push('CLAUDE.md exists');
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
suggestions.push('Create CLAUDE.md with project-specific instructions');
|
|
55
|
+
}
|
|
56
|
+
// Check brain folder structure
|
|
57
|
+
if (fs.existsSync(brainDir)) {
|
|
58
|
+
score += 5;
|
|
59
|
+
details.push('brain/ folder exists');
|
|
60
|
+
// Count markdown files in brain (5+ docs = 5 points)
|
|
61
|
+
const mdFiles = countMarkdownFiles(brainDir);
|
|
62
|
+
if (mdFiles >= 5) {
|
|
63
|
+
score += 5;
|
|
64
|
+
details.push(`${mdFiles} docs in brain/`);
|
|
65
|
+
}
|
|
66
|
+
else if (mdFiles >= 1) {
|
|
67
|
+
details.push(`${mdFiles} docs in brain/`);
|
|
68
|
+
suggestions.push('Add more documentation to .succ/brain/');
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
suggestions.push('Add documentation files to .succ/brain/');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
suggestions.push('Run `succ init` to create brain vault structure');
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
name: 'brain_vault',
|
|
79
|
+
label: 'Brain Vault',
|
|
80
|
+
score,
|
|
81
|
+
maxScore,
|
|
82
|
+
details: details.join(', ') || 'Not configured',
|
|
83
|
+
suggestions: suggestions.length > 0 ? suggestions : undefined,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Calculate memory coverage score (20 points max)
|
|
88
|
+
* Based on number of memories relative to project age/size
|
|
89
|
+
* - 0 memories: 0 points
|
|
90
|
+
* - 1-10 memories: 5 points
|
|
91
|
+
* - 11-50 memories: 10 points
|
|
92
|
+
* - 51-100 memories: 15 points
|
|
93
|
+
* - 100+ memories: 20 points
|
|
94
|
+
*/
|
|
95
|
+
export async function calculateMemoryCoverageScore() {
|
|
96
|
+
const maxScore = METRIC_WEIGHTS.memory_coverage;
|
|
97
|
+
try {
|
|
98
|
+
const memStats = await getMemoryStats();
|
|
99
|
+
const total = memStats.total_memories;
|
|
100
|
+
let score = 0;
|
|
101
|
+
if (total >= 100)
|
|
102
|
+
score = 20;
|
|
103
|
+
else if (total >= 51)
|
|
104
|
+
score = 15;
|
|
105
|
+
else if (total >= 11)
|
|
106
|
+
score = 10;
|
|
107
|
+
else if (total >= 1)
|
|
108
|
+
score = 5;
|
|
109
|
+
const suggestions = [];
|
|
110
|
+
if (total < 10) {
|
|
111
|
+
suggestions.push('Use succ_remember to save learnings and decisions');
|
|
112
|
+
}
|
|
113
|
+
if (total < 50) {
|
|
114
|
+
suggestions.push('Continue building memory knowledge base');
|
|
115
|
+
}
|
|
116
|
+
return {
|
|
117
|
+
name: 'memory_coverage',
|
|
118
|
+
label: 'Memory Coverage',
|
|
119
|
+
score,
|
|
120
|
+
maxScore,
|
|
121
|
+
details: `${total} memories`,
|
|
122
|
+
suggestions: suggestions.length > 0 ? suggestions : undefined,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
return {
|
|
127
|
+
name: 'memory_coverage',
|
|
128
|
+
label: 'Memory Coverage',
|
|
129
|
+
score: 0,
|
|
130
|
+
maxScore,
|
|
131
|
+
details: 'No memories',
|
|
132
|
+
suggestions: ['Initialize succ and start saving memories'],
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Calculate code index score (15 points max)
|
|
138
|
+
* Based on % of source files indexed
|
|
139
|
+
* - 0%: 0 points
|
|
140
|
+
* - 1-25%: 4 points
|
|
141
|
+
* - 26-50%: 7 points
|
|
142
|
+
* - 51-75%: 11 points
|
|
143
|
+
* - 76-100%: 15 points
|
|
144
|
+
*/
|
|
145
|
+
export async function calculateCodeIndexScore() {
|
|
146
|
+
const maxScore = METRIC_WEIGHTS.code_index;
|
|
147
|
+
const projectRoot = getProjectRoot();
|
|
148
|
+
try {
|
|
149
|
+
// Count source files in project
|
|
150
|
+
const sourceExtensions = ['.ts', '.tsx', '.js', '.jsx', '.py', '.go', '.rs', '.java'];
|
|
151
|
+
const totalSourceFiles = countSourceFiles(projectRoot, sourceExtensions);
|
|
152
|
+
// Get indexed code files count via dispatcher
|
|
153
|
+
const indexedCount = await getCodeFileCount();
|
|
154
|
+
if (totalSourceFiles === 0) {
|
|
155
|
+
return {
|
|
156
|
+
name: 'code_index',
|
|
157
|
+
label: 'Code Index',
|
|
158
|
+
score: maxScore, // Full score if no source files
|
|
159
|
+
maxScore,
|
|
160
|
+
details: 'No source files to index',
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
const percentage = Math.round((indexedCount / totalSourceFiles) * 100);
|
|
164
|
+
let score = 0;
|
|
165
|
+
if (percentage >= 76)
|
|
166
|
+
score = 15;
|
|
167
|
+
else if (percentage >= 51)
|
|
168
|
+
score = 11;
|
|
169
|
+
else if (percentage >= 26)
|
|
170
|
+
score = 7;
|
|
171
|
+
else if (percentage >= 1)
|
|
172
|
+
score = 4;
|
|
173
|
+
const suggestions = [];
|
|
174
|
+
if (percentage < 50) {
|
|
175
|
+
suggestions.push('Run `succ index-code` to index source files');
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
name: 'code_index',
|
|
179
|
+
label: 'Code Index',
|
|
180
|
+
score,
|
|
181
|
+
maxScore,
|
|
182
|
+
details: `${percentage}% indexed (${indexedCount}/${totalSourceFiles} files)`,
|
|
183
|
+
suggestions: suggestions.length > 0 ? suggestions : undefined,
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return {
|
|
188
|
+
name: 'code_index',
|
|
189
|
+
label: 'Code Index',
|
|
190
|
+
score: 0,
|
|
191
|
+
maxScore,
|
|
192
|
+
details: 'Not indexed',
|
|
193
|
+
suggestions: ['Run `succ index-code` to index source files'],
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Calculate soul document score (10 points max)
|
|
199
|
+
* - soul.md exists: 5 points
|
|
200
|
+
* - soul.md has custom content (not just template): 5 points
|
|
201
|
+
*/
|
|
202
|
+
export function calculateSoulDocumentScore() {
|
|
203
|
+
const succDir = getSuccDir();
|
|
204
|
+
const maxScore = METRIC_WEIGHTS.soul_document;
|
|
205
|
+
const soulPaths = [
|
|
206
|
+
path.join(succDir, 'soul.md'),
|
|
207
|
+
path.join(succDir, 'SOUL.md'),
|
|
208
|
+
path.join(getProjectRoot(), 'soul.md'),
|
|
209
|
+
path.join(getProjectRoot(), 'SOUL.md'),
|
|
210
|
+
];
|
|
211
|
+
let soulPath = null;
|
|
212
|
+
for (const p of soulPaths) {
|
|
213
|
+
if (fs.existsSync(p)) {
|
|
214
|
+
soulPath = p;
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
if (!soulPath) {
|
|
219
|
+
return {
|
|
220
|
+
name: 'soul_document',
|
|
221
|
+
label: 'Soul Document',
|
|
222
|
+
score: 0,
|
|
223
|
+
maxScore,
|
|
224
|
+
details: 'Not found',
|
|
225
|
+
suggestions: ['Create soul.md to define your AI collaboration style'],
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
const content = fs.readFileSync(soulPath, 'utf8');
|
|
229
|
+
const hasCustomContent = checkSoulCustomization(content);
|
|
230
|
+
const score = hasCustomContent ? 10 : 5;
|
|
231
|
+
const details = hasCustomContent ? 'Complete' : 'Exists but incomplete';
|
|
232
|
+
return {
|
|
233
|
+
name: 'soul_document',
|
|
234
|
+
label: 'Soul Document',
|
|
235
|
+
score,
|
|
236
|
+
maxScore,
|
|
237
|
+
details,
|
|
238
|
+
suggestions: hasCustomContent
|
|
239
|
+
? undefined
|
|
240
|
+
: ['Customize your soul.md with personal preferences'],
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Calculate hooks active score (10 points max)
|
|
245
|
+
* Checks for all succ hooks:
|
|
246
|
+
* - session-start: 2 points (context injection)
|
|
247
|
+
* - session-end: 2 points (session handoff)
|
|
248
|
+
* - user-prompt: 2 points (prompt enhancement)
|
|
249
|
+
* - post-tool: 2 points (tool result processing)
|
|
250
|
+
* - stop-reflection: 2 points (end-of-session reflection)
|
|
251
|
+
*/
|
|
252
|
+
export function calculateHooksActiveScore() {
|
|
253
|
+
const succDir = getSuccDir();
|
|
254
|
+
const hooksDir = path.join(succDir, 'hooks');
|
|
255
|
+
const maxScore = METRIC_WEIGHTS.hooks_active;
|
|
256
|
+
let score = 0;
|
|
257
|
+
const details = [];
|
|
258
|
+
const suggestions = [];
|
|
259
|
+
// Define all hooks with their variants
|
|
260
|
+
const hookChecks = [
|
|
261
|
+
{
|
|
262
|
+
name: 'session-start',
|
|
263
|
+
paths: ['succ-session-start.cjs', 'session-start.cjs', 'session-start.js'],
|
|
264
|
+
points: 2,
|
|
265
|
+
suggestion: 'Add session-start hook for context injection',
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
name: 'session-end',
|
|
269
|
+
paths: ['succ-session-end.cjs', 'succ-idle-watcher.cjs', 'session-end.cjs', 'session-end.js'],
|
|
270
|
+
points: 2,
|
|
271
|
+
suggestion: 'Add session-end hook for session handoff',
|
|
272
|
+
},
|
|
273
|
+
{
|
|
274
|
+
name: 'user-prompt',
|
|
275
|
+
paths: ['succ-user-prompt.cjs', 'user-prompt.cjs', 'user-prompt.js'],
|
|
276
|
+
points: 2,
|
|
277
|
+
suggestion: 'Add user-prompt hook for prompt enhancement',
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
name: 'post-tool',
|
|
281
|
+
paths: ['succ-post-tool.cjs', 'post-tool.cjs', 'post-tool.js'],
|
|
282
|
+
points: 2,
|
|
283
|
+
suggestion: 'Add post-tool hook for tool result processing',
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
name: 'stop-reflection',
|
|
287
|
+
paths: ['succ-stop-reflection.cjs', 'stop-reflection.cjs', 'stop-reflection.js'],
|
|
288
|
+
points: 2,
|
|
289
|
+
suggestion: 'Add stop-reflection hook for end-of-session reflection',
|
|
290
|
+
},
|
|
291
|
+
];
|
|
292
|
+
for (const hook of hookChecks) {
|
|
293
|
+
const exists = hook.paths.some((p) => fs.existsSync(path.join(hooksDir, p)));
|
|
294
|
+
if (exists) {
|
|
295
|
+
score += hook.points;
|
|
296
|
+
details.push(hook.name);
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
suggestions.push(hook.suggestion);
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return {
|
|
303
|
+
name: 'hooks_active',
|
|
304
|
+
label: 'Hooks Active',
|
|
305
|
+
score,
|
|
306
|
+
maxScore,
|
|
307
|
+
details: details.length > 0 ? details.join(', ') : 'None configured',
|
|
308
|
+
suggestions: suggestions.length > 0 ? suggestions : undefined,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Calculate agents configured score (5 points max)
|
|
313
|
+
* Checks for custom Claude Code agents in .claude/agents/
|
|
314
|
+
* - 0 agents: 0 points
|
|
315
|
+
* - 1-3 agents: 1 point
|
|
316
|
+
* - 4-6 agents: 2 points
|
|
317
|
+
* - 7-9 agents: 3 points
|
|
318
|
+
* - 10+ agents: 5 points
|
|
319
|
+
*/
|
|
320
|
+
export function calculateAgentsConfiguredScore() {
|
|
321
|
+
const projectRoot = getProjectRoot();
|
|
322
|
+
const agentsDir = path.join(projectRoot, '.claude', 'agents');
|
|
323
|
+
const maxScore = METRIC_WEIGHTS.agents_configured;
|
|
324
|
+
if (!fs.existsSync(agentsDir)) {
|
|
325
|
+
return {
|
|
326
|
+
name: 'agents_configured',
|
|
327
|
+
label: 'Agents',
|
|
328
|
+
score: 0,
|
|
329
|
+
maxScore,
|
|
330
|
+
details: 'No agents directory',
|
|
331
|
+
suggestions: ['Create .claude/agents/ with custom subagents'],
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
// Count .md files in agents directory
|
|
335
|
+
let agentCount = 0;
|
|
336
|
+
try {
|
|
337
|
+
const files = fs.readdirSync(agentsDir);
|
|
338
|
+
agentCount = files.filter((f) => f.endsWith('.md')).length;
|
|
339
|
+
}
|
|
340
|
+
catch {
|
|
341
|
+
// Ignore errors
|
|
342
|
+
}
|
|
343
|
+
let score = 0;
|
|
344
|
+
if (agentCount >= 10)
|
|
345
|
+
score = 5;
|
|
346
|
+
else if (agentCount >= 7)
|
|
347
|
+
score = 3;
|
|
348
|
+
else if (agentCount >= 4)
|
|
349
|
+
score = 2;
|
|
350
|
+
else if (agentCount >= 1)
|
|
351
|
+
score = 1;
|
|
352
|
+
const suggestions = [];
|
|
353
|
+
if (agentCount < 10) {
|
|
354
|
+
suggestions.push('Add more custom agents to .claude/agents/ (10+ for full score)');
|
|
355
|
+
}
|
|
356
|
+
return {
|
|
357
|
+
name: 'agents_configured',
|
|
358
|
+
label: 'Agents',
|
|
359
|
+
score,
|
|
360
|
+
maxScore,
|
|
361
|
+
details: agentCount > 0 ? `${agentCount} agents` : 'No agents',
|
|
362
|
+
suggestions: suggestions.length > 0 ? suggestions : undefined,
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Calculate doc index score (10 points max)
|
|
367
|
+
* Based on % of markdown files in brain/ that are indexed
|
|
368
|
+
*/
|
|
369
|
+
export async function calculateDocIndexScore() {
|
|
370
|
+
const succDir = getSuccDir();
|
|
371
|
+
const brainDir = path.join(succDir, 'brain');
|
|
372
|
+
const maxScore = METRIC_WEIGHTS.doc_index;
|
|
373
|
+
if (!fs.existsSync(brainDir)) {
|
|
374
|
+
return {
|
|
375
|
+
name: 'doc_index',
|
|
376
|
+
label: 'Doc Index',
|
|
377
|
+
score: 0,
|
|
378
|
+
maxScore,
|
|
379
|
+
details: 'No brain/ folder',
|
|
380
|
+
suggestions: ['Run `succ init` to create brain vault'],
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
try {
|
|
384
|
+
// Count markdown files in brain
|
|
385
|
+
const totalMdFiles = countMarkdownFiles(brainDir);
|
|
386
|
+
if (totalMdFiles === 0) {
|
|
387
|
+
return {
|
|
388
|
+
name: 'doc_index',
|
|
389
|
+
label: 'Doc Index',
|
|
390
|
+
score: maxScore, // Full score if nothing to index
|
|
391
|
+
maxScore,
|
|
392
|
+
details: 'No docs to index',
|
|
393
|
+
};
|
|
394
|
+
}
|
|
395
|
+
// Get indexed doc files count via dispatcher
|
|
396
|
+
const indexedCount = await getDocsFileCount();
|
|
397
|
+
const percentage = Math.round((indexedCount / totalMdFiles) * 100);
|
|
398
|
+
let score = 0;
|
|
399
|
+
if (percentage >= 80)
|
|
400
|
+
score = 10;
|
|
401
|
+
else if (percentage >= 50)
|
|
402
|
+
score = 7;
|
|
403
|
+
else if (percentage >= 20)
|
|
404
|
+
score = 4;
|
|
405
|
+
else if (percentage >= 1)
|
|
406
|
+
score = 2;
|
|
407
|
+
const suggestions = [];
|
|
408
|
+
if (percentage < 80) {
|
|
409
|
+
suggestions.push('Run `succ index` to index remaining docs');
|
|
410
|
+
}
|
|
411
|
+
return {
|
|
412
|
+
name: 'doc_index',
|
|
413
|
+
label: 'Doc Index',
|
|
414
|
+
score,
|
|
415
|
+
maxScore,
|
|
416
|
+
details: `${indexedCount}/${totalMdFiles} files indexed`,
|
|
417
|
+
suggestions: suggestions.length > 0 ? suggestions : undefined,
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
catch {
|
|
421
|
+
return {
|
|
422
|
+
name: 'doc_index',
|
|
423
|
+
label: 'Doc Index',
|
|
424
|
+
score: 0,
|
|
425
|
+
maxScore,
|
|
426
|
+
details: 'Not indexed',
|
|
427
|
+
suggestions: ['Run `succ index` to index brain vault docs'],
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Calculate quality average score (5 points max)
|
|
433
|
+
* Based on average quality score of memories
|
|
434
|
+
* - No quality scores: 0 points
|
|
435
|
+
* - Avg < 0.3: 1 point
|
|
436
|
+
* - Avg 0.3-0.5: 2 points
|
|
437
|
+
* - Avg 0.5-0.7: 3 points
|
|
438
|
+
* - Avg 0.7-0.85: 4 points
|
|
439
|
+
* - Avg >= 0.85: 5 points
|
|
440
|
+
*/
|
|
441
|
+
export async function calculateQualityAverageScore() {
|
|
442
|
+
const maxScore = METRIC_WEIGHTS.quality_average;
|
|
443
|
+
try {
|
|
444
|
+
const result = await getAverageMemoryQuality();
|
|
445
|
+
if (!result.avg || result.count === 0) {
|
|
446
|
+
return {
|
|
447
|
+
name: 'quality_average',
|
|
448
|
+
label: 'Quality Average',
|
|
449
|
+
score: 0,
|
|
450
|
+
maxScore,
|
|
451
|
+
details: 'No quality scores',
|
|
452
|
+
suggestions: ['Enable quality scoring for memories'],
|
|
453
|
+
};
|
|
454
|
+
}
|
|
455
|
+
const avg = result.avg;
|
|
456
|
+
let score = 0;
|
|
457
|
+
if (avg >= 0.85)
|
|
458
|
+
score = 5;
|
|
459
|
+
else if (avg >= 0.7)
|
|
460
|
+
score = 4;
|
|
461
|
+
else if (avg >= 0.5)
|
|
462
|
+
score = 3;
|
|
463
|
+
else if (avg >= 0.3)
|
|
464
|
+
score = 2;
|
|
465
|
+
else
|
|
466
|
+
score = 1;
|
|
467
|
+
const suggestions = [];
|
|
468
|
+
if (avg < 0.5) {
|
|
469
|
+
suggestions.push('Focus on saving higher-quality memories');
|
|
470
|
+
}
|
|
471
|
+
return {
|
|
472
|
+
name: 'quality_average',
|
|
473
|
+
label: 'Quality Average',
|
|
474
|
+
score,
|
|
475
|
+
maxScore,
|
|
476
|
+
details: `${(avg * 100).toFixed(0)}% avg (${result.count} scored)`,
|
|
477
|
+
suggestions: suggestions.length > 0 ? suggestions : undefined,
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
catch {
|
|
481
|
+
return {
|
|
482
|
+
name: 'quality_average',
|
|
483
|
+
label: 'Quality Average',
|
|
484
|
+
score: 0,
|
|
485
|
+
maxScore,
|
|
486
|
+
details: 'Not available',
|
|
487
|
+
suggestions: ['Enable quality scoring'],
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* Calculate index freshness score (5 points max)
|
|
493
|
+
* Based on % of indexed files that are still current (not stale/deleted)
|
|
494
|
+
* - 100% fresh (0 stale/deleted): 5 points
|
|
495
|
+
* - 90-99% fresh: 4 points
|
|
496
|
+
* - 70-89% fresh: 3 points
|
|
497
|
+
* - 50-69% fresh: 2 points
|
|
498
|
+
* - 1-49% fresh: 1 point
|
|
499
|
+
* - No files indexed: 5 points (nothing to be stale)
|
|
500
|
+
*/
|
|
501
|
+
export async function calculateIndexFreshnessScore() {
|
|
502
|
+
const maxScore = METRIC_WEIGHTS.index_freshness;
|
|
503
|
+
const projectRoot = getProjectRoot();
|
|
504
|
+
try {
|
|
505
|
+
const freshness = await getStaleFileCount(projectRoot);
|
|
506
|
+
if (freshness.total === 0) {
|
|
507
|
+
return {
|
|
508
|
+
name: 'index_freshness',
|
|
509
|
+
label: 'Index Freshness',
|
|
510
|
+
score: maxScore,
|
|
511
|
+
maxScore,
|
|
512
|
+
details: 'No files indexed',
|
|
513
|
+
};
|
|
514
|
+
}
|
|
515
|
+
const outdated = freshness.stale + freshness.deleted;
|
|
516
|
+
const freshPercent = Math.round(((freshness.total - outdated) / freshness.total) * 100);
|
|
517
|
+
let score = 0;
|
|
518
|
+
if (freshPercent >= 100)
|
|
519
|
+
score = 5;
|
|
520
|
+
else if (freshPercent >= 90)
|
|
521
|
+
score = 4;
|
|
522
|
+
else if (freshPercent >= 70)
|
|
523
|
+
score = 3;
|
|
524
|
+
else if (freshPercent >= 50)
|
|
525
|
+
score = 2;
|
|
526
|
+
else
|
|
527
|
+
score = 1;
|
|
528
|
+
const details = [`${freshPercent}% fresh`];
|
|
529
|
+
if (freshness.stale > 0)
|
|
530
|
+
details.push(`${freshness.stale} stale`);
|
|
531
|
+
if (freshness.deleted > 0)
|
|
532
|
+
details.push(`${freshness.deleted} deleted`);
|
|
533
|
+
const suggestions = [];
|
|
534
|
+
if (outdated > 0) {
|
|
535
|
+
suggestions.push('Run `succ reindex` to refresh stale/deleted entries');
|
|
536
|
+
}
|
|
537
|
+
return {
|
|
538
|
+
name: 'index_freshness',
|
|
539
|
+
label: 'Index Freshness',
|
|
540
|
+
score,
|
|
541
|
+
maxScore,
|
|
542
|
+
details: details.join(', '),
|
|
543
|
+
suggestions: suggestions.length > 0 ? suggestions : undefined,
|
|
544
|
+
};
|
|
545
|
+
}
|
|
546
|
+
catch {
|
|
547
|
+
return {
|
|
548
|
+
name: 'index_freshness',
|
|
549
|
+
label: 'Index Freshness',
|
|
550
|
+
score: 0,
|
|
551
|
+
maxScore,
|
|
552
|
+
details: 'Not available',
|
|
553
|
+
suggestions: ['Run `succ reindex` to check index health'],
|
|
554
|
+
};
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
/**
|
|
558
|
+
* Calculate full AI-Readiness Score
|
|
559
|
+
*/
|
|
560
|
+
export async function calculateAIReadinessScore() {
|
|
561
|
+
const metrics = [
|
|
562
|
+
calculateBrainVaultScore(),
|
|
563
|
+
await calculateMemoryCoverageScore(),
|
|
564
|
+
await calculateCodeIndexScore(),
|
|
565
|
+
calculateSoulDocumentScore(),
|
|
566
|
+
calculateHooksActiveScore(),
|
|
567
|
+
calculateAgentsConfiguredScore(),
|
|
568
|
+
await calculateDocIndexScore(),
|
|
569
|
+
await calculateQualityAverageScore(),
|
|
570
|
+
await calculateIndexFreshnessScore(),
|
|
571
|
+
];
|
|
572
|
+
const totalScore = metrics.reduce((sum, m) => sum + m.score, 0);
|
|
573
|
+
const maxScore = 100;
|
|
574
|
+
// Calculate stars (1-5)
|
|
575
|
+
let stars = 1;
|
|
576
|
+
if (totalScore >= 90)
|
|
577
|
+
stars = 5;
|
|
578
|
+
else if (totalScore >= 75)
|
|
579
|
+
stars = 4;
|
|
580
|
+
else if (totalScore >= 50)
|
|
581
|
+
stars = 3;
|
|
582
|
+
else if (totalScore >= 25)
|
|
583
|
+
stars = 2;
|
|
584
|
+
// Collect all suggestions, prioritized by impact
|
|
585
|
+
const allSuggestions = [];
|
|
586
|
+
const metricsByMissingPoints = [...metrics].sort((a, b) => b.maxScore - b.score - (a.maxScore - a.score));
|
|
587
|
+
for (const metric of metricsByMissingPoints) {
|
|
588
|
+
if (metric.suggestions) {
|
|
589
|
+
allSuggestions.push(...metric.suggestions);
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
// Dedupe and limit suggestions
|
|
593
|
+
const uniqueSuggestions = [...new Set(allSuggestions)].slice(0, 5);
|
|
594
|
+
return {
|
|
595
|
+
totalScore,
|
|
596
|
+
maxScore,
|
|
597
|
+
stars,
|
|
598
|
+
metrics,
|
|
599
|
+
suggestions: uniqueSuggestions,
|
|
600
|
+
};
|
|
601
|
+
}
|
|
602
|
+
/**
|
|
603
|
+
* Format score for display
|
|
604
|
+
*/
|
|
605
|
+
export function formatAIReadinessScore(result) {
|
|
606
|
+
const lines = [];
|
|
607
|
+
// Header with stars
|
|
608
|
+
const starDisplay = '\u2B50'.repeat(result.stars);
|
|
609
|
+
lines.push(`AI-Readiness Score: ${result.totalScore}/${result.maxScore} ${starDisplay}`);
|
|
610
|
+
lines.push('');
|
|
611
|
+
// Metrics breakdown
|
|
612
|
+
for (const metric of result.metrics) {
|
|
613
|
+
const check = metric.score === metric.maxScore ? '\u2713' : ' ';
|
|
614
|
+
const scoreStr = `${metric.score}/${metric.maxScore}`.padStart(5);
|
|
615
|
+
const label = metric.label.padEnd(16);
|
|
616
|
+
lines.push(` ${label} ${scoreStr} ${check} ${metric.details}`);
|
|
617
|
+
}
|
|
618
|
+
// Suggestions
|
|
619
|
+
if (result.suggestions.length > 0) {
|
|
620
|
+
lines.push('');
|
|
621
|
+
lines.push('Suggestions:');
|
|
622
|
+
for (const suggestion of result.suggestions) {
|
|
623
|
+
lines.push(` - ${suggestion}`);
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
return lines.join('\n');
|
|
627
|
+
}
|
|
628
|
+
// Helper functions
|
|
629
|
+
function countMarkdownFiles(dir) {
|
|
630
|
+
let count = 0;
|
|
631
|
+
try {
|
|
632
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
633
|
+
for (const entry of entries) {
|
|
634
|
+
const fullPath = path.join(dir, entry.name);
|
|
635
|
+
if (entry.isDirectory() && !entry.name.startsWith('.')) {
|
|
636
|
+
count += countMarkdownFiles(fullPath);
|
|
637
|
+
}
|
|
638
|
+
else if (entry.isFile() && entry.name.endsWith('.md')) {
|
|
639
|
+
count++;
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
catch {
|
|
644
|
+
// Ignore errors
|
|
645
|
+
}
|
|
646
|
+
return count;
|
|
647
|
+
}
|
|
648
|
+
function countSourceFiles(dir, extensions) {
|
|
649
|
+
let count = 0;
|
|
650
|
+
// Directories to skip
|
|
651
|
+
const skipDirs = [
|
|
652
|
+
'node_modules',
|
|
653
|
+
'.git',
|
|
654
|
+
'dist',
|
|
655
|
+
'build',
|
|
656
|
+
'.succ',
|
|
657
|
+
'.claude',
|
|
658
|
+
'vendor',
|
|
659
|
+
'__pycache__',
|
|
660
|
+
];
|
|
661
|
+
try {
|
|
662
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
663
|
+
for (const entry of entries) {
|
|
664
|
+
if (entry.isDirectory() && !skipDirs.includes(entry.name) && !entry.name.startsWith('.')) {
|
|
665
|
+
count += countSourceFiles(path.join(dir, entry.name), extensions);
|
|
666
|
+
}
|
|
667
|
+
else if (entry.isFile()) {
|
|
668
|
+
const ext = path.extname(entry.name).toLowerCase();
|
|
669
|
+
if (extensions.includes(ext)) {
|
|
670
|
+
count++;
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
catch {
|
|
676
|
+
// Ignore errors
|
|
677
|
+
}
|
|
678
|
+
return count;
|
|
679
|
+
}
|
|
680
|
+
function checkSoulCustomization(content) {
|
|
681
|
+
// Check if soul.md has been customized beyond the template
|
|
682
|
+
// Template markers that indicate it's still a template
|
|
683
|
+
const templateMarkers = [
|
|
684
|
+
'_Add your preferences here',
|
|
685
|
+
'Preferred frameworks:',
|
|
686
|
+
'Code style:',
|
|
687
|
+
'Testing approach:',
|
|
688
|
+
'Communication language:',
|
|
689
|
+
];
|
|
690
|
+
// Check if all template markers are still present (means not customized)
|
|
691
|
+
const hasAllMarkers = templateMarkers.every((marker) => content.includes(marker));
|
|
692
|
+
// Check if there's substantial custom content
|
|
693
|
+
const lines = content.split('\n').filter((line) => line.trim().length > 0);
|
|
694
|
+
const hasSubstantialContent = lines.length > 30;
|
|
695
|
+
// Check for custom sections (not in default template)
|
|
696
|
+
const hasCustomSections = content.includes('## My Preferences') ||
|
|
697
|
+
content.includes('## About Me') ||
|
|
698
|
+
content.includes('## Code Style') ||
|
|
699
|
+
(content.includes('Preferred frameworks:') && !!content.match(/Preferred frameworks:\s*\S+/));
|
|
700
|
+
return !hasAllMarkers || hasSubstantialContent || hasCustomSections;
|
|
701
|
+
}
|
|
702
|
+
//# sourceMappingURL=ai-readiness.js.map
|