oc-pilot 0.0.0-stage → 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 +761 -0
- package/CONTRIBUTING.md +45 -0
- package/Dockerfile +32 -0
- package/LICENSE +21 -0
- package/README.md +1233 -2
- package/README.ru.md +1085 -0
- package/SECURITY.md +42 -0
- package/action.yml +68 -0
- package/dist/cli.js +304 -0
- package/dist/cli.js.map +1 -0
- package/dist/cli.test.js +1769 -0
- package/dist/cli.test.js.map +1 -0
- 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/custom.js +87 -0
- package/dist/commands/custom.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 +258 -0
- package/dist/commands/docgen.js.map +1 -0
- package/dist/commands/doctor.js +478 -0
- package/dist/commands/doctor.js.map +1 -0
- 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 +424 -0
- package/dist/commands/fix.js.map +1 -0
- 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 +121 -0
- package/dist/commands/init.js.map +1 -0
- 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 +336 -0
- package/dist/commands/review.js.map +1 -0
- 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 +137 -0
- package/dist/commands/scan.js.map +1 -0
- package/dist/commands/setup.js +443 -0
- package/dist/commands/setup.js.map +1 -0
- 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-fix.js +181 -0
- package/dist/commands/test-fix.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/command.js +69 -0
- package/dist/core/command.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 +355 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/config.test.js +211 -0
- package/dist/core/config.test.js.map +1 -0
- 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 +100 -0
- package/dist/core/diff-source.js.map +1 -0
- package/dist/core/diff.js +168 -0
- package/dist/core/diff.js.map +1 -0
- package/dist/core/diff.test.js +94 -0
- package/dist/core/diff.test.js.map +1 -0
- 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 +425 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/engine.test.js +206 -0
- package/dist/core/engine.test.js.map +1 -0
- 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/errors.js +21 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/file-context.js +60 -0
- package/dist/core/file-context.js.map +1 -0
- package/dist/core/file-context.test.js +58 -0
- package/dist/core/file-context.test.js.map +1 -0
- 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 +157 -0
- package/dist/core/findings.js.map +1 -0
- package/dist/core/findings.test.js +62 -0
- package/dist/core/findings.test.js.map +1 -0
- 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 +33 -0
- package/dist/core/format.js.map +1 -0
- package/dist/core/format.test.js +26 -0
- package/dist/core/format.test.js.map +1 -0
- 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 +159 -0
- package/dist/core/git.js.map +1 -0
- 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/io.js +57 -0
- package/dist/core/io.js.map +1 -0
- package/dist/core/lang.js +17 -0
- package/dist/core/lang.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/log.js +40 -0
- package/dist/core/log.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 +358 -0
- package/dist/core/opencode.js.map +1 -0
- package/dist/core/opencode.test.js +68 -0
- package/dist/core/opencode.test.js.map +1 -0
- package/dist/core/options.js +190 -0
- package/dist/core/options.js.map +1 -0
- 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/parse.js +54 -0
- package/dist/core/parse.js.map +1 -0
- package/dist/core/patch.js +155 -0
- package/dist/core/patch.js.map +1 -0
- package/dist/core/patch.test.js +70 -0
- package/dist/core/patch.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/process.js +27 -0
- package/dist/core/process.js.map +1 -0
- package/dist/core/project.js +191 -0
- package/dist/core/project.js.map +1 -0
- package/dist/core/project.test.js +75 -0
- package/dist/core/project.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 +294 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/prompt.test.js +122 -0
- package/dist/core/prompt.test.js.map +1 -0
- 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 +64 -0
- package/dist/core/rules.js.map +1 -0
- package/dist/core/rules.test.js +72 -0
- package/dist/core/rules.test.js.map +1 -0
- package/dist/core/run.js +557 -0
- package/dist/core/run.js.map +1 -0
- 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 +446 -0
- package/dist/core/secrets.js.map +1 -0
- package/dist/core/secrets.test.js +194 -0
- package/dist/core/secrets.test.js.map +1 -0
- 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/snippets.js +130 -0
- package/dist/core/snippets.js.map +1 -0
- package/dist/core/snippets.test.js +55 -0
- package/dist/core/snippets.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-http.test.js +146 -0
- package/dist/mcp-http.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 +3976 -0
- package/dist/mcp.js.map +1 -0
- package/dist/mcp.test.js +1866 -0
- package/dist/mcp.test.js.map +1 -0
- package/dist/setup.test.js +215 -0
- package/dist/setup.test.js.map +1 -0
- package/dist/skills.test.js +221 -0
- package/dist/skills.test.js.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/docker-compose.yml +18 -0
- package/docs/integrations.md +611 -0
- package/package.json +77 -4
- package/prompts/oc-pilot.en.md +111 -0
- package/prompts/oc-pilot.ru.md +113 -0
- package/server.json +21 -0
- package/skills/agent-self-review/SKILL.md +87 -0
- package/skills/commit-discipline/SKILL.md +86 -0
- package/skills/oc-pilot/SKILL.md +133 -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
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,761 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.88.1
|
|
4
|
+
|
|
5
|
+
- CI: release workflow поддерживает `NPM_TOKEN` как запасной путь публикации; без секрета остаётся OIDC Trusted Publishing.
|
|
6
|
+
- Токен читается только из GitHub secret, не печатается в логах, а созданный `.npmrc` удаляется после публикации.
|
|
7
|
+
- Runtime не менялся; 661 тест; версия 0.88.1.
|
|
8
|
+
|
|
9
|
+
## 0.88.0
|
|
10
|
+
|
|
11
|
+
- Новая команда `hivemind`: P2P-сеть агентов на встроенном `node:net` — `init`, `trust`, `status`, `serve`, `send`.
|
|
12
|
+
- Каждое соединение проходит подписанный ed25519 handshake и ECDH X25519; сообщения шифруются AES-256-GCM, а недоверенные ключи отбрасываются до чтения данных.
|
|
13
|
+
- По сети разрешены только diff, AST и LLM-запросы; payload с command/exec/script отклоняется, поэтому удалённого исполнения кода нет.
|
|
14
|
+
- MCP-инструмент `hivemind_status` и промпт `join-the-swarm` проверяют identity и доверенных узлов; `serve` и `send` работают только с явным `trust`.
|
|
15
|
+
- Документация и skill; 661 тест; версия 0.88.0.
|
|
16
|
+
|
|
17
|
+
## 0.87.0
|
|
18
|
+
|
|
19
|
+
- Новая команда `sandbox run <file>`: запуск самодостаточного JS/ESM в `node:vm` с отдельным контекстом.
|
|
20
|
+
- Статические импорты, `require`, `fetch`, `process.exit` и таймеры длиннее секунды блокируются; console перехватывается, а таймаут и лимит кучи ограничивают исполнение.
|
|
21
|
+
- TypeScript запускается только из собранного `dist/*.js`; для нативного кода песочницы нет, `--allow-unsafe-exec` остаётся явным подтверждением.
|
|
22
|
+
- MCP-инструмент `sandbox` и промпт `sandbox-script` показывают статус ok/blocked/timeout/error и точный вывод.
|
|
23
|
+
- Документация и skill; 658 тестов; версия 0.87.0.
|
|
24
|
+
|
|
25
|
+
## 0.86.0
|
|
26
|
+
|
|
27
|
+
- Новая команда `query`: цепочный AQL вместо SQL — `find(CallExpression).where(name, 'stripe').select(file, line)`.
|
|
28
|
+
- Граф строится текстовым проходом по репозиторию: File, Function, Class, Import, CallExpression; шаги find, where, sort, limit, select, count.
|
|
29
|
+
- Запрос не требует парсера грамматики и работает офлайн; MCP-инструмент `query_ast` и промпт `query-the-ast` дают агенту file:line-доказательства до правки.
|
|
30
|
+
- `--limit` ограничивает выдачу, `--json` отдаёт строки и счётчик; это не полный TypeScript AST, а быстрый граф для навигации.
|
|
31
|
+
- Документация и skill; 655 тестов; версия 0.86.0.
|
|
32
|
+
|
|
33
|
+
## 0.85.0
|
|
34
|
+
|
|
35
|
+
- `fix --shadow` и `battle --shadow`: применённый патч выполняется в отдельном git worktree `.oc-pilot/shadow-tree`, а не в рабочем дереве.
|
|
36
|
+
- Тесты, линтеры и внешние компиляторы видят изменённые файлы, потому что shadow — настоящая файловая система, а не in-memory proxy.
|
|
37
|
+
- Diff извлекается из shadow через `git diff`, проверяется `git apply --check` и применяется к рабочему дереву только при успешном прогоне; при падении диск остаётся нетронутым.
|
|
38
|
+
- `--shadow` требует `--apply`; shadow worktree удаляется в `finally`, а путь исключён из git.
|
|
39
|
+
- Документация и skill; 652 теста; версия 0.85.0.
|
|
40
|
+
|
|
41
|
+
## 0.84.0
|
|
42
|
+
|
|
43
|
+
- Новая команда `bankruptcy`: детерминированный прогноз техдолга по последним коммитам — ослабленные тесты, SAST high/medium, TODO, churn и slop-прокси.
|
|
44
|
+
- Ряд сглаживается скользящим средним за 14 дней, выбросы выше mean+2σ исключаются, линейная регрессия даёт скорость и дату достижения порога 100.
|
|
45
|
+
- `--history 30d`, `--format text|json|svg` и `--explain`: формула, веса и правила сглаживания; тесты и безопасность весят больше TODO.
|
|
46
|
+
- Меньше 10 коммитов — `[INSUFFICIENT DATA: Need at least 10 commits to compute Slop Velocity]`; MCP-инструмент `bankruptcy` и промпт `forecast-tech-debt` работают офлайн.
|
|
47
|
+
- Документация и skill; 650 тестов; версия 0.84.0.
|
|
48
|
+
|
|
49
|
+
## 0.83.0
|
|
50
|
+
|
|
51
|
+
- Новая команда `fuzz`: безопасный JIT-фаззинг экспортируемых функций из diff мусорными входами — null, -1, пустая строка, 10 МБ, `__proto__`, пустые контейнеры.
|
|
52
|
+
- Каждая цель запускается в отдельном процессе Node с жёстким таймаутом 2 с и лимитом кучи `--memory-limit`; падения и таймауты показывают конкретный вход.
|
|
53
|
+
- Файлы с импортом fs, net, http, https, child_process, fetch или process.env блокируются до запуска, а не выполняются; рантайм дополнительно ставит заглушки.
|
|
54
|
+
- MCP-инструмент `fuzz` (офлайн, read-only) и промпт `fuzz-the-diff`; `--fail-on-crash` превращает падение в код 1.
|
|
55
|
+
- Документация и skill; 647 тестов; версия 0.83.0.
|
|
56
|
+
|
|
57
|
+
## 0.82.0
|
|
58
|
+
|
|
59
|
+
- Новая команда `invariants`: смысловой lock-файл `.oc-pilot/invariants.md` проверяется против diff дешёвой моделью со строгим JSON-ответом.
|
|
60
|
+
- Области `## area` ограничивают правила; чужие области получают `[SKIPPED: Out of scope]` без вызова модели, а вердикты кешируются по хешу diff и файла инвариантов.
|
|
61
|
+
- Нарушения по умолчанию — предупреждения; `[CRITICAL]` или `--strict` / `--fail-on violation` дают код 3.
|
|
62
|
+
- `preflight --invariants` добавляет проверку к офлайн-гейту, MCP-инструмент `invariants` и промпт `check-invariants` не дают скрыть CRITICAL-правило.
|
|
63
|
+
- Документация и skill; 643 теста; версия 0.82.0.
|
|
64
|
+
|
|
65
|
+
## 0.81.0
|
|
66
|
+
|
|
67
|
+
- `pack --hologram`: слоистый контекст вместо дампа репозитория. LOD 0 — файлы из diff целиком, LOD 1 — прямые импорты с вырезанными телами функций, LOD 2 — только имена экспортов.
|
|
68
|
+
- LOD 1 сохраняет JSDoc и сигнатуры, добавляет маркеры `/* oc-pilot: EFFECTS(...) */` и подходящие тесты; при несбалансированных скобках файл отдаётся целиком с `[Hologram: parse bailout]`.
|
|
69
|
+
- `--max-tokens` ограничивает бюджет, а итоговый Markdown проходит существующий secret scan и редактируется.
|
|
70
|
+
- Новая команда `zoom-symbol <file> <symbol>` и MCP-инструменты `pack_hologram`, `zoom_symbol`; промпт `compile-hologram` требует звать `zoom_symbol` вместо выдумывания скрытого тела.
|
|
71
|
+
- Документация и skill; 637 тестов; версия 0.81.0.
|
|
72
|
+
|
|
73
|
+
## 0.80.0
|
|
74
|
+
|
|
75
|
+
- Офлайн-команда `echo`: собирает самодостаточные SVG-бейджи из локальной статистики, git и квитанции — коммиты, запуски агента, вызовы API, кеш, находки и статус тестов.
|
|
76
|
+
- `--submit` отправляет только никнейм, окно и агрегаты на явно указанный `--endpoint`; путей, диффов и секретов в payload нет, по умолчанию сеть не используется.
|
|
77
|
+
- MCP-инструмент `echo` (read-only по умолчанию, `submit` требует `--allow-write`) и промпт `share-progress`, который запрещает выдумывать цифры и отправлять данные без согласия.
|
|
78
|
+
- `verbosity=compact` печатает число бейджей, коммитов и запусков.
|
|
79
|
+
- Документация и skill; 632 теста; версия 0.80.0.
|
|
80
|
+
|
|
81
|
+
## 0.79.0
|
|
82
|
+
|
|
83
|
+
- Офлайн-команда `autopsy`: разбор коммита как детективное дело — статистика diff, SAST по добавленным строкам, ослабленные тесты и утечки заглушек.
|
|
84
|
+
- Подозреваемые файлы ранжируются по весу улик, а хронология показывает коммиты до и после цели, чтобы найти момент потери защиты.
|
|
85
|
+
- `--depth` управляет окном хронологии, `--fail-on-risk` даёт код 1 при опасном вердикте; модель и сеть не используются.
|
|
86
|
+
- MCP-инструмент `autopsy` (read-only/offline) и промпт `autopsy-commit`; `verbosity=compact` печатает вердикт и число сигналов.
|
|
87
|
+
- Документация и skill; 628 тестов; версия 0.79.0.
|
|
88
|
+
|
|
89
|
+
## 0.78.0
|
|
90
|
+
|
|
91
|
+
- Офлайн-команда `bounty`: оценивает каждый файл по находкам SAST, дубликатам, мёртвым экспортам, старым TODO и churn без тестов и выбирает худший.
|
|
92
|
+
- ASCII-плакат WANTED с худшим файлом, наградой в очках позора, причинами и сообщниками; вывод детерминирован и не требует модели или сети.
|
|
93
|
+
- MCP-инструмент `bounty` (офлайн, read-only) и промпт `wanted-poster`, который просит объяснить причины и самое весомое исправление, а после правки сравнить счёт.
|
|
94
|
+
- `--limit` и `--since-days` управляют числом подозреваемых и окном churn; `--json` отдаёт полный отчёт.
|
|
95
|
+
- Документация и skill; 622 теста; версия 0.78.0.
|
|
96
|
+
|
|
97
|
+
## 0.77.0
|
|
98
|
+
|
|
99
|
+
- Офлайн-команда `cinema`: терминальный таймлапс сессии из коммитов, запусков, вызовов API, последнего ревью и квитанции.
|
|
100
|
+
- Самодостаточный HTML-плеер с play/pause и скоростью, без сети и внешних ресурсов; `--cast` отдаёт asciinema v2 cast, `--no-paths` скрывает темы коммитов и места находок.
|
|
101
|
+
- `--since-days` и `--max-frames` ограничивают окно и число кадров; пустое окно даёт пустой плеер, а не ошибку.
|
|
102
|
+
- MCP-инструмент `cinema` работает офлайн и не тратит бюджет модели; промпт `play-session` показывает сессию как локальную активность, не выдумывая кадры и не скрывая падения.
|
|
103
|
+
- Документация и skill; 618 тестов; версия 0.77.0.
|
|
104
|
+
|
|
105
|
+
## 0.76.0
|
|
106
|
+
|
|
107
|
+
- Новая команда `roast`: модель получает роль токсичного сеньора и прожаривает diff с конкретными ссылками file:line.
|
|
108
|
+
- Четыре роли: `linus`, `ramsay`, `corporate` и `default`; каждая шутка опирается на реальный код, в конце — один короткий фикс.
|
|
109
|
+
- MCP-инструмент `roast` и промпт `roast-my-code`; модель не меняет файлы, инструмент read-only.
|
|
110
|
+
- Промпт запрещает выдуманные строки, оскорбления личности, угрозы и слэры.
|
|
111
|
+
- Документация и skill; 615 тестов; версия 0.76.0.
|
|
112
|
+
|
|
113
|
+
## 0.75.0
|
|
114
|
+
|
|
115
|
+
- Офлайн-команда `arch-diff`: строит Mermaid-схему внутренних импортов, которые diff добавил или удалил.
|
|
116
|
+
- Новые связи рисуются зелёными стрелками, удалённые — красными пунктирными; `--max-edges` ограничивает размер схемы, `--fail-on-removed` даёт код 1 при исчезновении зависимости.
|
|
117
|
+
- MCP-инструмент `arch_diff` работает офлайн и в read-only режиме, не тратит бюджет вызовов модели.
|
|
118
|
+
- Промпт `show-arch-diff` требует вставить схему в PR и объяснить каждое удалённое ребро, не скрывая его.
|
|
119
|
+
- Документация и skill; 613 тестов; версия 0.75.0.
|
|
120
|
+
|
|
121
|
+
## 0.74.0
|
|
122
|
+
|
|
123
|
+
- Офлайн-команда `cleanup`: единый план уборки из проблем зависимостей, Slop Index, переменных окружения и ослабленных тестов.
|
|
124
|
+
- `--apply` выполняет только безопасные исправления зависимостей и требует `--allow-write` в MCP.
|
|
125
|
+
- MCP-инструмент `cleanup` и промпт `cleanup-plan`; `fail_on_task` даёт код 1 на выбранной строгости.
|
|
126
|
+
- `verbosity=compact` печатает число задач и high/medium.
|
|
127
|
+
- Документация и skill; 609 тестов; версия 0.74.0.
|
|
128
|
+
|
|
129
|
+
## 0.73.0
|
|
130
|
+
|
|
131
|
+
- Экспериментальная команда `battle`: Coder предлагает и применяет патч, Hacker проверяет его ревью, SAST, авторизацией маршрутов и защитой тестов; цикл идёт до отсутствия high-находок и зелёных тестов.
|
|
132
|
+
- `--rounds` ограничивает раунды, `--apply` меняет рабочее дерево и требует `--allow-write`, без него показывается только предложенный патч.
|
|
133
|
+
- MCP-инструмент `battle` и промпт `battle-hardening`; в read-only режиме `apply` запрещён.
|
|
134
|
+
- Отчёт содержит раунды, патчи, тесты, находки и причину остановки; оркестратор принимает инъектируемый runner для тестов.
|
|
135
|
+
- Документация и skill; 609 тестов; версия 0.73.0.
|
|
136
|
+
|
|
137
|
+
## 0.72.0
|
|
138
|
+
|
|
139
|
+
- Офлайн-команда `brag`: самодостаточный HTML/SVG-отчёт о сессии из статистики, истории git, последнего ревью и квитанции; только встроенные стили и SVG, без сети, шрифтов и скриптов.
|
|
140
|
+
- `--title`, `--watermark`, `--no-paths`, `--since-days`, `--svg` и `--output` управляют видом и охватом отчёта; `no-paths` скрывает пути и локации находок.
|
|
141
|
+
- MCP-инструмент `brag` работает офлайн и read-only, не тратит бюджет вызовов модели и возвращает HTML или SVG строкой.
|
|
142
|
+
- `verbosity=compact` печатает число коммитов, запусков и находок.
|
|
143
|
+
- Документация и skill; 605 тестов; версия 0.72.0.
|
|
144
|
+
|
|
145
|
+
## 0.71.0
|
|
146
|
+
|
|
147
|
+
- Команда `compliance`: собирает подписанный аудит-манифест коммита из квитанции, проверок preflight, тестов и SBOM, добавляет SHA-256 и хеш предыдущего манифеста.
|
|
148
|
+
- Цепочка хешей делает правку любого звена заметной, а Ed25519-подпись привязывает манифест к ключу; блокчейн не нужен.
|
|
149
|
+
- `compliance --verify` пересчитывает хеш, сверяет коммит с HEAD, проверяет цепочку и подпись; JSON и код 1 при недействительном манифесте.
|
|
150
|
+
- MCP `compliance_verify` работает офлайн и read-only, промпт `prove-compliance` не даёт агенту заявить о готовности без проверенного манифеста.
|
|
151
|
+
- Документация и skill; 602 теста; версия 0.71.0.
|
|
152
|
+
|
|
153
|
+
## 0.70.0
|
|
154
|
+
|
|
155
|
+
- Офлайн-команда `test-plan`: выбирает тестовые файлы, затронутые diff, по статическому графу импортов, а не по эвристике «запустить всё».
|
|
156
|
+
- Причины выбора: изменённый тест, прямой и транзитивный импорт, совпадение по имени (`wallet.ts` → `wallet.test.ts`, `wallet.spec.ts`, `__tests__`, Go/Python-конвенции) и ссылки на изменённые символы.
|
|
157
|
+
- `--strategy affected|fast|full`, `--max-tests`, `--fail-on-uncovered` и `--print-command` с подстановкой `{files}`; непокрытые изменённые файлы видны в JSON и тексте.
|
|
158
|
+
- MCP-инструмент `test_plan` работает офлайн и read-only, не тратит бюджет модели; промпт `plan-tests` требует запускать только выбранные тесты и добавлять тест на каждый непокрытый файл.
|
|
159
|
+
- Документация и skill; 596 тестов; версия 0.70.0.
|
|
160
|
+
|
|
161
|
+
## 0.69.0
|
|
162
|
+
|
|
163
|
+
- Офлайн-команда `boundaries`: проверяет добавленные импорты по правилам слоёв из `.oc-pilot/architecture.json`, понимает `**`, `*`, `?`, alias `@/`, относительные пути и пакеты.
|
|
164
|
+
- `boundaries --init` создаёт стартовый конфиг с правилами UI/маршруты → БД; `--config` задаёт другой файл, `--fail-on-violation` даёт код 1 при пересечении границы.
|
|
165
|
+
- Проверяются только добавленные импорты в прод-коде; `import type`, тесты и сгенерированные файлы пропускаются.
|
|
166
|
+
- MCP-инструмент `boundaries` работает офлайн и read-only, не тратит бюджет модели; промпт `respect-boundaries` требует чинить направление зависимости, а не расширять правило.
|
|
167
|
+
- Документация и skill; 587 тестов; версия 0.69.0.
|
|
168
|
+
|
|
169
|
+
## 0.68.0
|
|
170
|
+
|
|
171
|
+
- Офлайн-команда `anti-regression`: сравнивает строки, добавленные diff, со строками, которые человек явно удалил в истории git, и указывает коммит-удаление с автором и датой.
|
|
172
|
+
- Ловит повторно добавленный код и импорты; тестовые и сгенерированные файлы пропускаются, есть лимиты `--max-commits` и `--since`.
|
|
173
|
+
- `--fail-on-regression` даёт код 1 при любом совпадении; JSON содержит находки, проверенные строки и статус.
|
|
174
|
+
- MCP-инструмент `anti_regression` работает офлайн и read-only, не тратит бюджет модели; промпт `guard-regressions` требует изучить причину удаления и не возвращать код без явного решения.
|
|
175
|
+
- Документация и skill; 580 тестов; версия 0.68.0.
|
|
176
|
+
|
|
177
|
+
## 0.67.0
|
|
178
|
+
|
|
179
|
+
- Офлайн-команда `contract-drift`: находит удалённые поля, ставшие обязательными опциональные поля и смену типов в TypeScript-интерфейсах, Zod-объектах, Prisma-моделях, Pydantic-моделях и JSON Schema.
|
|
180
|
+
- Для удалённого поля показываются нетронутые файлы, где оно ещё используется; `--fail-on-drift high|medium` даёт код 1 на выбранной строгости.
|
|
181
|
+
- Поиск текстовый, без AST: общие поля вроде `id`, `name` и `status` не шумят ссылками, но возможны совпадения в комментариях и строках.
|
|
182
|
+
- MCP-инструмент `contract_drift` работает офлайн и не тратит бюджет модели; промпт `check-contracts` требует обновить потребителей или оставить совместимое поле, а не удалять контракт молча.
|
|
183
|
+
- `verbosity=compact` печатает число расхождений, high и medium.
|
|
184
|
+
- Документация и skill; 574 теста; версия 0.67.0.
|
|
185
|
+
|
|
186
|
+
## 0.66.0
|
|
187
|
+
|
|
188
|
+
- Офлайн-команда `pack` собирает компактный контекст задачи: правила проекта, подписи изменённых файлов, связанные ссылки из `impact` и необязательный лог тестов, с ограничением `budget` в символах.
|
|
189
|
+
- Подписи извлекаются без AST: импорты, экспорты, объявления функций, классов, интерфейсов и типов; тела и комментарии отбрасываются, тестовые файлы дают только имена тестов.
|
|
190
|
+
- MCP-инструмент `pack` работает read-only и офлайн, не тратит бюджет вызовов модели; промпт `pack-context` велит агенту использовать собранный бандл вместо вываливания целых файлов и не считать пак доказательством корректности.
|
|
191
|
+
- Бюджет обрезает секции по границе строки и помечает результат `truncated`; дубликаты файлов не повторяются.
|
|
192
|
+
- Документация и skill; 568 тестов; версия 0.66.0.
|
|
193
|
+
|
|
194
|
+
## 0.65.0
|
|
195
|
+
|
|
196
|
+
- Офлайн-команда `ecosystem-verify`: именованные импорты из изменённых файлов сверяются с установленным пакетом и его `.d.ts`; выдуманный экспорт, отсутствующий пакет и нечитаемый entry дают находки.
|
|
197
|
+
- С `--online` новые npm-пакеты из diff проверяются в registry: слишком свежий пакет и подозрительно малое число загрузок за неделю помечаются отдельно; сеть используется только по явному флагу.
|
|
198
|
+
- `--fail-on-issue high|medium|low` превращает находки в код 1; JSON содержит пакеты, проблемы, счётчики и гейт.
|
|
199
|
+
- MCP-инструмент `ecosystem_verify` работает офлайн по умолчанию и не тратит бюджет модели; промпт `verify-ecosystem` требует чинить импорт или звать человека, а не подменять пакет заглушкой.
|
|
200
|
+
- Документация и skill; 563 теста; версия 0.65.0.
|
|
201
|
+
|
|
202
|
+
## 0.64.0
|
|
203
|
+
|
|
204
|
+
- Офлайн-команда `mock-leak`: ищет забытые заглушки и хардкод в добавленном прод-коде — локальные пути, тестовые токены, `if (true)`/`if (false)`, имена mock/fake/stub, комментарии про заглушки и localhost-адреса.
|
|
205
|
+
- Тестовые, сгенерированные файлы и документация пропускаются; находки делятся на high/medium/low, `--fail-on-leak` даёт код 1 на выбранном уровне.
|
|
206
|
+
- MCP-инструмент `mock_leak` работает офлайн и read-only, не тратит бюджет вызовов модели; `verbosity=compact` печатает число находок и разбивку по уровням.
|
|
207
|
+
- Промпт `remove-mocks` требует заменить заглушку реальной реализацией, а не прятать её в комментарий, переименовывать или удалять прод-вызов.
|
|
208
|
+
- Документация и skill; 556 тестов; версия 0.64.0.
|
|
209
|
+
|
|
210
|
+
## 0.63.0
|
|
211
|
+
|
|
212
|
+
- Новая офлайн-команда `env-sync`: собирает переменные окружения, добавленные в diff, и сверяет их с локальными `.env*` и `.env.example`/`.sample`/`.template`.
|
|
213
|
+
- Понимает `process.env.NAME`, `process.env["NAME"]`, `import.meta.env.NAME`, `Deno.env.get("NAME")` и `Bun.env.NAME`; служебные переменные вроде `NODE_ENV`, `CI`, `PATH` игнорируются.
|
|
214
|
+
- `--fail-on-missing` даёт код 1, если переменная используется, но нигде не определена; определённые, но не задокументированные переменные дают warn.
|
|
215
|
+
- MCP-инструмент `env_sync` работает офлайн и read-only, не тратит бюджет вызовов модели; промпт `sync-env` требует добавить недостающие определения и документацию, не выдумывая секреты.
|
|
216
|
+
- `verbosity=compact` печатает число ссылок, отсутствующих и недокументированных переменных.
|
|
217
|
+
- Документация и skill; 551 тест; версия 0.63.0.
|
|
218
|
+
|
|
219
|
+
## 0.62.0
|
|
220
|
+
|
|
221
|
+
- Детектор ослабления тестов расширен: строгий матчер, заменённый проверкой существования, `@ts-ignore`/`@ts-expect-error`, пустой catch вокруг проверок и удалённый тест без замены теперь считаются ослаблением.
|
|
222
|
+
- Новая офлайн-команда `test-guard` и MCP-инструмент `test_guard`: проверяют diff без модели и сети, показывают находки по видам и с `--fail-on-weakening` / `fail_on_weakening` возвращают код 1.
|
|
223
|
+
- Промпт `guard-tests` требует вернуть защиту тестов или исправить прод-код, а не пропускать, удалять, ослаблять или подавлять проверки.
|
|
224
|
+
- `verbosity=compact` печатает число находок и статус одной строкой.
|
|
225
|
+
- Документация и skill; 545 тестов; версия 0.62.0.
|
|
226
|
+
|
|
227
|
+
## 0.61.0
|
|
228
|
+
|
|
229
|
+
- MCP-инструмент `reviewers`: офлайн и read-only ранжирует авторов, которые чаще других трогали изменённые файлы, и показывает владельцев из CODEOWNERS. Принимает `limit`, `depth`, `exclude` и обычные флаги diff; история читается только из git.
|
|
230
|
+
- Промпт `pick-reviewers` просит минимальный набор ревьюеров, которые действительно знают файлы, и требует объяснить выбор числом коммитов и файлов; боты и авторы одного коммита отсеиваются.
|
|
231
|
+
- `verbosity=compact` печатает число кандидатов, владельцев CODEOWNERS и файлов одной строкой.
|
|
232
|
+
- Документация и skill; 540 тестов; версия 0.61.0.
|
|
233
|
+
|
|
234
|
+
## 0.60.0
|
|
235
|
+
|
|
236
|
+
- MCP-инструмент `test_gen`: модель пишет тесты на изменённый код; без `apply` возвращается только патч, с `apply` инструмент пишет тестовые файлы, прогоняет набор и откатывает падения, если не указан `keep_failing`.
|
|
237
|
+
- `coverage` сужает генерацию до непокрытых изменённых строк, `from_slop` выбирает файлы без тестов, а `rounds`, `force` и `no_run` управляют циклом.
|
|
238
|
+
- `apply` в read-only режиме запрещён: инструмент требует `--allow-write`.
|
|
239
|
+
- Промпт `generate-tests` ведёт агента от патча к зелёным тестам и запрещает менять прод-код, ослаблять проверки или пропускать тесты ради прохождения.
|
|
240
|
+
- `verbosity=compact` печатает статус, число файлов и раундов.
|
|
241
|
+
- Документация и skill; 539 тестов; версия 0.60.0.
|
|
242
|
+
|
|
243
|
+
## 0.59.0
|
|
244
|
+
|
|
245
|
+
- Новая офлайн-команда `coverage`: сверяет добавленные строки diff с локальным отчётом lcov, Istanbul, Cobertura или Go coverprofile и показывает непокрытые строки и файлы без данных покрытия.
|
|
246
|
+
- Гейты `--fail-under <n>` по проценту покрытых изменённых строк и `--max-uncovered <n>` по числу непокрытых строк; взаимоисключающие, `--max-uncovered 0` разрешён.
|
|
247
|
+
- MCP-инструмент `coverage` работает read-only, не вызывает модель и не тратит бюджет вызовов; результат содержит проценты, gaps и статус гейта.
|
|
248
|
+
- Промпт `cover-changed-lines` заставляет агента дописать тесты на непокрытые строки, перезапустить тот же гейт и не снижать порог и не добавлять coverage-ignore.
|
|
249
|
+
- `verbosity=compact` печатает одну строку с числом непокрытых строк, файлов и процентом.
|
|
250
|
+
- Документация и skill; 539 тестов; версия 0.59.0.
|
|
251
|
+
|
|
252
|
+
## 0.58.0
|
|
253
|
+
|
|
254
|
+
- MCP-инструмент `deps`: аудит объявленных, импортируемых и залоченных зависимостей; `why` объясняет цепочку происхождения пакета, `audit` добавляет уязвимости OSV и лицензии, `fix` правит `package.json`, `sbom` пишет CycloneDX.
|
|
255
|
+
- `deps fix` и `deps sbom` меняют файлы, поэтому в read-only режиме запрещены и требуют `--allow-write`; обычный аудит и `why` работают офлайн и не тратят бюджет вызовов модели.
|
|
256
|
+
- Промпт `triage-deps` ведёт агента от фантомных импортов и lockfile-дрейфа к уязвимостям, запрещает прятать находки через ignore, снижение порога или удаление зависимости.
|
|
257
|
+
- `verbosity=compact` печатает число проблем зависимостей, уязвимостей и объявленных/импортируемых пакетов.
|
|
258
|
+
- Документация и skill; 535 тестов; версия 0.58.0.
|
|
259
|
+
|
|
260
|
+
## 0.57.0
|
|
261
|
+
|
|
262
|
+
- MCP-инструмент `impact`: показывает, какие объявления diff изменил или удалил, и в каких нетронутых файлах эти имена ещё встречаются. Принимает `diff`, `base`, `staged`, `unstaged`, `include_untracked` и `paths`; работает офлайн и не тратит бюджет вызовов модели.
|
|
263
|
+
- Поиск остаётся текстовым: совпадения в комментариях и строках возможны, зато инструмент не требует AST и зависимостей.
|
|
264
|
+
- Промпт `check-impact` ведёт агента по циклу «найти ссылки → обновить сломанные места → перепроверить», запрещает удалять вызовы или переименовывать публичные символы только ради пустого отчёта.
|
|
265
|
+
- `verbosity=compact` печатает одну строку с числом изменённых символов, ссылок и просмотренных файлов.
|
|
266
|
+
- Документация и skill; 534 теста; версия 0.57.0.
|
|
267
|
+
|
|
268
|
+
## 0.56.0
|
|
269
|
+
|
|
270
|
+
- MCP-инструмент `flaky`: несколько прогонов тестовой команды с необязательным перемешиванием файлов по seed; возвращает нестабильные и всегда падающие тесты, `fail_on_flaky` даёт код 1.
|
|
271
|
+
- Инструмент не меняет исходники сам, поэтому работает в read-only режиме и не тратит бюджет вызовов модели; после исчерпания бюджета он остаётся доступен.
|
|
272
|
+
- Промпт `stabilize-flaky` воспроизводит нестабильность повторными и перемешанными прогонами и требует детерминированного исправления вместо ретраев, sleep и увеличения таймаутов.
|
|
273
|
+
- `verbosity=compact` печатает число нестабильных и падающих тестов одной строкой.
|
|
274
|
+
- Документация и skill; 533 теста; версия 0.56.0.
|
|
275
|
+
|
|
276
|
+
## 0.55.0
|
|
277
|
+
|
|
278
|
+
- MCP-инструмент `mutate`: мутационное тестирование изменённого кода прямо из агента. Принимает `command`, `max_mutants`, `min_score` и обычные флаги diff; возвращает mutation score и выживших мутантов, а оценка ниже порога даёт обычный результат с кодом 1.
|
|
279
|
+
- Мутации применяются к файлам по одной и всегда откатываются, но инструмент перезаписывает исходники, поэтому в read-only режиме он запрещён и требует `--allow-write`.
|
|
280
|
+
- Промпт `prove-tests` ведёт агента по циклу «прогнать мутации → усилить тест → повторить», запрещает менять прод-код ради мутанта и снижать порог.
|
|
281
|
+
- `verbosity=compact` для `mutate` печатает одну строку со счётом и числом выживших.
|
|
282
|
+
- Документация и skill; 532 теста; версия 0.55.0.
|
|
283
|
+
|
|
284
|
+
## 0.54.0
|
|
285
|
+
|
|
286
|
+
- MCP-инструмент `fix` принимает `from_sast` и `from_authz`: чинит high-находки SAST или авторизации маршрутов, применяет патч, прогоняет тесты и пересканирует; результат содержит `sast` или `authz` с `{before, after, remaining}`.
|
|
287
|
+
- Промпт `fix-security` проводит агента по циклу «найти → починить → пересканировать», запрещает трогать baseline и подавления и не разрешает заявлять успех, пока остаются high-находки.
|
|
288
|
+
- Тесты MCP на новые аргументы и промпт; документация.
|
|
289
|
+
- 531 тест; версия 0.54.0.
|
|
290
|
+
|
|
291
|
+
## 0.53.0
|
|
292
|
+
|
|
293
|
+
- `ready` получил проверку безопасности: детерминированные правила SAST и авторизации маршрутов прогоняются по всему репозиторию, 15 очков; high даёт fail, medium и low — warn.
|
|
294
|
+
- Находки, записанные в `.oc-pilot/baseline.json`, скрываются, поэтому легаси-репозиторий может честно получить `agent-ready`, не исправляя всё сразу.
|
|
295
|
+
- Веса перебалансированы под девять проверок: tests 15, lockfile 10, hooks 15, slop 15, receipt 10, docs 10, ci 5, config 5, security 15.
|
|
296
|
+
- `ready --fix` не пытается чинить безопасность: проверка попадает в skipped с подсказкой про `fix --from-sast` или `--from-authz`.
|
|
297
|
+
- Документация; 531 тест; версия 0.53.0.
|
|
298
|
+
|
|
299
|
+
## 0.52.0
|
|
300
|
+
|
|
301
|
+
- `fix --from-authz`: команда собирает high-находки авторизации маршрутов по изменённым файлам, просит модель о минимальном патче, применяет его, прогоняет тесты и пересканирует маршруты.
|
|
302
|
+
- JSON дополняется `authz: {before, after, remaining}`; код возврата 1, если high-находки остались. `--from-sast` и `--from-authz` несовместимы.
|
|
303
|
+
- Патч проходит те же проверки, что обычный `fix`: цели из diff, скан секретов, `git apply --check`, снимок и откат.
|
|
304
|
+
- Документация; 529 тестов; версия 0.52.0.
|
|
305
|
+
|
|
306
|
+
## 0.51.0
|
|
307
|
+
|
|
308
|
+
- `fix --from-sast`: команда собирает high-находки SAST по изменённым файлам, просит модель о патче, применяет его, прогоняет тесты и пересканирует результат.
|
|
309
|
+
- JSON-ответ получает `sast: {before, after, remaining}`; код 1, если high-находки остались, и 0 при чистом результате.
|
|
310
|
+
- Патч проходит те же проверки, что и обычный `fix`: цели только из diff, скан секретов, `git apply --check`, снимок и откат при падении тестов.
|
|
311
|
+
- Тест на сквозной сценарий; версия 0.51.0.
|
|
312
|
+
|
|
313
|
+
## 0.50.1
|
|
314
|
+
|
|
315
|
+
- Read-only MCP-сервер больше не позволяет `sast` и `authz` записывать baseline: `update_baseline` отклоняется с ошибкой про `--allow-write`.
|
|
316
|
+
- Регрессионный тест на read-only режим; версия 0.50.1.
|
|
317
|
+
|
|
318
|
+
## 0.50.0
|
|
319
|
+
|
|
320
|
+
- `sast` и `authz` получили `--baseline <file>` и `--update-baseline`: принятые находки скрываются, гейт падает только на новых.
|
|
321
|
+
- Baseline хранит SHA-256-отпечатки правила, файла и фрагмента (для `authz` — правила, файла, метода и маршрута), поэтому записи переживают сдвиги строк; файл по умолчанию `.oc-pilot/baseline.json`.
|
|
322
|
+
- `preflight` и `receipt` читают тот же baseline, поэтому легаси-репозиторий можно закрыть гейтом без немедленного исправления всех находок.
|
|
323
|
+
- MCP-инструменты `sast` и `authz` принимают `baseline` и `update_baseline`; JSON дополнен `baselineSuppressed` и `baseline: {path, updated, entries}`.
|
|
324
|
+
- Документация; 527 тестов; версия 0.50.0.
|
|
325
|
+
|
|
326
|
+
## 0.49.0
|
|
327
|
+
|
|
328
|
+
- `authz` стал шестой проверкой `preflight`: маршруты без авторизации, IDOR и админские пути без роли проверяются вместе с секретами, SAST, зависимостями, тестами и slop; `--no-authz` отключает проверку, `--fail-on-issue` задаёт общий порог для SAST, authz и зависимостей.
|
|
329
|
+
- Квитанция `receipt` теперь фиксирует и authz-проверку: отчёт preflight внутри квитанции содержит шесть проверок, `--no-authz` исключает её для изменений без маршрутов.
|
|
330
|
+
- MCP: новый read-only инструмент `authz` (source-флаги, `paths`, `fail_on_issue`, `ignore`, `public`, `no_suppressions`); у `preflight` появился `no_authz`; офлайн-инструменты не тратят бюджет вызовов.
|
|
331
|
+
- Документация; 522 теста; версия 0.49.0.
|
|
332
|
+
|
|
333
|
+
## 0.48.0
|
|
334
|
+
|
|
335
|
+
- Команда `authz`: проверка авторизации HTTP-маршрутов — маршрут без сессии, IDOR (объект по id из запроса без проверки владельца) и админский путь без роли; Express/Fastify/Koa и Next.js `app/**/route.ts` / `pages/api/**`.
|
|
336
|
+
- Публичные префиксы `--public`, подавления `oc-pilot:authz-ignore <rule>: причина` строкой выше маршрута, `--ignore <rules>` и `--no-suppressions`.
|
|
337
|
+
- `--fail-on-issue <high|medium>` как порог кода возврата, SARIF 2.1.0 и JSON `{files, routes, findings, suppressed, summary}`.
|
|
338
|
+
- Документация; 519 тестов; версия 0.48.0.
|
|
339
|
+
|
|
340
|
+
## 0.47.0
|
|
341
|
+
|
|
342
|
+
- `preflight` теперь включает детерминированный SAST по изменённым файлам: инъекции команд и SQL, path traversal, SSRF, выполнение кода, XSS и остальные правила `sast`; `--no-sast` отключает проверку, а `--fail-on-issue` задаёт общий порог для SAST и зависимостей.
|
|
343
|
+
- Квитанция `receipt` фиксирует SAST-проверку в отчёте `preflight`; `--no-sast` исключает её из прогона.
|
|
344
|
+
- MCP: инструмент `sast` (read-only, `paths`, `fail_on_issue`, `ignore`, `no_suppressions`) и `no_sast` у `preflight`; офлайн-список дополнен.
|
|
345
|
+
- Документация; 510 тестов; версия 0.47.0.
|
|
346
|
+
|
|
347
|
+
## 0.46.0
|
|
348
|
+
|
|
349
|
+
- Команда `sast`: детерминированный статический анализ изменённых файлов — инъекции команд и SQL, path traversal, SSRF, выполнение кода, XSS, открытые редиректы, отключённый TLS, wildcard CORS, prototype pollution, слабые хеши и JWT `none`.
|
|
350
|
+
- Эвристика источников данных: сток помечается, когда до него доходят `req.query`/`req.body`/`req.params`/headers/cookies, `userInput` или `untrusted*`; константы и параметризованные запросы не флагаются, `path.resolve`/`basename`/`join` снимают path traversal.
|
|
351
|
+
- Подавления `oc-pilot:sast-ignore <rule>: причина` на строке находки или выше; без причины игнорируются. `--ignore <rules>` и `--no-suppressions` для аудита.
|
|
352
|
+
- `--fail-on-issue <high|medium|low>` как CI-гейт, `--format sarif` (SARIF 2.1.0) и JSON `{files, findings, suppressed, summary}`.
|
|
353
|
+
- Документация; 507 тестов; версия 0.46.0.
|
|
354
|
+
|
|
355
|
+
## 0.45.0
|
|
356
|
+
|
|
357
|
+
- `deps --audit`: запросы к OSV по пакетам из lockfile — CVE/GHSA, severity и исправленные версии; кеш `.oc-pilot/osv-cache.json` на 24 часа, `--offline` и `--osv-url`.
|
|
358
|
+
- `--fail-on-vuln <critical|high|medium|low>` превращает аудит в security-гейт: код 1, если уязвимость достигает порога.
|
|
359
|
+
- Лицензионный аудит по установленным `node_modules`: strong copyleft, proprietary и unknown попадают в отчёт, отсутствующие манифесты считаются `missing`.
|
|
360
|
+
- `--sbom <file>` записывает CycloneDX 1.5 с npm purl для каждого пакета из lockfile.
|
|
361
|
+
- Документация; 497 тестов; версия 0.45.0.
|
|
362
|
+
|
|
363
|
+
## 0.44.0
|
|
364
|
+
|
|
365
|
+
- Команда `mutate`: мутационное тестирование изменённых файлов — переворачивает операторы сравнения и булевы операторы, прогоняет набор тестов на каждом мутанте и считает `killed`, `survived` и `timeout`.
|
|
366
|
+
- Mutation score 0–100 и `--min-score` как CI-гейт: код 1, если тесты убивают мутантов меньше порога; таймаут считается убийством, потому что поведение изменилось.
|
|
367
|
+
- `--max-mutants` ограничивает прогон (по умолчанию 20, максимум 500), строки и комментарии маскируются, исходники восстанавливаются после каждого мутанта, выжившие перечисляются с `file:line`.
|
|
368
|
+
- JSON `{command, files, sites, mutants, killed, survived, timedOut, score, truncated, durationMs}` с деталями по каждому мутанту.
|
|
369
|
+
- Документация; 485 тестов; версия 0.44.0.
|
|
370
|
+
|
|
371
|
+
## 0.43.0
|
|
372
|
+
|
|
373
|
+
- Подписанные квитанции: `receipt --sign` подписывает SHA-256 хеш Ed25519-ключом, в файле появляется поле `signature`; `--keygen <file>` создаёт пару ключей, `--key` и `OC_PILOT_RECEIPT_KEY` указывают приватный ключ.
|
|
374
|
+
- Проверка подписи: `--public-key`, `OC_PILOT_RECEIPT_PUBLIC_KEY` или закоммиченный `.oc-pilot/receipt.pub`; результат `--verify` дополнен статусом `signature` (`valid`, `invalid`, `missing`, `unchecked`), а неподписанная квитанция не проходит проверку, когда ключ передан.
|
|
375
|
+
- `ready` проверяет подпись, если в репозитории есть `.oc-pilot/receipt.pub`, и отмечает в детали «подпись проверена»; MCP-инструмент `receipt_verify` принимает `public_key`.
|
|
376
|
+
- Приватный ключ остаётся вне репозитория, публичный можно коммитить; хеш по-прежнему защищает от случайной правки, подпись добавляет авторство.
|
|
377
|
+
- Документация; 479 тестов; версия 0.43.0.
|
|
378
|
+
|
|
379
|
+
## 0.42.0
|
|
380
|
+
|
|
381
|
+
- MCP-инструмент `receipt_verify`: пересчитывает SHA-256 квитанции, сверяет записанный коммит с HEAD и возвращает `{ok, hashOk, stale, commit, head, reason}`; read-only, офлайн, не тратит бюджет вызовов.
|
|
382
|
+
- Отсутствующая, изменённая или устаревшая квитанция приходит как `ok: false` с кодом 1, а не как ошибка инструмента: `receipt --verify` при отсутствии файла отдаёт вердикт вместо PilotError.
|
|
383
|
+
- Промпт `prove-done`: агент обязан проверить квитанцию для HEAD и не заявлять о готовности, пока `ok` не равен true, а тесты в квитанции не пройдены.
|
|
384
|
+
- Обновлены инструкции сервера, сообщение о бюджете, справка `oc-pilot-mcp`, README, `docs/integrations.md` и skills.
|
|
385
|
+
- Документация; 473 теста; версия 0.42.0.
|
|
386
|
+
|
|
387
|
+
## 0.41.0
|
|
388
|
+
|
|
389
|
+
- MCP-инструмент `ready`: офлайн-оценка готовности репозитория 0–100, принимает `fail_under`; оценка ниже порога приходит обычным результатом с кодом 1, а не ошибкой инструмента, и не тратит бюджет вызовов.
|
|
390
|
+
- Промпт `get-ready`: оценить репозиторий, починить безопасные пробелы (хук, конфиг, `AGENTS.md`), доказать результат квитанцией и повторять до оценки не ниже 85.
|
|
391
|
+
- Инструмент и промпт рекламируются в `tools/list` и `prompts/list`; обновлены инструкции сервера, сообщение об исчерпанном бюджете и справка `oc-pilot-mcp`.
|
|
392
|
+
- Тесты: MCP-вызов `ready` возвращает score и `checks`, `tools/list` содержит `fail_under`, `prompts/list` содержит `get-ready`.
|
|
393
|
+
- Документация; 472 теста; версия 0.41.0.
|
|
394
|
+
|
|
395
|
+
## 0.40.0
|
|
396
|
+
|
|
397
|
+
- `ready --fix --receipt`: после исправлений команда прогоняет тестовую команду, запускает preflight и сохраняет квитанцию для `HEAD`, поэтому проверка квитанции проходит в том же запуске, а оценка пересчитывается.
|
|
398
|
+
- `--receipt` работает только вместе с `--fix`; без тестовой команды квитанция попадает в `skipped`, а упавшие тесты или проваленный preflight не мешают сохранению — отчёт говорит, что именно не прошло.
|
|
399
|
+
- JSON дополнен `fix.receipt: {path, testsPassed, preflight}`; текстовый отчёт печатает строку `RECEIPT` с путём и статусами.
|
|
400
|
+
- Сквозной тест: временный репозиторий доходит до 98/100, повторный `ready` видит квитанцию действительной, а `--receipt` без `--fix` возвращает код 2.
|
|
401
|
+
- Документация; 471 тест; версия 0.40.0.
|
|
402
|
+
|
|
403
|
+
## 0.39.0
|
|
404
|
+
|
|
405
|
+
- `ready --fix`: безопасные офлайн-исправления готовности — установка `pre-commit` с `preflight --staged`, создание `.oc-pilot.json` с найденной тестовой командой и `AGENTS.md` с командами проекта.
|
|
406
|
+
- Чужой хук, существующий конфиг и готовые инструкции не перезаписываются; проверки, которым нужен человек (квитанция, lockfile, Slop Index, CI), попадают в `skipped` с объяснением.
|
|
407
|
+
- `--dry-run` печатает план, не трогая дерево; после исправлений оценка пересчитывается, а `--fail-under` проверяет уже новое значение.
|
|
408
|
+
- JSON дополнен `fix: {applied, dryRun, fixes, skipped}`; текстовый отчёт показывает строки `FIXED`/`PLAN`/`SKIP`.
|
|
409
|
+
- Документация; 470 тестов; версия 0.39.0.
|
|
410
|
+
|
|
411
|
+
## 0.38.0
|
|
412
|
+
|
|
413
|
+
- Команда `ready`: офлайн-оценка готовности репозитория к работе с ИИ-агентом — одно число 0–100 по восьми проверкам (тесты, lockfile, git-хуки, Slop Index, свежая квитанция, инструкции для агента, CI, конфиг).
|
|
414
|
+
- Каждая проверка даёт `pass`, `warn` или `fail` и приносит 100%, 50% или 0% своего веса; грейды `agent-ready` (≥85), `almost` (≥65), `risky` (≥40) и `not-ready`.
|
|
415
|
+
- `--badge` печатает shields.io-бейдж для README, `--fail-under <n>` возвращает код 1 ниже порога и работает как CI-гейт.
|
|
416
|
+
- JSON `{score, grade, checks, commit}`, где проверка — `{id, label, status, points, max, detail}` с файлом и командой исправления.
|
|
417
|
+
- Документация; 464 теста; версия 0.38.0.
|
|
418
|
+
|
|
419
|
+
## 0.37.0
|
|
420
|
+
|
|
421
|
+
- `flaky --shuffle`: тестовые файлы собираются из репозитория и перемешиваются перед каждым прогоном, чтобы поймать тесты, падающие только после определённого соседа; команда должна содержать `{files}`.
|
|
422
|
+
- Детерминированное перемешивание: `--seed <value>` фиксирует базовый seed для воспроизведения, каждый прогон получает производный seed; подстановка путей с экранированием пробелов.
|
|
423
|
+
- JSON дополнен `shuffle: {seed, files}`; без `--shuffle` поле отсутствует, поведение прежнее.
|
|
424
|
+
- Документация; 459 тестов; версия 0.37.0.
|
|
425
|
+
|
|
426
|
+
## 0.36.0
|
|
427
|
+
|
|
428
|
+
- Команда `flaky`: несколько прогонов тестовой команды и сравнение результатов отдельных тестов; тест, который проходит и падает в разных прогонах, помечается нестабильным.
|
|
429
|
+
- Разбор вывода Node spec, TAP, Go (`--- PASS`/`--- FAIL`), pytest (`PASSED`/`FAILED`), Jest/Vitest (`✓`/`✕`); при отсутствии маркеров команда честно сообщает, что тесты не распознаны.
|
|
430
|
+
- `--runs <n>` (по умолчанию 3, максимум 10), `--command <cmd>` и `--fail-on-flaky` для CI-гейта: код 1 при хотя бы одном нестабильном тесте.
|
|
431
|
+
- JSON `{command, runs, completed, parsed, tests, flaky, failing}`, где тест — `{name, passes, failures, status}`.
|
|
432
|
+
- Документация; 456 тестов; версия 0.36.0.
|
|
433
|
+
|
|
434
|
+
## 0.35.0
|
|
435
|
+
|
|
436
|
+
- Исправлены ложные phantom-импорты в `deps`: импорты теперь распознаются только в начале строки, комментарии и шаблонные литералы вырезаются перед сканом, а `require(...)`/`import(...)` вне кода больше не считаются зависимостями. На самом oc-pilot аудит теперь даёт 0 замечаний вместо 14 ложных high-issues.
|
|
437
|
+
- `preflight` больше не пишет «индекс 0/100» на дереве без изменений: сводка slop говорит «изменённых файлов нет», а при изменениях явно называет индекс изменённого подмножества.
|
|
438
|
+
- Регрессионные тесты: строки-фикстуры с `import`, `require` и `import()` не дают phantom; реальные формы импорта ловятся; пустой дифф не выдаёт нулевой индекс за индекс репозитория.
|
|
439
|
+
- Документация; 444 теста; версия 0.35.0.
|
|
440
|
+
|
|
441
|
+
## 0.34.0
|
|
442
|
+
|
|
443
|
+
- Команда `deps` понимает npm, pnpm и yarn: lockfile-проверка читает `package-lock.json`, `pnpm-lock.yaml` или `yarn.lock` и называет правильную команду установки (`npm ci`, `pnpm install --frozen-lockfile`, `yarn install --immutable`).
|
|
444
|
+
- `deps --fix` берёт версии из любого лок-файла, а `deps --why` строит граф зависимостей как по вложенному npm-дереву, так и по плоским pnpm/yarn-локам.
|
|
445
|
+
- Новый общий модуль `src/core/lockfile.ts`: парсеры npm v1/v2/v3, pnpm v6/v9 (секция `snapshots`), yarn v1/berry; сравнение версий с учётом prerelease; при нескольких копиях выбирается максимальная версия.
|
|
446
|
+
- Сообщения о пропавших из лока пакетах больше не привязаны к npm, а битый лок-файл даёт low-предупреждение вместо падения.
|
|
447
|
+
- Документация; 442 теста; версия 0.34.0.
|
|
448
|
+
|
|
449
|
+
## 0.33.0
|
|
450
|
+
|
|
451
|
+
- Команда `receipt`: прогоняет тесты и preflight, сохраняет квитанцию с SHA коммита, веткой, dirty-состоянием, статистикой диффа, точными командами и результатами в `.git/oc-pilot/receipt.json`.
|
|
452
|
+
- Квитанция запечатана SHA-256; `receipt --verify` пересчитывает хеш и сверяет коммит с текущим `HEAD`, поэтому изменённый файл или квитанция от старого коммита считаются недействительными.
|
|
453
|
+
- `--no-run` создаёт квитанцию без прогона тестов, `--command` задаёт команду, `--out` пишет файл вне репозитория; код 1 при упавших тестах, проваленном preflight или недействительной квитанции.
|
|
454
|
+
- JSON-контракт `{version, tool, toolVersion, createdAt, commit, branch, dirty, diff, files, tests, preflight, hash}`; `preflight` переиспользует общий сборщик проверок с командой `preflight`.
|
|
455
|
+
- Документация; 428 тестов; версия 0.33.0.
|
|
456
|
+
|
|
457
|
+
## 0.32.0
|
|
458
|
+
|
|
459
|
+
- MCP-инструмент `preflight`: один офлайн-вердикт по планируемому изменению с флагами `diff`/`base`/`staged`/`unstaged`/`include_untracked`, `since`, `max_delta`, `fail_on_issue` и `no_*`; модель не вызывается, инструмент помечен read-only и не тратит бюджет вызовов.
|
|
460
|
+
- Проваленная проверка возвращается как обычный результат `status: "fail"` с кодом 1, а не как ошибка инструмента, поэтому агент видит, какая именно проверка упала.
|
|
461
|
+
- Промпт `preflight-before-commit`: вызвать гейт, починить самую дешёвую упавшую проверку и повторять до `pass`, не отключая проверки ради зелёного вердикта.
|
|
462
|
+
- MCP-сервер рекламирует `preflight` в `tools/list` и `preflight-before-commit` в `prompts/list`; документация обновлена.
|
|
463
|
+
- Документация; 418 тестов; версия 0.32.0.
|
|
464
|
+
|
|
465
|
+
## 0.31.0
|
|
466
|
+
|
|
467
|
+
- `install-hook` по умолчанию ставит `pre-commit` с `oc-pilot preflight --staged`: секреты, зависимости в границах изменения, ослабление тестов и дельта Slop Index проверяются на каждом коммите.
|
|
468
|
+
- Флаг `--scan` возвращает лёгкий pre-commit только с `oc-pilot scan --staged`, если полный preflight слишком медленный для проекта.
|
|
469
|
+
- Маркер хука поднят до `# oc-pilot hook v2`; `oc-pilot doctor` видит хуки старых версий как устаревшие и обновляет их через `doctor --fix`, а `install-hook` перезаписывает свой старый хук без `--force`.
|
|
470
|
+
- `init --hooks`, справка `install-hook` и `doctor` говорят о preflight; документация и `skills/secure-diff-gate` обновлены.
|
|
471
|
+
- Документация; 417 тестов; версия 0.31.0.
|
|
472
|
+
|
|
473
|
+
## 0.30.0
|
|
474
|
+
|
|
475
|
+
- Команда `preflight`: один офлайн-вердикт перед коммитом — секреты в диффе, здоровье зависимостей, ослабление тестов и дельта Slop Index; модель не вызывается, сеть не используется.
|
|
476
|
+
- Проблемы зависимостей ограничены изменёнными файлами и пакетами из добавленных строк, чтобы старый репозиторий не падал целиком; пороги задают `--fail-on-issue` (по умолчанию high) и `--max-delta` (по умолчанию 10 пунктов).
|
|
477
|
+
- Каждую проверку можно отключить (`--no-secret-scan`, `--no-deps`, `--no-tests`, `--no-slop`); итог один — exit 1, если хоть одна проверка упала.
|
|
478
|
+
- JSON-отчёт `{status, checks, diff}` с `pass`/`fail`/`skip` по каждой проверке; текстовый вывод печатает OK/FAIL/SKIP, сводку и детали.
|
|
479
|
+
- Документация; 415 тестов; версия 0.30.0.
|
|
480
|
+
|
|
481
|
+
## 0.29.0
|
|
482
|
+
|
|
483
|
+
- `deps --why <name>`: локальный разбор происхождения пакета — поле и спецификация объявления, файлы с прямым импортом, зависимые пакеты, все версии и число копий, цепочки от корня.
|
|
484
|
+
- Цепочки строятся по `package-lock.json` v1/v2/v3 с npm-резолюцией вложенных `node_modules`; циклы отсекаются.
|
|
485
|
+
- Пакет, которого нет ни в манифесте, ни в lockfile, ни в импортах, даёт код 1; `--why` не сочетается с `--fix`.
|
|
486
|
+
- `--json` печатает объект `DependencyWhy`; текстовый вывод отвечает на вопросы «кто импортирует», «кто зависит» и «как пакет попал в проект».
|
|
487
|
+
- Документация; 403 теста; версия 0.29.0.
|
|
488
|
+
|
|
489
|
+
## 0.28.0
|
|
490
|
+
|
|
491
|
+
- `deps --fix`: офлайн-ремонт `package.json` — пакет, используемый только тестами, переезжает в `devDependencies`; импортируемый, но не объявленный пакет добавляется с версией из `package-lock.json` (в `devDependencies`, если все импортёры — тесты); плавающая версия `*`/`latest` прибивается к версии из lockfile.
|
|
492
|
+
- `--dry-run` печатает план и не трогает `package.json`; после записи аудит запускается заново, поэтому код возврата отражает исправленное состояние.
|
|
493
|
+
- Безопасность: версия берётся только из lockfile, выдуманных версий нет; unused, duplicate, vcs и фантом без записи в lock попадают в `skipped` с причиной.
|
|
494
|
+
- JSON с `--fix` получает поле `fix: {applied, dryRun, fixes, skipped}`.
|
|
495
|
+
- Документация; 393 теста; версия 0.28.0.
|
|
496
|
+
|
|
497
|
+
## 0.27.0
|
|
498
|
+
|
|
499
|
+
- Команда `deps`: офлайн-аудит зависимостей npm-проекта без вызова модели — сверяет `package.json` с импортами в коде и с `package-lock.json`.
|
|
500
|
+
- Семь классов проблем: phantom (импорт без объявления), unused, misplaced (только тесты), duplicate (пересекающиеся библиотеки), unpinned, vcs (git/URL/file) и lockfile (пакет не попал в lock, `npm ci` упадёт).
|
|
501
|
+
- `--fail-on-issue <high|medium|low>` — CI-гейт с кодом 1, `--ignore <names>` — список ложных срабатываний; `--json` отдаёт `{packageName, declared, imported, scannedFiles, truncated, lockfile, issues}`.
|
|
502
|
+
- Учитываются workspace-пакеты, `@types/*` и peer-зависимости; отчёты сортируются по severity.
|
|
503
|
+
- Документация; 384 теста; версия 0.27.0.
|
|
504
|
+
|
|
505
|
+
## 0.26.0
|
|
506
|
+
|
|
507
|
+
- Флаг `test-gen --from-slop`: цели выбирает скан slop, а не diff — исходники без тестов ранжируются по churn, дублированным блокам и нерешённым TODO; `--slop-files <n>` (по умолчанию 3) ограничивает число файлов.
|
|
508
|
+
- Для выбранных файлов собирается синтетический diff, поэтому модель видит их содержимое, но не может их изменить: патч по-прежнему допускает только тестовые файлы.
|
|
509
|
+
- `--from-slop` не сочетается с `--diff`, `--staged`, `--base`, `--coverage` и явными путями; если тест есть у каждого исходника, команда выходит с кодом 0, не вызывая модель.
|
|
510
|
+
- `--json` дополнен блоком `targets` (`file`, `score`, `lines`, `reasons` и сигналы churn/дубликатов/TODO); русский лог перечисляет выбранные цели с причиной.
|
|
511
|
+
- Документация; 373 теста; версия 0.26.0.
|
|
512
|
+
|
|
513
|
+
## 0.25.0
|
|
514
|
+
|
|
515
|
+
- Флаг `test-gen --coverage`: модель получает только те изменённые строки, которые ещё не выполнил ни один тест, вместо всего диффа — меньше токенов и точнее тесты.
|
|
516
|
+
- Разбор отчётов покрытия без зависимостей: lcov, Istanbul JSON (`coverage-final.json`), Cobertura XML и Go coverprofile; путь задаётся через `--coverage-file`, иначе ищутся типовые файлы (`coverage/lcov.info`, `coverage.out` и др.).
|
|
517
|
+
- Изменённые строки берутся из hunk-заголовков диффа; пути сопоставляются по суффиксу, поэтому абсолютные пути и Go import paths находят свои файлы. Если все изменённые строки уже покрыты, команда выходит с кодом 0, не вызывая модель.
|
|
518
|
+
- `--json` дополнен блоком `coverage` (`report`, `format`, `uncoveredLines`, `gaps`, `missing`).
|
|
519
|
+
- Исправлен дефолт `--rounds`: без флага `test-gen` падал с «Некорректное значение --rounds», теперь используется 2.
|
|
520
|
+
- Документация; 362 теста; версия 0.25.0.
|
|
521
|
+
|
|
522
|
+
## 0.24.0
|
|
523
|
+
|
|
524
|
+
- Команда `test-gen`: модель пишет тесты на изменённый код, патч применяется, `testCommand` запускается, зелёные тесты остаются, красные откатываются и уходят обратно в модель как обратная связь (`--rounds`, по умолчанию 2).
|
|
525
|
+
- Патч может менять только тестовые файлы (`*.test.ts`, `*.spec.ts`, `*_test.go`, `test_*.py`, каталоги `test/`); производственный код в патче отклоняет раунд, а существующие тесты защищены без `--force`.
|
|
526
|
+
- `--apply` применяет патч, `--no-run` пропускает запуск, `--keep-failing` оставляет красный тест, `--json` отдаёт `{applied, patch, files, status, tests, rounds, analysis, meta}` и код 1, пока тесты красные.
|
|
527
|
+
- Документация; 350 тестов; версия 0.24.0.
|
|
528
|
+
|
|
529
|
+
## 0.23.0
|
|
530
|
+
|
|
531
|
+
- MCP-инструмент `fix` отдаёт в `structuredContent` не только готовый unified-патч, но и его метаданные: список файлов `files` и `patchStats` (`additions`, `deletions`, `hunks`, `bytes`). Хосту не нужно разбирать diff, чтобы показать, сколько файлов и строк затронуто.
|
|
532
|
+
- Патчи длиннее 200 000 символов обрезаются перед отправкой: результат получает `patchTruncated: true` и `patchBytes` с исходной длиной, чтобы один ответ не забил контекст агента.
|
|
533
|
+
- При `verbosity: "compact"` результат `fix` описывается одной строкой `oc-pilot: fix N files, +A/-D (applied/not applied)`.
|
|
534
|
+
- Тесты на `patchSummary` и обрезку патча; версия 0.23.0, 348 тестов.
|
|
535
|
+
|
|
536
|
+
## 0.22.0
|
|
537
|
+
|
|
538
|
+
- MCP-сервер получил офлайн-инструмент `slop`: Slop Index без вызова модели, с параметрами `since`, `since_days`, `limit`, `exclude` и `no_blame`. Ресурс `oc-pilot://slop` отдаёт тот же отчёт как JSON, промпт `slop-check` формулирует вопрос про накопленную энтропию.
|
|
539
|
+
- Все инструменты принимают `max_findings` (по умолчанию 50, урезанный ответ несёт `truncated` и `totalFindings`) и `verbosity`: `full` возвращает JSON, `compact` — одну строку сводки, при этом данные остаются в `structuredContent`. Это экономит контекст агента на больших ревью.
|
|
540
|
+
- Прогресс и журнал: при `_meta.progressToken` сервер шлёт `notifications/progress` до и после вызова, метод `logging/setLevel` включает `notifications/message` с длительностью и кодом возврата. В `initialize` появилась возможность `logging`.
|
|
541
|
+
- Бюджет вызовов: `--max-calls <n>` (или `OC_PILOT_MCP_MAX_CALLS`, по умолчанию 50, `0` снимает лимит) ограничивает число обращений к модели за сессию. Офлайн-инструменты `scan`, `stats` и `slop` не расходуют бюджет и продолжают работать после его исчерпания.
|
|
542
|
+
- Документация: разделы про MCP в README обновлены, включая новые параметры, ресурс и промпт. 347 тестов; версия 0.22.0.
|
|
543
|
+
|
|
544
|
+
## 0.21.0
|
|
545
|
+
|
|
546
|
+
- `oc-pilot slop` — Slop Index 0–100: насколько репозиторий зарос энтропией от быстрой генерации кода. Работает без API-ключа и сети, только git и рабочее дерево.
|
|
547
|
+
- Четыре детектора: близкие дубликаты (блоки от 72 токенов, повторённые в разных файлах; комментарии, строки и import-выражения игнорируются), мёртвые экспорты (имя не встречается ни в одном другом файле; type-only экспорты и точки входа пропускаются), churn без тестов (пять и более коммитов при менее чем 40% коммитов с тестами) и TODO-кладбище (`TODO`/`FIXME`/`HACK`/`XXX` только в комментариях, с возрастом из `git blame`).
|
|
548
|
+
- `--since <ref>` считает дельту относительно ревизии: что ветка добавила и убрала по категориям, плюс `deltaPoints`. `--max-index` и `--max-delta` дают код 3, `--badge` — SVG в стиле shields, `--json` — машинный отчёт.
|
|
549
|
+
- Калибровка на собственном репозитории: дубликаты считаются по квадратному корню числа блоков (линейная формула упиралась в максимум на любом реальном проекте), мёртвый код весит 0.6 балла, churn — 1.8. Отсечены ложные TODO из template literal, regex-литералов и JSDoc.
|
|
550
|
+
- Попутно убраны два реально мёртвых экспорта в самом проекте (`AGENT_RULE_FILES`, `baselinePath`).
|
|
551
|
+
- Документация: секция `slop` в README, `.oc-pilot/slopignore` для ложных срабатываний.
|
|
552
|
+
- 342 теста; версия 0.21.0.
|
|
553
|
+
|
|
554
|
+
## 0.20.0
|
|
555
|
+
|
|
556
|
+
- `oc-pilot reviewers` предлагает ревьюеров по diff: считает авторов последних коммитов по каждому изменённому файлу, отбрасывает ботов, учитывает `CODEOWNERS` (`.github/CODEOWNERS`, `CODEOWNERS`, `docs/CODEOWNERS`) с семантикой последнего подходящего правила. Опции `--limit`, `--depth`, `--exclude`; `--json` отдаёт готовый список для `gh pr create --reviewer`.
|
|
557
|
+
- `oc-pilot replay` перерисовывает последнее сохранённое ревью без вызова модели: text, json, sarif и markdown для PR (`--as md`). `--in` читает любой файл с массивом `findings`, `--fail-on` сохраняет код возврата как в `review`.
|
|
558
|
+
- `oc-pilot init --hooks` ставит git-хуки `pre-commit` (`scan --staged`) и `pre-push` (`review`) тем же механизмом, что `install-hook`, с бэкапом существующих хуков и предупреждением вместо падения.
|
|
559
|
+
- Документация: секции про `reviewers`, `replay` и `init --hooks` в README.
|
|
560
|
+
- 324 теста; версия 0.20.0.
|
|
561
|
+
|
|
562
|
+
## 0.19.0
|
|
563
|
+
|
|
564
|
+
- Устойчивость разбора ответов модели: `parseFindings` понимает короткие заголовки `#### Замечания` и `#### Findings`, а `validateAnalysis` принимает `#### Исправление` и `#### Fix` — формулировки, которые модели регулярно выдают вместо полного шаблона. Списки внутри code fence больше не превращаются в находки, поэтому пример кода в ответе не влияет на exit code, JSON и SARIF.
|
|
565
|
+
- Нормализация локаций: `normalizeLocation` приводит `a.ts:10-14`, `a.ts:10,12`, `a.ts#L12` и `a.ts (line 10)` к `a.ts:10`. Диапазон схлопывается в первую строку, потому что inline-комментарии PR/MR привязываются к одной строке; раньше такие находки просто терялись при размещении в диффе.
|
|
566
|
+
- Регрессионные тесты: `test/golden/` фиксирует собранный INPUT промпта для заданных diff (пересборка — `OC_PILOT_UPDATE_GOLDEN=1 npm test`), а `test/fixtures/model-output/` хранит реалистичные ответы моделей, на которых `src/core/output-format.test.ts` проверяет severity, локации, текст и предупреждения формата.
|
|
567
|
+
- 308 тестов; версия 0.19.0.
|
|
568
|
+
|
|
569
|
+
## 0.18.0
|
|
570
|
+
|
|
571
|
+
- GitLab inline-обсуждения: `review --mr` теперь прикрепляет до 25 находок к их строкам диффа через Discussions API (`position` с `position_type: "text"`, `base_sha`/`start_sha`/`head_sha`, `new_path`/`new_line`), а сводка по-прежнему уходит заметкой. SHA берутся из `CI_MERGE_REQUEST_DIFF_BASE_SHA`, `CI_MERGE_REQUEST_TARGET_BRANCH_SHA` и `CI_COMMIT_SHA`, а при их отсутствии запрашиваются у merge request как `diff_refs`. Новый флаг `--no-mr-inline` оставляет только сводную заметку. Ошибка одной позиции не отменяет остальные: отклонённый комментарий логируется предупреждением, сводка отправляется всегда.
|
|
572
|
+
- Документация: описание inline-обсуждений и `--no-mr-inline` в README.
|
|
573
|
+
- 292 теста; версия 0.18.0.
|
|
574
|
+
|
|
575
|
+
## 0.17.0
|
|
576
|
+
|
|
577
|
+
- Подавление находок в коде: маркер `oc-pilot:ignore: <причина>` на строке находки или строкой выше убирает её из текста, JSON, SARIF и комментариев PR/MR, а также из расчёта кода возврата — как `eslint-disable`, но с обязательной причиной. `oc-pilot:ignore-file: <причина>` в первых десяти строках отключает ревью для всего файла. Голый `oc-pilot:ignore` без причины не действует: находка остаётся, а прогон предупреждает. Подавленные находки перечислены в `meta.suppressed` с файлом, строкой и причиной. Маркер `oc-pilot:ignore-secret` по-прежнему принадлежит сканеру секретов и не скрывает находки ревью.
|
|
578
|
+
- Документация: секция про подавление находок в README.
|
|
579
|
+
- 287 тестов; версия 0.17.0.
|
|
580
|
+
|
|
581
|
+
## 0.16.0
|
|
582
|
+
|
|
583
|
+
- Нативный движок Anthropic: `--engine anthropic` обращается к Claude Messages API напрямую, без SDK. Системный промпт уходит блоком `system` с `cache_control: {"type": "ephemeral"}`, поэтому повторные ревью переиспользуют закэшированный префикс; запросы несут `anthropic-version: 2023-06-01` и `x-api-key`. Ключ берётся из `ANTHROPIC_API_KEY`, на loopback прокси можно работать без ключа. Usage из ответа попадает в общий расчёт стоимости, а в таблицу цен добавлены `claude-opus-4`, `claude-sonnet-4`, `claude-haiku-4` и `claude-3-5-haiku`, так что `--max-cost` и `stats` работают без изменений. Slicing, роутер и кеш ответов остаются только у `openai` — движок Anthropic всегда делает один запрос.
|
|
584
|
+
- GitLab merge request: `review --mr` отправляет сводку заметкой в MR, `--mr-status` выставляет commit status `oc-pilot` (`failed` при critical-находках). Координаты берутся из `CI_MERGE_REQUEST_IID`, `CI_PROJECT_ID` и `CI_API_V4_URL`, токен — из `GITLAB_TOKEN` (приоритет) или `CI_JOB_TOKEN`. Вне MR-пайплайна или без токена оба флага деградируют до предупреждения и не валят ревью; для заметок нужен токен со scope `api`.
|
|
585
|
+
- Документация: секция про движок Anthropic в README, строки `--mr`/`--mr-status` в таблице флагов `review` и пример `.gitlab-ci.yml` для GitLab CI.
|
|
586
|
+
- 277 тестов; версия 0.16.0.
|
|
587
|
+
|
|
588
|
+
## 0.15.0
|
|
589
|
+
|
|
590
|
+
- `oc-pilot explain <file:line>` объясняет находки прошлого ревью: команда читает `.git/oc-pilot/last-review.json`, который сохраняется после каждого `review`, находит замечание на указанной строке (или ближайшее в пределах трёх строк) и показывает его вместе с фрагментом кода. Секреты в сниппете маскируются тем же сканером, что и везде. `--json` отдаёт структуру для машинной обработки.
|
|
591
|
+
- `--max-cost <usd>` ограничивает дневные расходы на API. Стоимость каждой попытки оценивается по `usage` из ответа и встроенной таблице цен (gpt-4.1, gpt-4.1-mini/nano, gpt-4o, gpt-4o-mini, o3-mini, o4-mini), записывается в `stats.jsonl` и суммируется за сегодня. Когда лимит исчерпан, следующий вызов падает с понятной ошибкой вместо молчаливого сжигания бюджета. Настраивается через `maxCostUsd` в конфиге или `OC_PILOT_MAX_COST`; `0` отключает проверку, для неизвестных моделей стоимость считается нулевой.
|
|
592
|
+
- Прогресс слайсов: при параллельном разборе в лог пишется время готовности каждого слайса, поэтому длинный прогон не выглядит зависшим.
|
|
593
|
+
- 264 теста; версия 0.15.0.
|
|
594
|
+
|
|
595
|
+
## 0.14.0
|
|
596
|
+
|
|
597
|
+
- Пресеты движков: `--engine-preset ollama|lmstudio|openrouter` включает `openai`-совместимый движок, подставляет base URL и переменную с ключом, а для Ollama ещё и модель `llama3.2`. Явно переданные `--base-url`, `--api-key-env` и `--model` по-прежнему важнее пресета.
|
|
598
|
+
- MCP prompts: `prompts/list` и `prompts/get` отдают четыре готовых сценария — `review-my-diff`, `fix-failing-tests`, `pre-commit-gate` и `secure-change`. Агент получает текст промпта с подставленным контекстом, поэтому не нужно объяснять последовательность вызовов каждый раз.
|
|
599
|
+
- MCP-тулы `commit` и `stats`, а `scan` в MCP научился `all: true` для скана всего репозитория. `commit` с `apply` и `stats` с `clear` требуют запуска с `--allow-write`.
|
|
600
|
+
- Покрытие в CI: job прогоняет `node --test --experimental-test-coverage` на Node 24. Таблица информационная, порог не проверяется, поэтому медленный прогон не блокирует релиз.
|
|
601
|
+
- Авто-релиз: workflow по тегу создаёт GitHub Release, тело берётся из соответствующего раздела этого файла, так что история релизов и репозитория не расходятся. Нужна permission `contents: write`.
|
|
602
|
+
- 258 тестов; версия 0.14.0.
|
|
603
|
+
|
|
604
|
+
## 0.13.0
|
|
605
|
+
|
|
606
|
+
- Inline PR review: `review --pr` внутри GitHub Actions отправляет ревью через review API, и до 25 находок прикрепляются комментариями прямо к своим строкам диффа (`path` + `line`, сторона `RIGHT`). Находки, которые не ложатся на изменённую строку, и все запуски вне Actions откатываются на один сводный комментарий, поэтому поведение вне CI не изменилось. Нужна permission `pull-requests: write`.
|
|
607
|
+
- Блокирующий статус: `--pr-status` выставляет commit status в контексте `oc-pilot` — `failure`, пока остаются critical-находки, иначе `success`. Правило защиты ветки может требовать этот статус, чтобы PR нельзя было смержить с критичной находкой. Нужна permission `statuses: write`; ошибки статуса не валят ревью.
|
|
608
|
+
- `--no-pr-inline` оставляет только сводный комментарий, если inline-шум не нужен.
|
|
609
|
+
- 252 теста; версия 0.13.0.
|
|
610
|
+
|
|
611
|
+
## 0.12.0
|
|
612
|
+
|
|
613
|
+
- Retry с backoff для движков: ответы 408, 425, 429, 500, 502, 503 и 504 повторяются до трёх раз с экспоненциальной задержкой (500 мс, 1 с, 2 с, потолок 8 с), заголовок `Retry-After` учитывается. Сетевые ошибки и таймауты по-прежнему падают сразу. Настройки — `retryAttempts` и `retryDelayMs` в вызове движка.
|
|
614
|
+
- Параллельные слайсы: разрезанный diff уходит в модель до трёх запросов одновременно, ответы собираются в исходном порядке, поэтому `mergeSliceAnalyses` даёт тот же результат, что и раньше, но быстрее. Длинный дифф на движке `openai` перестаёт быть узким местом.
|
|
615
|
+
- Детектор ослабления тестов: пропущенные и сфокусированные тесты (`it.skip`, `xit`, `.only`, `t.Skip`, `pytest.mark.skip`, `#[ignore]`), удалённые проверки без замены, закомментированные ассерты и поднятый до 10 секунд и выше `setTimeout`. `review` предупреждает и добавляет блок `TEST_WEAKENING` в промпт, `--no-test-weakening` превращает находки в exit 3.
|
|
616
|
+
- `oc-pilot impact`: показывает, где ещё используется изменённый в диффе символ. Текстовый поиск по tracked и untracked файлам без AST, есть `--json` для агентов и CI.
|
|
617
|
+
- `oc-pilot scan --all`: сканирует всё дерево репозитория, а не только дифф, с учётом `.gitignore` и `.oc-pilot/ignore`. Бинарники, файлы больше 512 КБ и каталоги `node_modules`/`dist` пропускаются.
|
|
618
|
+
- 247 тестов; версия 0.12.0.
|
|
619
|
+
|
|
620
|
+
## 0.11.1
|
|
621
|
+
|
|
622
|
+
- Пять новых Agent Skills в `skills/`: `agent-self-review` (цикл перед коммитом: скан, ревью, фикс, повторная проверка), `test-failure-triage` (лог падения → первопричина → патч со снимком → прогон), `secure-diff-gate` (секреты, security-пресет, second opinion, признаки инъекций, SARIF), `commit-discipline` (conventional commit по staged-diff с блокировкой при секретах) и `stack-review-packs` (комбинируемые наборы правил). Базовый `oc-pilot` получил секцию `## Related skills`.
|
|
623
|
+
- Тест `src/skills.test.ts` проверяет каждый скилл: frontmatter, имя каталога, длину описания, реальные команды и флаги CLI, отсутствие заглушек.
|
|
624
|
+
- 228 тестов; версия 0.11.1.
|
|
625
|
+
|
|
626
|
+
## 0.11.0
|
|
627
|
+
|
|
628
|
+
- Second opinion: `review --second-opinion` (engine=openai) прогоняет до 10 критичных находок через вторую скептическую модель (`--second-opinion-model` / `--second-opinion-base-url` / `--second-opinion-api-key-env`, конфиг `secondOpinionEnabled` и др.). `VERDICT: REJECT` понижает находку с critical до style с пометкой `[second opinion: rejected — причина]`; ошибка верификатора оставляет находки как есть. Итог — в `meta.secondOpinion`.
|
|
629
|
+
- Dependency gate: `review` автоматически разбирает новые зависимости в 8 манифестах (npm, pypi, go, cargo, rubygems, packagist, maven/gradle, nuget) — тайпосквоты (`lodahs` рядом с популярными пакетами), незакреплённые версии (`""`, `*`, `latest`), VCS/URL-спеки. Предупреждение `DEPENDENCY_CHANGES` уходит в промпт, счётчик — в `meta.dependencies`.
|
|
630
|
+
- Test delta: логика изменена (≥ 20 добавленных строк в кодовых файлах) без тестов — предупреждение `TEST_COVERAGE_HINT`; `review --require-tests` превращает его в exit-код 3.
|
|
631
|
+
- `oc-pilot stats`: запуски, API-вызовы, попадания кеша, средняя длительность и находки за сегодня / неделю / всё время (`.git/oc-pilot/stats.jsonl`, `--clear`).
|
|
632
|
+
- `oc-pilot day`: сводка активности за период (`--since "1 day ago"`) — коммиты, файлы по churn, строки +/- и находки oc-pilot.
|
|
633
|
+
- Дневной лимит API-вызовов: `maxDailyApiCalls` / `OC_PILOT_MAX_DAILY_API_CALLS` (0 — без лимита); при исчерпании exit 1, попадания кеша не расходуют лимит.
|
|
634
|
+
- PR-комментарии без gh: внутри GitHub Actions `review --pr` постит сводку через REST API с `GITHUB_TOKEN` (нужна permission `pull-requests: write`); локально — как раньше через `gh`.
|
|
635
|
+
- Agent-rules: `AGENTS.md`, `CLAUDE.md`, `GEMINI.md`, `.cursorrules`, `.github/copilot-instructions.md` автоматически попадают в промпт (до 10 000 символов, секреты маскируются); отключается `agentRules: false`.
|
|
636
|
+
- Пресеты `flutter`, `elixir`, `zig`, `scala` — всего 23.
|
|
637
|
+
- `review --interactive`: по находке спрашивает «Скрыть в baseline? [y/N]», выбранные дописываются в `.oc-pilot/baseline.json` (TTY-only).
|
|
638
|
+
- Эвристики prompt injection: 6 паттернов (переопределение инструкций, role-hijack, эксфильтрация промпта, base64-блобы, невидимый Unicode) в добавленных строках — предупреждение `PROMPT_INJECTION_RISKS` и `meta.injection`.
|
|
639
|
+
- 225 тестов; версия 0.11.0.
|
|
640
|
+
|
|
641
|
+
## 0.10.0
|
|
642
|
+
|
|
643
|
+
- Пресеты правил для новых стеков: к `base`, `node`, `react`, `python`, `go` добавлены `next`, `vue`, `svelte`, `angular`, `typescript`, `rust`, `java`, `kotlin`, `csharp`, `swift`, `php`, `ruby` плюс сквозные `security` (инъекции, авторизация, крипто, утечки) и `devops` (Dockerfile, CI-workflow, Terraform/K8s). Всего 19 пресетов.
|
|
644
|
+
- Комбинации пресетов: `oc-pilot init --preset react,security` склеивает несколько пресетов в один `.oc-pilot/rules.md` (общая шапка, секции разделены линиями); неизвестный пресет в списке ломает всю команду с подсказкой доступных.
|
|
645
|
+
- 195 тестов; версия 0.10.0.
|
|
646
|
+
|
|
647
|
+
## 0.9.0
|
|
648
|
+
|
|
649
|
+
- Кеш ответов для `--engine openai`: повторный запрос с тем же промптом и моделью берётся из локального кеша в `.git/oc-pilot/cache/` — ноль токенов. Ключ — `sha256(model + base URL + system prompt + input)`, TTL по умолчанию 24 часа (`cacheTtlSeconds` / `OC_PILOT_CACHE_TTL`, `0` отключает), `--no-cache` обходит кеш на один запуск. Кешируются триаж роутера, основной вызов и слайсы; opencode-движок не кешируется. Новая команда `oc-pilot cache` (`--stats` / `--prune` / `--clear`); попадание видно в `meta.cache` (`hit` / `miss`). Ошибка кеша никогда не ломает ревью.
|
|
650
|
+
- Baseline известных находок: `review --baseline` прячет находки из `.oc-pilot/baseline.json` — из exit-кода, текстового вывода, `--json`, SARIF и PR-комментария. Отпечаток — `severity | файл | нормализованный текст` без номера строки, поэтому переживает сдвиги кода; `--update-baseline` перезаписывает файл и выходит с кодом 0; счётчики — в `meta.baseline` (`known`, `total`).
|
|
651
|
+
- Пресеты правил: `oc-pilot init --preset base|node|react|python|go` пишет готовый `.oc-pilot/rules.md` под стек проекта; файл можно свободно дополнять.
|
|
652
|
+
- `oc-pilot doctor --fix`: обновляет устаревшие oc-pilot-хуки (с бэкапом), чистит просроченный кеш; чужие хуки не трогает. В отчёт добавлены проверки git-хуков и кеша.
|
|
653
|
+
- `.pre-commit-hooks.yaml` в корне репозитория — интеграция с pre-commit framework: хуки `oc-pilot-secrets` (`scan --staged`) и `oc-pilot-review` (`review --staged --fail-on critical --fail-on-secrets`), `language: system`.
|
|
654
|
+
- `review --pr` отправляет сводный комментарий в текущий PR через GitHub CLI (`gh pr comment`): до 30 находок, группировка по severity, футер с версией и коммитом.
|
|
655
|
+
- 191 тест; версия 0.9.0.
|
|
656
|
+
|
|
657
|
+
## 0.8.0
|
|
658
|
+
|
|
659
|
+
- Двухфазный роутинг для `review` с `--engine openai`: перед основным вызовом дешёвая модель-триаж получает те же данные с компактным системным промптом и отвечает строкой `TRIAGE: REVIEW` / `TRIAGE: LGTM`. `LGTM` пропускает основной вызов; ошибка или нечитаемый ответ откатывается к полному ревью (`meta.router` — модель, решение, длительность, флаг fallback). Включается флагом `--router` / `--no-router` / `--router-model <m>`, конфигом `routerEnabled` + `routerModel` или переменными `OC_PILOT_ROUTER` / `OC_PILOT_ROUTER_MODEL`. Блокировка `--fail-on-secrets` работает независимо от роутера.
|
|
660
|
+
- Cache-friendly порядок промпта: `SECRET_SCAN` перенесён перед `GIT_DIFF`, изменчивый diff теперь идёт последней секцией. Стабильный префикс (инструкция, тип проекта, рецепт, контекст, отчёт сканера) одинаков между слайсами, раундами fix и повторными ревью — провайдеры с префикс-кэшированием (OpenAI, DeepSeek, Anthropic) переиспользуют его автоматически.
|
|
661
|
+
- MCP-ресурсы и шаблоны: `oc-pilot://config`, `oc-pilot://rules`, `oc-pilot://version`, `oc-pilot://prompt/{en|ru}` и шаблоны `oc-pilot://diff/{mode}`, `oc-pilot://scan/{mode}`, `oc-pilot://file/{+path}`; методы `resources/list`, `resources/templates/list`, `resources/read`. Секреты маскируются во всех ресурсах; файлы — только внутри проекта, до 2 МБ, без бинарных.
|
|
662
|
+
- 161 тест; версия 0.8.0.
|
|
663
|
+
|
|
664
|
+
## 0.7.0
|
|
665
|
+
|
|
666
|
+
- Умный slicing для `--engine openai`: diff больше одного промпта (300 000 символов) не усекается, а разбивается на слайсы по файлам (`planDiffSlices`), на каждый слайс — отдельный вызов API, ответы склеиваются в один анализ по OUTPUT SCHEMA (`mergeSliceAnalyses`); количество вызовов — в `meta.slices`. Файл больше бюджета уходит отдельным слайсом и усекается последним. Работает для `review`, `test-fix`, `custom`; `fix` и `docgen` всегда шлют один промпт.
|
|
667
|
+
- Новая команда `oc-pilot commit`: генерирует commit-сообщение в формате Conventional Commits по staged-изменениям (по умолчанию staged), видит последние 10 commit-сообщений проекта. `--apply` коммитит (`git commit -F -`), блокируется при critical-секретах (код `3`), `--allow-secrets` снимает блокировку; `--json` отдаёт структуру. Сообщение очищается от markdown-обёрток и control-символов (`sanitizeCommitMessage`).
|
|
668
|
+
- Рецепт `commit` в системном промпте (RU/EN): только сырое commit-сообщение, типы feat/fix/docs/…, subject <= 72 символов в повелительном наклонении; `validateAnalysis` для `commit` не проверяет OUTPUT SCHEMA.
|
|
669
|
+
- 153 теста; версия 0.7.0.
|
|
670
|
+
|
|
671
|
+
## 0.6.0
|
|
672
|
+
|
|
673
|
+
- `oc-pilot install-hook`: нативные git-хуки pre-commit (`scan --staged`) и опциональный pre-push (`review --fail-on critical --fail-on-secrets`) на чистом POSIX sh, без husky. `--uninstall`, `--force` (чужой хук сохраняется как `.oc-pilot.bak`), `--pre-push`, разовый пропуск через `OC_PILOT_SKIP=1`; учитывает `core.hooksPath` и worktrees.
|
|
674
|
+
- Снимок рабочего дерева перед `fix --apply`: бинарный патч tracked-изменений против HEAD плюс копии untracked-файлов в `.git/oc-pilot/snapshots/<id>/`, ничего не коммитится. Новая команда `oc-pilot restore [id]` (`--list`) откатывает изменения; `fix --no-snapshot` отключает.
|
|
675
|
+
- Игнорирование ложных срабатываний сканера секретов: файл `.oc-pilot/ignore` (glob-шаблоны путей, `#`-комментарии) и инлайн-маркер `// oc-pilot:ignore-secret` / `# oc-pilot:ignore-secret` для конкретной строки. Действует во всех точках сканирования: diff, patch в `fix`, полные файлы, правила, docgen.
|
|
676
|
+
- Shannon-энтропия: высокоэнтропийные присваивания (длина >= 20, энтропия >= 4 бита) помечаются как critical `High-entropy secret`; само значение маскируется и не попадает в логи, JSON и SARIF.
|
|
677
|
+
- `--format sarif` для `scan` и `review`: SARIF 2.1.0 для GitHub Code Scanning, правила `oc-pilot/secret`, `oc-pilot/critical`, `oc-pilot/warning`; `-o results.sarif` пишет файл.
|
|
678
|
+
- 135 тестов; версия 0.6.0.
|
|
679
|
+
|
|
680
|
+
## 0.5.2
|
|
681
|
+
|
|
682
|
+
- Patch release after the npm registry left `0.5.1` reserved but not published. No runtime code changes.
|
|
683
|
+
- Published from the same commit/tag content with a fresh version so npm can publish normally.
|
|
684
|
+
- 112 tests; версия 0.5.2.
|
|
685
|
+
|
|
686
|
+
## 0.5.1
|
|
687
|
+
|
|
688
|
+
- `setup` теперь поддерживает **ZCode** (Z.ai): project `.zcode/config.json` и global `~/.zcode/cli/config.json`, ключ `mcp.servers`.
|
|
689
|
+
- Добавлен универсальный клиент `agents`: project `.agents/mcp.json` и global `~/.agents/mcp.json`, ключ `mcpServers`. Этот формат читает ZCode как fallback и другие MCP-клиенты.
|
|
690
|
+
- `doctor` распознаёт ZCode и `.agents` конфиги.
|
|
691
|
+
- README EN/RU и `docs/integrations.md` обновлены: Claude Code, DeepSeek Harness, ZCode, `.agents`, generic MCP.
|
|
692
|
+
- 112 тестов; версия 0.5.1.
|
|
693
|
+
|
|
694
|
+
## 0.5.0
|
|
695
|
+
|
|
696
|
+
- Добавлен движок `openai`: любой OpenAI-совместимый `/chat/completions` (OpenAI, DeepSeek, Groq, OpenRouter, Ollama). OpenCode больше не обязателен.
|
|
697
|
+
- Новые флаги `--engine`, `--base-url`, `--api-key-env`; конфиг `engine`, `baseUrl`, `apiKeyEnv`; env `OC_PILOT_ENGINE`, `OC_PILOT_BASE_URL`, `OC_PILOT_API_KEY_ENV`. Ключ читается из `OC_PILOT_API_KEY`/`OPENAI_API_KEY` и не попадает в ошибки.
|
|
698
|
+
- Для движка `openai` автоматически включается `FULL_FILE_CONTEXT`, а инструменты репозитория отключаются.
|
|
699
|
+
- Добавлена команда `oc-pilot doctor`: проверяет Node, движок, ключ, git, тестовую команду, MCP-конфиги и правила; `--json`, exit 1 при ошибках, `--strict` для предупреждений.
|
|
700
|
+
- `oc-pilot setup` без `--client` сам находит установленные Claude Code, Codex, Cursor, Gemini CLI, OpenCode, VS Code и Windsurf.
|
|
701
|
+
- Добавлен composite GitHub Action `action.yml` для PR-гейта в три строки.
|
|
702
|
+
- README EN/RU и `docs/integrations.md` обновлены: движки, doctor, авто-настройка, Action.
|
|
703
|
+
- 111 тестов; версия 0.5.0.
|
|
704
|
+
|
|
705
|
+
## 0.4.3
|
|
706
|
+
|
|
707
|
+
- Fixed remote MCP config shapes: Gemini uses `httpUrl`, Windsurf uses `serverUrl`.
|
|
708
|
+
- `setup --http --token` for Gemini now stops with an explanation instead of writing a header that Gemini does not expand.
|
|
709
|
+
- 103 теста; версия 0.4.3.
|
|
710
|
+
|
|
711
|
+
## 0.4.2
|
|
712
|
+
|
|
713
|
+
- `fix` scans only added lines in the proposed patch. A patch that removes a leaked secret is no longer rejected as if it added one.
|
|
714
|
+
- `setup` no longer writes the unsupported `enabled` field into OpenCode MCP config; servers are enabled by default in OpenCode V2.
|
|
715
|
+
- `setup --http --token` now writes an `OC_PILOT_MCP_TOKEN` reference instead of the secret itself.
|
|
716
|
+
- User-journey verification: GitHub install, `scan`, real `review`, `test-fix`, `fix --apply` with tests, MCP stdio, Claude/Codex/OpenCode setup.
|
|
717
|
+
- 101 тест; версия 0.4.2.
|
|
718
|
+
|
|
719
|
+
## 0.4.1
|
|
720
|
+
|
|
721
|
+
- MCP-сервер теперь **read-only по умолчанию** и для stdio, и для HTTP: `fix` с `apply:true` и `test_fix`, запускающий новую команду, требуют явного `--allow-write`.
|
|
722
|
+
- `oc-pilot setup --allow-write` добавляет этот флаг в конфиг клиента; без него агент получает только анализ и предложение патча.
|
|
723
|
+
- Уточнены SECURITY.md, README и `docs/integrations.md`: безопасные значения по умолчанию, доверенный локальный клиент, TLS и токен для HTTP.
|
|
724
|
+
- 100 тестов; версия 0.4.1.
|
|
725
|
+
|
|
726
|
+
## 0.4.0
|
|
727
|
+
|
|
728
|
+
- Добавлена команда `oc-pilot setup` для Claude Code, Codex, Cursor, Gemini CLI и OpenCode: `--local/--global`, `--print`, `--json`, `--http/--token`, сохранение чужих серверов и настроек.
|
|
729
|
+
- `oc-pilot-mcp` получил Streamable HTTP транспорт (`--http`, `--host`, `--port`, `--path`, `--token`, `/health`, `Mcp-Session-Id`) для контейнеров и удалённых агентов.
|
|
730
|
+
- Добавлена команда `fix`: модель предлагает unified diff, патч проверяется через `git apply --check`, применяется с `--apply`, тесты запускаются автоматически, при падении патч откатывается; `--keep-on-test-failure`, `--no-tests`, `--rounds`.
|
|
731
|
+
- MCP-инструмент `fix` с `apply`, `command`, `no_tests`, `rounds`.
|
|
732
|
+
- `--github` печатает inline-аннотации GitHub Actions (`::error` / `::warning`) для `review` и `fix`.
|
|
733
|
+
- Добавлены `Dockerfile`, `docker-compose.yml`, `.dockerignore`; образ включает OpenCode и запускает HTTP MCP на порту 8787.
|
|
734
|
+
- Добавлен Agent Skill `skills/oc-pilot/SKILL.md` и `server.json` для MCP Registry.
|
|
735
|
+
- Добавлены `oc-pilot mcp`, read-only HTTP по умолчанию, `--allow-write`, проверка токена и ограничение путей; CI/CodeQL/release workflows, `SECURITY.md`, поддержка DeepSeek Harness.
|
|
736
|
+
- `dist` коммитится в репозиторий, поэтому установка из GitHub-тега не требует devDependencies: `npm install -g https://github.com/MyNameIsNikki/oc-pilot/archive/refs/tags/v0.4.0.tar.gz`. Docker runtime использует `--ignore-scripts`.
|
|
737
|
+
- Обновлены README, `README.ru.md`, `docs/integrations.md`; 99 тестов.
|
|
738
|
+
|
|
739
|
+
## 0.3.0
|
|
740
|
+
|
|
741
|
+
- Английский системный промпт стал языком по умолчанию для глобальной аудитории; добавлены `--lang en|ru`, `OC_PILOT_LANG` и `lang` в конфиге. Русский промпт сохранён.
|
|
742
|
+
- Добавлен MCP-сервер `oc-pilot-mcp` (stdio, JSON-RPC 2.0) с инструментами `review`, `test_fix`, `docgen`, `custom`, `scan` для Claude Code, Codex, Cursor, Gemini CLI и OpenCode.
|
|
743
|
+
- Добавлена интеграционная документация `docs/integrations.md` и разделы MCP в README.
|
|
744
|
+
- README переведён на английский как основной; русская версия — `README.ru.md`.
|
|
745
|
+
- Промпты разделены на `prompts/oc-pilot.en.md` и `prompts/oc-pilot.ru.md`; `.opencode/agents/oc-pilot.md` использует английский промпт.
|
|
746
|
+
- `--no-secret-scan` теперь также отключает сканирование `PROJECT_RULES` и `FULL_FILE_CONTEXT`.
|
|
747
|
+
- Добавлены тесты MCP и двуязычных промптов; версия 0.3.0.
|
|
748
|
+
|
|
749
|
+
## 0.2.0
|
|
750
|
+
|
|
751
|
+
- Встроенный агент `oc-pilot` теперь работает с read-only контекстом репозитория: `read`, `glob`, `grep`; изменение файлов, shell, web и внешние директории запрещены.
|
|
752
|
+
- Добавлен `--no-repo-context` для изолированного diff-only режима. В нём изменённые файлы передаются как `FULL_FILE_CONTEXT` с redaction.
|
|
753
|
+
- Добавлены структурированные `findings` в JSON и флаг `--fail-on critical|warning|style` для CI.
|
|
754
|
+
- Добавлены правила проекта `.oc-pilot/rules.md` (автопоиск вверх по дереву, `--rules`, `rules` в конфиге).
|
|
755
|
+
- Расширен сканер секретов: Hugging Face, Groq, Discord, SendGrid, DigitalOcean, PyPI, Azure Storage, `.env`-присваивания.
|
|
756
|
+
- Новые настройки: `repoContext`, `failOn`, `rules` и переменные `OC_PILOT_REPO_CONTEXT`, `OC_PILOT_FAIL_ON`, `OC_PILOT_RULES`.
|
|
757
|
+
- Обновлены README, промпт и конфигурация агента.
|
|
758
|
+
|
|
759
|
+
## 0.1.0
|
|
760
|
+
|
|
761
|
+
- Первый релиз: `review`, `test-fix`, `docgen`, `custom`, `scan`, `init`.
|