coder-eval 0.11.2__tar.gz → 0.11.4__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 (657) hide show
  1. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/CODEOWNERS +6 -6
  2. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/workflows/claude-pr-review.yml +1 -1
  3. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/workflows/pr-checks.yml +11 -8
  4. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/workflows/release.yml +9 -2
  5. {coder_eval-0.11.2 → coder_eval-0.11.4}/.gitignore +3 -0
  6. {coder_eval-0.11.2 → coder_eval-0.11.4}/CHANGELOG.md +99 -0
  7. {coder_eval-0.11.2 → coder_eval-0.11.4}/PKG-INFO +3 -1
  8. {coder_eval-0.11.2 → coder_eval-0.11.4}/action.yml +1 -1
  9. {coder_eval-0.11.2 → coder_eval-0.11.4}/docker/Dockerfile +13 -9
  10. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/AB_EXPERIMENTS.md +1 -0
  11. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/DIALOG_MODE.md +5 -3
  12. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/TASK_DEFINITION_GUIDE.md +37 -1
  13. coder_eval-0.11.4/evalboard/app/_components/col-help.tsx +10 -0
  14. coder_eval-0.11.4/evalboard/app/_overview/__tests__/efficiency-charts.test.tsx +80 -0
  15. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +38 -0
  16. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_overview/__tests__/harness-series.test.ts +6 -4
  17. coder_eval-0.11.4/evalboard/app/_overview/efficiency-charts.tsx +104 -0
  18. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_overview/harness-legend.tsx +28 -15
  19. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_overview/harness-series.ts +7 -3
  20. coder_eval-0.11.4/evalboard/app/_overview/wall-clock-chart.tsx +138 -0
  21. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/page.tsx +8 -19
  22. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/trends/trends-view.tsx +75 -36
  23. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +1 -0
  24. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/watchlist/watchlist-view.tsx +39 -0
  25. coder_eval-0.11.4/evalboard/vitest.setup.ts +22 -0
  26. {coder_eval-0.11.2 → coder_eval-0.11.4}/plugins/coder-eval/.claude-plugin/plugin.json +1 -1
  27. {coder_eval-0.11.2 → coder_eval-0.11.4}/plugins/coder-eval/reference/criteria.md +1 -1
  28. {coder_eval-0.11.2 → coder_eval-0.11.4}/pyproject.toml +14 -1
  29. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/__init__.py +1 -1
  30. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/agents/claude_code_agent.py +26 -5
  31. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/base.py +6 -0
  32. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/llm_judge.py +38 -9
  33. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/evaluation/checker.py +2 -0
  34. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/evaluation/judge_bedrock.py +12 -3
  35. coder_eval-0.11.4/src/coder_eval/evaluation/judge_litellm.py +148 -0
  36. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/evaluation/judge_usage.py +42 -0
  37. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/evaluation/verdict_tool.py +45 -0
  38. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/models/__init__.py +4 -0
  39. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/models/criteria.py +6 -3
  40. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/models/experiment.py +16 -0
  41. coder_eval-0.11.4/src/coder_eval/models/routing.py +385 -0
  42. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/models/tasks.py +71 -1
  43. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/orchestration/experiment.py +47 -0
  44. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/orchestrator.py +100 -12
  45. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_config_precedence.py +0 -1
  46. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_judge_bedrock.py +8 -1
  47. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_judge_burn_in_live.py +1 -1
  48. coder_eval-0.11.4/tests/test_judge_litellm.py +209 -0
  49. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_litellm_cost.py +3 -3
  50. coder_eval-0.11.4/tests/test_litellm_judge_live.py +69 -0
  51. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_litellm_route.py +261 -31
  52. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_llm_judge_criterion.py +89 -10
  53. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_models.py +6 -2
  54. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_orchestrator.py +81 -6
  55. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_route_seam_exhaustiveness.py +7 -3
  56. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_routing.py +32 -15
  57. {coder_eval-0.11.2 → coder_eval-0.11.4}/uv.lock +401 -2
  58. coder_eval-0.11.2/evalboard/app/_components/col-help.tsx +0 -131
  59. coder_eval-0.11.2/evalboard/vitest.setup.ts +0 -1
  60. coder_eval-0.11.2/src/coder_eval/models/routing.py +0 -225
  61. {coder_eval-0.11.2 → coder_eval-0.11.4}/.claude/commands/coder-eval-code-review-full.md +0 -0
  62. {coder_eval-0.11.2 → coder_eval-0.11.4}/.claude/commands/coder-eval-code-review-wf.md +0 -0
  63. {coder_eval-0.11.2 → coder_eval-0.11.4}/.claude/commands/coder-eval-code-review.md +0 -0
  64. {coder_eval-0.11.2 → coder_eval-0.11.4}/.claude/commands/coder-eval-create-plan.md +0 -0
  65. {coder_eval-0.11.2 → coder_eval-0.11.4}/.claude/commands/coder-eval-implement-plan.md +0 -0
  66. {coder_eval-0.11.2 → coder_eval-0.11.4}/.claude/commands/coder-eval-review.md +0 -0
  67. {coder_eval-0.11.2 → coder_eval-0.11.4}/.claude/harness-candidates.md +0 -0
  68. {coder_eval-0.11.2 → coder_eval-0.11.4}/.claude/shared/axes.md +0 -0
  69. {coder_eval-0.11.2 → coder_eval-0.11.4}/.claude/shared/multi-model-review.md +0 -0
  70. {coder_eval-0.11.2 → coder_eval-0.11.4}/.claude/shared/review-rubric.md +0 -0
  71. {coder_eval-0.11.2 → coder_eval-0.11.4}/.claude/shared/run-layout.md +0 -0
  72. {coder_eval-0.11.2 → coder_eval-0.11.4}/.claude/workflows/cr-axis.js +0 -0
  73. {coder_eval-0.11.2 → coder_eval-0.11.4}/.claude/workflows/cr-parent.js +0 -0
  74. {coder_eval-0.11.2 → coder_eval-0.11.4}/.claude-plugin/marketplace.json +0 -0
  75. {coder_eval-0.11.2 → coder_eval-0.11.4}/.env.example +0 -0
  76. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
  77. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  78. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  79. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/actionlint.yaml +0 -0
  80. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/code_review.md +0 -0
  81. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/dependabot.yml +0 -0
  82. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/pages-stub/index.html +0 -0
  83. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/scripts/release_notes.py +0 -0
  84. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/workflows/codeql.yml +0 -0
  85. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/workflows/conventional-commits.yml +0 -0
  86. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/workflows/docker-publish.yml +0 -0
  87. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/workflows/docs.yml +0 -0
  88. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/workflows/publish-testpypi.yml +0 -0
  89. {coder_eval-0.11.2 → coder_eval-0.11.4}/.github/workflows/verify-published-action.yml +0 -0
  90. {coder_eval-0.11.2 → coder_eval-0.11.4}/.pre-commit-config.yaml +0 -0
  91. {coder_eval-0.11.2 → coder_eval-0.11.4}/.python-version +0 -0
  92. {coder_eval-0.11.2 → coder_eval-0.11.4}/ADOPTERS.md +0 -0
  93. {coder_eval-0.11.2 → coder_eval-0.11.4}/CLAUDE.md +0 -0
  94. {coder_eval-0.11.2 → coder_eval-0.11.4}/CODE_OF_CONDUCT.md +0 -0
  95. {coder_eval-0.11.2 → coder_eval-0.11.4}/CONTRIBUTING.md +0 -0
  96. {coder_eval-0.11.2 → coder_eval-0.11.4}/LICENSE +0 -0
  97. {coder_eval-0.11.2 → coder_eval-0.11.4}/Makefile +0 -0
  98. {coder_eval-0.11.2 → coder_eval-0.11.4}/NOTICE +0 -0
  99. {coder_eval-0.11.2 → coder_eval-0.11.4}/README.md +0 -0
  100. {coder_eval-0.11.2 → coder_eval-0.11.4}/SECURITY.md +0 -0
  101. {coder_eval-0.11.2 → coder_eval-0.11.4}/comparison.md +0 -0
  102. {coder_eval-0.11.2 → coder_eval-0.11.4}/docker/Dockerfile.runtime +0 -0
  103. {coder_eval-0.11.2 → coder_eval-0.11.4}/docker/coder_eval_entrypoint.sh +0 -0
  104. {coder_eval-0.11.2 → coder_eval-0.11.4}/docker/coder_eval_runtime_entrypoint.sh +0 -0
  105. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/CI_GATE.md +0 -0
  106. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/DATASETS.md +0 -0
  107. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/DOCKER_ISOLATION.md +0 -0
  108. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/EXTENDING.md +0 -0
  109. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/PLUGIN.md +0 -0
  110. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/REPORT_SCHEMA.md +0 -0
  111. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/USER_GUIDE.md +0 -0
  112. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/agents/ANTIGRAVITY.md +0 -0
  113. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/agents/CLAUDE_CODE.md +0 -0
  114. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/agents/CODEX.md +0 -0
  115. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/agents/HARNESS_PARITY.md +0 -0
  116. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/assets/hero.gif +0 -0
  117. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/comparison.md +0 -0
  118. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/index.md +0 -0
  119. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/llms.txt +0 -0
  120. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/tutorials/01-first-evaluation.md +0 -0
  121. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/tutorials/02-ci-pipeline.md +0 -0
  122. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/tutorials/03-evalboard-local.md +0 -0
  123. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/tutorials/04-writing-a-task.md +0 -0
  124. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/tutorials/05-comparing-models.md +0 -0
  125. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/tutorials/06-use-docker-isolation.md +0 -0
  126. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/tutorials/07-plugin-in-claude-code.md +0 -0
  127. {coder_eval-0.11.2 → coder_eval-0.11.4}/docs/tutorials/README.md +0 -0
  128. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/.gitignore +0 -0
  129. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/README.md +0 -0
  130. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_components/__tests__/harness-badge.test.tsx +0 -0
  131. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
  132. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
  133. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_components/collapsible-rail.tsx +0 -0
  134. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_components/harness-badge.tsx +0 -0
  135. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_components/harness-selector.tsx +0 -0
  136. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_components/scroll-table.tsx +0 -0
  137. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_components/search-box.tsx +0 -0
  138. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_components/unit-toggle.tsx +0 -0
  139. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_components/version-list.tsx +0 -0
  140. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_lib/__tests__/source-param.test.ts +0 -0
  141. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_lib/source-param.ts +0 -0
  142. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_overview/daily-chart.tsx +0 -0
  143. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_overview/tag-rail.tsx +0 -0
  144. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
  145. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/_overview/window-summary.tsx +0 -0
  146. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/api/download/route.ts +0 -0
  147. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/api/file/route.ts +0 -0
  148. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
  149. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/api/refresh/route.ts +0 -0
  150. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/error.tsx +0 -0
  151. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/globals.css +0 -0
  152. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/icon.png +0 -0
  153. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/layout.tsx +0 -0
  154. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +0 -0
  155. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/path-to-ga/page.tsx +0 -0
  156. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/path-to-ga/task-table.tsx +0 -0
  157. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/scribe/page.tsx +0 -0
  158. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/scribe/run-table.tsx +0 -0
  159. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
  160. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/trends/actions.ts +0 -0
  161. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/trends/page.tsx +0 -0
  162. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/app/watchlist/page.tsx +0 -0
  163. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/next-env.d.ts +0 -0
  164. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/next.config.mjs +0 -0
  165. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/package.json +0 -0
  166. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/pnpm-lock.yaml +0 -0
  167. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/postcss.config.mjs +0 -0
  168. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/public/harness/antigravity.png +0 -0
  169. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/public/harness/claude-code.png +0 -0
  170. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/public/harness/codex.png +0 -0
  171. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/public/uipath.png +0 -0
  172. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/tailwind.config.ts +0 -0
  173. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/tsconfig.json +0 -0
  174. {coder_eval-0.11.2 → coder_eval-0.11.4}/evalboard/vitest.config.ts +0 -0
  175. {coder_eval-0.11.2 → coder_eval-0.11.4}/experiments/default.yaml +0 -0
  176. {coder_eval-0.11.2 → coder_eval-0.11.4}/experiments/early-stop-ab.yaml +0 -0
  177. {coder_eval-0.11.2 → coder_eval-0.11.4}/experiments/model-comparison.yaml +0 -0
  178. {coder_eval-0.11.2 → coder_eval-0.11.4}/experiments/permissions-smoke.yaml +0 -0
  179. {coder_eval-0.11.2 → coder_eval-0.11.4}/experiments/plugin-comparison.yaml +0 -0
  180. {coder_eval-0.11.2 → coder_eval-0.11.4}/experiments/prompt-mutations-example.yaml +0 -0
  181. {coder_eval-0.11.2 → coder_eval-0.11.4}/experiments/smoke_variants.yaml +0 -0
  182. {coder_eval-0.11.2 → coder_eval-0.11.4}/litellm/README.md +0 -0
  183. {coder_eval-0.11.2 → coder_eval-0.11.4}/litellm/cost_logger.py +0 -0
  184. {coder_eval-0.11.2 → coder_eval-0.11.4}/litellm/litellm-config.yaml +0 -0
  185. {coder_eval-0.11.2 → coder_eval-0.11.4}/litellm/start-litellm.sh +0 -0
  186. {coder_eval-0.11.2 → coder_eval-0.11.4}/mkdocs.yml +0 -0
  187. {coder_eval-0.11.2 → coder_eval-0.11.4}/osv-scanner.toml +0 -0
  188. {coder_eval-0.11.2 → coder_eval-0.11.4}/plugins/coder-eval/README.md +0 -0
  189. {coder_eval-0.11.2 → coder_eval-0.11.4}/plugins/coder-eval/reference/cli-setup.md +0 -0
  190. {coder_eval-0.11.2 → coder_eval-0.11.4}/plugins/coder-eval/reference/repo-layout.md +0 -0
  191. {coder_eval-0.11.2 → coder_eval-0.11.4}/plugins/coder-eval/reference/run-layout.md +0 -0
  192. {coder_eval-0.11.2 → coder_eval-0.11.4}/plugins/coder-eval/reference/task-rubric.md +0 -0
  193. {coder_eval-0.11.2 → coder_eval-0.11.4}/plugins/coder-eval/reference/templates/activation-rows.jsonl +0 -0
  194. {coder_eval-0.11.2 → coder_eval-0.11.4}/plugins/coder-eval/reference/templates/activation.yaml +0 -0
  195. {coder_eval-0.11.2 → coder_eval-0.11.4}/plugins/coder-eval/skills/analyze/SKILL.md +0 -0
  196. {coder_eval-0.11.2 → coder_eval-0.11.4}/plugins/coder-eval/skills/check-skill/SKILL.md +0 -0
  197. {coder_eval-0.11.2 → coder_eval-0.11.4}/plugins/coder-eval/skills/ci/SKILL.md +0 -0
  198. {coder_eval-0.11.2 → coder_eval-0.11.4}/plugins/coder-eval/skills/init/SKILL.md +0 -0
  199. {coder_eval-0.11.2 → coder_eval-0.11.4}/plugins/coder-eval/skills/lint-tasks/SKILL.md +0 -0
  200. {coder_eval-0.11.2 → coder_eval-0.11.4}/plugins/coder-eval/skills/task/SKILL.md +0 -0
  201. {coder_eval-0.11.2 → coder_eval-0.11.4}/scripts/check_commit_msg.sh +0 -0
  202. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/.gitattributes +0 -0
  203. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/agent.py +0 -0
  204. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/agents/__init__.py +0 -0
  205. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/agents/_logging.py +0 -0
  206. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/agents/antigravity_agent.py +0 -0
  207. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/agents/codex_agent.py +0 -0
  208. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/agents/noop_agent.py +0 -0
  209. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/agents/registry.py +0 -0
  210. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/agents/watchdog.py +0 -0
  211. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/analysis.py +0 -0
  212. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/cli/__init__.py +0 -0
  213. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/cli/aggregate_command.py +0 -0
  214. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/cli/console.py +0 -0
  215. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/cli/evaluate_command.py +0 -0
  216. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/cli/plan_command.py +0 -0
  217. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/cli/report_command.py +0 -0
  218. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/cli/run_command.py +0 -0
  219. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/cli/run_helpers.py +0 -0
  220. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/cli/run_task_internal_command.py +0 -0
  221. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/cli/utils.py +0 -0
  222. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/config.py +0 -0
  223. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/__init__.py +0 -0
  224. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
  225. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/agent_judge.py +0 -0
  226. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/classification_match.py +0 -0
  227. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/cli_called.py +0 -0
  228. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/command_executed.py +0 -0
  229. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/commands_efficiency.py +0 -0
  230. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/file_check.py +0 -0
  231. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/file_contains.py +0 -0
  232. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/file_exists.py +0 -0
  233. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/file_matches_regex.py +0 -0
  234. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/json_check.py +0 -0
  235. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/reference_comparison.py +0 -0
  236. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/run_command.py +0 -0
  237. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/skill_triggered.py +0 -0
  238. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/criteria/uipath_eval.py +0 -0
  239. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/errors/__init__.py +0 -0
  240. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/errors/agent.py +0 -0
  241. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/errors/budget.py +0 -0
  242. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/errors/categories.py +0 -0
  243. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/errors/categorization.py +0 -0
  244. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/errors/checker_misuse.py +0 -0
  245. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/errors/executor.py +0 -0
  246. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/errors/judge.py +0 -0
  247. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/errors/reference.py +0 -0
  248. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/errors/retry.py +0 -0
  249. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/errors/timeout.py +0 -0
  250. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/evaluation/__init__.py +0 -0
  251. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
  252. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/evaluation/judge_context.py +0 -0
  253. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/evaluation/judge_models.py +0 -0
  254. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/evaluation/judge_persistence.py +0 -0
  255. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/evaluation/sub_agent.py +0 -0
  256. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/evaluation/summaries.py +0 -0
  257. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/formatting.py +0 -0
  258. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/fs_permissions.py +0 -0
  259. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/invocation_log.py +0 -0
  260. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/isolation/__init__.py +0 -0
  261. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/isolation/docker_runner.py +0 -0
  262. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/litellm_cost.py +0 -0
  263. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/logging_config.py +0 -0
  264. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/models/agent_config.py +0 -0
  265. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/models/container_paths.py +0 -0
  266. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/models/enums.py +0 -0
  267. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/models/judge.py +0 -0
  268. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/models/judge_defaults.py +0 -0
  269. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/models/limits.py +0 -0
  270. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/models/merge_strategy.py +0 -0
  271. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/models/mutations.py +0 -0
  272. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/models/results.py +0 -0
  273. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/models/sandbox.py +0 -0
  274. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/models/telemetry.py +0 -0
  275. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/models/templates.py +0 -0
  276. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/orchestration/__init__.py +0 -0
  277. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/orchestration/batch.py +0 -0
  278. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/orchestration/config.py +0 -0
  279. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/orchestration/config_merge.py +0 -0
  280. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/orchestration/early_stop.py +0 -0
  281. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/orchestration/evaluation.py +0 -0
  282. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/orchestration/overrides.py +0 -0
  283. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/orchestration/run_limits.py +0 -0
  284. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/orchestration/task_loader.py +0 -0
  285. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/path_utils.py +0 -0
  286. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/plugins.py +0 -0
  287. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/pricing.py +0 -0
  288. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/py.typed +0 -0
  289. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/reports.py +0 -0
  290. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/reports_experiment.py +0 -0
  291. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/reports_html.py +0 -0
  292. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/reports_junit.py +0 -0
  293. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/reports_stats.py +0 -0
  294. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/resources/__init__.py +0 -0
  295. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
  296. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/resources/tags.yaml +0 -0
  297. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/sandbox.py +0 -0
  298. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/scoring/__init__.py +0 -0
  299. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/scoring/ast_similarity.py +0 -0
  300. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/scoring/complexity.py +0 -0
  301. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/scoring/quality.py +0 -0
  302. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/scoring/signature_similarity.py +0 -0
  303. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/scoring/similarity.py +0 -0
  304. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/scoring/token_similarity.py +0 -0
  305. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/simulation/__init__.py +0 -0
  306. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/simulation/termination.py +0 -0
  307. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/simulation/user_simulator.py +0 -0
  308. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/streaming/__init__.py +0 -0
  309. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/streaming/callbacks.py +0 -0
  310. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/streaming/collector.py +0 -0
  311. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/streaming/events.py +0 -0
  312. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/streaming/renderers.py +0 -0
  313. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/streaming/wire.py +0 -0
  314. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/telemetry.py +0 -0
  315. {coder_eval-0.11.2 → coder_eval-0.11.4}/src/coder_eval/utils.py +0 -0
  316. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/README.md +0 -0
  317. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/agentless_smoke_test.yaml +0 -0
  318. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/agents/antigravity_hello_world.yaml +0 -0
  319. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
  320. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/agents/claude_hello_world.yaml +0 -0
  321. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/agents/claude_hello_world_docker.yaml +0 -0
  322. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
  323. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/agents/claude_subagent_test.yaml +0 -0
  324. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
  325. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/agents/codex_hello_world.yaml +0 -0
  326. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/agents/codex_parallel_commands.yaml +0 -0
  327. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
  328. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/agents/codex_skills_test.yaml +0 -0
  329. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/agents/codex_string_utils.yaml +0 -0
  330. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/agents/codex_subagent_test.yaml +0 -0
  331. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/agents/subagent_bash_long_input.yaml +0 -0
  332. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/agents/subagent_merge_sort.yaml +0 -0
  333. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/anti_cheat_reference/anti_cheat_reference.yaml +0 -0
  334. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/anti_cheat_reference/reference/solution.py +0 -0
  335. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/byod_smoke_test.yaml +0 -0
  336. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/dataset_example.yaml +0 -0
  337. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/datasets/sentiment.jsonl +0 -0
  338. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
  339. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
  340. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
  341. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/dockerfile_build_example/environment/input.txt +0 -0
  342. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
  343. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
  344. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/early_stop_decision_budget_exceeded.yaml +0 -0
  345. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/early_stop_weighted_high_weight_kills_run.yaml +0 -0
  346. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/early_stop_weighted_low_weight_absorbed.yaml +0 -0
  347. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/fibonacci_with_template.yaml +0 -0
  348. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/hello_date.yaml +0 -0
  349. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/inline_starter_example.yaml +0 -0
  350. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/internal/session_resumption.yaml +0 -0
  351. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/mock_path_dirs_smoke.yaml +0 -0
  352. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
  353. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
  354. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
  355. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
  356. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
  357. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
  358. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/run_limits/max_turns_cap.yaml +0 -0
  359. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/run_limits/turn_timeout.yaml +0 -0
  360. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
  361. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
  362. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
  363. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
  364. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
  365. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
  366. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/samples/skillsbench/README.md +0 -0
  367. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
  368. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
  369. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
  370. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
  371. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
  372. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
  373. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
  374. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
  375. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
  376. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
  377. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/sentiment_classification.yaml +0 -0
  378. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/smoke_agent_judge.yaml +0 -0
  379. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/smoke_budget_exceeded.yaml +0 -0
  380. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
  381. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/smoke_llm_judge.yaml +0 -0
  382. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/smoke_negative_path.yaml +0 -0
  383. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/smoke_task_timeout.yaml +0 -0
  384. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/smoke_variants.yaml +0 -0
  385. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/test_sandbox.yaml +0 -0
  386. {coder_eval-0.11.2 → coder_eval-0.11.4}/tasks/token_check.yaml +0 -0
  387. {coder_eval-0.11.2 → coder_eval-0.11.4}/templates/byod_smoke_test/Dockerfile +0 -0
  388. {coder_eval-0.11.2 → coder_eval-0.11.4}/templates/fibonacci-starter/README.md +0 -0
  389. {coder_eval-0.11.2 → coder_eval-0.11.4}/templates/fibonacci-starter/src/main.py +0 -0
  390. {coder_eval-0.11.2 → coder_eval-0.11.4}/templates/fibonacci-starter/tests/test_main.py +0 -0
  391. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/__init__.py +0 -0
  392. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/__init__.py +0 -0
  393. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/__init__.py +0 -0
  394. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/_scrub.py +0 -0
  395. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
  396. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
  397. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
  398. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
  399. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
  400. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
  401. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
  402. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
  403. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
  404. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
  405. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
  406. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
  407. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
  408. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +0 -0
  409. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
  410. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +0 -0
  411. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
  412. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
  413. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
  414. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
  415. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/live_criteria.py +0 -0
  416. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/report_snapshots/__init__.py +0 -0
  417. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
  418. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
  419. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
  420. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
  421. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/report_snapshots/run_full.md +0 -0
  422. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
  423. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/_path_helpers.py +0 -0
  424. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/conftest.py +0 -0
  425. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/fixtures/__init__.py +0 -0
  426. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
  427. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
  428. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/fixtures/mock_agent.py +0 -0
  429. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
  430. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
  431. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
  432. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/fixtures/text_stub_agent.py +0 -0
  433. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/__init__.py +0 -0
  434. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/action_docs.py +0 -0
  435. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/dead_config_fields.py +0 -0
  436. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/doc_env_parity.py +0 -0
  437. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/doc_examples.py +0 -0
  438. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/doc_indexes.py +0 -0
  439. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/doc_schema_parity.py +0 -0
  440. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/generated.py +0 -0
  441. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/live_verdict_contract.py +0 -0
  442. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/plugin_reference.py +0 -0
  443. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/pyright_config.py +0 -0
  444. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/__init__.py +0 -0
  445. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/base.py +0 -0
  446. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
  447. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
  448. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
  449. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
  450. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
  451. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
  452. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
  453. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
  454. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
  455. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/ce023_no_proxy_shim_import.py +0 -0
  456. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
  457. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
  458. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/ce037_no_dead_private_helper.py +0 -0
  459. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/ce038_acquire_inside_try.py +0 -0
  460. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/ce039_config_error_escalates.py +0 -0
  461. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/ce043_no_command_output_truncation.py +0 -0
  462. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/no_agent_timing_access.py +0 -0
  463. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
  464. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
  465. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/no_silent_except.py +0 -0
  466. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/no_submodule_model_imports.py +0 -0
  467. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
  468. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
  469. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
  470. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/open_explicit_encoding.py +0 -0
  471. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
  472. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/register_criterion_required.py +0 -0
  473. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
  474. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
  475. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/runner.py +0 -0
  476. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/violation.py +0 -0
  477. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/lint/workflow_outputs.py +0 -0
  478. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_action_version_pin.py +0 -0
  479. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_agent.py +0 -0
  480. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_agent_config_no_timing_fields.py +0 -0
  481. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_agent_config_optional_type.py +0 -0
  482. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_agent_config_registry_dispatch.py +0 -0
  483. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_agent_config_sdk_decoupling.py +0 -0
  484. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_agent_golden_master.py +0 -0
  485. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_agent_judge_criterion.py +0 -0
  486. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_agent_telemetry.py +0 -0
  487. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_agent_telemetry_advanced.py +0 -0
  488. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_agent_timeout.py +0 -0
  489. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_agentless.py +0 -0
  490. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_aggregate.py +0 -0
  491. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_antigravity_agent.py +0 -0
  492. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_byoa_plugin.py +0 -0
  493. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_byoa_plugin_live.py +0 -0
  494. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_byod_feature.py +0 -0
  495. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_check_all_async.py +0 -0
  496. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_checker_logging.py +0 -0
  497. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_classification_match.py +0 -0
  498. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_claude_settings_enforcement_live.py +0 -0
  499. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_cleanup_preservation_guard.py +0 -0
  500. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_cli_backend_flag.py +0 -0
  501. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_cli_called_criterion.py +0 -0
  502. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_cli_empty_glob.py +0 -0
  503. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_cli_sdk_options.py +0 -0
  504. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_cli_set_overrides.py +0 -0
  505. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_cli_telemetry.py +0 -0
  506. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_cli_type_flag.py +0 -0
  507. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_code_review_bugs.py +0 -0
  508. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_codex_agent.py +0 -0
  509. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_codex_agent_live.py +0 -0
  510. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_codex_agent_unit.py +0 -0
  511. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_codex_token_mapping.py +0 -0
  512. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_command_executed.py +0 -0
  513. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_command_statistics.py +0 -0
  514. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_command_telemetry_result_data.py +0 -0
  515. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_commands_efficiency.py +0 -0
  516. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_config_lineage.py +0 -0
  517. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_config_merge_engine.py +0 -0
  518. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_continuous_scoring.py +0 -0
  519. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_cost_accounting_paths.py +0 -0
  520. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_criterion_result_round_trip.py +0 -0
  521. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_custom_lint.py +0 -0
  522. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_dataset_expansion.py +0 -0
  523. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_debug_logging.py +0 -0
  524. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_docker_build_failure.py +0 -0
  525. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_docker_litellm_env.py +0 -0
  526. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_docker_runner_container_death.py +0 -0
  527. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_docker_runner_mounts.py +0 -0
  528. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_docker_runner_stream_limit.py +0 -0
  529. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_docker_wildcard_env.py +0 -0
  530. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_docker_workdir_live.py +0 -0
  531. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_driver_resolver.py +0 -0
  532. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_early_stop.py +0 -0
  533. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_error_handling.py +0 -0
  534. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_evaluate_command.py +0 -0
  535. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_evaluator.py +0 -0
  536. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_event_collector.py +0 -0
  537. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_experiment_cli.py +0 -0
  538. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_experiment_loader.py +0 -0
  539. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_experiment_models.py +0 -0
  540. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_experiment_reports.py +0 -0
  541. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_experiment_resolver.py +0 -0
  542. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_experiment_runner.py +0 -0
  543. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_file_check.py +0 -0
  544. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_file_contains_scoring.py +0 -0
  545. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_formatting.py +0 -0
  546. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_git_clone_failure.py +0 -0
  547. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_glob_paths_in_file_criteria.py +0 -0
  548. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_heartbeat_watchdog.py +0 -0
  549. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_ignore_patterns_negation.py +0 -0
  550. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_image_from_dockerfiles.py +0 -0
  551. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_integration.py +0 -0
  552. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_json_check.py +0 -0
  553. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_judge_anthropic.py +0 -0
  554. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_judge_context_builder.py +0 -0
  555. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_judge_models.py +0 -0
  556. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_judge_persistence.py +0 -0
  557. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_lint_no_top_level_run_limits.py +0 -0
  558. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_lint_runner.py +0 -0
  559. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_litellm_config.py +0 -0
  560. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_litellm_cost_logger.py +0 -0
  561. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_log_tail_buffer.py +0 -0
  562. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_logging.py +0 -0
  563. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_logging_isolation.py +0 -0
  564. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_merge_characterization.py +0 -0
  565. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_merge_strategy_annotations.py +0 -0
  566. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_merge_unification.py +0 -0
  567. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_mutations.py +0 -0
  568. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_new_criteria.py +0 -0
  569. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_node_env_config.py +0 -0
  570. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_optional_dependencies.py +0 -0
  571. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_orchestrator_error_log_tail.py +0 -0
  572. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_orchestrator_telemetry.py +0 -0
  573. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_overrides_engine.py +0 -0
  574. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_parallel.py +0 -0
  575. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_path_utils.py +0 -0
  576. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_plan_command.py +0 -0
  577. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_plugin_processing.py +0 -0
  578. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_plugins.py +0 -0
  579. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_post_run.py +0 -0
  580. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_pr_review_workflow.py +0 -0
  581. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_pre_run.py +0 -0
  582. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_preservation_mode.py +0 -0
  583. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_pricing_registry.py +0 -0
  584. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_reference_comparison_scoring.py +0 -0
  585. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_reference_evaluator.py +0 -0
  586. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_reference_missing_file.py +0 -0
  587. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_reference_models.py +0 -0
  588. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_reference_permissions.py +0 -0
  589. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_registry.py +0 -0
  590. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_release_notes.py +0 -0
  591. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_replicate_stats.py +0 -0
  592. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_report_command.py +0 -0
  593. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_reports.py +0 -0
  594. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_reports_experiment.py +0 -0
  595. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_reports_html.py +0 -0
  596. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_reports_junit.py +0 -0
  597. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_reports_stats.py +0 -0
  598. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_reports_stats_nonfinite.py +0 -0
  599. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_resolve_task_files.py +0 -0
  600. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_resume.py +0 -0
  601. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_retry_logic_comprehensive.py +0 -0
  602. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_run_command_junit.py +0 -0
  603. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_run_command_stdout.py +0 -0
  604. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_run_limits_models.py +0 -0
  605. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_run_limits_orchestrator.py +0 -0
  606. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_run_limits_resolver.py +0 -0
  607. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_run_metrics.py +0 -0
  608. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_runtime_tool_versions.py +0 -0
  609. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_sandbox.py +0 -0
  610. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_sandbox_layer_builder.py +0 -0
  611. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_sandbox_optional.py +0 -0
  612. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_sandbox_record_cli.py +0 -0
  613. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_sandbox_security.py +0 -0
  614. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_sandbox_symlink_preservation.py +0 -0
  615. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_sandbox_templates.py +0 -0
  616. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_scorers.py +0 -0
  617. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_scoring_quality.py +0 -0
  618. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_sdk_option_classification.py +0 -0
  619. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_simulation_config.py +0 -0
  620. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_simulation_integration.py +0 -0
  621. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_simulation_termination.py +0 -0
  622. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_simulation_trials.py +0 -0
  623. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_skill_triggered.py +0 -0
  624. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_streaming_agent_integration.py +0 -0
  625. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_streaming_batch.py +0 -0
  626. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_streaming_callbacks.py +0 -0
  627. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_streaming_cli.py +0 -0
  628. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_streaming_events.py +0 -0
  629. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_streaming_orchestrator.py +0 -0
  630. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_streaming_renderers.py +0 -0
  631. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_streaming_wire.py +0 -0
  632. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_sub_agent_runner.py +0 -0
  633. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_success_criterion_union.py +0 -0
  634. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_suite_rollup.py +0 -0
  635. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_summaries.py +0 -0
  636. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_tags.py +0 -0
  637. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_task_definition_unknown_fields.py +0 -0
  638. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_teardown_interrupt.py +0 -0
  639. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_telemetry.py +0 -0
  640. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_template_env_expansion.py +0 -0
  641. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_threshold_enforcement.py +0 -0
  642. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_timeout_batch.py +0 -0
  643. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_timeout_categorization.py +0 -0
  644. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_timeout_exceptions.py +0 -0
  645. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_timeout_models.py +0 -0
  646. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_timeout_orchestrator.py +0 -0
  647. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_token_usage.py +0 -0
  648. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_uipath_eval.py +0 -0
  649. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_user_simulator.py +0 -0
  650. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_utils.py +0 -0
  651. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_utterance_extraction.py +0 -0
  652. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_variant_prompt_file.py +0 -0
  653. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_verdict_tool.py +0 -0
  654. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_verify_published_workflow.py +0 -0
  655. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_visible_turn_cap.py +0 -0
  656. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_watchdog.py +0 -0
  657. {coder_eval-0.11.2 → coder_eval-0.11.4}/tests/test_yaml_migration.py +0 -0
