coder-eval 0.8.6__tar.gz → 0.8.7__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.8.7/.github/workflows/docs.yml +48 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/workflows/release.yml +120 -24
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.gitignore +4 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/CHANGELOG.md +94 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/PKG-INFO +56 -33
- {coder_eval-0.8.6 → coder_eval-0.8.7}/README.md +51 -28
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/AB_EXPERIMENTS.md +7 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/BYOD.md +7 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/CODEX_AGENT_GUIDE.md +9 -2
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/DOCKER_ISOLATION.md +7 -2
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/TASK_DEFINITION_GUIDE.md +13 -2
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/USER_GUIDE.md +9 -0
- coder_eval-0.8.7/docs/comparison.md +153 -0
- coder_eval-0.8.7/docs/index.md +100 -0
- coder_eval-0.8.7/docs/llms.txt +46 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/tutorials/01-first-evaluation.md +12 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/tutorials/02-ci-pipeline.md +7 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/tutorials/03-evalboard-local.md +7 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/tutorials/04-writing-a-task.md +7 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/tutorials/05-comparing-models.md +7 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/tutorials/06-use-docker-isolation.md +9 -2
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/tutorials/README.md +7 -0
- coder_eval-0.8.7/mkdocs.yml +94 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/pyproject.toml +22 -14
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/__init__.py +1 -1
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agents/codex_agent.py +203 -44
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/skill_triggered.py +9 -9
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/fixtures/mock_agent.py +6 -1
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/fixtures/text_stub_agent.py +5 -1
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_codex_agent.py +457 -62
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_early_stop.py +8 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_simulation_integration.py +5 -1
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_skill_triggered.py +16 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/uv.lock +33 -33
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/commands/coder-eval-code-review-full.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/commands/coder-eval-code-review-wf.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/commands/coder-eval-code-review.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/commands/coder-eval-create-plan.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/commands/coder-eval-implement-plan.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/commands/coder-eval-review.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/commands/coder-eval-run-analysis.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/commands/coder-eval-task-create.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/harness-candidates.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/shared/axes.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/shared/multi-model-review.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/shared/review-rubric.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/shared/run-layout.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/workflows/cr-axis.js +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/workflows/cr-parent.js +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.env.example +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/CODEOWNERS +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/code_review.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/dependabot.yml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/workflows/claude-pr-review.yml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/workflows/codeql.yml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/workflows/conventional-commits.yml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/workflows/docker-publish.yml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/workflows/pr-checks.yml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/workflows/publish-testpypi.yml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.pre-commit-config.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/.python-version +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/CLAUDE.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/CODE_OF_CONDUCT.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/CONTRIBUTING.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/LICENSE +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/Makefile +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/NOTICE +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/SECURITY.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docker/Dockerfile +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docker/Dockerfile.runtime +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docker/coder_eval_entrypoint.sh +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docker/coder_eval_runtime_entrypoint.sh +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/IDEAS.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/assets/hero.gif +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/.gitignore +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/README.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/col-help.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/collapsible-rail.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/harness-badge.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/scroll-table.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/search-box.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/unit-toggle.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/version-list.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/window-selector.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_overview/daily-chart.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_overview/tag-rail.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_overview/window-summary.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/api/download/route.ts +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/api/file/route.ts +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/api/refresh/route.ts +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/error.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/globals.css +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/icon.png +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/layout.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/page.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/path-to-ga/page.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/trends/actions.ts +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/trends/page.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/trends/trends-view.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/watchlist/page.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/next-env.d.ts +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/next.config.mjs +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/package.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/pnpm-lock.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/postcss.config.mjs +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/public/harness/antigravity.png +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/public/harness/claude-code.png +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/public/harness/codex.png +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/public/uipath.png +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/tailwind.config.ts +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/tsconfig.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/vitest.config.ts +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/vitest.setup.ts +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/experiments/default.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/experiments/early-stop-ab.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/experiments/model-comparison.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/experiments/permissions-smoke.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/experiments/plugin-comparison.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/experiments/prompt-mutations-example.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/experiments/smoke_variants.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/osv-scanner.toml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/.gitattributes +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agent.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agents/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agents/_logging.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agents/antigravity_agent.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agents/claude_code_agent.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agents/noop_agent.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agents/registry.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agents/watchdog.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/analysis.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/aggregate_command.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/console.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/evaluate_command.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/plan_command.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/report_command.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/run_command.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/run_helpers.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/run_task_internal_command.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/utils.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/config.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/agent_judge.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/base.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/classification_match.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/command_executed.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/commands_efficiency.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/file_check.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/file_contains.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/file_exists.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/file_matches_regex.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/json_check.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/llm_judge.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/reference_comparison.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/run_command.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/uipath_eval.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/agent.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/budget.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/categories.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/categorization.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/executor.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/judge.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/retry.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/timeout.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/checker.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/judge_context.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/judge_models.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/judge_persistence.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/judge_usage.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/sub_agent.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/summaries.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/verdict_tool.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/formatting.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/isolation/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/isolation/docker_runner.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/logging_config.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/agent_config.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/container_paths.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/criteria.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/enums.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/experiment.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/judge.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/judge_defaults.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/limits.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/merge_strategy.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/mutations.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/results.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/routing.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/sandbox.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/tasks.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/telemetry.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/templates.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/batch.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/config.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/config_merge.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/early_stop.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/evaluation.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/experiment.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/overrides.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/task_loader.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestrator.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/path_utils.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/plugins.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/pricing.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/py.typed +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/reports.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/reports_experiment.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/reports_html.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/reports_stats.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/resources/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/resources/tags.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/sandbox.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/scoring/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/scoring/ast_similarity.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/scoring/complexity.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/scoring/quality.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/scoring/signature_similarity.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/scoring/similarity.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/scoring/token_similarity.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/simulation/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/simulation/termination.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/simulation/user_simulator.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/streaming/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/streaming/callbacks.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/streaming/collector.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/streaming/events.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/streaming/renderers.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/streaming/wire.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/telemetry.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/utils.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/README.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agentless_smoke_test.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/antigravity_hello_world.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/claude_hello_world.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/claude_hello_world_docker.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/claude_subagent_test.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/codex_hello_world.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/codex_parallel_commands.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/codex_skills_test.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/codex_string_utils.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/codex_subagent_test.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/subagent_bash_long_input.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/subagent_merge_sort.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/byod_smoke_test.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/dataset_example.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/datasets/sentiment.jsonl +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/dockerfile_build_example/environment/input.txt +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/fibonacci_with_template.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/hello_date.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/inline_starter_example.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/internal/session_resumption.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/mock_path_dirs_smoke.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/README.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/sentiment_classification.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/smoke_agent_judge.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/smoke_budget_exceeded.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/smoke_llm_judge.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/smoke_negative_path.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/smoke_task_timeout.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/smoke_variants.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/test_sandbox.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/token_check.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/templates/byod_smoke_test/Dockerfile +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/templates/fibonacci-starter/README.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/templates/fibonacci-starter/src/main.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/templates/fibonacci-starter/tests/test_main.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/_scrub.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/report_snapshots/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/report_snapshots/run_full.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_path_helpers.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/conftest.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/fixtures/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/__init__.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/base.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce023_no_proxy_shim_import.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce025_live_verdict_consistency.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/no_agent_timing_access.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/no_silent_except.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/no_submodule_model_imports.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/open_explicit_encoding.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/register_criterion_required.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/runner.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/violation.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_config_no_timing_fields.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_config_optional_type.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_config_registry_dispatch.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_config_sdk_decoupling.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_golden_master.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_judge_criterion.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_telemetry.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_telemetry_advanced.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_timeout.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agentless.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_aggregate.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_antigravity_agent.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_byoa_plugin.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_byoa_plugin_live.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_byod_feature.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_checker_logging.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_classification_match.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_claude_settings_enforcement_live.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_cleanup_preservation_guard.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_cli_backend_flag.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_cli_empty_glob.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_cli_sdk_options.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_cli_set_overrides.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_cli_telemetry.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_cli_type_flag.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_code_review_bugs.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_codex_agent_live.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_codex_agent_unit.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_codex_token_mapping.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_command_executed.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_command_statistics.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_command_telemetry_result_data.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_commands_efficiency.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_config_lineage.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_config_merge_engine.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_config_precedence.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_continuous_scoring.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_criterion_result_round_trip.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_custom_lint.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_dataset_expansion.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_debug_logging.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_docker_build_failure.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_docker_runner_container_death.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_docker_runner_mounts.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_docker_runner_stream_limit.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_docker_wildcard_env.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_docker_workdir_live.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_driver_resolver.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_error_handling.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_evaluate_command.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_evaluator.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_event_collector.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_experiment_cli.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_experiment_loader.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_experiment_models.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_experiment_reports.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_experiment_resolver.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_experiment_runner.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_file_check.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_file_contains_scoring.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_formatting.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_git_clone_failure.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_heartbeat_watchdog.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_ignore_patterns_negation.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_image_from_dockerfiles.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_integration.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_json_check.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_judge_anthropic.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_judge_bedrock.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_judge_burn_in_live.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_judge_context_builder.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_judge_models.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_judge_persistence.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_lint_no_top_level_run_limits.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_lint_runner.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_llm_judge_criterion.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_log_tail_buffer.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_logging.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_logging_isolation.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_merge_characterization.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_merge_strategy_annotations.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_merge_unification.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_models.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_mutations.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_new_criteria.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_node_env_config.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_optional_dependencies.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_orchestrator.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_orchestrator_error_log_tail.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_orchestrator_telemetry.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_overrides_engine.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_parallel.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_path_utils.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_plan_command.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_plugin_processing.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_plugins.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_post_run.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_pr_review_workflow.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_pre_run.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_preservation_mode.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_pricing_registry.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reference_comparison_scoring.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reference_evaluator.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reference_missing_file.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reference_models.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reference_orchestrator.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_registry.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_replicate_stats.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_report_command.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reports.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reports_experiment.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reports_html.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reports_stats.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_resolve_task_files.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_resume.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_retry_logic_comprehensive.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_routing.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_run_command_stdout.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_run_limits_models.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_run_limits_orchestrator.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_run_limits_resolver.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_runtime_tool_versions.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_sandbox.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_sandbox_layer_builder.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_sandbox_optional.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_sandbox_security.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_sandbox_symlink_preservation.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_sandbox_templates.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_scorers.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_scoring_quality.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_sdk_option_classification.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_simulation_config.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_simulation_termination.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_simulation_trials.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_streaming_agent_integration.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_streaming_batch.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_streaming_callbacks.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_streaming_cli.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_streaming_events.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_streaming_orchestrator.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_streaming_renderers.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_streaming_wire.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_sub_agent_runner.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_success_criterion_union.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_suite_rollup.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_summaries.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_tags.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_task_definition_unknown_fields.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_teardown_interrupt.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_telemetry.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_template_env_expansion.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_threshold_enforcement.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_timeout_batch.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_timeout_categorization.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_timeout_exceptions.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_timeout_models.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_timeout_orchestrator.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_token_usage.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_uipath_eval.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_user_simulator.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_utils.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_utterance_extraction.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_variant_prompt_file.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_verdict_tool.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_watchdog.py +0 -0
- {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_yaml_migration.py +0 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
name: Docs
|
|
2
|
+
|
|
3
|
+
# Build the MkDocs Material site and publish it to the `gh-pages` branch via
|
|
4
|
+
# `mkdocs gh-deploy` — the same mechanism UiPath/uipath-python uses. This workflow
|
|
5
|
+
# only pushes a branch (needs `contents: write`); it never calls the Pages API, so
|
|
6
|
+
# it succeeds even before Pages is switched on.
|
|
7
|
+
#
|
|
8
|
+
# One-time setup (org owner): the UiPath org blocks Pages *creation*, so enable
|
|
9
|
+
# Pages for this repo once — Settings → Pages → Build and deployment →
|
|
10
|
+
# Source: "Deploy from a branch" → branch `gh-pages` / `/ (root)`. That's the same
|
|
11
|
+
# (legacy, branch-based) configuration uipath-python already runs on.
|
|
12
|
+
on:
|
|
13
|
+
push:
|
|
14
|
+
branches: [main]
|
|
15
|
+
paths:
|
|
16
|
+
- "docs/**"
|
|
17
|
+
- "mkdocs.yml"
|
|
18
|
+
- ".github/workflows/docs.yml"
|
|
19
|
+
workflow_dispatch:
|
|
20
|
+
|
|
21
|
+
permissions:
|
|
22
|
+
contents: write
|
|
23
|
+
|
|
24
|
+
concurrency:
|
|
25
|
+
group: docs-gh-pages
|
|
26
|
+
cancel-in-progress: true
|
|
27
|
+
|
|
28
|
+
jobs:
|
|
29
|
+
publish:
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
steps:
|
|
32
|
+
- uses: actions/checkout@v4
|
|
33
|
+
- uses: actions/setup-python@v5
|
|
34
|
+
with:
|
|
35
|
+
python-version: "3.13"
|
|
36
|
+
- name: Install social-card system libraries
|
|
37
|
+
run: |
|
|
38
|
+
sudo apt-get update
|
|
39
|
+
sudo apt-get install -y --no-install-recommends \
|
|
40
|
+
libcairo2 libfreetype6 libjpeg-turbo8 libpng16-16 pngquant
|
|
41
|
+
- name: Install MkDocs Material
|
|
42
|
+
run: pip install "mkdocs-material[imaging]>=9.5,<10"
|
|
43
|
+
- name: Configure git identity for gh-pages commits
|
|
44
|
+
run: |
|
|
45
|
+
git config user.name "coder-eval"
|
|
46
|
+
git config user.email "coder-eval@uipath.com"
|
|
47
|
+
- name: Build strictly and publish to gh-pages
|
|
48
|
+
run: mkdocs gh-deploy --force --strict
|
|
@@ -13,12 +13,19 @@ name: Release
|
|
|
13
13
|
# and push.
|
|
14
14
|
# (Continuous :latest / :sha- agent images still publish on every main push via
|
|
15
15
|
# docker-publish.yml -- only the versioned release artifacts gate on this run.)
|
|
16
|
+
#
|
|
17
|
+
# PRERELEASE mode (dispatched from a NON-main branch): instead of bumping and
|
|
18
|
+
# pushing main, stamp a throwaway `<next-patch>rc<run#>` version, then build and
|
|
19
|
+
# publish the wheel to public PyPI + a `:<version>` GHCR image. It does NOT move
|
|
20
|
+
# `:latest`, tag, commit, or push to main. This lets a branch be dry-run on the
|
|
21
|
+
# ADO nightly infra before merge (pinned via the pipeline's `coderEvalVersion`).
|
|
22
|
+
# The `bump` input is ignored off main. On `main` the behavior is unchanged.
|
|
16
23
|
|
|
17
24
|
on:
|
|
18
25
|
workflow_dispatch:
|
|
19
26
|
inputs:
|
|
20
27
|
bump:
|
|
21
|
-
description: 'Version bump to release'
|
|
28
|
+
description: 'Version bump to release (ignored on non-main / prerelease dispatch, which always stamps a next-patch rc)'
|
|
22
29
|
type: choice
|
|
23
30
|
default: patch
|
|
24
31
|
options:
|
|
@@ -47,9 +54,9 @@ jobs:
|
|
|
47
54
|
runs-on: ubuntu-latest
|
|
48
55
|
timeout-minutes: 15
|
|
49
56
|
outputs:
|
|
50
|
-
# Exposed so the downstream publish-pypi job
|
|
51
|
-
#
|
|
52
|
-
version: ${{ steps.
|
|
57
|
+
# Exposed so the downstream publish-pypi job gates on a version having been
|
|
58
|
+
# produced (real release on main, or a stamped prerelease on a branch).
|
|
59
|
+
version: ${{ steps.ver.outputs.version }}
|
|
53
60
|
env:
|
|
54
61
|
# The self-hosted `uipath-ubuntu-latest` runners enforce a minimum
|
|
55
62
|
# package-age safe-chain check on uv installs; on GitHub-hosted runners
|
|
@@ -58,8 +65,13 @@ jobs:
|
|
|
58
65
|
SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS: "openai-codex-cli-bin,openai-codex"
|
|
59
66
|
|
|
60
67
|
steps:
|
|
68
|
+
# Only a real release (main) needs the app token: semantic-release pushes the
|
|
69
|
+
# bump commit + tag to the ruleset-protected main branch, and only this app
|
|
70
|
+
# has the bypass. A prerelease from a branch never commits or pushes, so it
|
|
71
|
+
# skips the token and checks out with the default GITHUB_TOKEN.
|
|
61
72
|
- name: Mint release app token
|
|
62
73
|
id: app-token
|
|
74
|
+
if: github.ref == 'refs/heads/main'
|
|
63
75
|
uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0
|
|
64
76
|
with:
|
|
65
77
|
app-id: ${{ secrets.RELEASE_APP_ID }}
|
|
@@ -70,8 +82,9 @@ jobs:
|
|
|
70
82
|
with:
|
|
71
83
|
fetch-depth: 0 # semantic-release needs full history for tags + changelog
|
|
72
84
|
# Persisted in .git config so semantic-release's push to main is
|
|
73
|
-
# authenticated as the app (which bypasses the branch ruleset).
|
|
74
|
-
token
|
|
85
|
+
# authenticated as the app (which bypasses the branch ruleset). Falls back
|
|
86
|
+
# to the default token for a prerelease (no push, read-only checkout).
|
|
87
|
+
token: ${{ steps.app-token.outputs.token || github.token }}
|
|
75
88
|
|
|
76
89
|
- name: Set up Python 3.13
|
|
77
90
|
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
|
|
@@ -83,11 +96,38 @@ jobs:
|
|
|
83
96
|
with:
|
|
84
97
|
enable-cache: true
|
|
85
98
|
|
|
99
|
+
# Release mode is chosen by the dispatched ref: main => real release (the
|
|
100
|
+
# semantic-release path below); any other branch => prerelease (stamp a
|
|
101
|
+
# throwaway rc version, publish, never touch main). Keying off the ref (not a
|
|
102
|
+
# new input) keeps this dispatchable from a branch — a new input would have to
|
|
103
|
+
# exist on the default branch first to be accepted.
|
|
104
|
+
- name: Determine release mode
|
|
105
|
+
id: mode
|
|
106
|
+
env:
|
|
107
|
+
REF: ${{ github.ref }}
|
|
108
|
+
RUN_NUMBER: ${{ github.run_number }}
|
|
109
|
+
run: |
|
|
110
|
+
set -euo pipefail
|
|
111
|
+
if [ "$REF" = "refs/heads/main" ]; then
|
|
112
|
+
echo "prerelease=false" >> "$GITHUB_OUTPUT"
|
|
113
|
+
echo "Mode: RELEASE (main)"
|
|
114
|
+
else
|
|
115
|
+
# Next patch of the current version, suffixed with the run number so
|
|
116
|
+
# repeated dispatches never collide on PyPI. An exact `==` pin installs
|
|
117
|
+
# it even though pip/uv skip prereleases by default.
|
|
118
|
+
NEXT=$(python3 -c 'import re,tomllib; v=tomllib.load(open("pyproject.toml","rb"))["project"]["version"]; m=re.match(r"(\d+)\.(\d+)\.(\d+)",v); print("{}.{}.{}".format(int(m[1]),int(m[2]),int(m[3])+1))')
|
|
119
|
+
PRE="${NEXT}rc${RUN_NUMBER}"
|
|
120
|
+
echo "prerelease=true" >> "$GITHUB_OUTPUT"
|
|
121
|
+
echo "version=${PRE}" >> "$GITHUB_OUTPUT"
|
|
122
|
+
echo "Mode: PRERELEASE ${PRE}"
|
|
123
|
+
fi
|
|
124
|
+
|
|
86
125
|
- name: Install build + release tools
|
|
87
126
|
run: uv tool install python-semantic-release && uv tool install twine
|
|
88
127
|
|
|
89
128
|
- name: Run semantic-release (bump + tag, no push yet)
|
|
90
129
|
id: release
|
|
130
|
+
if: steps.mode.outputs.prerelease != 'true'
|
|
91
131
|
env:
|
|
92
132
|
GH_TOKEN: ${{ steps.app-token.outputs.token }}
|
|
93
133
|
# Passed via env (not interpolated into the script) per GitHub's
|
|
@@ -105,8 +145,45 @@ jobs:
|
|
|
105
145
|
# A dispatch always cuts a release; report the just-published version.
|
|
106
146
|
echo "version=$($PSR version --print)" >> "$GITHUB_OUTPUT"
|
|
107
147
|
|
|
148
|
+
# PRERELEASE: stamp the rc version into the two canonical spots (mirrors
|
|
149
|
+
# publish-testpypi.yml), then refresh uv.lock so the Dockerfile's
|
|
150
|
+
# `uv export --frozen` accepts the bumped project version. No commit is made —
|
|
151
|
+
# the working tree is what `uv build` and the image build below consume.
|
|
152
|
+
- name: Stamp prerelease version
|
|
153
|
+
if: steps.mode.outputs.prerelease == 'true'
|
|
154
|
+
env:
|
|
155
|
+
PRE_VERSION: ${{ steps.mode.outputs.version }}
|
|
156
|
+
run: |
|
|
157
|
+
set -euo pipefail
|
|
158
|
+
python3 - <<'PY'
|
|
159
|
+
import os, re, pathlib
|
|
160
|
+
version = os.environ["PRE_VERSION"]
|
|
161
|
+
for path, key in (("pyproject.toml", "version"), ("src/coder_eval/__init__.py", "__version__")):
|
|
162
|
+
p = pathlib.Path(path)
|
|
163
|
+
new, n = re.subn(rf'(?m)^{key}\s*=\s*".+?"$', f'{key} = "{version}"', p.read_text(), count=1)
|
|
164
|
+
if n != 1:
|
|
165
|
+
raise SystemExit(f"version pattern did not match {path} (matched {n})")
|
|
166
|
+
p.write_text(new)
|
|
167
|
+
print(f"Stamped prerelease version: {version}")
|
|
168
|
+
PY
|
|
169
|
+
uv lock
|
|
170
|
+
|
|
171
|
+
# Single source of truth for the steps below: the real release version (main)
|
|
172
|
+
# or the stamped prerelease version (branch).
|
|
173
|
+
- name: Resolve published version
|
|
174
|
+
id: ver
|
|
175
|
+
env:
|
|
176
|
+
REL: ${{ steps.release.outputs.version }}
|
|
177
|
+
PRE: ${{ steps.mode.outputs.version }}
|
|
178
|
+
run: |
|
|
179
|
+
set -euo pipefail
|
|
180
|
+
V="${REL:-$PRE}"
|
|
181
|
+
if [ -z "$V" ]; then echo "no version resolved" >&2; exit 1; fi
|
|
182
|
+
echo "version=$V" >> "$GITHUB_OUTPUT"
|
|
183
|
+
echo "Publishing version: $V"
|
|
184
|
+
|
|
108
185
|
- name: Regenerate uv.lock and amend release commit
|
|
109
|
-
if: steps.release.outputs.version != ''
|
|
186
|
+
if: steps.mode.outputs.prerelease != 'true' && steps.release.outputs.version != ''
|
|
110
187
|
run: |
|
|
111
188
|
uv lock
|
|
112
189
|
if ! git diff --quiet uv.lock; then
|
|
@@ -119,43 +196,64 @@ jobs:
|
|
|
119
196
|
fi
|
|
120
197
|
|
|
121
198
|
- name: Push release commit and tags
|
|
122
|
-
if: steps.release.outputs.version != ''
|
|
199
|
+
if: steps.mode.outputs.prerelease != 'true' && steps.release.outputs.version != ''
|
|
123
200
|
run: git push origin main "v${{ steps.release.outputs.version }}"
|
|
124
201
|
|
|
125
202
|
- name: Build wheel + sdist
|
|
126
|
-
if: steps.
|
|
203
|
+
if: steps.ver.outputs.version != ''
|
|
127
204
|
run: uv build
|
|
128
205
|
|
|
129
206
|
# Hand the exact built artifacts to the publish-pypi job. Publishing to
|
|
130
207
|
# public PyPI runs in its own environment-gated job (OIDC), so it must
|
|
131
208
|
# consume these files rather than rebuild them.
|
|
132
209
|
- name: Upload dist for PyPI publish
|
|
133
|
-
if: steps.
|
|
210
|
+
if: steps.ver.outputs.version != ''
|
|
134
211
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
|
135
212
|
with:
|
|
136
213
|
name: release-dist
|
|
137
214
|
path: dist/
|
|
138
215
|
if-no-files-found: error
|
|
139
216
|
|
|
140
|
-
# Build + push the agent image HERE, in the same job that
|
|
141
|
-
# so the `:<version>` tag is built from the
|
|
142
|
-
#
|
|
143
|
-
# runs on the triggering commit, BEFORE
|
|
144
|
-
# release version -- this is the authoritative versioned
|
|
145
|
-
# repoints `:latest
|
|
217
|
+
# Build + push the agent image HERE, in the same job that produced the
|
|
218
|
+
# version, so the `:<version>` tag is built from the correct pyproject (bumped
|
|
219
|
+
# by semantic-release on main, or the stamped rc on a prerelease).
|
|
220
|
+
# docker-publish.yml runs on the triggering commit, BEFORE a main bump, so it
|
|
221
|
+
# can never tag the release version -- this is the authoritative versioned
|
|
222
|
+
# image. A real release also repoints `:latest`; a prerelease publishes only
|
|
223
|
+
# its `:<version>` tag (see Compute image tags).
|
|
146
224
|
- name: Lowercase owner for GHCR
|
|
147
|
-
if: steps.
|
|
225
|
+
if: steps.ver.outputs.version != ''
|
|
148
226
|
id: img
|
|
149
227
|
run: echo "owner_lc=$(echo '${{ github.repository_owner }}' | tr '[:upper:]' '[:lower:]')" >> "$GITHUB_OUTPUT"
|
|
150
228
|
|
|
229
|
+
# `:<version>` always; `:latest` only for a real release. A prerelease must
|
|
230
|
+
# not move `:latest`, which the nightly treats as tip-of-main.
|
|
231
|
+
- name: Compute image tags
|
|
232
|
+
if: steps.ver.outputs.version != ''
|
|
233
|
+
id: tags
|
|
234
|
+
env:
|
|
235
|
+
OWNER: ${{ steps.img.outputs.owner_lc }}
|
|
236
|
+
VERSION: ${{ steps.ver.outputs.version }}
|
|
237
|
+
IS_PRERELEASE: ${{ steps.mode.outputs.prerelease }}
|
|
238
|
+
run: |
|
|
239
|
+
set -euo pipefail
|
|
240
|
+
{
|
|
241
|
+
echo "tags<<EOF"
|
|
242
|
+
echo "ghcr.io/${OWNER}/coder-eval-agent:${VERSION}"
|
|
243
|
+
if [ "$IS_PRERELEASE" != "true" ]; then
|
|
244
|
+
echo "ghcr.io/${OWNER}/coder-eval-agent:latest"
|
|
245
|
+
fi
|
|
246
|
+
echo "EOF"
|
|
247
|
+
} >> "$GITHUB_OUTPUT"
|
|
248
|
+
|
|
151
249
|
- name: Set up Docker Buildx
|
|
152
250
|
continue-on-error: true # GHCR image is internal/best-effort; don't block PyPI
|
|
153
|
-
if: steps.
|
|
251
|
+
if: steps.ver.outputs.version != ''
|
|
154
252
|
uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0
|
|
155
253
|
|
|
156
254
|
- name: Log in to GHCR
|
|
157
255
|
continue-on-error: true # GHCR image is internal/best-effort; don't block PyPI
|
|
158
|
-
if: steps.
|
|
256
|
+
if: steps.ver.outputs.version != ''
|
|
159
257
|
uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
|
|
160
258
|
with:
|
|
161
259
|
registry: ghcr.io
|
|
@@ -164,17 +262,15 @@ jobs:
|
|
|
164
262
|
|
|
165
263
|
- name: Build and push versioned agent image
|
|
166
264
|
continue-on-error: true # GHCR image is internal/best-effort; don't block PyPI
|
|
167
|
-
if: steps.
|
|
265
|
+
if: steps.ver.outputs.version != ''
|
|
168
266
|
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6.19.2
|
|
169
267
|
with:
|
|
170
268
|
context: .
|
|
171
269
|
file: docker/Dockerfile
|
|
172
270
|
push: true
|
|
173
|
-
tags:
|
|
174
|
-
ghcr.io/${{ steps.img.outputs.owner_lc }}/coder-eval-agent:${{ steps.release.outputs.version }}
|
|
175
|
-
ghcr.io/${{ steps.img.outputs.owner_lc }}/coder-eval-agent:latest
|
|
271
|
+
tags: ${{ steps.tags.outputs.tags }}
|
|
176
272
|
build-args: |
|
|
177
|
-
CODER_EVAL_VERSION=${{ steps.
|
|
273
|
+
CODER_EVAL_VERSION=${{ steps.ver.outputs.version }}
|
|
178
274
|
secrets: |
|
|
179
275
|
"uv_index_username=${{ secrets.UV_INDEX_UIPATH_USERNAME }}"
|
|
180
276
|
"uv_index_password=${{ secrets.UV_INDEX_UIPATH_PASSWORD }}"
|
|
@@ -2,6 +2,100 @@
|
|
|
2
2
|
|
|
3
3
|
<!-- version list -->
|
|
4
4
|
|
|
5
|
+
## v0.8.7 (2026-07-22)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
- Detect Windows skill paths in telemetry ([#24](https://github.com/UiPath/coder_eval/pull/24),
|
|
10
|
+
[`c57a6b0`](https://github.com/UiPath/coder_eval/commit/c57a6b0408ef116177b15bc9b09a768096aaa33f))
|
|
11
|
+
|
|
12
|
+
- **agents**: Run codex + antigravity harnesses on the tempdir/host path
|
|
13
|
+
([#33](https://github.com/UiPath/coder_eval/pull/33),
|
|
14
|
+
[`04498a9`](https://github.com/UiPath/coder_eval/commit/04498a96f6b9ac0cc5c73f36e73a361f3f3fa0ae))
|
|
15
|
+
|
|
16
|
+
- **antigravity**: Pin google-antigravity 0.1.7 to load on glibc 2.35
|
|
17
|
+
([#33](https://github.com/UiPath/coder_eval/pull/33),
|
|
18
|
+
[`04498a9`](https://github.com/UiPath/coder_eval/commit/04498a96f6b9ac0cc5c73f36e73a361f3f3fa0ae))
|
|
19
|
+
|
|
20
|
+
- **codex**: Always run full-access; drop the in-process OS sandbox
|
|
21
|
+
([#33](https://github.com/UiPath/coder_eval/pull/33),
|
|
22
|
+
[`04498a9`](https://github.com/UiPath/coder_eval/commit/04498a96f6b9ac0cc5c73f36e73a361f3f3fa0ae))
|
|
23
|
+
|
|
24
|
+
- **codex**: Cover zsh login shells (macOS default) in the mock-PATH home shim
|
|
25
|
+
([#26](https://github.com/UiPath/coder_eval/pull/26),
|
|
26
|
+
[`73f0db2`](https://github.com/UiPath/coder_eval/commit/73f0db24df0b67f82d46e3bf15c85a21837237ef))
|
|
27
|
+
|
|
28
|
+
- **codex**: Keep mock CLIs shadowed in bash login shells
|
|
29
|
+
([#26](https://github.com/UiPath/coder_eval/pull/26),
|
|
30
|
+
[`73f0db2`](https://github.com/UiPath/coder_eval/commit/73f0db24df0b67f82d46e3bf15c85a21837237ef))
|
|
31
|
+
|
|
32
|
+
- **codex**: Make login-shell temp-home lifecycle exception-safe incl. kill_sync
|
|
33
|
+
([#26](https://github.com/UiPath/coder_eval/pull/26),
|
|
34
|
+
[`73f0db2`](https://github.com/UiPath/coder_eval/commit/73f0db24df0b67f82d46e3bf15c85a21837237ef))
|
|
35
|
+
|
|
36
|
+
- **codex**: Restore mock-CLI PATH prepend in login shells via per-task HOME profile
|
|
37
|
+
([#26](https://github.com/UiPath/coder_eval/pull/26),
|
|
38
|
+
[`73f0db2`](https://github.com/UiPath/coder_eval/commit/73f0db24df0b67f82d46e3bf15c85a21837237ef))
|
|
39
|
+
|
|
40
|
+
- **codex**: Restore original HOME inside generated login-shell profile
|
|
41
|
+
([#26](https://github.com/UiPath/coder_eval/pull/26),
|
|
42
|
+
[`73f0db2`](https://github.com/UiPath/coder_eval/commit/73f0db24df0b67f82d46e3bf15c85a21837237ef))
|
|
43
|
+
|
|
44
|
+
- **codex**: Use full-access sandbox on coder_eval-managed tempdir path
|
|
45
|
+
([#33](https://github.com/UiPath/coder_eval/pull/33),
|
|
46
|
+
[`04498a9`](https://github.com/UiPath/coder_eval/commit/04498a96f6b9ac0cc5c73f36e73a361f3f3fa0ae))
|
|
47
|
+
|
|
48
|
+
- **deps**: Bump pyasn1 to 0.6.4 for GHSA-8ppf-4f7h-5ppj / GHSA-hm4w-wwcw-mr6r
|
|
49
|
+
([#33](https://github.com/UiPath/coder_eval/pull/33),
|
|
50
|
+
[`04498a9`](https://github.com/UiPath/coder_eval/commit/04498a96f6b9ac0cc5c73f36e73a361f3f3fa0ae))
|
|
51
|
+
|
|
52
|
+
### Chores
|
|
53
|
+
|
|
54
|
+
- **deps**: Bump pyasn1 0.6.3 -> 0.6.4 (GHSA-8ppf-4f7h-5ppj, GHSA-hm4w-wwcw-mr6r)
|
|
55
|
+
([#32](https://github.com/UiPath/coder_eval/pull/32),
|
|
56
|
+
[`f1f4f9f`](https://github.com/UiPath/coder_eval/commit/f1f4f9fba2bd034a271e50fc1a95bcc74c2ac19b))
|
|
57
|
+
|
|
58
|
+
- **deps**: Upgrade agent SDKs to latest (claude 0.2.124, codex 0.144.4)
|
|
59
|
+
([#33](https://github.com/UiPath/coder_eval/pull/33),
|
|
60
|
+
[`04498a9`](https://github.com/UiPath/coder_eval/commit/04498a96f6b9ac0cc5c73f36e73a361f3f3fa0ae))
|
|
61
|
+
|
|
62
|
+
### Continuous Integration
|
|
63
|
+
|
|
64
|
+
- **release**: Publish a prerelease from a non-main branch
|
|
65
|
+
([#33](https://github.com/UiPath/coder_eval/pull/33),
|
|
66
|
+
[`04498a9`](https://github.com/UiPath/coder_eval/commit/04498a96f6b9ac0cc5c73f36e73a361f3f3fa0ae))
|
|
67
|
+
|
|
68
|
+
### Documentation
|
|
69
|
+
|
|
70
|
+
- Add MkDocs docs site, comparison page, and SEO metadata
|
|
71
|
+
([#32](https://github.com/UiPath/coder_eval/pull/32),
|
|
72
|
+
[`f1f4f9f`](https://github.com/UiPath/coder_eval/commit/f1f4f9fba2bd034a271e50fc1a95bcc74c2ac19b))
|
|
73
|
+
|
|
74
|
+
- Address PR review — Coder Eval naming, cleaner table, gh-deploy workflow
|
|
75
|
+
([#32](https://github.com/UiPath/coder_eval/pull/32),
|
|
76
|
+
[`f1f4f9f`](https://github.com/UiPath/coder_eval/commit/f1f4f9fba2bd034a271e50fc1a95bcc74c2ac19b))
|
|
77
|
+
|
|
78
|
+
- Address review — git identity for gh-pages, single strict deploy, table glyphs, uv tool install in
|
|
79
|
+
Tutorial 01 ([#32](https://github.com/UiPath/coder_eval/pull/32),
|
|
80
|
+
[`f1f4f9f`](https://github.com/UiPath/coder_eval/commit/f1f4f9fba2bd034a271e50fc1a95bcc74c2ac19b))
|
|
81
|
+
|
|
82
|
+
### Refactoring
|
|
83
|
+
|
|
84
|
+
- **codex**: Drop dead sandbox branch + honest full-access messaging
|
|
85
|
+
([#33](https://github.com/UiPath/coder_eval/pull/33),
|
|
86
|
+
[`04498a9`](https://github.com/UiPath/coder_eval/commit/04498a96f6b9ac0cc5c73f36e73a361f3f3fa0ae))
|
|
87
|
+
|
|
88
|
+
### Testing
|
|
89
|
+
|
|
90
|
+
- Accept sandbox_managed kwarg in agent test doubles
|
|
91
|
+
([#33](https://github.com/UiPath/coder_eval/pull/33),
|
|
92
|
+
[`04498a9`](https://github.com/UiPath/coder_eval/commit/04498a96f6b9ac0cc5c73f36e73a361f3f3fa0ae))
|
|
93
|
+
|
|
94
|
+
- **codex**: Pin start-to-CodexConfig env composition and tidy test imports
|
|
95
|
+
([#26](https://github.com/UiPath/coder_eval/pull/26),
|
|
96
|
+
[`73f0db2`](https://github.com/UiPath/coder_eval/commit/73f0db24df0b67f82d46e3bf15c85a21837237ef))
|
|
97
|
+
|
|
98
|
+
|
|
5
99
|
## v0.8.6 (2026-07-20)
|
|
6
100
|
|
|
7
101
|
### Features
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: coder-eval
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.7
|
|
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://github.com/UiPath/coder_eval
|
|
6
6
|
Project-URL: Repository, https://github.com/UiPath/coder_eval
|
|
@@ -11,7 +11,7 @@ Author-email: UiPath <coder-eval@uipath.com>
|
|
|
11
11
|
License-Expression: Apache-2.0
|
|
12
12
|
License-File: LICENSE
|
|
13
13
|
License-File: NOTICE
|
|
14
|
-
Keywords: agent,agent-evaluation,agent-skills,ai,anthropic,antigravity,benchmark,claude,claude-code,claude-skills,code-generation,codex,coding-agent,eval,evals,evaluation,gemini,llm,llm-evaluation,sandbox,skills-evaluation,skillsbench,swe-bench
|
|
14
|
+
Keywords: agent,agent-evaluation,agent-skills,agent-testing,ai,ai-evaluation,anthropic,antigravity,benchmark,claude,claude-code,claude-code-skills,claude-skills,code-generation,codex,coding-agent,eval,evals,evaluation,gemini,llm,llm-eval,llm-evaluation,llmops,sandbox,skills-evaluation,skillsbench,swe-bench
|
|
15
15
|
Classifier: Development Status :: 4 - Beta
|
|
16
16
|
Classifier: Environment :: Console
|
|
17
17
|
Classifier: Intended Audience :: Developers
|
|
@@ -26,7 +26,7 @@ Requires-Python: >=3.13
|
|
|
26
26
|
Requires-Dist: anthropic>=0.86.0
|
|
27
27
|
Requires-Dist: anyio>=4.13.0
|
|
28
28
|
Requires-Dist: azure-monitor-opentelemetry-exporter<1.1.0,>=1.0.0b30
|
|
29
|
-
Requires-Dist: claude-agent-sdk>=0.2.
|
|
29
|
+
Requires-Dist: claude-agent-sdk>=0.2.124
|
|
30
30
|
Requires-Dist: click>=8.3.3
|
|
31
31
|
Requires-Dist: jmespath>=1.1.0
|
|
32
32
|
Requires-Dist: jsonschema>=4.26.0
|
|
@@ -41,9 +41,9 @@ Requires-Dist: starlette>=1.3.1
|
|
|
41
41
|
Requires-Dist: tqdm>=4.67.3
|
|
42
42
|
Requires-Dist: typer>=0.24.1
|
|
43
43
|
Provides-Extra: antigravity
|
|
44
|
-
Requires-Dist: google-antigravity==0.1.
|
|
44
|
+
Requires-Dist: google-antigravity==0.1.7; extra == 'antigravity'
|
|
45
45
|
Provides-Extra: codex
|
|
46
|
-
Requires-Dist: openai-codex>=0.
|
|
46
|
+
Requires-Dist: openai-codex>=0.144.4; extra == 'codex'
|
|
47
47
|
Provides-Extra: dev
|
|
48
48
|
Requires-Dist: bandit[toml]>=1.9.4; extra == 'dev'
|
|
49
49
|
Requires-Dist: mcp>=1.28.1; extra == 'dev'
|
|
@@ -60,28 +60,36 @@ Provides-Extra: uipath
|
|
|
60
60
|
Requires-Dist: uipath>=2.10.31; extra == 'uipath'
|
|
61
61
|
Description-Content-Type: text/markdown
|
|
62
62
|
|
|
63
|
-
#
|
|
63
|
+
# Coder Eval — evaluate & benchmark AI coding agents and Claude Code skills
|
|
64
64
|
|
|
65
65
|
[](https://pypi.org/project/coder-eval/)
|
|
66
|
+
[](https://uipath.github.io/coder_eval/)
|
|
66
67
|
[](LICENSE)
|
|
67
68
|
[](https://www.python.org/downloads/)
|
|
68
69
|
[](https://github.com/UiPath/coder_eval/actions/workflows/pr-checks.yml)
|
|
69
70
|
[](https://github.com/astral-sh/ruff)
|
|
70
71
|
|
|
71
|
-
|
|
72
|
+
**Coder Eval** (`pip install coder-eval` / `uv tool install coder-eval`) is an open-source framework for
|
|
73
|
+
**evaluating and benchmarking AI coding agents and their skills** — built for CLI
|
|
72
74
|
and skill builders — with sandboxing, reproducibility, and data-driven analysis.
|
|
73
|
-
|
|
74
|
-
|
|
75
|
+
It runs a real agent (**Claude Code**, **Codex**, or **Google Antigravity /
|
|
76
|
+
Gemini**) in a sandbox against declarative YAML tasks, then scores the files and
|
|
77
|
+
commands it actually produced. Not an "agentic coding" benchmark: it measures how
|
|
78
|
+
effective your CLI and skills are when used by coding agents.
|
|
79
|
+
|
|
80
|
+
Reach for it when you want to **test whether a Claude Code skill triggers**,
|
|
81
|
+
**A/B-test Claude Code vs. Codex vs. Gemini** (or model vs. model, prompt vs.
|
|
82
|
+
prompt), or **gate CI on coding-agent quality**. Unlike fixed datasets (SWE-bench,
|
|
83
|
+
SkillsBench) that rank models on a shared leaderboard, Coder Eval evaluates the
|
|
84
|
+
tasks, skills, and workflows *you* ship — with weighted 0.0–1.0 criteria, a
|
|
85
|
+
`skill_triggered` activation check, an A/B experiment layer, and per-tool cost
|
|
86
|
+
telemetry. See [How it compares](https://uipath.github.io/coder_eval/comparison/).
|
|
87
|
+
📚 **Full docs:** **[uipath.github.io/coder_eval](https://uipath.github.io/coder_eval/)**.
|
|
75
88
|
|
|
76
89
|
<p align="center">
|
|
77
|
-
<img src="docs/assets/hero.gif" alt="
|
|
90
|
+
<img src="docs/assets/hero.gif" alt="Coder Eval running the hello_date task: a sandboxed agent writes and runs a script from a YAML task, then the scored result is browsed in evalboard" width="100%">
|
|
78
91
|
</p>
|
|
79
92
|
|
|
80
|
-
> **The Coding Agents Gym.** A sandboxed, reproducible framework to evaluate,
|
|
81
|
-
> benchmark, and A/B-test AI coding agents — Claude Code, Codex, and Google
|
|
82
|
-
> Antigravity (Gemini) today, any agent via a plugin SPI — with declarative
|
|
83
|
-
> YAML tasks and weighted scoring.
|
|
84
|
-
|
|
85
93
|
- **Declarative YAML tasks** with pinned dependencies and clear success criteria
|
|
86
94
|
- **Sandboxed execution** in isolated environments with resource limits
|
|
87
95
|
- **Weighted, continuous scoring** (0.0–1.0) with fractional credit and thresholds
|
|
@@ -92,14 +100,14 @@ are when used by coding agents.
|
|
|
92
100
|
|
|
93
101
|
## What you can do with it
|
|
94
102
|
|
|
95
|
-
- **Benchmark coding agents** — score an agent across a suite of tasks with weighted
|
|
103
|
+
- **Benchmark coding agents** — score an agent across a suite of tasks with weighted scoring and pass/fail thresholds
|
|
96
104
|
- **Compare models & configs** — A/B-test Claude vs. Codex vs. Gemini, model vs. model, tool-on vs. tool-off, prompt vs. prompt
|
|
97
105
|
- **Evaluate skills** — verify an agent actually engages a target skill (`skill_triggered`) and score skill-driven suites (SkillsBench-style)
|
|
98
106
|
- **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
|
|
99
107
|
- **Gate CI on agent quality** — run the suite in GitHub Actions and fail the build on regressions
|
|
100
108
|
- **Bring your own dataset** — fan one task out over many rows for larger benchmark suites
|
|
101
109
|
|
|
102
|
-
> **Keeping skills fresh?** Run
|
|
110
|
+
> **Keeping skills fresh?** Run Coder Eval as a scheduled GitHub Actions job so your
|
|
103
111
|
> skills are continuously re-evaluated against the latest model — a skill that quietly
|
|
104
112
|
> stops triggering surfaces as a failing criterion before your users hit it. See
|
|
105
113
|
> **[Tutorial 02 — Running coder_eval in CI](docs/tutorials/02-ci-pipeline.md)**.
|
|
@@ -115,7 +123,9 @@ git clone https://github.com/UiPath/coder_eval.git
|
|
|
115
123
|
cd coder_eval
|
|
116
124
|
|
|
117
125
|
uv sync --extra dev # install core + dev tools
|
|
118
|
-
cp .env.example .env # then set ANTHROPIC_API_KEY
|
|
126
|
+
cp .env.example .env # then set ANTHROPIC_API_KEY — or skip that: an
|
|
127
|
+
# existing Claude Code login (`claude login`) is
|
|
128
|
+
# picked up automatically
|
|
119
129
|
|
|
120
130
|
uv run coder-eval plan tasks/hello_date.yaml # validate (no tokens spent)
|
|
121
131
|
uv run coder-eval run tasks/hello_date.yaml # run your first evaluation
|
|
@@ -129,11 +139,23 @@ The optional `[uipath]` extra (`uv sync --extra dev --extra uipath`) adds the in
|
|
|
129
139
|
required). Without it the framework runs end-to-end; uipath-dependent features fail
|
|
130
140
|
at dispatch with a clear hint.
|
|
131
141
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
142
|
+
**Using Coder Eval in CI or another project?** Install the published package
|
|
143
|
+
instead of cloning:
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
uv tool install coder-eval # puts the `coder-eval` CLI on your PATH,
|
|
147
|
+
# in its own isolated environment
|
|
148
|
+
|
|
149
|
+
uv tool install "coder-eval[codex,antigravity]" # same, with agent extras
|
|
150
|
+
coder-eval --version # verify the install
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
To add it as a project dependency instead: `uv add coder-eval` or
|
|
154
|
+
`pip install coder-eval`. In a real CI gate, pin to a specific released version
|
|
155
|
+
so a harness upgrade can't silently move your results. (The example `tasks/`
|
|
156
|
+
live in this repo — clone it or point the CLI at your own task files.) See
|
|
157
|
+
[Tutorial 02 — Running coder_eval in CI](docs/tutorials/02-ci-pipeline.md) for
|
|
158
|
+
the full setup.
|
|
137
159
|
|
|
138
160
|
## Telemetry
|
|
139
161
|
|
|
@@ -161,17 +183,18 @@ at dispatch with a clear hint.
|
|
|
161
183
|
|
|
162
184
|
## How it compares
|
|
163
185
|
|
|
164
|
-
- **vs. SWE-bench
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
0.0–1.0) — not just a judge over a string.
|
|
186
|
+
- **vs. fixed benchmarks (SWE-bench, SkillsBench)** — they score a canonical dataset;
|
|
187
|
+
Coder Eval scores *your* tasks with continuous 0.0–1.0 weighted criteria (and can
|
|
188
|
+
still wrap a fixed dataset via [Bring Your Own Dataset](docs/BYOD.md)).
|
|
189
|
+
- **vs. large-scale / RL harnesses (Harbor)** — Harbor targets scale and RL rollouts;
|
|
190
|
+
Coder Eval targets weighted, skill-aware suites gated in CI.
|
|
191
|
+
- **vs. model-output eval tools (OpenAI Evals)** — they grade model text; Coder Eval
|
|
192
|
+
runs a full agent in a sandbox and scores the files and commands it produced.
|
|
172
193
|
- **vs. hand-rolled scripts** — reproducible sandboxes, weighted criteria,
|
|
173
194
|
cost/token telemetry, A/B experiments, and CI-ready pass/fail gates out of the box.
|
|
174
195
|
|
|
196
|
+
See the full [comparison — with sources](https://uipath.github.io/coder_eval/comparison/).
|
|
197
|
+
|
|
175
198
|
## Task Definition
|
|
176
199
|
|
|
177
200
|
A task is a YAML file: a prompt, the agent config, a sandbox, and success criteria.
|
|
@@ -221,12 +244,12 @@ extension points (new criteria, new agents).
|
|
|
221
244
|
|
|
222
245
|
## Known limits & non-goals
|
|
223
246
|
|
|
224
|
-
- **Not a fixed benchmark or leaderboard** —
|
|
247
|
+
- **Not a fixed benchmark or leaderboard** — Coder Eval scores *your* tasks and ships
|
|
225
248
|
example tasks, not a canonical scored dataset.
|
|
226
249
|
- **Tasks execute real code** — run untrusted tasks only under the container driver
|
|
227
250
|
(see [Docker Isolation](docs/DOCKER_ISOLATION.md)); the `tempdir` driver is not a
|
|
228
251
|
security boundary.
|
|
229
|
-
- **Bring your own model credentials** — Anthropic, Bedrock, or Gemini keys;
|
|
252
|
+
- **Bring your own model credentials** — Anthropic, Bedrock, or Gemini keys; Coder Eval
|
|
230
253
|
does not proxy or supply model access.
|
|
231
254
|
- **Python 3.13+ only.**
|
|
232
255
|
|