coder-eval 0.12.12__tar.gz → 0.12.13__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.12 → coder_eval-0.12.13}/.claude/notes/README.md +1 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/notes/agents.md +33 -6
- coder_eval-0.12.13/.claude/notes/context-window.md +170 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/notes/lint-rules.md +1 -1
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/notes/timing.md +6 -1
- {coder_eval-0.12.12 → coder_eval-0.12.13}/CHANGELOG.md +59 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/PKG-INFO +1 -1
- {coder_eval-0.12.12 → coder_eval-0.12.13}/action.yml +1 -1
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/AB_EXPERIMENTS.md +23 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/EXTENDING.md +16 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/TASK_DEFINITION_GUIDE.md +8 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/agents/CLAUDE_CODE.md +5 -2
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/agents/CODEX.md +7 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/agents/DELEGATE.md +2 -2
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/agents/HARNESS_PARITY.md +49 -15
- {coder_eval-0.12.12 → coder_eval-0.12.13}/plugins/coder-eval/.claude-plugin/plugin.json +1 -1
- {coder_eval-0.12.12 → coder_eval-0.12.13}/pyproject.toml +1 -1
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/__init__.py +1 -1
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/agents/claude_code_agent.py +104 -10
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/agents/codex_agent.py +4 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/agents/delegate_agent.py +88 -42
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/agent_config.py +82 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/pricing.py +6 -2
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/reports/experiment.py +6 -2
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/reports/html.py +4 -1
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/reports/markdown.py +23 -2
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_bracket_clock.py +2 -2
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/delegate_fixtures.py +49 -2
- coder_eval-0.12.13/tests/_fixtures/golden_streams/expected/delegate_e_tool_only_call_crosses_cap.json +112 -0
- coder_eval-0.12.13/tests/_fixtures/golden_streams/expected/delegate_f_batched_tools_in_sequence.json +150 -0
- coder_eval-0.12.13/tests/test_agent_context_window.py +152 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_delegate_agent.py +139 -9
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_delegate_agent_live.py +20 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_timing_identity_contract.py +12 -13
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_token_usage.py +135 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/uv.lock +1 -1
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/commands/coder-eval-code-review-full.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/commands/coder-eval-code-review-wf.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/commands/coder-eval-code-review.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/commands/coder-eval-create-plan.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/commands/coder-eval-implement-plan.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/commands/coder-eval-review.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/harness-candidates.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/notes/contracts.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/notes/isolation.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/notes/orchestration.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/notes/permissions.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/notes/persistence.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/notes/reporting.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/shared/axes.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/shared/multi-model-review.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/shared/review-rubric.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/shared/run-layout.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/workflows/cr-axis.js +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude/workflows/cr-parent.js +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.claude-plugin/marketplace.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.env.example +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/CODEOWNERS +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/actionlint.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/code_review.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/dependabot.yml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/pages-stub/index.html +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/scripts/diagnose_delegate_token_claims.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/scripts/harbor_e2e.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/scripts/release_notes.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/workflows/claude-pr-review.yml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/workflows/codeql.yml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/workflows/conventional-commits.yml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/workflows/docker-publish.yml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/workflows/docs.yml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/workflows/harbor-e2e.yml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/workflows/pr-checks.yml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/workflows/publish-testpypi.yml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/workflows/release.yml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.github/workflows/verify-published-action.yml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.gitignore +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.pre-commit-config.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/.python-version +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/ADOPTERS.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/CLAUDE.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/CODE_OF_CONDUCT.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/CONTRIBUTING.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/LICENSE +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/Makefile +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/NOTICE +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/README.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/SECURITY.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/comparison.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docker/Dockerfile +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docker/Dockerfile.runtime +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docker/coder_eval_entrypoint.sh +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docker/coder_eval_runtime_entrypoint.sh +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/CI_GATE.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/DATASETS.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/DIALOG_MODE.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/DOCKER_ISOLATION.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/PLUGIN.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/REPORT_SCHEMA.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/USER_GUIDE.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/agents/ANTIGRAVITY.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/agents/OPENCODE.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/agents/PI.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/assets/hero.gif +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/comparison.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/index.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/llms.txt +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/tutorials/01-first-evaluation.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/tutorials/02-ci-pipeline.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/tutorials/03-evalboard-local.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/tutorials/04-writing-a-task.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/tutorials/05-comparing-models.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/tutorials/06-use-docker-isolation.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/tutorials/07-plugin-in-claude-code.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/docs/tutorials/README.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/.gitignore +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/README.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_components/__tests__/harness-badge.test.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_components/__tests__/skeleton.test.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_components/col-help.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_components/collapsible-rail.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_components/harness-badge.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_components/harness-selector.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_components/scroll-table.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_components/search-box.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_components/skeleton.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_components/unit-toggle.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_components/version-list.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_lib/__tests__/source-param.test.ts +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_lib/source-param.ts +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_overview/__tests__/efficiency-charts.test.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_overview/daily-chart.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_overview/efficiency-charts.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_overview/harness-legend.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_overview/harness-series.ts +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_overview/tag-rail.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_overview/wall-clock-chart.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/_overview/window-summary.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/api/download/route.ts +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/api/file/route.ts +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/api/refresh/route.ts +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/error.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/globals.css +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/icon.png +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/layout.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/loading.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/page.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/path-to-ga/page.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/path-to-ga/task-table.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/scribe/page.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/scribe/run-table.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/trends/actions.ts +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/trends/page.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/trends/trends-view.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/watchlist/page.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/next-env.d.ts +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/next.config.mjs +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/package.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/pnpm-lock.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/postcss.config.mjs +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/public/harness/antigravity.png +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/public/harness/claude-code.png +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/public/harness/codex.png +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/public/harness/pi.png +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/public/uipath.png +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/tailwind.config.ts +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/tsconfig.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/vitest.config.ts +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/evalboard/vitest.setup.ts +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/experiments/default.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/experiments/early-stop-ab.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/experiments/model-comparison.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/experiments/permissions-smoke.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/experiments/plugin-comparison.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/experiments/prompt-mutations-example.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/experiments/smoke_variants.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/litellm/README.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/litellm/cost_logger.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/litellm/litellm-config.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/litellm/start-litellm.sh +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/mkdocs.yml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/osv-scanner.toml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/plugins/coder-eval/README.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/plugins/coder-eval/reference/cli-setup.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/plugins/coder-eval/reference/criteria.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/plugins/coder-eval/reference/repo-layout.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/plugins/coder-eval/reference/run-layout.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/plugins/coder-eval/reference/task-rubric.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/plugins/coder-eval/reference/templates/activation-rows.jsonl +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/plugins/coder-eval/reference/templates/activation.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/plugins/coder-eval/skills/analyze/SKILL.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/plugins/coder-eval/skills/check-skill/SKILL.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/plugins/coder-eval/skills/ci/SKILL.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/plugins/coder-eval/skills/init/SKILL.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/plugins/coder-eval/skills/lint-tasks/SKILL.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/plugins/coder-eval/skills/task/SKILL.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/scripts/check_commit_msg.sh +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/scripts/timing/corpus/README.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/scripts/timing/corpus/antigravity.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/scripts/timing/corpus/claude-code.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/scripts/timing/corpus/codex.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/scripts/timing/corpus/opencode.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/scripts/timing/corpus/pi.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/scripts/timing/decompose_run.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/.gitattributes +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/agent.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/agents/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/agents/_logging.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/agents/_skills.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/agents/antigravity_agent.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/agents/delegate/.gitignore +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/agents/delegate/package.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/agents/noop_agent.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/agents/opencode_agent.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/agents/pi_agent.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/agents/registry.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/agents/watchdog.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/analysis.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/argv_match.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/cli/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/cli/console.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/cli/evaluate_command.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/cli/evaluate_target.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/cli/execute_command.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/cli/export_command.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/cli/harbor_command.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/cli/plan_command.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/cli/report_command.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/cli/run_command.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/cli/run_helpers.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/cli/run_task_internal_command.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/cli/utils.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/config.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/agent_judge.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/base.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/classification_match.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/cli_called.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/command_executed.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/commands_efficiency.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/file_check.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/file_contains.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/file_exists.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/file_matches_regex.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/json_check.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/llm_judge.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/reference_comparison.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/run_command.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/skill_triggered.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/system_one_judge.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/criteria/uipath_eval.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/durations.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/errors/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/errors/agent.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/errors/budget.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/errors/categories.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/errors/categorization.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/errors/checker_misuse.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/errors/executor.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/errors/judge.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/errors/reference.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/errors/retry.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/errors/timeout.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/evaluation/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/evaluation/checker.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/evaluation/judge_context.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/evaluation/judge_litellm.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/evaluation/judge_models.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/evaluation/judge_persistence.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/evaluation/judge_system_one.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/evaluation/judge_usage.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/evaluation/sub_agent.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/evaluation/summaries.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/evaluation/system_one_scoring.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/evaluation/verdict_tool.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/formatting.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/fs_permissions.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/harbor/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/harbor/agent.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/harbor/agent_paths.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/harbor/atif_emit.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/harbor/atif_hydrate.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/harbor/atif_models.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/harbor/experiment_packager.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/harbor/packager.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/harbor/portability.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/harbor/reward.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/invocation_log.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/isolation/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/isolation/docker_runner.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/isolation/eval_material.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/litellm_cost.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/logging_config.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/cli_match.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/container_context.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/container_paths.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/criteria.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/enums.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/experiment.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/judge.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/judge_defaults.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/limits.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/merge_strategy.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/mutations.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/results.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/routing.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/sandbox.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/system_one.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/tasks.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/telemetry.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/models/templates.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/orchestration/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/orchestration/batch.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/orchestration/config.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/orchestration/config_merge.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/orchestration/early_stop.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/orchestration/evaluation.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/orchestration/experiment.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/orchestration/overrides.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/orchestration/regrade.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/orchestration/run_limits.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/orchestration/run_summary_rebuild.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/orchestration/task_loader.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/orchestrator.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/path_utils.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/plugins.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/py.typed +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/reports/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/reports/helpers.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/reports/junit.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/resources/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/resources/tags.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/result_metrics.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/run_record.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/sandbox.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/scoring/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/scoring/ast_similarity.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/scoring/complexity.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/scoring/quality.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/scoring/signature_similarity.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/scoring/similarity.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/scoring/token_similarity.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/simulation/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/simulation/termination.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/simulation/user_simulator.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/simulation/utterance.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/stats.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/streaming/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/streaming/callbacks.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/streaming/collector.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/streaming/events.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/streaming/renderers.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/streaming/wire.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/telemetry.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/timing.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/src/coder_eval/utils.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/README.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/agentless_smoke_test.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/agents/antigravity_hello_world.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/agents/claude_hello_world.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/agents/claude_hello_world_docker.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/agents/claude_subagent_test.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/agents/codex_hello_world.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/agents/codex_parallel_commands.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/agents/codex_skills_test.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/agents/codex_string_utils.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/agents/codex_subagent_test.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/agents/subagent_bash_long_input.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/agents/subagent_merge_sort.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/anti_cheat_reference/anti_cheat_reference.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/anti_cheat_reference/reference/solution.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/byod_smoke_test.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/dataset_example.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/datasets/sentiment.jsonl +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/delegate/fizzbuzz_delegate.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/delegate/hello_date_delegate.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/dockerfile_build_example/environment/input.txt +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/early_stop_decision_budget_exceeded.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/early_stop_weighted_high_weight_kills_run.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/early_stop_weighted_low_weight_absorbed.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/fibonacci_with_template.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/hello_date.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/inline_starter_example.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/internal/session_resumption.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/mock_path_dirs_smoke.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/opencode_smoke_test.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/pi_smoke_test.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/record_cli_responses.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/run_limits/max_turns_cap.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/run_limits/turn_timeout.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/samples/skillsbench/README.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/sentiment_classification.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/smoke_agent_judge.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/smoke_budget_exceeded.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/smoke_llm_judge.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/smoke_negative_path.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/smoke_system_one_judge.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/smoke_task_timeout.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/smoke_variants.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/test_sandbox.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tasks/token_check.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/templates/byod_smoke_test/Dockerfile +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/templates/fibonacci-starter/README.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/templates/fibonacci-starter/src/main.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/templates/fibonacci-starter/tests/test_main.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_container_contract.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/_scrub.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/antigravity_fixtures.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/antigravity_a_single_text_turn.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/antigravity_b_tool_call_resolved.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/antigravity_c_thinking_and_tool_same_generation.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/antigravity_d_orphaned_tool.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/antigravity_e_multi_generation.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/delegate_a_tool_call.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/delegate_b_max_turns_cut.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/delegate_c_error_frame_crash.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/delegate_d_orphaned_tool.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/opencode_a_single_text_turn.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/opencode_b_tool_call_resolved.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/opencode_c_multi_step_tiling.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/opencode_d_orphaned_tool.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/opencode_e_error_after_generation.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/pi_a_single_text_turn.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/pi_b_tool_call_resolved.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/pi_c_multi_turn_tiling.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/pi_d_orphaned_tool.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/pi_e_error_after_generation.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/expected/pi_f_duplicate_turn_end.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/opencode_fixtures.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/golden_streams/pi_fixtures.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/harbor_export_golden/expected/environment/Dockerfile +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/harbor_export_golden/expected/environment/docker-compose.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/harbor_export_golden/expected/environment/task.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/harbor_export_golden/expected/instruction.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/harbor_export_golden/expected/task.toml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/harbor_export_golden/expected/tests/reference/greeting.txt +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/harbor_export_golden/expected/tests/task.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/harbor_export_golden/expected/tests/test.sh +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/harbor_export_golden/source_task/environment/Dockerfile +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/harbor_export_golden/source_task/reference/greeting.txt +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/harbor_export_golden/source_task/task.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/live_criteria.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/report_snapshots/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/report_snapshots/run_full.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_fixtures/timing_union_cases.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/_path_helpers.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/conftest.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/fixtures/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/fixtures/atif/known_good_trajectory.json +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/fixtures/mock_agent.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/fixtures/pi_happy_stream.jsonl +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/fixtures/text_stub_agent.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/harbor_e2e/fixtures/docker_baseline.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/harbor_e2e/fixtures/llm_judge.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/harbor_e2e/fixtures/template_sources.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/harbor_e2e/fixtures/trajectory_criteria.yaml +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/action_docs.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/agent_roster_parity.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/dead_config_fields.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/doc_env_parity.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/doc_examples.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/doc_indexes.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/doc_schema_parity.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/generated.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/live_verdict_contract.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/plugin_manifest_parity.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/plugin_reference.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/pricing_mirror.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/prose_budget.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/pyright_config.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/__init__.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/_layers.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/_model_ctor.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/base.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce037_no_dead_private_helper.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce038_acquire_inside_try.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce039_config_error_escalates.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce043_no_command_output_truncation.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce046_env_info_spreads_super.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce048_no_in_process_typer_command_call.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce049_no_score_or_zero.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce050_no_union_getattr_probe.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce051_no_driver_override.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce052_process_lethal_must_be_container_gated.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce053_run_record_filename_literal.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce054_env_info_key_round_trip.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce056_no_container_env_literal.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce057_sidecar_shim_stdlib_only.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce058_no_timing_literal.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce059_generation_window_is_two_reads.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce060_message_id_declared.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce061_window_via_close_window.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce063_no_busy_ms_in_agents.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce064_turn_bracket_on_the_clock.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/ce066_no_report_imports_in_core.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/no_agent_timing_access.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/no_silent_except.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/no_submodule_model_imports.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/open_explicit_encoding.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/register_criterion_required.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/runner.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/violation.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/lint/workflow_outputs.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_action_inputs.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_action_version_pin.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_agent.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_agent_config_no_timing_fields.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_agent_config_optional_type.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_agent_config_registry_dispatch.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_agent_config_sdk_decoupling.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_agent_golden_master.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_agent_judge_criterion.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_agent_telemetry.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_agent_telemetry_advanced.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_agent_timeout.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_agentless.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_antigravity_agent.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_atif_emit.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_atif_hydrate.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_atif_models.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_byoa_plugin.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_byoa_plugin_live.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_byod_feature.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_check_all_async.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_checker_logging.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_classification_match.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_claude_settings_enforcement_live.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_cleanup_preservation_guard.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_cli_backend_flag.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_cli_called_criterion.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_cli_empty_glob.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_cli_match_parity.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_cli_sdk_options.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_cli_set_overrides.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_cli_telemetry.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_cli_type_flag.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_code_review_bugs.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_codex_agent.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_codex_agent_live.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_codex_agent_unit.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_codex_token_mapping.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_command_executed.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_command_statistics.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_command_telemetry_result_data.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_commands_efficiency.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_config_lineage.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_config_merge_engine.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_config_precedence.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_container_context.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_continuous_scoring.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_cost_accounting_paths.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_criterion_result_round_trip.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_custom_lint.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_dataset_expansion.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_debug_logging.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_delegate_agent_config.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_delegate_agent_registration.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_detached_grading_boundaries.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_detached_grading_guards.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_docker_build_failure.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_docker_litellm_env.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_docker_runner_container_death.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_docker_runner_mounts.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_docker_runner_stream_limit.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_docker_wildcard_env.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_docker_workdir_live.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_driver_resolver.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_durations.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_early_stop.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_error_handling.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_eval_material.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_evaluate_command.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_evaluate_format_harbor.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_evaluate_target.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_evaluator.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_event_collector.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_execute_command.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_execute_evaluate_loop.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_execute_format_harbor.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_experiment_cli.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_experiment_loader.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_experiment_models.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_experiment_reports.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_experiment_resolver.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_experiment_runner.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_file_check.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_file_contains_scoring.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_formatting.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_git_clone_failure.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_glob_paths_in_file_criteria.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_harbor_agent.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_harbor_e2e_fixtures.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_harbor_experiment_packager.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_harbor_export_golden.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_harbor_packager.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_harbor_portability.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_harbor_reward.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_heartbeat_watchdog.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_ignore_patterns_negation.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_image_from_dockerfiles.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_image_skew_refusal.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_integration.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_json_check.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_judge_anthropic.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_judge_bedrock.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_judge_burn_in_live.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_judge_context_builder.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_judge_litellm.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_judge_models.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_judge_persistence.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_judge_system_one.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_lint_no_top_level_run_limits.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_lint_runner.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_litellm_config.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_litellm_cost.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_litellm_cost_logger.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_litellm_judge_live.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_litellm_route.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_llm_judge_criterion.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_log_tail_buffer.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_logging.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_logging_isolation.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_merge_characterization.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_merge_strategy_annotations.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_merge_unification.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_models.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_mutations.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_new_criteria.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_node_env_config.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_opencode_agent.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_optional_dependencies.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_orchestrator.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_orchestrator_error_log_tail.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_orchestrator_telemetry.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_overrides_engine.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_parallel.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_path_utils.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_pi_agent.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_pi_agent_config.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_pi_smoke_task.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_plan_command.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_plugin_processing.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_plugins.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_post_run.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_pr_review_workflow.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_pre_run.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_preservation_mode.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_pricing_mirror.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_pricing_registry.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_prose_budget.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_prose_budget_commands.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_reference_comparison_scoring.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_reference_evaluator.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_reference_missing_file.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_reference_models.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_reference_permissions.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_registry.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_regrade.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_release_notes.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_replicate_stats.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_report_command.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_reports.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_reports_html.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_reports_junit.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_reports_package.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_resolve_task_files.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_result_metrics.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_resume.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_retry_logic_comprehensive.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_route_seam_exhaustiveness.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_routing.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_run_command_junit.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_run_command_stdout.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_run_helpers.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_run_limits_models.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_run_limits_orchestrator.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_run_limits_resolver.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_run_metrics.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_run_record.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_run_summary_rebuild.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_run_task_internal.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_runtime_tool_versions.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_sandbox.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_sandbox_adopt.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_sandbox_layer_builder.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_sandbox_optional.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_sandbox_record_cli.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_sandbox_security.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_sandbox_symlink_preservation.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_sandbox_templates.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_sandbox_venv_live.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_scorers.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_scoring_quality.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_sdk_option_classification.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_seed_from_prior_result.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_simulation_config.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_simulation_integration.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_simulation_termination.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_simulation_trials.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_skill_triggered.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_stats.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_stats_nonfinite.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_streaming_agent_integration.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_streaming_batch.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_streaming_callbacks.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_streaming_cli.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_streaming_events.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_streaming_orchestrator.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_streaming_renderers.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_streaming_wire.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_sub_agent_runner.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_success_criterion_union.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_suite_rollup.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_summaries.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_system_one_judge.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_system_one_judge_live.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_tags.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_task_definition_unknown_fields.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_teardown_interrupt.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_telemetry.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_template_env_expansion.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_threshold_enforcement.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_timeout_batch.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_timeout_categorization.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_timeout_exceptions.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_timeout_models.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_timeout_orchestrator.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_timing_close_window.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_timing_union_parity.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_uipath_eval.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_ungraded_reporting.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_user_simulator.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_utils.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_utterance_extraction.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_variant_prompt_file.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_verdict_tool.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_verify_published_workflow.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_watchdog.py +0 -0
- {coder_eval-0.12.12 → coder_eval-0.12.13}/tests/test_yaml_migration.py +0 -0
|
@@ -13,6 +13,7 @@ rule docstrings in `tests/lint/rules/`, then the guides under `docs/`.
|
|
|
13
13
|
## Contents
|
|
14
14
|
|
|
15
15
|
- [agents.md](agents.md) — agent adapters, the turn lifecycle, token reconciliation, harness parity
|
|
16
|
+
- [context-window.md](context-window.md) — the `agent.context_window` cap, per harness
|
|
16
17
|
- [contracts.md](contracts.md) — criteria, datasets, aggregation, judging
|
|
17
18
|
- [isolation.md](isolation.md) — the docker driver, the sandbox, detached grading
|
|
18
19
|
- [lint-rules.md](lint-rules.md) — why each CE lint rule exists
|
|
@@ -306,6 +306,15 @@ cost bills it at the input rate and the cache buckets separately.
|
|
|
306
306
|
id), and the `usage` snapshot the last resort. Cost is backfilled from the rate card
|
|
307
307
|
when a turn was timed out or killed, so there is no terminal `ResultMessage` — the
|
|
308
308
|
tokens are already captured, so this is pure pricing.
|
|
309
|
+
`model_usage` and `total_cost_usd` count the whole SESSION: a CLI resumed with
|
|
310
|
+
`resume=` restores the running totals it saved on exit, so a dialog's turn N reports
|
|
311
|
+
turns 1..N (`usage` and `num_turns` stay per-turn). `_turn_usage_slice` subtracts what
|
|
312
|
+
the same session last reported, from any ResultMessage, error or not, since the CLI
|
|
313
|
+
saves on every exit. Summing unsliced snapshots shows as a reconciliation row equal to
|
|
314
|
+
the previous turn's total (200/200 multi-turn tasks of a 2026-10-07 Haiku 5.5 run),
|
|
315
|
+
and inflates the simulator's tokens the same way. A counter that moved
|
|
316
|
+
backwards means no restore, and the snapshot is booked whole. A killed turn reports
|
|
317
|
+
nothing, so if its CLI saved totals, the next turn absorbs its usage.
|
|
309
318
|
- **Codex/OpenAI** report `input_tokens` INCLUSIVE of the cached prefix, and bill no
|
|
310
319
|
separate cache-write fee. So the fresh slice is `input - cached`, `cache_creation` is 0,
|
|
311
320
|
and `cache_read` is `cached`.
|
|
@@ -846,12 +855,29 @@ shared `agents/_skills.py` resolver: the SDK wants ONE parent directory, not a l
|
|
|
846
855
|
ran 7 steps). The adapter counts calls from the event stream and abandons the host when call N+1
|
|
847
856
|
opens; `len(turnUsages)` from the `result` then replaces the estimate as `num_turns`.
|
|
848
857
|
|
|
858
|
+
**A call opens on its first text, or on its `usage` frame when it streams none — never on a tool
|
|
859
|
+
event.** The host streams a call's text, flushes the call's `usage` frame, then runs the call's
|
|
860
|
+
tools, and it runs a batched reply's tools one at a time: `tool_call`, `tool_result`, `tool_call`,
|
|
861
|
+
`tool_result`. The adapter once opened call N+1 when every open tool had returned. With that order
|
|
862
|
+
the open set empties after each tool, so every tool counted as a call: a downstream suite saw a turn
|
|
863
|
+
with 16 round-trips and 96 tool calls cut at `max_turns: 80`. Now a `thinking` or `message` event
|
|
864
|
+
opens a call unless the open call has already streamed text, and a `usage` frame opens one only for
|
|
865
|
+
a call that streamed none. A crossing call that streams text is cut at that text, before any of its
|
|
866
|
+
tools. A tool-only crossing call is cut at its own frame, and its first tool can start before the kill:
|
|
867
|
+
the host starts a call's tools right after the frame, and the stream gives no earlier boundary. A host
|
|
868
|
+
without `usage` frames counts only the calls that stream text; such a host is below the 1.203.0 floor,
|
|
869
|
+
which is also the first release that takes the `auth` init option.
|
|
870
|
+
Only `_TurnState.on_text` / `on_tool_event` / `on_usage_frame` / `on_result` write the count, so the rule
|
|
871
|
+
lives in one place. `on_result` compares the live count with `len(turnUsages)` and warns when they
|
|
872
|
+
differ: the order is read from the 1.203.1 host and SDK source, not from a live transcript, so a host
|
|
873
|
+
release that reorders the frames shows up in the logs instead of silently moving the cap.
|
|
874
|
+
|
|
849
875
|
**A cut turn keeps the usage of its finished calls.** A turn cut by `max_turns` or a stop gets no
|
|
850
876
|
`result`, so the adapter sums the per-round-trip `usage` frames; the `result`'s total replaces the sum
|
|
851
|
-
when it arrives. Ordering (from SDK
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
877
|
+
when it arrives. Ordering (from the host and SDK source, not a live transcript): call N's `usage` frame
|
|
878
|
+
precedes every tool event of call N. A crossing call that streams text is cut at that text, so its usage
|
|
879
|
+
is dropped; a tool-only crossing call is cut at its own frame, so its usage is booked. The adapter warns
|
|
880
|
+
when a cut turn had finished calls but no usage.
|
|
855
881
|
|
|
856
882
|
**One `AssistantMessage` per `communicate()`.** `isStepStart` and `turnUsages` would allow a
|
|
857
883
|
per-round-trip split; today `isStepStart` only merges streamed deltas. `close_window` opens the one
|
|
@@ -948,8 +974,9 @@ introduced or should silently "fix" by picking one number over the other.
|
|
|
948
974
|
|
|
949
975
|
### Delegate agent golden-master coverage
|
|
950
976
|
|
|
951
|
-
`tests/_fixtures/golden_streams/delegate_fixtures.py` scripts the host's stdout frames for
|
|
952
|
-
scenarios: a tool call, a `max_turns` cut, an `error`-frame crash
|
|
977
|
+
`tests/_fixtures/golden_streams/delegate_fixtures.py` scripts the host's stdout frames for six
|
|
978
|
+
scenarios: a tool call, a `max_turns` cut, an `error`-frame crash, an orphaned tool, a tool-only call
|
|
979
|
+
that crosses the cap, and a batched reply whose tools run one at a time. The `event`,
|
|
953
980
|
`result` and `error` frames mirror the live `1.202.1` transcript. The `usage` frame and the `result`
|
|
954
981
|
fields new in `1.203.0` follow the host source of UiPath/Autopilot#6656 (`src/usage.ts` and
|
|
955
982
|
`handleSend`): every usage object carries all four buckets with `input_tokens` exclusive of cache,
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# Capping the agent's context window
|
|
2
|
+
|
|
3
|
+
Analysis and design for `agent.context_window`: one harness-neutral field that caps the
|
|
4
|
+
context window an agent works within, set per agent config or per experiment variant.
|
|
5
|
+
|
|
6
|
+
## Problem and evidence
|
|
7
|
+
|
|
8
|
+
A benchmark of Claude Code on Sonnet 5 (Bedrock, 1M-token window) let runs grow to
|
|
9
|
+
250k-480k tokens of context. Above about 150k tokens each extended-thinking step got
|
|
10
|
+
about 10x slower, so most runs hit the 2-hour task limit. The operator wants to measure
|
|
11
|
+
pass rate and cost at several context caps, for example one variant at 200k and one at
|
|
12
|
+
400k, on the same tasks.
|
|
13
|
+
|
|
14
|
+
Before this change no harness-neutral way existed:
|
|
15
|
+
|
|
16
|
+
- **claude-code**: `claude_settings` (`--settings`) could carry `autoCompactWindow`. That
|
|
17
|
+
works for one harness only, and when `claude_settings` is a file path a variant cannot
|
|
18
|
+
merge one key into it.
|
|
19
|
+
- **codex**: `CodexAgentConfig` has no pass-through. `CodexAgent._build_thread_options`
|
|
20
|
+
builds the thread `config` dict itself, so no value reached Codex.
|
|
21
|
+
- **antigravity, opencode, pi, delegate**: no knob is wired.
|
|
22
|
+
|
|
23
|
+
## How each harness controls its window
|
|
24
|
+
|
|
25
|
+
### claude-code
|
|
26
|
+
|
|
27
|
+
Verified in the CLI the SDK spawns. `claude-agent-sdk` runs its **bundled** CLI before it
|
|
28
|
+
looks for `claude` on `PATH` (`SubprocessCLITransport._find_cli`), so the CLI that runs is
|
|
29
|
+
the one the SDK wheel bundles, not the one the agent image installs with npm:
|
|
30
|
+
|
|
31
|
+
| coder_eval | claude-agent-sdk (uv.lock) | bundled CLI | image npm CLI |
|
|
32
|
+
|---|---|---|---|
|
|
33
|
+
| 0.12.1 | 0.2.124 | 2.1.216 | 2.1.177 |
|
|
34
|
+
| 0.12.12 | 0.2.159 | 2.1.281 | 2.1.281 |
|
|
35
|
+
|
|
36
|
+
`environment_info.claude_code_cli` records `claude -v` from `PATH`, so a 0.12.1 run
|
|
37
|
+
records 2.1.177 while 2.1.216 ran. That is a separate defect and is not fixed here.
|
|
38
|
+
|
|
39
|
+
Three inputs set the auto-compact window. Both bundled CLIs (2.1.216 and 2.1.281) contain
|
|
40
|
+
the same resolution function. The highest precedence comes first:
|
|
41
|
+
|
|
42
|
+
1. `CLAUDE_CODE_AUTO_COMPACT_WINDOW` environment variable: a plain token count. It
|
|
43
|
+
outranks the flag and every settings scope.
|
|
44
|
+
2. `--autocompact <auto|tokens>`: added in 2.1.221 (CLI reference). It is absent from
|
|
45
|
+
2.1.216 as a parsed option.
|
|
46
|
+
3. `autoCompactWindow` settings key. The settings schema is
|
|
47
|
+
`int().min(100000).max(1000000).optional().catch(undefined)`, so an out-of-range
|
|
48
|
+
value is **silently dropped**.
|
|
49
|
+
|
|
50
|
+
The effective window is `min(model context window, configured value)`. Auto-compaction
|
|
51
|
+
starts when the context approaches that window.
|
|
52
|
+
|
|
53
|
+
### codex
|
|
54
|
+
|
|
55
|
+
Verified in the `openai-codex-cli-bin` 0.156.1 binary (the pin) and its source at tag
|
|
56
|
+
`rust-v0.156.1`:
|
|
57
|
+
|
|
58
|
+
- `model_context_window` ("Size of the context window for the model, in tokens"):
|
|
59
|
+
`with_config_overrides` sets the model's `context_window` to
|
|
60
|
+
`min(value, max_context_window)`. Three things follow from it. The default
|
|
61
|
+
auto-compact limit becomes 90% of it. The hard cap, which forces compaction, becomes
|
|
62
|
+
`context_window * effective_context_window_percent / 100`. The remaining-window figure
|
|
63
|
+
the model is shown also changes.
|
|
64
|
+
- `model_auto_compact_token_limit` ("Token usage threshold triggering auto-compaction"):
|
|
65
|
+
the trigger only, clamped to 90% of the resolved window. It does not change the window.
|
|
66
|
+
- `model_auto_compact_token_limit_scope` (`total` by default, or `body_after_prefix`) and
|
|
67
|
+
`model_post_turn_compact_threshold_percent` (turn-end compaction, off by default) tune
|
|
68
|
+
when compaction starts. They are not caps.
|
|
69
|
+
|
|
70
|
+
The thread `config` dict `thread_start` takes is the same override surface that
|
|
71
|
+
coder_eval already uses for `enabled_tools` and `model_providers`.
|
|
72
|
+
|
|
73
|
+
### antigravity, opencode, pi, delegate
|
|
74
|
+
|
|
75
|
+
None of them has a context-window knob wired in coder_eval. They are out of scope, and
|
|
76
|
+
they reject the field.
|
|
77
|
+
|
|
78
|
+
## Options considered
|
|
79
|
+
|
|
80
|
+
**Per-harness pass-through** (a Codex `config` pass-through next to `claude_settings`).
|
|
81
|
+
It is flexible, but a variant would have to name a different key per harness, and the
|
|
82
|
+
recorded value would mean something different on each. It also opens a free-form
|
|
83
|
+
pass-through on Codex with no denylist. Rejected.
|
|
84
|
+
|
|
85
|
+
**A field under `run_limits`.** Run limits are caps that the orchestrator or the agent
|
|
86
|
+
enforces on a run (turns, time, tokens, USD), and the parity table lists them. A context
|
|
87
|
+
window is not a spend cap. It is a harness setting that changes what the agent does, and
|
|
88
|
+
it depends on the agent type, which `run_limits` does not know. The guide also says that
|
|
89
|
+
`agent:` holds no run-time caps. Rejected.
|
|
90
|
+
|
|
91
|
+
**A field on the agent config.** One name, accepted on a type-less config so that
|
|
92
|
+
experiment defaults and variants can set it, and validated against the concrete type
|
|
93
|
+
when the config resolves. **Chosen.**
|
|
94
|
+
|
|
95
|
+
Naming: `context_window`, in tokens. It names the quantity the operator caps, matches
|
|
96
|
+
Codex's `model_context_window`, and avoids "auto-compact", which describes a mechanism of
|
|
97
|
+
one harness. `max_context_tokens` was considered, but it reads as a per-request input
|
|
98
|
+
limit, which neither harness enforces.
|
|
99
|
+
|
|
100
|
+
## Recommended design
|
|
101
|
+
|
|
102
|
+
`BaseAgentConfig.context_window: int | None` (default `None`, `gt=0`).
|
|
103
|
+
|
|
104
|
+
- Each config class declares `_context_window_range: ClassVar[tuple[int, int | None] |
|
|
105
|
+
None]`. `None` (the base default) means that the harness cannot apply the field.
|
|
106
|
+
`ClaudeCodeAgentConfig` declares `(100_000, 1_000_000)` and `CodexAgentConfig` declares
|
|
107
|
+
`(32_768, None)`.
|
|
108
|
+
- `check_context_window_supported` (model validator) rejects an unsupported type or an
|
|
109
|
+
out-of-range value as soon as the type is known. A plugin agent inherits `None`, so it
|
|
110
|
+
also rejects the field until it opts in.
|
|
111
|
+
- The field uses the default `replace` merge strategy. It is set at any of the five
|
|
112
|
+
layers, and with `-D agent.context_window=N`.
|
|
113
|
+
|
|
114
|
+
Per-harness mapping:
|
|
115
|
+
|
|
116
|
+
- **claude-code**: `CLAUDE_CODE_AUTO_COMPACT_WINDOW=<N>` in the SDK `env`. The
|
|
117
|
+
environment variable was chosen over the settings key and the flag for four reasons.
|
|
118
|
+
It has the highest precedence, so host, project and `claude_settings` values cannot
|
|
119
|
+
override the cap. It works whether `claude_settings` is a dict or a file path. Both
|
|
120
|
+
bundled CLIs read it, which the flag does not. `extra_args` stays framework-owned.
|
|
121
|
+
`claude_settings.autoCompactWindow` together with `context_window` is a load error,
|
|
122
|
+
because the environment variable would silently override it.
|
|
123
|
+
- **codex**: `model_context_window: <N>` in the thread `config`. No trigger key is set,
|
|
124
|
+
so Codex compacts at its default 90% of the window.
|
|
125
|
+
|
|
126
|
+
## Validation
|
|
127
|
+
|
|
128
|
+
- `gt=0` on every config, so a type-less config rejects nonsense as well.
|
|
129
|
+
- claude-code: 100000-1000000, the CLI's documented range. Outside that range the CLI
|
|
130
|
+
drops a settings value silently, so coder_eval enforces the range itself.
|
|
131
|
+
- codex: 32768 and up. Codex clamps the value to the model's catalog maximum, and the
|
|
132
|
+
floor rejects a window too small to work in, such as a YAML `yes` coerced to 1.
|
|
133
|
+
- every other type: rejected at load, naming the supported types. A variant that
|
|
134
|
+
switches `type` to an unsupported harness fails when the experiment resolves.
|
|
135
|
+
|
|
136
|
+
## Recording
|
|
137
|
+
|
|
138
|
+
The resolved agent config is persisted as `agent_config` on every task row (`run.json`
|
|
139
|
+
and `task.json`). `agent.context_window` therefore appears per task, and config lineage
|
|
140
|
+
records which layer set it (for example, the variant). The experiment report groups by
|
|
141
|
+
variant, so a cap per variant groups without new report code. On claude-code the
|
|
142
|
+
`sdk_options` dump also shows the environment variable in `env`.
|
|
143
|
+
|
|
144
|
+
## Open questions
|
|
145
|
+
|
|
146
|
+
- **A silent clamp to the model's window.** Neither harness reports that the model's
|
|
147
|
+
window lowered the cap. A cap above the model's window runs at the model's window.
|
|
148
|
+
Recording the effective window would need a per-model catalog in coder_eval.
|
|
149
|
+
- **Trigger points differ.** Codex compacts at 90% of the window. Claude Code compacts
|
|
150
|
+
when the context approaches the window, minus an internal buffer. Equal caps therefore
|
|
151
|
+
do not compact at exactly the same token count. A separate harness-neutral trigger
|
|
152
|
+
field is possible, but it is not added until a benchmark needs it.
|
|
153
|
+
- **A host `CLAUDE_CODE_AUTO_COMPACT_WINDOW` and uncapped runs.** Decided: the SDK starts
|
|
154
|
+
the CLI with `os.environ` underneath `options.env`, so when the field is unset the
|
|
155
|
+
claude-code agent blanks a host value. A run recorded as uncapped is never capped by
|
|
156
|
+
the host. This changes every claude-code run on a host that sets the variable,
|
|
157
|
+
including runs that never set `context_window`. Codex has no equivalent: an unset
|
|
158
|
+
field leaves a host `model_context_window` in `$CODEX_HOME/config.toml` in effect.
|
|
159
|
+
- **The recorded CLI version is wrong.** See the version table above:
|
|
160
|
+
`environment_info.claude_code_cli` should record the bundled CLI version.
|
|
161
|
+
- **Other harnesses.** Pi can lower a model's window with
|
|
162
|
+
`providers.<provider>.modelOverrides.<model>.contextWindow` in `models.json`. A mapping
|
|
163
|
+
was written and then reverted (d1757a60), because no live run backed it and no task
|
|
164
|
+
uses `type: pi`; it comes back with a live test. OpenCode (`limit.context` and
|
|
165
|
+
`limit.input` in provider config) needs a `limit.output` coder_eval does not know, and
|
|
166
|
+
an unpinned CLI. Antigravity's `CompactionConfig(token_threshold=N)` only moves the
|
|
167
|
+
trigger. Delegate keeps its history in the backend. Each needs its own verification
|
|
168
|
+
before it opts in.
|
|
169
|
+
- **How often a run compacted is not recorded.** A cap A/B cannot yet tell "cap never
|
|
170
|
+
reached" from "compacted N times" from the task row alone.
|
|
@@ -845,7 +845,7 @@ assertion for each. A defaulted `AgentStartEvent` lands ~365 days before the clo
|
|
|
845
845
|
first window, so the head blows any sane UPPER bound by the whole offset. A defaulted
|
|
846
846
|
`AgentEndEvent` lands ~365 days BEFORE its own last message, so `decompose_turn` clamps the
|
|
847
847
|
negative to `0.0` — "measured, and instant", which passes an upper bound. Only a strict
|
|
848
|
-
`> 0.0` catches it. It holds on
|
|
848
|
+
`> 0.0` catches it. It holds on every clocked harness because real work separates a
|
|
849
849
|
turn's last flush from its end event. The margin is smallest on antigravity, which holds
|
|
850
850
|
its process across turns: it measures 0.007-0.035 ms there, 7-35 ticks of the 1 us
|
|
851
851
|
resolution that both `datetime` and `time.monotonic()` have on Linux, macOS and Windows.
|
|
@@ -16,6 +16,11 @@ removes:
|
|
|
16
16
|
transition or an NTP step inside a turn lands directly in a generation window — an
|
|
17
17
|
hour-long jump in a millisecond field. Nightly runs start at 04:18 and run for hours,
|
|
18
18
|
so it is reachable rather than theoretical. A monotonic-derived stamp cannot express it.
|
|
19
|
+
- Delegate stamped its one window and its tool spans with raw `datetime.now()` but measured
|
|
20
|
+
`duration_seconds` with `time.monotonic()`. On Windows the wall clock moved 0.24-0.37 ms
|
|
21
|
+
further than the monotonic one inside a sub-millisecond turn, so the tail alone came out
|
|
22
|
+
longer than the whole turn and `test_delegate_golden[a_tool_call]` failed at random. One
|
|
23
|
+
window has no inter-window drift to correct, but it still shares the turn's duration.
|
|
19
24
|
|
|
20
25
|
It is an EXTRACTION, not an invention: antigravity already captured this exact pair at
|
|
21
26
|
the top of `communicate` and simply did not use it for later stamps.
|
|
@@ -205,7 +210,7 @@ Magnitudes are only real where a scripted clock makes them real, so each case dr
|
|
|
205
210
|
harness's own reducer with a hand-moved clock and feeds its output through a real
|
|
206
211
|
`EventCollector`, the seam production uses to compute the head and the tail. The module
|
|
207
212
|
reuses the three clock-injection idioms the per-harness suites already use rather than
|
|
208
|
-
inventing a fourth: an injected `TurnClock` stand-in (pi, antigravity, claude-code), a
|
|
213
|
+
inventing a fourth: an injected `TurnClock` stand-in (pi, antigravity, claude-code, delegate), a
|
|
209
214
|
`datetime` subclass patched onto the module (opencode), and scripted SDK epoch-millisecond
|
|
210
215
|
stamps (codex). OpenCode needs a `datetime` SUBCLASS rather than a stub because the
|
|
211
216
|
reducer also calls `datetime.fromtimestamp` through the same module global to convert the
|
|
@@ -2,6 +2,65 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- version list -->
|
|
4
4
|
|
|
5
|
+
## v0.12.13 (2026-10-13)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
- **agent**: Address the context_window review
|
|
10
|
+
([#219](https://github.com/UiPath/coder_eval/pull/219),
|
|
11
|
+
[`ae02485`](https://github.com/UiPath/coder_eval/commit/ae02485a7a21944e2ee15a0f72131def5f2e425a))
|
|
12
|
+
|
|
13
|
+
- **agents**: Count Delegate batched tool calls once under max_turns and stamp turns off one
|
|
14
|
+
TurnClock ([#222](https://github.com/UiPath/coder_eval/pull/222),
|
|
15
|
+
[`db2067e`](https://github.com/UiPath/coder_eval/commit/db2067e94e458796c10cfe5f2b0c0383a3c8db03))
|
|
16
|
+
|
|
17
|
+
- **claude-code**: Book only the turn's own usage on a resumed session
|
|
18
|
+
([#221](https://github.com/UiPath/coder_eval/pull/221),
|
|
19
|
+
[`c9456e5`](https://github.com/UiPath/coder_eval/commit/c9456e58b49174c29f48577507f249eb9e98a94b))
|
|
20
|
+
|
|
21
|
+
- **delegate**: Count a batched reply's tools as one model call under max_turns
|
|
22
|
+
([#222](https://github.com/UiPath/coder_eval/pull/222),
|
|
23
|
+
[`db2067e`](https://github.com/UiPath/coder_eval/commit/db2067e94e458796c10cfe5f2b0c0383a3c8db03))
|
|
24
|
+
|
|
25
|
+
- **delegate**: Keep the max_turns count in one place and warn when it drifts
|
|
26
|
+
([#222](https://github.com/UiPath/coder_eval/pull/222),
|
|
27
|
+
[`db2067e`](https://github.com/UiPath/coder_eval/commit/db2067e94e458796c10cfe5f2b0c0383a3c8db03))
|
|
28
|
+
|
|
29
|
+
- **delegate**: Stamp the whole turn off one TurnClock
|
|
30
|
+
([#222](https://github.com/UiPath/coder_eval/pull/222),
|
|
31
|
+
[`db2067e`](https://github.com/UiPath/coder_eval/commit/db2067e94e458796c10cfe5f2b0c0383a3c8db03))
|
|
32
|
+
|
|
33
|
+
- **pricing**: Add Haiku 5.5, Sonnet 5.5 and GPT-6.1 Sol, re-verify every row
|
|
34
|
+
([#220](https://github.com/UiPath/coder_eval/pull/220),
|
|
35
|
+
[`b3ae960`](https://github.com/UiPath/coder_eval/commit/b3ae96033d32f3e88bff68a15219e85372762220))
|
|
36
|
+
|
|
37
|
+
### Chores
|
|
38
|
+
|
|
39
|
+
- **no-mistakes/document**: Name Delegate among the TurnClock harnesses in timing docs
|
|
40
|
+
([#222](https://github.com/UiPath/coder_eval/pull/222),
|
|
41
|
+
[`db2067e`](https://github.com/UiPath/coder_eval/commit/db2067e94e458796c10cfe5f2b0c0383a3c8db03))
|
|
42
|
+
|
|
43
|
+
### Documentation
|
|
44
|
+
|
|
45
|
+
- **delegate**: Count the six Delegate golden-master scenarios in the notes
|
|
46
|
+
([#222](https://github.com/UiPath/coder_eval/pull/222),
|
|
47
|
+
[`db2067e`](https://github.com/UiPath/coder_eval/commit/db2067e94e458796c10cfe5f2b0c0383a3c8db03))
|
|
48
|
+
|
|
49
|
+
- **delegate**: Document the tool-only cut race and relax the live test count
|
|
50
|
+
([#222](https://github.com/UiPath/coder_eval/pull/222),
|
|
51
|
+
[`db2067e`](https://github.com/UiPath/coder_eval/commit/db2067e94e458796c10cfe5f2b0c0383a3c8db03))
|
|
52
|
+
|
|
53
|
+
### Features
|
|
54
|
+
|
|
55
|
+
- **agent**: Cap Pi's context window with agent.context_window
|
|
56
|
+
([#219](https://github.com/UiPath/coder_eval/pull/219),
|
|
57
|
+
[`ae02485`](https://github.com/UiPath/coder_eval/commit/ae02485a7a21944e2ee15a0f72131def5f2e425a))
|
|
58
|
+
|
|
59
|
+
- **agent**: Cap the agent's context window with agent.context_window
|
|
60
|
+
([#219](https://github.com/UiPath/coder_eval/pull/219),
|
|
61
|
+
[`ae02485`](https://github.com/UiPath/coder_eval/commit/ae02485a7a21944e2ee15a0f72131def5f2e425a))
|
|
62
|
+
|
|
63
|
+
|
|
5
64
|
## v0.12.12 (2026-10-06)
|
|
6
65
|
|
|
7
66
|
### 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.13
|
|
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.13" # <-- 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
|
|
@@ -23,6 +23,7 @@ to the orchestrator are involved.
|
|
|
23
23
|
- [What a Variant Can Override](#what-a-variant-can-override)
|
|
24
24
|
- [Recipe: A/B a Skill](#recipe-ab-a-skill)
|
|
25
25
|
- [Recipe: A/B a Model](#recipe-ab-a-model)
|
|
26
|
+
- [Recipe: A/B a Context Window](#recipe-ab-a-context-window)
|
|
26
27
|
- [Recipe: A/B a Prompt](#recipe-ab-a-prompt)
|
|
27
28
|
- [Recipe: Smoke vs. e2e Flavors (Early Stop)](#recipe-smoke-vs-e2e-flavors-early-stop)
|
|
28
29
|
- [Replicates (Statistical Power)](#replicates-statistical-power)
|
|
@@ -222,6 +223,28 @@ variants:
|
|
|
222
223
|
agent: { model: claude-opus-5 }
|
|
223
224
|
```
|
|
224
225
|
|
|
226
|
+
## Recipe: A/B a Context Window
|
|
227
|
+
|
|
228
|
+
`agent.context_window` caps the context the agent works within, in tokens: the
|
|
229
|
+
harness compacts the conversation before it outgrows the cap. Use it to measure
|
|
230
|
+
pass rate and cost against the cap on a model with a large window. Each task row
|
|
231
|
+
records the cap in `agent_config.context_window`.
|
|
232
|
+
|
|
233
|
+
```yaml
|
|
234
|
+
experiment_id: context-window
|
|
235
|
+
description: "The same model with a 200k and a 400k context cap"
|
|
236
|
+
|
|
237
|
+
variants:
|
|
238
|
+
- variant_id: cap-200k
|
|
239
|
+
agent: { context_window: 200000 }
|
|
240
|
+
- variant_id: cap-400k
|
|
241
|
+
agent: { context_window: 400000 }
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
An agent type that cannot apply the cap fails the experiment at load.
|
|
245
|
+
[Run-Limit Parity](agents/HARNESS_PARITY.md#the-context-window-cap-per-harness) lists which
|
|
246
|
+
agent types accept it and what the cap does on each.
|
|
247
|
+
|
|
225
248
|
## Recipe: A/B a Prompt
|
|
226
249
|
|
|
227
250
|
Use `prompt_mutations` (transform the task prompt) or `initial_prompt` /
|
|
@@ -80,6 +80,22 @@ class MyAgentConfig(BaseAgentConfig):
|
|
|
80
80
|
The factory `create_agent(kind, config, …)` raises `TypeError` if the passed config
|
|
81
81
|
isn't an instance of the registered `config_class`, so keep them paired.
|
|
82
82
|
|
|
83
|
+
To accept `agent.context_window`, declare the inclusive range of tokens your harness
|
|
84
|
+
can cap its context window to, and apply `self.config.context_window` when the agent
|
|
85
|
+
starts. A config class that declares nothing rejects the field at load, which is the
|
|
86
|
+
right default: a capped variant must never run uncapped.
|
|
87
|
+
|
|
88
|
+
```python
|
|
89
|
+
from typing import ClassVar
|
|
90
|
+
|
|
91
|
+
class MyAgentConfig(BaseAgentConfig):
|
|
92
|
+
type: Literal["my-agent"] = "my-agent"
|
|
93
|
+
_context_window_range: ClassVar[tuple[int, int | None] | None] = (32_768, None)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Add your harness to the table in
|
|
97
|
+
[Run-Limit Parity](agents/HARNESS_PARITY.md#the-context-window-cap-per-harness).
|
|
98
|
+
|
|
83
99
|
### The `Agent` ABC — implementation checklist
|
|
84
100
|
|
|
85
101
|
Implement these three abstract methods:
|
|
@@ -170,6 +170,7 @@ agent:
|
|
|
170
170
|
- "Write"
|
|
171
171
|
- "Bash"
|
|
172
172
|
model: "claude-sonnet-5" # Optional: specific model
|
|
173
|
+
context_window: 200000 # Optional: cap the context window, in tokens (claude-code, codex)
|
|
173
174
|
sdk_options: # Optional: agent SDK pass-through (keys depend on `type`)
|
|
174
175
|
effort: high # claude-code: any non-framework-managed ClaudeAgentOptions field
|
|
175
176
|
```
|
|
@@ -188,6 +189,13 @@ validates its own keys at YAML load:
|
|
|
188
189
|
Deep-merged across the 5-layer config chain. Override via CLI with the
|
|
189
190
|
repeatable `-D agent.sdk_options.KEY=VALUE`.
|
|
190
191
|
|
|
192
|
+
**`context_window`** caps the context window the agent works within, in tokens: the
|
|
193
|
+
harness compacts the conversation before it outgrows the cap, and never runs past the
|
|
194
|
+
model's own window. Override via CLI with `-D agent.context_window=400000`. Which agent
|
|
195
|
+
types accept it, in what range, what each does with it and what an unset value means:
|
|
196
|
+
[Run-Limit Parity](agents/HARNESS_PARITY.md#the-context-window-cap-per-harness). An agent
|
|
197
|
+
type that cannot apply it rejects it at load.
|
|
198
|
+
|
|
191
199
|
**Permission Modes:**
|
|
192
200
|
- `default` — Default permission handling
|
|
193
201
|
- `acceptEdits` — Auto-accept file edits (recommended for evaluations)
|
|
@@ -104,6 +104,7 @@ agent:
|
|
|
104
104
|
| `system_prompt_file` | `str \| null` | Path (relative to the task YAML) loaded into `system_prompt` at resolution. Works with either `system_prompt_mode`. |
|
|
105
105
|
| `setting_sources` | `list["user"\|"project"\|"local"] \| null` | Which host setting sources the SDK reads. Default resolves to `["project"]`. See [Sandbox isolation](#sandbox-isolation). |
|
|
106
106
|
| `claude_settings` | `str \| dict \| null` | Passed to the SDK `--settings`. A dict is JSON-serialized; a str is a settings file path. Use `permissions.deny` to block tools/paths. |
|
|
107
|
+
| `context_window` | `int \| null` (100000-1000000) | Auto-compact window, in tokens, sent as `CLAUDE_CODE_AUTO_COMPACT_WINDOW`. It outranks `--autocompact` and every settings scope, and is capped to the model's window. Setting `claude_settings.autoCompactWindow` too is a load error. See [Harness parity](HARNESS_PARITY.md#the-context-window-cap-per-harness). |
|
|
107
108
|
| `sdk_options` | `dict` (default `{}`) | Pass-through for `ClaudeAgentOptions` fields Coder Eval doesn't own (e.g. `effort`). Validated at load — an unknown or framework-owned key is a hard error. |
|
|
108
109
|
| `ignore_patterns` | `list[str] \| null` | Gitignore-style overrides for the workspace copy used by judge sub-agents (supports `!` negation). |
|
|
109
110
|
|
|
@@ -212,9 +213,11 @@ resolution for any agent that does not declare `supports_cooperative_stop`. See
|
|
|
212
213
|
|
|
213
214
|
Claude Code produces the richest telemetry of the agents:
|
|
214
215
|
|
|
215
|
-
- **Authoritative billing** comes from the SDK's
|
|
216
|
+
- **Authoritative billing** comes from the SDK's `model_usage` on the
|
|
216
217
|
terminal result message and reconciles to `total_cost_usd` — this already includes
|
|
217
|
-
sub-agent consumption that the per-message stream under-reports.
|
|
218
|
+
sub-agent consumption that the per-message stream under-reports. Both count the
|
|
219
|
+
whole session, so a resumed turn books only what changed since the session's
|
|
220
|
+
previous result message.
|
|
218
221
|
- **Sub-agent accounting** is derived by grouping `parent_tool_use_id`-tagged
|
|
219
222
|
assistant messages; there is no separate per-sub-agent field. The terminal
|
|
220
223
|
sub-agent generation (delivered as the Agent tool result, never streamed) is
|
|
@@ -192,6 +192,13 @@ The agent maps `permission_mode` to the Codex SDK's `Sandbox`. The approval mode
|
|
|
192
192
|
|
|
193
193
|
`allowed_tools` / `disallowed_tools` are normalized (`Bash` → `shell`, `Write`/`Edit` → `apply_patch`, etc.) and passed as `enabled_tools` / `disabled_tools` in the thread `config`. **Note:** the Codex SDK does not currently enforce `disabled_tools`; do not rely on it as a security boundary (the agent logs a warning when it is set).
|
|
194
194
|
|
|
195
|
+
### Context Window
|
|
196
|
+
|
|
197
|
+
`agent.context_window` is passed as `model_context_window` in the thread `config`. Codex
|
|
198
|
+
uses it as the model's context window, capped to the model's catalog maximum, and
|
|
199
|
+
auto-compacts at 90% of it. See
|
|
200
|
+
[Harness parity](HARNESS_PARITY.md#the-context-window-cap-per-harness).
|
|
201
|
+
|
|
195
202
|
### Skills Discovery
|
|
196
203
|
|
|
197
204
|
The agent sets up SKILL.md files (Agent Skills open standard) in `.agents/skills/` directory:
|
|
@@ -168,8 +168,8 @@ Run-limit semantics per harness: [Run-Limit Parity](HARNESS_PARITY.md).
|
|
|
168
168
|
## Known Limitations
|
|
169
169
|
|
|
170
170
|
1. **No multi-generation transcript splitting.** This agent builds one `AssistantMessage` per `communicate()` call, not one per backend round-trip. The host does send the signals a split needs (`isStepStart` on `message` events and per-round-trip `turnUsages` on `result`), but this agent does not use them yet.
|
|
171
|
-
2. **`max_turns` is enforced by coder_eval, not by the host.** The host's `maxSteps` option on `send` does not stop the turn (confirmed live: `maxSteps: 2` ran 7 steps and only reported `maxStepsReached: true`), so this agent does not send it. See [Run-Limit Parity](HARNESS_PARITY.md).
|
|
172
|
-
A turn cut at `max_turns`, or by a cooperative early stop, keeps the token usage and cost of every model call that finished before the cut, as on the other agents. The host sends a `usage` frame for each call before that call's tool results.
|
|
171
|
+
2. **`max_turns` is enforced by coder_eval, not by the host.** The host's `maxSteps` option on `send` does not stop the turn (confirmed live: `maxSteps: 2` ran 7 steps and only reported `maxStepsReached: true`), so this agent does not send it. It counts a call on the call's first streamed text, or on its `usage` frame when the call streams none. The host runs a batched reply's tools one at a time, so tool events do not mark a call. See [Run-Limit Parity](HARNESS_PARITY.md).
|
|
172
|
+
A turn cut at `max_turns`, or by a cooperative early stop, keeps the token usage and cost of every model call that finished before the cut, as on the other agents. The host sends a `usage` frame for each call before that call's tool results. Which side of the cut the crossing call lands on depends on its shape. A call that streams text is cut at that text, before its `usage` frame and before any of its tools, so its usage is dropped. A tool-only call is cut at its own `usage` frame, so its usage is booked, and its first tool can start before the kill: the host starts a call's tools right after the frame, and the stream gives no earlier boundary. When the `result` arrives, the agent compares its own call count with the host's `turnUsages` and logs a warning if they differ, because a change in the host's frame order would move the cap. A host that does not send `usage` frames reports usage only on its final `result` frame, which a cut turn never gets: that turn has no usage, and the agent logs a warning.
|
|
173
173
|
3. **Only three backend failures get a specific diagnosis.** A Cloudflare WAF block page is reported as a content-filter failure and is not retried: the same prompt or tool result is blocked again. An SSE connect timeout is reported as a connection failure and is retried. A session conflict ("A reply is already being generated") is retried in a new conversation when no turn of that conversation has finished. After a finished turn, or with a `session_id` set in the config, the retry stays in the same conversation, so the agent never continues without its earlier turns: the retry succeeds once the backend releases the conversation (it stops the reply when the host disconnects), or the task ends as an error. There is no first-response stall detection: a stalled turn ends at its turn timeout. Every other crash ends the turn as an `AgentCrashError`, which is retried unless its message matches a category that is not retried (a timeout, or an auth, billing or content-filter error).
|
|
174
174
|
4. **`sdk_options` accepts only `effort`.** Reasoning effort uses the same `sdk_options.effort` key as Claude Code, so `-D agent.sdk_options.effort=high` works for both agents. Any other key, or an `effort` that is not a string, is a validation error. The host checks the tier itself: it logs a tier it does not recognize and uses the model's default. `project_id`, `session_id` and `enable_computer_use` are typed config fields.
|
|
175
175
|
5. **`enable_computer_use: true` requires local permissions and is unavailable on Linux.** macOS needs Accessibility + Screen Recording grants; the SDK throws unconditionally on Linux when this is enabled.
|
|
@@ -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` (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
|
|
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 on its first streamed text, or on its `usage` frame when it streams none; a tool-only call N+1's first tool can start before the kill |
|
|
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 |
|
|
@@ -34,8 +34,8 @@ wall clock its numbers account for.
|
|
|
34
34
|
| `generation_completed_at` | set | `None` — see below | `None` | `None` | `None` | set |
|
|
35
35
|
| `message_id` source | SDK `message_id`; `None` when the stream carries none; `subagent-<tool_use_id>` for a synthesized sub-agent terminal | synthetic `turn_id-msg-N`, shared across the sub-messages of one generation; `turn_id-subagent-N` for recovered sub-agent generations | synthetic `turn_id-msg-N`, one per generation | CLI `messageID`; `None` when absent | CLI `responseId`; `None` when absent | synthetic `<turn_id>-msg-0` (exactly one per turn) |
|
|
36
36
|
| `Σ generation + ∪ tool + head + tail ≈ turn duration` | yes [^identity] | yes [^identity] | yes [^identity] | yes [^identity] | yes [^identity] | yes, trivially — one window IS the turn |
|
|
37
|
-
| clock basis for recorded stamps | one `TurnClock` per turn | SDK epoch ms (`_ms_to_dt`) — the subprocess's own clock, unreachable from the host, for BOTH window bounds and tool spans | one `TurnClock` per turn | **MIXED**: window bounds on the host `datetime.now()` (`:362`, `:696`); tool spans on CLI epoch ms (`_epoch_ms_to_dt`, `:406`/`:462`) | one `TurnClock` per turn | raw `datetime.now()`
|
|
38
|
-
| turn bracket (`AgentStartEvent` / `AgentEndEvent`) stamp | the same `TurnClock` (**CE064**) | raw `datetime.now()` — consistent with its epoch-ms bounds | the same `TurnClock` (**CE064**) | raw `datetime.now()` — consistent with its epoch-ms tool spans | the same `TurnClock` (**CE064**) |
|
|
37
|
+
| clock basis for recorded stamps | one `TurnClock` per turn | SDK epoch ms (`_ms_to_dt`) — the subprocess's own clock, unreachable from the host, for BOTH window bounds and tool spans | one `TurnClock` per turn | **MIXED**: window bounds on the host `datetime.now()` (`:362`, `:696`); tool spans on CLI epoch ms (`_epoch_ms_to_dt`, `:406`/`:462`) | one `TurnClock` per turn | one `TurnClock` per turn (its raw `datetime.now()` bounds drifted from the monotonic `duration_seconds` on Windows and put the tail past the whole turn) |
|
|
38
|
+
| turn bracket (`AgentStartEvent` / `AgentEndEvent`) stamp | the same `TurnClock` (**CE064**) | raw `datetime.now()` — consistent with its epoch-ms bounds | the same `TurnClock` (**CE064**) | raw `datetime.now()` — consistent with its epoch-ms tool spans | the same `TurnClock` (**CE064**) | the same `TurnClock` (**CE064**) |
|
|
39
39
|
| window built by `timing.py::close_window` | yes | yes | yes | yes | yes | yes |
|
|
40
40
|
|
|
41
41
|
[^identity]: "yes" is load-bearing, and THREE sensors check it, each seeing
|
|
@@ -126,8 +126,8 @@ Two consequences worth stating, because both are behaviour changes:
|
|
|
126
126
|
(not on `message_id`, which OpenCode and Pi can legitimately leave `None`),
|
|
127
127
|
subtracts the overlap once, and re-apportions so the parts still sum.
|
|
128
128
|
|
|
129
|
-
**Two clock bases remain, and the row above says which.** Antigravity, Pi
|
|
130
|
-
claude-code derive every recorded wall stamp from one `TurnClock` per turn, so
|
|
129
|
+
**Two clock bases remain, and the row above says which.** Antigravity, Pi,
|
|
130
|
+
claude-code and Delegate derive every recorded wall stamp from one `TurnClock` per turn, so
|
|
131
131
|
a turn's bounds and the tool spans subtracted from them cannot disagree, and
|
|
132
132
|
neither can be moved by a DST transition or an NTP step inside the turn.
|
|
133
133
|
Antigravity needed it first: its span was monotonic while its tool intervals
|
|
@@ -555,16 +555,18 @@ Each harness finds the call boundary in its own stream (the table above):
|
|
|
555
555
|
step, so a rise in that total closes the call, and the next call opens with a MODEL
|
|
556
556
|
step at a new `step_index`.
|
|
557
557
|
- **OpenCode** and **Pi** stream one `step_start` or `turn_start` per call.
|
|
558
|
-
- **Delegate**'s
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
the
|
|
558
|
+
- **Delegate** streams a call's text, then writes the call's `usage` frame, then
|
|
559
|
+
runs the call's tools. It runs a batched reply's tools one at a time, so one call
|
|
560
|
+
streams `tool_call`, `tool_result`, `tool_call`, `tool_result`, and a tool event
|
|
561
|
+
cannot mark a call boundary. A call therefore opens on its first `thinking` or
|
|
562
|
+
`message` event. A tool-only reply streams no text, so it opens on its `usage`
|
|
563
|
+
frame. A call N+1 that streams text is cut at that text, before any of its tools.
|
|
564
|
+
A tool-only call N+1 is cut at its `usage` frame, and its first tool can start
|
|
565
|
+
before the kill: the host starts a call's tools right after the frame, and the
|
|
566
|
+
stream gives no earlier boundary. The host's own `maxSteps` option does not stop
|
|
567
|
+
the turn, so the adapter does not send it and enforces the cap itself. A host that
|
|
568
|
+
sends no `usage` frames counts only the calls that stream text. The calls under
|
|
569
|
+
the cap keep their tokens and cost.
|
|
568
570
|
|
|
569
571
|
Every harness enforces the cap on the same loop boundary as the
|
|
570
572
|
cooperative early stop, then kills or cancels the in-flight turn so the cap stops
|
|
@@ -637,6 +639,38 @@ A timeout is a *failure* (partial turn captured, error status); the turn cap is
|
|
|
637
639
|
*clean stop*. Conflating them is the mistake this page exists to prevent: a task
|
|
638
640
|
whose cap fires should not look like a task whose harness hung.
|
|
639
641
|
|
|
642
|
+
## The context window cap per harness
|
|
643
|
+
|
|
644
|
+
`agent.context_window` is not a run limit, but the same promise applies: one value
|
|
645
|
+
must mean the same cap on every harness that accepts it. It is the context window, in
|
|
646
|
+
tokens, that the harness compacts the conversation within. A harness that cannot apply
|
|
647
|
+
it rejects it when the config loads. It is never ignored, because a variant that runs
|
|
648
|
+
uncapped under a "capped" label is a wrong measurement.
|
|
649
|
+
|
|
650
|
+
| | claude-code | codex | antigravity | opencode | pi | delegate |
|
|
651
|
+
|---|---|---|---|---|---|---|
|
|
652
|
+
| mechanism | `CLAUDE_CODE_AUTO_COMPACT_WINDOW` in the CLI environment | thread config `model_context_window` | rejected | rejected | rejected | rejected |
|
|
653
|
+
| accepted range | 100000-1000000 | 32768 and up | | | | |
|
|
654
|
+
| when compaction starts | when the context approaches the window | at 90% of the window (Codex's default auto-compact limit) | | | | |
|
|
655
|
+
| above the model's own window | capped to the model's window by the CLI | capped to the model's catalog maximum by Codex | | | | |
|
|
656
|
+
| unset | the model's full window: a host `CLAUDE_CODE_AUTO_COMPACT_WINDOW` is blanked | the host's Codex config: a `model_context_window` in `$CODEX_HOME/config.toml` still applies | | | | |
|
|
657
|
+
|
|
658
|
+
- **claude-code**: the environment variable outranks `--autocompact` and every settings
|
|
659
|
+
scope, so a host or project `autoCompactWindow` cannot change the cap. Setting
|
|
660
|
+
`claude_settings.autoCompactWindow` together with `context_window` fails at load when
|
|
661
|
+
`claude_settings` is an inline dict; a settings file's `autoCompactWindow` is not read,
|
|
662
|
+
and is overridden the same way. When `context_window` is unset, a host-set
|
|
663
|
+
`CLAUDE_CODE_AUTO_COMPACT_WINDOW` is blanked, so a run recorded as uncapped is never
|
|
664
|
+
capped by the host. This applies to every claude-code run, capped or not.
|
|
665
|
+
- **codex**: the value replaces the model's context window, so the hard-cap
|
|
666
|
+
compaction at the usable window (a per-model share of it, 95% for Codex's fallback
|
|
667
|
+
model metadata) also moves. The floor of 32768 rejects a window too small to work in,
|
|
668
|
+
such as a dropped `000` or a YAML `yes`, which would load as 1. When `context_window`
|
|
669
|
+
is unset, coder_eval sets nothing, so a host `model_context_window` in
|
|
670
|
+
`$CODEX_HOME/config.toml` still applies.
|
|
671
|
+
- Neither harness reports when the model's own window has lowered the cap. A cap
|
|
672
|
+
above the model's window runs at the model's window.
|
|
673
|
+
|
|
640
674
|
## `agent.plugins[].path` accepts different depths per harness
|
|
641
675
|
|
|
642
676
|
Not a run limit, but the same promise: one task file, three harnesses, same meaning.
|
|
@@ -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.13",
|
|
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.13"
|
|
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"
|