coder-eval 0.12.5__tar.gz → 0.12.6__tar.gz
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.
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/agents.md +6 -8
- {coder_eval-0.12.5 → coder_eval-0.12.6}/CHANGELOG.md +63 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/PKG-INFO +1 -1
- {coder_eval-0.12.5 → coder_eval-0.12.6}/action.yml +1 -1
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/DIALOG_MODE.md +5 -3
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/TASK_DEFINITION_GUIDE.md +6 -6
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/agents/ANTIGRAVITY.md +3 -2
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/agents/CODEX.md +1 -1
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/agents/HARNESS_PARITY.md +51 -53
- {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/.claude-plugin/plugin.json +1 -1
- {coder_eval-0.12.5 → coder_eval-0.12.6}/pyproject.toml +1 -1
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/__init__.py +1 -1
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/antigravity_agent.py +20 -11
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/claude_code_agent.py +31 -11
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/codex_agent.py +31 -14
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/delegate_agent.py +27 -4
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/limits.py +9 -7
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/results.py +4 -3
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestrator.py +1 -1
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/pricing.py +17 -11
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/reports/html.py +2 -1
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/simulation/termination.py +1 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/streaming/collector.py +0 -16
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +1 -1
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +1 -1
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent.py +111 -1
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_antigravity_agent.py +63 -27
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_codex_agent.py +34 -11
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_delegate_agent.py +74 -3
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_limits_orchestrator.py +44 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/uv.lock +1 -1
- coder_eval-0.12.5/tests/test_visible_turn_cap.py +0 -68
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/commands/coder-eval-code-review-full.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/commands/coder-eval-code-review-wf.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/commands/coder-eval-code-review.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/commands/coder-eval-create-plan.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/commands/coder-eval-implement-plan.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/commands/coder-eval-review.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/harness-candidates.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/README.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/contracts.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/isolation.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/lint-rules.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/orchestration.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/permissions.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/persistence.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/reporting.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/notes/timing.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/shared/axes.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/shared/multi-model-review.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/shared/review-rubric.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/shared/run-layout.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/workflows/cr-axis.js +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude/workflows/cr-parent.js +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.claude-plugin/marketplace.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.env.example +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/CODEOWNERS +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/actionlint.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/code_review.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/dependabot.yml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/pages-stub/index.html +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/scripts/diagnose_delegate_token_claims.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/scripts/harbor_e2e.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/scripts/release_notes.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/claude-pr-review.yml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/codeql.yml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/conventional-commits.yml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/docker-publish.yml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/docs.yml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/harbor-e2e.yml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/pr-checks.yml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/publish-testpypi.yml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/release.yml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.github/workflows/verify-published-action.yml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.gitignore +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.pre-commit-config.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/.python-version +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/ADOPTERS.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/CLAUDE.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/CODE_OF_CONDUCT.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/CONTRIBUTING.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/LICENSE +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/Makefile +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/NOTICE +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/README.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/SECURITY.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/comparison.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docker/Dockerfile +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docker/Dockerfile.runtime +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docker/coder_eval_entrypoint.sh +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docker/coder_eval_runtime_entrypoint.sh +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/AB_EXPERIMENTS.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/CI_GATE.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/DATASETS.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/DOCKER_ISOLATION.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/EXTENDING.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/PLUGIN.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/REPORT_SCHEMA.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/USER_GUIDE.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/agents/CLAUDE_CODE.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/agents/DELEGATE.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/agents/OPENCODE.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/agents/PI.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/assets/hero.gif +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/comparison.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/index.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/llms.txt +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/tutorials/01-first-evaluation.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/tutorials/02-ci-pipeline.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/tutorials/03-evalboard-local.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/tutorials/04-writing-a-task.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/tutorials/05-comparing-models.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/tutorials/06-use-docker-isolation.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/tutorials/07-plugin-in-claude-code.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/docs/tutorials/README.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/.gitignore +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/README.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/__tests__/harness-badge.test.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/__tests__/skeleton.test.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/col-help.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/collapsible-rail.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/harness-badge.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/harness-selector.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/scroll-table.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/search-box.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/skeleton.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/unit-toggle.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_components/version-list.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_lib/__tests__/source-param.test.ts +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_lib/source-param.ts +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/__tests__/efficiency-charts.test.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/daily-chart.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/efficiency-charts.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/harness-legend.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/harness-series.ts +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/tag-rail.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/wall-clock-chart.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/_overview/window-summary.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/api/download/route.ts +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/api/file/route.ts +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/api/refresh/route.ts +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/error.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/globals.css +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/icon.png +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/layout.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/loading.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/page.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/path-to-ga/page.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/path-to-ga/task-table.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/scribe/page.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/scribe/run-table.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/trends/actions.ts +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/trends/page.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/trends/trends-view.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/watchlist/page.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/next-env.d.ts +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/next.config.mjs +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/package.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/pnpm-lock.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/postcss.config.mjs +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/public/harness/antigravity.png +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/public/harness/claude-code.png +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/public/harness/codex.png +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/public/harness/pi.png +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/public/uipath.png +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/tailwind.config.ts +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/tsconfig.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/vitest.config.ts +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/evalboard/vitest.setup.ts +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/experiments/default.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/experiments/early-stop-ab.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/experiments/model-comparison.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/experiments/permissions-smoke.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/experiments/plugin-comparison.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/experiments/prompt-mutations-example.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/experiments/smoke_variants.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/litellm/README.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/litellm/cost_logger.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/litellm/litellm-config.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/litellm/start-litellm.sh +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/mkdocs.yml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/osv-scanner.toml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/README.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/reference/cli-setup.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/reference/criteria.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/reference/repo-layout.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/reference/run-layout.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/reference/task-rubric.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/reference/templates/activation-rows.jsonl +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/reference/templates/activation.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/skills/analyze/SKILL.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/skills/check-skill/SKILL.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/skills/ci/SKILL.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/skills/init/SKILL.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/skills/lint-tasks/SKILL.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/plugins/coder-eval/skills/task/SKILL.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/scripts/check_commit_msg.sh +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/scripts/timing/corpus/README.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/scripts/timing/corpus/antigravity.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/scripts/timing/corpus/claude-code.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/scripts/timing/corpus/codex.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/scripts/timing/corpus/opencode.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/scripts/timing/corpus/pi.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/scripts/timing/decompose_run.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/.gitattributes +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agent.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/_logging.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/_skills.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/delegate/.gitignore +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/delegate/delegate_host.mjs +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/delegate/package.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/noop_agent.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/opencode_agent.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/pi_agent.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/registry.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/agents/watchdog.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/analysis.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/argv_match.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/console.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/evaluate_command.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/evaluate_target.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/execute_command.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/export_command.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/harbor_command.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/plan_command.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/report_command.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/run_command.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/run_helpers.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/run_task_internal_command.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/cli/utils.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/config.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/agent_judge.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/base.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/classification_match.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/cli_called.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/command_executed.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/commands_efficiency.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/file_check.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/file_contains.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/file_exists.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/file_matches_regex.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/json_check.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/llm_judge.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/reference_comparison.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/run_command.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/skill_triggered.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/system_one_judge.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/criteria/uipath_eval.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/durations.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/agent.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/budget.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/categories.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/categorization.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/checker_misuse.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/executor.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/judge.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/reference.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/retry.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/errors/timeout.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/checker.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/judge_context.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/judge_litellm.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/judge_models.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/judge_persistence.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/judge_system_one.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/judge_usage.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/sub_agent.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/summaries.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/system_one_scoring.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/evaluation/verdict_tool.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/formatting.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/fs_permissions.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/agent.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/agent_paths.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/atif_emit.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/atif_hydrate.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/atif_models.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/experiment_packager.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/packager.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/portability.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/harbor/reward.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/invocation_log.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/isolation/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/isolation/docker_runner.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/litellm_cost.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/logging_config.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/agent_config.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/cli_match.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/container_context.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/container_paths.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/criteria.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/enums.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/experiment.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/judge.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/judge_defaults.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/merge_strategy.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/mutations.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/routing.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/sandbox.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/system_one.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/tasks.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/telemetry.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/models/templates.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/batch.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/config.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/config_merge.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/early_stop.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/evaluation.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/experiment.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/overrides.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/regrade.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/run_limits.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/run_summary_rebuild.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/orchestration/task_loader.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/path_utils.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/plugins.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/py.typed +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/reports/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/reports/experiment.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/reports/helpers.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/reports/junit.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/reports/markdown.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/resources/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/resources/tags.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/result_metrics.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/run_record.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/sandbox.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/scoring/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/scoring/ast_similarity.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/scoring/complexity.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/scoring/quality.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/scoring/signature_similarity.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/scoring/similarity.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/scoring/token_similarity.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/simulation/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/simulation/user_simulator.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/stats.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/streaming/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/streaming/callbacks.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/streaming/events.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/streaming/renderers.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/streaming/wire.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/telemetry.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/timing.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/src/coder_eval/utils.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/README.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agentless_smoke_test.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/antigravity_hello_world.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/claude_hello_world.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/claude_hello_world_docker.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/claude_subagent_test.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/codex_hello_world.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/codex_parallel_commands.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/codex_skills_test.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/codex_string_utils.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/codex_subagent_test.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/subagent_bash_long_input.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/agents/subagent_merge_sort.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/anti_cheat_reference/anti_cheat_reference.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/anti_cheat_reference/reference/solution.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/byod_smoke_test.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/dataset_example.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/datasets/sentiment.jsonl +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/delegate/fizzbuzz_delegate.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/delegate/hello_date_delegate.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/dockerfile_build_example/environment/input.txt +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/early_stop_decision_budget_exceeded.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/early_stop_weighted_high_weight_kills_run.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/early_stop_weighted_low_weight_absorbed.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/fibonacci_with_template.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/hello_date.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/inline_starter_example.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/internal/session_resumption.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/mock_path_dirs_smoke.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/opencode_smoke_test.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/pi_smoke_test.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/record_cli_responses.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/run_limits/max_turns_cap.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/run_limits/turn_timeout.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/README.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/sentiment_classification.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/smoke_agent_judge.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/smoke_budget_exceeded.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/smoke_llm_judge.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/smoke_negative_path.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/smoke_system_one_judge.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/smoke_task_timeout.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/smoke_variants.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/test_sandbox.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tasks/token_check.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/templates/byod_smoke_test/Dockerfile +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/templates/fibonacci-starter/README.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/templates/fibonacci-starter/src/main.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/templates/fibonacci-starter/tests/test_main.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_bracket_clock.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_container_contract.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/_scrub.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/antigravity_fixtures.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/antigravity_a_single_text_turn.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/antigravity_b_tool_call_resolved.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/antigravity_c_thinking_and_tool_same_generation.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/antigravity_d_orphaned_tool.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/antigravity_e_multi_generation.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/opencode_a_single_text_turn.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/opencode_b_tool_call_resolved.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/opencode_c_multi_step_tiling.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/opencode_d_orphaned_tool.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/opencode_e_error_after_generation.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/pi_a_single_text_turn.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/pi_b_tool_call_resolved.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/pi_c_multi_turn_tiling.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/pi_d_orphaned_tool.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/pi_e_error_after_generation.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/expected/pi_f_duplicate_turn_end.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/opencode_fixtures.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/golden_streams/pi_fixtures.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/expected/environment/Dockerfile +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/expected/environment/docker-compose.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/expected/environment/task.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/expected/instruction.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/expected/task.toml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/expected/tests/reference/greeting.txt +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/expected/tests/task.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/expected/tests/test.sh +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/source_task/environment/Dockerfile +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/source_task/reference/greeting.txt +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/harbor_export_golden/source_task/task.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/live_criteria.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/report_snapshots/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/report_snapshots/run_full.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_fixtures/timing_union_cases.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/_path_helpers.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/conftest.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/atif/known_good_trajectory.json +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/mock_agent.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/pi_happy_stream.jsonl +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/fixtures/text_stub_agent.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/harbor_e2e/fixtures/docker_baseline.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/harbor_e2e/fixtures/llm_judge.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/harbor_e2e/fixtures/template_sources.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/harbor_e2e/fixtures/trajectory_criteria.yaml +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/action_docs.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/agent_roster_parity.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/dead_config_fields.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/doc_env_parity.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/doc_examples.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/doc_indexes.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/doc_schema_parity.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/generated.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/live_verdict_contract.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/plugin_manifest_parity.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/plugin_reference.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/pricing_mirror.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/prose_budget.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/pyright_config.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/__init__.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/_layers.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/_model_ctor.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/base.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce037_no_dead_private_helper.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce038_acquire_inside_try.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce039_config_error_escalates.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce043_no_command_output_truncation.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce046_env_info_spreads_super.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce048_no_in_process_typer_command_call.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce049_no_score_or_zero.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce050_no_union_getattr_probe.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce051_no_driver_override.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce052_process_lethal_must_be_container_gated.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce053_run_record_filename_literal.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce054_env_info_key_round_trip.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce056_no_container_env_literal.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce057_sidecar_shim_stdlib_only.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce058_no_timing_literal.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce059_generation_window_is_two_reads.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce060_message_id_declared.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce061_window_via_close_window.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce063_no_busy_ms_in_agents.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce064_turn_bracket_on_the_clock.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/ce066_no_report_imports_in_core.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/no_agent_timing_access.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/no_silent_except.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/no_submodule_model_imports.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/open_explicit_encoding.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/register_criterion_required.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/runner.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/violation.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/lint/workflow_outputs.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_action_inputs.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_action_version_pin.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_config_no_timing_fields.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_config_optional_type.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_config_registry_dispatch.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_config_sdk_decoupling.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_golden_master.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_judge_criterion.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_telemetry.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_telemetry_advanced.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agent_timeout.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_agentless.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_atif_emit.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_atif_hydrate.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_atif_models.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_byoa_plugin.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_byoa_plugin_live.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_byod_feature.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_check_all_async.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_checker_logging.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_classification_match.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_claude_settings_enforcement_live.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cleanup_preservation_guard.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cli_backend_flag.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cli_called_criterion.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cli_empty_glob.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cli_match_parity.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cli_sdk_options.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cli_set_overrides.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cli_telemetry.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cli_type_flag.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_code_review_bugs.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_codex_agent_live.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_codex_agent_unit.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_codex_token_mapping.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_command_executed.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_command_statistics.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_command_telemetry_result_data.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_commands_efficiency.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_config_lineage.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_config_merge_engine.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_config_precedence.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_container_context.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_continuous_scoring.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_cost_accounting_paths.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_criterion_result_round_trip.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_custom_lint.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_dataset_expansion.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_debug_logging.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_delegate_agent_config.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_delegate_agent_live.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_delegate_agent_registration.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_detached_grading_boundaries.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_detached_grading_guards.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_docker_build_failure.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_docker_litellm_env.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_docker_runner_container_death.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_docker_runner_mounts.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_docker_runner_stream_limit.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_docker_wildcard_env.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_docker_workdir_live.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_driver_resolver.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_durations.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_early_stop.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_error_handling.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_evaluate_command.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_evaluate_format_harbor.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_evaluate_target.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_evaluator.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_event_collector.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_execute_command.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_execute_evaluate_loop.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_execute_format_harbor.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_experiment_cli.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_experiment_loader.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_experiment_models.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_experiment_reports.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_experiment_resolver.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_experiment_runner.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_file_check.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_file_contains_scoring.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_formatting.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_git_clone_failure.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_glob_paths_in_file_criteria.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_harbor_agent.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_harbor_e2e_fixtures.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_harbor_experiment_packager.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_harbor_export_golden.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_harbor_packager.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_harbor_portability.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_harbor_reward.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_heartbeat_watchdog.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_ignore_patterns_negation.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_image_from_dockerfiles.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_image_skew_refusal.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_integration.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_json_check.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_judge_anthropic.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_judge_bedrock.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_judge_burn_in_live.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_judge_context_builder.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_judge_litellm.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_judge_models.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_judge_persistence.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_judge_system_one.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_lint_no_top_level_run_limits.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_lint_runner.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_litellm_config.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_litellm_cost.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_litellm_cost_logger.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_litellm_judge_live.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_litellm_route.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_llm_judge_criterion.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_log_tail_buffer.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_logging.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_logging_isolation.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_merge_characterization.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_merge_strategy_annotations.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_merge_unification.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_models.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_mutations.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_new_criteria.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_node_env_config.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_opencode_agent.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_optional_dependencies.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_orchestrator.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_orchestrator_error_log_tail.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_orchestrator_telemetry.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_overrides_engine.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_parallel.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_path_utils.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_pi_agent.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_pi_agent_config.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_pi_smoke_task.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_plan_command.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_plugin_processing.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_plugins.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_post_run.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_pr_review_workflow.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_pre_run.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_preservation_mode.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_pricing_mirror.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_pricing_registry.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_prose_budget.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_prose_budget_commands.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reference_comparison_scoring.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reference_evaluator.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reference_missing_file.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reference_models.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reference_permissions.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_registry.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_regrade.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_release_notes.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_replicate_stats.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_report_command.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reports.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reports_html.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reports_junit.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_reports_package.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_resolve_task_files.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_result_metrics.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_resume.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_retry_logic_comprehensive.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_route_seam_exhaustiveness.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_routing.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_command_junit.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_command_stdout.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_helpers.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_limits_models.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_limits_resolver.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_metrics.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_record.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_run_summary_rebuild.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_runtime_tool_versions.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox_adopt.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox_layer_builder.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox_optional.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox_record_cli.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox_security.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox_symlink_preservation.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox_templates.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sandbox_venv_live.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_scorers.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_scoring_quality.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sdk_option_classification.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_seed_from_prior_result.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_simulation_config.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_simulation_integration.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_simulation_termination.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_simulation_trials.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_skill_triggered.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_stats.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_stats_nonfinite.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_streaming_agent_integration.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_streaming_batch.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_streaming_callbacks.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_streaming_cli.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_streaming_events.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_streaming_orchestrator.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_streaming_renderers.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_streaming_wire.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_sub_agent_runner.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_success_criterion_union.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_suite_rollup.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_summaries.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_system_one_judge.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_system_one_judge_live.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_tags.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_task_definition_unknown_fields.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_teardown_interrupt.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_telemetry.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_template_env_expansion.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_threshold_enforcement.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_timeout_batch.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_timeout_categorization.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_timeout_exceptions.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_timeout_models.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_timeout_orchestrator.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_timing_close_window.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_timing_identity_contract.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_timing_union_parity.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_token_usage.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_uipath_eval.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_ungraded_reporting.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_user_simulator.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_utils.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_utterance_extraction.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_variant_prompt_file.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_verdict_tool.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_verify_published_workflow.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_watchdog.py +0 -0
- {coder_eval-0.12.5 → coder_eval-0.12.6}/tests/test_yaml_migration.py +0 -0
|
@@ -61,14 +61,12 @@ intentionally brief and out of scope; trimming for DISPLAY belongs in the render
|
|
|
61
61
|
|
|
62
62
|
- **Harness run-limit parity**: a shared `BaseAgentConfig` field must mean the same
|
|
63
63
|
thing on every backend, so a divergence is either fixed or documented — never silent.
|
|
64
|
-
**`run_limits.max_turns`
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
their CLIs stream a real multi-step loop per `communicate()`
|
|
71
|
-
(`step_start`/`step_finish`, `turn_start`/`turn_end`). The cap is enforced on the same
|
|
64
|
+
**`run_limits.max_turns` counts main-thread model API calls on every harness**, per
|
|
65
|
+
iteration (each retry and dialog exchange starts at zero). Codex and Antigravity run one
|
|
66
|
+
SDK turn per `communicate()`, so each counts calls from its own stream (Codex
|
|
67
|
+
`thread/tokenUsage/updated`, Antigravity MODEL steps). claude-code keeps the CLI's
|
|
68
|
+
`--max-turns` plus a backstop that counts main-thread `message_id`s. OpenCode and Pi
|
|
69
|
+
stream one `step_start` / `turn_start` per call. The cap is enforced on the same
|
|
72
70
|
loop boundary as the cooperative early stop and finalizes cleanly as
|
|
73
71
|
`max_turns_exhausted` (no crash, no retry); on Antigravity that boundary lives in
|
|
74
72
|
`_drain()`, so the background-work poll loop honors it too.
|
|
@@ -2,6 +2,69 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- version list -->
|
|
4
4
|
|
|
5
|
+
## v0.12.6 (2026-09-23)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
- **claude-code**: End a turn the CLI did not cap at max_turns
|
|
10
|
+
([#194](https://github.com/UiPath/coder_eval/pull/194),
|
|
11
|
+
[`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
|
|
12
|
+
|
|
13
|
+
- **claude-code**: Kill the CLI on a cooperative stop
|
|
14
|
+
([#194](https://github.com/UiPath/coder_eval/pull/194),
|
|
15
|
+
[`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
|
|
16
|
+
|
|
17
|
+
- **claude-code**: Kill the CLI on a max_turns backstop stop without a turn timeout
|
|
18
|
+
([#194](https://github.com/UiPath/coder_eval/pull/194),
|
|
19
|
+
[`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
|
|
20
|
+
|
|
21
|
+
- **codex**: End a capped turn before the next call can run a tool
|
|
22
|
+
([#194](https://github.com/UiPath/coder_eval/pull/194),
|
|
23
|
+
[`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
|
|
24
|
+
|
|
25
|
+
- **delegate**: Count a tool-only reply as a model call
|
|
26
|
+
([#194](https://github.com/UiPath/coder_eval/pull/194),
|
|
27
|
+
[`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
|
|
28
|
+
|
|
29
|
+
- **delegate**: Keep counting model calls when a tool never returns
|
|
30
|
+
([#194](https://github.com/UiPath/coder_eval/pull/194),
|
|
31
|
+
[`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
|
|
32
|
+
|
|
33
|
+
- **evalboard**: Compare visible turns, not SDK num_turns, against expected_turns
|
|
34
|
+
([#194](https://github.com/UiPath/coder_eval/pull/194),
|
|
35
|
+
[`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
|
|
36
|
+
|
|
37
|
+
- **pricing**: Add Opus 5.5 and GPT-6, correct rates that moved publicly
|
|
38
|
+
([#195](https://github.com/UiPath/coder_eval/pull/195),
|
|
39
|
+
[`11b902f`](https://github.com/UiPath/coder_eval/commit/11b902fa9bc0d307bcab22801dc56523fcc1d92a))
|
|
40
|
+
|
|
41
|
+
- **run-limits**: Count max_turns as model API calls on every harness
|
|
42
|
+
([#194](https://github.com/UiPath/coder_eval/pull/194),
|
|
43
|
+
[`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
|
|
44
|
+
|
|
45
|
+
- **run-limits**: Count max_turns as model API calls on every harness and enforce it on claude-code
|
|
46
|
+
([#194](https://github.com/UiPath/coder_eval/pull/194),
|
|
47
|
+
[`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
|
|
48
|
+
|
|
49
|
+
- **run-limits**: Stop a turn mid-flight once a token or USD budget is crossed
|
|
50
|
+
([#194](https://github.com/UiPath/coder_eval/pull/194),
|
|
51
|
+
[`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
|
|
52
|
+
|
|
53
|
+
- **simulation**: End a dialog with agent_max_turns when the agent hits its own cap
|
|
54
|
+
([#194](https://github.com/UiPath/coder_eval/pull/194),
|
|
55
|
+
[`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
|
|
56
|
+
|
|
57
|
+
### Documentation
|
|
58
|
+
|
|
59
|
+
- **parity**: Record the claude-code max_turns backstop
|
|
60
|
+
([#194](https://github.com/UiPath/coder_eval/pull/194),
|
|
61
|
+
[`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
|
|
62
|
+
|
|
63
|
+
- **run-limits**: Say max_turns restarts per iteration and expected_turns counts tool calls
|
|
64
|
+
([#194](https://github.com/UiPath/coder_eval/pull/194),
|
|
65
|
+
[`17fb10f`](https://github.com/UiPath/coder_eval/commit/17fb10f1250b23df0aa80d33e568996b892711dd))
|
|
66
|
+
|
|
67
|
+
|
|
5
68
|
## v0.12.5 (2026-09-22)
|
|
6
69
|
|
|
7
70
|
### Bug Fixes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: coder-eval
|
|
3
|
-
Version: 0.12.
|
|
3
|
+
Version: 0.12.6
|
|
4
4
|
Summary: Evaluate, benchmark, and A/B-test AI coding agents (Claude Code, Codex, Gemini/Antigravity, OpenCode, Pi, Delegate) with sandboxed, reproducible YAML task suites.
|
|
5
5
|
Project-URL: Homepage, https://coder-eval.com
|
|
6
6
|
Project-URL: Repository, https://github.com/UiPath/coder_eval
|
|
@@ -25,7 +25,7 @@ inputs:
|
|
|
25
25
|
version:
|
|
26
26
|
description: coder-eval version to install from PyPI, or "local" to install from the action checkout
|
|
27
27
|
required: false
|
|
28
|
-
default: "0.12.
|
|
28
|
+
default: "0.12.6" # <-- kept in sync with releases by release.yml
|
|
29
29
|
extras:
|
|
30
30
|
description: >-
|
|
31
31
|
Comma-separated coder-eval extras (`codex`, `antigravity,litellm`), composed
|
|
@@ -121,13 +121,15 @@ After each exchange the driver evaluates the stop conditions **in this order**,
|
|
|
121
121
|
2. **`stop_on_criteria_pass`** (`criteria_passed`) — every success criterion passes. Requires
|
|
122
122
|
per-turn checking (`check_criteria: every_turn` or `both`); pairing it with the default
|
|
123
123
|
`end_of_dialog` is rejected at load time, since there would be nothing to check against.
|
|
124
|
-
3. **`max_turns`** (`max_turns`) — the hard cap on exchanges.
|
|
125
|
-
`max_turns` mid-exchange ends the dialog with the same reason.
|
|
124
|
+
3. **`max_turns`** (`max_turns`) — the hard cap on exchanges.
|
|
126
125
|
4. **`max_total_tokens`** (`budget`) — the dialog-wide budget across simulator **and** agent. The
|
|
127
126
|
dialog ends and the task is **still scored** — unlike
|
|
128
127
|
[`run_limits.max_total_tokens`](TASK_DEFINITION_GUIDE.md#run-limits), which covers the subject
|
|
129
128
|
agent only and aborts.
|
|
130
|
-
5. **`
|
|
129
|
+
5. **`run_limits.max_turns`** (`agent_max_turns`): the agent used up its own model-call cap inside
|
|
130
|
+
one exchange. That cap restarts on every exchange, so this reason means one exchange ran long, not
|
|
131
|
+
that the dialog ran out of exchanges.
|
|
132
|
+
6. **`stop_token`** (`stop_token`) — only if none of the above fired is the simulator asked for
|
|
131
133
|
another message; the sentinel token in *that fresh utterance* ends the dialog. This is the
|
|
132
134
|
workhorse in practice — the simulator decides, in character, that it got what it wanted — but it
|
|
133
135
|
is evaluated **last**, so a turn that trips `max_turns` or the budget never gets the chance to
|
|
@@ -240,7 +240,7 @@ valid and an empty block is legal — every field defaults to "no limit".
|
|
|
240
240
|
```yaml
|
|
241
241
|
run_limits:
|
|
242
242
|
# Structural caps
|
|
243
|
-
max_turns: 20 # hard cap on
|
|
243
|
+
max_turns: 20 # hard cap on model API calls per iteration
|
|
244
244
|
expected_turns: 8 # SOFT efficiency budget (visible turns) — never aborts
|
|
245
245
|
task_timeout: 300 # wall-clock cap for the full run envelope, seconds
|
|
246
246
|
turn_timeout: 300 # per-communicate() timeout, seconds
|
|
@@ -255,8 +255,8 @@ run_limits:
|
|
|
255
255
|
|
|
256
256
|
| Field | Default | Constraint | Description |
|
|
257
257
|
|-------|---------|------------|-------------|
|
|
258
|
-
| `max_turns` | *unset* | `> 0` | Hard cap on
|
|
259
|
-
| `expected_turns` | *unset* | `>= 1` | **Soft** target for
|
|
258
|
+
| `max_turns` | *unset* | `> 0` | Hard cap on main-thread model API calls per iteration, Claude Code's turn, counted the same on every harness. The tools the last allowed call asks for still run; the turn ends when the next call begins. Each retry and each dialog exchange starts a fresh count. Unset uses the SDK default. See [HARNESS_PARITY.md](agents/HARNESS_PARITY.md). |
|
|
259
|
+
| `expected_turns` | *unset* | `>= 1` | **Soft** target for visible turns (tool calls plus the final reply) summed over the whole task, a different unit from `max_turns`. Exceeding it warns and badges the report; it never aborts. See [`expected_turns`](#expected_turns-soft-efficiency-budget). |
|
|
260
260
|
| `task_timeout` | *unset* | `>= 30` | Max seconds for the full run envelope, including agent work, grading, and post-run work. |
|
|
261
261
|
| `turn_timeout` | *unset* | `>= 10` | Max seconds for the agent's single `communicate()` iteration. |
|
|
262
262
|
| `max_input_tokens` | *unset* | `>= 1` | Max cumulative input (prompt) tokens. |
|
|
@@ -327,8 +327,8 @@ that did: a budgeted task that failed counts as over budget, while tasks with no
|
|
|
327
327
|
`expected_turns` budget are excluded entirely (success or fail).
|
|
328
328
|
|
|
329
329
|
The count compared against the budget is **visible turns** — one per tool call
|
|
330
|
-
plus one for the agent's final reply
|
|
331
|
-
|
|
330
|
+
plus one for the agent's final reply. It is *not* `total_turns`, which counts
|
|
331
|
+
model API calls (the `max_turns` unit), and one call can batch several tool calls.
|
|
332
332
|
|
|
333
333
|
Set it to the number of turns a competent agent should need for the task. Pick
|
|
334
334
|
budgets consistently across a suite — the headline % is only comparable when
|
|
@@ -1721,7 +1721,7 @@ The simulator runs as a tools-disabled Claude Code agent on its own resolved `Ap
|
|
|
1721
1721
|
**Semantics:**
|
|
1722
1722
|
|
|
1723
1723
|
- The task's `initial_prompt` is the user's *opening* message; the simulator picks up from turn 2.
|
|
1724
|
-
- `max_turns`
|
|
1724
|
+
- `max_turns` caps exchanges. Each exchange also gets a fresh `run_limits.max_turns` of model API calls, so the worst case per trial is the product of the two. Use `n_trials` for variance sampling.
|
|
1725
1725
|
- The `reference` solution, if present, is hidden from the simulator (same security posture as for the coding agent).
|
|
1726
1726
|
- When `n_trials > 1`, each trial becomes its own `ResolvedTask` with its own zero-padded replicate directory (`runs/<ts>/<variant_id>/<task_id>/<NN>/`) and its own `task.json` — the same fan-out mechanism as experiment `repeats`, which `n_trials` takes precedence over when simulation is enabled. Trial-level metadata appears under `simulation.replicate_index` / `simulation.n_trials` on the `EvaluationResult`.
|
|
1727
1727
|
|
|
@@ -190,8 +190,9 @@ as every other agent.
|
|
|
190
190
|
5. **`allowed_tools` / `disallowed_tools` are not read.** The harness runs with its
|
|
191
191
|
full builtin tool set, so an Antigravity run has tools (web search, subagents,
|
|
192
192
|
URL fetch) that the same task file denies on Claude Code and Codex.
|
|
193
|
-
6. **`max_turns`
|
|
194
|
-
so the
|
|
193
|
+
6. **`max_turns` is counted by the harness.** One `communicate()` is a single SDK turn
|
|
194
|
+
here, so the harness counts model API calls itself (a MODEL step at a new
|
|
195
|
+
`step_index` opens one) and enforces the cap on the step loop. See
|
|
195
196
|
[Run-Limit Parity](HARNESS_PARITY.md).
|
|
196
197
|
7. **Shell commands over ~10s are moved to the background.** The localharness has a
|
|
197
198
|
10-second maximum synchronous wait; past it the command becomes a background task
|
|
@@ -217,7 +217,7 @@ The Codex SDK is synchronous. The agent uses `_run_async()` helper to detect and
|
|
|
217
217
|
| **Session Resume** | `--resume {session_id}` | Via thread ID |
|
|
218
218
|
| **Permissions** | `permission_mode` + `allowed_tools` | `permission_mode` → sandbox/approval + `allowed_tools`/`disallowed_tools` → thread config |
|
|
219
219
|
| **Tool Enforcement** | Not enforced by Coder Eval wrapper | `enabled_tools` honored; `disabled_tools` NOT enforced by the SDK |
|
|
220
|
-
| **`max_turns`** |
|
|
220
|
+
| **`max_turns`** | Model API calls: the CLI's `--max-turns`, plus a harness backstop | Model API calls, counted per `thread/tokenUsage/updated` and enforced on the notification pump |
|
|
221
221
|
| **Early stop** | Supported (cooperative `should_stop`, polled between messages) | Supported — polled after each streamed notification; the in-flight turn is interrupted best-effort |
|
|
222
222
|
|
|
223
223
|
Run-limit semantics per harness: [Run-Limit Parity](HARNESS_PARITY.md).
|
|
@@ -12,7 +12,7 @@ This page is the contract for what each run limit means per harness, plus the sh
|
|
|
12
12
|
|
|
13
13
|
| Limit | claude-code | codex | antigravity | opencode | pi | delegate |
|
|
14
14
|
|---|---|---|---|---|---|---|
|
|
15
|
-
| `run_limits.max_turns`
|
|
15
|
+
| `run_limits.max_turns` (main-thread model API calls on every harness, see below) | native CLI cap, plus a harness backstop when call N+1 begins | a call runs from its first item to its `thread/tokenUsage/updated`, and one that ran tools opens the next call there | a call runs from its first new MODEL step to the step carrying its usage | one `step_start` step | one `turn_start` turn | a call opens when the previous call's tools have all returned |
|
|
16
16
|
| `run_limits.turn_timeout` | watchdog, SIGKILL on the CLI subprocess | watchdog + cooperative interrupt | watchdog, plus an earlier internal poll deadline at 80% of it (see below) | deadline enforced in-loop and on the final reap; SIGTERM→SIGKILL on the CLI's whole process group | deadline enforced in-loop and on the final reap; SIGTERM→SIGKILL on the CLI's whole process group | deadline checked both between reads and while blocked inside one (`asyncio.wait_for`); force-kills the host subprocess and drops the handle so the next turn respawns |
|
|
17
17
|
| `run_limits.task_timeout` | orchestrator-level, agent-agnostic | orchestrator-level, agent-agnostic | orchestrator-level, agent-agnostic | orchestrator-level, agent-agnostic | orchestrator-level, agent-agnostic | orchestrator-level, agent-agnostic |
|
|
18
18
|
| `run_limits.stop_early` | cooperative `should_stop` | cooperative `should_stop` | cooperative `should_stop` | cooperative `should_stop` (event granularity) | cooperative `should_stop` (event granularity — Pi streams incrementally) | cooperative `should_stop`, polled per forwarded SDK event; the host is abandoned (no interrupt command exists) and a fresh one spawns for the next turn |
|
|
@@ -531,8 +531,7 @@ needed to drive it.
|
|
|
531
531
|
when a generation begins. Nothing in the timing accounting reads it — the
|
|
532
532
|
head and tail are measured from the first and last `AssistantMessage`
|
|
533
533
|
instead, which is uniform across all five — so this is recorded rather than
|
|
534
|
-
fixed. It is NOT a `max_turns` hazard: `
|
|
535
|
-
`len(self._commands)`, derived from `ToolEndEvent`, and `_turn_starts` feeds
|
|
534
|
+
fixed. It is NOT a `max_turns` hazard: no cap reads it, and `_turn_starts` feeds
|
|
536
535
|
only `assistant_turn_count` on the no-`AgentEndEvent` fallback path. The real
|
|
537
536
|
cost of normalizing it is that the event drives the live renderers, so moving
|
|
538
537
|
it changes the turn boundaries users watch during a run.
|
|
@@ -540,50 +539,49 @@ needed to drive it.
|
|
|
540
539
|
All three are deliberately deferred; see `c/time-bugs-audit.md` for the
|
|
541
540
|
measurements.
|
|
542
541
|
|
|
543
|
-
## `max_turns` counts
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
The
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
and
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
is the number to distrust.
|
|
542
|
+
## `max_turns` counts model API calls on every harness
|
|
543
|
+
|
|
544
|
+
One turn is one main-thread model API call, the unit Claude Code's `--max-turns`
|
|
545
|
+
counts. `max_turns: N` lets the agent make N calls and still runs the tools the Nth
|
|
546
|
+
call asked for. The turn ends when call N+1 begins, so a reply that finishes within
|
|
547
|
+
N calls completes normally. Sub-agent calls do not count. `TurnRecord.num_turns`
|
|
548
|
+
reports the same count, and a turn the cap ended reads N+1, as the Claude Code CLI
|
|
549
|
+
reports it.
|
|
550
|
+
|
|
551
|
+
Each harness finds the call boundary in its own stream (the table above):
|
|
552
|
+
|
|
553
|
+
- **claude-code** applies the cap in the CLI, and the harness reads the CLI's
|
|
554
|
+
`error_max_turns` stop. The CLI does not apply it on every route, so the harness
|
|
555
|
+
also counts distinct main-thread `message_id`s and ends the turn itself when call
|
|
556
|
+
N+1 begins.
|
|
557
|
+
- **Codex** sends `thread/tokenUsage/updated` once per call, after that call's
|
|
558
|
+
tools finish. An item starts as its tool runs, so waiting for the next call's
|
|
559
|
+
first item would let one tool of call N+1 act. A call that ran tools therefore
|
|
560
|
+
opens the next call at its `tokenUsage`, since the results always go back to the
|
|
561
|
+
model, and the cap fires before call N+1 can run anything.
|
|
562
|
+
- **Antigravity** attaches `usage_metadata` to one step per call, and the next call
|
|
563
|
+
opens with a MODEL step at a new `step_index`.
|
|
564
|
+
- **OpenCode** and **Pi** stream one `step_start` or `turn_start` per call.
|
|
565
|
+
- **Delegate**'s SDK has no round-trip marker, and a tool-only reply streams only
|
|
566
|
+
its tool call, with no text before it. So the next call opens when every tool the
|
|
567
|
+
previous call announced has returned, since those results go back to the model,
|
|
568
|
+
and the cap fires before call N+1 can run anything. A reply that announces
|
|
569
|
+
several tools before their results counts once. If a tool never returns, the
|
|
570
|
+
next call opens at the model's next text or new tool call instead.
|
|
571
|
+
|
|
572
|
+
Every harness enforces the cap on the same loop boundary as the
|
|
573
|
+
cooperative early stop, then kills or cancels the in-flight turn so the cap stops
|
|
574
|
+
spend. A run cut this way finalizes cleanly as `max_turns_exhausted`. It is not a
|
|
575
|
+
crash, and it is not retried.
|
|
576
|
+
|
|
577
|
+
One call can carry several parallel tool calls, so `max_turns` bounds model calls,
|
|
578
|
+
not tool calls. A model that batches does more work per turn, on every harness
|
|
579
|
+
alike.
|
|
580
|
+
|
|
581
|
+
The count is per iteration: each retry and each dialog exchange starts at zero. A
|
|
582
|
+
dialog whose agent hits the cap inside an exchange ends with `stop_reason:
|
|
583
|
+
agent_max_turns`. That is distinct from `max_turns`, the simulator's cap on
|
|
584
|
+
exchanges.
|
|
587
585
|
|
|
588
586
|
### What a capped run looks like
|
|
589
587
|
|
|
@@ -595,12 +593,12 @@ The signals a capped run leaves behind, on every backend:
|
|
|
595
593
|
`MAX_TURNS_EXHAUSTED` (reporting category `failed`, icon `M`). Never `ERROR`,
|
|
596
594
|
and never retried.
|
|
597
595
|
- `max_turns_exhausted: true` on the task record.
|
|
598
|
-
-
|
|
599
|
-
|
|
600
|
-
neither means the cap leaked:
|
|
601
|
-
- A tool call
|
|
602
|
-
with `result_status: unknown` rather than dropped,
|
|
603
|
-
was interrupted.
|
|
596
|
+
- `num_turns` is the cap plus one.
|
|
597
|
+
- The calls under the cap are recorded whole. Two things can add a further
|
|
598
|
+
*recorded* command, and neither means the cap leaked:
|
|
599
|
+
- A tool call from call N+1 that the harness saw before it stopped is
|
|
600
|
+
force-closed and recorded with `result_status: unknown` rather than dropped,
|
|
601
|
+
so the trajectory shows what was interrupted.
|
|
604
602
|
- On Codex, a sub-agent's inner tool calls are recovered from its rollout after
|
|
605
603
|
the pump stops, so the child's work and its tokens still reach the record. The
|
|
606
604
|
cap bounds what the model was allowed to do, not what the record may explain.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
|
|
3
3
|
"name": "coder-eval",
|
|
4
4
|
"displayName": "Coder Eval",
|
|
5
|
-
"version": "0.12.
|
|
5
|
+
"version": "0.12.6",
|
|
6
6
|
"description": "Test whether your Claude Code skills actually trigger, and benchmark any coding agent — author, run, and analyze the eval suite that proves it, locally or as a CI gate.",
|
|
7
7
|
"author": { "name": "UiPath", "email": "coder-eval@uipath.com", "url": "https://github.com/UiPath/coder_eval" },
|
|
8
8
|
"homepage": "https://coder-eval.com",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "coder-eval"
|
|
3
|
-
version = "0.12.
|
|
3
|
+
version = "0.12.6"
|
|
4
4
|
description = "Evaluate, benchmark, and A/B-test AI coding agents (Claude Code, Codex, Gemini/Antigravity, OpenCode, Pi, Delegate) with sandboxed, reproducible YAML task suites."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "Apache-2.0"
|
|
@@ -408,7 +408,7 @@ class AntigravityAgent(Agent[AntigravityAgentConfig]):
|
|
|
408
408
|
if state.max_turns_reached():
|
|
409
409
|
state.max_turns_hit = True
|
|
410
410
|
self._log.debug(
|
|
411
|
-
"max_turns (%s
|
|
411
|
+
"max_turns (%s API calls) reached; ending step loop",
|
|
412
412
|
state.max_turns,
|
|
413
413
|
)
|
|
414
414
|
break
|
|
@@ -438,9 +438,8 @@ class AntigravityAgent(Agent[AntigravityAgentConfig]):
|
|
|
438
438
|
conversation is cancelled (best-effort) and the turn finalizes cleanly as
|
|
439
439
|
``STOPPED_EARLY`` (``crashed=False``).
|
|
440
440
|
|
|
441
|
-
``max_turns`` caps
|
|
442
|
-
on the same boundary as the cooperative stop
|
|
443
|
-
a single SDK turn, so a native counter would cap at 1 and mean nothing.
|
|
441
|
+
``max_turns`` caps main-thread model API calls, Claude Code's unit,
|
|
442
|
+
enforced in-stream on the same boundary as the cooperative stop.
|
|
444
443
|
See docs/agents/HARNESS_PARITY.md.
|
|
445
444
|
|
|
446
445
|
Drives one logical turn: ``conversation.send(prompt)`` then iterate
|
|
@@ -723,6 +722,10 @@ class _AntigravityTurnState:
|
|
|
723
722
|
self.commands: list[CommandTelemetry] = []
|
|
724
723
|
self._output_parts: list[str] = []
|
|
725
724
|
self._assistant_turns = 0
|
|
725
|
+
# Main-thread API calls begun; one spans its first new MODEL step to its usage.
|
|
726
|
+
self.api_calls = 0
|
|
727
|
+
self._in_api_call = False
|
|
728
|
+
self._seen_steps: set[tuple[str, Any]] = set()
|
|
726
729
|
|
|
727
730
|
# ToolStart on first sight of an id; ToolEnd at DONE.
|
|
728
731
|
self._next_seq = 0
|
|
@@ -754,14 +757,12 @@ class _AntigravityTurnState:
|
|
|
754
757
|
return self.stopped_early_hit or self.max_turns_hit
|
|
755
758
|
|
|
756
759
|
def max_turns_reached(self) -> bool:
|
|
757
|
-
"""True once
|
|
760
|
+
"""True once the model begins API call ``max_turns + 1``, the unit Claude Code's ``--max-turns`` caps.
|
|
758
761
|
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
and on Codex. It counts RESOLVED tool calls, so the call that reaches the
|
|
762
|
-
cap keeps its result instead of being force-closed as unresolved.
|
|
762
|
+
The next call opens only after the previous call's tools finish, so every
|
|
763
|
+
call under the cap keeps its tool results.
|
|
763
764
|
"""
|
|
764
|
-
return self.max_turns is not None and self.
|
|
765
|
+
return self.max_turns is not None and self.api_calls > self.max_turns
|
|
765
766
|
|
|
766
767
|
def _seed_first_generation_window(self, source: Any) -> None:
|
|
767
768
|
"""Move the first window's mark to the first observed MODEL output.
|
|
@@ -789,6 +790,11 @@ class _AntigravityTurnState:
|
|
|
789
790
|
sstatus = _enum_value(step.status)
|
|
790
791
|
ssource = _enum_value(step.source)
|
|
791
792
|
self._seed_first_generation_window(ssource)
|
|
793
|
+
step_key = (getattr(step, "trajectory_id", "") or "", step.step_index)
|
|
794
|
+
if ssource == _SOURCE_MODEL and step_key not in self._seen_steps and not self._in_api_call:
|
|
795
|
+
self._in_api_call = True
|
|
796
|
+
self.api_calls += 1
|
|
797
|
+
self._seen_steps.add(step_key)
|
|
792
798
|
starget = _enum_value(step.target)
|
|
793
799
|
done = sstatus in (_STATUS_DONE, _STATUS_ERROR)
|
|
794
800
|
|
|
@@ -810,6 +816,9 @@ class _AntigravityTurnState:
|
|
|
810
816
|
|
|
811
817
|
# Per-generation usage: fold into the turn total and cut an AssistantMessage.
|
|
812
818
|
if step.usage_metadata is not None:
|
|
819
|
+
if not self._in_api_call:
|
|
820
|
+
self.api_calls += 1
|
|
821
|
+
self._in_api_call = False
|
|
813
822
|
gen = _to_token_usage(step.usage_metadata, self.model)
|
|
814
823
|
self.total_usage = self.total_usage + gen
|
|
815
824
|
self._flush_generation(gen, getattr(step.usage_metadata, "thoughts_token_count", 0) or 0)
|
|
@@ -1013,7 +1022,7 @@ class _AntigravityTurnState:
|
|
|
1013
1022
|
model_used=self.model,
|
|
1014
1023
|
assistant_turn_count=self._assistant_turns,
|
|
1015
1024
|
messages=self.messages,
|
|
1016
|
-
num_turns=self.
|
|
1025
|
+
num_turns=self.api_calls,
|
|
1017
1026
|
crashed=crashed,
|
|
1018
1027
|
crash_reason=crash_reason,
|
|
1019
1028
|
max_turns_exhausted=status is AgentEndStatus.MAX_TURNS_EXHAUSTED,
|
|
@@ -223,6 +223,8 @@ class _ClaudeTurnState:
|
|
|
223
223
|
# Set True by the in-loop cooperative-stop break (early-stop-on-criterion).
|
|
224
224
|
# Distinct from timeout_hit: a clean, non-crash stop that must NOT raise.
|
|
225
225
|
self.stopped_early_hit = False
|
|
226
|
+
self.max_turns_hit = False
|
|
227
|
+
self.main_turn_ids: set[str] = set()
|
|
226
228
|
# Resolved by _build_claude_query, set on the state before any finalize
|
|
227
229
|
# path. Stays None if we crash before setup (finalize reads it for cost
|
|
228
230
|
# backfill).
|
|
@@ -410,6 +412,8 @@ class _ClaudeTurnState:
|
|
|
410
412
|
if isinstance(message_id, str):
|
|
411
413
|
self.seen_message_ids.add(message_id)
|
|
412
414
|
self.last_message_had_id = True
|
|
415
|
+
if not isinstance(parent_tool_use_id, str):
|
|
416
|
+
self.main_turn_ids.add(message_id)
|
|
413
417
|
else:
|
|
414
418
|
self.last_message_had_id = False
|
|
415
419
|
|
|
@@ -635,6 +639,7 @@ class _ClaudeTurnState:
|
|
|
635
639
|
max_turns_exhausted = not crashed and (
|
|
636
640
|
self._agent._is_max_turns_result(self.sdk_result_summary)
|
|
637
641
|
or (self.max_turns is not None and self.num_turns is not None and self.num_turns > self.max_turns)
|
|
642
|
+
or self.max_turns_hit
|
|
638
643
|
)
|
|
639
644
|
if max_turns_exhausted and status == AgentEndStatus.COMPLETED:
|
|
640
645
|
status = AgentEndStatus.MAX_TURNS_EXHAUSTED
|
|
@@ -982,7 +987,7 @@ class ClaudeCodeAgent(Agent[ClaudeCodeAgentConfig]):
|
|
|
982
987
|
|
|
983
988
|
try:
|
|
984
989
|
options, transport, effective_model = self._build_claude_query(
|
|
985
|
-
user_input, timeout, max_turns, capture_stderr
|
|
990
|
+
user_input, timeout, max_turns, capture_stderr, can_stop=should_stop is not None
|
|
986
991
|
)
|
|
987
992
|
# Set on the state BEFORE the AgentStart emit and any finalize path
|
|
988
993
|
# (finalize reads it for cost backfill); stays None if setup crashed.
|
|
@@ -1116,12 +1121,13 @@ class ClaudeCodeAgent(Agent[ClaudeCodeAgentConfig]):
|
|
|
1116
1121
|
ruff's statement cap. ``query`` is still resolved as a module global at
|
|
1117
1122
|
call time, so ``patch("...claude_code_agent.query", ...)`` mocks work.
|
|
1118
1123
|
|
|
1119
|
-
|
|
1124
|
+
Three break conditions, and the ORDER MATTERS:
|
|
1120
1125
|
|
|
1121
1126
|
- The wall-clock guard runs at the TOP, so an over-deadline message is
|
|
1122
1127
|
DISCARDED — no append, no events. Do NOT move it to a post-loop check.
|
|
1123
|
-
- The
|
|
1124
|
-
|
|
1128
|
+
- The max_turns backstop and the cooperative stop run AFTER
|
|
1129
|
+
``state.dispatch(message)``, so the message that trips them is recorded
|
|
1130
|
+
and the next is never pulled.
|
|
1125
1131
|
"""
|
|
1126
1132
|
async for message in query(**query_kwargs):
|
|
1127
1133
|
if deadline is not None and time.monotonic() > deadline:
|
|
@@ -1129,9 +1135,19 @@ class ClaudeCodeAgent(Agent[ClaudeCodeAgentConfig]):
|
|
|
1129
1135
|
self._log.warning("Turn timeout reached mid-stream; breaking out of message loop")
|
|
1130
1136
|
break
|
|
1131
1137
|
state.dispatch(message)
|
|
1138
|
+
# The CLI stops after max_turns main-thread API calls; one more means it ignored the cap.
|
|
1139
|
+
if state.max_turns is not None and len(state.main_turn_ids) > state.max_turns:
|
|
1140
|
+
state.max_turns_hit = True
|
|
1141
|
+
state.num_turns = len(state.main_turn_ids)
|
|
1142
|
+
self._log.warning(
|
|
1143
|
+
"CLI began API call %d past max_turns=%d; ending the turn", state.num_turns, state.max_turns
|
|
1144
|
+
)
|
|
1145
|
+
self._kill_transport(self._active_transport)
|
|
1146
|
+
break
|
|
1132
1147
|
if should_stop is not None and should_stop():
|
|
1133
1148
|
state.stopped_early_hit = True
|
|
1134
1149
|
self._log.debug("Cooperative stop requested; ending message loop at this boundary")
|
|
1150
|
+
self._kill_transport(self._active_transport)
|
|
1135
1151
|
break
|
|
1136
1152
|
|
|
1137
1153
|
def _build_claude_query(
|
|
@@ -1140,11 +1156,14 @@ class ClaudeCodeAgent(Agent[ClaudeCodeAgentConfig]):
|
|
|
1140
1156
|
timeout: float | None,
|
|
1141
1157
|
max_turns: int | None,
|
|
1142
1158
|
stderr_callback: Callable[[str], None],
|
|
1159
|
+
*,
|
|
1160
|
+
can_stop: bool = False,
|
|
1143
1161
|
) -> tuple[ClaudeAgentOptions, SubprocessCLITransport | None, str | None]:
|
|
1144
|
-
"""Build the SDK options (+ a
|
|
1162
|
+
"""Build the SDK options (+ a killable transport) for one turn.
|
|
1145
1163
|
|
|
1146
|
-
``transport`` is None unless a
|
|
1147
|
-
|
|
1164
|
+
``transport`` is None unless a timeout, a turn cap or a cooperative stop
|
|
1165
|
+
(``can_stop``) can end the turn: it is pre-constructed only so the harness
|
|
1166
|
+
can hard-kill the subprocess. ``effective_model`` may
|
|
1148
1167
|
be None on a DirectRoute with no configured model. ``stderr_callback`` is
|
|
1149
1168
|
wired in here but owned by ``communicate``.
|
|
1150
1169
|
"""
|
|
@@ -1211,11 +1230,12 @@ class ClaudeCodeAgent(Agent[ClaudeCodeAgentConfig]):
|
|
|
1211
1230
|
# For later inspection: captures every field, defaults included.
|
|
1212
1231
|
self._sdk_options_dump = dump_dataclass(options)
|
|
1213
1232
|
|
|
1214
|
-
# Pre-constructed only
|
|
1215
|
-
# for hard-kill. None otherwise, so the SDK uses its own default and
|
|
1216
|
-
# can mock query() without a real CLI.
|
|
1233
|
+
# Pre-constructed only when the harness may end the turn, to retain the
|
|
1234
|
+
# subprocess handle for hard-kill. None otherwise, so the SDK uses its own default and
|
|
1235
|
+
# tests can mock query() without a real CLI. Closing the SDK's query()
|
|
1236
|
+
# stream does not end the CLI: it never closes the generator it wraps.
|
|
1217
1237
|
transport: SubprocessCLITransport | None = None
|
|
1218
|
-
if timeout is not None:
|
|
1238
|
+
if timeout is not None or max_turns is not None or can_stop:
|
|
1219
1239
|
transport = SubprocessCLITransport(prompt=user_input, options=options)
|
|
1220
1240
|
|
|
1221
1241
|
return options, transport, effective_model
|