@@ -7,11 +7,11 @@
7
7
  # dedicated GitHub team (e.g. @UiPath/coder-eval-maintainers) once one exists.
8
8
 
9
9
  # Default owners for everything in the repo.
10
- * @akshaylive @tmatup @uipreliga @bai-uipath
10
+ * @akshaylive @tmatup @uipreliga @bai-uipath @CarlesUIPath
11
11
 
12
12
  # Community-health, license, and security files warrant extra scrutiny.
13
- /LICENSE @akshaylive @tmatup @uipreliga @bai-uipath
14
- /NOTICE @akshaylive @tmatup @uipreliga @bai-uipath
15
- /SECURITY.md @akshaylive @tmatup @uipreliga @bai-uipath
16
- /CODE_OF_CONDUCT.md @akshaylive @tmatup @uipreliga @bai-uipath
17
- /.github/ @akshaylive @tmatup @uipreliga @bai-uipath
13
+ /LICENSE @akshaylive @tmatup @uipreliga @bai-uipath @CarlesUIPath
14
+ /NOTICE @akshaylive @tmatup @uipreliga @bai-uipath @CarlesUIPath
15
+ /SECURITY.md @akshaylive @tmatup @uipreliga @bai-uipath @CarlesUIPath
16
+ /CODE_OF_CONDUCT.md @akshaylive @tmatup @uipreliga @bai-uipath @CarlesUIPath
17
+ /.github/ @akshaylive @tmatup @uipreliga @bai-uipath @CarlesUIPath
@@ -118,7 +118,7 @@ jobs:
118
118
  # so this stacks on the tool allowlist below, it does not replace it.
