diff --git a/docs/config/coverage.md b/docs/config/coverage.md index c282afcea..8d3f22696 100644 --- a/docs/config/coverage.md +++ b/docs/config/coverage.md @@ -133,6 +133,10 @@ You can also pass custom coverage reporters. See [Guide - Custom Coverage Report You can check your coverage report in Vitest UI: check [Vitest UI Coverage](/guide/coverage#vitest-ui) for more details. +::: tip AI coding agents +When Vitest detects it is running inside an AI coding agent, it automatically adds the `text-summary` reporter and sets `skipFull: true` on the `text` reporter to reduce output and minimize token usage. +::: + ## coverage.reportOnFailure {#coverage-reportonfailure} - **Type:** `boolean` diff --git a/docs/guide/coverage.md b/docs/guide/coverage.md index faaa47424..6a44c9129 100644 --- a/docs/guide/coverage.md +++ b/docs/guide/coverage.md @@ -508,3 +508,12 @@ This is integrated with builtin coverage reporters with HTML output (`html`, `ht html coverage in Vitest UI html coverage in Vitest UI + +## Coverage in Agent Environments + +When Vitest detects it is running inside an AI coding agent, it automatically adjusts the default `text` reporter to reduce output and minimize token usage: + +- `skipFull: true` is set on the `text` reporter, so files with 100% coverage are omitted from the terminal output. +- The [`text-summary`](/config/coverage#coverage-reporter) reporter is added automatically, so the agent always sees a concise totals table even when `skipFull` hides all individual files. + +These adjustments only apply when the `text` reporter is already part of the active reporter list (it is included in the default). Explicitly configured reporters are never removed. diff --git a/packages/vitest/src/node/config/resolveConfig.ts b/packages/vitest/src/node/config/resolveConfig.ts index bf0056fd0..fb2569c9d 100644 --- a/packages/vitest/src/node/config/resolveConfig.ts +++ b/packages/vitest/src/node/config/resolveConfig.ts @@ -427,6 +427,17 @@ export function resolveConfig( } resolved.coverage.reporter = resolveCoverageReporters(resolved.coverage.reporter) + if (isAgent) { + // default to `skipFull` and add `text-summary` reporter when `text` reporter is used on agents + const text = resolved.coverage.reporter.find(([name]) => name === 'text') + const textSummary = resolved.coverage.reporter.find(([name]) => name === 'text-summary') + if (text) { + (text as any)[1] = { skipFull: true, ...text[1] as any } + if (!textSummary) { + resolved.coverage.reporter.push(['text-summary', {}]) + } + } + } if (resolved.coverage.changed === undefined && resolved.changed !== undefined) { resolved.coverage.changed = resolved.changed }