@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,349 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* GRD Closed-Loop Metric-Driven Refinement
|
|
5
|
+
*
|
|
6
|
+
* Foundational logic for closed-loop refinement: collecting quantitative
|
|
7
|
+
* metrics from test/lint/build output, detecting when metrics stop improving
|
|
8
|
+
* (convergence), and routing to the correct refinement branch based on which
|
|
9
|
+
* dimension needs the most attention.
|
|
10
|
+
*
|
|
11
|
+
* Adapted from NERFIFY's PSNR-minima ROI analysis to GRD's domain:
|
|
12
|
+
* - test coverage minima (analogous to PSNR dips in low-detail regions)
|
|
13
|
+
* - type error density (analogous to geometry reconstruction errors)
|
|
14
|
+
* - lint violation clustering (analogous to generative artifact noise)
|
|
15
|
+
*
|
|
16
|
+
* @module refinement
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import type {
|
|
20
|
+
RefinementMetrics,
|
|
21
|
+
CritiqueBranch,
|
|
22
|
+
ConvergenceConfig,
|
|
23
|
+
MetricSnapshot,
|
|
24
|
+
MinimaRegion,
|
|
25
|
+
} from './types';
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Collect quantitative metrics from npm test, tsc, and eslint output.
|
|
29
|
+
*
|
|
30
|
+
* @param testOutput - Raw stdout from `npm test` (Jest output with coverage table)
|
|
31
|
+
* @param tscOutput - Raw stdout/stderr from `tsc --noEmit`
|
|
32
|
+
* @param lintOutput - Raw stdout from `eslint`
|
|
33
|
+
* @returns RefinementMetrics with current ISO timestamp
|
|
34
|
+
*/
|
|
35
|
+
export function collectMetrics(
|
|
36
|
+
testOutput: string,
|
|
37
|
+
tscOutput: string,
|
|
38
|
+
lintOutput: string
|
|
39
|
+
): RefinementMetrics {
|
|
40
|
+
// Parse test coverage from Jest output: look for "All files" line
|
|
41
|
+
// Jest coverage table format: | All files | XX.XX | XX.XX | XX.XX | ...
|
|
42
|
+
let test_coverage_pct = 0;
|
|
43
|
+
// Jest coverage table "All files" row has 5 columns: File | Stmts | Branch | Funcs | Lines
|
|
44
|
+
// We want the Lines column (4th numeric value after "All files |")
|
|
45
|
+
const coverageLineMatch = testOutput.match(
|
|
46
|
+
/All files\s*\|\s*([\d.]+)\s*\|\s*([\d.]+)\s*\|\s*([\d.]+)\s*\|\s*([\d.]+)\s*\|/
|
|
47
|
+
);
|
|
48
|
+
if (coverageLineMatch) {
|
|
49
|
+
// Group 4 = Lines coverage
|
|
50
|
+
test_coverage_pct = parseFloat(coverageLineMatch[4]) || 0;
|
|
51
|
+
} else {
|
|
52
|
+
// Fallback: look for "Statements" or "Lines" percentage on a summary line
|
|
53
|
+
const statementsMatch = testOutput.match(/Statements\s*:\s*([\d.]+)%/);
|
|
54
|
+
if (statementsMatch) {
|
|
55
|
+
test_coverage_pct = parseFloat(statementsMatch[1]) || 0;
|
|
56
|
+
} else {
|
|
57
|
+
// Try "Lines" percentage
|
|
58
|
+
const linesMatch = testOutput.match(/Lines\s*:\s*([\d.]+)%/);
|
|
59
|
+
if (linesMatch) {
|
|
60
|
+
test_coverage_pct = parseFloat(linesMatch[1]) || 0;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// Parse type error count from tsc output: count lines matching /error TS\d+/
|
|
66
|
+
const tscErrorMatches = tscOutput.match(/error TS\d+/g);
|
|
67
|
+
const type_error_count = tscErrorMatches ? tscErrorMatches.length : 0;
|
|
68
|
+
|
|
69
|
+
// Parse lint violation count from eslint output.
|
|
70
|
+
// Strategy: count individual violation lines AND check the "N problems" summary.
|
|
71
|
+
// Take max of both to handle cases where the summary underreports or is absent.
|
|
72
|
+
|
|
73
|
+
// Count individual error/warning lines (indented lines with rule names)
|
|
74
|
+
const violationLines = lintOutput
|
|
75
|
+
.split('\n')
|
|
76
|
+
.filter((line) => /^\s+\d+:\d+\s+(error|warning)\s+/.test(line));
|
|
77
|
+
const individualCount = violationLines.length;
|
|
78
|
+
|
|
79
|
+
// Check for summary line "N problems"
|
|
80
|
+
const problemsMatch = lintOutput.match(/(\d+)\s+problems?/);
|
|
81
|
+
const summaryCount = problemsMatch ? (parseInt(problemsMatch[1], 10) || 0) : 0;
|
|
82
|
+
|
|
83
|
+
const lint_violation_count = Math.max(individualCount, summaryCount);
|
|
84
|
+
|
|
85
|
+
return {
|
|
86
|
+
test_coverage_pct,
|
|
87
|
+
type_error_count,
|
|
88
|
+
lint_violation_count,
|
|
89
|
+
timestamp: new Date().toISOString(),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Detect metric-minima regions from a time series of MetricSnapshot objects.
|
|
95
|
+
*
|
|
96
|
+
* For test_coverage_pct: finds local minima (dips where coverage < both neighbors).
|
|
97
|
+
* For type_error_count and lint_violation_count: finds local maxima (spikes where
|
|
98
|
+
* count > both neighbors).
|
|
99
|
+
*
|
|
100
|
+
* Adapted from NERFIFY PSNR-minima ROI analysis.
|
|
101
|
+
*
|
|
102
|
+
* @param snapshots - Ordered array of metric snapshots
|
|
103
|
+
* @returns Array of MinimaRegion objects sorted by |delta| descending
|
|
104
|
+
*/
|
|
105
|
+
export function detectMinima(snapshots: MetricSnapshot[]): MinimaRegion[] {
|
|
106
|
+
// Need at least 3 snapshots to detect local minima/maxima (requires both neighbors)
|
|
107
|
+
if (snapshots.length < 3) return [];
|
|
108
|
+
|
|
109
|
+
const regions: MinimaRegion[] = [];
|
|
110
|
+
|
|
111
|
+
for (let i = 1; i < snapshots.length - 1; i++) {
|
|
112
|
+
const prev = snapshots[i - 1].metrics;
|
|
113
|
+
const curr = snapshots[i].metrics;
|
|
114
|
+
const next = snapshots[i + 1].metrics;
|
|
115
|
+
|
|
116
|
+
// Coverage: find local minima (dips)
|
|
117
|
+
if (curr.test_coverage_pct < prev.test_coverage_pct && curr.test_coverage_pct < next.test_coverage_pct) {
|
|
118
|
+
const neighborAvg = (prev.test_coverage_pct + next.test_coverage_pct) / 2;
|
|
119
|
+
const delta = Math.abs(neighborAvg - curr.test_coverage_pct);
|
|
120
|
+
regions.push({
|
|
121
|
+
dimension: 'test_coverage_pct',
|
|
122
|
+
index: i,
|
|
123
|
+
value: curr.test_coverage_pct,
|
|
124
|
+
delta,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Type errors: find local maxima (spikes)
|
|
129
|
+
if (curr.type_error_count > prev.type_error_count && curr.type_error_count > next.type_error_count) {
|
|
130
|
+
const neighborAvg = (prev.type_error_count + next.type_error_count) / 2;
|
|
131
|
+
const delta = Math.abs(curr.type_error_count - neighborAvg);
|
|
132
|
+
regions.push({
|
|
133
|
+
dimension: 'type_error_count',
|
|
134
|
+
index: i,
|
|
135
|
+
value: curr.type_error_count,
|
|
136
|
+
delta,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Lint violations: find local maxima (spikes)
|
|
141
|
+
if (curr.lint_violation_count > prev.lint_violation_count && curr.lint_violation_count > next.lint_violation_count) {
|
|
142
|
+
const neighborAvg = (prev.lint_violation_count + next.lint_violation_count) / 2;
|
|
143
|
+
const delta = Math.abs(curr.lint_violation_count - neighborAvg);
|
|
144
|
+
regions.push({
|
|
145
|
+
dimension: 'lint_violation_count',
|
|
146
|
+
index: i,
|
|
147
|
+
value: curr.lint_violation_count,
|
|
148
|
+
delta,
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Sort by absolute delta descending (worst regions first)
|
|
154
|
+
return regions.sort((a, b) => b.delta - a.delta);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Check whether metrics have converged (stopped improving meaningfully).
|
|
159
|
+
*
|
|
160
|
+
* @param snapshots - Ordered array of metric snapshots (newest last)
|
|
161
|
+
* @param config - Convergence thresholds and max iteration cap
|
|
162
|
+
* @returns { converged: boolean, reason: string }
|
|
163
|
+
*/
|
|
164
|
+
export function checkConvergence(
|
|
165
|
+
snapshots: MetricSnapshot[],
|
|
166
|
+
config: ConvergenceConfig
|
|
167
|
+
): { converged: boolean; reason: string } {
|
|
168
|
+
if (snapshots.length < 2) {
|
|
169
|
+
return { converged: false, reason: 'insufficient data' };
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (snapshots.length >= config.max_iterations) {
|
|
173
|
+
return { converged: true, reason: 'max iterations reached' };
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const last = snapshots[snapshots.length - 1].metrics;
|
|
177
|
+
const prev = snapshots[snapshots.length - 2].metrics;
|
|
178
|
+
|
|
179
|
+
// Codex r43 P1 #3: detect the "no real progress" sentinel — when both
|
|
180
|
+
// snapshots report all zeros, the measurement path is almost
|
|
181
|
+
// certainly broken (e.g. jest/tsc/eslint never ran, or stdout was
|
|
182
|
+
// discarded). Don't celebrate this as convergence.
|
|
183
|
+
const lastAllZero =
|
|
184
|
+
last.test_coverage_pct === 0 &&
|
|
185
|
+
last.type_error_count === 0 &&
|
|
186
|
+
last.lint_violation_count === 0;
|
|
187
|
+
const prevAllZero =
|
|
188
|
+
prev.test_coverage_pct === 0 &&
|
|
189
|
+
prev.type_error_count === 0 &&
|
|
190
|
+
prev.lint_violation_count === 0;
|
|
191
|
+
if (lastAllZero && prevAllZero) {
|
|
192
|
+
return {
|
|
193
|
+
converged: false,
|
|
194
|
+
reason: 'no progress (all metrics zero — measurement path likely broken)',
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const deltaCoverage = Math.abs(last.test_coverage_pct - prev.test_coverage_pct);
|
|
199
|
+
const deltaTypeErrors = Math.abs(last.type_error_count - prev.type_error_count);
|
|
200
|
+
const deltaLint = Math.abs(last.lint_violation_count - prev.lint_violation_count);
|
|
201
|
+
|
|
202
|
+
const coverageConverged = deltaCoverage < config.epsilon_coverage;
|
|
203
|
+
const typeErrorsConverged = deltaTypeErrors < config.epsilon_type_errors;
|
|
204
|
+
const lintConverged = deltaLint < config.epsilon_lint;
|
|
205
|
+
|
|
206
|
+
if (coverageConverged && typeErrorsConverged && lintConverged) {
|
|
207
|
+
return { converged: true, reason: 'all dimensions within epsilon' };
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const stillChanging: string[] = [];
|
|
211
|
+
if (!coverageConverged) {
|
|
212
|
+
stillChanging.push(`coverage (delta=${deltaCoverage.toFixed(2)}, epsilon=${config.epsilon_coverage})`);
|
|
213
|
+
}
|
|
214
|
+
if (!typeErrorsConverged) {
|
|
215
|
+
stillChanging.push(`type_errors (delta=${deltaTypeErrors}, epsilon=${config.epsilon_type_errors})`);
|
|
216
|
+
}
|
|
217
|
+
if (!lintConverged) {
|
|
218
|
+
stillChanging.push(`lint (delta=${deltaLint}, epsilon=${config.epsilon_lint})`);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
return {
|
|
222
|
+
converged: false,
|
|
223
|
+
reason: `still changing: ${stillChanging.join(', ')}`,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Classify which refinement branch should handle the current metric state.
|
|
229
|
+
*
|
|
230
|
+
* Computes normalized gap for each dimension and routes to the branch
|
|
231
|
+
* with the largest gap to target:
|
|
232
|
+
* - 'macro': coverage gap is largest (metric-minima guided patching)
|
|
233
|
+
* - 'geometry': type error gap is largest (structural validation)
|
|
234
|
+
* - 'generative': lint gap is largest (artifact analysis)
|
|
235
|
+
*
|
|
236
|
+
* @param current - Current metric snapshot
|
|
237
|
+
* @param targets - Target metrics to reach
|
|
238
|
+
* @returns The CritiqueBranch that should handle refinement
|
|
239
|
+
*/
|
|
240
|
+
export function classifyBranch(
|
|
241
|
+
current: RefinementMetrics,
|
|
242
|
+
targets: RefinementMetrics
|
|
243
|
+
): CritiqueBranch {
|
|
244
|
+
// Normalized gap for coverage: (target - current) / target; higher = worse (lower coverage)
|
|
245
|
+
const coverageTarget = targets.test_coverage_pct;
|
|
246
|
+
const coverageGap = coverageTarget > 0
|
|
247
|
+
? Math.max(0, (coverageTarget - current.test_coverage_pct) / coverageTarget)
|
|
248
|
+
: 0;
|
|
249
|
+
|
|
250
|
+
// Normalized gap for type errors: (current - target) / max(current, 1); higher = worse (more errors)
|
|
251
|
+
const typeErrorsGap = current.type_error_count > 0
|
|
252
|
+
? (current.type_error_count - targets.type_error_count) / Math.max(current.type_error_count, 1)
|
|
253
|
+
: 0;
|
|
254
|
+
|
|
255
|
+
// Normalized gap for lint: (current - target) / max(current, 1); higher = worse (more violations)
|
|
256
|
+
const lintGap = current.lint_violation_count > 0
|
|
257
|
+
? (current.lint_violation_count - targets.lint_violation_count) / Math.max(current.lint_violation_count, 1)
|
|
258
|
+
: 0;
|
|
259
|
+
|
|
260
|
+
// Tie-break order: macro > geometry > generative
|
|
261
|
+
if (coverageGap >= typeErrorsGap && coverageGap >= lintGap) {
|
|
262
|
+
return 'macro';
|
|
263
|
+
}
|
|
264
|
+
if (typeErrorsGap >= lintGap) {
|
|
265
|
+
return 'geometry';
|
|
266
|
+
}
|
|
267
|
+
return 'generative';
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Build a structured critique prompt for the refinement agent.
|
|
272
|
+
*
|
|
273
|
+
* @param branch - Which critique branch this prompt is for
|
|
274
|
+
* @param metrics - Current metrics
|
|
275
|
+
* @param targets - Target metrics
|
|
276
|
+
* @param minimaRegions - Top minima regions to surface in the prompt
|
|
277
|
+
* @returns Formatted prompt string for the critique agent
|
|
278
|
+
*/
|
|
279
|
+
export function buildCritiquePrompt(
|
|
280
|
+
branch: CritiqueBranch,
|
|
281
|
+
metrics: RefinementMetrics,
|
|
282
|
+
targets: RefinementMetrics,
|
|
283
|
+
minimaRegions: MinimaRegion[]
|
|
284
|
+
): string {
|
|
285
|
+
const topRegions = minimaRegions.slice(0, 3);
|
|
286
|
+
const regionsText = topRegions.length > 0
|
|
287
|
+
? topRegions
|
|
288
|
+
.map((r, i) => ` ${i + 1}. ${r.dimension} at index ${r.index}: value=${r.value}, delta=${r.delta.toFixed(2)}`)
|
|
289
|
+
.join('\n')
|
|
290
|
+
: ' (none detected — first iteration or insufficient history)';
|
|
291
|
+
|
|
292
|
+
const branchInstructions: Record<CritiqueBranch, string> = {
|
|
293
|
+
macro: `Focus on coverage recovery:
|
|
294
|
+
- Identify files with the lowest test coverage
|
|
295
|
+
- Add test cases for uncovered branches and lines
|
|
296
|
+
- Prioritize files that appear in minima regions (coverage dips)
|
|
297
|
+
- High-ROI targets: frequently modified files with low coverage`,
|
|
298
|
+
|
|
299
|
+
geometry: `Focus on type error resolution:
|
|
300
|
+
- Parse tsc error output and categorize errors by type
|
|
301
|
+
- Fix errors starting from leaf modules (no dependents) toward root
|
|
302
|
+
- Check export consistency: every module.exports key has a matching function/const
|
|
303
|
+
- Verify import chains are correct`,
|
|
304
|
+
|
|
305
|
+
generative: `Focus on lint pattern analysis:
|
|
306
|
+
- Cluster ESLint violations by rule
|
|
307
|
+
- Fix violations by cluster (all no-unused-vars together, all no-explicit-any together)
|
|
308
|
+
- Identify code patterns generating violations and refactor the pattern
|
|
309
|
+
- Never disable ESLint rules — fix the code`,
|
|
310
|
+
};
|
|
311
|
+
|
|
312
|
+
return `CRITIQUE BRANCH: ${branch.toUpperCase()}
|
|
313
|
+
|
|
314
|
+
## Current Metrics
|
|
315
|
+
|
|
316
|
+
- test_coverage_pct: ${metrics.test_coverage_pct.toFixed(2)}%
|
|
317
|
+
- type_error_count: ${metrics.type_error_count}
|
|
318
|
+
- lint_violation_count: ${metrics.lint_violation_count}
|
|
319
|
+
- collected_at: ${metrics.timestamp}
|
|
320
|
+
|
|
321
|
+
## Target Metrics
|
|
322
|
+
|
|
323
|
+
- test_coverage_pct: ${targets.test_coverage_pct.toFixed(2)}%
|
|
324
|
+
- type_error_count: ${targets.type_error_count}
|
|
325
|
+
- lint_violation_count: ${targets.lint_violation_count}
|
|
326
|
+
|
|
327
|
+
## Top Minima Regions
|
|
328
|
+
|
|
329
|
+
${regionsText}
|
|
330
|
+
|
|
331
|
+
## Branch Instructions
|
|
332
|
+
|
|
333
|
+
${branchInstructions[branch]}
|
|
334
|
+
|
|
335
|
+
## Constraints
|
|
336
|
+
|
|
337
|
+
- Modify at most 5 files per iteration
|
|
338
|
+
- Run npm run build:check after every change to avoid regression
|
|
339
|
+
- Never lower coverage thresholds in jest.config.js
|
|
340
|
+
- Never disable ESLint rules`;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
module.exports = {
|
|
344
|
+
collectMetrics,
|
|
345
|
+
detectMinima,
|
|
346
|
+
checkConvergence,
|
|
347
|
+
classifyBranch,
|
|
348
|
+
buildCritiquePrompt,
|
|
349
|
+
};
|