119
119
  # Keep this list in sync with the global CODEOWNERS maintainers
120
120
  # (.github/CODEOWNERS `*` line).
121
- include_comments_by_actor: "akshaylive,tmatup,uipreliga,bai-uipath"
121
+ include_comments_by_actor: "akshaylive,tmatup,uipreliga,bai-uipath,CarlesUIPath"
122
122
  # Drop all bot comments (dependabot, renovate, etc.). Exclusion wins
123
123
  # over the include list if an actor somehow matches both.
124
124
  exclude_comments_by_actor: "*[bot]"
@@ -80,7 +80,7 @@ jobs:
80
80
  pip install uv
81
81
 
82
82
  - name: Install project dependencies (hash-verified from uv.lock)
83
- run: uv sync --frozen --extra dev --extra uipath --extra codex
83
+ run: uv sync --frozen --extra dev --extra uipath --extra codex --extra litellm
84
84
 
85
85
  # PHASE 1: Fast checks (fail early)
86
86
  - name: Check code formatting (ruff format)
@@ -385,7 +385,7 @@ jobs:
385
385
  pip install uv
386
386
 
387
387
  - name: Install project dependencies (hash-verified from uv.lock)
388
- run: uv sync --frozen --extra dev --extra uipath --extra codex
388
+ run: uv sync --frozen --extra dev --extra uipath --extra codex --extra litellm
389
389
 
