coder-eval 0.11.4__tar.gz → 0.11.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- coder_eval-0.11.6/.claude-plugin/marketplace.json +35 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/pr-checks.yml +79 -9
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/verify-published-action.yml +10 -11
- {coder_eval-0.11.4 → coder_eval-0.11.6}/CHANGELOG.md +199 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/CLAUDE.md +1 -1
- {coder_eval-0.11.4 → coder_eval-0.11.6}/PKG-INFO +38 -30
- {coder_eval-0.11.4 → coder_eval-0.11.6}/README.md +36 -29
- coder_eval-0.11.6/action.yml +268 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docker/Dockerfile +15 -9
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/AB_EXPERIMENTS.md +9 -3
- coder_eval-0.11.6/docs/CI_GATE.md +241 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/DIALOG_MODE.md +5 -3
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/EXTENDING.md +2 -2
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/PLUGIN.md +4 -2
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/TASK_DEFINITION_GUIDE.md +5 -5
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/USER_GUIDE.md +1 -1
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/agents/CLAUDE_CODE.md +11 -1
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/agents/HARNESS_PARITY.md +74 -10
- coder_eval-0.11.6/docs/agents/OPENCODE.md +373 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/index.md +7 -6
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/llms.txt +4 -2
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/tutorials/02-ci-pipeline.md +5 -4
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/tutorials/07-plugin-in-claude-code.md +6 -3
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/README.md +68 -9
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/api/download/route.ts +15 -5
- {coder_eval-0.11.4 → coder_eval-0.11.6}/experiments/default.yaml +3 -1
- {coder_eval-0.11.4 → coder_eval-0.11.6}/experiments/plugin-comparison.yaml +3 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/mkdocs.yml +3 -1
- coder_eval-0.11.6/plugins/coder-eval/.claude-plugin/plugin.json +23 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/reference/templates/activation.yaml +17 -4
- {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/skills/analyze/SKILL.md +1 -1
- {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/skills/check-skill/SKILL.md +37 -5
- {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/skills/ci/SKILL.md +69 -52
- {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/skills/init/SKILL.md +1 -1
- {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/skills/lint-tasks/SKILL.md +1 -1
- {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/skills/task/SKILL.md +1 -1
- {coder_eval-0.11.4 → coder_eval-0.11.6}/pyproject.toml +20 -1
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/__init__.py +1 -1
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agents/__init__.py +11 -3
- coder_eval-0.11.6/src/coder_eval/agents/opencode_agent.py +1515 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/run_helpers.py +21 -8
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/skill_triggered.py +5 -1
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/__init__.py +2 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/agent_config.py +45 -1
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/enums.py +1 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/tasks.py +7 -3
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestrator.py +62 -37
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/pricing.py +7 -2
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/utils.py +18 -1
- coder_eval-0.11.6/tasks/opencode_smoke_test.yaml +37 -0
- coder_eval-0.11.6/tests/lint/plugin_manifest_parity.py +101 -0
- coder_eval-0.11.6/tests/lint/rules/ce046_env_info_spreads_super.py +83 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/runner.py +2 -0
- coder_eval-0.11.6/tests/test_action_inputs.py +499 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_claude_settings_enforcement_live.py +39 -17
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_custom_lint.py +362 -35
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_litellm_route.py +13 -7
- coder_eval-0.11.6/tests/test_opencode_agent.py +1897 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_orchestrator.py +127 -43
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_plugin_processing.py +54 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_pricing_registry.py +13 -1
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reference_permissions.py +31 -5
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_route_seam_exhaustiveness.py +6 -2
- coder_eval-0.11.6/tests/test_run_helpers.py +79 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_skill_triggered.py +13 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/uv.lock +2 -2
- coder_eval-0.11.4/.claude-plugin/marketplace.json +0 -17
- coder_eval-0.11.4/action.yml +0 -217
- coder_eval-0.11.4/docs/CI_GATE.md +0 -180
- coder_eval-0.11.4/plugins/coder-eval/.claude-plugin/plugin.json +0 -10
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/commands/coder-eval-code-review-full.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/commands/coder-eval-code-review-wf.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/commands/coder-eval-code-review.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/commands/coder-eval-create-plan.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/commands/coder-eval-implement-plan.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/commands/coder-eval-review.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/harness-candidates.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/shared/axes.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/shared/multi-model-review.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/shared/review-rubric.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/shared/run-layout.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/workflows/cr-axis.js +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.claude/workflows/cr-parent.js +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.env.example +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/CODEOWNERS +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/actionlint.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/code_review.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/dependabot.yml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/pages-stub/index.html +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/scripts/release_notes.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/claude-pr-review.yml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/codeql.yml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/conventional-commits.yml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/docker-publish.yml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/docs.yml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/publish-testpypi.yml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.github/workflows/release.yml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.gitignore +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.pre-commit-config.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/.python-version +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/ADOPTERS.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/CODE_OF_CONDUCT.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/CONTRIBUTING.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/LICENSE +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/Makefile +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/NOTICE +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/SECURITY.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/comparison.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docker/Dockerfile.runtime +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docker/coder_eval_entrypoint.sh +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docker/coder_eval_runtime_entrypoint.sh +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/DATASETS.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/DOCKER_ISOLATION.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/REPORT_SCHEMA.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/agents/ANTIGRAVITY.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/agents/CODEX.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/assets/hero.gif +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/comparison.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/tutorials/01-first-evaluation.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/tutorials/03-evalboard-local.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/tutorials/04-writing-a-task.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/tutorials/05-comparing-models.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/tutorials/06-use-docker-isolation.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/docs/tutorials/README.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/.gitignore +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/__tests__/harness-badge.test.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/col-help.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/collapsible-rail.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/harness-badge.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/harness-selector.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/scroll-table.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/search-box.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/unit-toggle.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_components/version-list.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_lib/__tests__/source-param.test.ts +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_lib/source-param.ts +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/__tests__/efficiency-charts.test.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/daily-chart.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/efficiency-charts.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/harness-legend.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/harness-series.ts +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/tag-rail.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/wall-clock-chart.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/_overview/window-summary.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/api/file/route.ts +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/api/refresh/route.ts +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/error.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/globals.css +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/icon.png +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/layout.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/page.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/path-to-ga/page.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/path-to-ga/task-table.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/scribe/page.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/scribe/run-table.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/trends/actions.ts +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/trends/page.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/trends/trends-view.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/watchlist/page.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/next-env.d.ts +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/next.config.mjs +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/package.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/pnpm-lock.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/postcss.config.mjs +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/public/harness/antigravity.png +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/public/harness/claude-code.png +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/public/harness/codex.png +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/public/uipath.png +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/tailwind.config.ts +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/tsconfig.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/vitest.config.ts +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/evalboard/vitest.setup.ts +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/experiments/early-stop-ab.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/experiments/model-comparison.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/experiments/permissions-smoke.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/experiments/prompt-mutations-example.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/experiments/smoke_variants.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/litellm/README.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/litellm/cost_logger.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/litellm/litellm-config.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/litellm/start-litellm.sh +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/osv-scanner.toml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/README.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/reference/cli-setup.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/reference/criteria.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/reference/repo-layout.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/reference/run-layout.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/reference/task-rubric.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/plugins/coder-eval/reference/templates/activation-rows.jsonl +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/scripts/check_commit_msg.sh +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/.gitattributes +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agent.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agents/_logging.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agents/antigravity_agent.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agents/claude_code_agent.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agents/codex_agent.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agents/noop_agent.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agents/registry.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/agents/watchdog.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/analysis.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/__init__.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/aggregate_command.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/console.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/evaluate_command.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/plan_command.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/report_command.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/run_command.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/run_task_internal_command.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/cli/utils.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/config.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/__init__.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/agent_judge.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/base.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/classification_match.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/cli_called.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/command_executed.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/commands_efficiency.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/file_check.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/file_contains.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/file_exists.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/file_matches_regex.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/json_check.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/llm_judge.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/reference_comparison.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/run_command.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/criteria/uipath_eval.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/__init__.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/agent.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/budget.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/categories.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/categorization.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/checker_misuse.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/executor.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/judge.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/reference.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/retry.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/errors/timeout.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/__init__.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/checker.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/judge_context.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/judge_litellm.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/judge_models.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/judge_persistence.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/judge_usage.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/sub_agent.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/summaries.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/evaluation/verdict_tool.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/formatting.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/fs_permissions.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/invocation_log.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/isolation/__init__.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/isolation/docker_runner.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/litellm_cost.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/logging_config.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/container_paths.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/criteria.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/experiment.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/judge.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/judge_defaults.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/limits.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/merge_strategy.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/mutations.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/results.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/routing.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/sandbox.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/telemetry.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/models/templates.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/__init__.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/batch.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/config.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/config_merge.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/early_stop.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/evaluation.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/experiment.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/overrides.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/run_limits.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/orchestration/task_loader.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/path_utils.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/plugins.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/py.typed +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/reports.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/reports_experiment.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/reports_html.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/reports_junit.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/reports_stats.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/resources/__init__.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/resources/tags.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/sandbox.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/scoring/__init__.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/scoring/ast_similarity.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/scoring/complexity.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/scoring/quality.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/scoring/signature_similarity.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/scoring/similarity.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/scoring/token_similarity.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/simulation/__init__.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/simulation/termination.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/simulation/user_simulator.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/streaming/__init__.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/streaming/callbacks.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/streaming/collector.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/streaming/events.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/streaming/renderers.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/streaming/wire.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/src/coder_eval/telemetry.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/README.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agentless_smoke_test.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/antigravity_hello_world.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/claude_hello_world.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/claude_hello_world_docker.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/claude_subagent_test.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/codex_hello_world.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/codex_parallel_commands.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/codex_skills_test.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/codex_string_utils.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/codex_subagent_test.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/subagent_bash_long_input.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/agents/subagent_merge_sort.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/anti_cheat_reference/anti_cheat_reference.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/anti_cheat_reference/reference/solution.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/byod_smoke_test.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/dataset_example.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/datasets/sentiment.jsonl +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/dockerfile_build_example/environment/input.txt +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/early_stop_decision_budget_exceeded.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/early_stop_weighted_high_weight_kills_run.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/early_stop_weighted_low_weight_absorbed.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/fibonacci_with_template.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/hello_date.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/inline_starter_example.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/internal/session_resumption.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/mock_path_dirs_smoke.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/run_limits/max_turns_cap.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/run_limits/turn_timeout.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/README.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/sentiment_classification.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/smoke_agent_judge.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/smoke_budget_exceeded.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/smoke_llm_judge.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/smoke_negative_path.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/smoke_task_timeout.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/smoke_variants.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/test_sandbox.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tasks/token_check.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/templates/byod_smoke_test/Dockerfile +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/templates/fibonacci-starter/README.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/templates/fibonacci-starter/src/main.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/templates/fibonacci-starter/tests/test_main.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/__init__.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/__init__.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/__init__.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/_scrub.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/live_criteria.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/report_snapshots/__init__.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/report_snapshots/run_full.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/_path_helpers.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/conftest.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/fixtures/__init__.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/fixtures/mock_agent.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/fixtures/text_stub_agent.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/__init__.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/action_docs.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/dead_config_fields.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/doc_env_parity.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/doc_examples.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/doc_indexes.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/doc_schema_parity.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/generated.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/live_verdict_contract.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/plugin_reference.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/pyright_config.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/__init__.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/base.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce023_no_proxy_shim_import.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce037_no_dead_private_helper.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce038_acquire_inside_try.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce039_config_error_escalates.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/ce043_no_command_output_truncation.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/no_agent_timing_access.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/no_silent_except.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/no_submodule_model_imports.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/open_explicit_encoding.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/register_criterion_required.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/violation.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/lint/workflow_outputs.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_action_version_pin.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_config_no_timing_fields.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_config_optional_type.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_config_registry_dispatch.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_config_sdk_decoupling.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_golden_master.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_judge_criterion.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_telemetry.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_telemetry_advanced.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agent_timeout.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_agentless.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_aggregate.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_antigravity_agent.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_byoa_plugin.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_byoa_plugin_live.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_byod_feature.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_check_all_async.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_checker_logging.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_classification_match.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cleanup_preservation_guard.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cli_backend_flag.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cli_called_criterion.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cli_empty_glob.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cli_sdk_options.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cli_set_overrides.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cli_telemetry.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cli_type_flag.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_code_review_bugs.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_codex_agent.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_codex_agent_live.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_codex_agent_unit.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_codex_token_mapping.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_command_executed.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_command_statistics.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_command_telemetry_result_data.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_commands_efficiency.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_config_lineage.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_config_merge_engine.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_config_precedence.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_continuous_scoring.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_cost_accounting_paths.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_criterion_result_round_trip.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_dataset_expansion.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_debug_logging.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_docker_build_failure.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_docker_litellm_env.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_docker_runner_container_death.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_docker_runner_mounts.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_docker_runner_stream_limit.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_docker_wildcard_env.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_docker_workdir_live.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_driver_resolver.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_early_stop.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_error_handling.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_evaluate_command.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_evaluator.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_event_collector.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_experiment_cli.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_experiment_loader.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_experiment_models.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_experiment_reports.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_experiment_resolver.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_experiment_runner.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_file_check.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_file_contains_scoring.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_formatting.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_git_clone_failure.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_glob_paths_in_file_criteria.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_heartbeat_watchdog.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_ignore_patterns_negation.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_image_from_dockerfiles.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_integration.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_json_check.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_judge_anthropic.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_judge_bedrock.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_judge_burn_in_live.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_judge_context_builder.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_judge_litellm.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_judge_models.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_judge_persistence.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_lint_no_top_level_run_limits.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_lint_runner.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_litellm_config.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_litellm_cost.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_litellm_cost_logger.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_litellm_judge_live.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_llm_judge_criterion.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_log_tail_buffer.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_logging.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_logging_isolation.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_merge_characterization.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_merge_strategy_annotations.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_merge_unification.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_models.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_mutations.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_new_criteria.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_node_env_config.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_optional_dependencies.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_orchestrator_error_log_tail.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_orchestrator_telemetry.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_overrides_engine.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_parallel.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_path_utils.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_plan_command.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_plugins.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_post_run.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_pr_review_workflow.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_pre_run.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_preservation_mode.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reference_comparison_scoring.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reference_evaluator.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reference_missing_file.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reference_models.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_registry.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_release_notes.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_replicate_stats.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_report_command.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reports.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reports_experiment.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reports_html.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reports_junit.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reports_stats.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_reports_stats_nonfinite.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_resolve_task_files.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_resume.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_retry_logic_comprehensive.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_routing.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_run_command_junit.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_run_command_stdout.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_run_limits_models.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_run_limits_orchestrator.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_run_limits_resolver.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_run_metrics.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_runtime_tool_versions.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sandbox.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sandbox_layer_builder.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sandbox_optional.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sandbox_record_cli.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sandbox_security.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sandbox_symlink_preservation.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sandbox_templates.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_scorers.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_scoring_quality.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sdk_option_classification.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_simulation_config.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_simulation_integration.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_simulation_termination.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_simulation_trials.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_streaming_agent_integration.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_streaming_batch.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_streaming_callbacks.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_streaming_cli.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_streaming_events.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_streaming_orchestrator.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_streaming_renderers.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_streaming_wire.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_sub_agent_runner.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_success_criterion_union.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_suite_rollup.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_summaries.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_tags.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_task_definition_unknown_fields.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_teardown_interrupt.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_telemetry.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_template_env_expansion.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_threshold_enforcement.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_timeout_batch.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_timeout_categorization.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_timeout_exceptions.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_timeout_models.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_timeout_orchestrator.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_token_usage.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_uipath_eval.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_user_simulator.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_utils.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_utterance_extraction.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_variant_prompt_file.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_verdict_tool.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_verify_published_workflow.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_visible_turn_cap.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_watchdog.py +0 -0
- {coder_eval-0.11.4 → coder_eval-0.11.6}/tests/test_yaml_migration.py +0 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json.schemastore.org/claude-code-marketplace.json",
|
|
3
|
+
"name": "coder-eval",
|
|
4
|
+
"owner": {
|
|
5
|
+
"name": "UiPath",
|
|
6
|
+
"email": "coder-eval@uipath.com",
|
|
7
|
+
"url": "https://github.com/UiPath/coder_eval"
|
|
8
|
+
},
|
|
9
|
+
"description": "Test whether your Claude Code skills actually trigger, and benchmark AI coding agents against your own tasks.",
|
|
10
|
+
"plugins": [
|
|
11
|
+
{
|
|
12
|
+
"name": "coder-eval",
|
|
13
|
+
"displayName": "Coder Eval",
|
|
14
|
+
"source": "./plugins/coder-eval",
|
|
15
|
+
"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.",
|
|
16
|
+
"author": { "name": "UiPath", "email": "coder-eval@uipath.com", "url": "https://github.com/UiPath/coder_eval" },
|
|
17
|
+
"homepage": "https://coder-eval.com",
|
|
18
|
+
"repository": "https://github.com/UiPath/coder_eval",
|
|
19
|
+
"license": "Apache-2.0",
|
|
20
|
+
"category": "testing",
|
|
21
|
+
"keywords": [
|
|
22
|
+
"claude-code-skills",
|
|
23
|
+
"skill-testing",
|
|
24
|
+
"skill-activation",
|
|
25
|
+
"evaluation",
|
|
26
|
+
"benchmark",
|
|
27
|
+
"agent-testing",
|
|
28
|
+
"github-actions",
|
|
29
|
+
"sandbox",
|
|
30
|
+
"llm-judge",
|
|
31
|
+
"ci"
|
|
32
|
+
]
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
@@ -997,22 +997,37 @@ jobs:
|
|
|
997
997
|
id: dogfood
|
|
998
998
|
uses: ./
|
|
999
999
|
with:
|
|
1000
|
+
# Exercises what tests/test_action_inputs.py cannot: it asserts the argv
|
|
1001
|
+
# both step scripts build, but only a real runner proves that
|
|
1002
|
+
# `working-directory:` works on a composite step and that a plugin
|
|
1003
|
+
# installed via `--with` is discovered at runtime. Hence a relative
|
|
1004
|
+
# run-dir (landing under tasks/), the bare task filename and the `../`
|
|
1005
|
+
# plugin path, all resolved from `working-directory`.
|
|
1000
1006
|
version: local
|
|
1001
|
-
|
|
1002
|
-
model: claude-haiku-4-5-20251001
|
|
1007
|
+
working-directory: tasks
|
|
1003
1008
|
run-dir: runs/ci-action-dogfood
|
|
1004
|
-
|
|
1005
|
-
#
|
|
1009
|
+
extra-packages: ../tests/fixtures/byoa_demo_plugin
|
|
1010
|
+
# The bracketed `-D` override is the case one-argv-entry-per-line exists
|
|
1011
|
+
# for: `[...]` is a bash character class, so a whitespace-split input
|
|
1012
|
+
# would collapse the list whenever a file in the cwd matched. It adds
|
|
1013
|
+
# Glob to hello_date.yaml's three tools, so the assertions below can tell
|
|
1014
|
+
# "arrived" from "ignored".
|
|
1015
|
+
args: |
|
|
1016
|
+
hello_date.yaml
|
|
1017
|
+
--model
|
|
1018
|
+
claude-haiku-4-5-20251001
|
|
1019
|
+
-D
|
|
1020
|
+
agent.allowed_tools=[Read,Write,Bash,Glob]
|
|
1006
1021
|
# ANTHROPIC_API_KEY reaching the run is proven by the API-backed task
|
|
1007
|
-
# succeeding
|
|
1008
|
-
# the gate path green in CI without flakiness); the second line
|
|
1009
|
-
# exercises multi-line env parsing.
|
|
1010
|
-
minimum-task-score: "0.0"
|
|
1022
|
+
# succeeding; the second line exercises multi-line env parsing.
|
|
1011
1023
|
env: |
|
|
1012
1024
|
ANTHROPIC_API_KEY=${{ secrets.ANTHROPIC_API_KEY }}
|
|
1013
1025
|
CE_DOGFOOD_MARKER=1
|
|
1014
1026
|
|
|
1027
|
+
# In `tasks/` because that is the assertion: `run-dir` is reported exactly as
|
|
1028
|
+
# passed, so a relative one is relative to `working-directory`.
|
|
1015
1029
|
- name: Verify outputs and JUnit file
|
|
1030
|
+
working-directory: tasks
|
|
1016
1031
|
env:
|
|
1017
1032
|
JUNIT: ${{ steps.dogfood.outputs.junit-path }}
|
|
1018
1033
|
RUNDIR: ${{ steps.dogfood.outputs.run-dir }}
|
|
@@ -1023,11 +1038,66 @@ jobs:
|
|
|
1023
1038
|
# our writer emits no DTDs/entities) — stdlib ET is fine here.
|
|
1024
1039
|
python3 -c "import sys, xml.etree.ElementTree as ET; ET.parse(sys.argv[1])" "$JUNIT"
|
|
1025
1040
|
test -f "$RUNDIR/run.json" || { echo "run.json missing"; exit 1; }
|
|
1041
|
+
# An absolute path would mean working-directory was ignored.
|
|
1042
|
+
case "$RUNDIR" in /*) echo "run-dir output was rewritten to an absolute path: $RUNDIR"; exit 1 ;; esac
|
|
1043
|
+
|
|
1044
|
+
# The action does not touch $GITHUB_STEP_SUMMARY: this is both the assertion
|
|
1045
|
+
# that `run-md-path` is real and the recipe the docs hand consumers.
|
|
1046
|
+
- name: Append the run report to the job summary
|
|
1047
|
+
if: always()
|
|
1048
|
+
working-directory: tasks
|
|
1049
|
+
env:
|
|
1050
|
+
RUN_MD: ${{ steps.dogfood.outputs.run-md-path }}
|
|
1051
|
+
run: |
|
|
1052
|
+
set -euo pipefail
|
|
1053
|
+
test -f "$RUN_MD" || { echo "run-md-path output does not exist: $RUN_MD"; exit 1; }
|
|
1054
|
+
cat "$RUN_MD" >> "$GITHUB_STEP_SUMMARY"
|
|
1055
|
+
|
|
1056
|
+
- name: Verify the plugin was discovered and the bracketed override arrived
|
|
1057
|
+
working-directory: tasks
|
|
1058
|
+
env:
|
|
1059
|
+
RUNDIR: ${{ steps.dogfood.outputs.run-dir }}
|
|
1060
|
+
run: |
|
|
1061
|
+
set -euo pipefail
|
|
1062
|
+
|
|
1063
|
+
# `coder-eval` on PATH is the action's uv tool shim, so this interrogates
|
|
1064
|
+
# its environment: a task naming the fixture's agent kind validates only
|
|
1065
|
+
# if the entry point was discovered there, else plan exits 1 with
|
|
1066
|
+
# "No agent registered for type 'byoa-demo'".
|
|
1067
|
+
cat > byoa-probe.yaml <<'YAML'
|
|
1068
|
+
task_id: "action_extra_packages_probe"
|
|
1069
|
+
description: "Validates only when the byoa-demo plugin is discoverable."
|
|
1070
|
+
initial_prompt: "not executed - plan validates without running an agent"
|
|
1071
|
+
agent:
|
|
1072
|
+
type: "byoa-demo"
|
|
1073
|
+
success_criteria:
|
|
1074
|
+
- type: "file_exists"
|
|
1075
|
+
path: "app.py"
|
|
1076
|
+
description: "not executed"
|
|
1077
|
+
YAML
|
|
1078
|
+
coder-eval plan byoa-probe.yaml
|
|
1079
|
+
rm -f byoa-probe.yaml
|
|
1080
|
+
|
|
1081
|
+
# And the `-D` value survived as a 4-element list, not word-split or
|
|
1082
|
+
# glob-rewritten.
|
|
1083
|
+
RUN_JSON="$RUNDIR/run.json" python3 <<'PY'
|
|
1084
|
+
import json, os, sys
|
|
1085
|
+
|
|
1086
|
+
data = json.load(open(os.environ["RUN_JSON"], encoding="utf-8"))
|
|
1087
|
+
rows = data.get("task_results") or []
|
|
1088
|
+
if not rows:
|
|
1089
|
+
sys.exit("run.json has no task_results to check the -D override against")
|
|
1090
|
+
tools = (rows[0].get("agent_config") or {}).get("allowed_tools")
|
|
1091
|
+
expected = ["Read", "Write", "Bash", "Glob"]
|
|
1092
|
+
if tools != expected:
|
|
1093
|
+
sys.exit(f"-D override did not arrive intact: allowed_tools={tools!r}, expected {expected!r}")
|
|
1094
|
+
print(f"bracketed -D override resolved to {tools!r}")
|
|
1095
|
+
PY
|
|
1026
1096
|
|
|
1027
1097
|
- name: Upload dogfood run on failure
|
|
1028
1098
|
if: failure()
|
|
1029
1099
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
1030
1100
|
with:
|
|
1031
1101
|
name: action-dogfood-runs
|
|
1032
|
-
path: runs/ci-action-dogfood/
|
|
1102
|
+
path: tasks/runs/ci-action-dogfood/
|
|
1033
1103
|
retention-days: 7
|
|
@@ -359,13 +359,11 @@ jobs:
|
|
|
359
359
|
echo "--- task YAML:"; cat tasks/published_smoke.yaml
|
|
360
360
|
|
|
361
361
|
# continue-on-error, because this step's exit code is NOT the gate. The action
|
|
362
|
-
# exits with coder-eval's own code
|
|
363
|
-
#
|
|
364
|
-
#
|
|
365
|
-
#
|
|
366
|
-
#
|
|
367
|
-
# ARTIFACTS instead. A genuine model/credential outage still surfaces there, via
|
|
368
|
-
# the zero-token assertion.
|
|
362
|
+
# exits with coder-eval's own code, and coder-eval exits 1 on any failed task,
|
|
363
|
+
# so a model flake failing `file_exists` would redden this workflow. This check
|
|
364
|
+
# must answer "does the published action still work", not "is the model still
|
|
365
|
+
# good": the verification step below gates on ARTIFACTS instead. A genuine
|
|
366
|
+
# model/credential outage still surfaces there, via the zero-token assertion.
|
|
369
367
|
- name: Run the published action
|
|
370
368
|
id: run
|
|
371
369
|
continue-on-error: true
|
|
@@ -373,11 +371,12 @@ jobs:
|
|
|
373
371
|
with:
|
|
374
372
|
# `version:` intentionally omitted -- the whole point is to exercise the
|
|
375
373
|
# default pin baked into action.yml at the v0 tag.
|
|
376
|
-
tasks: tasks/published_smoke.yaml
|
|
377
|
-
model: claude-haiku-4-5-20251001
|
|
378
374
|
run-dir: runs/verify-published
|
|
379
|
-
|
|
380
|
-
|
|
375
|
+
# Task path and flags both go through `args` — the action promotes no CLI flag.
|
|
376
|
+
args: |
|
|
377
|
+
tasks/published_smoke.yaml
|
|
378
|
+
--model
|
|
379
|
+
claude-haiku-4-5-20251001
|
|
381
380
|
env: |
|
|
382
381
|
ANTHROPIC_API_KEY=${{ secrets.ANTHROPIC_API_KEY }}
|
|
383
382
|
|
|
@@ -2,6 +2,205 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- version list -->
|
|
4
4
|
|
|
5
|
+
## v0.11.6 (2026-09-01)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
- **action**: Drop the literal expression syntax from a run-step comment
|
|
10
|
+
([#147](https://github.com/UiPath/coder_eval/pull/147),
|
|
11
|
+
[`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
|
|
12
|
+
|
|
13
|
+
- **action**: Stop the env passthrough mutating the action's own shell
|
|
14
|
+
([#147](https://github.com/UiPath/coder_eval/pull/147),
|
|
15
|
+
[`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
|
|
16
|
+
|
|
17
|
+
- **docs**: Drop the last references to inputs that no longer exist
|
|
18
|
+
([#147](https://github.com/UiPath/coder_eval/pull/147),
|
|
19
|
+
[`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
|
|
20
|
+
|
|
21
|
+
- **evalboard**: Even out the variant tiles and keep a task's arms adjacent
|
|
22
|
+
([#145](https://github.com/UiPath/coder_eval/pull/145),
|
|
23
|
+
[`6780227`](https://github.com/UiPath/coder_eval/commit/6780227e5e431b4c1099f2f88839be37540dcd71))
|
|
24
|
+
|
|
25
|
+
- **evalboard**: Resolve a variant-less task link to the task's first arm
|
|
26
|
+
([#145](https://github.com/UiPath/coder_eval/pull/145),
|
|
27
|
+
[`6780227`](https://github.com/UiPath/coder_eval/commit/6780227e5e431b4c1099f2f88839be37540dcd71))
|
|
28
|
+
|
|
29
|
+
### Documentation
|
|
30
|
+
|
|
31
|
+
- **action**: Trim the comment bulk on the eight-input surface
|
|
32
|
+
([#147](https://github.com/UiPath/coder_eval/pull/147),
|
|
33
|
+
[`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
|
|
34
|
+
|
|
35
|
+
- **evalboard**: Trim variant commentary and redundant tests
|
|
36
|
+
([#145](https://github.com/UiPath/coder_eval/pull/145),
|
|
37
|
+
[`6780227`](https://github.com/UiPath/coder_eval/commit/6780227e5e431b4c1099f2f88839be37540dcd71))
|
|
38
|
+
|
|
39
|
+
### Features
|
|
40
|
+
|
|
41
|
+
- **action**: Add working-directory, extras, extra-packages, prerelease and args inputs
|
|
42
|
+
([#147](https://github.com/UiPath/coder_eval/pull/147),
|
|
43
|
+
[`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
|
|
44
|
+
|
|
45
|
+
- **action**: Refactor github action input surface around args; harden env passthrough
|
|
46
|
+
([#147](https://github.com/UiPath/coder_eval/pull/147),
|
|
47
|
+
[`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
|
|
48
|
+
|
|
49
|
+
- **evalboard**: Register an unlisted gha source for ad-hoc dispatch runs
|
|
50
|
+
([#147](https://github.com/UiPath/coder_eval/pull/147),
|
|
51
|
+
[`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
|
|
52
|
+
|
|
53
|
+
- **evalboard**: Render multi-variant runs, one row per (task, arm)
|
|
54
|
+
([#145](https://github.com/UiPath/coder_eval/pull/145),
|
|
55
|
+
[`6780227`](https://github.com/UiPath/coder_eval/commit/6780227e5e431b4c1099f2f88839be37540dcd71))
|
|
56
|
+
|
|
57
|
+
### Refactoring
|
|
58
|
+
|
|
59
|
+
- **action**: Drop every forwarding input; flags go through args
|
|
60
|
+
([#147](https://github.com/UiPath/coder_eval/pull/147),
|
|
61
|
+
[`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
|
|
62
|
+
|
|
63
|
+
- **evalboard**: Drop the variant colour palette and the spread helper
|
|
64
|
+
([#145](https://github.com/UiPath/coder_eval/pull/145),
|
|
65
|
+
[`6780227`](https://github.com/UiPath/coder_eval/commit/6780227e5e431b4c1099f2f88839be37540dcd71))
|
|
66
|
+
|
|
67
|
+
- **evalboard**: Report pass rate per arm instead of alongside a blended one
|
|
68
|
+
([#145](https://github.com/UiPath/coder_eval/pull/145),
|
|
69
|
+
[`6780227`](https://github.com/UiPath/coder_eval/commit/6780227e5e431b4c1099f2f88839be37540dcd71))
|
|
70
|
+
|
|
71
|
+
### Testing
|
|
72
|
+
|
|
73
|
+
- Drop the skip-guard unit test ([#146](https://github.com/UiPath/coder_eval/pull/146),
|
|
74
|
+
[`d679ff2`](https://github.com/UiPath/coder_eval/commit/d679ff2667f2c1e76a5d6384059107be4538c750))
|
|
75
|
+
|
|
76
|
+
- Skip the enforcement live tests when the agent declines to try
|
|
77
|
+
([#146](https://github.com/UiPath/coder_eval/pull/146),
|
|
78
|
+
[`d679ff2`](https://github.com/UiPath/coder_eval/commit/d679ff2667f2c1e76a5d6384059107be4538c750))
|
|
79
|
+
|
|
80
|
+
- **action**: Record stub argv from bash so Windows argv is byte-exact
|
|
81
|
+
([#147](https://github.com/UiPath/coder_eval/pull/147),
|
|
82
|
+
[`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
|
|
83
|
+
|
|
84
|
+
- **action**: Stop Git Bash rewriting the absolute path in the install-spec tests
|
|
85
|
+
([#147](https://github.com/UiPath/coder_eval/pull/147),
|
|
86
|
+
[`7b81456`](https://github.com/UiPath/coder_eval/commit/7b81456e4f4ef8d26eaa9fdf8afe499376164d6b))
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
## v0.11.5 (2026-08-28)
|
|
90
|
+
|
|
91
|
+
### Bug Fixes
|
|
92
|
+
|
|
93
|
+
- **opencode**: Bound the post-EOF reap, reap the whole process group, test every failure path
|
|
94
|
+
([#115](https://github.com/UiPath/coder_eval/pull/115),
|
|
95
|
+
[`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
|
|
96
|
+
|
|
97
|
+
- **opencode**: Close the remaining review findings on the harness
|
|
98
|
+
([#115](https://github.com/UiPath/coder_eval/pull/115),
|
|
99
|
+
[`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
|
|
100
|
+
|
|
101
|
+
- **opencode**: Gate on captured tokens, canonicalize tool args, pin max_turns
|
|
102
|
+
([#115](https://github.com/UiPath/coder_eval/pull/115),
|
|
103
|
+
[`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
|
|
104
|
+
|
|
105
|
+
- **opencode**: Inject plugin skills so skill suites measure the skills
|
|
106
|
+
([#115](https://github.com/UiPath/coder_eval/pull/115),
|
|
107
|
+
[`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
|
|
108
|
+
|
|
109
|
+
- **opencode**: Keep the smoke task out of the CI smoke-pass bucket
|
|
110
|
+
([#115](https://github.com/UiPath/coder_eval/pull/115),
|
|
111
|
+
[`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
|
|
112
|
+
|
|
113
|
+
- **opencode**: Map apply_patch to Write so GPT-family edits are seen by criteria
|
|
114
|
+
([#115](https://github.com/UiPath/coder_eval/pull/115),
|
|
115
|
+
[`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
|
|
116
|
+
|
|
117
|
+
- **opencode**: Reap the CLI on every turn exit, test the sandbox env contract
|
|
118
|
+
([#115](https://github.com/UiPath/coder_eval/pull/115),
|
|
119
|
+
[`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
|
|
120
|
+
|
|
121
|
+
- **opencode**: Spread super() in get_environment_info; guard with CE046
|
|
122
|
+
([#115](https://github.com/UiPath/coder_eval/pull/115),
|
|
123
|
+
[`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
|
|
124
|
+
|
|
125
|
+
- **opencode**: Typecheck on Windows, satisfy both CodeQL findings
|
|
126
|
+
([#115](https://github.com/UiPath/coder_eval/pull/115),
|
|
127
|
+
[`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
|
|
128
|
+
|
|
129
|
+
- **plugin**: Close the review's verified gaps — regex blind spot, parallel surfaces, runtime guard
|
|
130
|
+
([#143](https://github.com/UiPath/coder_eval/pull/143),
|
|
131
|
+
[`c565ebb`](https://github.com/UiPath/coder_eval/commit/c565ebb8c8c7d895489d2ae6e244959ba12470af))
|
|
132
|
+
|
|
133
|
+
- **plugin**: Correct the skill-reachability path — every generated activation suite reports recall
|
|
134
|
+
0.0 ([#143](https://github.com/UiPath/coder_eval/pull/143),
|
|
135
|
+
[`c565ebb`](https://github.com/UiPath/coder_eval/commit/c565ebb8c8c7d895489d2ae6e244959ba12470af))
|
|
136
|
+
|
|
137
|
+
- **plugin**: Correct the skill-reachability path, and reuse PR #109's measured descriptions
|
|
138
|
+
([#143](https://github.com/UiPath/coder_eval/pull/143),
|
|
139
|
+
[`c565ebb`](https://github.com/UiPath/coder_eval/commit/c565ebb8c8c7d895489d2ae6e244959ba12470af))
|
|
140
|
+
|
|
141
|
+
- **routing**: Decouple simulator route from checker_context.api_route
|
|
142
|
+
([#144](https://github.com/UiPath/coder_eval/pull/144),
|
|
143
|
+
[`88ff0f0`](https://github.com/UiPath/coder_eval/commit/88ff0f0ff910f4c3d9c6b81c5b2b88356240a3c4))
|
|
144
|
+
|
|
145
|
+
- **routing**: Reinstate litellm+agent_judge rejection guard
|
|
146
|
+
([#144](https://github.com/UiPath/coder_eval/pull/144),
|
|
147
|
+
[`88ff0f0`](https://github.com/UiPath/coder_eval/commit/88ff0f0ff910f4c3d9c6b81c5b2b88356240a3c4))
|
|
148
|
+
|
|
149
|
+
- **routing**: Restore LiteLLM->Claude pin on simulator_route
|
|
150
|
+
([#144](https://github.com/UiPath/coder_eval/pull/144),
|
|
151
|
+
[`88ff0f0`](https://github.com/UiPath/coder_eval/commit/88ff0f0ff910f4c3d9c6b81c5b2b88356240a3c4))
|
|
152
|
+
|
|
153
|
+
- **test**: Add CE045, document the plugin-path divergence, unpin a test from ordering
|
|
154
|
+
([#143](https://github.com/UiPath/coder_eval/pull/143),
|
|
155
|
+
[`c565ebb`](https://github.com/UiPath/coder_eval/commit/c565ebb8c8c7d895489d2ae6e244959ba12470af))
|
|
156
|
+
|
|
157
|
+
- **utils**: Use explicit concatenation in the plugin-root warning
|
|
158
|
+
([#143](https://github.com/UiPath/coder_eval/pull/143),
|
|
159
|
+
[`c565ebb`](https://github.com/UiPath/coder_eval/commit/c565ebb8c8c7d895489d2ae6e244959ba12470af))
|
|
160
|
+
|
|
161
|
+
### Chores
|
|
162
|
+
|
|
163
|
+
- **opencode**: Standardize on deepseek-v4-pro, drop the flash-0731 rate entry
|
|
164
|
+
([#115](https://github.com/UiPath/coder_eval/pull/115),
|
|
165
|
+
[`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
|
|
166
|
+
|
|
167
|
+
- **plugin**: Answer "skills only?", fold tags into keywords, add CE044
|
|
168
|
+
([#141](https://github.com/UiPath/coder_eval/pull/141),
|
|
169
|
+
[`2ae9b7b`](https://github.com/UiPath/coder_eval/commit/2ae9b7badb10831a11d81e703aa5e7a981616ace))
|
|
170
|
+
|
|
171
|
+
- **plugin**: Give both author objects the same contact address
|
|
172
|
+
([#141](https://github.com/UiPath/coder_eval/pull/141),
|
|
173
|
+
[`2ae9b7b`](https://github.com/UiPath/coder_eval/commit/2ae9b7badb10831a11d81e703aa5e7a981616ace))
|
|
174
|
+
|
|
175
|
+
- **plugin**: Give the marketplace owner a contact address
|
|
176
|
+
([#141](https://github.com/UiPath/coder_eval/pull/141),
|
|
177
|
+
[`2ae9b7b`](https://github.com/UiPath/coder_eval/commit/2ae9b7badb10831a11d81e703aa5e7a981616ace))
|
|
178
|
+
|
|
179
|
+
- **plugin**: Lead both manifests with skill evaluation, add discovery metadata
|
|
180
|
+
([#141](https://github.com/UiPath/coder_eval/pull/141),
|
|
181
|
+
[`2ae9b7b`](https://github.com/UiPath/coder_eval/commit/2ae9b7badb10831a11d81e703aa5e7a981616ace))
|
|
182
|
+
|
|
183
|
+
- **plugin**: Pin both manifests to their published JSON schemas
|
|
184
|
+
([#141](https://github.com/UiPath/coder_eval/pull/141),
|
|
185
|
+
[`2ae9b7b`](https://github.com/UiPath/coder_eval/commit/2ae9b7badb10831a11d81e703aa5e7a981616ace))
|
|
186
|
+
|
|
187
|
+
### Documentation
|
|
188
|
+
|
|
189
|
+
- **opencode**: Note _TERM_GRACE_SECONDS's second role as the post-EOF exit grace
|
|
190
|
+
([#115](https://github.com/UiPath/coder_eval/pull/115),
|
|
191
|
+
[`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
|
|
192
|
+
|
|
193
|
+
### Features
|
|
194
|
+
|
|
195
|
+
- **agents**: Add OpenCode harness with opt-in [opencode] extra
|
|
196
|
+
([#115](https://github.com/UiPath/coder_eval/pull/115),
|
|
197
|
+
[`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
|
|
198
|
+
|
|
199
|
+
- **opencode**: Add require_token_telemetry, an escape hatch for the zero-token guard
|
|
200
|
+
([#115](https://github.com/UiPath/coder_eval/pull/115),
|
|
201
|
+
[`5532b87`](https://github.com/UiPath/coder_eval/commit/5532b87ac218f6e413479ad7e2eb8d11d89686b9))
|
|
202
|
+
|
|
203
|
+
|
|
5
204
|
## v0.11.4 (2026-08-27)
|
|
6
205
|
|
|
7
206
|
### Chores
|
|
@@ -144,7 +144,7 @@ action.yml # Published composite GitHub Action (coder-ev
|
|
|
144
144
|
- **Sub-agent token accounting**: There is NO separate per-sub-agent field. Every sub-agent generation is captured as a `parent_tool_use_id`-tagged `AssistantMessage` in the turn transcript, so per-sub-agent usage is derived by grouping those messages on that id (the evalboard's `aggregateSubAgentUsage` does exactly this). Claude bubbles its sub-agent's intermediate generations into the parent stream natively, and the **terminal** generation (delivered as the Agent tool result, never streamed) is synthesized into one via `_synthesize_subagent_terminal_message` from `tool_use_result.usage`. Codex reconstructs all child generations from the child rollout (`_recover_subagent_tool_calls`). The turn total already includes sub-agent cost — Claude via the SDK's cumulative `model_usage`; Codex via `_fold_subagent_tokens`, which folds the child messages (their real per-generation tokens) into the parent total. `CommandTelemetry.result_summary` is stored **untruncated** (no 200-char cap) so sub-agent returns are preserved whole. Set `CODER_EVAL_RAW_SDK_LOG=1` to dump every raw SDK event to the task log for inspection.
|
|
145
145
|
- **Reconciliation message (stream self-reconciles to the turn total)**: The per-message stream consistently under-reports the authoritative turn total — a fixed prompt slice (~512 input tokens on Claude) is billed on no SDK-emitted message, and sub-agent input/cache only partially bubbles up. So `EventCollector.build_turn_record` appends one synthetic `ReconciliationMessage` (`role="reconciliation"`, in the `TranscriptMessage` union) per turn, carrying the per-bucket residual = `token_usage` − Σ(assistant message buckets). The invariant: **summing the four token buckets across `TurnRecord.messages` (assistant + reconciliation) equals `token_usage` exactly**, for both Claude and Codex (Codex's stream is already complete after `_recover_subagent_tool_calls`, so its residual is usually 0 and no entry is emitted). This is what lets the evalboard SUM the message stream as the source of truth instead of reading a separate aggregate ("agent tokens"): `selectTokenTotals` returns the stream sum whenever a reconciliation entry is present, and the timeline renders it as its own row. It is agent-agnostic (booked at the single `EventCollector` seam), carries no cost (cost stays on `token_usage`), and is excluded from generation/turn counts and the cost simulator. The LiteLLM open-weight actual-cost join (`litellm_cost.apply_actual_cost`) deliberately writes cost at the TURN level only (`token_usage.total_cost_usd` = the real OpenRouter bill) plus the per-call `TurnRecord.provider_call_costs` audit record; it does NOT touch the message token buckets, so `EventCollector` stays the single writer and this invariant holds on every backend. The Python `token_usage`/`total_token_usage` aggregate is unchanged and still authoritative for budget/judges/reports.
|
|
146
146
|
- **Reference solutions are directory-only, and shielded (partially) from the agent**: `task.reference` is a single required `directory:` (relative to the task YAML) — the inline `code:` / single-file `file:` forms are gone, because a directory is the only shape that can be permission-gated as a unit; a `model_validator(mode="before")` gives the removed forms a migration error. The orchestrator stages a **per-run private copy** (`orchestration/evaluation.py::stage_reference_dir`, symlinks stripped) into a tempdir, removed in `_cleanup` via `path_utils.rmtree_restrictive` (keyed on `_reference_staging_root`, recorded BEFORE the copy so a failed copy still cleans up; `rmtree(ignore_errors=True)` silently declines on a tree left at 000) and deliberately never preserved into `run_dir/artifacts`. That copy is held at mode `000` for the whole of every `agent.communicate` call via **`Sandbox.set_permissions`**, the driver-aware wrapper over `fs_permissions.py::set_permissions`. Windows **stack**: exiting restores the *enclosing* window's mode, only the outermost exit restores the pre-window mode — that is what makes a mid-turn re-grant (`mode=READ_ONLY_MODE`) expressible, and it covers two windows at the same mode so no refcount is needed. The window is enforced **only inside a docker container** (`Sandbox.enforces_permission_windows`) and is a no-op on the host, where the agent shares our uid. **That gate keys on the `CODER_EVAL_IN_CONTAINER` env var, NOT `sandbox.driver`** — `run_task_internal_command` rewrites `driver: docker` → `tempdir` before building the in-container Orchestrator, so a driver-based gate would silently disable the anti-cheat on exactly the path that needs it (regression-guarded by `TestSandboxDriverGate`); `resolve_reference_dir` gates its `/work/references` branch on the same var for the same reason. The task directory is **not** shielded (`:ro` mount → EROFS, and the same YAML is readable at `/work/input`). Criteria address reference files with the `$REFERENCE_DIR` token (same resolver as `$TASK_DIR`) and the `REFERENCE_DIR` env var for `run_command`; `reference_comparison` names one file via `reference_file`. Docker mounts a throwaway **read-write** copy at `/work/references` (a `:ro` mount cannot be chmod'd — EROFS), masks the in-task-dir original with an empty tmpfs, and drops `DAC_OVERRIDE`/`DAC_READ_SEARCH`. `FOWNER`/`CHOWN` are deliberately **NOT** dropped: the in-container orchestrator that applies the window is the same root process with the same caps, so dropping `FOWNER` breaks *the harness's own* chmod wherever the bind mount preserves a non-root owner (native Linux — verified: `chmod: Operation not permitted`), i.e. exactly where the drop would otherwise bite. A window that cannot be applied is now a hard error, not a warning: `Sandbox.set_permissions` passes `strict=True` whenever it enforces, so an unprotected run fails instead of producing a normal-looking score. **KNOWN GAP — this is defense-in-depth, not a boundary**: (a) `chmod(2)` is gated on owner-or-`CAP_FOWNER` and the container runs as root owning the copy, so a deliberate `chmod 755 /work/references` restores access; (b) the window spans `agent.communicate` only, and nothing reaps agent child processes at turn end, so a backgrounded read loop succeeds once the window closes. The **write** half of (b) is closed — `path_utils.digest_tree` hashes the tree at staging and `Orchestrator._verify_reference_integrity` re-checks before grading, raising `ReferenceTamperedError` (→ `FinalStatus.ERROR`) on a mismatch so an agent cannot overwrite the reference to drive `reference_comparison` to 1.0. Passive reads are blocked; an adversarial agent is not. Full containment requires running the agent as a non-root uid AND holding the window for the agent's whole lifetime — follow-up. `tasks/anti_cheat_reference` probes the passive-read half.
|
|
147
|
-
- **Harness run-limit parity**: a shared `BaseAgentConfig` field must mean the same thing on every backend, so a divergence is either fixed or documented — never silent. **`run_limits.max_turns` on Codex/Antigravity counts VISIBLE turns** (resolved tool calls, read live off the shared `EventCollector.visible_turn_count`, the same list `TurnRecord.commands` holds) because one `communicate()` is a single SDK turn on both, so a native counter would clamp at 1; claude-code keeps its native SDK cap, whose unit (an agent-loop turn) absorbs arbitrarily many parallel calls — the same number is NOT the same budget across harnesses. The cap is enforced on the same loop boundary as the cooperative early stop and finalizes cleanly as `max_turns_exhausted` (no crash, no retry); on Antigravity that boundary lives in `_drain()`, so the background-work poll loop honors it too. Known unfixed divergences: `permission_mode` on Codex and Antigravity (both run unconfined — the sandbox driver is the isolation boundary), `disallowed_tools` on Codex (forwarded, not SDK-enforced), `allowed_tools`/`disallowed_tools` on Antigravity (not read at all),
|
|
147
|
+
- **Harness run-limit parity**: a shared `BaseAgentConfig` field must mean the same thing on every backend, so a divergence is either fixed or documented — never silent. **`run_limits.max_turns` on Codex/Antigravity counts VISIBLE turns** (resolved tool calls, read live off the shared `EventCollector.visible_turn_count`, the same list `TurnRecord.commands` holds) because one `communicate()` is a single SDK turn on both, so a native counter would clamp at 1; claude-code keeps its native SDK cap, whose unit (an agent-loop turn) absorbs arbitrarily many parallel calls — the same number is NOT the same budget across harnesses. OpenCode likewise keeps a native unit — the CLI streams a real multi-step loop per `communicate()` (`step_start`/`step_finish`), so `max_turns: N` allows N complete steps and cuts cleanly when step N+1 begins. The cap is enforced on the same loop boundary as the cooperative early stop and finalizes cleanly as `max_turns_exhausted` (no crash, no retry); on Antigravity that boundary lives in `_drain()`, so the background-work poll loop honors it too. Known unfixed divergences: `permission_mode` on Codex and Antigravity (both run unconfined — the sandbox driver is the isolation boundary), `disallowed_tools` on Codex (forwarded, not SDK-enforced), `allowed_tools`/`disallowed_tools` on Antigravity (not read at all), `turn_timeout` on Antigravity (bounded by an earlier internal poll deadline at 80% of it), `allowed_tools`/`disallowed_tools`/`system_prompt` on OpenCode (no CLI knob; warned at `start()`, not enforced), and **`agent.plugins[].path` depth** — claude-code REQUIRES a plugin root holding `skills/` and silently loads NOTHING from a bare skills directory, while Codex and Antigravity scan both depths and accept either. That is the costly direction: the wrong depth produces no error, every positive row of an activation suite scores 0, and the suite reports recall 0.0, which reads exactly like a skill that never triggers. Held to the plugin-root shape (for `SKILL_SOURCE_PATH` only) by lint rule CE045. `plugins` on OpenCode is **honored for skills**: each local plugin root is mapped to the `skills` dir its `.claude-plugin/plugin.json` declares (default `<root>/skills`, never the root itself — `skills.paths` is scanned recursively and a plugin root can hold a self-referential symlink) and injected via `OPENCODE_CONFIG_CONTENT`, which `--pure` does not suppress; a plugin's agents/hooks/commands/MCP servers are still dropped. Full table + rationale: docs/agents/HARNESS_PARITY.md.
|
|
148
148
|
- **sandbox isolation**: Tasks that don't need MCP servers should set `setting_sources: []` in their `agent:` block to isolate the sandbox from the host project's CLAUDE.md and settings. Without this, the host project's CLAUDE.md (often 20 KB+) is injected into every API call, inflating cache-creation tokens and cost significantly.
|
|
149
149
|
- **Run-time caps (non-criterion enforcement)**: `TaskDefinition.run_limits` (`RunLimits` model) is the single namespace for all *task-level* run-time caps — `max_turns` / `task_timeout` / `turn_timeout` (structural) and `max_input_tokens` / `max_output_tokens` / `max_total_tokens` / `max_usd` (cumulative budget). Token/USD breaches abort with `FinalStatus.TOKEN_BUDGET_EXCEEDED` or `COST_BUDGET_EXCEEDED` (both `category == "failed"`). Structural caps are set from the CLI via `-D run_limits.max_turns=…` / `-D run_limits.task_timeout=…` / `-D run_limits.turn_timeout=…` (field-merged into `run_limits`); budget caps via `-D run_limits.max_usd=…` etc. or YAML. Layered config uses field-merge — a variant block overrides individual keys without replacing the task's block. The one *per-criterion* cap, `stop_early.decide_within`, deliberately lives on `LiveSuccessCriterion` instead (see below) — the watcher must attribute a decision-step timeout to a specific criterion, which `RunLimits` (task-scoped, criterion-agnostic) cannot express.
|
|
150
150
|
- **Early stop on criterion (opt-in, per-criterion arming)**: a `stop_early:` block (`StopEarlyPolicy`) on a criterion ends a single-shot run early once the run's **armed** criteria decide the outcome, so a raised `max_turns` isn't wasted on the smoke flavor. The block's PRESENCE is the arming and alone activates the watcher — there is **no run-level master switch**: `run_limits.stop_early: false` is the run-level KILL SWITCH that force-disarms every block (the one-line experiment-variant/`-D` override for an authoritative full run), and `run_limits.stop_early: true` (the removed master arm) is a hard `EarlyStopConfigError` at resolution. The block exists on `LiveSuccessCriterion` only (currently `skill_triggered`, `command_executed` — so arming an unobservable criterion is unrepresentable, a pydantic extra-forbid error). Arming carries one implicit trigger (a native live-fail may fail-stop the run); its keys refine it: `on_pass: stop` (pass-stop the moment the criterion live-passes; default `continue` just latches) and `decide_within: N` (still undecided after N tool-call steps latches an **effective fail**, fed through the same fail-stop rule, reported as `decision_budget_exceeded` — an ordinary weighted fail, NOT a gate-bypassing force-fail; cumulative across retry attempts of the same turn). A trigger whose polarity the instance can't decide (per the abstract, checker-independent `live_decidable_polarities()`, a pure function of the criterion's own fields, paired with the checker's `live_verdict` override by lint rule CE025, a registry-based whole-tree check) is **inert by design** — one dataset-fanned YAML line serves both positive rows (pass/timeout live) and distractor rows (fail live). Verdicts **latch**: once a criterion decides, its `live_verdict` is never polled again. Stop rule is weighted, not strict-boolean: `run_limits.stop_early_gate_threshold` (default `1.0`, reproducing strict-AND behavior exactly) is the minimum weighted score (`Σ weight·score / Σ weight` over the armed subset) required to pass; a fail-stop fires once the armed set's **ceiling** (best case for everything still undecided) can no longer reach the threshold — so a low-weight fail or timeout that can't doom the gate is absorbed and the run continues — and is **deferred while any pass-capable armed criterion is undecided** (a distractor misfire never truncates a positive row's recall signal); a pass-stop fires once the `on_pass: stop` subset's **floor** (worst case) already meets the threshold, and is symmetrically **deferred while any pass-capable armed criterion outside the `on_pass: stop` subset is undecided** (so an early pass never freezes a sibling `on_pass: continue` criterion's signal out of the trajectory). A fail-stop is therefore verdict-preserving; a pass-stop can miss a *later* distractor misfire, so authoritative P/R/F1 comes from a kill-switched (`stop_early: false`) run. Driven by `orchestration/early_stop.py::EarlyStopWatcher` (built when `early_stop_active(task)`: ≥1 armed criterion, kill switch not thrown) through the agent's cooperative `should_stop` seam (tool-call granularity, no SIGKILL); live verdicts only *trigger* the stop — the standard `check_all_async` on the frozen trajectory is authoritative. Gating is **FIRED-ONLY**: a run the watcher actually cut gates on the **armed subset** via the weighted `EvaluationResult.armed_criteria_passed`; a run that completes naturally — armed or not — gates strict-AND via `all_criteria_passed`, so adding a block never changes the verdict of a run it didn't cut. Note the gate keys on the watcher having FIRED (`result.early_stop is not None`), not on confirmed truncation — an agent that ignores `should_stop`, or a stop firing on the final message, still gates armed-only. Every resolution-time guardrail violation is a hard error at resolution (plan *and* run); the one load-time case — a `stop_early:` block on a non-live criterion — is a pydantic schema error at task load, which the run surface reports as a skipped task like any other malformed task. A runtime verdict bug **fails open** to a full run. Surfaces: `EarlyStopInfo` (incl. `gate_threshold` at stop time), report notes/badges, `stopped_early` run.json rows, `EarlyStopped`/`EarlyStopReason` telemetry dims. Worked rationale: docs/TASK_DEFINITION_GUIDE.md § `stop_early`. No blocks anywhere ⇒ behavior byte-for-byte unchanged.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: coder-eval
|
|
3
|
-
Version: 0.11.
|
|
3
|
+
Version: 0.11.6
|
|
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
|
|
@@ -60,6 +60,7 @@ Requires-Dist: pytest>=9.0.2; extra == 'dev'
|
|
|
60
60
|
Requires-Dist: ruff>=0.15.7; extra == 'dev'
|
|
61
61
|
Provides-Extra: litellm
|
|
62
62
|
Requires-Dist: litellm<2.0.0,>=1.95.0; extra == 'litellm'
|
|
63
|
+
Provides-Extra: opencode
|
|
63
64
|
Provides-Extra: uipath
|
|
64
65
|
Requires-Dist: uipath>=2.10.31; extra == 'uipath'
|
|
65
66
|
Description-Content-Type: text/markdown
|
|
@@ -77,14 +78,14 @@ Description-Content-Type: text/markdown
|
|
|
77
78
|
**Coder Eval** (`pip install coder-eval` / `uv tool install coder-eval`) is an open-source framework for
|
|
78
79
|
**evaluating and benchmarking AI coding agents and their skills** — built for CLI
|
|
79
80
|
and skill builders — with sandboxing, reproducibility, and data-driven analysis.
|
|
80
|
-
It runs a real agent (**Claude Code**, **Codex**,
|
|
81
|
-
Gemini**) in a sandbox against declarative YAML tasks, then scores the files and
|
|
81
|
+
It runs a real agent (**Claude Code**, **Codex**, **Google Antigravity /
|
|
82
|
+
Gemini**, or **OpenCode**) in a sandbox against declarative YAML tasks, then scores the files and
|
|
82
83
|
commands it actually produced. Not an "agentic coding" benchmark: it measures how
|
|
83
84
|
effective your CLI and skills are when used by coding agents.
|
|
84
85
|
|
|
85
86
|
Reach for it when you want to **test whether a Claude Code skill triggers**,
|
|
86
|
-
**A/B-test Claude Code vs. Codex vs. Gemini** (or model vs. model,
|
|
87
|
-
prompt), or **gate CI on coding-agent quality**. Unlike fixed datasets (SWE-bench,
|
|
87
|
+
**A/B-test Claude Code vs. Codex vs. Gemini vs. OpenCode** (or model vs. model,
|
|
88
|
+
prompt vs. prompt), or **gate CI on coding-agent quality**. Unlike fixed datasets (SWE-bench,
|
|
88
89
|
SkillsBench) that rank models on a shared leaderboard, Coder Eval evaluates the
|
|
89
90
|
tasks, skills, and workflows *you* ship — with weighted 0.0–1.0 criteria, a
|
|
90
91
|
`skill_triggered` activation check, an A/B experiment layer, and per-tool cost
|
|
@@ -99,14 +100,14 @@ telemetry. See [How it compares](https://coder-eval.com/docs/comparison).
|
|
|
99
100
|
- **Sandboxed execution** in isolated environments with resource limits
|
|
100
101
|
- **Weighted, continuous scoring** (0.0–1.0) with fractional credit and thresholds
|
|
101
102
|
- **Many criterion types** — from file checks to code similarity and LLM-graded rubrics
|
|
102
|
-
- **Agent abstraction** — Claude Code, Codex,
|
|
103
|
+
- **Agent abstraction** — Claude Code, Codex, Antigravity (Gemini), and OpenCode today, extensible via a plugin SPI
|
|
103
104
|
- **Experiment layer** — A/B agent configs (models, tools, prompts) side-by-side
|
|
104
105
|
- **Full telemetry** — every tool call, token counts, and cost, with real-time streaming
|
|
105
106
|
|
|
106
107
|
## What you can do with it
|
|
107
108
|
|
|
108
109
|
- **Benchmark coding agents** — score an agent across a suite of tasks with weighted scoring and pass/fail thresholds
|
|
109
|
-
- **Compare models & configs** — A/B-test Claude vs. Codex vs. Gemini, model vs. model, tool-on vs. tool-off, prompt vs. prompt
|
|
110
|
+
- **Compare models & configs** — A/B-test Claude vs. Codex vs. Gemini vs. OpenCode, model vs. model, tool-on vs. tool-off, prompt vs. prompt
|
|
110
111
|
- **Evaluate skills** — verify an agent actually engages a target skill (`skill_triggered`) and score skill-driven suites (SkillsBench-style)
|
|
111
112
|
- **Keep skills up to date in CI** — re-validate your skills on every change or on a schedule; catch silent regressions when models, prompts, or the skills themselves drift
|
|
112
113
|
- **Gate CI on agent quality** — run the suite in GitHub Actions and fail the build on regressions
|
|
@@ -183,8 +184,8 @@ That adds six slash commands: `/coder-eval:init`, `/coder-eval:check-skill`,
|
|
|
183
184
|
A composite action — on the Marketplace as
|
|
184
185
|
[**coder_eval**](https://github.com/marketplace/actions/coder_eval) — runs
|
|
185
186
|
`coder-eval` as a CI gate. It installs the pinned CLI, runs your tasks, writes a
|
|
186
|
-
JUnit XML report,
|
|
187
|
-
task
|
|
187
|
+
JUnit XML report, reports where its artifacts landed, and fails the step on any
|
|
188
|
+
task failure:
|
|
188
189
|
|
|
189
190
|
```yaml
|
|
190
191
|
- uses: actions/setup-node@v4 # the claude-code agent needs the Claude CLI…
|
|
@@ -192,35 +193,45 @@ task/gate failure:
|
|
|
192
193
|
- run: npm install -g @anthropic-ai/claude-code
|
|
193
194
|
|
|
194
195
|
- uses: UiPath/coder_eval@v0 # …then run the gate (@v1 once 1.0.0 ships; @vX.Y.Z pins exactly)
|
|
196
|
+
id: eval
|
|
195
197
|
with:
|
|
196
|
-
|
|
197
|
-
|
|
198
|
+
args: |
|
|
199
|
+
tests/tasks/**/*.yaml
|
|
200
|
+
--model
|
|
201
|
+
claude-sonnet-5
|
|
198
202
|
env: |
|
|
199
203
|
ANTHROPIC_API_KEY=${{ secrets.ANTHROPIC_API_KEY }}
|
|
200
204
|
```
|
|
201
205
|
|
|
206
|
+
Eight inputs, and **none of them is a `coder-eval run` flag**. The CLI has 21;
|
|
207
|
+
GitHub silently ignores an input the referenced tag does not define, so a
|
|
208
|
+
forwarding input that is mistyped or newer than your pin yields a run that
|
|
209
|
+
measured something else and still exits 0. A wrong CLI flag is a hard error. So
|
|
210
|
+
flags and task globs all go through `args`, and an input exists only where the
|
|
211
|
+
action does something with the value besides pass it along.
|
|
212
|
+
|
|
202
213
|
| Input | Default | Purpose |
|
|
203
214
|
| --- | --- | --- |
|
|
204
|
-
| `
|
|
205
|
-
| `tags` | — | `--tags` filter |
|
|
206
|
-
| `model` | — | `--model` override |
|
|
207
|
-
| `extra-args` | — | Verbatim extra args (`--experiment`, `-D …`, …) |
|
|
215
|
+
| `args` | — | Task paths/globs and every flag for `coder-eval run`, one argument per line, verbatim |
|
|
208
216
|
| `version` | pinned release | PyPI version, or `local` to install from the checkout |
|
|
209
|
-
| `
|
|
210
|
-
| `
|
|
211
|
-
| `
|
|
217
|
+
| `extras` | — | coder-eval extras, composed into the install requirement (`codex`, `antigravity,litellm`) |
|
|
218
|
+
| `extra-packages` | — | Extra requirements installed into coder-eval's environment (`--with`), one per line |
|
|
219
|
+
| `install-flags` | — | Flags for `uv tool install`, one per line (`--prerelease=allow`, `--extra-index-url …`) |
|
|
212
220
|
| `env` | — | Credentials/backend passthrough: newline-separated `NAME=VALUE` pairs, exported for the run step only |
|
|
213
|
-
| `
|
|
221
|
+
| `working-directory` | `.` | Directory every step of the action runs in |
|
|
222
|
+
| `run-dir` | `runs/ci` | Run directory; also where the reports are written |
|
|
214
223
|
|
|
215
|
-
Outputs: `run-dir
|
|
216
|
-
|
|
217
|
-
|
|
224
|
+
Outputs: `run-dir`, `junit-path` (`<run-dir>/junit.xml`) and `run-md-path`
|
|
225
|
+
(`<run-dir>/run.md`). The action writes nothing to the job summary — a consumer
|
|
226
|
+
that has to redact the report first cannot undo a write that already happened:
|
|
218
227
|
|
|
219
228
|
```yaml
|
|
229
|
+
- if: always()
|
|
230
|
+
run: cat "${{ steps.eval.outputs.run-md-path }}" >> "$GITHUB_STEP_SUMMARY"
|
|
220
231
|
- uses: mikepenz/action-junit-report@v5
|
|
221
232
|
if: always()
|
|
222
233
|
with:
|
|
223
|
-
report_paths:
|
|
234
|
+
report_paths: ${{ steps.eval.outputs.junit-path }}
|
|
224
235
|
```
|
|
225
236
|
|
|
226
237
|
**Credentials and backend config** are the sole responsibility of `env` — a
|
|
@@ -230,17 +241,13 @@ it can't leak into later steps). Set whatever the run needs, Anthropic or not:
|
|
|
230
241
|
```yaml
|
|
231
242
|
- uses: UiPath/coder_eval@v0
|
|
232
243
|
with:
|
|
233
|
-
|
|
234
|
-
minimum-task-score: "0.8" # fail the build if any task scores below 0.8
|
|
244
|
+
args: tests/tasks/**/*.yaml
|
|
235
245
|
env: |
|
|
236
246
|
API_BACKEND=bedrock
|
|
237
247
|
AWS_BEARER_TOKEN_BEDROCK=${{ secrets.BEDROCK_TOKEN }}
|
|
238
248
|
```
|
|
239
249
|
|
|
240
|
-
|
|
241
|
-
code: the step fails if *either* coder-eval exits non-zero *or* any task's
|
|
242
|
-
`weighted_score` falls below the floor. Leave it unset to gate on the exit code
|
|
243
|
-
alone.
|
|
250
|
+
The step's exit code is coder-eval's own: non-zero on any failed task.
|
|
244
251
|
|
|
245
252
|
> **Agent runtime is the caller's responsibility.** The action is agent-agnostic —
|
|
246
253
|
> it installs `coder-eval` but no coding-agent runtime, which is why the example
|
|
@@ -275,12 +282,13 @@ alone.
|
|
|
275
282
|
| [Claude Code](docs/agents/CLAUDE_CODE.md) | Configuring and running the default Claude Code agent |
|
|
276
283
|
| [Codex](docs/agents/CODEX.md) | Running the OpenAI Codex agent |
|
|
277
284
|
| [Antigravity (Gemini)](docs/agents/ANTIGRAVITY.md) | Running the Google Antigravity / Gemini agent |
|
|
285
|
+
| [OpenCode](docs/agents/OPENCODE.md) | Running the OpenCode agent on open-weight models |
|
|
278
286
|
| [Run-Limit Parity](docs/agents/HARNESS_PARITY.md) | What each run_limits field means on every harness |
|
|
279
287
|
| [A/B Experiments](docs/AB_EXPERIMENTS.md) | Compare models / tools / prompts across the same tasks |
|
|
280
288
|
| [Bring Your Own Dataset](docs/DATASETS.md) | Fan a single task out over a dataset |
|
|
281
289
|
| [Dialog Mode](docs/DIALOG_MODE.md) | Evaluate agents in multi-turn conversation via a simulated user |
|
|
282
290
|
| [Docker Isolation](docs/DOCKER_ISOLATION.md) | The container sandbox driver, with custom images |
|
|
283
|
-
| [CI Gate & GitHub Action](docs/CI_GATE.md) | Run Coder Eval as a CI gate — the Marketplace Action, JUnit output,
|
|
291
|
+
| [CI Gate & GitHub Action](docs/CI_GATE.md) | Run Coder Eval as a CI gate — the Marketplace Action, JUnit output, run reports |
|
|
284
292
|
| [Claude Code Plugin](docs/PLUGIN.md) | Install the Claude Code plugin — author, run, and analyze suites from inside the agent |
|
|
285
293
|
| [Extending Coder Eval](docs/EXTENDING.md) | Author a custom agent, criterion, or model pricing via the plugin SPI |
|
|
286
294
|
| [Report Schema](docs/REPORT_SCHEMA.md) | Field-level reference for run.json / variant.json / task.json |
|