@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/lib/genome.ts
ADDED
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* GRD GENOME.md — meta-strategy snapshots.
|
|
5
|
+
*
|
|
6
|
+
* Tier-2 #8 follow-up: write path for the registry that PR #39 shipped
|
|
7
|
+
* the read half of. The proposal's caveat for #8 was "needs rollback
|
|
8
|
+
* policy"; we answer it by:
|
|
9
|
+
*
|
|
10
|
+
* - NOT mutating existing content. cmdGenomeSnapshot appends a new
|
|
11
|
+
* dated section; older snapshots stay readable in the same file.
|
|
12
|
+
* - Each write committed to git via the project's normal flow, so
|
|
13
|
+
* `git revert <hash>` is the rollback mechanism (same as PR #39).
|
|
14
|
+
*
|
|
15
|
+
* Three operations:
|
|
16
|
+
*
|
|
17
|
+
* cmdGenomeInit Writes a starter template if no GENOME.md
|
|
18
|
+
* exists. Errors if one already exists (the
|
|
19
|
+
* caller should `show` first to inspect).
|
|
20
|
+
* cmdGenomeShow Prints the current content (raw or as JSON
|
|
21
|
+
* with metadata).
|
|
22
|
+
* cmdGenomeSnapshot Appends a new `## Snapshot YYYY-MM-DD` section
|
|
23
|
+
* derived from current project state (drift,
|
|
24
|
+
* verdict mix, dead-ends count, completed
|
|
25
|
+
* phases). Creates GENOME.md if absent.
|
|
26
|
+
*
|
|
27
|
+
* The schema is documented in agents/grd-planner.md <genome>.
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import * as fs from 'fs';
|
|
31
|
+
import * as path from 'path';
|
|
32
|
+
|
|
33
|
+
const {
|
|
34
|
+
planningDir: getPlanningDir,
|
|
35
|
+
}: { planningDir: (cwd: string) => string } = require('./paths');
|
|
36
|
+
const {
|
|
37
|
+
safeReadFile,
|
|
38
|
+
safeReadMarkdown,
|
|
39
|
+
output,
|
|
40
|
+
error,
|
|
41
|
+
}: {
|
|
42
|
+
safeReadFile: (p: string) => string | null;
|
|
43
|
+
safeReadMarkdown: (p: string) => string | null;
|
|
44
|
+
output: (result: unknown, raw: boolean, rawValue?: unknown) => never;
|
|
45
|
+
error: (message: string) => never;
|
|
46
|
+
} = require('./utils');
|
|
47
|
+
const { atomicWriteFileSync }: { atomicWriteFileSync: (filePath: string, data: string) => void } =
|
|
48
|
+
require('./autopilot-waves');
|
|
49
|
+
const { isIndexFile }: { isIndexFile: (content: unknown) => boolean } = require('./markdown-split');
|
|
50
|
+
const {
|
|
51
|
+
computeDriftScore,
|
|
52
|
+
DEFAULT_WEIGHTS: DRIFT_WEIGHTS,
|
|
53
|
+
}: {
|
|
54
|
+
computeDriftScore: (
|
|
55
|
+
cwd: string,
|
|
56
|
+
weights?: { goal: number; constraint: number; ontology: number },
|
|
57
|
+
threshold?: number
|
|
58
|
+
) => {
|
|
59
|
+
weighted: number;
|
|
60
|
+
threshold: number;
|
|
61
|
+
exceeded: boolean;
|
|
62
|
+
goal: { score: number; sufficient_data: boolean };
|
|
63
|
+
constraint: { score: number; sufficient_data: boolean };
|
|
64
|
+
ontology: { score: number; sufficient_data: boolean };
|
|
65
|
+
};
|
|
66
|
+
DEFAULT_WEIGHTS: { goal: number; constraint: number; ontology: number };
|
|
67
|
+
} = require('./drift');
|
|
68
|
+
const {
|
|
69
|
+
parseReflectionSection,
|
|
70
|
+
}: {
|
|
71
|
+
parseReflectionSection: (content: string) => {
|
|
72
|
+
hypothesis: string;
|
|
73
|
+
predicted_outcome: string;
|
|
74
|
+
actual_outcome: string;
|
|
75
|
+
verdict: string;
|
|
76
|
+
evidence: string[];
|
|
77
|
+
} | null;
|
|
78
|
+
} = require('./dead-ends');
|
|
79
|
+
|
|
80
|
+
// ─── Starter template ──────────────────────────────────────────────────────
|
|
81
|
+
|
|
82
|
+
const _STARTER_TEMPLATE = `# Strategy Genome
|
|
83
|
+
|
|
84
|
+
Project-scoped meta-strategy snapshot. Captures how this project plans
|
|
85
|
+
— heuristics in use, agent preferences, verdict-thresholds the team
|
|
86
|
+
has settled on. The planner reads this before composing PLAN.md.
|
|
87
|
+
|
|
88
|
+
See agents/grd-planner.md \`<genome>\` for the consumer contract.
|
|
89
|
+
|
|
90
|
+
## Heuristics in use
|
|
91
|
+
|
|
92
|
+
_Add lines like:_
|
|
93
|
+
- Use \`verification_level: proxy\` for ML phases.
|
|
94
|
+
- Split phases past 50% context degradation.
|
|
95
|
+
|
|
96
|
+
## Agent preferences
|
|
97
|
+
|
|
98
|
+
_Add lines like:_
|
|
99
|
+
- Run \`grd-deep-diver\` before plan when research_level >= 2.
|
|
100
|
+
|
|
101
|
+
## Verdict thresholds
|
|
102
|
+
|
|
103
|
+
_Add lines like:_
|
|
104
|
+
- Promote falsified reflections to DEAD-ENDS automatically.
|
|
105
|
+
- Stop autopilot on ontology similarity >= 0.95.
|
|
106
|
+
|
|
107
|
+
## Snapshots
|
|
108
|
+
|
|
109
|
+
_Each \`gd-tools genome snapshot\` call appends a dated section below._
|
|
110
|
+
`;
|
|
111
|
+
|
|
112
|
+
// ─── Snapshot composition ──────────────────────────────────────────────────
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Walk completed phase dirs to count verdict kinds across all
|
|
116
|
+
* Reflection sections. Matches the heuristic from lib/think.ts but
|
|
117
|
+
* does not depend on it.
|
|
118
|
+
*/
|
|
119
|
+
function _verdictCounts(cwd: string): Record<string, number> {
|
|
120
|
+
const counts: Record<string, number> = {
|
|
121
|
+
confirmed: 0,
|
|
122
|
+
partial: 0,
|
|
123
|
+
falsified: 0,
|
|
124
|
+
unknown: 0,
|
|
125
|
+
};
|
|
126
|
+
const milestones = path.join(getPlanningDir(cwd), 'milestones');
|
|
127
|
+
if (!fs.existsSync(milestones)) return counts;
|
|
128
|
+
for (const ms of fs.readdirSync(milestones, { withFileTypes: true })) {
|
|
129
|
+
if (!ms.isDirectory()) continue;
|
|
130
|
+
const phasesDir = path.join(milestones, ms.name, 'phases');
|
|
131
|
+
if (!fs.existsSync(phasesDir)) continue;
|
|
132
|
+
for (const ph of fs.readdirSync(phasesDir, { withFileTypes: true })) {
|
|
133
|
+
if (!ph.isDirectory()) continue;
|
|
134
|
+
const phaseDir = path.join(phasesDir, ph.name);
|
|
135
|
+
const files = fs.readdirSync(phaseDir);
|
|
136
|
+
const verFile = files.find(
|
|
137
|
+
(f) => /-VERIFICATION\.md$/i.test(f) || f === 'VERIFICATION.md'
|
|
138
|
+
);
|
|
139
|
+
if (!verFile) continue;
|
|
140
|
+
// safeReadMarkdown reassembles split-index files so verdicts
|
|
141
|
+
// are counted correctly on projects that have split large
|
|
142
|
+
// VERIFICATION.md files (codex r2 P2 on PR #43).
|
|
143
|
+
const content = safeReadMarkdown(path.join(phaseDir, verFile));
|
|
144
|
+
if (!content) continue;
|
|
145
|
+
const r = parseReflectionSection(content);
|
|
146
|
+
if (!r) continue;
|
|
147
|
+
const v = r.verdict.toLowerCase();
|
|
148
|
+
if (counts[v] !== undefined) counts[v]++;
|
|
149
|
+
else counts[v] = 1;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return counts;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function _countCompletedPhases(cwd: string): number {
|
|
156
|
+
const milestones = path.join(getPlanningDir(cwd), 'milestones');
|
|
157
|
+
if (!fs.existsSync(milestones)) return 0;
|
|
158
|
+
let count = 0;
|
|
159
|
+
for (const ms of fs.readdirSync(milestones, { withFileTypes: true })) {
|
|
160
|
+
if (!ms.isDirectory()) continue;
|
|
161
|
+
const phasesDir = path.join(milestones, ms.name, 'phases');
|
|
162
|
+
if (!fs.existsSync(phasesDir)) continue;
|
|
163
|
+
for (const ph of fs.readdirSync(phasesDir, { withFileTypes: true })) {
|
|
164
|
+
if (!ph.isDirectory()) continue;
|
|
165
|
+
if (!/^\d+(?:\.\d+)?/.test(ph.name)) continue;
|
|
166
|
+
const hasSummary = fs
|
|
167
|
+
.readdirSync(path.join(phasesDir, ph.name))
|
|
168
|
+
.some((f) => /-SUMMARY\.md$/i.test(f) || f === 'SUMMARY.md');
|
|
169
|
+
if (hasSummary) count++;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
return count;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function _countDeadEnds(cwd: string): number {
|
|
176
|
+
// safeReadMarkdown reassembles split-index files so DEAD-ENDS count
|
|
177
|
+
// matches what the planner sees (codex r2 P2 on PR #43).
|
|
178
|
+
const deadEnds = safeReadMarkdown(path.join(getPlanningDir(cwd), 'DEAD-ENDS.md'));
|
|
179
|
+
if (!deadEnds) return 0;
|
|
180
|
+
return (deadEnds.match(/^## (\S+)\s*$/gm) ?? []).length;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Build the markdown body of a fresh snapshot section. Output is
|
|
185
|
+
* deterministic given the same input files.
|
|
186
|
+
*/
|
|
187
|
+
function _composeSnapshotSection(cwd: string, isoDate: string): string {
|
|
188
|
+
const completed = _countCompletedPhases(cwd);
|
|
189
|
+
const drift = computeDriftScore(cwd, DRIFT_WEIGHTS, 0.3);
|
|
190
|
+
const counts = _verdictCounts(cwd);
|
|
191
|
+
const deadEnds = _countDeadEnds(cwd);
|
|
192
|
+
|
|
193
|
+
const lines: string[] = [];
|
|
194
|
+
lines.push(`## Snapshot ${isoDate}`);
|
|
195
|
+
lines.push('');
|
|
196
|
+
lines.push('| Field | Value |');
|
|
197
|
+
lines.push('|-------|-------|');
|
|
198
|
+
lines.push(`| completed_phases | ${completed} |`);
|
|
199
|
+
lines.push(
|
|
200
|
+
`| drift_weighted | ${drift.weighted.toFixed(3)}${drift.exceeded ? ' (exceeds threshold)' : ''} |`
|
|
201
|
+
);
|
|
202
|
+
lines.push(`| dead_ends_registered | ${deadEnds} |`);
|
|
203
|
+
lines.push(`| verdicts.confirmed | ${counts.confirmed} |`);
|
|
204
|
+
lines.push(`| verdicts.partial | ${counts.partial} |`);
|
|
205
|
+
lines.push(`| verdicts.falsified | ${counts.falsified} |`);
|
|
206
|
+
lines.push(`| verdicts.unknown | ${counts.unknown} |`);
|
|
207
|
+
lines.push('');
|
|
208
|
+
lines.push(
|
|
209
|
+
'_Snapshot derived from project state. No LLM ran. Curate heuristic sections above by hand; this auto-appended block is the deterministic floor._'
|
|
210
|
+
);
|
|
211
|
+
lines.push('');
|
|
212
|
+
return lines.join('\n');
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// ─── Commands ──────────────────────────────────────────────────────────────
|
|
216
|
+
|
|
217
|
+
function cmdGenomeInit(cwd: string, raw: boolean): void {
|
|
218
|
+
const filePath = path.join(getPlanningDir(cwd), 'GENOME.md');
|
|
219
|
+
if (fs.existsSync(filePath)) {
|
|
220
|
+
error(`GENOME.md already exists at ${path.relative(cwd, filePath)} — use \`genome show\` to inspect`);
|
|
221
|
+
}
|
|
222
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
223
|
+
atomicWriteFileSync(filePath, _STARTER_TEMPLATE);
|
|
224
|
+
output(
|
|
225
|
+
{ action: 'created', path: path.relative(cwd, filePath) },
|
|
226
|
+
raw,
|
|
227
|
+
`created: ${path.relative(cwd, filePath)}`
|
|
228
|
+
);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
function cmdGenomeShow(cwd: string, raw: boolean): void {
|
|
232
|
+
const filePath = path.join(getPlanningDir(cwd), 'GENOME.md');
|
|
233
|
+
// safeReadMarkdown reassembles split-index files so `show` returns
|
|
234
|
+
// what the planner actually consumes, not just the index stub
|
|
235
|
+
// (codex r2 P2 on PR #43).
|
|
236
|
+
const content = safeReadMarkdown(filePath);
|
|
237
|
+
if (content === null) {
|
|
238
|
+
output({ exists: false, content: null }, raw, '(none)');
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
output(
|
|
242
|
+
{ exists: true, content, path: path.relative(cwd, filePath) },
|
|
243
|
+
raw,
|
|
244
|
+
content
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
export interface SnapshotResult {
|
|
249
|
+
action: 'created' | 'appended';
|
|
250
|
+
snapshot_date: string;
|
|
251
|
+
path: string;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/** Sentinel error thrown by runGenomeSnapshot when GENOME.md is split-index. */
|
|
255
|
+
export class GenomeSplitIndexError extends Error {
|
|
256
|
+
constructor(message: string) {
|
|
257
|
+
super(message);
|
|
258
|
+
this.name = 'GenomeSplitIndexError';
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Pure-ish helper: same logic as cmdGenomeSnapshot but returns instead
|
|
264
|
+
* of calling `output()` (which exits the process). Lets callers like
|
|
265
|
+
* lib/evolve/orchestrator.ts append a snapshot at the end of a cycle
|
|
266
|
+
* without terminating the parent process. Throws
|
|
267
|
+
* GenomeSplitIndexError if GENOME.md is in split-index format —
|
|
268
|
+
* caller chooses whether to surface or swallow.
|
|
269
|
+
*/
|
|
270
|
+
function runGenomeSnapshot(cwd: string): SnapshotResult {
|
|
271
|
+
const filePath = path.join(getPlanningDir(cwd), 'GENOME.md');
|
|
272
|
+
const today = new Date();
|
|
273
|
+
const isoDate = today.toISOString().slice(0, 10);
|
|
274
|
+
const section = _composeSnapshotSection(cwd, isoDate);
|
|
275
|
+
|
|
276
|
+
let prior: string;
|
|
277
|
+
let action: 'created' | 'appended';
|
|
278
|
+
if (fs.existsSync(filePath)) {
|
|
279
|
+
prior = safeReadFile(filePath) ?? '';
|
|
280
|
+
if (isIndexFile(prior)) {
|
|
281
|
+
throw new GenomeSplitIndexError(
|
|
282
|
+
`GENOME.md is in split-index format (<!-- GRD-INDEX -->). Snapshots cannot be appended to the stub — they would never reach planner context. Either edit the linked partial directly, or reassemble GENOME.md before snapshotting.`
|
|
283
|
+
);
|
|
284
|
+
}
|
|
285
|
+
if (!prior.endsWith('\n')) prior += '\n';
|
|
286
|
+
action = 'appended';
|
|
287
|
+
} else {
|
|
288
|
+
prior = _STARTER_TEMPLATE;
|
|
289
|
+
action = 'created';
|
|
290
|
+
}
|
|
291
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
292
|
+
atomicWriteFileSync(filePath, prior + '\n' + section);
|
|
293
|
+
return { action, snapshot_date: isoDate, path: path.relative(cwd, filePath) };
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
function cmdGenomeSnapshot(cwd: string, raw: boolean): void {
|
|
297
|
+
let result: SnapshotResult;
|
|
298
|
+
try {
|
|
299
|
+
result = runGenomeSnapshot(cwd);
|
|
300
|
+
} catch (e) {
|
|
301
|
+
if (e instanceof GenomeSplitIndexError) {
|
|
302
|
+
error(e.message);
|
|
303
|
+
}
|
|
304
|
+
throw e;
|
|
305
|
+
}
|
|
306
|
+
output(result, raw, `${result.action} snapshot ${result.snapshot_date}`);
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// ─── promote-suggestion (v0.4 Phase 5) ──────────────────────────────────────
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* Human-curated promotion of a `gd patterns` suggestion from
|
|
313
|
+
* .planning/GENOME-SUGGESTIONS.md into the prescriptive GENOME.md.
|
|
314
|
+
*
|
|
315
|
+
* Finds the suggestion block whose `Promote with: gd genome
|
|
316
|
+
* promote-suggestion <slug>` line matches `slug`, copies its
|
|
317
|
+
* "Suggested heuristic:" text into GENOME.md under a
|
|
318
|
+
* "## Heuristics in use (promoted)" section as a human-editable draft,
|
|
319
|
+
* and records provenance (date + source slug). This is the ONLY path
|
|
320
|
+
* from advisory suggestion to prescriptive heuristic — keeping the
|
|
321
|
+
* deterministic-or-human-reviewed write contract
|
|
322
|
+
* (DEAD-ENDS: auto-suggestions-in-genome-file). The human is expected to
|
|
323
|
+
* refine the wording afterward; the command just moves the text across
|
|
324
|
+
* the prescriptive boundary deliberately.
|
|
325
|
+
*/
|
|
326
|
+
function cmdGenomePromoteSuggestion(cwd: string, slug: string, raw: boolean): void {
|
|
327
|
+
if (!slug) error('slug required. Usage: gd genome promote-suggestion <slug>');
|
|
328
|
+
const planning = getPlanningDir(cwd);
|
|
329
|
+
const suggPath = path.join(planning, 'GENOME-SUGGESTIONS.md');
|
|
330
|
+
const suggContent = safeReadMarkdown(suggPath);
|
|
331
|
+
if (!suggContent) {
|
|
332
|
+
error(`no GENOME-SUGGESTIONS.md found at ${path.relative(cwd, suggPath)}. Run \`gd patterns --apply --yes\` first.`);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
// Find the suggested-heuristic line for this slug. Blocks end with
|
|
336
|
+
// `Promote with: ... promote-suggestion <slug>`; the heuristic is the
|
|
337
|
+
// preceding `Suggested heuristic: "..."` line.
|
|
338
|
+
const heuristic = extractSuggestedHeuristic(suggContent as string, slug);
|
|
339
|
+
if (!heuristic) {
|
|
340
|
+
error(`slug "${slug}" not found in GENOME-SUGGESTIONS.md.`);
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
const genomePath = path.join(planning, 'GENOME.md');
|
|
344
|
+
const existing = safeReadFile(genomePath);
|
|
345
|
+
if (existing !== null && isIndexFile(existing)) {
|
|
346
|
+
error('GENOME.md is a GRD-INDEX split file; promote into the reassembled source manually.');
|
|
347
|
+
}
|
|
348
|
+
const date = new Date().toISOString().slice(0, 10);
|
|
349
|
+
const entry = `- ${heuristic} _(promoted ${date} from suggestion \`${slug}\`; edit wording as needed)_\n`;
|
|
350
|
+
const header = '## Heuristics in use (promoted)';
|
|
351
|
+
|
|
352
|
+
let next: string;
|
|
353
|
+
const base = existing ?? '# GENOME\n\nProject meta-strategy.\n';
|
|
354
|
+
if (base.includes(header)) {
|
|
355
|
+
// Append under the existing section (right after the header line).
|
|
356
|
+
next = base.replace(header, `${header}\n${entry.trimEnd()}`);
|
|
357
|
+
} else {
|
|
358
|
+
next = `${base.trimEnd()}\n\n${header}\n\n${entry}`;
|
|
359
|
+
}
|
|
360
|
+
atomicWriteFileSync(genomePath, next);
|
|
361
|
+
output(
|
|
362
|
+
{ promoted: slug, heuristic, genome_path: path.relative(cwd, genomePath) },
|
|
363
|
+
raw,
|
|
364
|
+
`promoted "${slug}" into ${path.relative(cwd, genomePath)} (edit wording as needed)`
|
|
365
|
+
);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* Extract the "Suggested heuristic" text for a given promote slug.
|
|
370
|
+
*
|
|
371
|
+
* Codex review P2: `gd patterns` appends repeatable `${token}-rate` slugs, so
|
|
372
|
+
* the same slug can recur across run blocks with a LATER run reporting the
|
|
373
|
+
* opposite direction. Scan BOTTOM-UP so the most recent run wins, and match
|
|
374
|
+
* the promote command EXACTLY (anchored to end-of-token) so `foo-rate` does
|
|
375
|
+
* not collide with `foo-rate-2` or `xfoo-rate`.
|
|
376
|
+
*/
|
|
377
|
+
function extractSuggestedHeuristic(suggestions: string, slug: string): string | null {
|
|
378
|
+
const lines = suggestions.split('\n');
|
|
379
|
+
// Exact match: the slug is the final token of the promote command line
|
|
380
|
+
// (allow a trailing backtick from the markdown formatting).
|
|
381
|
+
const promoteRe = new RegExp(
|
|
382
|
+
`promote-suggestion ${slug.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\`?\\s*$`
|
|
383
|
+
);
|
|
384
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
385
|
+
if (promoteRe.test(lines[i])) {
|
|
386
|
+
for (let j = i; j >= 0 && j > i - 6; j--) {
|
|
387
|
+
const m = lines[j].match(/Suggested heuristic:\s*"([^"]+)"/);
|
|
388
|
+
if (m) return m[1];
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
return null;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
module.exports = {
|
|
396
|
+
cmdGenomeInit,
|
|
397
|
+
cmdGenomeShow,
|
|
398
|
+
cmdGenomeSnapshot,
|
|
399
|
+
cmdGenomePromoteSuggestion,
|
|
400
|
+
runGenomeSnapshot,
|
|
401
|
+
GenomeSplitIndexError,
|
|
402
|
+
};
|
package/lib/got.js
ADDED