390
390
  - name: Check code formatting (ruff format)
391
391
  run: .venv/Scripts/ruff format --check src/ tests/
@@ -843,8 +843,8 @@ jobs:
843
843
  python -m pip install --upgrade "pip>=26.2" # PYSEC-2026-3721 fix floor
844
844
  pip install uv
845
845
 
846
- - name: Install project dependencies (with codex extra)
847
- run: uv sync --frozen --extra dev --extra uipath --extra codex
846
+ - name: Install project dependencies (with codex + litellm extras)
847
+ run: uv sync --frozen --extra dev --extra uipath --extra codex --extra litellm
848
848
 
849
849
  - name: Verify required secrets are present
850
850
  run: |
@@ -854,14 +854,17 @@ jobs:
854
854
  fi
855
855
  echo "CODEX_API_KEY present."
856
856
 
857
- - name: Run Codex live tests
857
+ - name: Run Codex + litellm-judge live tests
858
858
  run: |
859
859
  mkdir -p tmp
860
860
  # Run serially: `-n0` overrides the global `-n auto` (addopts).
861
861
  # Parallel xdist workers share ~/.codex and race the Codex SQLite
862
862
  # state migration (`duplicate column name: thread_id`); serial init
863
- # migrates the fresh DB exactly once.
864
- .venv/bin/pytest tests/test_codex_agent_live.py \
863
+ # migrates the fresh DB exactly once. test_litellm_judge_live.py
864
+ # reuses these same CODEX_* secrets to exercise
865
+ # checker_context.api_route.route: litellm end-to-end (PR #137
866
+ # review: "nothing in the repo exercises the feature").
867
+ .venv/bin/pytest tests/test_codex_agent_live.py tests/test_litellm_judge_live.py \
865
868
  -m live -n0 -v --tb=short --strict-markers -ra \
