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.
Files changed (550) hide show
  1. coder_eval-0.8.7/.github/workflows/docs.yml +48 -0
  2. {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/workflows/release.yml +120 -24
  3. {coder_eval-0.8.6 → coder_eval-0.8.7}/.gitignore +4 -0
  4. {coder_eval-0.8.6 → coder_eval-0.8.7}/CHANGELOG.md +94 -0
  5. {coder_eval-0.8.6 → coder_eval-0.8.7}/PKG-INFO +56 -33
  6. {coder_eval-0.8.6 → coder_eval-0.8.7}/README.md +51 -28
  7. {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/AB_EXPERIMENTS.md +7 -0
  8. {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/BYOD.md +7 -0
  9. {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/CODEX_AGENT_GUIDE.md +9 -2
  10. {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/DOCKER_ISOLATION.md +7 -2
  11. {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/TASK_DEFINITION_GUIDE.md +13 -2
  12. {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/USER_GUIDE.md +9 -0
  13. coder_eval-0.8.7/docs/comparison.md +153 -0
  14. coder_eval-0.8.7/docs/index.md +100 -0
  15. coder_eval-0.8.7/docs/llms.txt +46 -0
  16. {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/tutorials/01-first-evaluation.md +12 -0
  17. {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/tutorials/02-ci-pipeline.md +7 -0
  18. {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/tutorials/03-evalboard-local.md +7 -0
  19. {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/tutorials/04-writing-a-task.md +7 -0
  20. {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/tutorials/05-comparing-models.md +7 -0
  21. {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/tutorials/06-use-docker-isolation.md +9 -2
  22. {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/tutorials/README.md +7 -0
  23. coder_eval-0.8.7/mkdocs.yml +94 -0
  24. {coder_eval-0.8.6 → coder_eval-0.8.7}/pyproject.toml +22 -14
  25. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/__init__.py +1 -1
  26. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agents/codex_agent.py +203 -44
  27. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/skill_triggered.py +9 -9
  28. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/fixtures/mock_agent.py +6 -1
  29. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/fixtures/text_stub_agent.py +5 -1
  30. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_codex_agent.py +457 -62
  31. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_early_stop.py +8 -0
  32. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_simulation_integration.py +5 -1
  33. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_skill_triggered.py +16 -0
  34. {coder_eval-0.8.6 → coder_eval-0.8.7}/uv.lock +33 -33
  35. {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/commands/coder-eval-code-review-full.md +0 -0
  36. {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/commands/coder-eval-code-review-wf.md +0 -0
  37. {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/commands/coder-eval-code-review.md +0 -0
  38. {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/commands/coder-eval-create-plan.md +0 -0
  39. {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/commands/coder-eval-implement-plan.md +0 -0
  40. {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/commands/coder-eval-review.md +0 -0
  41. {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/commands/coder-eval-run-analysis.md +0 -0
  42. {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/commands/coder-eval-task-create.md +0 -0
  43. {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/harness-candidates.md +0 -0
  44. {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/shared/axes.md +0 -0
  45. {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/shared/multi-model-review.md +0 -0
  46. {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/shared/review-rubric.md +0 -0
  47. {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/shared/run-layout.md +0 -0
  48. {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/workflows/cr-axis.js +0 -0
  49. {coder_eval-0.8.6 → coder_eval-0.8.7}/.claude/workflows/cr-parent.js +0 -0
  50. {coder_eval-0.8.6 → coder_eval-0.8.7}/.env.example +0 -0
  51. {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/CODEOWNERS +0 -0
  52. {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  53. {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  54. {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/code_review.md +0 -0
  55. {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/dependabot.yml +0 -0
  56. {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/workflows/claude-pr-review.yml +0 -0
  57. {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/workflows/codeql.yml +0 -0
  58. {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/workflows/conventional-commits.yml +0 -0
  59. {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/workflows/docker-publish.yml +0 -0
  60. {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/workflows/pr-checks.yml +0 -0
  61. {coder_eval-0.8.6 → coder_eval-0.8.7}/.github/workflows/publish-testpypi.yml +0 -0
  62. {coder_eval-0.8.6 → coder_eval-0.8.7}/.pre-commit-config.yaml +0 -0
  63. {coder_eval-0.8.6 → coder_eval-0.8.7}/.python-version +0 -0
  64. {coder_eval-0.8.6 → coder_eval-0.8.7}/CLAUDE.md +0 -0
  65. {coder_eval-0.8.6 → coder_eval-0.8.7}/CODE_OF_CONDUCT.md +0 -0
  66. {coder_eval-0.8.6 → coder_eval-0.8.7}/CONTRIBUTING.md +0 -0
  67. {coder_eval-0.8.6 → coder_eval-0.8.7}/LICENSE +0 -0
  68. {coder_eval-0.8.6 → coder_eval-0.8.7}/Makefile +0 -0
  69. {coder_eval-0.8.6 → coder_eval-0.8.7}/NOTICE +0 -0
  70. {coder_eval-0.8.6 → coder_eval-0.8.7}/SECURITY.md +0 -0
  71. {coder_eval-0.8.6 → coder_eval-0.8.7}/docker/Dockerfile +0 -0
  72. {coder_eval-0.8.6 → coder_eval-0.8.7}/docker/Dockerfile.runtime +0 -0
  73. {coder_eval-0.8.6 → coder_eval-0.8.7}/docker/coder_eval_entrypoint.sh +0 -0
  74. {coder_eval-0.8.6 → coder_eval-0.8.7}/docker/coder_eval_runtime_entrypoint.sh +0 -0
  75. {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/IDEAS.md +0 -0
  76. {coder_eval-0.8.6 → coder_eval-0.8.7}/docs/assets/hero.gif +0 -0
  77. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/.gitignore +0 -0
  78. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/README.md +0 -0
  79. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
  80. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/col-help.tsx +0 -0
  81. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/collapsible-rail.tsx +0 -0
  82. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/harness-badge.tsx +0 -0
  83. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/scroll-table.tsx +0 -0
  84. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/search-box.tsx +0 -0
  85. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/unit-toggle.tsx +0 -0
  86. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/version-list.tsx +0 -0
  87. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_components/window-selector.tsx +0 -0
  88. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_overview/daily-chart.tsx +0 -0
  89. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_overview/tag-rail.tsx +0 -0
  90. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
  91. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/_overview/window-summary.tsx +0 -0
  92. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/api/download/route.ts +0 -0
  93. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/api/file/route.ts +0 -0
  94. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
  95. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/api/refresh/route.ts +0 -0
  96. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/error.tsx +0 -0
  97. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/globals.css +0 -0
  98. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/icon.png +0 -0
  99. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/layout.tsx +0 -0
  100. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/page.tsx +0 -0
  101. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/path-to-ga/page.tsx +0 -0
  102. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
  103. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/trends/actions.ts +0 -0
  104. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/trends/page.tsx +0 -0
  105. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/trends/trends-view.tsx +0 -0
  106. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
  107. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/watchlist/page.tsx +0 -0
  108. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
  109. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/next-env.d.ts +0 -0
  110. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/next.config.mjs +0 -0
  111. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/package.json +0 -0
  112. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/pnpm-lock.yaml +0 -0
  113. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/postcss.config.mjs +0 -0
  114. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/public/harness/antigravity.png +0 -0
  115. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/public/harness/claude-code.png +0 -0
  116. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/public/harness/codex.png +0 -0
  117. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/public/uipath.png +0 -0
  118. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/tailwind.config.ts +0 -0
  119. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/tsconfig.json +0 -0
  120. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/vitest.config.ts +0 -0
  121. {coder_eval-0.8.6 → coder_eval-0.8.7}/evalboard/vitest.setup.ts +0 -0
  122. {coder_eval-0.8.6 → coder_eval-0.8.7}/experiments/default.yaml +0 -0
  123. {coder_eval-0.8.6 → coder_eval-0.8.7}/experiments/early-stop-ab.yaml +0 -0
  124. {coder_eval-0.8.6 → coder_eval-0.8.7}/experiments/model-comparison.yaml +0 -0
  125. {coder_eval-0.8.6 → coder_eval-0.8.7}/experiments/permissions-smoke.yaml +0 -0
  126. {coder_eval-0.8.6 → coder_eval-0.8.7}/experiments/plugin-comparison.yaml +0 -0
  127. {coder_eval-0.8.6 → coder_eval-0.8.7}/experiments/prompt-mutations-example.yaml +0 -0
  128. {coder_eval-0.8.6 → coder_eval-0.8.7}/experiments/smoke_variants.yaml +0 -0
  129. {coder_eval-0.8.6 → coder_eval-0.8.7}/osv-scanner.toml +0 -0
  130. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/.gitattributes +0 -0
  131. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agent.py +0 -0
  132. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agents/__init__.py +0 -0
  133. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agents/_logging.py +0 -0
  134. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agents/antigravity_agent.py +0 -0
  135. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agents/claude_code_agent.py +0 -0
  136. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agents/noop_agent.py +0 -0
  137. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agents/registry.py +0 -0
  138. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/agents/watchdog.py +0 -0
  139. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/analysis.py +0 -0
  140. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/__init__.py +0 -0
  141. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/aggregate_command.py +0 -0
  142. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/console.py +0 -0
  143. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/evaluate_command.py +0 -0
  144. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/plan_command.py +0 -0
  145. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/report_command.py +0 -0
  146. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/run_command.py +0 -0
  147. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/run_helpers.py +0 -0
  148. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/run_task_internal_command.py +0 -0
  149. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/cli/utils.py +0 -0
  150. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/config.py +0 -0
  151. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/__init__.py +0 -0
  152. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
  153. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/agent_judge.py +0 -0
  154. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/base.py +0 -0
  155. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/classification_match.py +0 -0
  156. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/command_executed.py +0 -0
  157. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/commands_efficiency.py +0 -0
  158. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/file_check.py +0 -0
  159. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/file_contains.py +0 -0
  160. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/file_exists.py +0 -0
  161. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/file_matches_regex.py +0 -0
  162. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/json_check.py +0 -0
  163. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/llm_judge.py +0 -0
  164. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/reference_comparison.py +0 -0
  165. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/run_command.py +0 -0
  166. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/criteria/uipath_eval.py +0 -0
  167. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/__init__.py +0 -0
  168. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/agent.py +0 -0
  169. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/budget.py +0 -0
  170. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/categories.py +0 -0
  171. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/categorization.py +0 -0
  172. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/executor.py +0 -0
  173. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/judge.py +0 -0
  174. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/retry.py +0 -0
  175. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/errors/timeout.py +0 -0
  176. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/__init__.py +0 -0
  177. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/checker.py +0 -0
  178. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
  179. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
  180. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/judge_context.py +0 -0
  181. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/judge_models.py +0 -0
  182. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/judge_persistence.py +0 -0
  183. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/judge_usage.py +0 -0
  184. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/sub_agent.py +0 -0
  185. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/summaries.py +0 -0
  186. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/evaluation/verdict_tool.py +0 -0
  187. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/formatting.py +0 -0
  188. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/isolation/__init__.py +0 -0
  189. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/isolation/docker_runner.py +0 -0
  190. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/logging_config.py +0 -0
  191. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/__init__.py +0 -0
  192. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/agent_config.py +0 -0
  193. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/container_paths.py +0 -0
  194. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/criteria.py +0 -0
  195. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/enums.py +0 -0
  196. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/experiment.py +0 -0
  197. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/judge.py +0 -0
  198. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/judge_defaults.py +0 -0
  199. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/limits.py +0 -0
  200. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/merge_strategy.py +0 -0
  201. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/mutations.py +0 -0
  202. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/results.py +0 -0
  203. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/routing.py +0 -0
  204. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/sandbox.py +0 -0
  205. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/tasks.py +0 -0
  206. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/telemetry.py +0 -0
  207. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/models/templates.py +0 -0
  208. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/__init__.py +0 -0
  209. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/batch.py +0 -0
  210. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/config.py +0 -0
  211. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/config_merge.py +0 -0
  212. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/early_stop.py +0 -0
  213. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/evaluation.py +0 -0
  214. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/experiment.py +0 -0
  215. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/overrides.py +0 -0
  216. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestration/task_loader.py +0 -0
  217. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/orchestrator.py +0 -0
  218. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/path_utils.py +0 -0
  219. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/plugins.py +0 -0
  220. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/pricing.py +0 -0
  221. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/py.typed +0 -0
  222. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/reports.py +0 -0
  223. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/reports_experiment.py +0 -0
  224. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/reports_html.py +0 -0
  225. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/reports_stats.py +0 -0
  226. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/resources/__init__.py +0 -0
  227. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
  228. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/resources/tags.yaml +0 -0
  229. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/sandbox.py +0 -0
  230. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/scoring/__init__.py +0 -0
  231. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/scoring/ast_similarity.py +0 -0
  232. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/scoring/complexity.py +0 -0
  233. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/scoring/quality.py +0 -0
  234. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/scoring/signature_similarity.py +0 -0
  235. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/scoring/similarity.py +0 -0
  236. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/scoring/token_similarity.py +0 -0
  237. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/simulation/__init__.py +0 -0
  238. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/simulation/termination.py +0 -0
  239. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/simulation/user_simulator.py +0 -0
  240. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/streaming/__init__.py +0 -0
  241. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/streaming/callbacks.py +0 -0
  242. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/streaming/collector.py +0 -0
  243. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/streaming/events.py +0 -0
  244. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/streaming/renderers.py +0 -0
  245. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/streaming/wire.py +0 -0
  246. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/telemetry.py +0 -0
  247. {coder_eval-0.8.6 → coder_eval-0.8.7}/src/coder_eval/utils.py +0 -0
  248. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/README.md +0 -0
  249. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agentless_smoke_test.yaml +0 -0
  250. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/antigravity_hello_world.yaml +0 -0
  251. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
  252. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/claude_hello_world.yaml +0 -0
  253. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/claude_hello_world_docker.yaml +0 -0
  254. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
  255. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/claude_subagent_test.yaml +0 -0
  256. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
  257. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/codex_hello_world.yaml +0 -0
  258. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/codex_parallel_commands.yaml +0 -0
  259. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
  260. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/codex_skills_test.yaml +0 -0
  261. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/codex_string_utils.yaml +0 -0
  262. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/codex_subagent_test.yaml +0 -0
  263. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/subagent_bash_long_input.yaml +0 -0
  264. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/agents/subagent_merge_sort.yaml +0 -0
  265. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/byod_smoke_test.yaml +0 -0
  266. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/dataset_example.yaml +0 -0
  267. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/datasets/sentiment.jsonl +0 -0
  268. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
  269. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
  270. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
  271. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/dockerfile_build_example/environment/input.txt +0 -0
  272. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
  273. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
  274. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/fibonacci_with_template.yaml +0 -0
  275. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/hello_date.yaml +0 -0
  276. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/inline_starter_example.yaml +0 -0
  277. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/internal/session_resumption.yaml +0 -0
  278. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/mock_path_dirs_smoke.yaml +0 -0
  279. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
  280. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
  281. {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
  282. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
  283. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
  284. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
  285. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
  286. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
  287. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
  288. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
  289. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
  290. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
  291. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/README.md +0 -0
  292. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
  293. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
  294. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
  295. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
  296. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
  297. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
  298. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
  299. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
  300. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
  301. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
  302. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/sentiment_classification.yaml +0 -0
  303. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/smoke_agent_judge.yaml +0 -0
  304. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/smoke_budget_exceeded.yaml +0 -0
  305. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
  306. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/smoke_llm_judge.yaml +0 -0
  307. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/smoke_negative_path.yaml +0 -0
  308. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/smoke_task_timeout.yaml +0 -0
  309. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/smoke_variants.yaml +0 -0
  310. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/test_sandbox.yaml +0 -0
  311. {coder_eval-0.8.6 → coder_eval-0.8.7}/tasks/token_check.yaml +0 -0
  312. {coder_eval-0.8.6 → coder_eval-0.8.7}/templates/byod_smoke_test/Dockerfile +0 -0
  313. {coder_eval-0.8.6 → coder_eval-0.8.7}/templates/fibonacci-starter/README.md +0 -0
  314. {coder_eval-0.8.6 → coder_eval-0.8.7}/templates/fibonacci-starter/src/main.py +0 -0
  315. {coder_eval-0.8.6 → coder_eval-0.8.7}/templates/fibonacci-starter/tests/test_main.py +0 -0
  316. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/__init__.py +0 -0
  317. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/__init__.py +0 -0
  318. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/__init__.py +0 -0
  319. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/_scrub.py +0 -0
  320. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
  321. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
  322. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
  323. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
  324. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
  325. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
  326. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
  327. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
  328. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
  329. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
  330. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
  331. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
  332. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
  333. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +0 -0
  334. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
  335. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +0 -0
  336. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
  337. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
  338. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
  339. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
  340. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/report_snapshots/__init__.py +0 -0
  341. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
  342. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
  343. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
  344. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
  345. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/report_snapshots/run_full.md +0 -0
  346. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
  347. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/_path_helpers.py +0 -0
  348. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/conftest.py +0 -0
  349. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/fixtures/__init__.py +0 -0
  350. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
  351. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
  352. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
  353. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
  354. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/__init__.py +0 -0
  355. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/__init__.py +0 -0
  356. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/base.py +0 -0
  357. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
  358. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
  359. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
  360. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
  361. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
  362. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
  363. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
  364. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
  365. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
  366. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce023_no_proxy_shim_import.py +0 -0
  367. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
  368. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/ce025_live_verdict_consistency.py +0 -0
  369. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/no_agent_timing_access.py +0 -0
  370. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
  371. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
  372. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/no_silent_except.py +0 -0
  373. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/no_submodule_model_imports.py +0 -0
  374. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
  375. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
  376. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
  377. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/open_explicit_encoding.py +0 -0
  378. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
  379. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/register_criterion_required.py +0 -0
  380. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
  381. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
  382. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/runner.py +0 -0
  383. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/lint/violation.py +0 -0
  384. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent.py +0 -0
  385. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_config_no_timing_fields.py +0 -0
  386. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_config_optional_type.py +0 -0
  387. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_config_registry_dispatch.py +0 -0
  388. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_config_sdk_decoupling.py +0 -0
  389. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_golden_master.py +0 -0
  390. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_judge_criterion.py +0 -0
  391. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_telemetry.py +0 -0
  392. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_telemetry_advanced.py +0 -0
  393. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agent_timeout.py +0 -0
  394. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_agentless.py +0 -0
  395. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_aggregate.py +0 -0
  396. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_antigravity_agent.py +0 -0
  397. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_byoa_plugin.py +0 -0
  398. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_byoa_plugin_live.py +0 -0
  399. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_byod_feature.py +0 -0
  400. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_checker_logging.py +0 -0
  401. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_classification_match.py +0 -0
  402. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_claude_settings_enforcement_live.py +0 -0
  403. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_cleanup_preservation_guard.py +0 -0
  404. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_cli_backend_flag.py +0 -0
  405. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_cli_empty_glob.py +0 -0
  406. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_cli_sdk_options.py +0 -0
  407. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_cli_set_overrides.py +0 -0
  408. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_cli_telemetry.py +0 -0
  409. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_cli_type_flag.py +0 -0
  410. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_code_review_bugs.py +0 -0
  411. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_codex_agent_live.py +0 -0
  412. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_codex_agent_unit.py +0 -0
  413. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_codex_token_mapping.py +0 -0
  414. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_command_executed.py +0 -0
  415. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_command_statistics.py +0 -0
  416. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_command_telemetry_result_data.py +0 -0
  417. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_commands_efficiency.py +0 -0
  418. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_config_lineage.py +0 -0
  419. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_config_merge_engine.py +0 -0
  420. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_config_precedence.py +0 -0
  421. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_continuous_scoring.py +0 -0
  422. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_criterion_result_round_trip.py +0 -0
  423. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_custom_lint.py +0 -0
  424. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_dataset_expansion.py +0 -0
  425. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_debug_logging.py +0 -0
  426. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_docker_build_failure.py +0 -0
  427. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_docker_runner_container_death.py +0 -0
  428. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_docker_runner_mounts.py +0 -0
  429. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_docker_runner_stream_limit.py +0 -0
  430. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_docker_wildcard_env.py +0 -0
  431. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_docker_workdir_live.py +0 -0
  432. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_driver_resolver.py +0 -0
  433. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_error_handling.py +0 -0
  434. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_evaluate_command.py +0 -0
  435. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_evaluator.py +0 -0
  436. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_event_collector.py +0 -0
  437. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_experiment_cli.py +0 -0
  438. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_experiment_loader.py +0 -0
  439. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_experiment_models.py +0 -0
  440. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_experiment_reports.py +0 -0
  441. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_experiment_resolver.py +0 -0
  442. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_experiment_runner.py +0 -0
  443. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_file_check.py +0 -0
  444. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_file_contains_scoring.py +0 -0
  445. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_formatting.py +0 -0
  446. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_git_clone_failure.py +0 -0
  447. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_heartbeat_watchdog.py +0 -0
  448. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_ignore_patterns_negation.py +0 -0
  449. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_image_from_dockerfiles.py +0 -0
  450. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_integration.py +0 -0
  451. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_json_check.py +0 -0
  452. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_judge_anthropic.py +0 -0
  453. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_judge_bedrock.py +0 -0
  454. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_judge_burn_in_live.py +0 -0
  455. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_judge_context_builder.py +0 -0
  456. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_judge_models.py +0 -0
  457. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_judge_persistence.py +0 -0
  458. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_lint_no_top_level_run_limits.py +0 -0
  459. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_lint_runner.py +0 -0
  460. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_llm_judge_criterion.py +0 -0
  461. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_log_tail_buffer.py +0 -0
  462. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_logging.py +0 -0
  463. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_logging_isolation.py +0 -0
  464. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_merge_characterization.py +0 -0
  465. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_merge_strategy_annotations.py +0 -0
  466. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_merge_unification.py +0 -0
  467. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_models.py +0 -0
  468. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_mutations.py +0 -0
  469. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_new_criteria.py +0 -0
  470. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_node_env_config.py +0 -0
  471. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_optional_dependencies.py +0 -0
  472. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_orchestrator.py +0 -0
  473. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_orchestrator_error_log_tail.py +0 -0
  474. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_orchestrator_telemetry.py +0 -0
  475. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_overrides_engine.py +0 -0
  476. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_parallel.py +0 -0
  477. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_path_utils.py +0 -0
  478. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_plan_command.py +0 -0
  479. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_plugin_processing.py +0 -0
  480. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_plugins.py +0 -0
  481. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_post_run.py +0 -0
  482. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_pr_review_workflow.py +0 -0
  483. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_pre_run.py +0 -0
  484. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_preservation_mode.py +0 -0
  485. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_pricing_registry.py +0 -0
  486. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reference_comparison_scoring.py +0 -0
  487. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reference_evaluator.py +0 -0
  488. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reference_missing_file.py +0 -0
  489. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reference_models.py +0 -0
  490. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reference_orchestrator.py +0 -0
  491. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_registry.py +0 -0
  492. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_replicate_stats.py +0 -0
  493. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_report_command.py +0 -0
  494. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reports.py +0 -0
  495. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reports_experiment.py +0 -0
  496. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reports_html.py +0 -0
  497. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_reports_stats.py +0 -0
  498. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_resolve_task_files.py +0 -0
  499. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_resume.py +0 -0
  500. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_retry_logic_comprehensive.py +0 -0
  501. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_routing.py +0 -0
  502. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_run_command_stdout.py +0 -0
  503. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_run_limits_models.py +0 -0
  504. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_run_limits_orchestrator.py +0 -0
  505. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_run_limits_resolver.py +0 -0
  506. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_runtime_tool_versions.py +0 -0
  507. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_sandbox.py +0 -0
  508. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_sandbox_layer_builder.py +0 -0
  509. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_sandbox_optional.py +0 -0
  510. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_sandbox_security.py +0 -0
  511. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_sandbox_symlink_preservation.py +0 -0
  512. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_sandbox_templates.py +0 -0
  513. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_scorers.py +0 -0
  514. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_scoring_quality.py +0 -0
  515. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_sdk_option_classification.py +0 -0
  516. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_simulation_config.py +0 -0
  517. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_simulation_termination.py +0 -0
  518. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_simulation_trials.py +0 -0
  519. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_streaming_agent_integration.py +0 -0
  520. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_streaming_batch.py +0 -0
  521. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_streaming_callbacks.py +0 -0
  522. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_streaming_cli.py +0 -0
  523. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_streaming_events.py +0 -0
  524. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_streaming_orchestrator.py +0 -0
  525. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_streaming_renderers.py +0 -0
  526. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_streaming_wire.py +0 -0
  527. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_sub_agent_runner.py +0 -0
  528. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_success_criterion_union.py +0 -0
  529. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_suite_rollup.py +0 -0
  530. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_summaries.py +0 -0
  531. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_tags.py +0 -0
  532. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_task_definition_unknown_fields.py +0 -0
  533. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_teardown_interrupt.py +0 -0
  534. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_telemetry.py +0 -0
  535. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_template_env_expansion.py +0 -0
  536. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_threshold_enforcement.py +0 -0
  537. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_timeout_batch.py +0 -0
  538. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_timeout_categorization.py +0 -0
  539. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_timeout_exceptions.py +0 -0
  540. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_timeout_models.py +0 -0
  541. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_timeout_orchestrator.py +0 -0
  542. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_token_usage.py +0 -0
  543. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_uipath_eval.py +0 -0
  544. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_user_simulator.py +0 -0
  545. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_utils.py +0 -0
  546. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_utterance_extraction.py +0 -0
  547. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_variant_prompt_file.py +0 -0
  548. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_verdict_tool.py +0 -0
  549. {coder_eval-0.8.6 → coder_eval-0.8.7}/tests/test_watchdog.py +0 -0
  550. {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 can gate on a real release
51
- # having been cut (empty => no version bumped => skip PyPI publish).
52
- version: ${{ steps.release.outputs.version }}
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: ${{ steps.app-token.outputs.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.release.outputs.version != ''
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.release.outputs.version != ''
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 cut the release,
141
- # so the `:<version>` tag is built from the BUMPED pyproject (the version
142
- # only exists after the semantic-release step above). docker-publish.yml
143
- # runs on the triggering commit, BEFORE the bump, so it can never tag the
144
- # release version -- this is the authoritative versioned image. It also
145
- # repoints `:latest` to the exact release artifact.
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.release.outputs.version != ''
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.release.outputs.version != ''
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.release.outputs.version != ''
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.release.outputs.version != ''
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.release.outputs.version }}
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 }}"
@@ -1,3 +1,7 @@
1
+ # MkDocs build output
2
+ site/
3
+ .cache/
4
+
1
5
  # Python-generated files
2
6
  __pycache__/
3
7
  *.py[oc]
@@ -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.6
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.82
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.5; extra == 'antigravity'
44
+ Requires-Dist: google-antigravity==0.1.7; extra == 'antigravity'
45
45
  Provides-Extra: codex
46
- Requires-Dist: openai-codex>=0.1.0b3; extra == 'codex'
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
- # coder_eval — evaluate AI coding agents & their skills
63
+ # Coder Eval — evaluate & benchmark AI coding agents and Claude Code skills
64
64
 
65
65
  [![PyPI](https://img.shields.io/pypi/v/coder-eval.svg)](https://pypi.org/project/coder-eval/)
66
+ [![Docs](https://img.shields.io/badge/docs-uipath.github.io%2Fcoder__eval-1f6feb.svg)](https://uipath.github.io/coder_eval/)
66
67
  [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
67
68
  [![Python 3.13+](https://img.shields.io/badge/python-3.13%2B-blue.svg)](https://www.python.org/downloads/)
68
69
  [![CI](https://github.com/UiPath/coder_eval/actions/workflows/pr-checks.yml/badge.svg)](https://github.com/UiPath/coder_eval/actions/workflows/pr-checks.yml)
69
70
  [![Code style: Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
70
71
 
71
- A framework for evaluating AI coding agents **and their skills** built for CLI
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
- Not an "agentic coding" benchmark: it measures how effective your CLI and skills
74
- are when used by coding agents.
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="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%">
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, pass/fail thresholds
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 coder_eval as a scheduled GitHub Actions job so your
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
- > **Using coder_eval in CI or another project?** Install the published package:
133
- > `pip install coder-eval` (or `uv add coder-eval`; extras install the same way —
134
- > `pip install "coder-eval[codex,antigravity]"`). In a real CI gate, pin to a
135
- > specific released version so a harness upgrade can't silently move your results.
136
- > See [Tutorial 02 Running coder_eval in CI](docs/tutorials/02-ci-pipeline.md) for the full setup.
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 and fixed benchmarks** — SWE-bench is a fixed dataset of GitHub
165
- issues; coder_eval is a *framework* for authoring your own tasks in declarative
166
- YAML, so you evaluate the skills and workflows you care about (and can still wrap
167
- a fixed dataset via [Bring Your Own Dataset](docs/BYOD.md)).
168
- - **vs. LLM-output eval harnesses (e.g. OpenAI Evals)** — those grade a model's text;
169
- coder_eval runs a full **agent** in a **sandbox** with real tool use and multi-turn
170
- dialog, then scores the files and commands it actually produced (continuous
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** — coder_eval scores *your* tasks and ships
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; coder_eval
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