coder-eval 0.11.0__tar.gz → 0.11.2__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.11.0 → coder_eval-0.11.2}/.github/workflows/pr-checks.yml +7 -7
- {coder_eval-0.11.0 → coder_eval-0.11.2}/CHANGELOG.md +48 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/PKG-INFO +3 -2
- {coder_eval-0.11.0 → coder_eval-0.11.2}/action.yml +1 -1
- {coder_eval-0.11.0 → coder_eval-0.11.2}/experiments/default.yaml +5 -3
- {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/.claude-plugin/plugin.json +1 -1
- {coder_eval-0.11.0 → coder_eval-0.11.2}/pyproject.toml +9 -2
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/__init__.py +1 -1
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agents/codex_agent.py +7 -2
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/judge_anthropic.py +15 -3
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/judge_bedrock.py +4 -4
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/verdict_tool.py +2 -2
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/isolation/docker_runner.py +20 -8
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/telemetry.py +10 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/streaming/renderers.py +6 -2
- coder_eval-0.11.2/tests/lint/rules/ce043_no_command_output_truncation.py +75 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/runner.py +2 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_codex_agent_unit.py +25 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_custom_lint.py +42 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_docker_runner_mounts.py +35 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_judge_anthropic.py +37 -4
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_judge_bedrock.py +15 -18
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_judge_burn_in_live.py +2 -2
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_streaming_renderers.py +22 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/uv.lock +52 -13
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/commands/coder-eval-code-review-full.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/commands/coder-eval-code-review-wf.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/commands/coder-eval-code-review.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/commands/coder-eval-create-plan.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/commands/coder-eval-implement-plan.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/commands/coder-eval-review.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/harness-candidates.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/shared/axes.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/shared/multi-model-review.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/shared/review-rubric.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/shared/run-layout.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/workflows/cr-axis.js +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/workflows/cr-parent.js +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude-plugin/marketplace.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.env.example +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/CODEOWNERS +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/actionlint.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/code_review.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/dependabot.yml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/pages-stub/index.html +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/scripts/release_notes.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/workflows/claude-pr-review.yml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/workflows/codeql.yml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/workflows/conventional-commits.yml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/workflows/docker-publish.yml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/workflows/docs.yml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/workflows/publish-testpypi.yml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/workflows/release.yml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/workflows/verify-published-action.yml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.gitignore +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.pre-commit-config.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/.python-version +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/ADOPTERS.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/CLAUDE.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/CODE_OF_CONDUCT.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/CONTRIBUTING.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/LICENSE +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/Makefile +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/NOTICE +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/README.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/SECURITY.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/comparison.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docker/Dockerfile +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docker/Dockerfile.runtime +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docker/coder_eval_entrypoint.sh +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docker/coder_eval_runtime_entrypoint.sh +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/AB_EXPERIMENTS.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/CI_GATE.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/DATASETS.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/DIALOG_MODE.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/DOCKER_ISOLATION.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/EXTENDING.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/PLUGIN.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/REPORT_SCHEMA.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/TASK_DEFINITION_GUIDE.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/USER_GUIDE.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/agents/ANTIGRAVITY.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/agents/CLAUDE_CODE.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/agents/CODEX.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/agents/HARNESS_PARITY.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/assets/hero.gif +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/comparison.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/index.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/llms.txt +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/tutorials/01-first-evaluation.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/tutorials/02-ci-pipeline.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/tutorials/03-evalboard-local.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/tutorials/04-writing-a-task.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/tutorials/05-comparing-models.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/tutorials/06-use-docker-isolation.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/tutorials/07-plugin-in-claude-code.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/tutorials/README.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/.gitignore +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/README.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/__tests__/harness-badge.test.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/col-help.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/collapsible-rail.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/harness-badge.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/harness-selector.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/scroll-table.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/search-box.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/unit-toggle.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/version-list.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_lib/__tests__/source-param.test.ts +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_lib/source-param.ts +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_overview/daily-chart.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_overview/harness-legend.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_overview/harness-series.ts +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_overview/tag-rail.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_overview/window-summary.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/api/download/route.ts +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/api/file/route.ts +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/api/refresh/route.ts +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/error.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/globals.css +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/icon.png +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/layout.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/page.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/path-to-ga/page.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/path-to-ga/task-table.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/scribe/page.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/scribe/run-table.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/trends/actions.ts +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/trends/page.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/trends/trends-view.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/watchlist/page.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/next-env.d.ts +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/next.config.mjs +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/package.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/pnpm-lock.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/postcss.config.mjs +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/public/harness/antigravity.png +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/public/harness/claude-code.png +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/public/harness/codex.png +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/public/uipath.png +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/tailwind.config.ts +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/tsconfig.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/vitest.config.ts +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/vitest.setup.ts +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/experiments/early-stop-ab.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/experiments/model-comparison.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/experiments/permissions-smoke.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/experiments/plugin-comparison.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/experiments/prompt-mutations-example.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/experiments/smoke_variants.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/litellm/README.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/litellm/cost_logger.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/litellm/litellm-config.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/litellm/start-litellm.sh +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/mkdocs.yml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/osv-scanner.toml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/README.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/reference/cli-setup.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/reference/criteria.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/reference/repo-layout.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/reference/run-layout.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/reference/task-rubric.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/reference/templates/activation-rows.jsonl +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/reference/templates/activation.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/skills/analyze/SKILL.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/skills/check-skill/SKILL.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/skills/ci/SKILL.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/skills/init/SKILL.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/skills/lint-tasks/SKILL.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/skills/task/SKILL.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/scripts/check_commit_msg.sh +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/.gitattributes +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agent.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agents/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agents/_logging.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agents/antigravity_agent.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agents/claude_code_agent.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agents/noop_agent.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agents/registry.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agents/watchdog.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/analysis.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/aggregate_command.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/console.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/evaluate_command.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/plan_command.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/report_command.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/run_command.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/run_helpers.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/run_task_internal_command.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/utils.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/config.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/agent_judge.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/base.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/classification_match.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/cli_called.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/command_executed.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/commands_efficiency.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/file_check.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/file_contains.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/file_exists.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/file_matches_regex.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/json_check.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/llm_judge.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/reference_comparison.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/run_command.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/skill_triggered.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/uipath_eval.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/agent.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/budget.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/categories.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/categorization.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/checker_misuse.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/executor.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/judge.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/reference.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/retry.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/timeout.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/checker.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/judge_context.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/judge_models.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/judge_persistence.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/judge_usage.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/sub_agent.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/summaries.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/formatting.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/fs_permissions.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/invocation_log.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/isolation/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/litellm_cost.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/logging_config.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/agent_config.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/container_paths.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/criteria.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/enums.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/experiment.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/judge.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/judge_defaults.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/limits.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/merge_strategy.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/mutations.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/results.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/routing.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/sandbox.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/tasks.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/templates.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/batch.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/config.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/config_merge.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/early_stop.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/evaluation.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/experiment.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/overrides.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/run_limits.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/task_loader.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestrator.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/path_utils.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/plugins.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/pricing.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/py.typed +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/reports.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/reports_experiment.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/reports_html.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/reports_junit.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/reports_stats.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/resources/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/resources/tags.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/sandbox.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/scoring/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/scoring/ast_similarity.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/scoring/complexity.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/scoring/quality.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/scoring/signature_similarity.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/scoring/similarity.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/scoring/token_similarity.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/simulation/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/simulation/termination.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/simulation/user_simulator.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/streaming/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/streaming/callbacks.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/streaming/collector.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/streaming/events.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/streaming/wire.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/telemetry.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/utils.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/README.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agentless_smoke_test.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/antigravity_hello_world.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/claude_hello_world.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/claude_hello_world_docker.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/claude_subagent_test.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/codex_hello_world.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/codex_parallel_commands.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/codex_skills_test.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/codex_string_utils.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/codex_subagent_test.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/subagent_bash_long_input.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/subagent_merge_sort.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/anti_cheat_reference/anti_cheat_reference.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/anti_cheat_reference/reference/solution.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/byod_smoke_test.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/dataset_example.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/datasets/sentiment.jsonl +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/dockerfile_build_example/environment/input.txt +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/early_stop_decision_budget_exceeded.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/early_stop_weighted_high_weight_kills_run.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/early_stop_weighted_low_weight_absorbed.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/fibonacci_with_template.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/hello_date.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/inline_starter_example.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/internal/session_resumption.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/mock_path_dirs_smoke.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/run_limits/max_turns_cap.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/run_limits/turn_timeout.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/README.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/sentiment_classification.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/smoke_agent_judge.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/smoke_budget_exceeded.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/smoke_llm_judge.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/smoke_negative_path.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/smoke_task_timeout.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/smoke_variants.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/test_sandbox.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/token_check.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/templates/byod_smoke_test/Dockerfile +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/templates/fibonacci-starter/README.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/templates/fibonacci-starter/src/main.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/templates/fibonacci-starter/tests/test_main.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/_scrub.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/live_criteria.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/report_snapshots/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/report_snapshots/run_full.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_path_helpers.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/conftest.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/fixtures/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/fixtures/mock_agent.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/fixtures/text_stub_agent.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/action_docs.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/dead_config_fields.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/doc_env_parity.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/doc_examples.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/doc_indexes.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/doc_schema_parity.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/generated.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/live_verdict_contract.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/plugin_reference.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/pyright_config.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/__init__.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/base.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce023_no_proxy_shim_import.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce037_no_dead_private_helper.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce038_acquire_inside_try.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce039_config_error_escalates.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/no_agent_timing_access.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/no_silent_except.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/no_submodule_model_imports.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/open_explicit_encoding.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/register_criterion_required.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/violation.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/workflow_outputs.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_action_version_pin.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_config_no_timing_fields.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_config_optional_type.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_config_registry_dispatch.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_config_sdk_decoupling.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_golden_master.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_judge_criterion.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_telemetry.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_telemetry_advanced.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_timeout.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agentless.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_aggregate.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_antigravity_agent.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_byoa_plugin.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_byoa_plugin_live.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_byod_feature.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_check_all_async.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_checker_logging.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_classification_match.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_claude_settings_enforcement_live.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cleanup_preservation_guard.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cli_backend_flag.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cli_called_criterion.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cli_empty_glob.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cli_sdk_options.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cli_set_overrides.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cli_telemetry.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cli_type_flag.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_code_review_bugs.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_codex_agent.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_codex_agent_live.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_codex_token_mapping.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_command_executed.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_command_statistics.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_command_telemetry_result_data.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_commands_efficiency.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_config_lineage.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_config_merge_engine.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_config_precedence.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_continuous_scoring.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cost_accounting_paths.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_criterion_result_round_trip.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_dataset_expansion.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_debug_logging.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_docker_build_failure.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_docker_litellm_env.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_docker_runner_container_death.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_docker_runner_stream_limit.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_docker_wildcard_env.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_docker_workdir_live.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_driver_resolver.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_early_stop.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_error_handling.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_evaluate_command.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_evaluator.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_event_collector.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_experiment_cli.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_experiment_loader.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_experiment_models.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_experiment_reports.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_experiment_resolver.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_experiment_runner.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_file_check.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_file_contains_scoring.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_formatting.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_git_clone_failure.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_glob_paths_in_file_criteria.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_heartbeat_watchdog.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_ignore_patterns_negation.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_image_from_dockerfiles.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_integration.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_json_check.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_judge_context_builder.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_judge_models.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_judge_persistence.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_lint_no_top_level_run_limits.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_lint_runner.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_litellm_config.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_litellm_cost.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_litellm_cost_logger.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_litellm_route.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_llm_judge_criterion.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_log_tail_buffer.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_logging.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_logging_isolation.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_merge_characterization.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_merge_strategy_annotations.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_merge_unification.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_models.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_mutations.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_new_criteria.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_node_env_config.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_optional_dependencies.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_orchestrator.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_orchestrator_error_log_tail.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_orchestrator_telemetry.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_overrides_engine.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_parallel.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_path_utils.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_plan_command.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_plugin_processing.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_plugins.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_post_run.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_pr_review_workflow.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_pre_run.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_preservation_mode.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_pricing_registry.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reference_comparison_scoring.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reference_evaluator.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reference_missing_file.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reference_models.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reference_permissions.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_registry.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_release_notes.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_replicate_stats.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_report_command.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reports.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reports_experiment.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reports_html.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reports_junit.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reports_stats.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reports_stats_nonfinite.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_resolve_task_files.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_resume.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_retry_logic_comprehensive.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_route_seam_exhaustiveness.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_routing.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_run_command_junit.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_run_command_stdout.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_run_limits_models.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_run_limits_orchestrator.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_run_limits_resolver.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_run_metrics.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_runtime_tool_versions.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sandbox.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sandbox_layer_builder.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sandbox_optional.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sandbox_record_cli.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sandbox_security.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sandbox_symlink_preservation.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sandbox_templates.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_scorers.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_scoring_quality.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sdk_option_classification.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_simulation_config.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_simulation_integration.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_simulation_termination.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_simulation_trials.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_skill_triggered.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_streaming_agent_integration.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_streaming_batch.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_streaming_callbacks.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_streaming_cli.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_streaming_events.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_streaming_orchestrator.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_streaming_wire.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sub_agent_runner.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_success_criterion_union.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_suite_rollup.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_summaries.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_tags.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_task_definition_unknown_fields.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_teardown_interrupt.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_telemetry.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_template_env_expansion.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_threshold_enforcement.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_timeout_batch.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_timeout_categorization.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_timeout_exceptions.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_timeout_models.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_timeout_orchestrator.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_token_usage.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_uipath_eval.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_user_simulator.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_utils.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_utterance_extraction.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_variant_prompt_file.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_verdict_tool.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_verify_published_workflow.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_visible_turn_cap.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_watchdog.py +0 -0
- {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_yaml_migration.py +0 -0
|
@@ -76,7 +76,7 @@ jobs:
|
|
|
76
76
|
|
|
77
77
|
- name: Install uv
|
|
78
78
|
run: |
|
|
79
|
-
python -m pip install --upgrade pip
|
|
79
|
+
python -m pip install --upgrade "pip>=26.2" # PYSEC-2026-3721 fix floor
|
|
80
80
|
pip install uv
|
|
81
81
|
|
|
82
82
|
- name: Install project dependencies (hash-verified from uv.lock)
|
|
@@ -297,7 +297,7 @@ jobs:
|
|
|
297
297
|
|
|
298
298
|
- name: Install uv
|
|
299
299
|
run: |
|
|
300
|
-
python -m pip install --upgrade pip
|
|
300
|
+
python -m pip install --upgrade "pip>=26.2" # PYSEC-2026-3721 fix floor
|
|
301
301
|
pip install uv
|
|
302
302
|
|
|
303
303
|
- name: Install project without [uipath] extra
|
|
@@ -381,7 +381,7 @@ jobs:
|
|
|
381
381
|
|
|
382
382
|
- name: Install uv
|
|
383
383
|
run: |
|
|
384
|
-
python -m pip install --upgrade pip
|
|
384
|
+
python -m pip install --upgrade "pip>=26.2" # PYSEC-2026-3721 fix floor
|
|
385
385
|
pip install uv
|
|
386
386
|
|
|
387
387
|
- name: Install project dependencies (hash-verified from uv.lock)
|
|
@@ -527,7 +527,7 @@ jobs:
|
|
|
527
527
|
|
|
528
528
|
- name: Install uv
|
|
529
529
|
run: |
|
|
530
|
-
python -m pip install --upgrade pip
|
|
530
|
+
python -m pip install --upgrade "pip>=26.2" # PYSEC-2026-3721 fix floor
|
|
531
531
|
pip install uv
|
|
532
532
|
|
|
533
533
|
- name: Install project dependencies (hash-verified from uv.lock)
|
|
@@ -697,7 +697,7 @@ jobs:
|
|
|
697
697
|
|
|
698
698
|
- name: Install uv
|
|
699
699
|
run: |
|
|
700
|
-
python -m pip install --upgrade pip
|
|
700
|
+
python -m pip install --upgrade "pip>=26.2" # PYSEC-2026-3721 fix floor
|
|
701
701
|
pip install uv
|
|
702
702
|
|
|
703
703
|
- name: Install project dependencies (hash-verified from uv.lock)
|
|
@@ -840,7 +840,7 @@ jobs:
|
|
|
840
840
|
|
|
841
841
|
- name: Install uv
|
|
842
842
|
run: |
|
|
843
|
-
python -m pip install --upgrade pip
|
|
843
|
+
python -m pip install --upgrade "pip>=26.2" # PYSEC-2026-3721 fix floor
|
|
844
844
|
pip install uv
|
|
845
845
|
|
|
846
846
|
- name: Install project dependencies (with codex extra)
|
|
@@ -919,7 +919,7 @@ jobs:
|
|
|
919
919
|
|
|
920
920
|
- name: Install uv
|
|
921
921
|
run: |
|
|
922
|
-
python -m pip install --upgrade pip
|
|
922
|
+
python -m pip install --upgrade "pip>=26.2" # PYSEC-2026-3721 fix floor
|
|
923
923
|
pip install uv
|
|
924
924
|
|
|
925
925
|
- name: Install project dependencies (hash-verified from uv.lock)
|
|
@@ -2,6 +2,54 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- version list -->
|
|
4
4
|
|
|
5
|
+
## v0.11.2 (2026-08-24)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
- **docker**: Expand ~ and $VAR in extra_mounts destinations
|
|
10
|
+
([#128](https://github.com/UiPath/coder_eval/pull/128),
|
|
11
|
+
[`02dbf69`](https://github.com/UiPath/coder_eval/commit/02dbf694705fd3f7de4ce164230a70945f08a1ce))
|
|
12
|
+
|
|
13
|
+
- **docker**: Reject expansions that inject a ':' into a mount path
|
|
14
|
+
([#128](https://github.com/UiPath/coder_eval/pull/128),
|
|
15
|
+
[`02dbf69`](https://github.com/UiPath/coder_eval/commit/02dbf694705fd3f7de4ce164230a70945f08a1ce))
|
|
16
|
+
|
|
17
|
+
### Documentation
|
|
18
|
+
|
|
19
|
+
- **docker**: Trim the extra_mounts destination comments to scope
|
|
20
|
+
([#128](https://github.com/UiPath/coder_eval/pull/128),
|
|
21
|
+
[`02dbf69`](https://github.com/UiPath/coder_eval/commit/02dbf694705fd3f7de4ce164230a70945f08a1ce))
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
## v0.11.1 (2026-08-21)
|
|
25
|
+
|
|
26
|
+
### Bug Fixes
|
|
27
|
+
|
|
28
|
+
- **ci**: Pin pip floor to 26.2 to close PYSEC-2026-3721
|
|
29
|
+
([#133](https://github.com/UiPath/coder_eval/pull/133),
|
|
30
|
+
[`beecedd`](https://github.com/UiPath/coder_eval/commit/beeceddc521957d3cb53f944b7877dada1155548))
|
|
31
|
+
|
|
32
|
+
- **codex**: Store command output whole in result_summary (+ code-review fixes)
|
|
33
|
+
([#127](https://github.com/UiPath/coder_eval/pull/127),
|
|
34
|
+
[`3d09f0f`](https://github.com/UiPath/coder_eval/commit/3d09f0f4d966f619405058aca44aa982b1ba265a))
|
|
35
|
+
|
|
36
|
+
- **deps**: Address PR #133 review — anthropic 1.0.0 dropped temperature kwarg
|
|
37
|
+
([#133](https://github.com/UiPath/coder_eval/pull/133),
|
|
38
|
+
[`beecedd`](https://github.com/UiPath/coder_eval/commit/beeceddc521957d3cb53f944b7877dada1155548))
|
|
39
|
+
|
|
40
|
+
- **deps**: Bump anthropic to 1.0.0 and migrate Bedrock judge path to httpx2
|
|
41
|
+
([#133](https://github.com/UiPath/coder_eval/pull/133),
|
|
42
|
+
[`beecedd`](https://github.com/UiPath/coder_eval/commit/beeceddc521957d3cb53f944b7877dada1155548))
|
|
43
|
+
|
|
44
|
+
- **deps**: Bump anthropic to 1.0.0, migrate Bedrock judge path to httpx2
|
|
45
|
+
([#133](https://github.com/UiPath/coder_eval/pull/133),
|
|
46
|
+
[`beecedd`](https://github.com/UiPath/coder_eval/commit/beeceddc521957d3cb53f944b7877dada1155548))
|
|
47
|
+
|
|
48
|
+
- **deps**: Re-lock pip to 26.2.1 to actually close PYSEC-2026-3721
|
|
49
|
+
([#133](https://github.com/UiPath/coder_eval/pull/133),
|
|
50
|
+
[`beecedd`](https://github.com/UiPath/coder_eval/commit/beeceddc521957d3cb53f944b7877dada1155548))
|
|
51
|
+
|
|
52
|
+
|
|
5
53
|
## v0.11.0 (2026-08-19)
|
|
6
54
|
|
|
7
55
|
### Bug Fixes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: coder-eval
|
|
3
|
-
Version: 0.11.
|
|
3
|
+
Version: 0.11.2
|
|
4
4
|
Summary: Evaluate, benchmark, and A/B-test AI coding agents (Claude Code, Codex, Gemini/Antigravity) 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
|
|
@@ -23,11 +23,12 @@ Classifier: Topic :: Software Development :: Quality Assurance
|
|
|
23
23
|
Classifier: Topic :: Software Development :: Testing
|
|
24
24
|
Classifier: Typing :: Typed
|
|
25
25
|
Requires-Python: >=3.13
|
|
26
|
-
Requires-Dist: anthropic
|
|
26
|
+
Requires-Dist: anthropic<2.0.0,>=1.0.0
|
|
27
27
|
Requires-Dist: anyio>=4.13.0
|
|
28
28
|
Requires-Dist: azure-monitor-opentelemetry-exporter<1.1.0,>=1.0.0b30
|
|
29
29
|
Requires-Dist: claude-agent-sdk>=0.2.124
|
|
30
30
|
Requires-Dist: click>=8.3.3
|
|
31
|
+
Requires-Dist: httpx2<3.0.0,>=2.12.0
|
|
31
32
|
Requires-Dist: jmespath>=1.1.0
|
|
32
33
|
Requires-Dist: jsonschema>=4.26.0
|
|
33
34
|
Requires-Dist: opentelemetry-sdk<2.0.0,>=1.30.0
|
|
@@ -41,7 +41,7 @@ inputs:
|
|
|
41
41
|
version:
|
|
42
42
|
description: coder-eval version to install from PyPI, or "local" to install from the action checkout
|
|
43
43
|
required: false
|
|
44
|
-
default: "0.11.
|
|
44
|
+
default: "0.11.2" # <-- kept in sync with releases by release.yml
|
|
45
45
|
run-dir:
|
|
46
46
|
description: Run directory (--run-dir)
|
|
47
47
|
required: false
|
|
@@ -18,9 +18,11 @@ defaults:
|
|
|
18
18
|
# Per-row dataset multiplication: a 100-row task with max_usd: 0.10 permits up to
|
|
19
19
|
# $10 cumulative spend.
|
|
20
20
|
run_limits:
|
|
21
|
-
#
|
|
22
|
-
#
|
|
23
|
-
|
|
21
|
+
# Hard safety ceiling on agent inner-loop turns per iteration (null = SDK
|
|
22
|
+
# default). Set well above the typical 3-18 turns a task needs so it only
|
|
23
|
+
# trips on runaway loops; task_timeout / turn_timeout below are the practical
|
|
24
|
+
# guards. Override per-task when a task legitimately needs more.
|
|
25
|
+
max_turns: 100
|
|
24
26
|
# Soft target: when cumulative SDK turns across all iterations of a task
|
|
25
27
|
# exceed this, the orchestrator logs a one-shot warning and the report
|
|
26
28
|
# surfaces a badge. Does NOT abort the run (max_turns is the hard cap).
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "coder-eval",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.2",
|
|
4
4
|
"description": "Author, run, and analyze coder-eval suites — including whether your Claude Code skills actually trigger.",
|
|
5
5
|
"author": { "name": "UiPath", "url": "https://github.com/UiPath/coder_eval" },
|
|
6
6
|
"homepage": "https://coder-eval.com",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "coder-eval"
|
|
3
|
-
version = "0.11.
|
|
3
|
+
version = "0.11.2"
|
|
4
4
|
description = "Evaluate, benchmark, and A/B-test AI coding agents (Claude Code, Codex, Gemini/Antigravity) with sandboxed, reproducible YAML task suites."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "Apache-2.0"
|
|
@@ -34,7 +34,14 @@ dependencies = [
|
|
|
34
34
|
"click>=8.3.3",
|
|
35
35
|
"rich>=14.3.3",
|
|
36
36
|
"python-dotenv>=1.2.2",
|
|
37
|
-
|
|
37
|
+
# Cap the major: 1.0.0 already proved a major can drop call kwargs
|
|
38
|
+
# (temperature/top_p/top_k off messages.create — see judge_anthropic.py).
|
|
39
|
+
"anthropic>=1.0.0,<2.0.0",
|
|
40
|
+
# anthropic>=1.0.0 migrated its HTTP layer from httpx to httpx2 (its own
|
|
41
|
+
# exceptions, e.g. APIConnectionError, now carry an httpx2.Request). Declared
|
|
42
|
+
# explicitly since our code/tests construct httpx2 types directly. Capped to
|
|
43
|
+
# mirror anthropic's own bound on it (`httpx2<3,>=2.0.0`).
|
|
44
|
+
"httpx2>=2.12.0,<3.0.0",
|
|
38
45
|
"claude-agent-sdk>=0.2.124",
|
|
39
46
|
"anyio>=4.13.0",
|
|
40
47
|
"radon>=6.0.1",
|
|
@@ -2178,10 +2178,15 @@ class CodexAgent(Agent[CodexAgentConfig]):
|
|
|
2178
2178
|
# Determine result status from exit code
|
|
2179
2179
|
result_status = "success" if exit_code == 0 else "error" if exit_code is not None else "unknown"
|
|
2180
2180
|
|
|
2181
|
-
# Build result summary with output if available
|
|
2181
|
+
# Build result summary with output if available. Store the output WHOLE:
|
|
2182
|
+
# CommandTelemetry.result_summary is the untruncated tool-result body (its
|
|
2183
|
+
# length drives CommandTelemetry.result_tokens), so truncating here would
|
|
2184
|
+
# under-report tool-output size for every command (see CE043). The output is
|
|
2185
|
+
# already bounded by the Codex harness's own exec-output truncation; any
|
|
2186
|
+
# further trimming for display belongs in the renderers/reports, not capture.
|
|
2182
2187
|
summary_parts = [f"Exit code: {exit_code}" if exit_code is not None else "Command executed"]
|
|
2183
2188
|
if output and len(output.strip()) > 0:
|
|
2184
|
-
summary_parts.append(f"Output: {output
|
|
2189
|
+
summary_parts.append(f"Output: {output}")
|
|
2185
2190
|
result_summary = " | ".join(summary_parts)
|
|
2186
2191
|
|
|
2187
2192
|
# Try to parse output as JSON
|
|
@@ -40,7 +40,14 @@ async def invoke_anthropic_judge_async(
|
|
|
40
40
|
Returns the SDK response converted to a dict via ``model_dump`` so the
|
|
41
41
|
caller can reuse ``extract_verdict_from_anthropic_response`` — Anthropic's
|
|
42
42
|
native shape (content blocks with ``type: tool_use``) is identical
|
|
43
|
-
between this SDK call and the Bedrock
|
|
43
|
+
between this SDK call and the Bedrock httpx2-direct call.
|
|
44
|
+
|
|
45
|
+
``temperature`` is forwarded via ``extra_body`` rather than as a top-level
|
|
46
|
+
kwarg: anthropic 1.0.0 dropped ``temperature``/``top_p``/``top_k`` from
|
|
47
|
+
``AsyncMessages.create``'s typed signature, but the Messages API itself
|
|
48
|
+
still accepts ``temperature`` in the raw JSON body — the same body shape
|
|
49
|
+
the Bedrock path already sends it in — so ``extra_body`` keeps both judge
|
|
50
|
+
backends honoring ``LLMJudgeCriterion.temperature`` identically.
|
|
44
51
|
"""
|
|
45
52
|
alias = to_anthropic_alias(model)
|
|
46
53
|
client = AsyncAnthropic(timeout=timeout_seconds)
|
|
@@ -51,12 +58,17 @@ async def invoke_anthropic_judge_async(
|
|
|
51
58
|
system=system,
|
|
52
59
|
messages=[{"role": "user", "content": user}],
|
|
53
60
|
max_tokens=max_tokens,
|
|
54
|
-
|
|
55
|
-
tools=[tool_spec], # type: ignore[arg-type]
|
|
61
|
+
tools=[tool_spec], # pyright: ignore[reportArgumentType]
|
|
56
62
|
tool_choice={"type": "tool", "name": tool_spec["name"]},
|
|
63
|
+
extra_body={"temperature": temperature},
|
|
57
64
|
)
|
|
58
65
|
except APIError as e:
|
|
59
66
|
# The SDK already retries transient failures internally (2 attempts
|
|
60
67
|
# by default) — do not add another retry loop here.
|
|
61
68
|
raise JudgeInfrastructureError(f"Anthropic judge API error: {e}") from e
|
|
69
|
+
except Exception as e:
|
|
70
|
+
# A signature/contract break (e.g. a removed or renamed kwarg after an
|
|
71
|
+
# SDK bump) must not be scored as an agent failure — see CLAUDE.md's
|
|
72
|
+
# CE039 rationale: an eval-infra fault is not the agent's fault.
|
|
73
|
+
raise JudgeInfrastructureError(f"Anthropic judge call failed: {e}") from e
|
|
62
74
|
return response.model_dump()
|
|
@@ -14,7 +14,7 @@ agent_judge uses the Claude Code SDK subprocess instead — the two paths
|
|
|
14
14
|
intentionally do not share an HTTP client.
|
|
15
15
|
|
|
16
16
|
Async on purpose: this is llm_judge's only implementation of the network
|
|
17
|
-
call (there is no sync twin) — ``
|
|
17
|
+
call (there is no sync twin) — ``httpx2.AsyncClient`` lets the call yield the
|
|
18
18
|
event loop instead of blocking a thread-pool thread for the wait, so
|
|
19
19
|
``SuccessChecker.check_all_async`` awaits it directly without pinning a
|
|
20
20
|
thread. (``check_all_async`` currently runs criteria sequentially; running
|
|
@@ -27,7 +27,7 @@ import asyncio
|
|
|
27
27
|
import logging
|
|
28
28
|
from typing import Any
|
|
29
29
|
|
|
30
|
-
import
|
|
30
|
+
import httpx2
|
|
31
31
|
|
|
32
32
|
from coder_eval.errors import JudgeInfrastructureError
|
|
33
33
|
from coder_eval.errors.categories import RetryConfig
|
|
@@ -90,13 +90,13 @@ async def invoke_bedrock_judge_async(
|
|
|
90
90
|
attempts = _JUDGE_RETRY.max_retries + 1
|
|
91
91
|
last_failure = ""
|
|
92
92
|
last_exc: Exception | None = None
|
|
93
|
-
async with
|
|
93
|
+
async with httpx2.AsyncClient() as client:
|
|
94
94
|
for attempt in range(attempts):
|
|
95
95
|
if attempt:
|
|
96
96
|
await asyncio.sleep(compute_backoff(_JUDGE_RETRY, attempt - 1))
|
|
97
97
|
try:
|
|
98
98
|
response = await client.post(url, headers=headers, json=body, timeout=timeout_seconds)
|
|
99
|
-
except
|
|
99
|
+
except httpx2.HTTPError as e:
|
|
100
100
|
last_failure = f"Bedrock invoke transport error: {e}"
|
|
101
101
|
last_exc = e
|
|
102
102
|
logger.warning("Bedrock judge attempt %d/%d failed: %s", attempt + 1, attempts, last_failure)
|
|
@@ -40,7 +40,7 @@ SUBMIT_VERDICT_ANTHROPIC_TOOL: dict[str, Any] = {
|
|
|
40
40
|
"description": _SUBMIT_VERDICT_DESCRIPTION,
|
|
41
41
|
"input_schema": JudgeVerdict.model_json_schema(),
|
|
42
42
|
}
|
|
43
|
-
"""Anthropic-native tool spec for the Bedrock
|
|
43
|
+
"""Anthropic-native tool spec for the Bedrock httpx2-direct path and Anthropic SDK calls.
|
|
44
44
|
|
|
45
45
|
Note: Anthropic uses ``input_schema``, not OpenAI's ``parameters``.
|
|
46
46
|
"""
|
|
@@ -132,7 +132,7 @@ def extract_verdict_from_anthropic_response(
|
|
|
132
132
|
``{"type": "tool_use", "name": "submit_verdict"}`` and validates the last
|
|
133
133
|
one's ``input`` against ``JudgeVerdict``. Used by:
|
|
134
134
|
|
|
135
|
-
* The Bedrock
|
|
135
|
+
* The Bedrock httpx2 path (``invoke_bedrock_judge_async``) — raw JSON dict.
|
|
136
136
|
* The Anthropic SDK Direct path (``invoke_anthropic_judge_async``) —
|
|
137
137
|
response converted via ``Message.model_dump()``.
|
|
138
138
|
|
|
@@ -290,11 +290,14 @@ def _validate_extra_mount(spec: str) -> str:
|
|
|
290
290
|
|
|
291
291
|
Defends against typos that would silently expose the host fs to the
|
|
292
292
|
container, and against mount specs that shadow framework-owned mounts.
|
|
293
|
-
Normalizes
|
|
294
|
-
|
|
295
|
-
|
|
293
|
+
Normalizes BOTH sides by expanding ``~`` and ``$VAR`` so authors can
|
|
294
|
+
write portable specs. Returns the (possibly rewritten) spec to feed
|
|
295
|
+
back into argv.
|
|
296
296
|
|
|
297
297
|
Notes:
|
|
298
|
+
- Destinations are expanded too. A container path that has to match a
|
|
299
|
+
host-valued var (``$SKILLS_REPO_PATH``) would otherwise have to be
|
|
300
|
+
hardcoded per machine.
|
|
298
301
|
- Mode is REQUIRED. Forgetting ``:ro`` is the single most common way
|
|
299
302
|
to accidentally hand the container RW access to a host directory,
|
|
300
303
|
so we make the author write it explicitly.
|
|
@@ -312,26 +315,35 @@ def _validate_extra_mount(spec: str) -> str:
|
|
|
312
315
|
parts = body.split(":")
|
|
313
316
|
if len(parts) < 2 or len(parts) > 3:
|
|
314
317
|
raise ValueError(f"Invalid extra_mounts entry {spec!r}: expected `src:dst[:ro|rw]`.")
|
|
315
|
-
src,
|
|
318
|
+
src, raw_dst = head + parts[0], parts[1]
|
|
316
319
|
# Default to read-only when mode is omitted. Mounting host paths RW
|
|
317
320
|
# by default is the wrong sandbox stance: the few RW use-cases are
|
|
318
321
|
# better stated explicitly than implied by silence.
|
|
319
322
|
mode = parts[2] if len(parts) == 3 else "ro"
|
|
320
323
|
if not src:
|
|
321
324
|
raise ValueError(f"Invalid extra_mounts entry {spec!r}: empty source path.")
|
|
322
|
-
if not
|
|
325
|
+
if not raw_dst:
|
|
323
326
|
raise ValueError(f"Invalid extra_mounts entry {spec!r}: empty destination path.")
|
|
327
|
+
# Expanded before the absolute-path check: that is the point.
|
|
328
|
+
expanded_src = os.path.expandvars(os.path.expanduser(src))
|
|
329
|
+
dst = os.path.expandvars(os.path.expanduser(raw_dst))
|
|
330
|
+
# A variable whose value carries a ':' would add fields to the spec rebuilt
|
|
331
|
+
# at the bottom, silently moving the destination or widening the mode.
|
|
332
|
+
# The drive prefix is excluded: its colon is legitimate and already split off.
|
|
333
|
+
if ":" in dst or ":" in expanded_src[len(head) :]:
|
|
334
|
+
raise ValueError(f"Invalid extra_mounts entry {spec!r}: expansion introduced a ':' into a path.")
|
|
324
335
|
if not dst.startswith("/"):
|
|
325
|
-
|
|
336
|
+
# expandvars leaves an unset var verbatim, so typos land here.
|
|
337
|
+
detail = f"{raw_dst!r}" if dst == raw_dst else f"{raw_dst!r} (expanded to {dst!r})"
|
|
338
|
+
raise ValueError(f"Invalid extra_mounts entry {spec!r}: destination must be an absolute path, got {detail}.")
|
|
326
339
|
if mode not in ("ro", "rw"):
|
|
327
340
|
raise ValueError(f"Invalid extra_mounts entry {spec!r}: mode must be 'ro' or 'rw'.")
|
|
328
|
-
# Expand ~ and $VAR in the source so authors can write portable specs.
|
|
329
|
-
expanded_src = os.path.expandvars(os.path.expanduser(src))
|
|
330
341
|
if not Path(expanded_src).exists():
|
|
331
342
|
raise ValueError(f"Invalid extra_mounts entry {spec!r}: source path does not exist on host.")
|
|
332
343
|
# Reject destinations that shadow framework-owned mounts inside the
|
|
333
344
|
# container. ``/work`` substrings are caught too -- /work/foo would
|
|
334
345
|
# land underneath our staging dir and shadow the input/output tree.
|
|
346
|
+
# Expanded form: a var could itself expand to a reserved path.
|
|
335
347
|
dst_norm = dst.rstrip("/") or "/"
|
|
336
348
|
if dst_norm in _RESERVED_MOUNT_DESTS or dst_norm.startswith(CONTAINER_WORK_DIR + "/"):
|
|
337
349
|
raise ValueError(
|
|
@@ -410,6 +410,16 @@ class CommandTelemetry(BaseModel):
|
|
|
410
410
|
result size from prompt-cache growth (which is unavailable when caching is
|
|
411
411
|
disabled). Approximate, not the API's exact tokenizer count, but
|
|
412
412
|
deterministic and always present. 0 when the tool returned no content.
|
|
413
|
+
|
|
414
|
+
This measure is only meaningful while ``result_summary`` stays whole: an
|
|
415
|
+
agent that truncates a command's output before recording it (as the Codex
|
|
416
|
+
agent once did with ``output[:100]``) silently under-reports that command's
|
|
417
|
+
result. Lint rule CE043 forbids truncating captured command output
|
|
418
|
+
(stdout/stderr) in the agents, so the "untruncated" contract holds for
|
|
419
|
+
command results across agents. (One-line summaries of non-command tool
|
|
420
|
+
items — e.g. collab/MCP status lines built by ``_summarize_tool_item`` —
|
|
421
|
+
are intentionally brief and out of scope.) Trim for DISPLAY in the
|
|
422
|
+
renderers/reports instead.
|
|
413
423
|
"""
|
|
414
424
|
if not self.result_summary:
|
|
415
425
|
return 0
|
|
@@ -104,14 +104,18 @@ class RichStreamRenderer:
|
|
|
104
104
|
return f"[cyan]>>> TOOL: {escape(event.tool.tool_name)}[/cyan] | {params_str}"
|
|
105
105
|
|
|
106
106
|
if isinstance(event, ToolEndEvent):
|
|
107
|
-
|
|
107
|
+
# result_summary is stored WHOLE (untruncated) at capture; cap it here
|
|
108
|
+
# for the terse live feed so a large command output doesn't flood the
|
|
109
|
+
# console. The reported char count reflects the true (full) length.
|
|
110
|
+
full = event.tool.result_summary or ""
|
|
111
|
+
preview = escape(_truncate(full, _MAX_RESULT_LEN))
|
|
108
112
|
if event.status == ToolEndStatus.OK:
|
|
109
113
|
tag = "[green]<<< OK[/green]"
|
|
110
114
|
elif event.status == ToolEndStatus.UNRESOLVED:
|
|
111
115
|
tag = "[yellow]<<< UNRESOLVED:[/yellow]"
|
|
112
116
|
else:
|
|
113
117
|
tag = f"[red]<<< {escape(event.status.value.upper())}:[/red]"
|
|
114
|
-
return f"{tag} ({len(
|
|
118
|
+
return f"{tag} ({len(full)} chars) {preview}"
|
|
115
119
|
|
|
116
120
|
if isinstance(event, TextChunkEvent):
|
|
117
121
|
return f"[dim]{escape(event.text)}[/dim]"
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"""CE043: Agents must not truncate a command's output when recording it.
|
|
2
|
+
|
|
3
|
+
``CommandTelemetry.result_summary`` is contractually the *untruncated* tool-result
|
|
4
|
+
body, and its length drives the ``result_tokens`` computed field (the cost
|
|
5
|
+
simulator's cache-independent measure of tool-output size). An agent that clips a
|
|
6
|
+
command's captured output before storing it silently under-reports every tool
|
|
7
|
+
result — exactly the bug the Codex agent shipped with (``f"Output: {output[:100]}"``),
|
|
8
|
+
which pinned ~77% of its Bash results at ~31 tokens and skewed the cost model.
|
|
9
|
+
|
|
10
|
+
This rule flags, inside ``src/coder_eval/agents/``, a constant-upper-bound slice
|
|
11
|
+
(``x[:N]``) applied to a value that denotes captured command output:
|
|
12
|
+
|
|
13
|
+
* a name whose id is/ends with ``output`` / ``stdout`` / ``stderr``
|
|
14
|
+
(e.g. ``output[:100]``, ``aggregated_output[:512]``, ``proc_stdout[:80]``)
|
|
15
|
+
* an attribute access ``.aggregated_output`` / ``.output`` / ``.stdout`` / ``.stderr``
|
|
16
|
+
(e.g. ``command_item.aggregated_output[:100]``)
|
|
17
|
+
|
|
18
|
+
Store the output whole (it is already bounded by the harness's own exec-output
|
|
19
|
+
truncation) and trim for DISPLAY in the renderers/reports instead.
|
|
20
|
+
|
|
21
|
+
Add ``# noqa: CE043`` on the offending line for a genuinely non-recorded use
|
|
22
|
+
(e.g. slicing stdout only to build a short crash/log message that never becomes a
|
|
23
|
+
``result_summary``), with a comment explaining why.
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
import ast
|
|
27
|
+
|
|
28
|
+
from tests.lint.rules.base import BaseRule
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
_OUTPUT_NAMES = {"output", "stdout", "stderr", "aggregated_output"}
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _denotes_output(value: ast.AST) -> str | None:
|
|
35
|
+
"""Return the output-ish identifier being sliced, or None."""
|
|
36
|
+
if isinstance(value, ast.Name):
|
|
37
|
+
low = value.id.lower()
|
|
38
|
+
if low in _OUTPUT_NAMES or low.endswith("_output") or low.endswith("_stdout") or low.endswith("_stderr"):
|
|
39
|
+
return value.id
|
|
40
|
+
elif isinstance(value, ast.Attribute):
|
|
41
|
+
if value.attr.lower() in _OUTPUT_NAMES:
|
|
42
|
+
return value.attr
|
|
43
|
+
return None
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _is_const_upper_slice(sl: ast.AST) -> bool:
|
|
47
|
+
"""True for ``[:N]`` / ``[:N:...]`` with a constant int upper bound."""
|
|
48
|
+
return (
|
|
49
|
+
isinstance(sl, ast.Slice)
|
|
50
|
+
and sl.lower is None
|
|
51
|
+
and isinstance(sl.upper, ast.Constant)
|
|
52
|
+
and isinstance(sl.upper.value, int)
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class NoCommandOutputTruncation(BaseRule):
|
|
57
|
+
id = "CE043"
|
|
58
|
+
|
|
59
|
+
def check(self, tree: ast.AST) -> list:
|
|
60
|
+
# Scope to the agent implementations — only they record CommandTelemetry.
|
|
61
|
+
if "/agents/" not in self.filepath.replace("\\", "/"):
|
|
62
|
+
return []
|
|
63
|
+
self.visit(tree)
|
|
64
|
+
return self.violations
|
|
65
|
+
|
|
66
|
+
def visit_Subscript(self, node: ast.Subscript) -> None:
|
|
67
|
+
name = _denotes_output(node.value)
|
|
68
|
+
if name is not None and _is_const_upper_slice(node.slice):
|
|
69
|
+
self.violation(
|
|
70
|
+
node,
|
|
71
|
+
f"Do not truncate command output ({name}[:...]); CommandTelemetry.result_summary "
|
|
72
|
+
"must stay whole (it drives result_tokens). Store the full output and trim for "
|
|
73
|
+
"display in the renderers/reports instead.",
|
|
74
|
+
)
|
|
75
|
+
self.generic_visit(node)
|
|
@@ -24,6 +24,7 @@ from tests.lint.rules.ce032_criteria_path_seam import CriteriaPathSeam
|
|
|
24
24
|
from tests.lint.rules.ce037_no_dead_private_helper import NoDeadPrivateHelper
|
|
25
25
|
from tests.lint.rules.ce038_acquire_inside_try import AcquireInsideTry
|
|
26
26
|
from tests.lint.rules.ce039_config_error_escalates import ConfigErrorEscalates
|
|
27
|
+
from tests.lint.rules.ce043_no_command_output_truncation import NoCommandOutputTruncation
|
|
27
28
|
from tests.lint.rules.no_agent_timing_access import NoAgentTimingAccess
|
|
28
29
|
from tests.lint.rules.no_blocking_io_in_async import NoBlockingIoInAsync
|
|
29
30
|
from tests.lint.rules.no_cli_imports_in_core import NoCliImportsInCore
|
|
@@ -71,6 +72,7 @@ ALL_RULES: list[RuleClass] = [
|
|
|
71
72
|
NoDeadPrivateHelper,
|
|
72
73
|
AcquireInsideTry,
|
|
73
74
|
ConfigErrorEscalates,
|
|
75
|
+
NoCommandOutputTruncation,
|
|
74
76
|
]
|
|
75
77
|
|
|
76
78
|
# Anti-shadow invariant (mirrors AgentRegistry / register_pricing): every CE rule
|
|
@@ -104,3 +104,28 @@ class TestCodexTurnState:
|
|
|
104
104
|
# A tool_use block was recorded into the open buffer (cut at the next
|
|
105
105
|
# tokenUsage flush, not here), joinable to the command by tool_id.
|
|
106
106
|
assert any(b.block_type == "tool_use" and b.tool_use_id == "c1" for b in state.open_blocks)
|
|
107
|
+
|
|
108
|
+
def test_command_output_recorded_whole_not_truncated(self):
|
|
109
|
+
# Regression for the Codex `output[:100]` bug (CE043): result_summary must
|
|
110
|
+
# carry the FULL command output so result_tokens reflects real tool-output
|
|
111
|
+
# size instead of being pinned at a ~31-token, 100-char cap.
|
|
112
|
+
agent = CodexAgent(parse_agent_config(type=AgentKind.CODEX, model="gpt-5-codex"))
|
|
113
|
+
state, commands, _messages = self._state(agent)
|
|
114
|
+
|
|
115
|
+
big_output = "X" * 4000 # far beyond the old 100-char clip
|
|
116
|
+
cmd_root = SimpleNamespace(
|
|
117
|
+
type="commandExecution",
|
|
118
|
+
id="c2",
|
|
119
|
+
command="cat big.txt",
|
|
120
|
+
exit_code=0,
|
|
121
|
+
aggregated_output=big_output,
|
|
122
|
+
duration_ms=5,
|
|
123
|
+
)
|
|
124
|
+
state.on_item_started(_item_notification("item/started", cmd_root))
|
|
125
|
+
state.on_item_completed(_item_notification("item/completed", cmd_root))
|
|
126
|
+
|
|
127
|
+
cmd = commands[0]
|
|
128
|
+
assert big_output in (cmd.result_summary or ""), "full output must be recorded, not truncated"
|
|
129
|
+
# result_tokens (ceil(len/4)) must scale with the real output, not ~31.
|
|
130
|
+
assert cmd.result_tokens >= len(big_output) // 4
|
|
131
|
+
assert cmd.result_tokens > 100
|
|
@@ -60,6 +60,48 @@ class TestCE016NoComputedTokenUsageKwargs:
|
|
|
60
60
|
assert not self._run("ReconciliationMessage(input_tokens=-5)")
|
|
61
61
|
|
|
62
62
|
|
|
63
|
+
@pytest.mark.lint
|
|
64
|
+
class TestCE043NoCommandOutputTruncation:
|
|
65
|
+
"""CE043 flags truncation of captured command output inside agents/, only."""
|
|
66
|
+
|
|
67
|
+
@staticmethod
|
|
68
|
+
def _run(src: str, *, in_agents: bool = True):
|
|
69
|
+
import ast
|
|
70
|
+
|
|
71
|
+
from tests.lint.rules.ce043_no_command_output_truncation import NoCommandOutputTruncation
|
|
72
|
+
|
|
73
|
+
path = "src/coder_eval/agents/codex_agent.py" if in_agents else "src/coder_eval/reports_html.py"
|
|
74
|
+
return NoCommandOutputTruncation(path).check(ast.parse(src))
|
|
75
|
+
|
|
76
|
+
@pytest.mark.parametrize(
|
|
77
|
+
"expr",
|
|
78
|
+
[
|
|
79
|
+
"output[:100]",
|
|
80
|
+
"aggregated_output[:512]",
|
|
81
|
+
"command_item.aggregated_output[:100]",
|
|
82
|
+
"proc_stdout[:80]",
|
|
83
|
+
"result.stderr[:200]",
|
|
84
|
+
'f"Output: {output[:100]}"',
|
|
85
|
+
],
|
|
86
|
+
)
|
|
87
|
+
def test_flags_output_truncation_in_agents(self, expr: str):
|
|
88
|
+
assert self._run(f"x = {expr}"), f"expected CE043 to flag {expr!r}"
|
|
89
|
+
|
|
90
|
+
def test_allows_untruncated_output(self):
|
|
91
|
+
assert not self._run('summary = f"Output: {output}"')
|
|
92
|
+
assert not self._run("summary = aggregated_output")
|
|
93
|
+
|
|
94
|
+
def test_ignores_non_output_slices(self):
|
|
95
|
+
# Legit error/orchestration summaries that are NOT captured command output.
|
|
96
|
+
assert not self._run("detail = summary.result[:200]")
|
|
97
|
+
assert not self._run("msg = content_str[:200]")
|
|
98
|
+
assert not self._run("s = '; '.join(messages)[:200]")
|
|
99
|
+
|
|
100
|
+
def test_scoped_to_agents_only(self):
|
|
101
|
+
# The same pattern outside agents/ is not this rule's concern (display code).
|
|
102
|
+
assert not self._run("preview = output[:100]", in_agents=False)
|
|
103
|
+
|
|
104
|
+
|
|
63
105
|
@pytest.mark.lint
|
|
64
106
|
class TestCE017ModelsLazyAgentImports:
|
|
65
107
|
"""CE017 flags only module-level agents/plugins imports inside models/."""
|
|
@@ -108,6 +108,41 @@ class TestValidateExtraMount:
|
|
|
108
108
|
result = _validate_extra_mount("$MYDIR:/mnt/x")
|
|
109
109
|
assert result.startswith(real_dir + ":")
|
|
110
110
|
|
|
111
|
+
def test_var_expansion_in_destination(self, real_dir, monkeypatch):
|
|
112
|
+
"""``$VAR`` in the destination expands too."""
|
|
113
|
+
monkeypatch.setenv("HOME", "/home/someuser")
|
|
114
|
+
result = _validate_extra_mount(f"{real_dir}:$HOME/.uipath:rw")
|
|
115
|
+
assert result == f"{real_dir}:/home/someuser/.uipath:rw"
|
|
116
|
+
|
|
117
|
+
def test_home_expansion_in_destination(self, real_dir, monkeypatch):
|
|
118
|
+
"""``~`` in the destination expands the same way the source does."""
|
|
119
|
+
monkeypatch.setenv("HOME", "/home/someuser")
|
|
120
|
+
result = _validate_extra_mount(f"{real_dir}:~/.uipath:ro")
|
|
121
|
+
assert result == f"{real_dir}:/home/someuser/.uipath:ro"
|
|
122
|
+
|
|
123
|
+
def test_unset_var_destination_rejected_with_both_forms(self, real_dir):
|
|
124
|
+
"""An unset var is left verbatim, so it must fail loudly."""
|
|
125
|
+
with pytest.raises(ValueError, match="destination must be an absolute path"):
|
|
126
|
+
_validate_extra_mount(f"{real_dir}:$NO_SUCH_VAR_HERE/x:ro")
|
|
127
|
+
|
|
128
|
+
def test_destination_var_expanding_to_reserved_is_rejected(self, real_dir, monkeypatch):
|
|
129
|
+
"""The shadow check runs on the expanded destination."""
|
|
130
|
+
monkeypatch.setenv("SNEAKY", "/work")
|
|
131
|
+
with pytest.raises(ValueError, match="shadows a framework-owned mount"):
|
|
132
|
+
_validate_extra_mount(f"{real_dir}:$SNEAKY:ro")
|
|
133
|
+
|
|
134
|
+
def test_destination_var_carrying_a_colon_is_rejected(self, real_dir, monkeypatch):
|
|
135
|
+
"""A ':' in an expanded value would add fields to the rebuilt spec."""
|
|
136
|
+
monkeypatch.setenv("SNEAKY", "/mnt/x:rw")
|
|
137
|
+
with pytest.raises(ValueError, match="introduced a ':'"):
|
|
138
|
+
_validate_extra_mount(f"{real_dir}:$SNEAKY:ro")
|
|
139
|
+
|
|
140
|
+
def test_source_var_carrying_a_colon_is_rejected(self, monkeypatch):
|
|
141
|
+
"""Same guard on the source side, which is rebuilt the same way."""
|
|
142
|
+
monkeypatch.setenv("SNEAKY", "/mnt/x:rw")
|
|
143
|
+
with pytest.raises(ValueError, match="introduced a ':'"):
|
|
144
|
+
_validate_extra_mount("$SNEAKY:/mnt/y:ro")
|
|
145
|
+
|
|
111
146
|
def test_malformed_no_colon(self):
|
|
112
147
|
with pytest.raises(ValueError, match="expected `src:dst"):
|
|
113
148
|
_validate_extra_mount("just-one-token")
|