866
869
  --junit-xml=tmp/junit-codex-live.xml
867
870
 
@@ -878,7 +881,7 @@ jobs:
878
881
  passed = total - skipped - errors - failures
879
882
  print(f"codex-live passed={passed} skipped={skipped} errors={errors} failures={failures}")
880
883
  if passed < 1:
881
- sys.exit("test_codex_agent_live.py reported zero PASSED tests (missing API key / silent skip?)")
884
+ sys.exit("Live Codex/litellm-judge tests reported zero PASSED tests (missing API key / silent skip?)")
882
885
  PY
883
886
 
884
887
  - name: Upload Codex live-test artifacts on failure
@@ -140,7 +140,14 @@ jobs:
140
140
  fi
141
141
 
142
142
  - name: Install build + release tools
143
- run: uv tool install python-semantic-release && uv tool install twine
143
+ # Pinned: python-semantic-release declares gitpython~=3.0, so an
144
+ # unpinned install can resolve GitPython 3.1.60+, which removed
145
+ # git.Actor.name_email_regex and breaks semantic-release's `version`
146
+ # command outright ("type object 'Actor' has no attribute
147
+ # 'name_email_regex'"). Pin both explicitly until upstream adapts.
148
+ run: |
149
+ uv tool install python-semantic-release==10.6.1 --with gitpython==3.1.59
150
+ uv tool install twine
144
151
 
145
152
  - name: Run semantic-release (bump + tag, no push yet)
146
153
  id: release
@@ -157,7 +164,7 @@ jobs:
157
164
  # version to pyproject.toml + __init__.py, tags it, and regenerates the
158
165
  # changelog, but does not push yet (--no-push) so we can regenerate
159
166
  # uv.lock and amend before sending.
160
- PSR="uv tool run --from python-semantic-release semantic-release"
167
+ PSR="uv tool run --from python-semantic-release==10.6.1 --with gitpython==3.1.59 semantic-release"
161
168
  $PSR version "--$BUMP" --no-vcs-release --no-push --changelog
162
169
  # A dispatch always cuts a release; report the just-published version.
163
170
  echo "version=$($PSR version --print)" >> "$GITHUB_OUTPUT"
@@ -72,3 +72,6 @@ refs/
72
72
 
73
73
  # Derived pyright config for the CE036 contract engine (tests/lint/pyright_config.py)
74
74
  .pyright-tests.json
