@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,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* GRD Scan/Ignorefile -- Parser for .prompt-injection-scanignore files.
|
|
5
|
+
*
|
|
6
|
+
* Format compatible with gsd-2 v2.67:
|
|
7
|
+
* - '#' prefixed lines are comments
|
|
8
|
+
* - blank lines are ignored
|
|
9
|
+
* - 'filepath:regex' is a file-scoped entry (exact filepath match)
|
|
10
|
+
* - bare 'regex' is a global entry
|
|
11
|
+
*
|
|
12
|
+
* Heuristic for splitting a line: find the first ':'. If the left side looks
|
|
13
|
+
* like a file path (contains '/' or '.' and does not start with a regex
|
|
14
|
+
* metacharacter), treat as file-scoped; otherwise treat as global.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
const fs = require("fs") as typeof import("fs");
|
|
18
|
+
|
|
19
|
+
export type IgnoreEntry =
|
|
20
|
+
| { type: "file"; filePath: string; pattern: RegExp }
|
|
21
|
+
| { type: "global"; pattern: RegExp };
|
|
22
|
+
|
|
23
|
+
export function parseIgnoreFile(raw: string): IgnoreEntry[] {
|
|
24
|
+
const entries: IgnoreEntry[] = [];
|
|
25
|
+
const lines = raw.split("\n");
|
|
26
|
+
for (const rawLine of lines) {
|
|
27
|
+
const line = rawLine.trim();
|
|
28
|
+
if (line === "" || line.startsWith("#")) continue;
|
|
29
|
+
|
|
30
|
+
const colonIdx = line.indexOf(":");
|
|
31
|
+
if (colonIdx > 0) {
|
|
32
|
+
const left = line.slice(0, colonIdx);
|
|
33
|
+
const right = line.slice(colonIdx + 1);
|
|
34
|
+
if (_looksLikeFilePath(left)) {
|
|
35
|
+
const pat = _compileOrWarn(right, rawLine);
|
|
36
|
+
if (pat) entries.push({ type: "file", filePath: left, pattern: pat });
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const pat = _compileOrWarn(line, rawLine);
|
|
42
|
+
if (pat) entries.push({ type: "global", pattern: pat });
|
|
43
|
+
}
|
|
44
|
+
return entries;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function loadIgnoreFile(filePath: string): IgnoreEntry[] {
|
|
48
|
+
if (!fs.existsSync(filePath)) return [];
|
|
49
|
+
const raw = fs.readFileSync(filePath, "utf8");
|
|
50
|
+
return parseIgnoreFile(raw);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Check whether a hit should be suppressed by any ignorefile entry.
|
|
55
|
+
*
|
|
56
|
+
* The `matchText` parameter is the SCANNED content that produced the hit:
|
|
57
|
+
* - For prose hits: the full source line
|
|
58
|
+
* - For base64 hits: the full decoded content of the base64 blob
|
|
59
|
+
*
|
|
60
|
+
* This is intentionally wider than the reported `match` field on ScanHit
|
|
61
|
+
* (which is truncated to 80 chars for display). Ignorefile entries should
|
|
62
|
+
* be written against the scanned content — see `.prompt-injection-scanignore`
|
|
63
|
+
* for examples.
|
|
64
|
+
*
|
|
65
|
+
* @param file - the file where the hit was found (may be absolute or relative;
|
|
66
|
+
* suffix-matching supported)
|
|
67
|
+
* @param matchText - the scanned content (full source line or full decoded blob)
|
|
68
|
+
* @param entries - parsed ignorefile entries from loadIgnoreFile
|
|
69
|
+
* @returns true if any entry matches and the hit should be suppressed
|
|
70
|
+
*/
|
|
71
|
+
export function isIgnored(
|
|
72
|
+
file: string,
|
|
73
|
+
matchText: string,
|
|
74
|
+
entries: IgnoreEntry[],
|
|
75
|
+
): boolean {
|
|
76
|
+
for (const e of entries) {
|
|
77
|
+
if (e.type === "file") {
|
|
78
|
+
const fileMatches =
|
|
79
|
+
e.filePath === file || file.endsWith("/" + e.filePath);
|
|
80
|
+
if (fileMatches && e.pattern.test(matchText)) return true;
|
|
81
|
+
} else {
|
|
82
|
+
if (e.pattern.test(matchText)) return true;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
89
|
+
|
|
90
|
+
function _looksLikeFilePath(s: string): boolean {
|
|
91
|
+
if (s.length === 0) return false;
|
|
92
|
+
const first = s[0];
|
|
93
|
+
if (first === "(" || first === "[" || first === "^" || first === "\\")
|
|
94
|
+
return false;
|
|
95
|
+
return s.includes("/") || s.includes(".");
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function _compileOrWarn(pattern: string, sourceLine: string): RegExp | null {
|
|
99
|
+
try {
|
|
100
|
+
return new RegExp(pattern);
|
|
101
|
+
} catch (e) {
|
|
102
|
+
process.stderr.write(
|
|
103
|
+
`warning: invalid regex in ignorefile: ${sourceLine} (${(e as Error).message})\n`,
|
|
104
|
+
);
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
module.exports = { parseIgnoreFile, loadIgnoreFile, isIgnored };
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* GRD Scan/Injection -- Prose-level prompt injection scanner.
|
|
5
|
+
*
|
|
6
|
+
* Applies the INJECTION_PATTERNS to markdown content after stripping fenced
|
|
7
|
+
* code blocks and inline backtick spans. Integrates with the ignorefile
|
|
8
|
+
* system to suppress known false positives.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { IgnoreEntry } from "./ignorefile";
|
|
12
|
+
import type { InjectionPattern } from "./patterns";
|
|
13
|
+
import type { ScanHit } from "./types";
|
|
14
|
+
|
|
15
|
+
const { INJECTION_PATTERNS } = require("./patterns") as {
|
|
16
|
+
INJECTION_PATTERNS: ReadonlyArray<InjectionPattern>;
|
|
17
|
+
};
|
|
18
|
+
const { stripCodeBlocks } = require("./strip-markdown") as {
|
|
19
|
+
stripCodeBlocks: (raw: string) => string;
|
|
20
|
+
};
|
|
21
|
+
const { isIgnored } = require("./ignorefile") as {
|
|
22
|
+
isIgnored: (
|
|
23
|
+
file: string,
|
|
24
|
+
matchText: string,
|
|
25
|
+
entries: IgnoreEntry[],
|
|
26
|
+
) => boolean;
|
|
27
|
+
};
|
|
28
|
+
const { _readUtf8OrNull, _truncate } = require("./_utils") as {
|
|
29
|
+
_readUtf8OrNull: (file: string) => string | null;
|
|
30
|
+
_truncate: (s: string, max: number) => string;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export interface ScanProseOpts {
|
|
34
|
+
ignoreEntries: IgnoreEntry[];
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function scanProse(files: string[], opts: ScanProseOpts): ScanHit[] {
|
|
38
|
+
const hits: ScanHit[] = [];
|
|
39
|
+
for (const file of files) {
|
|
40
|
+
const raw = _readUtf8OrNull(file);
|
|
41
|
+
if (raw === null) continue;
|
|
42
|
+
const stripped = stripCodeBlocks(raw);
|
|
43
|
+
const lines = stripped.split("\n");
|
|
44
|
+
for (let i = 0; i < lines.length; i++) {
|
|
45
|
+
const line = lines[i];
|
|
46
|
+
for (const pattern of INJECTION_PATTERNS) {
|
|
47
|
+
const m = line.match(pattern.regex);
|
|
48
|
+
if (m) {
|
|
49
|
+
const match = _truncate(m[0], 80);
|
|
50
|
+
hits.push({
|
|
51
|
+
file,
|
|
52
|
+
line: i + 1,
|
|
53
|
+
pattern: pattern.id,
|
|
54
|
+
label: pattern.label,
|
|
55
|
+
category: pattern.category,
|
|
56
|
+
match,
|
|
57
|
+
ignored: isIgnored(file, line, opts.ignoreEntries),
|
|
58
|
+
source: "prose",
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return hits;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
module.exports = { scanProse };
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* GRD Scan/Patterns -- Prompt injection pattern definitions.
|
|
5
|
+
*
|
|
6
|
+
* Pattern set adopted from gsd-2 v2.67+ (scripts/docs-prompt-injection-scan.sh
|
|
7
|
+
* and scripts/base64-scan.sh at https://github.com/gsd-build/gsd-2).
|
|
8
|
+
* Reimplemented in TypeScript for GRD; see
|
|
9
|
+
* docs/superpowers/specs/2026-04-11-gsd2-prompt-injection-scan-design.md
|
|
10
|
+
* for the full adoption story.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
export interface InjectionPattern {
|
|
14
|
+
readonly id: string;
|
|
15
|
+
readonly label: string;
|
|
16
|
+
readonly category: string;
|
|
17
|
+
readonly regex: RegExp;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export const INJECTION_PATTERNS: readonly InjectionPattern[] = [
|
|
21
|
+
// System prompt markers
|
|
22
|
+
{
|
|
23
|
+
id: "system_prompt_tag",
|
|
24
|
+
label: "System prompt tag",
|
|
25
|
+
category: "System prompt markers",
|
|
26
|
+
regex: /<system-prompt>/i,
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: "im_start_system",
|
|
30
|
+
label: "im_start system",
|
|
31
|
+
category: "System prompt markers",
|
|
32
|
+
regex: /<\|im_start\|>system/i,
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: "system_label",
|
|
36
|
+
label: "SYSTEM label",
|
|
37
|
+
category: "System prompt markers",
|
|
38
|
+
regex: /\[SYSTEM\]\s*:/i,
|
|
39
|
+
},
|
|
40
|
+
// Role injection
|
|
41
|
+
{
|
|
42
|
+
id: "you_are_now",
|
|
43
|
+
label: "You are now",
|
|
44
|
+
category: "Role injection",
|
|
45
|
+
regex: /you are now [a-z]/i,
|
|
46
|
+
},
|
|
47
|
+
// Instruction override
|
|
48
|
+
{
|
|
49
|
+
id: "ignore_previous",
|
|
50
|
+
label: "Ignore previous",
|
|
51
|
+
category: "Instruction override",
|
|
52
|
+
regex: /ignore (all )?previous instructions/i,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
id: "ignore_prior",
|
|
56
|
+
label: "Ignore prior",
|
|
57
|
+
category: "Instruction override",
|
|
58
|
+
regex: /ignore (all )?prior instructions/i,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
id: "disregard_above",
|
|
62
|
+
label: "Disregard above",
|
|
63
|
+
category: "Instruction override",
|
|
64
|
+
regex: /disregard (all )?(above|previous|prior)/i,
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
id: "forget_above",
|
|
68
|
+
label: "Forget above",
|
|
69
|
+
category: "Instruction override",
|
|
70
|
+
regex: /forget (all )?(above|previous|prior) (instructions|context|rules)/i,
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
id: "new_instructions",
|
|
74
|
+
label: "New instructions",
|
|
75
|
+
category: "Instruction override",
|
|
76
|
+
regex: /new instructions:/i,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
id: "override_instructions",
|
|
80
|
+
label: "Override instructions",
|
|
81
|
+
category: "Instruction override",
|
|
82
|
+
regex: /override (all )?instructions/i,
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: "new_role_is",
|
|
86
|
+
label: "Your new role is",
|
|
87
|
+
category: "Instruction override",
|
|
88
|
+
regex: /your new role is/i,
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
id: "from_now_on",
|
|
92
|
+
label: "From now on",
|
|
93
|
+
category: "Instruction override",
|
|
94
|
+
regex: /from now on,? (you (are|will|must|should)|act as)/i,
|
|
95
|
+
},
|
|
96
|
+
// Hidden HTML directives
|
|
97
|
+
{
|
|
98
|
+
id: "html_prompt_comment",
|
|
99
|
+
label: "HTML prompt comment",
|
|
100
|
+
category: "Hidden HTML directives",
|
|
101
|
+
regex: /<!--\s*(PROMPT|INSTRUCTION|SYSTEM|OVERRIDE|INJECT)\s*:/,
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
id: "html_ignore_comment",
|
|
105
|
+
label: "HTML ignore comment",
|
|
106
|
+
category: "Hidden HTML directives",
|
|
107
|
+
regex: /<!--\s*(ignore|disregard|forget|override)/,
|
|
108
|
+
},
|
|
109
|
+
// Tool call injection
|
|
110
|
+
{
|
|
111
|
+
id: "tool_call_tag",
|
|
112
|
+
label: "Tool call tag",
|
|
113
|
+
category: "Tool call injection",
|
|
114
|
+
regex: /(<tool_call>|<function_call>|<tool_use>)/,
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
id: "invoke_tag",
|
|
118
|
+
label: "Invoke tag",
|
|
119
|
+
category: "Tool call injection",
|
|
120
|
+
regex: /(<invoke|<function_calls>)/,
|
|
121
|
+
},
|
|
122
|
+
// Encoded payload
|
|
123
|
+
{
|
|
124
|
+
id: "encoded_payload",
|
|
125
|
+
label: "Encoded payload",
|
|
126
|
+
category: "Encoded payload",
|
|
127
|
+
regex: /(eval|exec|decode)\((base64|atob|btoa)/i,
|
|
128
|
+
},
|
|
129
|
+
// Obfuscation
|
|
130
|
+
{
|
|
131
|
+
id: "invisible_unicode",
|
|
132
|
+
label: "Invisible unicode",
|
|
133
|
+
category: "Obfuscation",
|
|
134
|
+
// eslint-disable-next-line no-misleading-character-class
|
|
135
|
+
regex: /[\u200B\u200C\u200D\uFEFF]/,
|
|
136
|
+
},
|
|
137
|
+
] as const;
|
|
138
|
+
|
|
139
|
+
module.exports = { INJECTION_PATTERNS };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* GRD Scan/StripMarkdown -- Remove fenced code blocks and inline backtick
|
|
5
|
+
* spans from markdown while preserving line numbers.
|
|
6
|
+
*
|
|
7
|
+
* Matches gsd-2 v2.67 scripts/docs-prompt-injection-scan.sh strip_code_blocks
|
|
8
|
+
* behavior byte-for-byte, including the bug-compatible single-backtick-only
|
|
9
|
+
* inline stripping.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const FENCE_RE = /^\s*```/;
|
|
13
|
+
const INLINE_BACKTICK_RE = /`[^`]+`/g;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Strip fenced code blocks and inline backtick spans from markdown content.
|
|
17
|
+
* Lines inside fenced blocks become empty lines (preserving line numbers for
|
|
18
|
+
* error reporting). Inline backtick spans are replaced with empty string.
|
|
19
|
+
*/
|
|
20
|
+
export function stripCodeBlocks(raw: string): string {
|
|
21
|
+
const lines = raw.split("\n");
|
|
22
|
+
const out: string[] = [];
|
|
23
|
+
let inCode = false;
|
|
24
|
+
for (const line of lines) {
|
|
25
|
+
if (FENCE_RE.test(line)) {
|
|
26
|
+
inCode = !inCode;
|
|
27
|
+
out.push("");
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (inCode) {
|
|
31
|
+
out.push("");
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
out.push(line.replace(INLINE_BACKTICK_RE, ""));
|
|
35
|
+
}
|
|
36
|
+
return out.join("\n");
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
module.exports = { stripCodeBlocks };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* GRD Scan/Types -- Shared output types for the prompt injection scanners.
|
|
5
|
+
*
|
|
6
|
+
* ScanHit is the common output shape produced by both scanProse (prose-level
|
|
7
|
+
* scan in injection.ts) and scanBase64 (decoded-base64 scan in base64.ts),
|
|
8
|
+
* and consumed by the orchestrator in lib/commands/scan.ts and the CLI
|
|
9
|
+
* dispatch layer in lib/cli/tools.ts.
|
|
10
|
+
*
|
|
11
|
+
* Keeping ScanHit here (rather than in a specific scanner module) avoids
|
|
12
|
+
* sibling-import awkwardness where base64.ts would have to reach into
|
|
13
|
+
* injection.ts just to get its own output type.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
export interface ScanHit {
|
|
17
|
+
file: string;
|
|
18
|
+
line: number;
|
|
19
|
+
pattern: string;
|
|
20
|
+
label: string;
|
|
21
|
+
category: string;
|
|
22
|
+
match: string;
|
|
23
|
+
ignored: boolean;
|
|
24
|
+
source: "prose" | "base64";
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Types are compile-time only — no module.exports needed. Consumers use
|
|
28
|
+
// `import type { ScanHit } from './types'` which ts-jest erases at runtime.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* GRD Scheduler/Wait -- Cancellable wait primitive for the scheduler's
|
|
5
|
+
* all-accounts-exhausted fallback.
|
|
6
|
+
*
|
|
7
|
+
* Sleeps until a target timestamp or SIGINT, whichever fires first.
|
|
8
|
+
* Registers a process-level SIGINT handler lazily on first use — GRD has
|
|
9
|
+
* no other SIGINT handlers in lib/, so this is the first. If another
|
|
10
|
+
* module adds one later they should coordinate via a shared registry.
|
|
11
|
+
*
|
|
12
|
+
* Pattern adopted from gsd-2 v2.67 auto-supervisor.ts signal handling.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
let _sigintRegistered = false;
|
|
16
|
+
const _activeControllers: Set<AbortController> = new Set();
|
|
17
|
+
|
|
18
|
+
function _ensureSigintHandler(): void {
|
|
19
|
+
if (_sigintRegistered) return;
|
|
20
|
+
_sigintRegistered = true;
|
|
21
|
+
process.on('SIGINT', () => {
|
|
22
|
+
for (const ctl of _activeControllers) ctl.abort();
|
|
23
|
+
_activeControllers.clear();
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Sleep until `targetMs` (ms since epoch) or SIGINT, whichever fires first.
|
|
29
|
+
*
|
|
30
|
+
* @param targetMs - absolute timestamp at which to resume
|
|
31
|
+
* @returns 'waited' if the delay elapsed normally, 'aborted' if SIGINT was received
|
|
32
|
+
*/
|
|
33
|
+
async function waitUntilOrAbort(targetMs: number): Promise<'waited' | 'aborted'> {
|
|
34
|
+
_ensureSigintHandler();
|
|
35
|
+
const delay = Math.max(0, targetMs - Date.now());
|
|
36
|
+
if (delay === 0) return 'waited';
|
|
37
|
+
|
|
38
|
+
const controller = new AbortController();
|
|
39
|
+
_activeControllers.add(controller);
|
|
40
|
+
|
|
41
|
+
try {
|
|
42
|
+
await new Promise<void>((resolve, reject) => {
|
|
43
|
+
const timer = setTimeout(resolve, delay);
|
|
44
|
+
controller.signal.addEventListener('abort', () => {
|
|
45
|
+
clearTimeout(timer);
|
|
46
|
+
reject(new Error('SIGINT'));
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
return 'waited';
|
|
50
|
+
} catch (e) {
|
|
51
|
+
if ((e as Error).message === 'SIGINT') return 'aborted';
|
|
52
|
+
throw e;
|
|
53
|
+
} finally {
|
|
54
|
+
_activeControllers.delete(controller);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
module.exports = { waitUntilOrAbort };
|