@jokerized/getresearchdone 0.4.1
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/.claude-plugin/plugin.json +103 -0
- package/README.md +211 -0
- package/agents/grd-baseline-assessor.md +684 -0
- package/agents/grd-code-reviewer.md +300 -0
- package/agents/grd-codebase-mapper.md +355 -0
- package/agents/grd-critique-agent.md +119 -0
- package/agents/grd-debugger.md +519 -0
- package/agents/grd-deep-diver.md +737 -0
- package/agents/grd-eval-planner.md +913 -0
- package/agents/grd-eval-reporter.md +717 -0
- package/agents/grd-executor.md +683 -0
- package/agents/grd-feasibility-analyst.md +624 -0
- package/agents/grd-integration-checker.md +367 -0
- package/agents/grd-knowledge-miner.md +81 -0
- package/agents/grd-migrator.md +88 -0
- package/agents/grd-phase-researcher.md +697 -0
- package/agents/grd-plan-checker.md +443 -0
- package/agents/grd-planner.md +1532 -0
- package/agents/grd-product-owner.md +562 -0
- package/agents/grd-project-researcher.md +513 -0
- package/agents/grd-research-synthesizer.md +273 -0
- package/agents/grd-roadmapper.md +798 -0
- package/agents/grd-surveyor.md +566 -0
- package/agents/grd-verifier.md +893 -0
- package/bin/gd.js +4 -0
- package/bin/gd.ts +227 -0
- package/bin/grd-manifest.js +4 -0
- package/bin/grd-manifest.ts +286 -0
- package/bin/grd-mcp-server.js +4 -0
- package/bin/grd-mcp-server.ts +124 -0
- package/bin/grd-tools.js +4 -0
- package/bin/grd-tools.ts +2471 -0
- package/bin/postinstall.js +4 -0
- package/bin/postinstall.ts +80 -0
- package/commands/add-phase.md +123 -0
- package/commands/add-todo.md +87 -0
- package/commands/assess-baseline.md +289 -0
- package/commands/autopilot.md +100 -0
- package/commands/autoplan.md +55 -0
- package/commands/check-todos.md +87 -0
- package/commands/compare-methods.md +262 -0
- package/commands/complete-milestone.md +225 -0
- package/commands/debug.md +372 -0
- package/commands/deep-dive.md +288 -0
- package/commands/discover.md +281 -0
- package/commands/discuss-phase.md +188 -0
- package/commands/discuss.md +55 -0
- package/commands/eval-report.md +310 -0
- package/commands/evolve.md +79 -0
- package/commands/execute-phase.md +1017 -0
- package/commands/feasibility.md +292 -0
- package/commands/help.md +407 -0
- package/commands/init.md +1508 -0
- package/commands/insert-phase.md +113 -0
- package/commands/iterate.md +327 -0
- package/commands/list-phase-assumptions.md +217 -0
- package/commands/long-term-roadmap.md +202 -0
- package/commands/map-codebase.md +111 -0
- package/commands/migrate.md +159 -0
- package/commands/new-milestone.md +169 -0
- package/commands/pause-work.md +83 -0
- package/commands/plan-milestone-gaps.md +373 -0
- package/commands/plan-phase.md +655 -0
- package/commands/principles.md +328 -0
- package/commands/product-plan.md +319 -0
- package/commands/progress.md +481 -0
- package/commands/quick.md +167 -0
- package/commands/reapply-patches.md +154 -0
- package/commands/remove-phase.md +97 -0
- package/commands/requirement.md +96 -0
- package/commands/resume-project.md +113 -0
- package/commands/settings.md +1144 -0
- package/commands/survey.md +242 -0
- package/commands/sync.md +246 -0
- package/commands/tracker-setup.md +322 -0
- package/commands/update.md +202 -0
- package/commands/verify-phase.md +335 -0
- package/commands/verify-work.md +701 -0
- package/commands/wireup.md +29 -0
- package/dist/bin/gd.d.ts +3 -0
- package/dist/bin/gd.d.ts.map +1 -0
- package/dist/bin/gd.js +178 -0
- package/dist/bin/gd.js.map +1 -0
- package/dist/bin/grd-manifest.d.ts +3 -0
- package/dist/bin/grd-manifest.d.ts.map +1 -0
- package/dist/bin/grd-manifest.js +202 -0
- package/dist/bin/grd-manifest.js.map +1 -0
- package/dist/bin/grd-mcp-server.d.ts +3 -0
- package/dist/bin/grd-mcp-server.d.ts.map +1 -0
- package/dist/bin/grd-mcp-server.js +71 -0
- package/dist/bin/grd-mcp-server.js.map +1 -0
- package/dist/bin/grd-tools.d.ts +3 -0
- package/dist/bin/grd-tools.d.ts.map +1 -0
- package/dist/bin/grd-tools.js +1680 -0
- package/dist/bin/grd-tools.js.map +1 -0
- package/dist/bin/postinstall.d.ts +3 -0
- package/dist/bin/postinstall.d.ts.map +1 -0
- package/dist/bin/postinstall.js +61 -0
- package/dist/bin/postinstall.js.map +1 -0
- package/dist/lib/autopilot-milestone.d.ts +2 -0
- package/dist/lib/autopilot-milestone.d.ts.map +1 -0
- package/dist/lib/autopilot-milestone.js +94 -0
- package/dist/lib/autopilot-milestone.js.map +1 -0
- package/dist/lib/autopilot-pipeline.d.ts +2 -0
- package/dist/lib/autopilot-pipeline.d.ts.map +1 -0
- package/dist/lib/autopilot-pipeline.js +830 -0
- package/dist/lib/autopilot-pipeline.js.map +1 -0
- package/dist/lib/autopilot-waves.d.ts +2 -0
- package/dist/lib/autopilot-waves.d.ts.map +1 -0
- package/dist/lib/autopilot-waves.js +266 -0
- package/dist/lib/autopilot-waves.js.map +1 -0
- package/dist/lib/autopilot.d.ts +2 -0
- package/dist/lib/autopilot.d.ts.map +1 -0
- package/dist/lib/autopilot.js +1314 -0
- package/dist/lib/autopilot.js.map +1 -0
- package/dist/lib/autoplan.d.ts +2 -0
- package/dist/lib/autoplan.d.ts.map +1 -0
- package/dist/lib/autoplan.js +198 -0
- package/dist/lib/autoplan.js.map +1 -0
- package/dist/lib/autoresearch.d.ts +2 -0
- package/dist/lib/autoresearch.d.ts.map +1 -0
- package/dist/lib/autoresearch.js +626 -0
- package/dist/lib/autoresearch.js.map +1 -0
- package/dist/lib/backend.d.ts +2 -0
- package/dist/lib/backend.d.ts.map +1 -0
- package/dist/lib/backend.js +1036 -0
- package/dist/lib/backend.js.map +1 -0
- package/dist/lib/benchmark.d.ts +99 -0
- package/dist/lib/benchmark.d.ts.map +1 -0
- package/dist/lib/benchmark.js +278 -0
- package/dist/lib/benchmark.js.map +1 -0
- package/dist/lib/citations.d.ts +2 -0
- package/dist/lib/citations.d.ts.map +1 -0
- package/dist/lib/citations.js +642 -0
- package/dist/lib/citations.js.map +1 -0
- package/dist/lib/cleanup.d.ts +2 -0
- package/dist/lib/cleanup.d.ts.map +1 -0
- package/dist/lib/cleanup.js +1222 -0
- package/dist/lib/cleanup.js.map +1 -0
- package/dist/lib/cli/adapters.d.ts +10 -0
- package/dist/lib/cli/adapters.d.ts.map +1 -0
- package/dist/lib/cli/adapters.js +27 -0
- package/dist/lib/cli/adapters.js.map +1 -0
- package/dist/lib/cli/agent.d.ts +17 -0
- package/dist/lib/cli/agent.d.ts.map +1 -0
- package/dist/lib/cli/agent.js +53 -0
- package/dist/lib/cli/agent.js.map +1 -0
- package/dist/lib/cli/index.d.ts +21 -0
- package/dist/lib/cli/index.d.ts.map +1 -0
- package/dist/lib/cli/index.js +264 -0
- package/dist/lib/cli/index.js.map +1 -0
- package/dist/lib/cli/output.d.ts +20 -0
- package/dist/lib/cli/output.d.ts.map +1 -0
- package/dist/lib/cli/output.js +22 -0
- package/dist/lib/cli/output.js.map +1 -0
- package/dist/lib/cli/scan-dispatch.d.ts +9 -0
- package/dist/lib/cli/scan-dispatch.d.ts.map +1 -0
- package/dist/lib/cli/scan-dispatch.js +107 -0
- package/dist/lib/cli/scan-dispatch.js.map +1 -0
- package/dist/lib/cli/tools.d.ts +16 -0
- package/dist/lib/cli/tools.d.ts.map +1 -0
- package/dist/lib/cli/tools.js +168 -0
- package/dist/lib/cli/tools.js.map +1 -0
- package/dist/lib/commands/_dashboard-parsers.d.ts +2 -0
- package/dist/lib/commands/_dashboard-parsers.d.ts.map +1 -0
- package/dist/lib/commands/_dashboard-parsers.js +192 -0
- package/dist/lib/commands/_dashboard-parsers.js.map +1 -0
- package/dist/lib/commands/analysis.d.ts +2 -0
- package/dist/lib/commands/analysis.d.ts.map +1 -0
- package/dist/lib/commands/analysis.js +1418 -0
- package/dist/lib/commands/analysis.js.map +1 -0
- package/dist/lib/commands/assumptions.d.ts +2 -0
- package/dist/lib/commands/assumptions.d.ts.map +1 -0
- package/dist/lib/commands/assumptions.js +166 -0
- package/dist/lib/commands/assumptions.js.map +1 -0
- package/dist/lib/commands/blame.d.ts +2 -0
- package/dist/lib/commands/blame.d.ts.map +1 -0
- package/dist/lib/commands/blame.js +133 -0
- package/dist/lib/commands/blame.js.map +1 -0
- package/dist/lib/commands/budget.d.ts +2 -0
- package/dist/lib/commands/budget.d.ts.map +1 -0
- package/dist/lib/commands/budget.js +100 -0
- package/dist/lib/commands/budget.js.map +1 -0
- package/dist/lib/commands/check-plans.d.ts +2 -0
- package/dist/lib/commands/check-plans.d.ts.map +1 -0
- package/dist/lib/commands/check-plans.js +190 -0
- package/dist/lib/commands/check-plans.js.map +1 -0
- package/dist/lib/commands/config.d.ts +2 -0
- package/dist/lib/commands/config.d.ts.map +1 -0
- package/dist/lib/commands/config.js +188 -0
- package/dist/lib/commands/config.js.map +1 -0
- package/dist/lib/commands/dashboard.d.ts +2 -0
- package/dist/lib/commands/dashboard.d.ts.map +1 -0
- package/dist/lib/commands/dashboard.js +466 -0
- package/dist/lib/commands/dashboard.js.map +1 -0
- package/dist/lib/commands/estimate.d.ts +2 -0
- package/dist/lib/commands/estimate.d.ts.map +1 -0
- package/dist/lib/commands/estimate.js +148 -0
- package/dist/lib/commands/estimate.js.map +1 -0
- package/dist/lib/commands/eval-diff.d.ts +2 -0
- package/dist/lib/commands/eval-diff.d.ts.map +1 -0
- package/dist/lib/commands/eval-diff.js +213 -0
- package/dist/lib/commands/eval-diff.js.map +1 -0
- package/dist/lib/commands/freshness.d.ts +2 -0
- package/dist/lib/commands/freshness.d.ts.map +1 -0
- package/dist/lib/commands/freshness.js +163 -0
- package/dist/lib/commands/freshness.js.map +1 -0
- package/dist/lib/commands/health.d.ts +2 -0
- package/dist/lib/commands/health.d.ts.map +1 -0
- package/dist/lib/commands/health.js +435 -0
- package/dist/lib/commands/health.js.map +1 -0
- package/dist/lib/commands/index.d.ts +2 -0
- package/dist/lib/commands/index.d.ts.map +1 -0
- package/dist/lib/commands/index.js +128 -0
- package/dist/lib/commands/index.js.map +1 -0
- package/dist/lib/commands/install.d.ts +56 -0
- package/dist/lib/commands/install.d.ts.map +1 -0
- package/dist/lib/commands/install.js +214 -0
- package/dist/lib/commands/install.js.map +1 -0
- package/dist/lib/commands/knowhow-aggregator.d.ts +2 -0
- package/dist/lib/commands/knowhow-aggregator.d.ts.map +1 -0
- package/dist/lib/commands/knowhow-aggregator.js +279 -0
- package/dist/lib/commands/knowhow-aggregator.js.map +1 -0
- package/dist/lib/commands/knowledge-search.d.ts +2 -0
- package/dist/lib/commands/knowledge-search.d.ts.map +1 -0
- package/dist/lib/commands/knowledge-search.js +113 -0
- package/dist/lib/commands/knowledge-search.js.map +1 -0
- package/dist/lib/commands/long-term-roadmap.d.ts +2 -0
- package/dist/lib/commands/long-term-roadmap.d.ts.map +1 -0
- package/dist/lib/commands/long-term-roadmap.js +272 -0
- package/dist/lib/commands/long-term-roadmap.js.map +1 -0
- package/dist/lib/commands/patterns.d.ts +91 -0
- package/dist/lib/commands/patterns.d.ts.map +1 -0
- package/dist/lib/commands/patterns.js +391 -0
- package/dist/lib/commands/patterns.js.map +1 -0
- package/dist/lib/commands/phase-info.d.ts +2 -0
- package/dist/lib/commands/phase-info.d.ts.map +1 -0
- package/dist/lib/commands/phase-info.js +509 -0
- package/dist/lib/commands/phase-info.js.map +1 -0
- package/dist/lib/commands/plan-lint.d.ts +56 -0
- package/dist/lib/commands/plan-lint.d.ts.map +1 -0
- package/dist/lib/commands/plan-lint.js +481 -0
- package/dist/lib/commands/plan-lint.js.map +1 -0
- package/dist/lib/commands/plan-phase.d.ts +53 -0
- package/dist/lib/commands/plan-phase.d.ts.map +1 -0
- package/dist/lib/commands/plan-phase.js +288 -0
- package/dist/lib/commands/plan-phase.js.map +1 -0
- package/dist/lib/commands/progress.d.ts +2 -0
- package/dist/lib/commands/progress.d.ts.map +1 -0
- package/dist/lib/commands/progress.js +266 -0
- package/dist/lib/commands/progress.js.map +1 -0
- package/dist/lib/commands/quality.d.ts +2 -0
- package/dist/lib/commands/quality.d.ts.map +1 -0
- package/dist/lib/commands/quality.js +80 -0
- package/dist/lib/commands/quality.js.map +1 -0
- package/dist/lib/commands/rollback.d.ts +2 -0
- package/dist/lib/commands/rollback.d.ts.map +1 -0
- package/dist/lib/commands/rollback.js +145 -0
- package/dist/lib/commands/rollback.js.map +1 -0
- package/dist/lib/commands/scan.d.ts +25 -0
- package/dist/lib/commands/scan.d.ts.map +1 -0
- package/dist/lib/commands/scan.js +28 -0
- package/dist/lib/commands/scan.js.map +1 -0
- package/dist/lib/commands/search.d.ts +2 -0
- package/dist/lib/commands/search.d.ts.map +1 -0
- package/dist/lib/commands/search.js +212 -0
- package/dist/lib/commands/search.js.map +1 -0
- package/dist/lib/commands/select-candidate.d.ts +128 -0
- package/dist/lib/commands/select-candidate.d.ts.map +1 -0
- package/dist/lib/commands/select-candidate.js +518 -0
- package/dist/lib/commands/select-candidate.js.map +1 -0
- package/dist/lib/commands/singularity.d.ts +2 -0
- package/dist/lib/commands/singularity.d.ts.map +1 -0
- package/dist/lib/commands/singularity.js +185 -0
- package/dist/lib/commands/singularity.js.map +1 -0
- package/dist/lib/commands/slug-timestamp.d.ts +2 -0
- package/dist/lib/commands/slug-timestamp.d.ts.map +1 -0
- package/dist/lib/commands/slug-timestamp.js +54 -0
- package/dist/lib/commands/slug-timestamp.js.map +1 -0
- package/dist/lib/commands/tail.d.ts +2 -0
- package/dist/lib/commands/tail.d.ts.map +1 -0
- package/dist/lib/commands/tail.js +100 -0
- package/dist/lib/commands/tail.js.map +1 -0
- package/dist/lib/commands/todo.d.ts +2 -0
- package/dist/lib/commands/todo.d.ts.map +1 -0
- package/dist/lib/commands/todo.js +200 -0
- package/dist/lib/commands/todo.js.map +1 -0
- package/dist/lib/commands/watch.d.ts +2 -0
- package/dist/lib/commands/watch.d.ts.map +1 -0
- package/dist/lib/commands/watch.js +72 -0
- package/dist/lib/commands/watch.js.map +1 -0
- package/dist/lib/complexity.d.ts +55 -0
- package/dist/lib/complexity.d.ts.map +1 -0
- package/dist/lib/complexity.js +80 -0
- package/dist/lib/complexity.js.map +1 -0
- package/dist/lib/context/agents.d.ts +2 -0
- package/dist/lib/context/agents.d.ts.map +1 -0
- package/dist/lib/context/agents.js +344 -0
- package/dist/lib/context/agents.js.map +1 -0
- package/dist/lib/context/base.d.ts +2 -0
- package/dist/lib/context/base.d.ts.map +1 -0
- package/dist/lib/context/base.js +81 -0
- package/dist/lib/context/base.js.map +1 -0
- package/dist/lib/context/execute.d.ts +2 -0
- package/dist/lib/context/execute.d.ts.map +1 -0
- package/dist/lib/context/execute.js +753 -0
- package/dist/lib/context/execute.js.map +1 -0
- package/dist/lib/context/index.d.ts +2 -0
- package/dist/lib/context/index.d.ts.map +1 -0
- package/dist/lib/context/index.js +88 -0
- package/dist/lib/context/index.js.map +1 -0
- package/dist/lib/context/progress.d.ts +2 -0
- package/dist/lib/context/progress.d.ts.map +1 -0
- package/dist/lib/context/progress.js +178 -0
- package/dist/lib/context/progress.js.map +1 -0
- package/dist/lib/context/project.d.ts +2 -0
- package/dist/lib/context/project.d.ts.map +1 -0
- package/dist/lib/context/project.js +413 -0
- package/dist/lib/context/project.js.map +1 -0
- package/dist/lib/context/research.d.ts +2 -0
- package/dist/lib/context/research.d.ts.map +1 -0
- package/dist/lib/context/research.js +466 -0
- package/dist/lib/context/research.js.map +1 -0
- package/dist/lib/dead-ends.d.ts +28 -0
- package/dist/lib/dead-ends.d.ts.map +1 -0
- package/dist/lib/dead-ends.js +451 -0
- package/dist/lib/dead-ends.js.map +1 -0
- package/dist/lib/deps.d.ts +2 -0
- package/dist/lib/deps.d.ts.map +1 -0
- package/dist/lib/deps.js +630 -0
- package/dist/lib/deps.js.map +1 -0
- package/dist/lib/discussion.d.ts +2 -0
- package/dist/lib/discussion.d.ts.map +1 -0
- package/dist/lib/discussion.js +1041 -0
- package/dist/lib/discussion.js.map +1 -0
- package/dist/lib/drift.d.ts +36 -0
- package/dist/lib/drift.d.ts.map +1 -0
- package/dist/lib/drift.js +481 -0
- package/dist/lib/drift.js.map +1 -0
- package/dist/lib/evolve/_dimensions-features.d.ts +2 -0
- package/dist/lib/evolve/_dimensions-features.d.ts.map +1 -0
- package/dist/lib/evolve/_dimensions-features.js +369 -0
- package/dist/lib/evolve/_dimensions-features.js.map +1 -0
- package/dist/lib/evolve/_dimensions.d.ts +2 -0
- package/dist/lib/evolve/_dimensions.d.ts.map +1 -0
- package/dist/lib/evolve/_dimensions.js +358 -0
- package/dist/lib/evolve/_dimensions.js.map +1 -0
- package/dist/lib/evolve/_product-ideation.d.ts +2 -0
- package/dist/lib/evolve/_product-ideation.d.ts.map +1 -0
- package/dist/lib/evolve/_product-ideation.js +281 -0
- package/dist/lib/evolve/_product-ideation.js.map +1 -0
- package/dist/lib/evolve/_prompts.d.ts +2 -0
- package/dist/lib/evolve/_prompts.d.ts.map +1 -0
- package/dist/lib/evolve/_prompts.js +153 -0
- package/dist/lib/evolve/_prompts.js.map +1 -0
- package/dist/lib/evolve/cli.d.ts +2 -0
- package/dist/lib/evolve/cli.d.ts.map +1 -0
- package/dist/lib/evolve/cli.js +224 -0
- package/dist/lib/evolve/cli.js.map +1 -0
- package/dist/lib/evolve/discovery.d.ts +2 -0
- package/dist/lib/evolve/discovery.d.ts.map +1 -0
- package/dist/lib/evolve/discovery.js +391 -0
- package/dist/lib/evolve/discovery.js.map +1 -0
- package/dist/lib/evolve/index.d.ts +2 -0
- package/dist/lib/evolve/index.d.ts.map +1 -0
- package/dist/lib/evolve/index.js +88 -0
- package/dist/lib/evolve/index.js.map +1 -0
- package/dist/lib/evolve/orchestrator.d.ts +2 -0
- package/dist/lib/evolve/orchestrator.d.ts.map +1 -0
- package/dist/lib/evolve/orchestrator.js +851 -0
- package/dist/lib/evolve/orchestrator.js.map +1 -0
- package/dist/lib/evolve/scoring.d.ts +2 -0
- package/dist/lib/evolve/scoring.d.ts.map +1 -0
- package/dist/lib/evolve/scoring.js +118 -0
- package/dist/lib/evolve/scoring.js.map +1 -0
- package/dist/lib/evolve/state.d.ts +2 -0
- package/dist/lib/evolve/state.d.ts.map +1 -0
- package/dist/lib/evolve/state.js +264 -0
- package/dist/lib/evolve/state.js.map +1 -0
- package/dist/lib/evolve/types.d.ts +249 -0
- package/dist/lib/evolve/types.d.ts.map +1 -0
- package/dist/lib/evolve/types.js +3 -0
- package/dist/lib/evolve/types.js.map +1 -0
- package/dist/lib/frontmatter.d.ts +2 -0
- package/dist/lib/frontmatter.d.ts.map +1 -0
- package/dist/lib/frontmatter.js +513 -0
- package/dist/lib/frontmatter.js.map +1 -0
- package/dist/lib/gates.d.ts +2 -0
- package/dist/lib/gates.d.ts.map +1 -0
- package/dist/lib/gates.js +578 -0
- package/dist/lib/gates.js.map +1 -0
- package/dist/lib/genome.d.ts +10 -0
- package/dist/lib/genome.d.ts.map +1 -0
- package/dist/lib/genome.js +368 -0
- package/dist/lib/genome.js.map +1 -0
- package/dist/lib/got.d.ts +2 -0
- package/dist/lib/got.d.ts.map +1 -0
- package/dist/lib/got.js +280 -0
- package/dist/lib/got.js.map +1 -0
- package/dist/lib/invariants.d.ts +2 -0
- package/dist/lib/invariants.d.ts.map +1 -0
- package/dist/lib/invariants.js +298 -0
- package/dist/lib/invariants.js.map +1 -0
- package/dist/lib/knowledge.d.ts +2 -0
- package/dist/lib/knowledge.d.ts.map +1 -0
- package/dist/lib/knowledge.js +658 -0
- package/dist/lib/knowledge.js.map +1 -0
- package/dist/lib/long-term-roadmap.d.ts +2 -0
- package/dist/lib/long-term-roadmap.d.ts.map +1 -0
- package/dist/lib/long-term-roadmap.js +602 -0
- package/dist/lib/long-term-roadmap.js.map +1 -0
- package/dist/lib/markdown-split.d.ts +2 -0
- package/dist/lib/markdown-split.d.ts.map +1 -0
- package/dist/lib/markdown-split.js +199 -0
- package/dist/lib/markdown-split.js.map +1 -0
- package/dist/lib/mcp-server.d.ts +2 -0
- package/dist/lib/mcp-server.d.ts.map +1 -0
- package/dist/lib/mcp-server.js +2424 -0
- package/dist/lib/mcp-server.js.map +1 -0
- package/dist/lib/metrics.d.ts +16 -0
- package/dist/lib/metrics.d.ts.map +1 -0
- package/dist/lib/metrics.js +48 -0
- package/dist/lib/metrics.js.map +1 -0
- package/dist/lib/overstory.d.ts +2 -0
- package/dist/lib/overstory.d.ts.map +1 -0
- package/dist/lib/overstory.js +211 -0
- package/dist/lib/overstory.js.map +1 -0
- package/dist/lib/parallel.d.ts +2 -0
- package/dist/lib/parallel.d.ts.map +1 -0
- package/dist/lib/parallel.js +349 -0
- package/dist/lib/parallel.js.map +1 -0
- package/dist/lib/paths.d.ts +2 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +254 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/phase-complete-llm.d.ts +22 -0
- package/dist/lib/phase-complete-llm.d.ts.map +1 -0
- package/dist/lib/phase-complete-llm.js +331 -0
- package/dist/lib/phase-complete-llm.js.map +1 -0
- package/dist/lib/phase-complete.d.ts +46 -0
- package/dist/lib/phase-complete.d.ts.map +1 -0
- package/dist/lib/phase-complete.js +278 -0
- package/dist/lib/phase-complete.js.map +1 -0
- package/dist/lib/phase-io.d.ts +2 -0
- package/dist/lib/phase-io.d.ts.map +1 -0
- package/dist/lib/phase-io.js +126 -0
- package/dist/lib/phase-io.js.map +1 -0
- package/dist/lib/phase.d.ts +2 -0
- package/dist/lib/phase.d.ts.map +1 -0
- package/dist/lib/phase.js +1344 -0
- package/dist/lib/phase.js.map +1 -0
- package/dist/lib/plan-tournament.d.ts +63 -0
- package/dist/lib/plan-tournament.d.ts.map +1 -0
- package/dist/lib/plan-tournament.js +353 -0
- package/dist/lib/plan-tournament.js.map +1 -0
- package/dist/lib/refinement.d.ts +74 -0
- package/dist/lib/refinement.d.ts.map +1 -0
- package/dist/lib/refinement.js +283 -0
- package/dist/lib/refinement.js.map +1 -0
- package/dist/lib/requirements.d.ts +2 -0
- package/dist/lib/requirements.d.ts.map +1 -0
- package/dist/lib/requirements.js +355 -0
- package/dist/lib/requirements.js.map +1 -0
- package/dist/lib/research-bundle.d.ts +2 -0
- package/dist/lib/research-bundle.d.ts.map +1 -0
- package/dist/lib/research-bundle.js +246 -0
- package/dist/lib/research-bundle.js.map +1 -0
- package/dist/lib/roadmap.d.ts +2 -0
- package/dist/lib/roadmap.d.ts.map +1 -0
- package/dist/lib/roadmap.js +541 -0
- package/dist/lib/roadmap.js.map +1 -0
- package/dist/lib/sample.d.ts +16 -0
- package/dist/lib/sample.d.ts.map +1 -0
- package/dist/lib/sample.js +20 -0
- package/dist/lib/sample.js.map +1 -0
- package/dist/lib/scaffold.d.ts +2 -0
- package/dist/lib/scaffold.d.ts.map +1 -0
- package/dist/lib/scaffold.js +355 -0
- package/dist/lib/scaffold.js.map +1 -0
- package/dist/lib/scan/_utils.d.ts +11 -0
- package/dist/lib/scan/_utils.d.ts.map +1 -0
- package/dist/lib/scan/_utils.js +36 -0
- package/dist/lib/scan/_utils.js.map +1 -0
- package/dist/lib/scan/base64.d.ts +15 -0
- package/dist/lib/scan/base64.d.ts.map +1 -0
- package/dist/lib/scan/base64.js +66 -0
- package/dist/lib/scan/base64.js.map +1 -0
- package/dist/lib/scan/ignorefile.d.ts +30 -0
- package/dist/lib/scan/ignorefile.d.ts.map +1 -0
- package/dist/lib/scan/ignorefile.js +101 -0
- package/dist/lib/scan/ignorefile.js.map +1 -0
- package/dist/lib/scan/injection.d.ts +14 -0
- package/dist/lib/scan/injection.d.ts.map +1 -0
- package/dist/lib/scan/injection.js +39 -0
- package/dist/lib/scan/injection.js.map +1 -0
- package/dist/lib/scan/patterns.d.ts +17 -0
- package/dist/lib/scan/patterns.d.ts.map +1 -0
- package/dist/lib/scan/patterns.js +123 -0
- package/dist/lib/scan/patterns.js.map +1 -0
- package/dist/lib/scan/strip-markdown.d.ts +7 -0
- package/dist/lib/scan/strip-markdown.d.ts.map +1 -0
- package/dist/lib/scan/strip-markdown.js +38 -0
- package/dist/lib/scan/strip-markdown.js.map +1 -0
- package/dist/lib/scan/types.d.ts +23 -0
- package/dist/lib/scan/types.d.ts.map +1 -0
- package/dist/lib/scan/types.js +3 -0
- package/dist/lib/scan/types.js.map +1 -0
- package/dist/lib/scheduler-wait.d.ts +2 -0
- package/dist/lib/scheduler-wait.d.ts.map +1 -0
- package/dist/lib/scheduler-wait.js +59 -0
- package/dist/lib/scheduler-wait.js.map +1 -0
- package/dist/lib/scheduler.d.ts +254 -0
- package/dist/lib/scheduler.d.ts.map +1 -0
- package/dist/lib/scheduler.js +1147 -0
- package/dist/lib/scheduler.js.map +1 -0
- package/dist/lib/state.d.ts +2 -0
- package/dist/lib/state.d.ts.map +1 -0
- package/dist/lib/state.js +744 -0
- package/dist/lib/state.js.map +1 -0
- package/dist/lib/think.d.ts +18 -0
- package/dist/lib/think.d.ts.map +1 -0
- package/dist/lib/think.js +317 -0
- package/dist/lib/think.js.map +1 -0
- package/dist/lib/tracker.d.ts +2 -0
- package/dist/lib/tracker.d.ts.map +1 -0
- package/dist/lib/tracker.js +1121 -0
- package/dist/lib/tracker.js.map +1 -0
- package/dist/lib/types.d.ts +1514 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +4 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/utils.d.ts +2 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +1363 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/verify.d.ts +2 -0
- package/dist/lib/verify.d.ts.map +1 -0
- package/dist/lib/verify.js +1153 -0
- package/dist/lib/verify.js.map +1 -0
- package/dist/lib/wireup/autofix.d.ts +2 -0
- package/dist/lib/wireup/autofix.d.ts.map +1 -0
- package/dist/lib/wireup/autofix.js +188 -0
- package/dist/lib/wireup/autofix.js.map +1 -0
- package/dist/lib/wireup/cli.d.ts +2 -0
- package/dist/lib/wireup/cli.d.ts.map +1 -0
- package/dist/lib/wireup/cli.js +194 -0
- package/dist/lib/wireup/cli.js.map +1 -0
- package/dist/lib/wireup/detection.d.ts +47 -0
- package/dist/lib/wireup/detection.d.ts.map +1 -0
- package/dist/lib/wireup/detection.js +410 -0
- package/dist/lib/wireup/detection.js.map +1 -0
- package/dist/lib/wireup/discovery.d.ts +2 -0
- package/dist/lib/wireup/discovery.d.ts.map +1 -0
- package/dist/lib/wireup/discovery.js +934 -0
- package/dist/lib/wireup/discovery.js.map +1 -0
- package/dist/lib/wireup/execution.d.ts +2 -0
- package/dist/lib/wireup/execution.d.ts.map +1 -0
- package/dist/lib/wireup/execution.js +573 -0
- package/dist/lib/wireup/execution.js.map +1 -0
- package/dist/lib/wireup/index.d.ts +2 -0
- package/dist/lib/wireup/index.d.ts.map +1 -0
- package/dist/lib/wireup/index.js +85 -0
- package/dist/lib/wireup/index.js.map +1 -0
- package/dist/lib/wireup/orchestrator.d.ts +2 -0
- package/dist/lib/wireup/orchestrator.d.ts.map +1 -0
- package/dist/lib/wireup/orchestrator.js +366 -0
- package/dist/lib/wireup/orchestrator.js.map +1 -0
- package/dist/lib/wireup/report.d.ts +47 -0
- package/dist/lib/wireup/report.d.ts.map +1 -0
- package/dist/lib/wireup/report.js +201 -0
- package/dist/lib/wireup/report.js.map +1 -0
- package/dist/lib/wireup/scenarios.d.ts +2 -0
- package/dist/lib/wireup/scenarios.d.ts.map +1 -0
- package/dist/lib/wireup/scenarios.js +516 -0
- package/dist/lib/wireup/scenarios.js.map +1 -0
- package/dist/lib/wireup/state.d.ts +2 -0
- package/dist/lib/wireup/state.d.ts.map +1 -0
- package/dist/lib/wireup/state.js +102 -0
- package/dist/lib/wireup/state.js.map +1 -0
- package/dist/lib/wireup/types.d.ts +376 -0
- package/dist/lib/wireup/types.d.ts.map +1 -0
- package/dist/lib/wireup/types.js +3 -0
- package/dist/lib/wireup/types.js.map +1 -0
- package/dist/lib/worktree.d.ts +2 -0
- package/dist/lib/worktree.d.ts.map +1 -0
- package/dist/lib/worktree.js +999 -0
- package/dist/lib/worktree.js.map +1 -0
- package/lib/autopilot-milestone.ts +136 -0
- package/lib/autopilot-pipeline.ts +1179 -0
- package/lib/autopilot-waves.ts +361 -0
- package/lib/autopilot.ts +1874 -0
- package/lib/autoplan.ts +280 -0
- package/lib/autoresearch.js +4 -0
- package/lib/autoresearch.ts +886 -0
- package/lib/backend.ts +1252 -0
- package/lib/benchmark.ts +341 -0
- package/lib/citations.ts +760 -0
- package/lib/cleanup.ts +1588 -0
- package/lib/cli/adapters.ts +41 -0
- package/lib/cli/agent.ts +83 -0
- package/lib/cli/index.ts +273 -0
- package/lib/cli/output.ts +33 -0
- package/lib/cli/scan-dispatch.ts +130 -0
- package/lib/cli/tools.ts +198 -0
- package/lib/commands/_dashboard-parsers.ts +275 -0
- package/lib/commands/analysis.ts +1851 -0
- package/lib/commands/assumptions.ts +232 -0
- package/lib/commands/blame.ts +174 -0
- package/lib/commands/budget.ts +148 -0
- package/lib/commands/check-plans.ts +233 -0
- package/lib/commands/config.ts +287 -0
- package/lib/commands/dashboard.ts +680 -0
- package/lib/commands/estimate.ts +204 -0
- package/lib/commands/eval-diff.ts +252 -0
- package/lib/commands/freshness.ts +213 -0
- package/lib/commands/health.ts +607 -0
- package/lib/commands/index.ts +266 -0
- package/lib/commands/install.ts +307 -0
- package/lib/commands/knowhow-aggregator.ts +345 -0
- package/lib/commands/knowledge-search.ts +153 -0
- package/lib/commands/long-term-roadmap.ts +390 -0
- package/lib/commands/patterns.ts +465 -0
- package/lib/commands/phase-info.ts +698 -0
- package/lib/commands/plan-lint.ts +546 -0
- package/lib/commands/plan-phase.ts +375 -0
- package/lib/commands/progress.ts +319 -0
- package/lib/commands/quality.ts +138 -0
- package/lib/commands/rollback.ts +195 -0
- package/lib/commands/scan.ts +72 -0
- package/lib/commands/search.ts +300 -0
- package/lib/commands/select-candidate.ts +687 -0
- package/lib/commands/singularity.ts +222 -0
- package/lib/commands/slug-timestamp.ts +74 -0
- package/lib/commands/tail.ts +129 -0
- package/lib/commands/todo.ts +273 -0
- package/lib/commands/watch.ts +80 -0
- package/lib/complexity.ts +117 -0
- package/lib/context/agents.ts +505 -0
- package/lib/context/base.ts +123 -0
- package/lib/context/execute.ts +977 -0
- package/lib/context/index.ts +110 -0
- package/lib/context/progress.ts +278 -0
- package/lib/context/project.ts +531 -0
- package/lib/context/research.ts +646 -0
- package/lib/dead-ends.ts +506 -0
- package/lib/deps.ts +773 -0
- package/lib/discussion.ts +1275 -0
- package/lib/drift.ts +519 -0
- package/lib/evolve/_dimensions-features.ts +525 -0
- package/lib/evolve/_dimensions.ts +511 -0
- package/lib/evolve/_product-ideation.ts +405 -0
- package/lib/evolve/_prompts.ts +178 -0
- package/lib/evolve/cli.ts +330 -0
- package/lib/evolve/discovery.ts +571 -0
- package/lib/evolve/index.ts +105 -0
- package/lib/evolve/orchestrator.ts +1139 -0
- package/lib/evolve/scoring.ts +167 -0
- package/lib/evolve/state.ts +330 -0
- package/lib/evolve/types.ts +290 -0
- package/lib/frontmatter.ts +615 -0
- package/lib/gates.ts +695 -0
- package/lib/genome.ts +402 -0
- package/lib/got.js +4 -0
- package/lib/got.ts +361 -0
- package/lib/invariants.ts +378 -0
- package/lib/knowledge.ts +768 -0
- package/lib/long-term-roadmap.ts +806 -0
- package/lib/markdown-split.ts +273 -0
- package/lib/mcp-server.ts +3292 -0
- package/lib/metrics.ts +49 -0
- package/lib/overstory.ts +270 -0
- package/lib/parallel.ts +570 -0
- package/lib/paths.ts +293 -0
- package/lib/phase-complete-llm.ts +376 -0
- package/lib/phase-complete.ts +366 -0
- package/lib/phase-io.ts +101 -0
- package/lib/phase.ts +1981 -0
- package/lib/plan-tournament.ts +426 -0
- package/lib/refinement.ts +349 -0
- package/lib/requirements.ts +469 -0
- package/lib/research-bundle.ts +300 -0
- package/lib/roadmap.ts +775 -0
- package/lib/scaffold.ts +480 -0
- package/lib/scan/_utils.ts +37 -0
- package/lib/scan/base64.ts +90 -0
- package/lib/scan/ignorefile.ts +109 -0
- package/lib/scan/injection.ts +67 -0
- package/lib/scan/patterns.ts +139 -0
- package/lib/scan/strip-markdown.ts +39 -0
- package/lib/scan/types.ts +28 -0
- package/lib/scheduler-wait.ts +58 -0
- package/lib/scheduler.ts +1370 -0
- package/lib/state.ts +1000 -0
- package/lib/think.ts +365 -0
- package/lib/tracker.ts +1591 -0
- package/lib/types.ts +1663 -0
- package/lib/utils.ts +1479 -0
- package/lib/verify.ts +1434 -0
- package/lib/wireup/autofix.ts +241 -0
- package/lib/wireup/cli.ts +278 -0
- package/lib/wireup/detection.ts +542 -0
- package/lib/wireup/discovery.ts +1063 -0
- package/lib/wireup/execution.ts +686 -0
- package/lib/wireup/index.ts +117 -0
- package/lib/wireup/orchestrator.ts +519 -0
- package/lib/wireup/report.ts +286 -0
- package/lib/wireup/scenarios.ts +616 -0
- package/lib/wireup/state.ts +139 -0
- package/lib/wireup/types.ts +436 -0
- package/lib/worktree.ts +1309 -0
- package/package.json +67 -0
package/dist/lib/deps.js
ADDED
|
@@ -0,0 +1,630 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const { output, error: _depsError, findPhaseInternal } = require('./utils');
|
|
6
|
+
const { analyzeRoadmap } = require('./roadmap');
|
|
7
|
+
// ─── parseDependsOn ──────────────────────────────────────────────────────────
|
|
8
|
+
/**
|
|
9
|
+
* Parse a raw depends_on string from ROADMAP.md into an array of phase number strings.
|
|
10
|
+
* @param dependsOnStr - Raw depends_on string (e.g., "Phase 27, Phase 29", "Nothing", null)
|
|
11
|
+
* @returns Array of phase number strings (e.g., ['27', '29']), or [] if no dependencies
|
|
12
|
+
*/
|
|
13
|
+
function parseDependsOn(dependsOnStr) {
|
|
14
|
+
if (!dependsOnStr || typeof dependsOnStr !== 'string' || dependsOnStr.trim() === '') {
|
|
15
|
+
return [];
|
|
16
|
+
}
|
|
17
|
+
// "Nothing" (case-insensitive) means no dependencies
|
|
18
|
+
if (/nothing/i.test(dependsOnStr)) {
|
|
19
|
+
return [];
|
|
20
|
+
}
|
|
21
|
+
// Extract all "Phase N" or "Phase N.M" references
|
|
22
|
+
const matches = [];
|
|
23
|
+
const regex = /Phase\s+(\d+(?:\.\d+)?)/gi;
|
|
24
|
+
let m;
|
|
25
|
+
while ((m = regex.exec(dependsOnStr)) !== null) {
|
|
26
|
+
matches.push(m[1]);
|
|
27
|
+
}
|
|
28
|
+
return matches;
|
|
29
|
+
}
|
|
30
|
+
// ─── buildDependencyGraph ────────────────────────────────────────────────────
|
|
31
|
+
/**
|
|
32
|
+
* Build a dependency graph from an array of phase objects.
|
|
33
|
+
* @param phases - Phase objects from roadmap analysis
|
|
34
|
+
* @returns Dependency graph with typed nodes and edges
|
|
35
|
+
*/
|
|
36
|
+
function buildDependencyGraph(phases) {
|
|
37
|
+
const nodeIds = new Set(phases.map((p) => p.number));
|
|
38
|
+
const nodes = phases.map((p) => ({
|
|
39
|
+
id: p.number,
|
|
40
|
+
name: p.name,
|
|
41
|
+
}));
|
|
42
|
+
const edges = [];
|
|
43
|
+
for (const phase of phases) {
|
|
44
|
+
const deps = parseDependsOn(phase.depends_on);
|
|
45
|
+
for (const dep of deps) {
|
|
46
|
+
// Only include edges where the dependency exists in the node set
|
|
47
|
+
if (nodeIds.has(dep)) {
|
|
48
|
+
edges.push({ from: dep, to: phase.number });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return { nodes, edges };
|
|
53
|
+
}
|
|
54
|
+
// ─── computeParallelGroups ───────────────────────────────────────────────────
|
|
55
|
+
/**
|
|
56
|
+
* Compute parallel execution groups via Kahn's algorithm (topological sort by levels).
|
|
57
|
+
* Each group contains phases that can run concurrently because all their
|
|
58
|
+
* dependencies have been satisfied in previous groups.
|
|
59
|
+
* @param graph - Dependency graph
|
|
60
|
+
* @returns Array of arrays, each inner array is a set of phase IDs that can run together
|
|
61
|
+
*/
|
|
62
|
+
function computeParallelGroups(graph) {
|
|
63
|
+
if (graph.nodes.length === 0) {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
// Build adjacency list and in-degree map
|
|
67
|
+
const adjacency = new Map(); // from -> [to]
|
|
68
|
+
const inDegree = new Map();
|
|
69
|
+
for (const node of graph.nodes) {
|
|
70
|
+
adjacency.set(node.id, []);
|
|
71
|
+
inDegree.set(node.id, 0);
|
|
72
|
+
}
|
|
73
|
+
for (const edge of graph.edges) {
|
|
74
|
+
adjacency.get(edge.from).push(edge.to);
|
|
75
|
+
inDegree.set(edge.to, (inDegree.get(edge.to) || 0) + 1);
|
|
76
|
+
}
|
|
77
|
+
const groups = [];
|
|
78
|
+
const remaining = new Set(graph.nodes.map((n) => n.id));
|
|
79
|
+
while (remaining.size > 0) {
|
|
80
|
+
// Collect nodes with in-degree 0 among remaining nodes
|
|
81
|
+
const group = [];
|
|
82
|
+
for (const nodeId of remaining) {
|
|
83
|
+
if (inDegree.get(nodeId) === 0) {
|
|
84
|
+
group.push(nodeId);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
if (group.length === 0) {
|
|
88
|
+
// All remaining nodes have dependencies -- cycle exists
|
|
89
|
+
// Return what we have (caller should use detectCycle separately)
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
// Sort component-wise to avoid parseFloat('1.10') === parseFloat('1.1') collision
|
|
93
|
+
group.sort((a, b) => {
|
|
94
|
+
const pa = a.split('.').map(Number);
|
|
95
|
+
const pb = b.split('.').map(Number);
|
|
96
|
+
for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
|
|
97
|
+
const d = (pa[i] ?? 0) - (pb[i] ?? 0);
|
|
98
|
+
if (d !== 0)
|
|
99
|
+
return d;
|
|
100
|
+
}
|
|
101
|
+
return 0;
|
|
102
|
+
});
|
|
103
|
+
groups.push(group);
|
|
104
|
+
// Remove current group's nodes and decrement in-degrees
|
|
105
|
+
for (const nodeId of group) {
|
|
106
|
+
remaining.delete(nodeId);
|
|
107
|
+
for (const dependent of adjacency.get(nodeId)) {
|
|
108
|
+
if (remaining.has(dependent)) {
|
|
109
|
+
inDegree.set(dependent, inDegree.get(dependent) - 1);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return groups;
|
|
115
|
+
}
|
|
116
|
+
// ─── detectCycle ─────────────────────────────────────────────────────────────
|
|
117
|
+
/**
|
|
118
|
+
* Detect cycles in a dependency graph using DFS.
|
|
119
|
+
* @param graph - Dependency graph
|
|
120
|
+
* @returns Cycle path array if cycle found (e.g., ['27', '28', '27']), or null if acyclic
|
|
121
|
+
*/
|
|
122
|
+
function detectCycle(graph) {
|
|
123
|
+
// Build adjacency list (forward edges: from -> [to])
|
|
124
|
+
const adjacency = new Map();
|
|
125
|
+
for (const node of graph.nodes) {
|
|
126
|
+
adjacency.set(node.id, []);
|
|
127
|
+
}
|
|
128
|
+
for (const edge of graph.edges) {
|
|
129
|
+
adjacency.get(edge.from).push(edge.to);
|
|
130
|
+
}
|
|
131
|
+
// Node states: 0 = unvisited, 1 = visiting (in current DFS path), 2 = visited
|
|
132
|
+
const state = new Map();
|
|
133
|
+
for (const node of graph.nodes) {
|
|
134
|
+
state.set(node.id, 0);
|
|
135
|
+
}
|
|
136
|
+
// Track the DFS path for cycle reconstruction
|
|
137
|
+
const pathStack = [];
|
|
138
|
+
function dfs(nodeId) {
|
|
139
|
+
state.set(nodeId, 1); // visiting
|
|
140
|
+
pathStack.push(nodeId);
|
|
141
|
+
for (const neighbor of adjacency.get(nodeId)) {
|
|
142
|
+
if (state.get(neighbor) === 1) {
|
|
143
|
+
// Found a back-edge -- reconstruct cycle
|
|
144
|
+
const cycleStart = pathStack.indexOf(neighbor);
|
|
145
|
+
const cyclePath = pathStack.slice(cycleStart);
|
|
146
|
+
cyclePath.push(neighbor); // close the cycle
|
|
147
|
+
return cyclePath;
|
|
148
|
+
}
|
|
149
|
+
if (state.get(neighbor) === 0) {
|
|
150
|
+
const result = dfs(neighbor);
|
|
151
|
+
if (result)
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
pathStack.pop();
|
|
156
|
+
state.set(nodeId, 2); // visited
|
|
157
|
+
return null;
|
|
158
|
+
}
|
|
159
|
+
for (const node of graph.nodes) {
|
|
160
|
+
if (state.get(node.id) === 0) {
|
|
161
|
+
const cycle = dfs(node.id);
|
|
162
|
+
if (cycle)
|
|
163
|
+
return cycle;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
// ─── cmdPhaseAnalyzeDeps ─────────────────────────────────────────────────────
|
|
169
|
+
/**
|
|
170
|
+
* CLI command: Analyze phase dependencies from ROADMAP.md, build graph, compute parallel groups.
|
|
171
|
+
* Calls analyzeRoadmap(cwd) internally to reuse roadmap parsing (including depends_on extraction).
|
|
172
|
+
* @param cwd - Project working directory
|
|
173
|
+
* @param raw - Output raw text instead of JSON
|
|
174
|
+
* @returns void — outputs JSON or raw text to stdout via the output helper
|
|
175
|
+
*/
|
|
176
|
+
function cmdPhaseAnalyzeDeps(cwd, raw) {
|
|
177
|
+
const roadmapResult = analyzeRoadmap(cwd);
|
|
178
|
+
// Handle missing roadmap or error
|
|
179
|
+
if (roadmapResult.error || !roadmapResult.phases || roadmapResult.phases.length === 0) {
|
|
180
|
+
output({ error: roadmapResult.error || 'ROADMAP.md not found or empty' }, raw);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
const phases = roadmapResult.phases;
|
|
184
|
+
const graph = buildDependencyGraph(phases);
|
|
185
|
+
const cycle = detectCycle(graph);
|
|
186
|
+
if (cycle) {
|
|
187
|
+
const result = {
|
|
188
|
+
error: 'Circular dependency detected',
|
|
189
|
+
cycle_path: cycle,
|
|
190
|
+
has_cycle: true,
|
|
191
|
+
nodes: graph.nodes,
|
|
192
|
+
edges: graph.edges,
|
|
193
|
+
};
|
|
194
|
+
output(result, raw, `Circular dependency detected: ${cycle.join(' → ')}`);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
const parallelGroups = computeParallelGroups(graph);
|
|
198
|
+
const result = {
|
|
199
|
+
nodes: graph.nodes,
|
|
200
|
+
edges: graph.edges,
|
|
201
|
+
parallel_groups: parallelGroups,
|
|
202
|
+
has_cycle: false,
|
|
203
|
+
phase_count: graph.nodes.length,
|
|
204
|
+
group_count: parallelGroups.length,
|
|
205
|
+
};
|
|
206
|
+
output(result, raw, `${graph.nodes.length} phases, ${parallelGroups.length} parallel groups`);
|
|
207
|
+
}
|
|
208
|
+
// ─── buildArtifactDAG ────────────────────────────────────────────────────────
|
|
209
|
+
/**
|
|
210
|
+
* Build a directed artifact dependency graph from an array of plan artifacts.
|
|
211
|
+
*
|
|
212
|
+
* 1. Constructs a providers map: artifact_name → plan_id (first declaration wins).
|
|
213
|
+
* 2. Builds ArtifactDAGNode[] from each plan's provides/requires/integration_points.
|
|
214
|
+
* 3. Builds ArtifactDAGEdge[]: for each requires/integration_points entry, look up
|
|
215
|
+
* the provider and create a directed edge (consumer → producer).
|
|
216
|
+
* Integration edges are only created when a matching provider exists.
|
|
217
|
+
* 4. Runs Kahn's algorithm to produce a topologically sorted execution order.
|
|
218
|
+
*
|
|
219
|
+
* @param plans - Array of plan artifacts parsed from PLAN.md frontmatter
|
|
220
|
+
* @returns ArtifactDAG with nodes, edges, sorted_plans, and providers map
|
|
221
|
+
*/
|
|
222
|
+
function buildArtifactDAG(plans) {
|
|
223
|
+
// Step 1: Build providers map — first declaration wins
|
|
224
|
+
const providers = {};
|
|
225
|
+
for (const plan of plans) {
|
|
226
|
+
const planId = `${plan.phase}-${String(plan.plan).padStart(2, '0')}`;
|
|
227
|
+
for (const artifact of plan.provides) {
|
|
228
|
+
if (!(artifact in providers)) {
|
|
229
|
+
providers[artifact] = planId;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// Step 2: Build nodes
|
|
234
|
+
const nodes = plans.map((plan) => ({
|
|
235
|
+
id: `${plan.phase}-${String(plan.plan).padStart(2, '0')}`,
|
|
236
|
+
plan_number: plan.plan,
|
|
237
|
+
provides: plan.provides,
|
|
238
|
+
requires: plan.requires,
|
|
239
|
+
integration_points: plan.integration_points,
|
|
240
|
+
}));
|
|
241
|
+
// Step 3: Build edges
|
|
242
|
+
const edges = [];
|
|
243
|
+
const missing_requires = [];
|
|
244
|
+
for (const node of nodes) {
|
|
245
|
+
// Hard dependency edges from requires
|
|
246
|
+
for (const artifact of node.requires) {
|
|
247
|
+
const providerPlanId = providers[artifact];
|
|
248
|
+
if (providerPlanId === undefined) {
|
|
249
|
+
missing_requires.push(artifact);
|
|
250
|
+
}
|
|
251
|
+
else if (providerPlanId !== node.id) {
|
|
252
|
+
edges.push({
|
|
253
|
+
from_plan: node.id,
|
|
254
|
+
to_plan: providerPlanId,
|
|
255
|
+
artifact,
|
|
256
|
+
type: 'requires',
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// Soft dependency edges from integration_points (only when provider exists)
|
|
261
|
+
for (const artifact of node.integration_points) {
|
|
262
|
+
const providerPlanId = providers[artifact];
|
|
263
|
+
if (providerPlanId !== undefined && providerPlanId !== node.id) {
|
|
264
|
+
edges.push({
|
|
265
|
+
from_plan: node.id,
|
|
266
|
+
to_plan: providerPlanId,
|
|
267
|
+
artifact,
|
|
268
|
+
type: 'integration',
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
// Step 4: Kahn's topological sort
|
|
274
|
+
// adjacency: producer → [consumers] (edge from_plan depends on to_plan,
|
|
275
|
+
// so to_plan must come before from_plan; in Kahn's terms: to_plan → from_plan)
|
|
276
|
+
const adjacency = new Map();
|
|
277
|
+
const inDegree = new Map();
|
|
278
|
+
for (const node of nodes) {
|
|
279
|
+
adjacency.set(node.id, []);
|
|
280
|
+
inDegree.set(node.id, 0);
|
|
281
|
+
}
|
|
282
|
+
for (const edge of edges) {
|
|
283
|
+
// to_plan must execute before from_plan → edge in sort graph: to_plan → from_plan
|
|
284
|
+
const producers = adjacency.get(edge.to_plan);
|
|
285
|
+
if (producers !== undefined) {
|
|
286
|
+
producers.push(edge.from_plan);
|
|
287
|
+
}
|
|
288
|
+
inDegree.set(edge.from_plan, (inDegree.get(edge.from_plan) ?? 0) + 1);
|
|
289
|
+
}
|
|
290
|
+
const sorted_plans = [];
|
|
291
|
+
const remaining = new Set(nodes.map((n) => n.id));
|
|
292
|
+
while (remaining.size > 0) {
|
|
293
|
+
const batch = [];
|
|
294
|
+
for (const nodeId of remaining) {
|
|
295
|
+
if ((inDegree.get(nodeId) ?? 0) === 0) {
|
|
296
|
+
batch.push(nodeId);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
if (batch.length === 0) {
|
|
300
|
+
// Cycle prevents full sort — return partial (validateArtifactDAG will catch this)
|
|
301
|
+
break;
|
|
302
|
+
}
|
|
303
|
+
// Sort lexicographically for deterministic output (plan IDs are string slugs, not numeric)
|
|
304
|
+
batch.sort();
|
|
305
|
+
for (const nodeId of batch) {
|
|
306
|
+
sorted_plans.push(nodeId);
|
|
307
|
+
remaining.delete(nodeId);
|
|
308
|
+
for (const dependent of adjacency.get(nodeId)) {
|
|
309
|
+
if (remaining.has(dependent)) {
|
|
310
|
+
inDegree.set(dependent, inDegree.get(dependent) - 1);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return { nodes, edges, sorted_plans, providers, missing_requires };
|
|
316
|
+
}
|
|
317
|
+
// ─── validateArtifactDAG ─────────────────────────────────────────────────────
|
|
318
|
+
/**
|
|
319
|
+
* Validate an ArtifactDAG for cycles, missing dependencies, unused provides, and duplicates.
|
|
320
|
+
*
|
|
321
|
+
* 1. Cycle detection via DFS: walks the requires/integration dependency graph, collecting
|
|
322
|
+
* all distinct cycles found (not just the first).
|
|
323
|
+
* 2. Missing dependency detection: for each plan's requires, checks if dag.providers has
|
|
324
|
+
* a matching entry.
|
|
325
|
+
* 3. Unused provides warning: for each artifact in providers, checks if any plan requires
|
|
326
|
+
* or integrates it.
|
|
327
|
+
* 4. Duplicate provides warning: when multiple plans declare the same provides entry.
|
|
328
|
+
*
|
|
329
|
+
* @param dag - The artifact DAG to validate
|
|
330
|
+
* @param plans - Original plan artifacts (for duplicate provides detection)
|
|
331
|
+
* @returns ArtifactDAGValidation with valid flag, cycles, missing_deps, and warnings
|
|
332
|
+
*/
|
|
333
|
+
function validateArtifactDAG(dag, plans) {
|
|
334
|
+
const cycles = [];
|
|
335
|
+
const missing_deps = [];
|
|
336
|
+
const warnings = [];
|
|
337
|
+
// Step 1: Cycle detection via DFS on the dependency graph
|
|
338
|
+
// Build adjacency: from_plan → [to_plan] (consumer → producer)
|
|
339
|
+
const cycleAdj = new Map();
|
|
340
|
+
for (const node of dag.nodes) {
|
|
341
|
+
cycleAdj.set(node.id, []);
|
|
342
|
+
}
|
|
343
|
+
for (const edge of dag.edges) {
|
|
344
|
+
const neighbors = cycleAdj.get(edge.from_plan);
|
|
345
|
+
if (neighbors !== undefined) {
|
|
346
|
+
neighbors.push(edge.to_plan);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
// DFS state: 0 = unvisited, 1 = visiting, 2 = visited
|
|
350
|
+
const state = new Map();
|
|
351
|
+
for (const node of dag.nodes) {
|
|
352
|
+
state.set(node.id, 0);
|
|
353
|
+
}
|
|
354
|
+
const pathStack = [];
|
|
355
|
+
const seenCycles = new Set();
|
|
356
|
+
function dfsCollect(nodeId) {
|
|
357
|
+
state.set(nodeId, 1);
|
|
358
|
+
pathStack.push(nodeId);
|
|
359
|
+
for (const neighbor of (cycleAdj.get(nodeId) ?? [])) {
|
|
360
|
+
if (state.get(neighbor) === 1) {
|
|
361
|
+
// Found a back-edge — reconstruct and deduplicate the cycle
|
|
362
|
+
const cycleStart = pathStack.indexOf(neighbor);
|
|
363
|
+
const cyclePath = [...pathStack.slice(cycleStart), neighbor];
|
|
364
|
+
// Canonical form: rotate so lexicographically smallest node is first
|
|
365
|
+
const minIdx = cyclePath.slice(0, -1).reduce((best, id, idx) => (id < cyclePath[best] ? idx : best), 0);
|
|
366
|
+
const canonical = [
|
|
367
|
+
...cyclePath.slice(minIdx, -1),
|
|
368
|
+
...cyclePath.slice(0, minIdx),
|
|
369
|
+
cyclePath[minIdx],
|
|
370
|
+
];
|
|
371
|
+
const key = canonical.join(',');
|
|
372
|
+
if (!seenCycles.has(key)) {
|
|
373
|
+
seenCycles.add(key);
|
|
374
|
+
cycles.push(canonical);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
else if (state.get(neighbor) === 0) {
|
|
378
|
+
dfsCollect(neighbor);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
pathStack.pop();
|
|
382
|
+
state.set(nodeId, 2);
|
|
383
|
+
}
|
|
384
|
+
for (const node of dag.nodes) {
|
|
385
|
+
if (state.get(node.id) === 0) {
|
|
386
|
+
dfsCollect(node.id);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
// Step 2: Missing dependency detection
|
|
390
|
+
for (const node of dag.nodes) {
|
|
391
|
+
for (const artifact of node.requires) {
|
|
392
|
+
if (!(artifact in dag.providers)) {
|
|
393
|
+
missing_deps.push({ plan: node.id, artifact });
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
// Step 3: Unused provides warning
|
|
398
|
+
// Collect all referenced artifacts across all plans
|
|
399
|
+
const referencedArtifacts = new Set();
|
|
400
|
+
for (const node of dag.nodes) {
|
|
401
|
+
for (const a of node.requires) {
|
|
402
|
+
referencedArtifacts.add(a);
|
|
403
|
+
}
|
|
404
|
+
for (const a of node.integration_points) {
|
|
405
|
+
referencedArtifacts.add(a);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
for (const artifact of Object.keys(dag.providers)) {
|
|
409
|
+
if (!referencedArtifacts.has(artifact)) {
|
|
410
|
+
warnings.push(`Unused provides: "${artifact}" (provided by ${dag.providers[artifact]}, not required by any plan)`);
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
// Step 4: Duplicate provides warning
|
|
414
|
+
const providerCount = new Map(); // artifact → [plan_ids]
|
|
415
|
+
for (const plan of plans) {
|
|
416
|
+
const planId = `${plan.phase}-${String(plan.plan).padStart(2, '0')}`;
|
|
417
|
+
for (const artifact of plan.provides) {
|
|
418
|
+
const existing = providerCount.get(artifact);
|
|
419
|
+
if (existing !== undefined) {
|
|
420
|
+
existing.push(planId);
|
|
421
|
+
}
|
|
422
|
+
else {
|
|
423
|
+
providerCount.set(artifact, [planId]);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
for (const [artifact, planIds] of providerCount) {
|
|
428
|
+
if (planIds.length > 1) {
|
|
429
|
+
warnings.push(`Duplicate provides: "${artifact}" declared by ${planIds.join(', ')} (first provider wins)`);
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
return {
|
|
433
|
+
valid: cycles.length === 0 && missing_deps.length === 0,
|
|
434
|
+
cycles,
|
|
435
|
+
missing_deps,
|
|
436
|
+
warnings,
|
|
437
|
+
};
|
|
438
|
+
}
|
|
439
|
+
// ─── cmdPhaseDepsVisualize ───────────────────────────────────────────────────
|
|
440
|
+
/**
|
|
441
|
+
* Render a phase dependency graph as a Mermaid flowchart or ASCII tree.
|
|
442
|
+
*
|
|
443
|
+
* Reads ROADMAP.md for the project, builds the dependency graph using the same
|
|
444
|
+
* Kahn's algorithm as cmdPhaseAnalyzeDeps, then formats for human consumption.
|
|
445
|
+
*
|
|
446
|
+
* Mermaid format: valid `flowchart LR` block (paste into any Mermaid renderer).
|
|
447
|
+
* ASCII format: indented tree showing parallel groups.
|
|
448
|
+
*
|
|
449
|
+
* @param cwd - Project working directory
|
|
450
|
+
* @param opts - Options: milestone (override), format ('mermaid' | 'ascii')
|
|
451
|
+
* @param raw - Output raw text instead of JSON
|
|
452
|
+
*/
|
|
453
|
+
function cmdPhaseDepsVisualize(cwd, opts, raw) {
|
|
454
|
+
const roadmapResult = analyzeRoadmap(cwd);
|
|
455
|
+
if (roadmapResult.error || !roadmapResult.phases || roadmapResult.phases.length === 0) {
|
|
456
|
+
output({ error: roadmapResult.error || 'ROADMAP.md not found or empty' }, raw);
|
|
457
|
+
return;
|
|
458
|
+
}
|
|
459
|
+
let phases = roadmapResult.phases;
|
|
460
|
+
// Apply milestone filter if specified (match phase names containing milestone string)
|
|
461
|
+
const milestoneFilter = opts.milestone;
|
|
462
|
+
if (milestoneFilter) {
|
|
463
|
+
phases = phases.filter((p) => p.name.toLowerCase().includes(milestoneFilter.toLowerCase()) ||
|
|
464
|
+
String(p.number).startsWith(milestoneFilter));
|
|
465
|
+
if (phases.length === 0) {
|
|
466
|
+
output({ error: `No phases found matching milestone "${milestoneFilter}"` }, raw);
|
|
467
|
+
return;
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
const graph = buildDependencyGraph(phases);
|
|
471
|
+
const cycle = detectCycle(graph);
|
|
472
|
+
const parallelGroups = computeParallelGroups(graph);
|
|
473
|
+
const format = opts.format || 'mermaid';
|
|
474
|
+
let diagram;
|
|
475
|
+
if (format === 'ascii') {
|
|
476
|
+
const lines = [`Phase Dependency Graph (${graph.nodes.length} phases, ${parallelGroups.length} groups)`];
|
|
477
|
+
lines.push('');
|
|
478
|
+
parallelGroups.forEach((group, i) => {
|
|
479
|
+
lines.push(`Group ${i + 1} [parallel]:`);
|
|
480
|
+
for (const id of group) {
|
|
481
|
+
const node = graph.nodes.find((n) => n.id === id);
|
|
482
|
+
const deps = graph.edges.filter((e) => e.to === id).map((e) => e.from);
|
|
483
|
+
const depStr = deps.length > 0 ? ` ← depends on: ${deps.join(', ')}` : '';
|
|
484
|
+
lines.push(` Phase ${id}: ${node?.name || ''}${depStr}`);
|
|
485
|
+
}
|
|
486
|
+
});
|
|
487
|
+
if (cycle) {
|
|
488
|
+
lines.push('');
|
|
489
|
+
lines.push(`⚠ Cycle detected: ${cycle.join(' → ')}`);
|
|
490
|
+
}
|
|
491
|
+
diagram = lines.join('\n');
|
|
492
|
+
}
|
|
493
|
+
else {
|
|
494
|
+
// Mermaid flowchart LR
|
|
495
|
+
const lines = ['flowchart LR'];
|
|
496
|
+
for (const node of graph.nodes) {
|
|
497
|
+
const label = `Phase ${node.id}: ${node.name.replace(/"/g, "'")}`;
|
|
498
|
+
lines.push(` ${_mermaidId(node.id)}["${label}"]`);
|
|
499
|
+
}
|
|
500
|
+
for (const edge of graph.edges) {
|
|
501
|
+
lines.push(` ${_mermaidId(edge.from)} --> ${_mermaidId(edge.to)}`);
|
|
502
|
+
}
|
|
503
|
+
if (cycle) {
|
|
504
|
+
lines.push(` %% WARNING: cycle detected ${cycle.join(' -> ')}`);
|
|
505
|
+
}
|
|
506
|
+
diagram = lines.join('\n');
|
|
507
|
+
}
|
|
508
|
+
output({
|
|
509
|
+
format,
|
|
510
|
+
phase_count: graph.nodes.length,
|
|
511
|
+
group_count: parallelGroups.length,
|
|
512
|
+
has_cycle: Boolean(cycle),
|
|
513
|
+
cycle_path: cycle ?? null,
|
|
514
|
+
diagram,
|
|
515
|
+
}, raw, diagram);
|
|
516
|
+
}
|
|
517
|
+
/** Sanitize a phase ID for use as a Mermaid node identifier. */
|
|
518
|
+
function _mermaidId(id) {
|
|
519
|
+
return `ph${id.replace(/\./g, '_')}`;
|
|
520
|
+
}
|
|
521
|
+
/**
|
|
522
|
+
* Read all *-PLAN.md files in phaseDir and group them by their `wave` frontmatter field.
|
|
523
|
+
* Returns an array of wave groups sorted by wave number, each group containing the plan entries.
|
|
524
|
+
* Plans without a wave field are assigned to wave 1.
|
|
525
|
+
*
|
|
526
|
+
* @param phaseDir - Path to the phase directory containing PLAN.md files
|
|
527
|
+
* @returns Array of wave groups: [{wave, plans: PlanWaveEntry[]}]
|
|
528
|
+
*/
|
|
529
|
+
function buildWaves(phaseDir) {
|
|
530
|
+
let files;
|
|
531
|
+
try {
|
|
532
|
+
files = fs.readdirSync(phaseDir).filter((f) => f.endsWith('-PLAN.md') || f === 'PLAN.md').sort();
|
|
533
|
+
}
|
|
534
|
+
catch {
|
|
535
|
+
return [];
|
|
536
|
+
}
|
|
537
|
+
const waveMap = new Map();
|
|
538
|
+
for (const file of files) {
|
|
539
|
+
const content = (() => {
|
|
540
|
+
try {
|
|
541
|
+
return fs.readFileSync(path.join(phaseDir, file), 'utf-8');
|
|
542
|
+
}
|
|
543
|
+
catch {
|
|
544
|
+
return null;
|
|
545
|
+
}
|
|
546
|
+
})();
|
|
547
|
+
if (!content)
|
|
548
|
+
continue;
|
|
549
|
+
const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
550
|
+
const fm = fmMatch ? fmMatch[1] : '';
|
|
551
|
+
const waveMatch = fm.match(/^wave:\s*(\d+)/m);
|
|
552
|
+
const waveNum = waveMatch ? parseInt(waveMatch[1], 10) : 1;
|
|
553
|
+
const agentMatch = fm.match(/^agent_type:\s*(.+)$/m);
|
|
554
|
+
const agentType = agentMatch ? agentMatch[1].trim() : 'grd-executor';
|
|
555
|
+
const filesMatch = fm.match(/^files_modified:\s*\[([^\]]*)\]/m);
|
|
556
|
+
const targetFiles = filesMatch
|
|
557
|
+
? filesMatch[1].split(',').map((f) => f.trim()).filter(Boolean)
|
|
558
|
+
: [];
|
|
559
|
+
const entry = { plan_file: file, wave: waveNum, agent_type: agentType, target_files: targetFiles };
|
|
560
|
+
const bucket = waveMap.get(waveNum) ?? [];
|
|
561
|
+
bucket.push(entry);
|
|
562
|
+
waveMap.set(waveNum, bucket);
|
|
563
|
+
}
|
|
564
|
+
return Array.from(waveMap.entries())
|
|
565
|
+
.sort(([a], [b]) => a - b)
|
|
566
|
+
.map(([wave, plans]) => ({ wave, plans }));
|
|
567
|
+
}
|
|
568
|
+
// Effort-to-token band map for the dry-run preview.
|
|
569
|
+
const EFFORT_TOKEN_BANDS = {
|
|
570
|
+
high: '~200K tokens',
|
|
571
|
+
medium: '~80K tokens',
|
|
572
|
+
low: '~30K tokens',
|
|
573
|
+
};
|
|
574
|
+
/**
|
|
575
|
+
* CLI command: Dry-run preview of gd execute-phase <N>.
|
|
576
|
+
* Reads plan files, groups by wave, and prints a wave table without spawning agents.
|
|
577
|
+
*
|
|
578
|
+
* @param cwd - Project working directory
|
|
579
|
+
* @param phase - Phase number/name
|
|
580
|
+
* @param raw - Output raw text instead of JSON
|
|
581
|
+
*/
|
|
582
|
+
function cmdExecutePhaseDryRun(cwd, phase, raw) {
|
|
583
|
+
const phaseInfo = findPhaseInternal(cwd, phase);
|
|
584
|
+
if (!phaseInfo || !phaseInfo.found) {
|
|
585
|
+
_depsError(`Phase ${phase} not found`);
|
|
586
|
+
}
|
|
587
|
+
const waves = buildWaves(path.join(cwd, phaseInfo.directory));
|
|
588
|
+
if (waves.length === 0) {
|
|
589
|
+
output({ dry_run: true, wave_count: 0, waves: [] }, raw, 'No plan files found in phase directory');
|
|
590
|
+
return;
|
|
591
|
+
}
|
|
592
|
+
const rows = waves.map(({ wave, plans }) => ({
|
|
593
|
+
wave,
|
|
594
|
+
agent_count: plans.length,
|
|
595
|
+
agents: plans.map((p) => ({
|
|
596
|
+
plan_file: p.plan_file,
|
|
597
|
+
agent_type: p.agent_type,
|
|
598
|
+
estimated_tokens: EFFORT_TOKEN_BANDS['medium'],
|
|
599
|
+
target_files: p.target_files,
|
|
600
|
+
})),
|
|
601
|
+
}));
|
|
602
|
+
if (raw) {
|
|
603
|
+
const lines = [`Dry-run: Phase ${phase} — ${waves.length} wave(s), ${waves.reduce((s, w) => s + w.plans.length, 0)} plan(s)\n`];
|
|
604
|
+
for (const row of rows) {
|
|
605
|
+
lines.push(`Wave ${row.wave} (${row.agent_count} agent${row.agent_count !== 1 ? 's' : ''}):`);
|
|
606
|
+
for (const a of row.agents) {
|
|
607
|
+
const files = a.target_files.length > 0 ? ` → ${a.target_files.join(', ')}` : '';
|
|
608
|
+
lines.push(` ${a.plan_file} [${a.agent_type}] ${a.estimated_tokens}${files}`);
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
output({ dry_run: true, wave_count: waves.length, waves: rows }, raw, lines.join('\n'));
|
|
612
|
+
}
|
|
613
|
+
else {
|
|
614
|
+
output({ dry_run: true, phase, wave_count: waves.length, waves: rows }, raw, `${waves.length} waves, ${waves.reduce((s, w) => s + w.plans.length, 0)} plans`);
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
// ─── Exports ─────────────────────────────────────────────────────────────────
|
|
618
|
+
module.exports = {
|
|
619
|
+
parseDependsOn,
|
|
620
|
+
buildDependencyGraph,
|
|
621
|
+
computeParallelGroups,
|
|
622
|
+
detectCycle,
|
|
623
|
+
cmdPhaseAnalyzeDeps,
|
|
624
|
+
cmdPhaseDepsVisualize,
|
|
625
|
+
buildArtifactDAG,
|
|
626
|
+
validateArtifactDAG,
|
|
627
|
+
buildWaves,
|
|
628
|
+
cmdExecutePhaseDryRun,
|
|
629
|
+
};
|
|
630
|
+
//# sourceMappingURL=deps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deps.js","sourceRoot":"","sources":["../../lib/deps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discussion.d.ts","sourceRoot":"","sources":["../../lib/discussion.ts"],"names":[],"mappings":""}
|