75
+
76
+ # Local evalboard dataset for `next dev` (EVALBOARD_LOCAL_RUNS_DIR)
77
+ evalboard/.local-runs/
@@ -2,6 +2,105 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v0.11.4 (2026-08-27)
6
+
7
+ ### Chores
8
+
9
+ - Add @CarlesUIPath as a code owner ([#140](https://github.com/UiPath/coder_eval/pull/140),
10
+ [`8fff865`](https://github.com/UiPath/coder_eval/commit/8fff8651589b2e43922321c689a66bb3aa41330d))
11
+
12
+ - Sync PR-review comment allowlist with CODEOWNERS
13
+ ([#140](https://github.com/UiPath/coder_eval/pull/140),
14
+ [`8fff865`](https://github.com/UiPath/coder_eval/commit/8fff8651589b2e43922321c689a66bb3aa41330d))
15
+
16
+ ### Features
17
+
18
+ - **docker**: Bake litellm extra into the docker image
19
+ ([#142](https://github.com/UiPath/coder_eval/pull/142),
20
+ [`3f4ae36`](https://github.com/UiPath/coder_eval/commit/3f4ae363b15024e2a033cf92ccda6befaef3a8b9))
21
+
22
+
23
+ ## v0.11.3 (2026-08-27)
24
+
25
+ ### Bug Fixes
26
+
27
+ - **checker-context**: Typed model, reject litellm+agent_judge/sim, live test
28
+ ([#137](https://github.com/UiPath/coder_eval/pull/137),
29
+ [`727bb7b`](https://github.com/UiPath/coder_eval/commit/727bb7bee459b43c51af93067907687c5e04cfc8))
30
+
31
+ - **eval-routing**: Restore DEFAULT_JUDGE_MODEL floor + add litellm judge transport
32
+ ([#137](https://github.com/UiPath/coder_eval/pull/137),
33
+ [`727bb7b`](https://github.com/UiPath/coder_eval/commit/727bb7bee459b43c51af93067907687c5e04cfc8))
34
+
35
+ - **evalboard**: Exclude carried-forward passes from the wall-clock aggregates
36
+ ([#125](https://github.com/UiPath/coder_eval/pull/125),
37
+ [`dd918e6`](https://github.com/UiPath/coder_eval/commit/dd918e68a454f39c8254f74fe2e4f346cff3a16f))
38
+
39
+ - **release**: Pin python-semantic-release + GitPython to unbreak version bump
40
+ ([#139](https://github.com/UiPath/coder_eval/pull/139),
41
+ [`ef74014`](https://github.com/UiPath/coder_eval/commit/ef74014d3dd4b389f794e0cba743fc67ed430df8))
42
+
43
+ - **routing**: Make _resolve_backend_route's match exhaustive
44
+ ([#137](https://github.com/UiPath/coder_eval/pull/137),
45
+ [`727bb7b`](https://github.com/UiPath/coder_eval/commit/727bb7bee459b43c51af93067907687c5e04cfc8))
46
+
47
+ ### Continuous Integration
48
+
49
+ - Retrigger checks (GH Actions appeared stalled repo-wide)
50
+ ([#137](https://github.com/UiPath/coder_eval/pull/137),
51
+ [`727bb7b`](https://github.com/UiPath/coder_eval/commit/727bb7bee459b43c51af93067907687c5e04cfc8))
52
+
53
+ - Retrigger checks (previous push did not trigger CI)
54
+ ([#137](https://github.com/UiPath/coder_eval/pull/137),
55
+ [`727bb7b`](https://github.com/UiPath/coder_eval/commit/727bb7bee459b43c51af93067907687c5e04cfc8))
56
+
57
+ - **fix**: Install litellm extra for pyright, address CodeQL findings
58
+ ([#137](https://github.com/UiPath/coder_eval/pull/137),
59
+ [`727bb7b`](https://github.com/UiPath/coder_eval/commit/727bb7bee459b43c51af93067907687c5e04cfc8))
60
+
61
+ ### Documentation
62
+
63
+ - **timing**: Trim justification prose from the wall-clock comments
64
+ ([#125](https://github.com/UiPath/coder_eval/pull/125),
65
+ [`dd918e6`](https://github.com/UiPath/coder_eval/commit/dd918e68a454f39c8254f74fe2e4f346cff3a16f))
66
+
67
+ ### Features
68
+
69
+ - **eval-routing**: Decouple judge/agent_judge backend+model from the agent's own route
70
+ ([#137](https://github.com/UiPath/coder_eval/pull/137),
71
+ [`727bb7b`](https://github.com/UiPath/coder_eval/commit/727bb7bee459b43c51af93067907687c5e04cfc8))
72
+
73
+ - **eval-routing**: Decouple judge/agent_judge backend+model from the agent's route
74
+ ([#137](https://github.com/UiPath/coder_eval/pull/137),
75
+ [`727bb7b`](https://github.com/UiPath/coder_eval/commit/727bb7bee459b43c51af93067907687c5e04cfc8))
76
+
77
+ - **evalboard**: Chart seconds per passed task on the overview
78
+ ([#125](https://github.com/UiPath/coder_eval/pull/125),
79
+ [`dd918e6`](https://github.com/UiPath/coder_eval/commit/dd918e68a454f39c8254f74fe2e4f346cff3a16f))
80
+
81
+ - **evalboard**: Read the time ratio without hovering
82
+ ([#125](https://github.com/UiPath/coder_eval/pull/125),
83
+ [`dd918e6`](https://github.com/UiPath/coder_eval/commit/dd918e68a454f39c8254f74fe2e4f346cff3a16f))
84
+
85
+ - **evalboard**: Replace the turn-budget signal with time per passed task
86
+ ([#125](https://github.com/UiPath/coder_eval/pull/125),
87
+ [`dd918e6`](https://github.com/UiPath/coder_eval/commit/dd918e68a454f39c8254f74fe2e4f346cff3a16f))
88
+
89
+ - **evalboard**: Run the wall-clock signal beside the turn budget, behind tabs
90
+ ([#125](https://github.com/UiPath/coder_eval/pull/125),
91
+ [`dd918e6`](https://github.com/UiPath/coder_eval/commit/dd918e68a454f39c8254f74fe2e4f346cff3a16f))
92
+
93
+ - **litellm-judge**: Support arbitrary litellm kwargs via params/auth
94
+ ([#137](https://github.com/UiPath/coder_eval/pull/137),
95
+ [`727bb7b`](https://github.com/UiPath/coder_eval/commit/727bb7bee459b43c51af93067907687c5e04cfc8))
96
+
97
+ ### Refactoring
98
+
99
+ - **litellm-judge**: Drop settings coupling, rename auth to env_params
100
+ ([#137](https://github.com/UiPath/coder_eval/pull/137),
101
+ [`727bb7b`](https://github.com/UiPath/coder_eval/commit/727bb7bee459b43c51af93067907687c5e04cfc8))
102
+
103
+
5
104
  ## v0.11.2 (2026-08-24)
6
105
 
7
106
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: coder-eval
3
- Version: 0.11.2
3
+ Version: 0.11.4
4
4
  Summary: Evaluate, benchmark, and A/B-test AI coding agents (Claude Code, Codex, Gemini/Antigravity) with sandboxed, reproducible YAML task suites.
5
5
  Project-URL: Homepage, https://coder-eval.com
6
6
  Project-URL: Repository, https://github.com/UiPath/coder_eval
@@ -58,6 +58,8 @@ Requires-Dist: pytest-mock>=3.15.1; extra == 'dev'
58
58
  Requires-Dist: pytest-xdist[psutil]>=3.0.0; extra == 'dev'
59
59
  Requires-Dist: pytest>=9.0.2; extra == 'dev'
60
60
  Requires-Dist: ruff>=0.15.7; extra == 'dev'
61
+ Provides-Extra: litellm
62
+ Requires-Dist: litellm<2.0.0,>=1.95.0; extra == 'litellm'
61
63
  Provides-Extra: uipath
62
64
  Requires-Dist: uipath>=2.10.31; extra == 'uipath'
63
65
  Description-Content-Type: text/markdown
@@ -41,7 +41,7 @@ inputs:
41
41
  version:
42
42
  description: coder-eval version to install from PyPI, or "local" to install from the action checkout
43
43
  required: false
44
- default: "0.11.2" # <-- kept in sync with releases by release.yml
44
+ default: "0.11.4" # <-- kept in sync with releases by release.yml
45
45
  run-dir:
46
46
  description: Run directory (--run-dir)
47
47
  required: false
@@ -48,12 +48,16 @@ COPY src/ ./src/
48
48
  # experiments/default.yaml is force-included by hatchling per pyproject.toml.
49
49
  COPY experiments/default.yaml ./experiments/default.yaml
50
50
 
51
- # Codex and Antigravity are always baked into the image -- peers to the
52
- # claude-code agent installed above -- so all built-in agents ship in every
53
- # build. `openai-codex` (+ its pinned cli-bin) and `google-antigravity` (which
54
- # bundles its `localharness` binary as a manylinux wheel) come from public PyPI,
55
- # so this needs no private-index credentials. The RUN below always passes
56
- # `--extra codex --extra antigravity`.
51
+ # Codex, Antigravity, and litellm are always baked into the image -- codex/
52
+ # antigravity are peers to the claude-code agent installed above, so all
53
+ # built-in agents ship in every build; litellm backs the `checker_context.
54
+ # api_route.route: litellm` judge dispatch (see pyproject.toml's `litellm`
55
+ # extra), which every DockerRunner-isolated task needs available IN-container
56
+ # since the checker runs there too, not just on the host. `openai-codex`
57
+ # (+ its pinned cli-bin), `google-antigravity` (which bundles its
58
+ # `localharness` binary as a manylinux wheel), and `litellm` all come from
59
+ # public PyPI, so this needs no private-index credentials. The RUN below
60
+ # always passes `--extra codex --extra antigravity --extra litellm`.
57
61
  #
58
62
  # CODER_EVAL_UV_EXTRAS carries ADDITIONAL opt-in extras on top of those; it
59
63
  # defaults to none. `make docker-image-full` passes `--extra uipath`, which
@@ -67,10 +71,10 @@ ARG CODER_EVAL_UV_EXTRAS=""
67
71
  # newer than the gate window); callers may override.
68
72
  ARG SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS="openai-codex-cli-bin,openai-codex,google-antigravity"
69
73
 
70
- # All extras (codex, antigravity, and the opt-in uipath) resolve from public
71
- # PyPI per uv.lock, so the build needs no private-index credentials.
74
+ # All extras (codex, antigravity, litellm, and the opt-in uipath) resolve from
75
+ # public PyPI per uv.lock, so the build needs no private-index credentials.
72
76
  RUN export SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS="${SAFE_CHAIN_MINIMUM_PACKAGE_AGE_EXCLUSIONS}" && \
73
- uv export --frozen --extra codex --extra antigravity ${CODER_EVAL_UV_EXTRAS} | uv pip install --system -r /dev/stdin
77
+ uv export --frozen --extra codex --extra antigravity --extra litellm ${CODER_EVAL_UV_EXTRAS} | uv pip install --system -r /dev/stdin
74
78
 
75
79
  # Sanity check: the in-container entrypoint subcommand must be wired up.
76
80
  RUN coder-eval _run-task-internal --help > /dev/null
@@ -130,6 +130,7 @@ From `ExperimentVariant` (`coder_eval/models/experiment.py`):
130
130
  | `initial_prompt_file` | str | Prompt replacement loaded from a file |
131
131
  | `run_limits` | block | Per-key cap overrides (`max_turns`, `task_timeout`, token/USD budgets) |
132
132
  | `driver` | `tempdir`/`docker` | Sandbox driver — enables tempdir-vs-docker arms |
133
+ | `checker_context` | dict | Backend/model override for the evaluation side (judge, simulator) — see [Checker Context](TASK_DEFINITION_GUIDE.md#checker-context); **not** currently `-D`-reachable |
133
134
 
134
135
  The `agent` dict is the lever for most A/B tests. Anything on `AgentConfig` is
135
136
  fair game: `model`, `permission_mode`, `allowed_tools`, `disallowed_tools`,
@@ -60,9 +60,11 @@ The mechanics:
60
60
  - The simulator is a **tools-disabled Claude Code agent** with `allowed_tools: []`, an explicit
61
61
  deny-list, and no plugins or settings sources. It is pure text-in / text-out, and it **cannot see
62
62
  the sandbox** — no files, no terminal, no agent reasoning. Only what the agent writes in the chat.
63
- - The simulator shares the coding agent's resolved `ApiRoute`, so backend and model come from the
64
- run's routing (`--backend direct` / `--backend bedrock`) rather than from the `simulation:` block.
65
- There is no model field here to set.
63
+ - The simulator runs on the run's resolved *evaluation* `ApiRoute` the coding agent's own route
64
+ (`--backend direct` / `--backend bedrock`) unless `checker_context.api_route.route` overrides it
65
+ (see [Checker Context](TASK_DEFINITION_GUIDE.md#checker-context)). The **model** is separately
66
+ pinned by `simulation.model` (see [Simulation](TASK_DEFINITION_GUIDE.md#simulation)), not inherited
67
+ from the route — so an A/B varying the subject model doesn't silently vary the simulated user too.
66
68
 
67
69
  **Agent-kind constraint.** The *subject* agent can be any registered kind — the dialog driver only
68
70
  calls the agent's `communicate()`, so Codex and plugin agents work. The *simulator*, however, is
@@ -35,6 +35,7 @@ Complete reference for defining evaluation tasks in Coder Eval.
35
35
  - [llm_judge](#llm_judge)
36
36
  - [agent_judge](#agent_judge)
37
37
  - [skill_triggered](#skill_triggered)
38
+ - [Checker Context](#checker-context)
38
39
  - [Reference Solutions](#reference-solutions)
39
40
  - [Pre-Run Commands](#pre-run-commands)
40
41
  - [Post-Run Commands](#post-run-commands)
@@ -63,6 +64,7 @@ reference: { ... } # Optional reference solution (a directory
63
64
  pre_run: [ ... ] # Optional pre-run commands (before agent starts)
64
65
  post_run: [ ... ] # Optional post-run commands
65
66
  dataset: { ... } # Optional dataset fan-out (one task -> N row-tasks)
67
+ checker_context: { ... } # Optional: backend/model for the evaluation side (judge, simulator)
66
68
  ```
67
69
 
68
70
  ### `dataset`
@@ -1295,6 +1297,40 @@ Observed label is `"yes"` when either signal is found, else `"no"`. Expected lab
1295
1297
 
1296
1298
  **Typical pattern.** Label each dataset row with its true skill (`expected_skill`, `""` for negatives) and stack one `skill_triggered` criterion per skill against the same dataset — each gets its own confusion matrix from the same agent traces. This is the natural companion to a skill A/B experiment (skill plugin on vs. off); see the [A/B Experiment Guide](AB_EXPERIMENTS.md#recipe-ab-a-skill).
1297
1299
 
1300
+ ## Checker Context
1301
+
1302
+ `checker_context` carries task-authored config for the success-checking side, namespaced by reserved key. Currently the only recognized namespace is **`api_route`**:
1303
+
1304
+ ```yaml
1305
+ success_criteria:
1306
+ - type: llm_judge
1307
+ prompt: "Grade the fix for correctness."
1308
+
1309
+ checker_context:
1310
+ api_route:
1311
+ route: bedrock # which backend the whole eval side (llm_judge/agent_judge/simulator) uses
1312
+ model: claude-haiku-4-5 # model override for that route
1313
+ ```
1314
+
1315
+ - `route` selects which backend the WHOLE evaluation side calls (`llm_judge`, `agent_judge`, and the simulator all share one resolved eval route per run — this isn't per-criterion), **decoupled from the agent's own route** (a Claude agent can be graded by a differently-backed judge, or vice versa). This is a backend *name* (`direct` / `bedrock` / `litellm`), not a route object. For `direct`/`bedrock` credentials are never read from the task, always from the matching environment variables (`ANTHROPIC_API_KEY` for `direct`, `AWS_BEARER_TOKEN_BEDROCK`/`AWS_REGION` for `bedrock`). An unconfigured or unknown backend name raises at dispatch rather than silently falling back. **`route: litellm` dispatches `llm_judge` through the `litellm` library** (the `coder-eval[litellm]` extra, `litellm.acompletion`) rather than assuming one wire protocol — a gateway-routed judge model (e.g. an Azure AI `/openai/v1` deployment) rarely speaks Anthropic Messages, so this lets `model` carry its own provider hint (e.g. `azure/gpt-5.6-luna`) and get that provider's actual request/response shape handled by the library. Unlike the other two backends, `route: litellm` has NO implicit env-var fallback — see `params`/`env_params` below, which is how it's configured. `model` is required for `route: litellm` (there is no default open-weight/gateway model).
1316
+ - `model` overrides the model that resolved route uses for **`llm_judge` only** — when the criterion itself leaves `model:` unset (precedence: an explicit per-criterion `model:` always wins; below that, `checker_context.api_route.model`; below that, the built-in `DEFAULT_JUDGE_MODEL`). This floor is deliberate and never the agent's own model — an unpinned judge must grade identically regardless of which model the agent under test is using, so `resolve_evaluation_route` never lets the agent's env-configured model (e.g. `BEDROCK_MODEL`) leak into `route.model` on its own; `route.model` is set only when this override was actually given. This works because every `ApiRoute` (`DirectRoute`/`BedrockRoute`/`LiteLLMRoute`) carries its own `model` field; the orchestrator bakes the override into the resolved route's `model` before any criterion runs, so `llm_judge` just reads `context.route.model` — it never reads `checker_context` directly. **`agent_judge` and the simulator do not honor this override** — `agent_judge`'s sub-agent model comes from the criterion's own `agent:` block (defaulted to a fixed judge model), and the simulator's model is pinned by `SimulationConfig.model` (see [Simulation](#simulation) below) — both independent of `checker_context.api_route.model` by design, for the same "measuring instrument stays fixed" reason.
1317
+ - `params`/`env_params` (**`route: litellm` only**) are how the call is actually configured — there is no fallback to the agent's own `LITELLM_BASE_URL`/`LITELLM_AUTH_TOKEN` env vars, since a gateway-routed judge model rarely reuses the agent's own LiteLLM proxy/credential. They also cover any of the dozens of other provider-specific kwargs `litellm.acompletion` accepts (`aws_access_key_id`, `vertex_project`, `api_version`, ...), which have no dedicated field on `LiteLLMRoute`:
1318
+ ```yaml
1319
+ checker_context:
1320
+ api_route:
1321
+ route: litellm
1322
+ model: azure/gpt-5.6-luna
1323
+ params: # arbitrary literal passthrough kwargs to litellm.acompletion
1324
+ api_version: "2024-05-01"
1325
+ env_params: # param name -> ENV VAR NAME (never the secret itself)
1326
+ api_base: LITELLM_BASE_URL
1327
+ api_key: LITELLM_AUTH_TOKEN
1328
+ ```
1329
+ `params` is merged straight into the `litellm.acompletion(**kwargs)` call — litellm validates the param names itself, so there's no allowlist to keep in sync here. `env_params` maps a kwarg name to the *name* of an environment variable; the value is resolved right before the call, so no secret is ever written into task/experiment YAML — this is how an arbitrary provider's config, including secrets (IAM keys, an Azure AD token, a service-account path, ...), is representable without a dedicated field per provider. `env_params` is resolved after `params`, so it always wins for the same key. Rejected at task-load time if given without `route: litellm`. For an Azure deployment, pin `api_version` via `params` to whatever API version the agent side is actually configured for (e.g. Codex's `CODEX_API_VERSION`) — the judge has no way to inherit it, and a mismatched version can hit a different shape of the same endpoint.
1330
+ **`route: litellm` is `llm_judge`-only** — `agent_judge` and the simulator run as real Claude Code CLI subprocesses that speak the Anthropic Messages protocol, so pointing them at an arbitrary litellm-fronted gateway (which may speak an entirely different wire protocol) isn't representable. The orchestrator rejects the combination at resolution time (a clear error, not a silent misroute) if the task has an enabled `agent_judge` criterion or `simulation.enabled: true` alongside `route: litellm` — use `route: bedrock`/`direct` for those instead.
1331
+
1332
+ `checker_context` merges shallow-per-namespace across `default_experiment.defaults.checker_context` → `experiment.defaults.checker_context` → `task.checker_context` → `variant.checker_context` (same 4-layer precedence as `agent`/`simulation`). So a judge-model A/B, or a judge-backend A/B, is a variant-level config change, not an edit to every task YAML.
1333
+
1298
1334
  ## Reference Solutions
1299
1335
 
1300
1336
  A reference solution is always a **directory**, given relative to the task YAML's own directory:
@@ -1577,7 +1613,7 @@ simulation:
1577
1613
  | `check_criteria` | `end_of_dialog` | `end_of_dialog`, `every_turn`, or `both`. |
1578
1614
  | `model` | `anthropic.claude-sonnet-4-6` | Model that plays the simulated user. Auto-translated to the run's backend (Bedrock inference profile / bare Anthropic alias), the same way [`llm_judge`](#llm_judge)'s `model` is. |
1579
1615
 
1580
- The simulator runs as a tools-disabled Claude Code agent sharing the coding agent's `ApiRoute`, so temperature and sampling are resolved at the route level (same `-b` flag as the coding agent) and are not configured on this block. The **model is not**: it is pinned by `model` above. Inheriting it from the route meant `BEDROCK_MODEL` decided who the simulated user was, so an A/B varying the subject model silently varied its interlocutor too. Hold `model` fixed across variants for the same reason you hold a judge model fixed — the simulator is part of the measuring instrument, not the thing being measured.
1616
+ The simulator runs as a tools-disabled Claude Code agent on the run's resolved *evaluation* `ApiRoute` (the coding agent's own route unless [`checker_context.api_route.route`](#checker-context) overrides it), so temperature and sampling are resolved at the route level (same `-b` flag as the coding agent by default) and are not configured on this block. The **model is not**: it is pinned by `model` above. Inheriting it from the route meant `BEDROCK_MODEL` decided who the simulated user was, so an A/B varying the subject model silently varied its interlocutor too. Hold `model` fixed across variants for the same reason you hold a judge model fixed — the simulator is part of the measuring instrument, not the thing being measured.
1581
1617
 
1582
1618
  **Semantics:**
1583
1619
 
@@ -0,0 +1,10 @@
1
+ // Column definitions, surfaced as native `title` tooltips on table headers.
2
+ // Shared by the run-page task grid and the task-page message timeline so the two
3
+ // describe the same number the same way. Wording is page-neutral (no "this task"
4
+ // / "this call") because both surfaces read the same string.
5
+ export const TOKEN_COLUMN_HELP = {
6
+ input: "Input tokens (uncached): fresh prompt input billed at the full input rate — the slice that was neither written to nor read from the prompt cache.",
7
+ output: "Output tokens: text, code, tool arguments and reasoning the model generated.",
8
+ cw: "Cache-write tokens: context newly written into the prompt cache (cache_creation_input_tokens).",
9
+ cr: "Cache-read tokens: cached input re-billed on every later call (cache_read_input_tokens). Usually the dominant cost line.",
10
+ } satisfies Record<string, string>;
@@ -0,0 +1,80 @@
1
+ import { describe, expect, test } from "vitest";
2
+ import { fireEvent, render, screen } from "@testing-library/react";
3
+ import type { RunPoint } from "@/lib/overview";
4
+ import { EfficiencyCharts } from "../efficiency-charts";
5
+
6
+ function point(overrides: Partial<RunPoint> = {}): RunPoint {
7
+ return {
8
+ runId: "2026-08-18_04-51-58",
9
+ timestamp: Date.UTC(2026, 7, 18),
10
+ harness: "codex",
11
+ successRate: 96,
12
+ turnBudgetRate: 87,
13
+ withinExpectedTimeRate: 78,
14
+ timePerPassedTask: 192,
15
+ ...overrides,
16
+ };
17
+ }
18
+
19
+ function renderCharts(scoped = false) {
20
+ return render(
21
+ <EfficiencyCharts
22
+ data={[point()]}
23
+ harnesses={["codex"]}
24
+ windowStart={Date.UTC(2026, 7, 1)}
25
+ windowEnd={Date.UTC(2026, 7, 31)}
26
+ scoped={scoped}
27
+ />,
28
+ );
29
+ }
30
+
31
+ describe("EfficiencyCharts", () => {
32
+ test("opens on the wall-clock metric", () => {
33
+ renderCharts();
34
+ expect(screen.getByRole("heading")).toHaveTextContent(
35
+ "Time per Passed Task",
36
+ );
37
+ expect(
38
+ screen.getByRole("tab", { name: "Time" }),
39
+ ).toHaveAttribute("aria-selected", "true");
40
+ });
41
+
42
+ test("the Turns tab still reaches the retired turn-budget chart", () => {
43
+ // The turn budget is kept visible while the derived expected-time line
44
+ // is being watched; retiring it is deleting this tab.
45
+ renderCharts();
46
+ fireEvent.click(screen.getByRole("tab", { name: "Turns" }));
47
+ expect(screen.getByRole("heading")).toHaveTextContent(
48
+ "Within Expected Turns (%)",
49
+ );
50
+ expect(screen.getByText(/1.5× their expected turns/)).toBeInTheDocument();
51
+ expect(
52
+ screen.getByRole("tab", { name: "Turns" }),
53
+ ).toHaveAttribute("aria-selected", "true");
54
+ expect(screen.getByRole("tab", { name: "Time" })).toHaveAttribute(
55
+ "aria-selected",
56
+ "false",
57
+ );
58
+ });
59
+
60
+ test("switching back restores the wall-clock blurb", () => {
61
+ renderCharts();
62
+ fireEvent.click(screen.getByRole("tab", { name: "Turns" }));
63
+ fireEvent.click(screen.getByRole("tab", { name: "Time" }));
64
+ expect(
65
+ screen.getByText(/the number that passed/),
66
+ ).toBeInTheDocument();
67
+ });
68
+
69
+ test("says so when the numbers are filter-scoped", () => {
70
+ renderCharts(true);
71
+ expect(
72
+ screen.getByText(/scoped to the active filter/),
73
+ ).toBeInTheDocument();
74
+ });
75
+
76
+ test("no filter note when the window is unscoped", () => {
77
+ renderCharts();
78
+ expect(screen.queryByText(/scoped to the active filter/)).toBeNull();
79
+ });
80
+ });
@@ -37,6 +37,44 @@ describe("HarnessLegend", () => {
37
37
  describe("HarnessTooltip", () => {
38
38
  const s = series("claude-code", "codex");
39
39
 
40
+ test("formats the value with the chart's own formatter", () => {
41
+ render(
42
+ <HarnessTooltip
43
+ active
44
+ label={1_700_000_000_000}
45
+ series={s}
46
+ suffix="per passed task"
47
+ emptyText="no passing tasks"
48
+ format={(v) => `${Math.round(v)}s`}
49
+ payload={[{ dataKey: s[1].dataKey, value: 192.3 }]}
50
+ />,
51
+ );
52
+ expect(screen.getByText("192s per passed task")).toBeInTheDocument();
53
+ });
54
+
55
+ test("adds the secondary line for the hovered point only", () => {
56
+ // The within-expected rate belongs to one run, so it rides the hover on
57
+ // that run's point instead of being summarized over the whole chart.
58
+ render(
59
+ <HarnessTooltip
60
+ active
61
+ label={1_700_000_000_000}
62
+ series={s}
63
+ suffix="per passed task"
64
+ emptyText="no passing tasks"
65
+ secondary={(harness) =>
66
+ harness === "codex" ? "78% within 2× expected" : null
67
+ }
68
+ payload={[
69
+ { dataKey: s[0].dataKey, value: 300 },
70
+ { dataKey: s[1].dataKey, value: 192 },
71
+ ]}
72
+ />,
73
+ );
74
+ expect(screen.getByText("78% within 2× expected")).toBeInTheDocument();
75
+ expect(screen.queryAllByText(/within/)).toHaveLength(1);
76
+ });
77
+
40
78
  test("shows only the harnesses that actually ran at the hovered x", () => {
41
79
  // Recharts hands over every series, including the ones with no value
42
80
  // here. Listing those would invent runs that never happened.
@@ -12,14 +12,16 @@ function point(
12
12
  harness: string,
13
13
  timestamp: number,
14
14
  successRate: number | null,
15
- turnBudgetRate: number | null = null,
15
+ withinExpectedTimeRate: number | null = null,
16
16
  ): RunPoint {
17
17
  return {
18
18
  runId: `run-${timestamp}`,
19
19
  timestamp,
20
20
  harness,
21
21
  successRate,
22
- turnBudgetRate,
22
+ turnBudgetRate: null,
23
+ withinExpectedTimeRate,
24
+ timePerPassedTask: null,
23
25
  };
24
26
  }
25
27
 
@@ -99,7 +101,7 @@ describe("pivotByHarness", () => {
99
101
  timestamp: 100,
100
102
  [key]: 90,
101
103
  });
102
- expect(pivotByHarness(pts, ["codex"], "turnBudgetRate").rows[0]).toEqual(
104
+ expect(pivotByHarness(pts, ["codex"], "withinExpectedTimeRate").rows[0]).toEqual(
103
105
  { timestamp: 100, [key]: 40 },
104
106
  );
105
107
  });
@@ -111,7 +113,7 @@ describe("pivotByHarness", () => {
111
113
  const { rows } = pivotByHarness(
112
114
  [point("codex", 100, 90, null)],
113
115
  ["codex"],
114
- "turnBudgetRate",
116
+ "withinExpectedTimeRate",
115
117
  );
116
118
  expect(rows).toEqual([]);
117
119
  });