coder-eval 0.9.0__tar.gz → 0.9.1__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 (582) hide show
  1. {coder_eval-0.9.0 → coder_eval-0.9.1}/CHANGELOG.md +8 -0
  2. {coder_eval-0.9.0 → coder_eval-0.9.1}/PKG-INFO +1 -1
  3. {coder_eval-0.9.0 → coder_eval-0.9.1}/action.yml +1 -1
  4. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/agents/ANTIGRAVITY.md +4 -7
  5. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/agents/CLAUDE_CODE.md +4 -3
  6. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/agents/CODEX.md +1 -0
  7. {coder_eval-0.9.0 → coder_eval-0.9.1}/pyproject.toml +1 -1
  8. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/__init__.py +1 -1
  9. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/agents/antigravity_agent.py +45 -12
  10. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/agents/codex_agent.py +49 -14
  11. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/orchestration/early_stop.py +1 -1
  12. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_codex_agent_live.py +39 -0
  13. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_early_stop.py +530 -10
  14. {coder_eval-0.9.0 → coder_eval-0.9.1}/uv.lock +1 -1
  15. {coder_eval-0.9.0 → coder_eval-0.9.1}/.claude/commands/coder-eval-code-review-full.md +0 -0
  16. {coder_eval-0.9.0 → coder_eval-0.9.1}/.claude/commands/coder-eval-code-review-wf.md +0 -0
  17. {coder_eval-0.9.0 → coder_eval-0.9.1}/.claude/commands/coder-eval-code-review.md +0 -0
  18. {coder_eval-0.9.0 → coder_eval-0.9.1}/.claude/commands/coder-eval-create-plan.md +0 -0
  19. {coder_eval-0.9.0 → coder_eval-0.9.1}/.claude/commands/coder-eval-implement-plan.md +0 -0
  20. {coder_eval-0.9.0 → coder_eval-0.9.1}/.claude/commands/coder-eval-review.md +0 -0
  21. {coder_eval-0.9.0 → coder_eval-0.9.1}/.claude/commands/coder-eval-run-analysis.md +0 -0
  22. {coder_eval-0.9.0 → coder_eval-0.9.1}/.claude/commands/coder-eval-task-create.md +0 -0
  23. {coder_eval-0.9.0 → coder_eval-0.9.1}/.claude/harness-candidates.md +0 -0
  24. {coder_eval-0.9.0 → coder_eval-0.9.1}/.claude/shared/axes.md +0 -0
  25. {coder_eval-0.9.0 → coder_eval-0.9.1}/.claude/shared/multi-model-review.md +0 -0
  26. {coder_eval-0.9.0 → coder_eval-0.9.1}/.claude/shared/review-rubric.md +0 -0
  27. {coder_eval-0.9.0 → coder_eval-0.9.1}/.claude/shared/run-layout.md +0 -0
  28. {coder_eval-0.9.0 → coder_eval-0.9.1}/.claude/workflows/cr-axis.js +0 -0
  29. {coder_eval-0.9.0 → coder_eval-0.9.1}/.claude/workflows/cr-parent.js +0 -0
  30. {coder_eval-0.9.0 → coder_eval-0.9.1}/.env.example +0 -0
  31. {coder_eval-0.9.0 → coder_eval-0.9.1}/.github/CODEOWNERS +0 -0
  32. {coder_eval-0.9.0 → coder_eval-0.9.1}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
  33. {coder_eval-0.9.0 → coder_eval-0.9.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  34. {coder_eval-0.9.0 → coder_eval-0.9.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  35. {coder_eval-0.9.0 → coder_eval-0.9.1}/.github/code_review.md +0 -0
  36. {coder_eval-0.9.0 → coder_eval-0.9.1}/.github/dependabot.yml +0 -0
  37. {coder_eval-0.9.0 → coder_eval-0.9.1}/.github/pages-stub/index.html +0 -0
  38. {coder_eval-0.9.0 → coder_eval-0.9.1}/.github/scripts/release_notes.py +0 -0
  39. {coder_eval-0.9.0 → coder_eval-0.9.1}/.github/workflows/claude-pr-review.yml +0 -0
  40. {coder_eval-0.9.0 → coder_eval-0.9.1}/.github/workflows/codeql.yml +0 -0
  41. {coder_eval-0.9.0 → coder_eval-0.9.1}/.github/workflows/conventional-commits.yml +0 -0
  42. {coder_eval-0.9.0 → coder_eval-0.9.1}/.github/workflows/docker-publish.yml +0 -0
  43. {coder_eval-0.9.0 → coder_eval-0.9.1}/.github/workflows/docs.yml +0 -0
  44. {coder_eval-0.9.0 → coder_eval-0.9.1}/.github/workflows/pr-checks.yml +0 -0
  45. {coder_eval-0.9.0 → coder_eval-0.9.1}/.github/workflows/publish-testpypi.yml +0 -0
  46. {coder_eval-0.9.0 → coder_eval-0.9.1}/.github/workflows/release.yml +0 -0
  47. {coder_eval-0.9.0 → coder_eval-0.9.1}/.gitignore +0 -0
  48. {coder_eval-0.9.0 → coder_eval-0.9.1}/.pre-commit-config.yaml +0 -0
  49. {coder_eval-0.9.0 → coder_eval-0.9.1}/.python-version +0 -0
  50. {coder_eval-0.9.0 → coder_eval-0.9.1}/ADOPTERS.md +0 -0
  51. {coder_eval-0.9.0 → coder_eval-0.9.1}/CLAUDE.md +0 -0
  52. {coder_eval-0.9.0 → coder_eval-0.9.1}/CODE_OF_CONDUCT.md +0 -0
  53. {coder_eval-0.9.0 → coder_eval-0.9.1}/CONTRIBUTING.md +0 -0
  54. {coder_eval-0.9.0 → coder_eval-0.9.1}/LICENSE +0 -0
  55. {coder_eval-0.9.0 → coder_eval-0.9.1}/Makefile +0 -0
  56. {coder_eval-0.9.0 → coder_eval-0.9.1}/NOTICE +0 -0
  57. {coder_eval-0.9.0 → coder_eval-0.9.1}/README.md +0 -0
  58. {coder_eval-0.9.0 → coder_eval-0.9.1}/SECURITY.md +0 -0
  59. {coder_eval-0.9.0 → coder_eval-0.9.1}/docker/Dockerfile +0 -0
  60. {coder_eval-0.9.0 → coder_eval-0.9.1}/docker/Dockerfile.runtime +0 -0
  61. {coder_eval-0.9.0 → coder_eval-0.9.1}/docker/coder_eval_entrypoint.sh +0 -0
  62. {coder_eval-0.9.0 → coder_eval-0.9.1}/docker/coder_eval_runtime_entrypoint.sh +0 -0
  63. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/AB_EXPERIMENTS.md +0 -0
  64. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/CI_GATE.md +0 -0
  65. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/DATASETS.md +0 -0
  66. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/DIALOG_MODE.md +0 -0
  67. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/DOCKER_ISOLATION.md +0 -0
  68. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/EXTENDING.md +0 -0
  69. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/REPORT_SCHEMA.md +0 -0
  70. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/TASK_DEFINITION_GUIDE.md +0 -0
  71. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/USER_GUIDE.md +0 -0
  72. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/assets/hero.gif +0 -0
  73. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/comparison.md +0 -0
  74. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/index.md +0 -0
  75. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/llms.txt +0 -0
  76. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/tutorials/01-first-evaluation.md +0 -0
  77. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/tutorials/02-ci-pipeline.md +0 -0
  78. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/tutorials/03-evalboard-local.md +0 -0
  79. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/tutorials/04-writing-a-task.md +0 -0
  80. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/tutorials/05-comparing-models.md +0 -0
  81. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/tutorials/06-use-docker-isolation.md +0 -0
  82. {coder_eval-0.9.0 → coder_eval-0.9.1}/docs/tutorials/README.md +0 -0
  83. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/.gitignore +0 -0
  84. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/README.md +0 -0
  85. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
  86. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/_components/col-help.tsx +0 -0
  87. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/_components/collapsible-rail.tsx +0 -0
  88. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/_components/harness-badge.tsx +0 -0
  89. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/_components/harness-selector.tsx +0 -0
  90. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/_components/scroll-table.tsx +0 -0
  91. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/_components/search-box.tsx +0 -0
  92. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/_components/unit-toggle.tsx +0 -0
  93. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/_components/version-list.tsx +0 -0
  94. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/_components/window-selector.tsx +0 -0
  95. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/_overview/daily-chart.tsx +0 -0
  96. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/_overview/tag-rail.tsx +0 -0
  97. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
  98. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/_overview/window-summary.tsx +0 -0
  99. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/api/download/route.ts +0 -0
  100. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/api/file/route.ts +0 -0
  101. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
  102. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/api/refresh/route.ts +0 -0
  103. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/error.tsx +0 -0
  104. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/globals.css +0 -0
  105. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/icon.png +0 -0
  106. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/layout.tsx +0 -0
  107. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/page.tsx +0 -0
  108. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/path-to-ga/page.tsx +0 -0
  109. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
  110. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/trends/actions.ts +0 -0
  111. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/trends/page.tsx +0 -0
  112. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/trends/trends-view.tsx +0 -0
  113. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
  114. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/watchlist/page.tsx +0 -0
  115. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
  116. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/next-env.d.ts +0 -0
  117. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/next.config.mjs +0 -0
  118. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/package.json +0 -0
  119. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/pnpm-lock.yaml +0 -0
  120. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/postcss.config.mjs +0 -0
  121. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/public/harness/antigravity.png +0 -0
  122. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/public/harness/claude-code.png +0 -0
  123. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/public/harness/codex.png +0 -0
  124. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/public/uipath.png +0 -0
  125. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/tailwind.config.ts +0 -0
  126. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/tsconfig.json +0 -0
  127. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/vitest.config.ts +0 -0
  128. {coder_eval-0.9.0 → coder_eval-0.9.1}/evalboard/vitest.setup.ts +0 -0
  129. {coder_eval-0.9.0 → coder_eval-0.9.1}/experiments/default.yaml +0 -0
  130. {coder_eval-0.9.0 → coder_eval-0.9.1}/experiments/early-stop-ab.yaml +0 -0
  131. {coder_eval-0.9.0 → coder_eval-0.9.1}/experiments/model-comparison.yaml +0 -0
  132. {coder_eval-0.9.0 → coder_eval-0.9.1}/experiments/permissions-smoke.yaml +0 -0
  133. {coder_eval-0.9.0 → coder_eval-0.9.1}/experiments/plugin-comparison.yaml +0 -0
  134. {coder_eval-0.9.0 → coder_eval-0.9.1}/experiments/prompt-mutations-example.yaml +0 -0
  135. {coder_eval-0.9.0 → coder_eval-0.9.1}/experiments/smoke_variants.yaml +0 -0
  136. {coder_eval-0.9.0 → coder_eval-0.9.1}/litellm/README.md +0 -0
  137. {coder_eval-0.9.0 → coder_eval-0.9.1}/litellm/litellm-config.yaml +0 -0
  138. {coder_eval-0.9.0 → coder_eval-0.9.1}/litellm/start-litellm.sh +0 -0
  139. {coder_eval-0.9.0 → coder_eval-0.9.1}/mkdocs.yml +0 -0
  140. {coder_eval-0.9.0 → coder_eval-0.9.1}/osv-scanner.toml +0 -0
  141. {coder_eval-0.9.0 → coder_eval-0.9.1}/scripts/check_commit_msg.sh +0 -0
  142. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/.gitattributes +0 -0
  143. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/agent.py +0 -0
  144. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/agents/__init__.py +0 -0
  145. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/agents/_logging.py +0 -0
  146. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/agents/claude_code_agent.py +0 -0
  147. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/agents/noop_agent.py +0 -0
  148. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/agents/registry.py +0 -0
  149. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/agents/watchdog.py +0 -0
  150. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/analysis.py +0 -0
  151. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/cli/__init__.py +0 -0
  152. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/cli/aggregate_command.py +0 -0
  153. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/cli/console.py +0 -0
  154. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/cli/evaluate_command.py +0 -0
  155. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/cli/plan_command.py +0 -0
  156. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/cli/report_command.py +0 -0
  157. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/cli/run_command.py +0 -0
  158. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/cli/run_helpers.py +0 -0
  159. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/cli/run_task_internal_command.py +0 -0
  160. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/cli/utils.py +0 -0
  161. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/config.py +0 -0
  162. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/criteria/__init__.py +0 -0
  163. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
  164. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/criteria/agent_judge.py +0 -0
  165. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/criteria/base.py +0 -0
  166. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/criteria/classification_match.py +0 -0
  167. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/criteria/command_executed.py +0 -0
  168. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/criteria/commands_efficiency.py +0 -0
  169. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/criteria/file_check.py +0 -0
  170. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/criteria/file_contains.py +0 -0
  171. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/criteria/file_exists.py +0 -0
  172. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/criteria/file_matches_regex.py +0 -0
  173. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/criteria/json_check.py +0 -0
  174. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/criteria/llm_judge.py +0 -0
  175. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/criteria/reference_comparison.py +0 -0
  176. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/criteria/run_command.py +0 -0
  177. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/criteria/skill_triggered.py +0 -0
  178. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/criteria/uipath_eval.py +0 -0
  179. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/errors/__init__.py +0 -0
  180. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/errors/agent.py +0 -0
  181. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/errors/budget.py +0 -0
  182. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/errors/categories.py +0 -0
  183. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/errors/categorization.py +0 -0
  184. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/errors/checker_misuse.py +0 -0
  185. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/errors/executor.py +0 -0
  186. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/errors/judge.py +0 -0
  187. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/errors/retry.py +0 -0
  188. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/errors/timeout.py +0 -0
  189. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/evaluation/__init__.py +0 -0
  190. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/evaluation/checker.py +0 -0
  191. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
  192. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
  193. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/evaluation/judge_context.py +0 -0
  194. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/evaluation/judge_models.py +0 -0
  195. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/evaluation/judge_persistence.py +0 -0
  196. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/evaluation/judge_usage.py +0 -0
  197. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/evaluation/sub_agent.py +0 -0
  198. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/evaluation/summaries.py +0 -0
  199. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/evaluation/verdict_tool.py +0 -0
  200. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/formatting.py +0 -0
  201. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/isolation/__init__.py +0 -0
  202. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/isolation/docker_runner.py +0 -0
  203. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/logging_config.py +0 -0
  204. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/models/__init__.py +0 -0
  205. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/models/agent_config.py +0 -0
  206. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/models/container_paths.py +0 -0
  207. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/models/criteria.py +0 -0
  208. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/models/enums.py +0 -0
  209. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/models/experiment.py +0 -0
  210. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/models/judge.py +0 -0
  211. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/models/judge_defaults.py +0 -0
  212. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/models/limits.py +0 -0
  213. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/models/merge_strategy.py +0 -0
  214. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/models/mutations.py +0 -0
  215. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/models/results.py +0 -0
  216. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/models/routing.py +0 -0
  217. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/models/sandbox.py +0 -0
  218. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/models/tasks.py +0 -0
  219. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/models/telemetry.py +0 -0
  220. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/models/templates.py +0 -0
  221. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/orchestration/__init__.py +0 -0
  222. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/orchestration/batch.py +0 -0
  223. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/orchestration/config.py +0 -0
  224. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/orchestration/config_merge.py +0 -0
  225. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/orchestration/evaluation.py +0 -0
  226. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/orchestration/experiment.py +0 -0
  227. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/orchestration/overrides.py +0 -0
  228. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/orchestration/task_loader.py +0 -0
  229. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/orchestrator.py +0 -0
  230. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/path_utils.py +0 -0
  231. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/plugins.py +0 -0
  232. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/pricing.py +0 -0
  233. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/py.typed +0 -0
  234. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/reports.py +0 -0
  235. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/reports_experiment.py +0 -0
  236. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/reports_html.py +0 -0
  237. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/reports_junit.py +0 -0
  238. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/reports_stats.py +0 -0
  239. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/resources/__init__.py +0 -0
  240. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
  241. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/resources/tags.yaml +0 -0
  242. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/sandbox.py +0 -0
  243. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/scoring/__init__.py +0 -0
  244. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/scoring/ast_similarity.py +0 -0
  245. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/scoring/complexity.py +0 -0
  246. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/scoring/quality.py +0 -0
  247. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/scoring/signature_similarity.py +0 -0
  248. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/scoring/similarity.py +0 -0
  249. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/scoring/token_similarity.py +0 -0
  250. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/simulation/__init__.py +0 -0
  251. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/simulation/termination.py +0 -0
  252. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/simulation/user_simulator.py +0 -0
  253. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/streaming/__init__.py +0 -0
  254. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/streaming/callbacks.py +0 -0
  255. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/streaming/collector.py +0 -0
  256. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/streaming/events.py +0 -0
  257. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/streaming/renderers.py +0 -0
  258. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/streaming/wire.py +0 -0
  259. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/telemetry.py +0 -0
  260. {coder_eval-0.9.0 → coder_eval-0.9.1}/src/coder_eval/utils.py +0 -0
  261. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/README.md +0 -0
  262. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/agentless_smoke_test.yaml +0 -0
  263. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/agents/antigravity_hello_world.yaml +0 -0
  264. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
  265. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/agents/claude_hello_world.yaml +0 -0
  266. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/agents/claude_hello_world_docker.yaml +0 -0
  267. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
  268. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/agents/claude_subagent_test.yaml +0 -0
  269. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
  270. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/agents/codex_hello_world.yaml +0 -0
  271. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/agents/codex_parallel_commands.yaml +0 -0
  272. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
  273. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/agents/codex_skills_test.yaml +0 -0
  274. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/agents/codex_string_utils.yaml +0 -0
  275. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/agents/codex_subagent_test.yaml +0 -0
  276. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/agents/subagent_bash_long_input.yaml +0 -0
  277. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/agents/subagent_merge_sort.yaml +0 -0
  278. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/byod_smoke_test.yaml +0 -0
  279. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/dataset_example.yaml +0 -0
  280. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/datasets/sentiment.jsonl +0 -0
  281. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
  282. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
  283. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
  284. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/dockerfile_build_example/environment/input.txt +0 -0
  285. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
  286. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
  287. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/fibonacci_with_template.yaml +0 -0
  288. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/hello_date.yaml +0 -0
  289. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/inline_starter_example.yaml +0 -0
  290. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/internal/session_resumption.yaml +0 -0
  291. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/mock_path_dirs_smoke.yaml +0 -0
  292. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
  293. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
  294. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
  295. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
  296. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
  297. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
  298. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
  299. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
  300. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
  301. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
  302. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
  303. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
  304. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/samples/skillsbench/README.md +0 -0
  305. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
  306. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
  307. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
  308. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
  309. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
  310. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
  311. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
  312. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
  313. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
  314. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
  315. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/sentiment_classification.yaml +0 -0
  316. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/smoke_agent_judge.yaml +0 -0
  317. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/smoke_budget_exceeded.yaml +0 -0
  318. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
  319. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/smoke_llm_judge.yaml +0 -0
  320. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/smoke_negative_path.yaml +0 -0
  321. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/smoke_task_timeout.yaml +0 -0
  322. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/smoke_variants.yaml +0 -0
  323. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/test_sandbox.yaml +0 -0
  324. {coder_eval-0.9.0 → coder_eval-0.9.1}/tasks/token_check.yaml +0 -0
  325. {coder_eval-0.9.0 → coder_eval-0.9.1}/templates/byod_smoke_test/Dockerfile +0 -0
  326. {coder_eval-0.9.0 → coder_eval-0.9.1}/templates/fibonacci-starter/README.md +0 -0
  327. {coder_eval-0.9.0 → coder_eval-0.9.1}/templates/fibonacci-starter/src/main.py +0 -0
  328. {coder_eval-0.9.0 → coder_eval-0.9.1}/templates/fibonacci-starter/tests/test_main.py +0 -0
  329. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/__init__.py +0 -0
  330. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/__init__.py +0 -0
  331. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/__init__.py +0 -0
  332. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/_scrub.py +0 -0
  333. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
  334. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
  335. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
  336. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
  337. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
  338. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
  339. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
  340. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
  341. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
  342. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
  343. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
  344. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
  345. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
  346. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +0 -0
  347. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
  348. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +0 -0
  349. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
  350. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
  351. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
  352. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
  353. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/report_snapshots/__init__.py +0 -0
  354. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
  355. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
  356. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
  357. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
  358. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/report_snapshots/run_full.md +0 -0
  359. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
  360. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/_path_helpers.py +0 -0
  361. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/conftest.py +0 -0
  362. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/fixtures/__init__.py +0 -0
  363. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
  364. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
  365. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/fixtures/mock_agent.py +0 -0
  366. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
  367. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
  368. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
  369. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/fixtures/text_stub_agent.py +0 -0
  370. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/__init__.py +0 -0
  371. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/dead_config_fields.py +0 -0
  372. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/doc_env_parity.py +0 -0
  373. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/doc_examples.py +0 -0
  374. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/doc_indexes.py +0 -0
  375. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/doc_schema_parity.py +0 -0
  376. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/__init__.py +0 -0
  377. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/base.py +0 -0
  378. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
  379. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
  380. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
  381. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
  382. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
  383. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
  384. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
  385. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
  386. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
  387. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/ce023_no_proxy_shim_import.py +0 -0
  388. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
  389. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/ce025_live_verdict_consistency.py +0 -0
  390. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/no_agent_timing_access.py +0 -0
  391. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
  392. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
  393. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/no_silent_except.py +0 -0
  394. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/no_submodule_model_imports.py +0 -0
  395. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
  396. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
  397. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
  398. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/open_explicit_encoding.py +0 -0
  399. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
  400. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/register_criterion_required.py +0 -0
  401. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
  402. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
  403. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/runner.py +0 -0
  404. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/lint/violation.py +0 -0
  405. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_action_version_pin.py +0 -0
  406. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_agent.py +0 -0
  407. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_agent_config_no_timing_fields.py +0 -0
  408. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_agent_config_optional_type.py +0 -0
  409. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_agent_config_registry_dispatch.py +0 -0
  410. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_agent_config_sdk_decoupling.py +0 -0
  411. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_agent_golden_master.py +0 -0
  412. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_agent_judge_criterion.py +0 -0
  413. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_agent_telemetry.py +0 -0
  414. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_agent_telemetry_advanced.py +0 -0
  415. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_agent_timeout.py +0 -0
  416. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_agentless.py +0 -0
  417. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_aggregate.py +0 -0
  418. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_antigravity_agent.py +0 -0
  419. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_byoa_plugin.py +0 -0
  420. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_byoa_plugin_live.py +0 -0
  421. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_byod_feature.py +0 -0
  422. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_check_all_async.py +0 -0
  423. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_checker_logging.py +0 -0
  424. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_classification_match.py +0 -0
  425. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_claude_settings_enforcement_live.py +0 -0
  426. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_cleanup_preservation_guard.py +0 -0
  427. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_cli_backend_flag.py +0 -0
  428. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_cli_empty_glob.py +0 -0
  429. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_cli_sdk_options.py +0 -0
  430. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_cli_set_overrides.py +0 -0
  431. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_cli_telemetry.py +0 -0
  432. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_cli_type_flag.py +0 -0
  433. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_code_review_bugs.py +0 -0
  434. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_codex_agent.py +0 -0
  435. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_codex_agent_unit.py +0 -0
  436. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_codex_token_mapping.py +0 -0
  437. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_command_executed.py +0 -0
  438. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_command_statistics.py +0 -0
  439. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_command_telemetry_result_data.py +0 -0
  440. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_commands_efficiency.py +0 -0
  441. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_config_lineage.py +0 -0
  442. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_config_merge_engine.py +0 -0
  443. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_config_precedence.py +0 -0
  444. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_continuous_scoring.py +0 -0
  445. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_criterion_result_round_trip.py +0 -0
  446. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_custom_lint.py +0 -0
  447. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_dataset_expansion.py +0 -0
  448. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_debug_logging.py +0 -0
  449. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_docker_build_failure.py +0 -0
  450. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_docker_litellm_env.py +0 -0
  451. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_docker_runner_container_death.py +0 -0
  452. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_docker_runner_mounts.py +0 -0
  453. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_docker_runner_stream_limit.py +0 -0
  454. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_docker_wildcard_env.py +0 -0
  455. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_docker_workdir_live.py +0 -0
  456. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_driver_resolver.py +0 -0
  457. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_error_handling.py +0 -0
  458. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_evaluate_command.py +0 -0
  459. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_evaluator.py +0 -0
  460. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_event_collector.py +0 -0
  461. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_experiment_cli.py +0 -0
  462. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_experiment_loader.py +0 -0
  463. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_experiment_models.py +0 -0
  464. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_experiment_reports.py +0 -0
  465. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_experiment_resolver.py +0 -0
  466. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_experiment_runner.py +0 -0
  467. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_file_check.py +0 -0
  468. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_file_contains_scoring.py +0 -0
  469. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_formatting.py +0 -0
  470. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_git_clone_failure.py +0 -0
  471. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_heartbeat_watchdog.py +0 -0
  472. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_ignore_patterns_negation.py +0 -0
  473. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_image_from_dockerfiles.py +0 -0
  474. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_integration.py +0 -0
  475. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_json_check.py +0 -0
  476. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_judge_anthropic.py +0 -0
  477. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_judge_bedrock.py +0 -0
  478. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_judge_burn_in_live.py +0 -0
  479. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_judge_context_builder.py +0 -0
  480. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_judge_models.py +0 -0
  481. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_judge_persistence.py +0 -0
  482. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_lint_no_top_level_run_limits.py +0 -0
  483. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_lint_runner.py +0 -0
  484. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_litellm_route.py +0 -0
  485. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_llm_judge_criterion.py +0 -0
  486. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_log_tail_buffer.py +0 -0
  487. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_logging.py +0 -0
  488. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_logging_isolation.py +0 -0
  489. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_merge_characterization.py +0 -0
  490. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_merge_strategy_annotations.py +0 -0
  491. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_merge_unification.py +0 -0
  492. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_models.py +0 -0
  493. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_mutations.py +0 -0
  494. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_new_criteria.py +0 -0
  495. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_node_env_config.py +0 -0
  496. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_optional_dependencies.py +0 -0
  497. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_orchestrator.py +0 -0
  498. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_orchestrator_error_log_tail.py +0 -0
  499. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_orchestrator_telemetry.py +0 -0
  500. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_overrides_engine.py +0 -0
  501. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_parallel.py +0 -0
  502. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_path_utils.py +0 -0
  503. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_plan_command.py +0 -0
  504. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_plugin_processing.py +0 -0
  505. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_plugins.py +0 -0
  506. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_post_run.py +0 -0
  507. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_pr_review_workflow.py +0 -0
  508. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_pre_run.py +0 -0
  509. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_preservation_mode.py +0 -0
  510. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_pricing_registry.py +0 -0
  511. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_reference_comparison_scoring.py +0 -0
  512. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_reference_evaluator.py +0 -0
  513. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_reference_missing_file.py +0 -0
  514. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_reference_models.py +0 -0
  515. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_reference_orchestrator.py +0 -0
  516. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_registry.py +0 -0
  517. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_release_notes.py +0 -0
  518. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_replicate_stats.py +0 -0
  519. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_report_command.py +0 -0
  520. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_reports.py +0 -0
  521. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_reports_experiment.py +0 -0
  522. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_reports_html.py +0 -0
  523. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_reports_junit.py +0 -0
  524. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_reports_stats.py +0 -0
  525. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_reports_stats_nonfinite.py +0 -0
  526. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_resolve_task_files.py +0 -0
  527. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_resume.py +0 -0
  528. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_retry_logic_comprehensive.py +0 -0
  529. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_route_seam_exhaustiveness.py +0 -0
  530. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_routing.py +0 -0
  531. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_run_command_junit.py +0 -0
  532. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_run_command_stdout.py +0 -0
  533. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_run_limits_models.py +0 -0
  534. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_run_limits_orchestrator.py +0 -0
  535. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_run_limits_resolver.py +0 -0
  536. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_runtime_tool_versions.py +0 -0
  537. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_sandbox.py +0 -0
  538. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_sandbox_layer_builder.py +0 -0
  539. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_sandbox_optional.py +0 -0
  540. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_sandbox_security.py +0 -0
  541. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_sandbox_symlink_preservation.py +0 -0
  542. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_sandbox_templates.py +0 -0
  543. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_scorers.py +0 -0
  544. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_scoring_quality.py +0 -0
  545. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_sdk_option_classification.py +0 -0
  546. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_simulation_config.py +0 -0
  547. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_simulation_integration.py +0 -0
  548. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_simulation_termination.py +0 -0
  549. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_simulation_trials.py +0 -0
  550. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_skill_triggered.py +0 -0
  551. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_streaming_agent_integration.py +0 -0
  552. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_streaming_batch.py +0 -0
  553. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_streaming_callbacks.py +0 -0
  554. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_streaming_cli.py +0 -0
  555. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_streaming_events.py +0 -0
  556. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_streaming_orchestrator.py +0 -0
  557. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_streaming_renderers.py +0 -0
  558. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_streaming_wire.py +0 -0
  559. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_sub_agent_runner.py +0 -0
  560. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_success_criterion_union.py +0 -0
  561. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_suite_rollup.py +0 -0
  562. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_summaries.py +0 -0
  563. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_tags.py +0 -0
  564. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_task_definition_unknown_fields.py +0 -0
  565. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_teardown_interrupt.py +0 -0
  566. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_telemetry.py +0 -0
  567. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_template_env_expansion.py +0 -0
  568. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_threshold_enforcement.py +0 -0
  569. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_timeout_batch.py +0 -0
  570. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_timeout_categorization.py +0 -0
  571. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_timeout_exceptions.py +0 -0
  572. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_timeout_models.py +0 -0
  573. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_timeout_orchestrator.py +0 -0
  574. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_token_usage.py +0 -0
  575. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_uipath_eval.py +0 -0
  576. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_user_simulator.py +0 -0
  577. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_utils.py +0 -0
  578. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_utterance_extraction.py +0 -0
  579. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_variant_prompt_file.py +0 -0
  580. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_verdict_tool.py +0 -0
  581. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_watchdog.py +0 -0
  582. {coder_eval-0.9.0 → coder_eval-0.9.1}/tests/test_yaml_migration.py +0 -0
@@ -2,6 +2,14 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v0.9.1 (2026-07-29)
6
+
7
+ ### Features
8
+
9
+ - **agents**: Extend cooperative early stop to codex and antigravity
10
+ ([`b849421`](https://github.com/UiPath/coder_eval/commit/b8494218af6870feff2a9809e3050e96da849cd8))
11
+
12
+
5
13
  ## v0.9.0 (2026-07-28)
6
14
 
7
15
  ### Features
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: coder-eval
3
- Version: 0.9.0
3
+ Version: 0.9.1
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
@@ -33,7 +33,7 @@ inputs:
33
33
  version:
34
34
  description: coder-eval version to install from PyPI, or "local" to install from the action checkout
35
35
  required: false
36
- default: "0.9.0" # <-- kept in sync with releases by release.yml
36
+ default: "0.9.1" # <-- kept in sync with releases by release.yml
37
37
  run-dir:
38
38
  description: Run directory (--run-dir)
39
39
  required: false
@@ -168,18 +168,15 @@ as every other agent.
168
168
 
169
169
  ## Known limitations
170
170
 
171
- 1. **No cooperative early stop.** Antigravity does not support the `should_stop`
172
- seam, so `run_limits.stop_early` is unsupported for this agent (it errors at
173
- resolution, as it does for any non-Claude agent).
174
- 2. **No endpoint routing.** Only `GEMINI_API_KEY` + `ANTIGRAVITY_MODEL` are read —
171
+ 1. **No endpoint routing.** Only `GEMINI_API_KEY` + `ANTIGRAVITY_MODEL` are read —
175
172
  there is no base-URL, project, region, or gateway override.
176
- 3. **Default-model drift.** The runtime fallback (`gemini-3.5-flash`) may differ from
173
+ 2. **Default-model drift.** The runtime fallback (`gemini-3.5-flash`) may differ from
177
174
  what a given release's docs or example tasks pin; always set `agent.model`
178
175
  explicitly for reproducible runs.
179
- 4. **`kill_sync()` is best-effort.** The SDK's cancel/disconnect are async-only, so
176
+ 3. **`kill_sync()` is best-effort.** The SDK's cancel/disconnect are async-only, so
180
177
  the watchdog's synchronous kill only flips agent state to `ERROR`; real teardown
181
178
  happens on the subsequent async `stop()`.
182
- 5. **Process-global spawn lock.** The SDK spawns `localharness` via a subprocess with
179
+ 4. **Process-global spawn lock.** The SDK spawns `localharness` via a subprocess with
183
180
  no env-injection seam, so the agent transiently mutates `PATH` across the spawn
184
181
  under a process-wide lock. This serializes harness startup across concurrent
185
182
  tasks (it does not serialize the turns themselves).
@@ -145,13 +145,14 @@ simulator force `[]` for the same reason.)
145
145
  UiPath CLI plugin discovery; when unset the sandbox derives it from the resolved
146
146
  `uip` binary. See [User Guide → Environment Variables](../USER_GUIDE.md#environment-variables).
147
147
 
148
- ## Early stop (Claude-only)
148
+ ## Early stop
149
149
 
150
- Claude Code is the only agent that supports the cooperative early-stop seam. With
150
+ Claude Code supports the cooperative early-stop seam, as do the
151
+ [Codex](CODEX.md) and [Antigravity](ANTIGRAVITY.md) agents. With
151
152
  `run_limits.stop_early: true`, a single-shot run ends cleanly at the next
152
153
  tool-call boundary once its **armed** criteria (`stop_when: pass|fail|decided`) are
153
154
  decided — so a raised `max_turns` isn't wasted on a smoke run. Early stop errors at
154
- resolution for any other agent. See the
155
+ resolution for any agent that does not declare `supports_cooperative_stop`. See the
155
156
  [Task Definition Guide](../TASK_DEFINITION_GUIDE.md) for the full contract.
156
157
 
157
158
  ## Telemetry
@@ -216,6 +216,7 @@ The Codex SDK is synchronous. The agent uses `_run_async()` helper to detect and
216
216
  | **Session Resume** | `--resume {session_id}` | Via thread ID |
217
217
  | **Permissions** | `permission_mode` + `allowed_tools` | `permission_mode` → sandbox/approval + `allowed_tools`/`disallowed_tools` → thread config |
218
218
  | **Tool Enforcement** | Not enforced by Coder Eval wrapper | `enabled_tools` honored; `disabled_tools` NOT enforced by the SDK |
219
+ | **Early stop** | Supported (cooperative `should_stop`, polled between messages) | Supported — polled after each streamed notification; the in-flight turn is interrupted best-effort |
219
220
 
220
221
  ## Known Limitations
221
222
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "coder-eval"
3
- version = "0.9.0"
3
+ version = "0.9.1"
4
4
  description = "Evaluate, benchmark, and A/B-test AI coding agents (Claude Code, Codex, Gemini/Antigravity) with sandboxed, reproducible YAML task suites."
5
5
  readme = "README.md"
6
6
  license = "Apache-2.0"
@@ -1,3 +1,3 @@
1
1
  """coder_eval - A framework for evaluating AI coding agents."""
2
2
 
3
- __version__ = "0.9.0"
3
+ __version__ = "0.9.1"
@@ -27,7 +27,7 @@ from collections.abc import AsyncIterator, Callable
27
27
  from contextlib import AsyncExitStack
28
28
  from datetime import datetime
29
29
  from pathlib import Path
30
- from typing import Any
30
+ from typing import Any, ClassVar
31
31
 
32
32
  from coder_eval.agent import Agent, AgentState
33
33
  from coder_eval.agents._logging import PrefixedAdapter
@@ -185,6 +185,10 @@ def _to_token_usage(usage: Any, model: str | None) -> TokenUsage:
185
185
  class AntigravityAgent(Agent[AntigravityAgentConfig]):
186
186
  """Implementation of the Agent interface for Google Antigravity (Gemini)."""
187
187
 
188
+ # The step loop has a between-steps guard where the cooperative
189
+ # ``should_stop`` check runs, so this agent supports early-stop-on-criterion.
190
+ supports_cooperative_stop: ClassVar[bool] = True
191
+
188
192
  def __init__(
189
193
  self,
190
194
  config: AntigravityAgentConfig,
@@ -413,10 +417,10 @@ class AntigravityAgent(Agent[AntigravityAgentConfig]):
413
417
  ) -> TurnRecord:
414
418
  """Send a message to the Antigravity agent and receive its response.
415
419
 
416
- ``should_stop`` is accepted for ``Agent.communicate`` override
417
- compatibility and ignored Antigravity does not support cooperative
418
- early-stop (``supports_cooperative_stop`` is False), so the orchestrator
419
- never passes it.
420
+ ``should_stop`` is the cooperative early-stop callback, polled after each
421
+ processed step. When it returns True the step loop breaks, the
422
+ conversation is cancelled (best-effort) and the turn finalizes cleanly as
423
+ ``STOPPED_EARLY`` (``crashed=False``).
420
424
 
421
425
  Drives one logical turn: ``conversation.send(prompt)`` then iterate
422
426
  ``receive_steps()`` until the turn goes idle, mapping the Gemini step
@@ -468,8 +472,21 @@ class AntigravityAgent(Agent[AntigravityAgentConfig]):
468
472
  conversation = self._sdk_agent.conversation
469
473
  try:
470
474
  await conversation.send(user_input)
475
+ # The cooperative should_stop poll runs AFTER process_step (the
476
+ # emission that lets the watcher latch on the deciding tool
477
+ # call) and BEFORE the next step is pulled — the deciding step
478
+ # is kept, the next is not. No-op when should_stop is None.
471
479
  async for step in conversation.receive_steps():
472
480
  state.process_step(step)
481
+ if should_stop is not None and should_stop():
482
+ state.stopped_early_hit = True
483
+ self._log.debug("Cooperative stop requested; ending step loop at this boundary")
484
+ break
485
+ if state.stopped_early_hit:
486
+ # Best-effort server-side cancel, mirrors kill(); a raising
487
+ # cancel() lands in the guarded handler below.
488
+ with contextlib.suppress(Exception):
489
+ await conversation.cancel()
473
490
  except asyncio.CancelledError:
474
491
  if state.timeout_hit:
475
492
  self._finalize_and_raise_timeout(state.finalize, timeout or 0)
@@ -477,9 +494,17 @@ class AntigravityAgent(Agent[AntigravityAgentConfig]):
477
494
  except Exception as e:
478
495
  if state.timeout_hit:
479
496
  self._finalize_and_raise_timeout(state.finalize, timeout or 0, cause=e)
480
- self._finalize_and_raise_crash(
481
- state.finalize, truncate_crash_message(f"Antigravity turn failed: {e!s}"), cause=e
482
- )
497
+ if state.stopped_early_hit:
498
+ # The turn already stopped cleanly (e.g. the generator's
499
+ # aclose() raised on the break); escalating to a crash
500
+ # would trigger the orchestrator's retry with the watcher's
501
+ # decision still latched → immediate stop-at-turn-0 on the
502
+ # retry (wasted spend). Fall through to the clean tail.
503
+ self._log.warning("Ignoring post-stop exception; finalizing as STOPPED_EARLY: %s", e)
504
+ else:
505
+ self._finalize_and_raise_crash(
506
+ state.finalize, truncate_crash_message(f"Antigravity turn failed: {e!s}"), cause=e
507
+ )
483
508
 
484
509
  if state.timeout_hit:
485
510
  # Watchdog fired but the pump finished before the cancel landed.
@@ -493,13 +518,20 @@ class AntigravityAgent(Agent[AntigravityAgentConfig]):
493
518
  state.finalize(AgentEndStatus.CRASHED, crashed=True, crash_reason="turn cancelled")
494
519
  raise
495
520
  except Exception as e:
496
- self._finalize_and_raise_crash(
497
- state.finalize, truncate_crash_message(f"Antigravity turn failed: {e!s}"), cause=e
498
- )
521
+ if state.stopped_early_hit and not state.timeout_hit:
522
+ # Same retry-poisoning guard as the inner handler: a cooperative
523
+ # stop already happened, so finalize cleanly instead of crashing.
524
+ self._log.warning("Ignoring post-stop exception; finalizing as STOPPED_EARLY: %s", e)
525
+ else:
526
+ self._finalize_and_raise_crash(
527
+ state.finalize, truncate_crash_message(f"Antigravity turn failed: {e!s}"), cause=e
528
+ )
499
529
 
500
530
  self._state = AgentState.WORKING
501
531
  self._end_turn_ok()
502
- state.finalize(AgentEndStatus.COMPLETED, crashed=False, crash_reason=None)
532
+ # Precedence matches Claude: timeout (raised above) > stopped_early > completed.
533
+ status = AgentEndStatus.STOPPED_EARLY if state.stopped_early_hit else AgentEndStatus.COMPLETED
534
+ state.finalize(status, crashed=False, crash_reason=None)
503
535
  return collector.build_turn_record()
504
536
 
505
537
  async def stop(self) -> None:
@@ -589,6 +621,7 @@ class _AntigravityTurnState:
589
621
  self.turn_start_time = turn_start_time
590
622
 
591
623
  self.timeout_hit = False
624
+ self.stopped_early_hit = False
592
625
  self.finalized = False
593
626
 
594
627
  self.total_usage = TokenUsage()
@@ -12,7 +12,7 @@ import time
12
12
  from collections.abc import Callable
13
13
  from datetime import datetime
14
14
  from pathlib import Path
15
- from typing import Any
15
+ from typing import Any, ClassVar
16
16
  from urllib.parse import urlparse
17
17
 
18
18
  from coder_eval.agent import Agent, AgentState
@@ -280,6 +280,7 @@ class _CodexTurnState:
280
280
  self.iteration = iteration
281
281
  self.turn_start_time = turn_start_time
282
282
  self.timeout_hit = False
283
+ self.stopped_early_hit = False
283
284
  self.finalized = False
284
285
 
285
286
  # Live pump scratch (set during streaming).
@@ -634,6 +635,10 @@ class _CodexTurnState:
634
635
  class CodexAgent(Agent[CodexAgentConfig]):
635
636
  """Implementation of the Agent interface for OpenAI Codex using the Codex SDK."""
636
637
 
638
+ # The notification pump has a between-items guard where the cooperative
639
+ # ``should_stop`` check runs, so this agent supports early-stop-on-criterion.
640
+ supports_cooperative_stop: ClassVar[bool] = True
641
+
637
642
  def __init__(
638
643
  self,
639
644
  config: CodexAgentConfig,
@@ -740,10 +745,10 @@ class CodexAgent(Agent[CodexAgentConfig]):
740
745
  stream_callback: Optional callback for real-time event streaming
741
746
  timeout: Hard wall-clock deadline in seconds
742
747
  max_turns: Hard cap on inner-loop turns (unused for Codex single-turn)
743
- should_stop: Accepted for ``Agent.communicate`` override compatibility
744
- and ignored Codex does not support cooperative early-stop
745
- (``supports_cooperative_stop`` is False), so the orchestrator
746
- never passes it.
748
+ should_stop: Cooperative early-stop callback, polled after each
749
+ dispatched notification. When it returns True the pump breaks,
750
+ the in-flight turn is interrupted (best-effort) and the turn
751
+ finalizes cleanly as ``STOPPED_EARLY`` (``crashed=False``).
747
752
 
748
753
  Returns:
749
754
  TurnRecord containing the complete interaction
@@ -822,7 +827,7 @@ class CodexAgent(Agent[CodexAgentConfig]):
822
827
  # return; a crash skips this, so finalize reads the crash
823
828
  # defaults (None/"") and falls back to the captured messages.
824
829
  state.result_turn, state.sdk_token_usage, state.result_text = await self._run_turn_with_streaming(
825
- state
830
+ state, should_stop
826
831
  )
827
832
  except asyncio.CancelledError:
828
833
  if state.timeout_hit:
@@ -831,9 +836,16 @@ class CodexAgent(Agent[CodexAgentConfig]):
831
836
  except Exception as e:
832
837
  if state.timeout_hit:
833
838
  self._finalize_and_raise_timeout(state.finalize, timeout or 0, cause=e)
834
- self._finalize_and_raise_crash(
835
- state.finalize, truncate_crash_message(f"Codex turn failed: {e!s}"), cause=e
836
- )
839
+ if state.stopped_early_hit:
840
+ # The turn already stopped cleanly; escalating to a crash
841
+ # would trigger the orchestrator's retry with the watcher's
842
+ # decision still latched → immediate stop-at-turn-0 on the
843
+ # retry (wasted spend). Fall through to the clean tail.
844
+ self._log.warning("Ignoring post-stop exception; finalizing as STOPPED_EARLY: %s", e)
845
+ else:
846
+ self._finalize_and_raise_crash(
847
+ state.finalize, truncate_crash_message(f"Codex turn failed: {e!s}"), cause=e
848
+ )
837
849
 
838
850
  if state.timeout_hit:
839
851
  # Watchdog fired but the pump finished before the cancel landed.
@@ -860,13 +872,22 @@ class CodexAgent(Agent[CodexAgentConfig]):
860
872
  # and _format_turn_result. Without this, such errors escape as a bare
861
873
  # exception: the orchestrator never drains pending_turn and _iteration
862
874
  # stays incremented, violating the pending-turn contract.
863
- self._finalize_and_raise_crash(state.finalize, truncate_crash_message(f"Codex turn failed: {e!s}"), cause=e)
875
+ if state.stopped_early_hit and not state.timeout_hit:
876
+ # Same retry-poisoning guard as the inner handler: a cooperative
877
+ # stop already happened, so finalize cleanly instead of crashing.
878
+ self._log.warning("Ignoring post-stop exception; finalizing as STOPPED_EARLY: %s", e)
879
+ else:
880
+ self._finalize_and_raise_crash(
881
+ state.finalize, truncate_crash_message(f"Codex turn failed: {e!s}"), cause=e
882
+ )
864
883
 
865
884
  self._state = AgentState.WORKING
866
885
  self._end_turn_ok()
867
886
 
868
887
  # The TurnRecord is the EventCollector's reduction of the emitted events.
869
- state.finalize(AgentEndStatus.COMPLETED, crashed=False, crash_reason=None)
888
+ # Precedence matches Claude: timeout (raised above) > stopped_early > completed.
889
+ status = AgentEndStatus.STOPPED_EARLY if state.stopped_early_hit else AgentEndStatus.COMPLETED
890
+ state.finalize(status, crashed=False, crash_reason=None)
870
891
  return collector.build_turn_record()
871
892
 
872
893
  async def stop(self) -> None:
@@ -1380,7 +1401,9 @@ class CodexAgent(Agent[CodexAgentConfig]):
1380
1401
  self._log.warning(f"Failed to format turn result: {e}")
1381
1402
  return str(turn_result)
1382
1403
 
1383
- async def _run_turn_with_streaming(self, state: _CodexTurnState) -> tuple[Any, Any, str]:
1404
+ async def _run_turn_with_streaming(
1405
+ self, state: _CodexTurnState, should_stop: Callable[[], bool] | None = None
1406
+ ) -> tuple[Any, Any, str]:
1384
1407
  """Drive ``turn.stream()`` through the per-turn state, emitting the standard
1385
1408
  event protocol; returns ``(turn_result, latest_token_usage, agent_text)``.
1386
1409
 
@@ -1388,6 +1411,11 @@ class CodexAgent(Agent[CodexAgentConfig]):
1388
1411
  boundaries; this drives the inner notification pump. ``state`` accumulates
1389
1412
  commands, the assistant transcript, sub-agent spawns and per-generation
1390
1413
  tokens — all mutated in place so a mid-turn crash keeps the partial.
1414
+
1415
+ The cooperative ``should_stop`` poll runs AFTER ``state.dispatch`` (the
1416
+ emission that lets the watcher latch on the deciding tool call) and BEFORE
1417
+ the next notification is pulled — the deciding item is kept, the next is
1418
+ not. No-op when ``should_stop is None`` (behaviorally identical to before).
1391
1419
  """
1392
1420
  # Create the turn handle (starts the turn but doesn't block) + event stream.
1393
1421
  turn_handle = await self._run_async(self.thread.turn, state.user_input)
@@ -1405,6 +1433,11 @@ class CodexAgent(Agent[CodexAgentConfig]):
1405
1433
  break
1406
1434
  if state.dispatch(notification): # True on a valid turn/completed
1407
1435
  break
1436
+ if should_stop is not None and should_stop():
1437
+ state.stopped_early_hit = True
1438
+ self._log.debug("Cooperative stop requested; ending notification pump at this boundary")
1439
+ self._interrupt_active_turn() # best-effort; stops server-side spend
1440
+ break
1408
1441
  finally:
1409
1442
  self._active_turn_handle = None
1410
1443
  # Close any orphan tool (item/started without item/completed), flush any
@@ -1415,7 +1448,7 @@ class CodexAgent(Agent[CodexAgentConfig]):
1415
1448
  with contextlib.suppress(Exception):
1416
1449
  await self._run_async(stream.close)
1417
1450
 
1418
- if state.turn_result is None:
1451
+ if state.turn_result is None and not state.stopped_early_hit:
1419
1452
  raise RuntimeError("Turn did not complete (no turn/completed notification received)")
1420
1453
 
1421
1454
  # Belt-and-suspenders: if streaming surfaced no assistant transcript,
@@ -1427,7 +1460,9 @@ class CodexAgent(Agent[CodexAgentConfig]):
1427
1460
  # and nest them under the spawning Agent call. The parent stream never
1428
1461
  # carries the child's commands (Limited persistence drops them), but its
1429
1462
  # rollout always persists the raw function_call/local_shell_call items.
1430
- if state.spawned_children:
1463
+ # Skipped on a cooperative stop: children may have no rollout yet and the
1464
+ # run is already decided — recovery adds nothing the armed gate uses.
1465
+ if state.spawned_children and not state.stopped_early_hit:
1431
1466
  await self._recover_subagent_tool_calls(
1432
1467
  state.spawned_children,
1433
1468
  state.collab_results,
@@ -159,7 +159,7 @@ def validate_early_stop(task: TaskDefinition) -> None:
159
159
  if not supports:
160
160
  raise EarlyStopConfigError(
161
161
  "run_limits.stop_early requires an agent that supports cooperative stopping "
162
- + f"(currently Claude Code); agent type {agent_type!r} does not."
162
+ + f"(claude-code, codex, antigravity); agent type {agent_type!r} does not."
163
163
  )
164
164
 
165
165
  # (2) Arming requires at least one stop criterion.
@@ -105,6 +105,45 @@ async def test_codex_live_edits_file_and_records_telemetry(tmp_path):
105
105
  assert record.commands, "expected command telemetry for the file creation"
106
106
 
107
107
 
108
+ @_live
109
+ async def test_codex_live_cooperative_stop_ends_turn_promptly(tmp_path):
110
+ """A ``should_stop`` that flips True after the first ToolStart ends the turn
111
+ cleanly as STOPPED_EARLY instead of running the multi-step task out — the
112
+ only automated check of real ``handle.interrupt()`` behavior."""
113
+ from coder_eval.streaming.events import AgentEndEvent, AgentEndStatus, ToolStartEvent
114
+
115
+ class _Sink:
116
+ def __init__(self):
117
+ self.tool_started = False
118
+ self.ends = []
119
+
120
+ def on_event(self, event):
121
+ if isinstance(event, ToolStartEvent):
122
+ self.tool_started = True
123
+ if isinstance(event, AgentEndEvent):
124
+ self.ends.append(event)
125
+
126
+ sink = _Sink()
127
+ agent = _make_agent()
128
+ await agent.start(str(tmp_path))
129
+ try:
130
+ record = await agent.communicate(
131
+ "Run `echo one`, then `echo two`, then `echo three`, each as a separate shell command, "
132
+ "then create three files a.txt, b.txt and c.txt.",
133
+ timeout=180,
134
+ stream_callback=sink,
135
+ should_stop=lambda: sink.tool_started,
136
+ )
137
+ finally:
138
+ await agent.stop()
139
+
140
+ # Clean cooperative stop: no crash, no pending partial, STOPPED_EARLY status.
141
+ assert record.crashed is False
142
+ assert agent.pending_turn is None
143
+ assert sink.ends, "expected an AgentEndEvent"
144
+ assert sink.ends[-1].status == AgentEndStatus.STOPPED_EARLY
145
+
146
+
108
147
  @_live
109
148
  async def test_codex_live_token_usage_populated(tmp_path):
110
149
  """Token usage is captured from the SDK and attached to the TurnRecord."""