oc-pilot 0.5.1 → 0.88.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/CHANGELOG.md +683 -0
- package/CONTRIBUTING.md +4 -2
- package/README.md +588 -20
- package/README.ru.md +572 -10
- package/dist/cli.js +185 -1
- package/dist/cli.js.map +1 -1
- package/dist/cli.test.js +1211 -1
- package/dist/cli.test.js.map +1 -1
- package/dist/commands/anti-regression.js +97 -0
- package/dist/commands/anti-regression.js.map +1 -0
- package/dist/commands/arch-diff.js +80 -0
- package/dist/commands/arch-diff.js.map +1 -0
- package/dist/commands/authz.js +167 -0
- package/dist/commands/authz.js.map +1 -0
- package/dist/commands/autopsy.js +64 -0
- package/dist/commands/autopsy.js.map +1 -0
- package/dist/commands/bankruptcy.js +60 -0
- package/dist/commands/bankruptcy.js.map +1 -0
- package/dist/commands/battle.js +119 -0
- package/dist/commands/battle.js.map +1 -0
- package/dist/commands/boundaries.js +114 -0
- package/dist/commands/boundaries.js.map +1 -0
- package/dist/commands/bounty.js +56 -0
- package/dist/commands/bounty.js.map +1 -0
- package/dist/commands/brag.js +62 -0
- package/dist/commands/brag.js.map +1 -0
- package/dist/commands/cache.js +62 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/cinema.js +61 -0
- package/dist/commands/cinema.js.map +1 -0
- package/dist/commands/cleanup.js +110 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/commit.js +177 -0
- package/dist/commands/commit.js.map +1 -0
- package/dist/commands/commit.test.js +160 -0
- package/dist/commands/commit.test.js.map +1 -0
- package/dist/commands/compliance.js +121 -0
- package/dist/commands/compliance.js.map +1 -0
- package/dist/commands/contract-drift.js +97 -0
- package/dist/commands/contract-drift.js.map +1 -0
- package/dist/commands/coverage.js +137 -0
- package/dist/commands/coverage.js.map +1 -0
- package/dist/commands/day.js +116 -0
- package/dist/commands/day.js.map +1 -0
- package/dist/commands/day.test.js +45 -0
- package/dist/commands/day.test.js.map +1 -0
- package/dist/commands/deps.js +245 -0
- package/dist/commands/deps.js.map +1 -0
- package/dist/commands/docgen.js +4 -2
- package/dist/commands/docgen.js.map +1 -1
- package/dist/commands/doctor.js +146 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/doctor.test.js +69 -0
- package/dist/commands/doctor.test.js.map +1 -0
- package/dist/commands/echo.js +78 -0
- package/dist/commands/echo.js.map +1 -0
- package/dist/commands/ecosystem-verify.js +113 -0
- package/dist/commands/ecosystem-verify.js.map +1 -0
- package/dist/commands/env-sync.js +102 -0
- package/dist/commands/env-sync.js.map +1 -0
- package/dist/commands/explain.js +115 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/fix.js +145 -3
- package/dist/commands/fix.js.map +1 -1
- package/dist/commands/flaky.js +111 -0
- package/dist/commands/flaky.js.map +1 -0
- package/dist/commands/fuzz.js +119 -0
- package/dist/commands/fuzz.js.map +1 -0
- package/dist/commands/hivemind.js +124 -0
- package/dist/commands/hivemind.js.map +1 -0
- package/dist/commands/impact.js +73 -0
- package/dist/commands/impact.js.map +1 -0
- package/dist/commands/init.js +73 -11
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/init.test.js +138 -0
- package/dist/commands/init.test.js.map +1 -0
- package/dist/commands/install-hook.js +161 -0
- package/dist/commands/install-hook.js.map +1 -0
- package/dist/commands/install-hook.test.js +100 -0
- package/dist/commands/install-hook.test.js.map +1 -0
- package/dist/commands/invariants.js +103 -0
- package/dist/commands/invariants.js.map +1 -0
- package/dist/commands/mock-leak.js +97 -0
- package/dist/commands/mock-leak.js.map +1 -0
- package/dist/commands/mutate.js +99 -0
- package/dist/commands/mutate.js.map +1 -0
- package/dist/commands/pack.js +144 -0
- package/dist/commands/pack.js.map +1 -0
- package/dist/commands/preflight.js +137 -0
- package/dist/commands/preflight.js.map +1 -0
- package/dist/commands/query.js +57 -0
- package/dist/commands/query.js.map +1 -0
- package/dist/commands/ready.js +152 -0
- package/dist/commands/ready.js.map +1 -0
- package/dist/commands/receipt.js +289 -0
- package/dist/commands/receipt.js.map +1 -0
- package/dist/commands/replay.js +112 -0
- package/dist/commands/replay.js.map +1 -0
- package/dist/commands/replay.test.js +125 -0
- package/dist/commands/replay.test.js.map +1 -0
- package/dist/commands/restore.js +54 -0
- package/dist/commands/restore.js.map +1 -0
- package/dist/commands/review.js +263 -4
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/review.test.js +160 -0
- package/dist/commands/review.test.js.map +1 -0
- package/dist/commands/reviewers.js +86 -0
- package/dist/commands/reviewers.js.map +1 -0
- package/dist/commands/roast.js +102 -0
- package/dist/commands/roast.js.map +1 -0
- package/dist/commands/sandbox.js +82 -0
- package/dist/commands/sandbox.js.map +1 -0
- package/dist/commands/sast.js +162 -0
- package/dist/commands/sast.js.map +1 -0
- package/dist/commands/scan.js +47 -12
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/slop.js +145 -0
- package/dist/commands/slop.js.map +1 -0
- package/dist/commands/slop.test.js +135 -0
- package/dist/commands/slop.test.js.map +1 -0
- package/dist/commands/stats.js +61 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/test-gen.js +372 -0
- package/dist/commands/test-gen.js.map +1 -0
- package/dist/commands/test-guard.js +89 -0
- package/dist/commands/test-guard.js.map +1 -0
- package/dist/commands/test-plan.js +133 -0
- package/dist/commands/test-plan.js.map +1 -0
- package/dist/commands/zoom-symbol.js +52 -0
- package/dist/commands/zoom-symbol.js.map +1 -0
- package/dist/core/agent-rules.js +35 -0
- package/dist/core/agent-rules.js.map +1 -0
- package/dist/core/anthropic.test.js +116 -0
- package/dist/core/anthropic.test.js.map +1 -0
- package/dist/core/anti-regression.js +161 -0
- package/dist/core/anti-regression.js.map +1 -0
- package/dist/core/anti-regression.test.js +154 -0
- package/dist/core/anti-regression.test.js.map +1 -0
- package/dist/core/aql.js +220 -0
- package/dist/core/aql.js.map +1 -0
- package/dist/core/aql.test.js +64 -0
- package/dist/core/aql.test.js.map +1 -0
- package/dist/core/arch-diff.js +122 -0
- package/dist/core/arch-diff.js.map +1 -0
- package/dist/core/arch-diff.test.js +93 -0
- package/dist/core/arch-diff.test.js.map +1 -0
- package/dist/core/authz.js +292 -0
- package/dist/core/authz.js.map +1 -0
- package/dist/core/authz.test.js +115 -0
- package/dist/core/authz.test.js.map +1 -0
- package/dist/core/autopsy.js +230 -0
- package/dist/core/autopsy.js.map +1 -0
- package/dist/core/autopsy.test.js +106 -0
- package/dist/core/autopsy.test.js.map +1 -0
- package/dist/core/bankruptcy.js +232 -0
- package/dist/core/bankruptcy.js.map +1 -0
- package/dist/core/bankruptcy.test.js +91 -0
- package/dist/core/bankruptcy.test.js.map +1 -0
- package/dist/core/baseline.js +131 -0
- package/dist/core/baseline.js.map +1 -0
- package/dist/core/baseline.test.js +91 -0
- package/dist/core/baseline.test.js.map +1 -0
- package/dist/core/battle.js +213 -0
- package/dist/core/battle.js.map +1 -0
- package/dist/core/battle.test.js +116 -0
- package/dist/core/battle.test.js.map +1 -0
- package/dist/core/boundaries.js +200 -0
- package/dist/core/boundaries.js.map +1 -0
- package/dist/core/boundaries.test.js +62 -0
- package/dist/core/boundaries.test.js.map +1 -0
- package/dist/core/bounty.js +128 -0
- package/dist/core/bounty.js.map +1 -0
- package/dist/core/bounty.test.js +82 -0
- package/dist/core/bounty.test.js.map +1 -0
- package/dist/core/brag.js +174 -0
- package/dist/core/brag.js.map +1 -0
- package/dist/core/brag.test.js +43 -0
- package/dist/core/brag.test.js.map +1 -0
- package/dist/core/cache.js +189 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/cache.test.js +159 -0
- package/dist/core/cache.test.js.map +1 -0
- package/dist/core/cinema.js +242 -0
- package/dist/core/cinema.js.map +1 -0
- package/dist/core/cinema.test.js +73 -0
- package/dist/core/cinema.test.js.map +1 -0
- package/dist/core/cleanup.js +107 -0
- package/dist/core/cleanup.js.map +1 -0
- package/dist/core/compliance.js +193 -0
- package/dist/core/compliance.js.map +1 -0
- package/dist/core/compliance.test.js +123 -0
- package/dist/core/compliance.test.js.map +1 -0
- package/dist/core/config.js +78 -0
- package/dist/core/config.js.map +1 -1
- package/dist/core/config.test.js +66 -0
- package/dist/core/config.test.js.map +1 -1
- package/dist/core/contract-drift.js +296 -0
- package/dist/core/contract-drift.js.map +1 -0
- package/dist/core/contract-drift.test.js +166 -0
- package/dist/core/contract-drift.test.js.map +1 -0
- package/dist/core/cost.test.js +103 -0
- package/dist/core/cost.test.js.map +1 -0
- package/dist/core/coverage.js +335 -0
- package/dist/core/coverage.js.map +1 -0
- package/dist/core/coverage.test.js +190 -0
- package/dist/core/coverage.test.js.map +1 -0
- package/dist/core/deps-fix.js +169 -0
- package/dist/core/deps-fix.js.map +1 -0
- package/dist/core/deps-fix.test.js +176 -0
- package/dist/core/deps-fix.test.js.map +1 -0
- package/dist/core/deps-health.js +353 -0
- package/dist/core/deps-health.js.map +1 -0
- package/dist/core/deps-health.test.js +230 -0
- package/dist/core/deps-health.test.js.map +1 -0
- package/dist/core/deps-why.js +260 -0
- package/dist/core/deps-why.js.map +1 -0
- package/dist/core/deps-why.test.js +175 -0
- package/dist/core/deps-why.test.js.map +1 -0
- package/dist/core/deps.js +179 -0
- package/dist/core/deps.js.map +1 -0
- package/dist/core/deps.test.js +88 -0
- package/dist/core/deps.test.js.map +1 -0
- package/dist/core/diff-source.js +4 -2
- package/dist/core/diff-source.js.map +1 -1
- package/dist/core/echo.js +151 -0
- package/dist/core/echo.js.map +1 -0
- package/dist/core/echo.test.js +90 -0
- package/dist/core/echo.test.js.map +1 -0
- package/dist/core/ecosystem-verify.js +331 -0
- package/dist/core/ecosystem-verify.js.map +1 -0
- package/dist/core/ecosystem-verify.test.js +158 -0
- package/dist/core/ecosystem-verify.test.js.map +1 -0
- package/dist/core/engine-preset.test.js +60 -0
- package/dist/core/engine-preset.test.js.map +1 -0
- package/dist/core/engine.js +278 -32
- package/dist/core/engine.js.map +1 -1
- package/dist/core/engine.test.js +63 -0
- package/dist/core/engine.test.js.map +1 -1
- package/dist/core/env-sync.js +122 -0
- package/dist/core/env-sync.js.map +1 -0
- package/dist/core/env-sync.test.js +99 -0
- package/dist/core/env-sync.test.js.map +1 -0
- package/dist/core/file-context.js +4 -2
- package/dist/core/file-context.js.map +1 -1
- package/dist/core/findings-baseline.js +60 -0
- package/dist/core/findings-baseline.js.map +1 -0
- package/dist/core/findings-baseline.test.js +77 -0
- package/dist/core/findings-baseline.test.js.map +1 -0
- package/dist/core/findings.js +68 -21
- package/dist/core/findings.js.map +1 -1
- package/dist/core/flaky.js +137 -0
- package/dist/core/flaky.js.map +1 -0
- package/dist/core/flaky.test.js +97 -0
- package/dist/core/flaky.test.js.map +1 -0
- package/dist/core/format.js +5 -3
- package/dist/core/format.js.map +1 -1
- package/dist/core/fuzz.js +306 -0
- package/dist/core/fuzz.js.map +1 -0
- package/dist/core/fuzz.test.js +121 -0
- package/dist/core/fuzz.test.js.map +1 -0
- package/dist/core/git.js +22 -0
- package/dist/core/git.js.map +1 -1
- package/dist/core/gitlab.js +176 -0
- package/dist/core/gitlab.js.map +1 -0
- package/dist/core/gitlab.test.js +199 -0
- package/dist/core/gitlab.test.js.map +1 -0
- package/dist/core/hivemind.js +250 -0
- package/dist/core/hivemind.js.map +1 -0
- package/dist/core/hivemind.test.js +79 -0
- package/dist/core/hivemind.test.js.map +1 -0
- package/dist/core/hologram.js +463 -0
- package/dist/core/hologram.js.map +1 -0
- package/dist/core/hologram.test.js +124 -0
- package/dist/core/hologram.test.js.map +1 -0
- package/dist/core/impact.js +240 -0
- package/dist/core/impact.js.map +1 -0
- package/dist/core/impact.test.js +105 -0
- package/dist/core/impact.test.js.map +1 -0
- package/dist/core/import-graph.js +170 -0
- package/dist/core/import-graph.js.map +1 -0
- package/dist/core/import-graph.test.js +52 -0
- package/dist/core/import-graph.test.js.map +1 -0
- package/dist/core/injection.js +55 -0
- package/dist/core/injection.js.map +1 -0
- package/dist/core/injection.test.js +45 -0
- package/dist/core/injection.test.js.map +1 -0
- package/dist/core/invariants.js +286 -0
- package/dist/core/invariants.js.map +1 -0
- package/dist/core/invariants.test.js +87 -0
- package/dist/core/invariants.test.js.map +1 -0
- package/dist/core/last-review.js +92 -0
- package/dist/core/last-review.js.map +1 -0
- package/dist/core/last-review.test.js +97 -0
- package/dist/core/last-review.test.js.map +1 -0
- package/dist/core/lockfile-support.test.js +112 -0
- package/dist/core/lockfile-support.test.js.map +1 -0
- package/dist/core/lockfile.js +284 -0
- package/dist/core/lockfile.js.map +1 -0
- package/dist/core/lockfile.test.js +203 -0
- package/dist/core/lockfile.test.js.map +1 -0
- package/dist/core/mock-leak.js +120 -0
- package/dist/core/mock-leak.js.map +1 -0
- package/dist/core/mock-leak.test.js +79 -0
- package/dist/core/mock-leak.test.js.map +1 -0
- package/dist/core/mutation.js +206 -0
- package/dist/core/mutation.js.map +1 -0
- package/dist/core/mutation.test.js +104 -0
- package/dist/core/mutation.test.js.map +1 -0
- package/dist/core/opencode.js +15 -2
- package/dist/core/opencode.js.map +1 -1
- package/dist/core/opencode.test.js +10 -1
- package/dist/core/opencode.test.js.map +1 -1
- package/dist/core/options.js +51 -3
- package/dist/core/options.js.map +1 -1
- package/dist/core/osv.js +202 -0
- package/dist/core/osv.js.map +1 -0
- package/dist/core/osv.test.js +173 -0
- package/dist/core/osv.test.js.map +1 -0
- package/dist/core/output-format.test.js +102 -0
- package/dist/core/output-format.test.js.map +1 -0
- package/dist/core/pack.js +212 -0
- package/dist/core/pack.js.map +1 -0
- package/dist/core/pack.test.js +129 -0
- package/dist/core/pack.test.js.map +1 -0
- package/dist/core/phantom.js +155 -0
- package/dist/core/phantom.js.map +1 -0
- package/dist/core/phantom.test.js +58 -0
- package/dist/core/phantom.test.js.map +1 -0
- package/dist/core/pr-comment.js +116 -0
- package/dist/core/pr-comment.js.map +1 -0
- package/dist/core/pr-comment.test.js +53 -0
- package/dist/core/pr-comment.test.js.map +1 -0
- package/dist/core/pr-review.js +160 -0
- package/dist/core/pr-review.js.map +1 -0
- package/dist/core/pr-review.test.js +62 -0
- package/dist/core/pr-review.test.js.map +1 -0
- package/dist/core/preflight-run.js +106 -0
- package/dist/core/preflight-run.js.map +1 -0
- package/dist/core/preflight.js +173 -0
- package/dist/core/preflight.js.map +1 -0
- package/dist/core/preflight.test.js +187 -0
- package/dist/core/preflight.test.js.map +1 -0
- package/dist/core/presets.js +408 -0
- package/dist/core/presets.js.map +1 -0
- package/dist/core/presets.test.js +79 -0
- package/dist/core/presets.test.js.map +1 -0
- package/dist/core/prompt.golden.test.js +74 -0
- package/dist/core/prompt.golden.test.js.map +1 -0
- package/dist/core/prompt.js +43 -4
- package/dist/core/prompt.js.map +1 -1
- package/dist/core/prompt.test.js +16 -0
- package/dist/core/prompt.test.js.map +1 -1
- package/dist/core/readiness-fix.js +111 -0
- package/dist/core/readiness-fix.js.map +1 -0
- package/dist/core/readiness-fix.test.js +99 -0
- package/dist/core/readiness-fix.test.js.map +1 -0
- package/dist/core/readiness.js +189 -0
- package/dist/core/readiness.js.map +1 -0
- package/dist/core/readiness.test.js +199 -0
- package/dist/core/readiness.test.js.map +1 -0
- package/dist/core/receipt.js +193 -0
- package/dist/core/receipt.js.map +1 -0
- package/dist/core/receipt.test.js +193 -0
- package/dist/core/receipt.test.js.map +1 -0
- package/dist/core/reviewers.js +179 -0
- package/dist/core/reviewers.js.map +1 -0
- package/dist/core/reviewers.test.js +105 -0
- package/dist/core/reviewers.test.js.map +1 -0
- package/dist/core/roast.js +27 -0
- package/dist/core/roast.js.map +1 -0
- package/dist/core/roast.test.js +19 -0
- package/dist/core/roast.test.js.map +1 -0
- package/dist/core/router.js +8 -0
- package/dist/core/router.js.map +1 -0
- package/dist/core/router.test.js +157 -0
- package/dist/core/router.test.js.map +1 -0
- package/dist/core/rules.js +2 -2
- package/dist/core/rules.js.map +1 -1
- package/dist/core/run.js +322 -20
- package/dist/core/run.js.map +1 -1
- package/dist/core/sarif.js +125 -0
- package/dist/core/sarif.js.map +1 -0
- package/dist/core/sarif.test.js +60 -0
- package/dist/core/sarif.test.js.map +1 -0
- package/dist/core/sast.js +324 -0
- package/dist/core/sast.js.map +1 -0
- package/dist/core/sast.test.js +105 -0
- package/dist/core/sast.test.js.map +1 -0
- package/dist/core/sbom.js +121 -0
- package/dist/core/sbom.js.map +1 -0
- package/dist/core/sbom.test.js +81 -0
- package/dist/core/sbom.test.js.map +1 -0
- package/dist/core/second-opinion.js +88 -0
- package/dist/core/second-opinion.js.map +1 -0
- package/dist/core/second-opinion.test.js +89 -0
- package/dist/core/second-opinion.test.js.map +1 -0
- package/dist/core/secrets.js +120 -5
- package/dist/core/secrets.js.map +1 -1
- package/dist/core/secrets.test.js +74 -1
- package/dist/core/secrets.test.js.map +1 -1
- package/dist/core/shadow.js +94 -0
- package/dist/core/shadow.js.map +1 -0
- package/dist/core/shadow.test.js +50 -0
- package/dist/core/shadow.test.js.map +1 -0
- package/dist/core/slicing.js +110 -0
- package/dist/core/slicing.js.map +1 -0
- package/dist/core/slicing.test.js +287 -0
- package/dist/core/slicing.test.js.map +1 -0
- package/dist/core/slop/churn.js +49 -0
- package/dist/core/slop/churn.js.map +1 -0
- package/dist/core/slop/collect.js +186 -0
- package/dist/core/slop/collect.js.map +1 -0
- package/dist/core/slop/dead-exports.js +101 -0
- package/dist/core/slop/dead-exports.js.map +1 -0
- package/dist/core/slop/duplicates.js +155 -0
- package/dist/core/slop/duplicates.js.map +1 -0
- package/dist/core/slop/index.js +72 -0
- package/dist/core/slop/index.js.map +1 -0
- package/dist/core/slop/model.js +2 -0
- package/dist/core/slop/model.js.map +1 -0
- package/dist/core/slop/score.js +185 -0
- package/dist/core/slop/score.js.map +1 -0
- package/dist/core/slop/slop.test.js +160 -0
- package/dist/core/slop/slop.test.js.map +1 -0
- package/dist/core/slop/source.js +129 -0
- package/dist/core/slop/source.js.map +1 -0
- package/dist/core/slop/test-debt.js +178 -0
- package/dist/core/slop/test-debt.js.map +1 -0
- package/dist/core/slop/test-debt.test.js +114 -0
- package/dist/core/slop/test-debt.test.js.map +1 -0
- package/dist/core/slop/todos.js +117 -0
- package/dist/core/slop/todos.js.map +1 -0
- package/dist/core/snapshot.js +214 -0
- package/dist/core/snapshot.js.map +1 -0
- package/dist/core/snapshot.test.js +101 -0
- package/dist/core/snapshot.test.js.map +1 -0
- package/dist/core/stats.js +119 -0
- package/dist/core/stats.js.map +1 -0
- package/dist/core/stats.test.js +86 -0
- package/dist/core/stats.test.js.map +1 -0
- package/dist/core/suppressions.js +96 -0
- package/dist/core/suppressions.js.map +1 -0
- package/dist/core/suppressions.test.js +90 -0
- package/dist/core/suppressions.test.js.map +1 -0
- package/dist/core/test-delta.js +53 -0
- package/dist/core/test-delta.js.map +1 -0
- package/dist/core/test-delta.test.js +41 -0
- package/dist/core/test-delta.test.js.map +1 -0
- package/dist/core/test-plan.js +212 -0
- package/dist/core/test-plan.js.map +1 -0
- package/dist/core/test-plan.test.js +94 -0
- package/dist/core/test-plan.test.js.map +1 -0
- package/dist/core/test-weakening.js +191 -0
- package/dist/core/test-weakening.js.map +1 -0
- package/dist/core/test-weakening.test.js +114 -0
- package/dist/core/test-weakening.test.js.map +1 -0
- package/dist/core/tree-scan.js +77 -0
- package/dist/core/tree-scan.js.map +1 -0
- package/dist/core/tree-scan.test.js +58 -0
- package/dist/core/tree-scan.test.js.map +1 -0
- package/dist/mcp-prompts.test.js +133 -0
- package/dist/mcp-prompts.test.js.map +1 -0
- package/dist/mcp.js +3303 -240
- package/dist/mcp.js.map +1 -1
- package/dist/mcp.test.js +1739 -1
- package/dist/mcp.test.js.map +1 -1
- package/dist/skills.test.js +221 -0
- package/dist/skills.test.js.map +1 -0
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/docs/integrations.md +151 -7
- package/package.json +2 -1
- package/prompts/oc-pilot.en.md +8 -1
- package/prompts/oc-pilot.ru.md +8 -1
- package/server.json +2 -2
- package/skills/agent-self-review/SKILL.md +87 -0
- package/skills/commit-discipline/SKILL.md +86 -0
- package/skills/oc-pilot/SKILL.md +86 -0
- package/skills/secure-diff-gate/SKILL.md +101 -0
- package/skills/stack-review-packs/SKILL.md +76 -0
- package/skills/test-failure-triage/SKILL.md +88 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: secure-diff-gate
|
|
3
|
+
description: Use before a security-sensitive commit or pull request. Scans the diff for leaked secrets, reviews it against a security rule preset, flags prompt-injection payloads and risky dependency changes, and produces SARIF for code scanning.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Secure diff gate
|
|
7
|
+
|
|
8
|
+
A review that only reads logic misses the four things that actually ship
|
|
9
|
+
incidents: committed credentials, injection sinks, agent-targeted instructions
|
|
10
|
+
hidden in the diff, and a dependency that is not what its name claims. This
|
|
11
|
+
skill checks all four before the change leaves the machine.
|
|
12
|
+
|
|
13
|
+
## Setup
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm i -g https://github.com/MyNameIsNikki/oc-pilot/archive/refs/tags/v0.88.1.tar.gz
|
|
17
|
+
oc-pilot init --preset security,devops
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
`--preset` accepts several rules packs (comma-separated) and writes
|
|
21
|
+
`.oc-pilot/rules.md`, which is sent with every request. Add your stack too, for
|
|
22
|
+
example `security,node` or `security,python,devops`.
|
|
23
|
+
|
|
24
|
+
## Workflow
|
|
25
|
+
|
|
26
|
+
1. **Secrets, offline.**
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
oc-pilot scan --staged --json
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Catches provider keys, private-key blocks, and high-entropy assignments.
|
|
33
|
+
Exit `3` blocks. If a value is genuinely public, mark the line with
|
|
34
|
+
`oc-pilot:ignore-secret` or add a path glob to `.oc-pilot/ignore` — never
|
|
35
|
+
lower the threshold globally.
|
|
36
|
+
|
|
37
|
+
2. **Security review with a second opinion.**
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
oc-pilot review --staged \
|
|
41
|
+
--fail-on critical --fail-on-secrets \
|
|
42
|
+
--second-opinion --second-opinion-model <cheap-model>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Critical findings are re-checked by a second model. A rejected finding is
|
|
46
|
+
downgraded and annotated instead of silently disappearing, so the report
|
|
47
|
+
still shows what was considered. Requires `--engine openai` for the
|
|
48
|
+
verifier.
|
|
49
|
+
|
|
50
|
+
3. **Read the local signals.** `review` also inspects the diff without a model
|
|
51
|
+
call and prints, when relevant:
|
|
52
|
+
|
|
53
|
+
- `DEPENDENCY_CHANGES` — new or changed packages with typosquat matches,
|
|
54
|
+
unpinned specs, `git+`/URL references, and manifest/lockfile drift.
|
|
55
|
+
- `PROMPT_INJECTION_RISKS` — added lines that read like instructions to an
|
|
56
|
+
AI ("ignore previous instructions", role hijacks, long base64 blobs,
|
|
57
|
+
invisible Unicode).
|
|
58
|
+
- `TEST_COVERAGE_HINT` — logic changed without a matching test change.
|
|
59
|
+
|
|
60
|
+
Treat `DEPENDENCY_CHANGES` and `PROMPT_INJECTION_RISKS` as review
|
|
61
|
+
requirements, not as noise to acknowledge and forget.
|
|
62
|
+
|
|
63
|
+
4. **Publish to code scanning.**
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
oc-pilot review --base origin/main --format sarif -o oc-pilot.sarif
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Upload with `github/codeql-action/upload-sarif@v3`. Rule ids are stable:
|
|
70
|
+
`oc-pilot/secret`, `oc-pilot/critical`, `oc-pilot/warning`. Previews are
|
|
71
|
+
redacted, so SARIF never contains the secret value.
|
|
72
|
+
|
|
73
|
+
5. **Make it non-optional.**
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
oc-pilot install-hook --pre-push
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Installs `pre-commit` (`preflight --staged`; pass `--scan` for
|
|
80
|
+
`scan --staged` only) and `pre-push` (`review`) hooks,
|
|
81
|
+
backing up any existing hook. Bypass for a single command with
|
|
82
|
+
`OC_PILOT_SKIP=1`; uninstall with `oc-pilot install-hook --uninstall`.
|
|
83
|
+
|
|
84
|
+
## Accepted risks
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
oc-pilot review --staged --interactive # per finding: hide in baseline
|
|
88
|
+
oc-pilot review --staged --baseline # only new findings fail the gate
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
The baseline fingerprints `severity | file | normalized text`, so a moved line
|
|
92
|
+
does not resurrect an accepted finding. A changed finding does. Review the
|
|
93
|
+
baseline file like code; do not add to it to make a build green.
|
|
94
|
+
|
|
95
|
+
## Guardrails
|
|
96
|
+
|
|
97
|
+
- Never commit a real secret to test the scanner.
|
|
98
|
+
- Never disable the secret scan for a whole run.
|
|
99
|
+
- Review dependency additions by hand even when the gate is green; the gate
|
|
100
|
+
knows typosquats, not malicious packages that are correctly named.
|
|
101
|
+
- Report which controls ran, their exit codes, and every accepted risk.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: stack-review-packs
|
|
3
|
+
description: Use when setting up review rules for a new repository or a new stack. Installs a curated rules pack for one of 23 languages and frameworks, combines packs, and wires the same rules into the CLI, MCP server, and CI.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Stack review packs
|
|
7
|
+
|
|
8
|
+
A generic reviewer says "consider error handling". A reviewer that knows the
|
|
9
|
+
stack says "this `async` handler returns a floating promise, and the Express 4
|
|
10
|
+
router will not catch it". Rules packs are how the second reviewer happens.
|
|
11
|
+
|
|
12
|
+
## Setup
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm i -g https://github.com/MyNameIsNikki/oc-pilot/archive/refs/tags/v0.88.1.tar.gz
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Available packs
|
|
19
|
+
|
|
20
|
+
| Area | Ids |
|
|
21
|
+
| --- | --- |
|
|
22
|
+
| General | `base`, `typescript`, `security`, `devops` |
|
|
23
|
+
| JavaScript | `node`, `react`, `next`, `vue`, `svelte`, `angular` |
|
|
24
|
+
| Backend | `python`, `go`, `rust`, `java`, `kotlin`, `csharp`, `php`, `ruby` |
|
|
25
|
+
| Mobile | `swift`, `flutter` |
|
|
26
|
+
| Other | `elixir`, `zig`, `scala` |
|
|
27
|
+
|
|
28
|
+
## Install
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
oc-pilot init --preset react,typescript,security
|
|
32
|
+
oc-pilot init --preset python,devops --force
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Several packs are joined under one header in `.oc-pilot/rules.md`, which is
|
|
36
|
+
included in every review, fix, and docgen request. The file is plain Markdown:
|
|
37
|
+
add project-specific constraints at the end, for example "money is integer
|
|
38
|
+
cents", "do not log request bodies", "migrations must be reversible".
|
|
39
|
+
|
|
40
|
+
## Verify the rules are actually used
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
oc-pilot review --staged --json
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Check `meta.rules` in the JSON: it contains the resolved rules path, or `null`
|
|
47
|
+
when no file was found. A rules file that is silently ignored is worse than
|
|
48
|
+
none.
|
|
49
|
+
|
|
50
|
+
## Keep the same rules everywhere
|
|
51
|
+
|
|
52
|
+
- **CLI** — reads `.oc-pilot/rules.md` automatically; override with `--rules`.
|
|
53
|
+
- **MCP server** — expose the file as the `oc-pilot://rules` resource so the
|
|
54
|
+
host agent can read it, and it is applied to every MCP review call.
|
|
55
|
+
- **CI** — commit the file; the GitHub Action and the pre-commit hooks use the
|
|
56
|
+
same path.
|
|
57
|
+
- **Agents** — `AGENTS.md` and `CLAUDE.md` are picked up automatically as an
|
|
58
|
+
additional context block. Keep stack rules in `.oc-pilot/rules.md` and
|
|
59
|
+
workflow rules in the agent file, so neither duplicates the other.
|
|
60
|
+
|
|
61
|
+
## Writing a pack
|
|
62
|
+
|
|
63
|
+
A good pack has three sections and no adjectives:
|
|
64
|
+
|
|
65
|
+
1. **What breaks** — concrete failure modes for this stack.
|
|
66
|
+
2. **What is unsafe** — injection sinks, auth boundaries, secret exposure.
|
|
67
|
+
3. **What rots** — patterns that pass review now and cost later.
|
|
68
|
+
|
|
69
|
+
One line per rule, imperative, no "consider" or "try to". If a rule cannot be
|
|
70
|
+
checked by reading a diff, drop it.
|
|
71
|
+
|
|
72
|
+
## Guardrails
|
|
73
|
+
|
|
74
|
+
- Do not enable every pack; irrelevant rules dilute attention and cost tokens.
|
|
75
|
+
- Do not copy rules between stacks without adapting the failure modes.
|
|
76
|
+
- Re-read the pack after a framework major upgrade; idioms expire.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test-failure-triage
|
|
3
|
+
description: Use when a test suite fails and the cause is unclear. Captures the failing output, explains the root cause from the diff and the log, produces a minimal patch, applies it with a snapshot, and verifies the suite is green.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Test failure triage
|
|
7
|
+
|
|
8
|
+
Most agent failures on red tests are not "the model cannot code". They are
|
|
9
|
+
misdiagnosis: the agent patches the assertion instead of the cause, or fixes
|
|
10
|
+
the cause but breaks a neighbouring test. This skill forces a root-cause step
|
|
11
|
+
before any patch, and a verification step after it.
|
|
12
|
+
|
|
13
|
+
## Setup
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm i -g https://github.com/MyNameIsNikki/oc-pilot/archive/refs/tags/v0.88.1.tar.gz
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Workflow
|
|
20
|
+
|
|
21
|
+
1. **Capture the failure verbatim.** Do not summarise it from memory.
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm test 2>&1 | tee /tmp/test.log; echo "exit=${PIPESTATUS[0]}"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
2. **Ask for the root cause, not for a patch.**
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
oc-pilot test-fix --log /tmp/test.log --command "npm test"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The output separates the observed failure, the suspected root cause, and a
|
|
34
|
+
minimal fix. If the root cause references code that is not in the diff or
|
|
35
|
+
the log, the model is guessing. Say so and gather that file first.
|
|
36
|
+
|
|
37
|
+
3. **Propose the patch without touching the tree.**
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
oc-pilot fix --command "npm test" --rounds 1
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Inspect the unified diff. Reject anything that edits test expectations
|
|
44
|
+
without a stated behavioural reason, deletes assertions, or adds sleeps,
|
|
45
|
+
retries, or `skip`.
|
|
46
|
+
|
|
47
|
+
4. **Apply with a snapshot.**
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
oc-pilot fix --apply --command "npm test" --rounds 2
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
A snapshot is created automatically before the patch is applied. If the
|
|
54
|
+
round limit is hit, the tree is reverted to the snapshot.
|
|
55
|
+
|
|
56
|
+
5. **Verify independently.** Run the suite yourself, not only through the
|
|
57
|
+
tool, and check that the count of passing tests did not drop while the
|
|
58
|
+
failing test turned green.
|
|
59
|
+
|
|
60
|
+
6. **Roll back if the fix is wrong.**
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
oc-pilot restore --list
|
|
64
|
+
oc-pilot restore <snapshot-id>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
Restore refuses to run if `HEAD` moved since the snapshot, so commit or
|
|
68
|
+
stash first.
|
|
69
|
+
|
|
70
|
+
## Triage heuristics
|
|
71
|
+
|
|
72
|
+
| Symptom | Likely cause | Check before patching |
|
|
73
|
+
| --- | --- | --- |
|
|
74
|
+
| `undefined is not a function` | Wrong import shape or mock | The module's actual export |
|
|
75
|
+
| `ECONNREFUSED` / timeouts | Missing fixture or port clash | Test isolation, not the code |
|
|
76
|
+
| Snapshot diff | Intentional output change | Whether the change was requested |
|
|
77
|
+
| Type error only in CI | Different TS/lib version | `tsconfig`, lockfile drift |
|
|
78
|
+
| Flaky pass locally | Order dependence | Run the file alone, then the suite |
|
|
79
|
+
|
|
80
|
+
## Guardrails
|
|
81
|
+
|
|
82
|
+
- Never mark a failing test as skipped to close the task.
|
|
83
|
+
- Never weaken an assertion unless the expected behaviour genuinely changed;
|
|
84
|
+
if it did, update the test in its own commit with an explanation.
|
|
85
|
+
- If the suite takes longer than the timeout, raise `--timeout` rather than
|
|
86
|
+
removing tests.
|
|
87
|
+
- Report the failing test name, the root cause, the patch summary, and the
|
|
88
|
+
final suite status.
|