@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
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* GRD Phase/Complete -- Core phase-completion logic.
|
|
5
|
+
*
|
|
6
|
+
* Extracted from lib/phase.ts as part of Spec 3 of the
|
|
7
|
+
* gsd-2-selective-adoption milestone. This module owns the "finalize a
|
|
8
|
+
* phase" side-effects: preflight gate check, ROADMAP.md checkbox +
|
|
9
|
+
* progress-table rewrite, STATE.md field rewrite, quality analysis,
|
|
10
|
+
* cleanup plan generation, and next-phase discovery.
|
|
11
|
+
*
|
|
12
|
+
* Two exports:
|
|
13
|
+
* - _phaseCompleteCore: the existing core, used by cmdPhaseComplete
|
|
14
|
+
* and cmdPhaseBatchComplete in lib/phase.ts.
|
|
15
|
+
* - completePhaseAfterPostPipeline: new autopilot-safe wrapper that
|
|
16
|
+
* catches all errors and returns null on failure instead of
|
|
17
|
+
* throwing. Used by lib/autopilot.ts after the post-pipeline step.
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
import * as fs from 'fs';
|
|
21
|
+
import * as path from 'path';
|
|
22
|
+
import type {
|
|
23
|
+
PhaseInfo,
|
|
24
|
+
PreflightResult,
|
|
25
|
+
QualityAnalysisResult,
|
|
26
|
+
CleanupPlanResult,
|
|
27
|
+
PhaseCompleteOptions,
|
|
28
|
+
PhaseCompleteResult,
|
|
29
|
+
GrdConfig,
|
|
30
|
+
GateViolation,
|
|
31
|
+
} from './types';
|
|
32
|
+
import type { Scheduler } from './scheduler';
|
|
33
|
+
|
|
34
|
+
const { runPreflightGates } = require('./gates') as {
|
|
35
|
+
runPreflightGates: (cwd: string, command: string, opts?: { phase?: string }) => PreflightResult;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const { findPhaseInternal } = require('./utils') as {
|
|
39
|
+
findPhaseInternal: (cwd: string, phase: string) => PhaseInfo | null;
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const { phasesDir: getPhasesDirPath } = require('./paths') as {
|
|
43
|
+
phasesDir: (cwd: string) => string;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const {
|
|
47
|
+
readRoadmapFile,
|
|
48
|
+
writeRoadmapFile,
|
|
49
|
+
readStateFile,
|
|
50
|
+
writeStateFile,
|
|
51
|
+
clearRoadmapCache,
|
|
52
|
+
clearStateCache,
|
|
53
|
+
} = require('./phase-io') as {
|
|
54
|
+
readRoadmapFile: (p: string) => string;
|
|
55
|
+
writeRoadmapFile: (p: string, content: string) => void;
|
|
56
|
+
readStateFile: (p: string) => string;
|
|
57
|
+
writeStateFile: (p: string, content: string) => void;
|
|
58
|
+
clearRoadmapCache: (filePath?: string) => void;
|
|
59
|
+
clearStateCache: (filePath?: string) => void;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
const { runQualityAnalysis, generateCleanupPlan } = require('./cleanup') as {
|
|
63
|
+
runQualityAnalysis: (cwd: string, phaseNum: string) => QualityAnalysisResult;
|
|
64
|
+
generateCleanupPlan: (
|
|
65
|
+
cwd: string,
|
|
66
|
+
phaseNum: string,
|
|
67
|
+
report: QualityAnalysisResult
|
|
68
|
+
) => CleanupPlanResult;
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const { loadConfig } = require('./utils') as {
|
|
72
|
+
loadConfig: (cwd: string) => GrdConfig;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
const { attemptLlmFallbackCompletion } = require('./phase-complete-llm') as {
|
|
76
|
+
attemptLlmFallbackCompletion: (
|
|
77
|
+
cwd: string,
|
|
78
|
+
phaseNum: string,
|
|
79
|
+
scheduler: Scheduler | null,
|
|
80
|
+
failure: Error | { gate_errors?: GateViolation[] }
|
|
81
|
+
) => Promise<PhaseCompleteResult | null>;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Resolves the phase succession context: plan counts, next phase, and last-phase
|
|
86
|
+
* flag. Shared by _phaseCompleteCore and the LLM fallback's _buildSyntheticResult
|
|
87
|
+
* so both produce consistent result fields.
|
|
88
|
+
*
|
|
89
|
+
* @param cwd - Project working directory
|
|
90
|
+
* @param phaseNum - Phase number being completed
|
|
91
|
+
*/
|
|
92
|
+
export function _resolvePhaseSuccession(
|
|
93
|
+
cwd: string,
|
|
94
|
+
phaseNum: string
|
|
95
|
+
): {
|
|
96
|
+
phaseName: string;
|
|
97
|
+
plansExecuted: string;
|
|
98
|
+
nextPhaseNum: string | null;
|
|
99
|
+
nextPhaseName: string | null;
|
|
100
|
+
isLastPhase: boolean;
|
|
101
|
+
} {
|
|
102
|
+
const phaseInfo = findPhaseInternal(cwd, phaseNum);
|
|
103
|
+
const phaseName = phaseInfo?.phase_name ?? '(unknown)';
|
|
104
|
+
const planCount = phaseInfo?.plans?.length ?? 0;
|
|
105
|
+
const summaryCount = phaseInfo?.summaries?.length ?? 0;
|
|
106
|
+
const plansExecuted = `${summaryCount}/${planCount}`;
|
|
107
|
+
|
|
108
|
+
const basePhasesDir = getPhasesDirPath(cwd);
|
|
109
|
+
let nextPhaseNum: string | null = null;
|
|
110
|
+
let nextPhaseName: string | null = null;
|
|
111
|
+
let isLastPhase = true;
|
|
112
|
+
try {
|
|
113
|
+
const entries = fs.readdirSync(basePhasesDir, { withFileTypes: true }) as import('fs').Dirent[];
|
|
114
|
+
const dirs = entries
|
|
115
|
+
.filter((e: import('fs').Dirent) => e.isDirectory())
|
|
116
|
+
.map((e: import('fs').Dirent) => e.name)
|
|
117
|
+
.sort();
|
|
118
|
+
const currentFloat = parseFloat(phaseNum);
|
|
119
|
+
for (const dir of dirs) {
|
|
120
|
+
const m = dir.match(/^(\d+(?:\.\d+)?)-?(.*)/);
|
|
121
|
+
if (m && parseFloat(m[1]) > currentFloat) {
|
|
122
|
+
nextPhaseNum = m[1];
|
|
123
|
+
nextPhaseName = m[2] || null;
|
|
124
|
+
isLastPhase = false;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
} catch {
|
|
129
|
+
// phases dir missing — leave isLastPhase = true
|
|
130
|
+
}
|
|
131
|
+
return { phaseName, plansExecuted, nextPhaseNum, nextPhaseName, isLastPhase };
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Core logic for phase completion -- shared by cmdPhaseComplete and
|
|
136
|
+
* cmdPhaseBatchComplete. Moved from lib/phase.ts in Spec 3 without
|
|
137
|
+
* behavior changes.
|
|
138
|
+
*
|
|
139
|
+
* @param cwd - Project working directory
|
|
140
|
+
* @param phaseNum - Phase number to mark complete
|
|
141
|
+
* @param options - Completion options (dryRun, force, skip_cleanup)
|
|
142
|
+
*/
|
|
143
|
+
export function _phaseCompleteCore(
|
|
144
|
+
cwd: string,
|
|
145
|
+
phaseNum: string,
|
|
146
|
+
options?: PhaseCompleteOptions
|
|
147
|
+
): PhaseCompleteResult {
|
|
148
|
+
const dryRun: boolean = (options && options.dryRun) || false;
|
|
149
|
+
|
|
150
|
+
// Dry-run: return preview without modifying anything
|
|
151
|
+
if (dryRun) {
|
|
152
|
+
const phaseInfo: PhaseInfo | null = findPhaseInternal(cwd, phaseNum);
|
|
153
|
+
return {
|
|
154
|
+
dry_run: true,
|
|
155
|
+
would_complete_phase: phaseNum,
|
|
156
|
+
phase_found: !!phaseInfo,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Spec 3B cleanup: invalidate caches in case a prior LLM fallback
|
|
161
|
+
// in the same process wrote these files directly.
|
|
162
|
+
clearRoadmapCache(path.join(cwd, '.planning', 'ROADMAP.md'));
|
|
163
|
+
clearStateCache(path.join(cwd, '.planning', 'STATE.md'));
|
|
164
|
+
|
|
165
|
+
// Pre-flight gate checks
|
|
166
|
+
const gates: PreflightResult = runPreflightGates(cwd, 'phase-complete', {
|
|
167
|
+
phase: phaseNum,
|
|
168
|
+
});
|
|
169
|
+
if (!gates.passed) {
|
|
170
|
+
return {
|
|
171
|
+
gate_failed: true,
|
|
172
|
+
gate_errors: gates.errors,
|
|
173
|
+
gate_warnings: gates.warnings,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
const roadmapPath: string = path.join(cwd, '.planning', 'ROADMAP.md');
|
|
178
|
+
const statePath: string = path.join(cwd, '.planning', 'STATE.md');
|
|
179
|
+
const today: string = new Date().toISOString().split('T')[0];
|
|
180
|
+
|
|
181
|
+
// Verify phase info
|
|
182
|
+
const phaseInfo: PhaseInfo | null = findPhaseInternal(cwd, phaseNum);
|
|
183
|
+
if (!phaseInfo) {
|
|
184
|
+
throw new Error(`Phase ${phaseNum} not found`);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
const planCount: number = phaseInfo.plans.length;
|
|
188
|
+
const summaryCount: number = phaseInfo.summaries.length;
|
|
189
|
+
|
|
190
|
+
// Update ROADMAP.md: mark phase complete
|
|
191
|
+
if (fs.existsSync(roadmapPath)) {
|
|
192
|
+
let roadmapContent: string = readRoadmapFile(roadmapPath);
|
|
193
|
+
|
|
194
|
+
// Checkbox: - [ ] Phase N: -> - [x] Phase N: (...completed DATE)
|
|
195
|
+
const checkboxPattern: RegExp = new RegExp(
|
|
196
|
+
`(-\\s*\\[)[ ](\\]\\s*.*Phase\\s+${phaseNum.replace(/\./g, '\\.')}[:\\s][^\\n]*)`,
|
|
197
|
+
'i'
|
|
198
|
+
);
|
|
199
|
+
roadmapContent = roadmapContent.replace(checkboxPattern, `$1x$2 (completed ${today})`);
|
|
200
|
+
|
|
201
|
+
// Progress table: update Status to Complete, add date
|
|
202
|
+
const phaseEscaped: string = phaseNum.replace(/\./g, '\\.');
|
|
203
|
+
const tablePattern: RegExp = new RegExp(
|
|
204
|
+
`(\\|\\s*${phaseEscaped}\\.?\\s[^|]*\\|[^|]*\\|)\\s*[^|]*(\\|)\\s*[^|]*(\\|)`,
|
|
205
|
+
'i'
|
|
206
|
+
);
|
|
207
|
+
roadmapContent = roadmapContent.replace(tablePattern, `$1 Complete $2 ${today} $3`);
|
|
208
|
+
|
|
209
|
+
// Update plan count in phase section
|
|
210
|
+
const planCountPattern: RegExp = new RegExp(
|
|
211
|
+
`(#{2,}\\s*Phase\\s+${phaseEscaped}[\\s\\S]*?\\*\\*Plans:\\*\\*\\s*)[^\\n]+`,
|
|
212
|
+
'i'
|
|
213
|
+
);
|
|
214
|
+
roadmapContent = roadmapContent.replace(
|
|
215
|
+
planCountPattern,
|
|
216
|
+
`$1${summaryCount}/${planCount} plans complete`
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
writeRoadmapFile(roadmapPath, roadmapContent);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Find next phase using shared helper
|
|
223
|
+
const { nextPhaseNum, nextPhaseName, isLastPhase } = _resolvePhaseSuccession(cwd, phaseNum);
|
|
224
|
+
|
|
225
|
+
// Update STATE.md
|
|
226
|
+
if (fs.existsSync(statePath)) {
|
|
227
|
+
let stateContent: string = readStateFile(statePath);
|
|
228
|
+
|
|
229
|
+
// Update Current Phase
|
|
230
|
+
stateContent = stateContent.replace(
|
|
231
|
+
/(\*\*Current Phase:\*\*\s*).*/,
|
|
232
|
+
`$1${nextPhaseNum || phaseNum}`
|
|
233
|
+
);
|
|
234
|
+
|
|
235
|
+
// Update Current Phase Name
|
|
236
|
+
if (nextPhaseName) {
|
|
237
|
+
stateContent = stateContent.replace(
|
|
238
|
+
/(\*\*Current Phase Name:\*\*\s*).*/,
|
|
239
|
+
`$1${nextPhaseName.replace(/-/g, ' ')}`
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Update Status
|
|
244
|
+
stateContent = stateContent.replace(
|
|
245
|
+
/(\*\*Status:\*\*\s*).*/,
|
|
246
|
+
`$1${isLastPhase ? 'Milestone complete' : 'Ready to plan'}`
|
|
247
|
+
);
|
|
248
|
+
|
|
249
|
+
// Update Current Plan
|
|
250
|
+
stateContent = stateContent.replace(/(\*\*Current Plan:\*\*\s*).*/, `$1Not started`);
|
|
251
|
+
|
|
252
|
+
// Update Last Activity
|
|
253
|
+
stateContent = stateContent.replace(/(\*\*Last Activity:\*\*\s*).*/, `$1${today}`);
|
|
254
|
+
|
|
255
|
+
// Update Last Activity Description
|
|
256
|
+
stateContent = stateContent.replace(
|
|
257
|
+
/(\*\*Last Activity Description:\*\*\s*).*/,
|
|
258
|
+
`$1Phase ${phaseNum} complete${nextPhaseNum ? `, transitioned to Phase ${nextPhaseNum}` : ''}`
|
|
259
|
+
);
|
|
260
|
+
|
|
261
|
+
writeStateFile(statePath, stateContent);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Run quality analysis if enabled
|
|
265
|
+
let qualityReport: QualityAnalysisResult | null = null;
|
|
266
|
+
try {
|
|
267
|
+
const qaResult: QualityAnalysisResult = runQualityAnalysis(cwd, phaseNum);
|
|
268
|
+
if (!qaResult.skipped) {
|
|
269
|
+
qualityReport = qaResult;
|
|
270
|
+
}
|
|
271
|
+
} catch {
|
|
272
|
+
// Quality analysis is non-blocking; swallow errors
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// Generate cleanup plan if quality issues exceed threshold
|
|
276
|
+
let cleanupPlanResult: CleanupPlanResult | null = null;
|
|
277
|
+
if (qualityReport && !qualityReport.skipped) {
|
|
278
|
+
try {
|
|
279
|
+
cleanupPlanResult = generateCleanupPlan(cwd, phaseNum, qualityReport);
|
|
280
|
+
} catch {
|
|
281
|
+
// Cleanup plan generation is non-blocking
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
return {
|
|
286
|
+
completed_phase: phaseNum,
|
|
287
|
+
phase_name: phaseInfo.phase_name,
|
|
288
|
+
plans_executed: `${summaryCount}/${planCount}`,
|
|
289
|
+
next_phase: nextPhaseNum,
|
|
290
|
+
next_phase_name: nextPhaseName,
|
|
291
|
+
is_last_phase: isLastPhase,
|
|
292
|
+
date: today,
|
|
293
|
+
roadmap_updated: fs.existsSync(roadmapPath),
|
|
294
|
+
state_updated: fs.existsSync(statePath),
|
|
295
|
+
...(qualityReport ? { quality_report: qualityReport } : {}),
|
|
296
|
+
...(cleanupPlanResult ? { cleanup_plan_generated: cleanupPlanResult } : {}),
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* Autopilot-safe wrapper around _phaseCompleteCore. Runs the existing
|
|
302
|
+
* phase-complete gates and core logic, catches any error, logs it to
|
|
303
|
+
* stderr, and returns null on failure instead of throwing.
|
|
304
|
+
*
|
|
305
|
+
* Autopilot calls this after a successful post-pipeline step; a
|
|
306
|
+
* completion failure is logged as a status marker but does not crash
|
|
307
|
+
* the autopilot run.
|
|
308
|
+
*
|
|
309
|
+
* When the mechanical path fails and config.phase_complete_llm_fallback
|
|
310
|
+
* is true, delegates to attemptLlmFallbackCompletion (Spec 3B).
|
|
311
|
+
*
|
|
312
|
+
* @param cwd - project root
|
|
313
|
+
* @param phaseNum - phase number string (e.g., '03' or '3')
|
|
314
|
+
* @param scheduler - optional scheduler for LLM fallback (Spec 3B)
|
|
315
|
+
* @returns PhaseCompleteResult on success, null on any failure
|
|
316
|
+
*/
|
|
317
|
+
export async function completePhaseAfterPostPipeline(
|
|
318
|
+
cwd: string,
|
|
319
|
+
phaseNum: string,
|
|
320
|
+
scheduler?: Scheduler | null
|
|
321
|
+
): Promise<PhaseCompleteResult | null> {
|
|
322
|
+
let mechanicalFailure: Error | { gate_errors?: GateViolation[] } | undefined;
|
|
323
|
+
|
|
324
|
+
try {
|
|
325
|
+
const result = _phaseCompleteCore(cwd, phaseNum);
|
|
326
|
+
if (result.gate_failed) {
|
|
327
|
+
mechanicalFailure = { gate_errors: result.gate_errors };
|
|
328
|
+
const msgs = (result.gate_errors || []).map((g: { message: string }) => g.message).join('; ');
|
|
329
|
+
process.stderr.write(
|
|
330
|
+
`[autopilot] phase-finalize: gates failed for phase ${phaseNum}: ${msgs}\n`
|
|
331
|
+
);
|
|
332
|
+
} else if (result.dry_run) {
|
|
333
|
+
return null;
|
|
334
|
+
} else {
|
|
335
|
+
return result;
|
|
336
|
+
}
|
|
337
|
+
} catch (e) {
|
|
338
|
+
mechanicalFailure = e as Error;
|
|
339
|
+
process.stderr.write(
|
|
340
|
+
`[autopilot] phase-finalize: error completing phase ${phaseNum}: ${(e as Error).message}\n`
|
|
341
|
+
);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
// Mechanical failed — try LLM fallback if opted in
|
|
345
|
+
if (!mechanicalFailure) return null;
|
|
346
|
+
|
|
347
|
+
let fallbackEnabled = false;
|
|
348
|
+
try {
|
|
349
|
+
const config = loadConfig(cwd);
|
|
350
|
+
fallbackEnabled = config.phase_complete_llm_fallback === true;
|
|
351
|
+
} catch {
|
|
352
|
+
// loadConfig failure — proceed without fallback
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
if (fallbackEnabled && scheduler) {
|
|
356
|
+
return await attemptLlmFallbackCompletion(cwd, phaseNum, scheduler, mechanicalFailure);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
return null;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
module.exports = {
|
|
363
|
+
_phaseCompleteCore,
|
|
364
|
+
_resolvePhaseSuccession,
|
|
365
|
+
completePhaseAfterPostPipeline,
|
|
366
|
+
};
|
package/lib/phase-io.ts
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* GRD Phase/IO -- Shared file I/O helpers for ROADMAP.md and STATE.md.
|
|
5
|
+
*
|
|
6
|
+
* Extracted from lib/phase.ts and lib/phase-complete.ts as a post-Spec-3
|
|
7
|
+
* cleanup. Both modules now import from here instead of duplicating the
|
|
8
|
+
* implementation. A single shared write-through cache lives in this
|
|
9
|
+
* module so reads and writes are consistent across both callers.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import * as fs from 'fs';
|
|
13
|
+
|
|
14
|
+
// ─── File Caches ──────────────────────────────────────────────────────────────
|
|
15
|
+
|
|
16
|
+
// Module-level cache with write-through for roadmap file reads.
|
|
17
|
+
// Prevents redundant disk reads across phase operations; writes update the cache.
|
|
18
|
+
const _roadmapFileCache = new Map<string, string>();
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Read ROADMAP.md from disk (or from write-through cache on repeated reads).
|
|
22
|
+
* @param roadmapPath - Absolute path to the ROADMAP.md file
|
|
23
|
+
* @returns File contents as a UTF-8 string
|
|
24
|
+
*/
|
|
25
|
+
function readRoadmapFile(roadmapPath: string): string {
|
|
26
|
+
if (!_roadmapFileCache.has(roadmapPath)) {
|
|
27
|
+
_roadmapFileCache.set(roadmapPath, fs.readFileSync(roadmapPath, 'utf-8') as string);
|
|
28
|
+
}
|
|
29
|
+
return _roadmapFileCache.get(roadmapPath) as string;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Write ROADMAP.md to disk and update the write-through cache.
|
|
34
|
+
* @param roadmapPath - Absolute path to the ROADMAP.md file
|
|
35
|
+
* @param content - New file contents to write
|
|
36
|
+
*/
|
|
37
|
+
function writeRoadmapFile(roadmapPath: string, content: string): void {
|
|
38
|
+
fs.writeFileSync(roadmapPath, content, 'utf-8');
|
|
39
|
+
_roadmapFileCache.set(roadmapPath, content);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Module-level cache with write-through for state file reads.
|
|
43
|
+
// Prevents redundant disk reads across phase operations; writes update the cache.
|
|
44
|
+
const _stateFileCache = new Map<string, string>();
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Read STATE.md from disk (or from write-through cache on repeated reads).
|
|
48
|
+
* @param statePath - Absolute path to the STATE.md file
|
|
49
|
+
* @returns File contents as a UTF-8 string
|
|
50
|
+
*/
|
|
51
|
+
function readStateFile(statePath: string): string {
|
|
52
|
+
if (!_stateFileCache.has(statePath)) {
|
|
53
|
+
_stateFileCache.set(statePath, fs.readFileSync(statePath, 'utf-8') as string);
|
|
54
|
+
}
|
|
55
|
+
return _stateFileCache.get(statePath) as string;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Write STATE.md to disk and update the write-through cache.
|
|
60
|
+
* @param statePath - Absolute path to the STATE.md file
|
|
61
|
+
* @param content - New file contents to write
|
|
62
|
+
*/
|
|
63
|
+
function writeStateFile(statePath: string, content: string): void {
|
|
64
|
+
fs.writeFileSync(statePath, content, 'utf-8');
|
|
65
|
+
_stateFileCache.set(statePath, content);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Invalidates the cached content for a specific ROADMAP.md path, or
|
|
70
|
+
* the entire cache if no path is given. Used by phase-complete-llm
|
|
71
|
+
* after LLM fallback writes, and by _phaseCompleteCore at the start
|
|
72
|
+
* of a run to guarantee a fresh read.
|
|
73
|
+
*/
|
|
74
|
+
function clearRoadmapCache(filePath?: string): void {
|
|
75
|
+
if (filePath === undefined) {
|
|
76
|
+
_roadmapFileCache.clear();
|
|
77
|
+
} else {
|
|
78
|
+
_roadmapFileCache.delete(filePath);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Invalidates the cached content for a specific STATE.md path, or
|
|
84
|
+
* the entire cache if no path is given.
|
|
85
|
+
*/
|
|
86
|
+
function clearStateCache(filePath?: string): void {
|
|
87
|
+
if (filePath === undefined) {
|
|
88
|
+
_stateFileCache.clear();
|
|
89
|
+
} else {
|
|
90
|
+
_stateFileCache.delete(filePath);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
module.exports = {
|
|
95
|
+
readRoadmapFile,
|
|
96
|
+
writeRoadmapFile,
|
|
97
|
+
readStateFile,
|
|
98
|
+
writeStateFile,
|
|
99
|
+
clearRoadmapCache,
|
|
100
|
+
clearStateCache,
|
|
101
|
+
};
|