coder-eval 0.11.0__tar.gz → 0.11.2__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 (648) hide show
  1. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/workflows/pr-checks.yml +7 -7
  2. {coder_eval-0.11.0 → coder_eval-0.11.2}/CHANGELOG.md +48 -0
  3. {coder_eval-0.11.0 → coder_eval-0.11.2}/PKG-INFO +3 -2
  4. {coder_eval-0.11.0 → coder_eval-0.11.2}/action.yml +1 -1
  5. {coder_eval-0.11.0 → coder_eval-0.11.2}/experiments/default.yaml +5 -3
  6. {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/.claude-plugin/plugin.json +1 -1
  7. {coder_eval-0.11.0 → coder_eval-0.11.2}/pyproject.toml +9 -2
  8. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/__init__.py +1 -1
  9. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agents/codex_agent.py +7 -2
  10. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/judge_anthropic.py +15 -3
  11. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/judge_bedrock.py +4 -4
  12. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/verdict_tool.py +2 -2
  13. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/isolation/docker_runner.py +20 -8
  14. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/telemetry.py +10 -0
  15. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/streaming/renderers.py +6 -2
  16. coder_eval-0.11.2/tests/lint/rules/ce043_no_command_output_truncation.py +75 -0
  17. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/runner.py +2 -0
  18. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_codex_agent_unit.py +25 -0
  19. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_custom_lint.py +42 -0
  20. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_docker_runner_mounts.py +35 -0
  21. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_judge_anthropic.py +37 -4
  22. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_judge_bedrock.py +15 -18
  23. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_judge_burn_in_live.py +2 -2
  24. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_streaming_renderers.py +22 -0
  25. {coder_eval-0.11.0 → coder_eval-0.11.2}/uv.lock +52 -13
  26. {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/commands/coder-eval-code-review-full.md +0 -0
  27. {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/commands/coder-eval-code-review-wf.md +0 -0
  28. {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/commands/coder-eval-code-review.md +0 -0
  29. {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/commands/coder-eval-create-plan.md +0 -0
  30. {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/commands/coder-eval-implement-plan.md +0 -0
  31. {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/commands/coder-eval-review.md +0 -0
  32. {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/harness-candidates.md +0 -0
  33. {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/shared/axes.md +0 -0
  34. {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/shared/multi-model-review.md +0 -0
  35. {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/shared/review-rubric.md +0 -0
  36. {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/shared/run-layout.md +0 -0
  37. {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/workflows/cr-axis.js +0 -0
  38. {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude/workflows/cr-parent.js +0 -0
  39. {coder_eval-0.11.0 → coder_eval-0.11.2}/.claude-plugin/marketplace.json +0 -0
  40. {coder_eval-0.11.0 → coder_eval-0.11.2}/.env.example +0 -0
  41. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/CODEOWNERS +0 -0
  42. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
  43. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  44. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  45. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/actionlint.yaml +0 -0
  46. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/code_review.md +0 -0
  47. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/dependabot.yml +0 -0
  48. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/pages-stub/index.html +0 -0
  49. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/scripts/release_notes.py +0 -0
  50. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/workflows/claude-pr-review.yml +0 -0
  51. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/workflows/codeql.yml +0 -0
  52. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/workflows/conventional-commits.yml +0 -0
  53. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/workflows/docker-publish.yml +0 -0
  54. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/workflows/docs.yml +0 -0
  55. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/workflows/publish-testpypi.yml +0 -0
  56. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/workflows/release.yml +0 -0
  57. {coder_eval-0.11.0 → coder_eval-0.11.2}/.github/workflows/verify-published-action.yml +0 -0
  58. {coder_eval-0.11.0 → coder_eval-0.11.2}/.gitignore +0 -0
  59. {coder_eval-0.11.0 → coder_eval-0.11.2}/.pre-commit-config.yaml +0 -0
  60. {coder_eval-0.11.0 → coder_eval-0.11.2}/.python-version +0 -0
  61. {coder_eval-0.11.0 → coder_eval-0.11.2}/ADOPTERS.md +0 -0
  62. {coder_eval-0.11.0 → coder_eval-0.11.2}/CLAUDE.md +0 -0
  63. {coder_eval-0.11.0 → coder_eval-0.11.2}/CODE_OF_CONDUCT.md +0 -0
  64. {coder_eval-0.11.0 → coder_eval-0.11.2}/CONTRIBUTING.md +0 -0
  65. {coder_eval-0.11.0 → coder_eval-0.11.2}/LICENSE +0 -0
  66. {coder_eval-0.11.0 → coder_eval-0.11.2}/Makefile +0 -0
  67. {coder_eval-0.11.0 → coder_eval-0.11.2}/NOTICE +0 -0
  68. {coder_eval-0.11.0 → coder_eval-0.11.2}/README.md +0 -0
  69. {coder_eval-0.11.0 → coder_eval-0.11.2}/SECURITY.md +0 -0
  70. {coder_eval-0.11.0 → coder_eval-0.11.2}/comparison.md +0 -0
  71. {coder_eval-0.11.0 → coder_eval-0.11.2}/docker/Dockerfile +0 -0
  72. {coder_eval-0.11.0 → coder_eval-0.11.2}/docker/Dockerfile.runtime +0 -0
  73. {coder_eval-0.11.0 → coder_eval-0.11.2}/docker/coder_eval_entrypoint.sh +0 -0
  74. {coder_eval-0.11.0 → coder_eval-0.11.2}/docker/coder_eval_runtime_entrypoint.sh +0 -0
  75. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/AB_EXPERIMENTS.md +0 -0
  76. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/CI_GATE.md +0 -0
  77. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/DATASETS.md +0 -0
  78. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/DIALOG_MODE.md +0 -0
  79. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/DOCKER_ISOLATION.md +0 -0
  80. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/EXTENDING.md +0 -0
  81. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/PLUGIN.md +0 -0
  82. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/REPORT_SCHEMA.md +0 -0
  83. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/TASK_DEFINITION_GUIDE.md +0 -0
  84. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/USER_GUIDE.md +0 -0
  85. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/agents/ANTIGRAVITY.md +0 -0
  86. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/agents/CLAUDE_CODE.md +0 -0
  87. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/agents/CODEX.md +0 -0
  88. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/agents/HARNESS_PARITY.md +0 -0
  89. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/assets/hero.gif +0 -0
  90. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/comparison.md +0 -0
  91. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/index.md +0 -0
  92. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/llms.txt +0 -0
  93. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/tutorials/01-first-evaluation.md +0 -0
  94. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/tutorials/02-ci-pipeline.md +0 -0
  95. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/tutorials/03-evalboard-local.md +0 -0
  96. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/tutorials/04-writing-a-task.md +0 -0
  97. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/tutorials/05-comparing-models.md +0 -0
  98. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/tutorials/06-use-docker-isolation.md +0 -0
  99. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/tutorials/07-plugin-in-claude-code.md +0 -0
  100. {coder_eval-0.11.0 → coder_eval-0.11.2}/docs/tutorials/README.md +0 -0
  101. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/.gitignore +0 -0
  102. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/README.md +0 -0
  103. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/__tests__/harness-badge.test.tsx +0 -0
  104. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
  105. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
  106. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/col-help.tsx +0 -0
  107. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/collapsible-rail.tsx +0 -0
  108. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/harness-badge.tsx +0 -0
  109. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/harness-selector.tsx +0 -0
  110. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/scroll-table.tsx +0 -0
  111. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/search-box.tsx +0 -0
  112. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/unit-toggle.tsx +0 -0
  113. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_components/version-list.tsx +0 -0
  114. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_lib/__tests__/source-param.test.ts +0 -0
  115. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_lib/source-param.ts +0 -0
  116. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
  117. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
  118. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_overview/daily-chart.tsx +0 -0
  119. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_overview/harness-legend.tsx +0 -0
  120. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_overview/harness-series.ts +0 -0
  121. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_overview/tag-rail.tsx +0 -0
  122. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
  123. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/_overview/window-summary.tsx +0 -0
  124. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/api/download/route.ts +0 -0
  125. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/api/file/route.ts +0 -0
  126. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
  127. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/api/refresh/route.ts +0 -0
  128. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/error.tsx +0 -0
  129. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/globals.css +0 -0
  130. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/icon.png +0 -0
  131. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/layout.tsx +0 -0
  132. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/page.tsx +0 -0
  133. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +0 -0
  134. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/path-to-ga/page.tsx +0 -0
  135. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/path-to-ga/task-table.tsx +0 -0
  136. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/scribe/page.tsx +0 -0
  137. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/scribe/run-table.tsx +0 -0
  138. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
  139. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/trends/actions.ts +0 -0
  140. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/trends/page.tsx +0 -0
  141. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/trends/trends-view.tsx +0 -0
  142. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
  143. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/watchlist/page.tsx +0 -0
  144. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
  145. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/next-env.d.ts +0 -0
  146. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/next.config.mjs +0 -0
  147. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/package.json +0 -0
  148. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/pnpm-lock.yaml +0 -0
  149. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/postcss.config.mjs +0 -0
  150. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/public/harness/antigravity.png +0 -0
  151. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/public/harness/claude-code.png +0 -0
  152. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/public/harness/codex.png +0 -0
  153. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/public/uipath.png +0 -0
  154. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/tailwind.config.ts +0 -0
  155. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/tsconfig.json +0 -0
  156. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/vitest.config.ts +0 -0
  157. {coder_eval-0.11.0 → coder_eval-0.11.2}/evalboard/vitest.setup.ts +0 -0
  158. {coder_eval-0.11.0 → coder_eval-0.11.2}/experiments/early-stop-ab.yaml +0 -0
  159. {coder_eval-0.11.0 → coder_eval-0.11.2}/experiments/model-comparison.yaml +0 -0
  160. {coder_eval-0.11.0 → coder_eval-0.11.2}/experiments/permissions-smoke.yaml +0 -0
  161. {coder_eval-0.11.0 → coder_eval-0.11.2}/experiments/plugin-comparison.yaml +0 -0
  162. {coder_eval-0.11.0 → coder_eval-0.11.2}/experiments/prompt-mutations-example.yaml +0 -0
  163. {coder_eval-0.11.0 → coder_eval-0.11.2}/experiments/smoke_variants.yaml +0 -0
  164. {coder_eval-0.11.0 → coder_eval-0.11.2}/litellm/README.md +0 -0
  165. {coder_eval-0.11.0 → coder_eval-0.11.2}/litellm/cost_logger.py +0 -0
  166. {coder_eval-0.11.0 → coder_eval-0.11.2}/litellm/litellm-config.yaml +0 -0
  167. {coder_eval-0.11.0 → coder_eval-0.11.2}/litellm/start-litellm.sh +0 -0
  168. {coder_eval-0.11.0 → coder_eval-0.11.2}/mkdocs.yml +0 -0
  169. {coder_eval-0.11.0 → coder_eval-0.11.2}/osv-scanner.toml +0 -0
  170. {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/README.md +0 -0
  171. {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/reference/cli-setup.md +0 -0
  172. {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/reference/criteria.md +0 -0
  173. {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/reference/repo-layout.md +0 -0
  174. {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/reference/run-layout.md +0 -0
  175. {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/reference/task-rubric.md +0 -0
  176. {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/reference/templates/activation-rows.jsonl +0 -0
  177. {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/reference/templates/activation.yaml +0 -0
  178. {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/skills/analyze/SKILL.md +0 -0
  179. {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/skills/check-skill/SKILL.md +0 -0
  180. {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/skills/ci/SKILL.md +0 -0
  181. {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/skills/init/SKILL.md +0 -0
  182. {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/skills/lint-tasks/SKILL.md +0 -0
  183. {coder_eval-0.11.0 → coder_eval-0.11.2}/plugins/coder-eval/skills/task/SKILL.md +0 -0
  184. {coder_eval-0.11.0 → coder_eval-0.11.2}/scripts/check_commit_msg.sh +0 -0
  185. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/.gitattributes +0 -0
  186. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agent.py +0 -0
  187. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agents/__init__.py +0 -0
  188. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agents/_logging.py +0 -0
  189. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agents/antigravity_agent.py +0 -0
  190. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agents/claude_code_agent.py +0 -0
  191. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agents/noop_agent.py +0 -0
  192. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agents/registry.py +0 -0
  193. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/agents/watchdog.py +0 -0
  194. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/analysis.py +0 -0
  195. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/__init__.py +0 -0
  196. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/aggregate_command.py +0 -0
  197. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/console.py +0 -0
  198. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/evaluate_command.py +0 -0
  199. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/plan_command.py +0 -0
  200. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/report_command.py +0 -0
  201. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/run_command.py +0 -0
  202. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/run_helpers.py +0 -0
  203. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/run_task_internal_command.py +0 -0
  204. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/cli/utils.py +0 -0
  205. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/config.py +0 -0
  206. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/__init__.py +0 -0
  207. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
  208. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/agent_judge.py +0 -0
  209. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/base.py +0 -0
  210. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/classification_match.py +0 -0
  211. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/cli_called.py +0 -0
  212. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/command_executed.py +0 -0
  213. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/commands_efficiency.py +0 -0
  214. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/file_check.py +0 -0
  215. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/file_contains.py +0 -0
  216. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/file_exists.py +0 -0
  217. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/file_matches_regex.py +0 -0
  218. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/json_check.py +0 -0
  219. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/llm_judge.py +0 -0
  220. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/reference_comparison.py +0 -0
  221. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/run_command.py +0 -0
  222. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/skill_triggered.py +0 -0
  223. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/criteria/uipath_eval.py +0 -0
  224. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/__init__.py +0 -0
  225. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/agent.py +0 -0
  226. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/budget.py +0 -0
  227. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/categories.py +0 -0
  228. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/categorization.py +0 -0
  229. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/checker_misuse.py +0 -0
  230. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/executor.py +0 -0
  231. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/judge.py +0 -0
  232. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/reference.py +0 -0
  233. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/retry.py +0 -0
  234. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/errors/timeout.py +0 -0
  235. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/__init__.py +0 -0
  236. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/checker.py +0 -0
  237. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/judge_context.py +0 -0
  238. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/judge_models.py +0 -0
  239. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/judge_persistence.py +0 -0
  240. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/judge_usage.py +0 -0
  241. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/sub_agent.py +0 -0
  242. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/evaluation/summaries.py +0 -0
  243. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/formatting.py +0 -0
  244. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/fs_permissions.py +0 -0
  245. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/invocation_log.py +0 -0
  246. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/isolation/__init__.py +0 -0
  247. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/litellm_cost.py +0 -0
  248. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/logging_config.py +0 -0
  249. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/__init__.py +0 -0
  250. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/agent_config.py +0 -0
  251. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/container_paths.py +0 -0
  252. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/criteria.py +0 -0
  253. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/enums.py +0 -0
  254. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/experiment.py +0 -0
  255. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/judge.py +0 -0
  256. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/judge_defaults.py +0 -0
  257. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/limits.py +0 -0
  258. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/merge_strategy.py +0 -0
  259. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/mutations.py +0 -0
  260. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/results.py +0 -0
  261. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/routing.py +0 -0
  262. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/sandbox.py +0 -0
  263. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/tasks.py +0 -0
  264. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/models/templates.py +0 -0
  265. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/__init__.py +0 -0
  266. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/batch.py +0 -0
  267. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/config.py +0 -0
  268. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/config_merge.py +0 -0
  269. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/early_stop.py +0 -0
  270. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/evaluation.py +0 -0
  271. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/experiment.py +0 -0
  272. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/overrides.py +0 -0
  273. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/run_limits.py +0 -0
  274. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestration/task_loader.py +0 -0
  275. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/orchestrator.py +0 -0
  276. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/path_utils.py +0 -0
  277. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/plugins.py +0 -0
  278. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/pricing.py +0 -0
  279. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/py.typed +0 -0
  280. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/reports.py +0 -0
  281. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/reports_experiment.py +0 -0
  282. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/reports_html.py +0 -0
  283. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/reports_junit.py +0 -0
  284. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/reports_stats.py +0 -0
  285. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/resources/__init__.py +0 -0
  286. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
  287. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/resources/tags.yaml +0 -0
  288. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/sandbox.py +0 -0
  289. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/scoring/__init__.py +0 -0
  290. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/scoring/ast_similarity.py +0 -0
  291. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/scoring/complexity.py +0 -0
  292. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/scoring/quality.py +0 -0
  293. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/scoring/signature_similarity.py +0 -0
  294. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/scoring/similarity.py +0 -0
  295. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/scoring/token_similarity.py +0 -0
  296. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/simulation/__init__.py +0 -0
  297. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/simulation/termination.py +0 -0
  298. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/simulation/user_simulator.py +0 -0
  299. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/streaming/__init__.py +0 -0
  300. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/streaming/callbacks.py +0 -0
  301. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/streaming/collector.py +0 -0
  302. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/streaming/events.py +0 -0
  303. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/streaming/wire.py +0 -0
  304. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/telemetry.py +0 -0
  305. {coder_eval-0.11.0 → coder_eval-0.11.2}/src/coder_eval/utils.py +0 -0
  306. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/README.md +0 -0
  307. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agentless_smoke_test.yaml +0 -0
  308. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/antigravity_hello_world.yaml +0 -0
  309. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
  310. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/claude_hello_world.yaml +0 -0
  311. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/claude_hello_world_docker.yaml +0 -0
  312. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
  313. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/claude_subagent_test.yaml +0 -0
  314. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
  315. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/codex_hello_world.yaml +0 -0
  316. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/codex_parallel_commands.yaml +0 -0
  317. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
  318. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/codex_skills_test.yaml +0 -0
  319. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/codex_string_utils.yaml +0 -0
  320. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/codex_subagent_test.yaml +0 -0
  321. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/subagent_bash_long_input.yaml +0 -0
  322. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/agents/subagent_merge_sort.yaml +0 -0
  323. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/anti_cheat_reference/anti_cheat_reference.yaml +0 -0
  324. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/anti_cheat_reference/reference/solution.py +0 -0
  325. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/byod_smoke_test.yaml +0 -0
  326. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/dataset_example.yaml +0 -0
  327. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/datasets/sentiment.jsonl +0 -0
  328. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
  329. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
  330. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
  331. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/dockerfile_build_example/environment/input.txt +0 -0
  332. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
  333. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
  334. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/early_stop_decision_budget_exceeded.yaml +0 -0
  335. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/early_stop_weighted_high_weight_kills_run.yaml +0 -0
  336. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/early_stop_weighted_low_weight_absorbed.yaml +0 -0
  337. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/fibonacci_with_template.yaml +0 -0
  338. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/hello_date.yaml +0 -0
  339. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/inline_starter_example.yaml +0 -0
  340. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/internal/session_resumption.yaml +0 -0
  341. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/mock_path_dirs_smoke.yaml +0 -0
  342. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
  343. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
  344. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
  345. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
  346. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
  347. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
  348. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/run_limits/max_turns_cap.yaml +0 -0
  349. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/run_limits/turn_timeout.yaml +0 -0
  350. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
  351. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
  352. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
  353. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
  354. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
  355. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
  356. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/README.md +0 -0
  357. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
  358. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
  359. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
  360. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
  361. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
  362. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
  363. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
  364. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
  365. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
  366. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
  367. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/sentiment_classification.yaml +0 -0
  368. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/smoke_agent_judge.yaml +0 -0
  369. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/smoke_budget_exceeded.yaml +0 -0
  370. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
  371. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/smoke_llm_judge.yaml +0 -0
  372. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/smoke_negative_path.yaml +0 -0
  373. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/smoke_task_timeout.yaml +0 -0
  374. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/smoke_variants.yaml +0 -0
  375. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/test_sandbox.yaml +0 -0
  376. {coder_eval-0.11.0 → coder_eval-0.11.2}/tasks/token_check.yaml +0 -0
  377. {coder_eval-0.11.0 → coder_eval-0.11.2}/templates/byod_smoke_test/Dockerfile +0 -0
  378. {coder_eval-0.11.0 → coder_eval-0.11.2}/templates/fibonacci-starter/README.md +0 -0
  379. {coder_eval-0.11.0 → coder_eval-0.11.2}/templates/fibonacci-starter/src/main.py +0 -0
  380. {coder_eval-0.11.0 → coder_eval-0.11.2}/templates/fibonacci-starter/tests/test_main.py +0 -0
  381. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/__init__.py +0 -0
  382. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/__init__.py +0 -0
  383. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/__init__.py +0 -0
  384. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/_scrub.py +0 -0
  385. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
  386. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
  387. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
  388. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
  389. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
  390. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
  391. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
  392. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
  393. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
  394. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
  395. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
  396. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
  397. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
  398. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +0 -0
  399. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
  400. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +0 -0
  401. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
  402. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
  403. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
  404. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
  405. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/live_criteria.py +0 -0
  406. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/report_snapshots/__init__.py +0 -0
  407. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
  408. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
  409. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
  410. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
  411. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/report_snapshots/run_full.md +0 -0
  412. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
  413. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/_path_helpers.py +0 -0
  414. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/conftest.py +0 -0
  415. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/fixtures/__init__.py +0 -0
  416. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
  417. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
  418. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/fixtures/mock_agent.py +0 -0
  419. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
  420. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
  421. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
  422. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/fixtures/text_stub_agent.py +0 -0
  423. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/__init__.py +0 -0
  424. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/action_docs.py +0 -0
  425. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/dead_config_fields.py +0 -0
  426. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/doc_env_parity.py +0 -0
  427. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/doc_examples.py +0 -0
  428. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/doc_indexes.py +0 -0
  429. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/doc_schema_parity.py +0 -0
  430. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/generated.py +0 -0
  431. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/live_verdict_contract.py +0 -0
  432. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/plugin_reference.py +0 -0
  433. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/pyright_config.py +0 -0
  434. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/__init__.py +0 -0
  435. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/base.py +0 -0
  436. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
  437. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
  438. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
  439. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
  440. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
  441. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
  442. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
  443. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
  444. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
  445. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce023_no_proxy_shim_import.py +0 -0
  446. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
  447. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
  448. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce037_no_dead_private_helper.py +0 -0
  449. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce038_acquire_inside_try.py +0 -0
  450. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/ce039_config_error_escalates.py +0 -0
  451. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/no_agent_timing_access.py +0 -0
  452. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
  453. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
  454. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/no_silent_except.py +0 -0
  455. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/no_submodule_model_imports.py +0 -0
  456. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
  457. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
  458. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
  459. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/open_explicit_encoding.py +0 -0
  460. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
  461. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/register_criterion_required.py +0 -0
  462. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
  463. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
  464. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/violation.py +0 -0
  465. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/lint/workflow_outputs.py +0 -0
  466. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_action_version_pin.py +0 -0
  467. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent.py +0 -0
  468. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_config_no_timing_fields.py +0 -0
  469. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_config_optional_type.py +0 -0
  470. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_config_registry_dispatch.py +0 -0
  471. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_config_sdk_decoupling.py +0 -0
  472. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_golden_master.py +0 -0
  473. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_judge_criterion.py +0 -0
  474. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_telemetry.py +0 -0
  475. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_telemetry_advanced.py +0 -0
  476. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agent_timeout.py +0 -0
  477. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_agentless.py +0 -0
  478. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_aggregate.py +0 -0
  479. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_antigravity_agent.py +0 -0
  480. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_byoa_plugin.py +0 -0
  481. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_byoa_plugin_live.py +0 -0
  482. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_byod_feature.py +0 -0
  483. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_check_all_async.py +0 -0
  484. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_checker_logging.py +0 -0
  485. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_classification_match.py +0 -0
  486. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_claude_settings_enforcement_live.py +0 -0
  487. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cleanup_preservation_guard.py +0 -0
  488. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cli_backend_flag.py +0 -0
  489. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cli_called_criterion.py +0 -0
  490. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cli_empty_glob.py +0 -0
  491. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cli_sdk_options.py +0 -0
  492. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cli_set_overrides.py +0 -0
  493. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cli_telemetry.py +0 -0
  494. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cli_type_flag.py +0 -0
  495. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_code_review_bugs.py +0 -0
  496. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_codex_agent.py +0 -0
  497. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_codex_agent_live.py +0 -0
  498. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_codex_token_mapping.py +0 -0
  499. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_command_executed.py +0 -0
  500. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_command_statistics.py +0 -0
  501. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_command_telemetry_result_data.py +0 -0
  502. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_commands_efficiency.py +0 -0
  503. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_config_lineage.py +0 -0
  504. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_config_merge_engine.py +0 -0
  505. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_config_precedence.py +0 -0
  506. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_continuous_scoring.py +0 -0
  507. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_cost_accounting_paths.py +0 -0
  508. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_criterion_result_round_trip.py +0 -0
  509. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_dataset_expansion.py +0 -0
  510. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_debug_logging.py +0 -0
  511. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_docker_build_failure.py +0 -0
  512. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_docker_litellm_env.py +0 -0
  513. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_docker_runner_container_death.py +0 -0
  514. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_docker_runner_stream_limit.py +0 -0
  515. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_docker_wildcard_env.py +0 -0
  516. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_docker_workdir_live.py +0 -0
  517. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_driver_resolver.py +0 -0
  518. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_early_stop.py +0 -0
  519. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_error_handling.py +0 -0
  520. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_evaluate_command.py +0 -0
  521. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_evaluator.py +0 -0
  522. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_event_collector.py +0 -0
  523. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_experiment_cli.py +0 -0
  524. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_experiment_loader.py +0 -0
  525. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_experiment_models.py +0 -0
  526. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_experiment_reports.py +0 -0
  527. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_experiment_resolver.py +0 -0
  528. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_experiment_runner.py +0 -0
  529. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_file_check.py +0 -0
  530. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_file_contains_scoring.py +0 -0
  531. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_formatting.py +0 -0
  532. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_git_clone_failure.py +0 -0
  533. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_glob_paths_in_file_criteria.py +0 -0
  534. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_heartbeat_watchdog.py +0 -0
  535. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_ignore_patterns_negation.py +0 -0
  536. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_image_from_dockerfiles.py +0 -0
  537. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_integration.py +0 -0
  538. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_json_check.py +0 -0
  539. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_judge_context_builder.py +0 -0
  540. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_judge_models.py +0 -0
  541. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_judge_persistence.py +0 -0
  542. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_lint_no_top_level_run_limits.py +0 -0
  543. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_lint_runner.py +0 -0
  544. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_litellm_config.py +0 -0
  545. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_litellm_cost.py +0 -0
  546. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_litellm_cost_logger.py +0 -0
  547. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_litellm_route.py +0 -0
  548. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_llm_judge_criterion.py +0 -0
  549. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_log_tail_buffer.py +0 -0
  550. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_logging.py +0 -0
  551. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_logging_isolation.py +0 -0
  552. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_merge_characterization.py +0 -0
  553. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_merge_strategy_annotations.py +0 -0
  554. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_merge_unification.py +0 -0
  555. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_models.py +0 -0
  556. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_mutations.py +0 -0
  557. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_new_criteria.py +0 -0
  558. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_node_env_config.py +0 -0
  559. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_optional_dependencies.py +0 -0
  560. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_orchestrator.py +0 -0
  561. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_orchestrator_error_log_tail.py +0 -0
  562. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_orchestrator_telemetry.py +0 -0
  563. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_overrides_engine.py +0 -0
  564. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_parallel.py +0 -0
  565. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_path_utils.py +0 -0
  566. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_plan_command.py +0 -0
  567. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_plugin_processing.py +0 -0
  568. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_plugins.py +0 -0
  569. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_post_run.py +0 -0
  570. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_pr_review_workflow.py +0 -0
  571. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_pre_run.py +0 -0
  572. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_preservation_mode.py +0 -0
  573. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_pricing_registry.py +0 -0
  574. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reference_comparison_scoring.py +0 -0
  575. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reference_evaluator.py +0 -0
  576. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reference_missing_file.py +0 -0
  577. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reference_models.py +0 -0
  578. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reference_permissions.py +0 -0
  579. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_registry.py +0 -0
  580. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_release_notes.py +0 -0
  581. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_replicate_stats.py +0 -0
  582. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_report_command.py +0 -0
  583. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reports.py +0 -0
  584. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reports_experiment.py +0 -0
  585. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reports_html.py +0 -0
  586. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reports_junit.py +0 -0
  587. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reports_stats.py +0 -0
  588. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_reports_stats_nonfinite.py +0 -0
  589. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_resolve_task_files.py +0 -0
  590. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_resume.py +0 -0
  591. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_retry_logic_comprehensive.py +0 -0
  592. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_route_seam_exhaustiveness.py +0 -0
  593. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_routing.py +0 -0
  594. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_run_command_junit.py +0 -0
  595. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_run_command_stdout.py +0 -0
  596. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_run_limits_models.py +0 -0
  597. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_run_limits_orchestrator.py +0 -0
  598. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_run_limits_resolver.py +0 -0
  599. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_run_metrics.py +0 -0
  600. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_runtime_tool_versions.py +0 -0
  601. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sandbox.py +0 -0
  602. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sandbox_layer_builder.py +0 -0
  603. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sandbox_optional.py +0 -0
  604. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sandbox_record_cli.py +0 -0
  605. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sandbox_security.py +0 -0
  606. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sandbox_symlink_preservation.py +0 -0
  607. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sandbox_templates.py +0 -0
  608. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_scorers.py +0 -0
  609. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_scoring_quality.py +0 -0
  610. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sdk_option_classification.py +0 -0
  611. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_simulation_config.py +0 -0
  612. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_simulation_integration.py +0 -0
  613. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_simulation_termination.py +0 -0
  614. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_simulation_trials.py +0 -0
  615. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_skill_triggered.py +0 -0
  616. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_streaming_agent_integration.py +0 -0
  617. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_streaming_batch.py +0 -0
  618. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_streaming_callbacks.py +0 -0
  619. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_streaming_cli.py +0 -0
  620. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_streaming_events.py +0 -0
  621. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_streaming_orchestrator.py +0 -0
  622. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_streaming_wire.py +0 -0
  623. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_sub_agent_runner.py +0 -0
  624. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_success_criterion_union.py +0 -0
  625. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_suite_rollup.py +0 -0
  626. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_summaries.py +0 -0
  627. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_tags.py +0 -0
  628. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_task_definition_unknown_fields.py +0 -0
  629. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_teardown_interrupt.py +0 -0
  630. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_telemetry.py +0 -0
  631. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_template_env_expansion.py +0 -0
  632. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_threshold_enforcement.py +0 -0
  633. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_timeout_batch.py +0 -0
  634. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_timeout_categorization.py +0 -0
  635. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_timeout_exceptions.py +0 -0
  636. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_timeout_models.py +0 -0
  637. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_timeout_orchestrator.py +0 -0
  638. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_token_usage.py +0 -0
  639. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_uipath_eval.py +0 -0
  640. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_user_simulator.py +0 -0
  641. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_utils.py +0 -0
  642. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_utterance_extraction.py +0 -0
  643. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_variant_prompt_file.py +0 -0
  644. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_verdict_tool.py +0 -0
  645. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_verify_published_workflow.py +0 -0
  646. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_visible_turn_cap.py +0 -0
  647. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_watchdog.py +0 -0
  648. {coder_eval-0.11.0 → coder_eval-0.11.2}/tests/test_yaml_migration.py +0 -0
@@ -76,7 +76,7 @@ jobs:
76
76
 
77
77
  - name: Install uv
78
78
  run: |
79
- python -m pip install --upgrade pip
79
+ python -m pip install --upgrade "pip>=26.2" # PYSEC-2026-3721 fix floor
80
80
  pip install uv
81
81
 
82
82
  - name: Install project dependencies (hash-verified from uv.lock)
@@ -297,7 +297,7 @@ jobs:
297
297
 
298
298
  - name: Install uv
299
299
  run: |
300
- python -m pip install --upgrade pip
300
+ python -m pip install --upgrade "pip>=26.2" # PYSEC-2026-3721 fix floor
301
301
  pip install uv
302
302
 
303
303
  - name: Install project without [uipath] extra
@@ -381,7 +381,7 @@ jobs:
381
381
 
382
382
  - name: Install uv
383
383
  run: |
384
- python -m pip install --upgrade pip
384
+ python -m pip install --upgrade "pip>=26.2" # PYSEC-2026-3721 fix floor
385
385
  pip install uv
386
386
 
387
387
  - name: Install project dependencies (hash-verified from uv.lock)
@@ -527,7 +527,7 @@ jobs:
527
527
 
528
528
  - name: Install uv
529
529
  run: |
530
- python -m pip install --upgrade pip
530
+ python -m pip install --upgrade "pip>=26.2" # PYSEC-2026-3721 fix floor
531
531
  pip install uv
532
532
 
533
533
  - name: Install project dependencies (hash-verified from uv.lock)
@@ -697,7 +697,7 @@ jobs:
697
697
 
698
698
  - name: Install uv
699
699
  run: |
700
- python -m pip install --upgrade pip
700
+ python -m pip install --upgrade "pip>=26.2" # PYSEC-2026-3721 fix floor
701
701
  pip install uv
702
702
 
703
703
  - name: Install project dependencies (hash-verified from uv.lock)
@@ -840,7 +840,7 @@ jobs:
840
840
 
841
841
  - name: Install uv
842
842
  run: |
843
- python -m pip install --upgrade pip
843
+ python -m pip install --upgrade "pip>=26.2" # PYSEC-2026-3721 fix floor
844
844
  pip install uv
845
845
 
846
846
  - name: Install project dependencies (with codex extra)
@@ -919,7 +919,7 @@ jobs:
919
919
 
920
920
  - name: Install uv
921
921
  run: |
922
- python -m pip install --upgrade pip
922
+ python -m pip install --upgrade "pip>=26.2" # PYSEC-2026-3721 fix floor
923
923
  pip install uv
924
924
 
925
925
  - name: Install project dependencies (hash-verified from uv.lock)
@@ -2,6 +2,54 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v0.11.2 (2026-08-24)
6
+
7
+ ### Bug Fixes
8
+
9
+ - **docker**: Expand ~ and $VAR in extra_mounts destinations
10
+ ([#128](https://github.com/UiPath/coder_eval/pull/128),
11
+ [`02dbf69`](https://github.com/UiPath/coder_eval/commit/02dbf694705fd3f7de4ce164230a70945f08a1ce))
12
+
13
+ - **docker**: Reject expansions that inject a ':' into a mount path
14
+ ([#128](https://github.com/UiPath/coder_eval/pull/128),
15
+ [`02dbf69`](https://github.com/UiPath/coder_eval/commit/02dbf694705fd3f7de4ce164230a70945f08a1ce))
16
+
17
+ ### Documentation
18
+
19
+ - **docker**: Trim the extra_mounts destination comments to scope
20
+ ([#128](https://github.com/UiPath/coder_eval/pull/128),
21
+ [`02dbf69`](https://github.com/UiPath/coder_eval/commit/02dbf694705fd3f7de4ce164230a70945f08a1ce))
22
+
23
+
24
+ ## v0.11.1 (2026-08-21)
25
+
26
+ ### Bug Fixes
27
+
28
+ - **ci**: Pin pip floor to 26.2 to close PYSEC-2026-3721
29
+ ([#133](https://github.com/UiPath/coder_eval/pull/133),
30
+ [`beecedd`](https://github.com/UiPath/coder_eval/commit/beeceddc521957d3cb53f944b7877dada1155548))
31
+
32
+ - **codex**: Store command output whole in result_summary (+ code-review fixes)
33
+ ([#127](https://github.com/UiPath/coder_eval/pull/127),
34
+ [`3d09f0f`](https://github.com/UiPath/coder_eval/commit/3d09f0f4d966f619405058aca44aa982b1ba265a))
35
+
36
+ - **deps**: Address PR #133 review — anthropic 1.0.0 dropped temperature kwarg
37
+ ([#133](https://github.com/UiPath/coder_eval/pull/133),
38
+ [`beecedd`](https://github.com/UiPath/coder_eval/commit/beeceddc521957d3cb53f944b7877dada1155548))
39
+
40
+ - **deps**: Bump anthropic to 1.0.0 and migrate Bedrock judge path to httpx2
41
+ ([#133](https://github.com/UiPath/coder_eval/pull/133),
42
+ [`beecedd`](https://github.com/UiPath/coder_eval/commit/beeceddc521957d3cb53f944b7877dada1155548))
43
+
44
+ - **deps**: Bump anthropic to 1.0.0, migrate Bedrock judge path to httpx2
45
+ ([#133](https://github.com/UiPath/coder_eval/pull/133),
46
+ [`beecedd`](https://github.com/UiPath/coder_eval/commit/beeceddc521957d3cb53f944b7877dada1155548))
47
+
48
+ - **deps**: Re-lock pip to 26.2.1 to actually close PYSEC-2026-3721
49
+ ([#133](https://github.com/UiPath/coder_eval/pull/133),
50
+ [`beecedd`](https://github.com/UiPath/coder_eval/commit/beeceddc521957d3cb53f944b7877dada1155548))
51
+
52
+
5
53
  ## v0.11.0 (2026-08-19)
6
54
 
7
55
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: coder-eval
3
- Version: 0.11.0
3
+ Version: 0.11.2
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
@@ -23,11 +23,12 @@ Classifier: Topic :: Software Development :: Quality Assurance
23
23
  Classifier: Topic :: Software Development :: Testing
24
24
  Classifier: Typing :: Typed
25
25
  Requires-Python: >=3.13
26
- Requires-Dist: anthropic>=0.86.0
26
+ Requires-Dist: anthropic<2.0.0,>=1.0.0
27
27
  Requires-Dist: anyio>=4.13.0
28
28
  Requires-Dist: azure-monitor-opentelemetry-exporter<1.1.0,>=1.0.0b30
29
29
  Requires-Dist: claude-agent-sdk>=0.2.124
30
30
  Requires-Dist: click>=8.3.3
31
+ Requires-Dist: httpx2<3.0.0,>=2.12.0
31
32
  Requires-Dist: jmespath>=1.1.0
32
33
  Requires-Dist: jsonschema>=4.26.0
33
34
  Requires-Dist: opentelemetry-sdk<2.0.0,>=1.30.0
@@ -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.0" # <-- kept in sync with releases by release.yml
44
+ default: "0.11.2" # <-- kept in sync with releases by release.yml
45
45
  run-dir:
46
46
  description: Run directory (--run-dir)
47
47
  required: false
@@ -18,9 +18,11 @@ defaults:
18
18
  # Per-row dataset multiplication: a 100-row task with max_usd: 0.10 permits up to
19
19
  # $10 cumulative spend.
20
20
  run_limits:
21
- # Maximum agent inner-loop turns per iteration (null = SDK default).
22
- # Typical range in tasks: 3-18 depending on complexity.
23
- max_turns: 20
21
+ # Hard safety ceiling on agent inner-loop turns per iteration (null = SDK
22
+ # default). Set well above the typical 3-18 turns a task needs so it only
23
+ # trips on runaway loops; task_timeout / turn_timeout below are the practical
24
+ # guards. Override per-task when a task legitimately needs more.
25
+ max_turns: 100
24
26
  # Soft target: when cumulative SDK turns across all iterations of a task
25
27
  # exceed this, the orchestrator logs a one-shot warning and the report
26
28
  # surfaces a badge. Does NOT abort the run (max_turns is the hard cap).
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coder-eval",
3
- "version": "0.11.0",
3
+ "version": "0.11.2",
4
4
  "description": "Author, run, and analyze coder-eval suites — including whether your Claude Code skills actually trigger.",
5
5
  "author": { "name": "UiPath", "url": "https://github.com/UiPath/coder_eval" },
6
6
  "homepage": "https://coder-eval.com",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "coder-eval"
3
- version = "0.11.0"
3
+ version = "0.11.2"
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"
@@ -34,7 +34,14 @@ dependencies = [
34
34
  "click>=8.3.3",
35
35
  "rich>=14.3.3",
36
36
  "python-dotenv>=1.2.2",
37
- "anthropic>=0.86.0",
37
+ # Cap the major: 1.0.0 already proved a major can drop call kwargs
38
+ # (temperature/top_p/top_k off messages.create — see judge_anthropic.py).
39
+ "anthropic>=1.0.0,<2.0.0",
40
+ # anthropic>=1.0.0 migrated its HTTP layer from httpx to httpx2 (its own
41
+ # exceptions, e.g. APIConnectionError, now carry an httpx2.Request). Declared
42
+ # explicitly since our code/tests construct httpx2 types directly. Capped to
43
+ # mirror anthropic's own bound on it (`httpx2<3,>=2.0.0`).
44
+ "httpx2>=2.12.0,<3.0.0",
38
45
  "claude-agent-sdk>=0.2.124",
39
46
  "anyio>=4.13.0",
40
47
  "radon>=6.0.1",
@@ -1,3 +1,3 @@
1
1
  """coder_eval - A framework for evaluating AI coding agents."""
2
2
 
3
- __version__ = "0.11.0"
3
+ __version__ = "0.11.2"
@@ -2178,10 +2178,15 @@ class CodexAgent(Agent[CodexAgentConfig]):
2178
2178
  # Determine result status from exit code
2179
2179
  result_status = "success" if exit_code == 0 else "error" if exit_code is not None else "unknown"
2180
2180
 
2181
- # Build result summary with output if available
2181
+ # Build result summary with output if available. Store the output WHOLE:
2182
+ # CommandTelemetry.result_summary is the untruncated tool-result body (its
2183
+ # length drives CommandTelemetry.result_tokens), so truncating here would
2184
+ # under-report tool-output size for every command (see CE043). The output is
2185
+ # already bounded by the Codex harness's own exec-output truncation; any
2186
+ # further trimming for display belongs in the renderers/reports, not capture.
2182
2187
  summary_parts = [f"Exit code: {exit_code}" if exit_code is not None else "Command executed"]
2183
2188
  if output and len(output.strip()) > 0:
2184
- summary_parts.append(f"Output: {output[:100]}")
2189
+ summary_parts.append(f"Output: {output}")
2185
2190
  result_summary = " | ".join(summary_parts)
2186
2191
 
2187
2192
  # Try to parse output as JSON
@@ -40,7 +40,14 @@ async def invoke_anthropic_judge_async(
40
40
  Returns the SDK response converted to a dict via ``model_dump`` so the
41
41
  caller can reuse ``extract_verdict_from_anthropic_response`` — Anthropic's
42
42
  native shape (content blocks with ``type: tool_use``) is identical
43
- between this SDK call and the Bedrock httpx-direct call.
43
+ between this SDK call and the Bedrock httpx2-direct call.
44
+
45
+ ``temperature`` is forwarded via ``extra_body`` rather than as a top-level
46
+ kwarg: anthropic 1.0.0 dropped ``temperature``/``top_p``/``top_k`` from
47
+ ``AsyncMessages.create``'s typed signature, but the Messages API itself
48
+ still accepts ``temperature`` in the raw JSON body — the same body shape
49
+ the Bedrock path already sends it in — so ``extra_body`` keeps both judge
50
+ backends honoring ``LLMJudgeCriterion.temperature`` identically.
44
51
  """
45
52
  alias = to_anthropic_alias(model)
46
53
  client = AsyncAnthropic(timeout=timeout_seconds)
@@ -51,12 +58,17 @@ async def invoke_anthropic_judge_async(
51
58
  system=system,
52
59
  messages=[{"role": "user", "content": user}],
53
60
  max_tokens=max_tokens,
54
- temperature=temperature,
55
- tools=[tool_spec], # type: ignore[arg-type]
61
+ tools=[tool_spec], # pyright: ignore[reportArgumentType]
56
62
  tool_choice={"type": "tool", "name": tool_spec["name"]},
63
+ extra_body={"temperature": temperature},
57
64
  )
58
65
  except APIError as e:
59
66
  # The SDK already retries transient failures internally (2 attempts
60
67
  # by default) — do not add another retry loop here.
61
68
  raise JudgeInfrastructureError(f"Anthropic judge API error: {e}") from e
69
+ except Exception as e:
70
+ # A signature/contract break (e.g. a removed or renamed kwarg after an
71
+ # SDK bump) must not be scored as an agent failure — see CLAUDE.md's
72
+ # CE039 rationale: an eval-infra fault is not the agent's fault.
73
+ raise JudgeInfrastructureError(f"Anthropic judge call failed: {e}") from e
62
74
  return response.model_dump()
@@ -14,7 +14,7 @@ agent_judge uses the Claude Code SDK subprocess instead — the two paths
14
14
  intentionally do not share an HTTP client.
15
15
 
16
16
  Async on purpose: this is llm_judge's only implementation of the network
17
- call (there is no sync twin) — ``httpx.AsyncClient`` lets the call yield the
17
+ call (there is no sync twin) — ``httpx2.AsyncClient`` lets the call yield the
18
18
  event loop instead of blocking a thread-pool thread for the wait, so
19
19
  ``SuccessChecker.check_all_async`` awaits it directly without pinning a
20
20
  thread. (``check_all_async`` currently runs criteria sequentially; running
@@ -27,7 +27,7 @@ import asyncio
27
27
  import logging
28
28
  from typing import Any
29
29
 
30
- import httpx
30
+ import httpx2
31
31
 
32
32
  from coder_eval.errors import JudgeInfrastructureError
33
33
  from coder_eval.errors.categories import RetryConfig
@@ -90,13 +90,13 @@ async def invoke_bedrock_judge_async(
90
90
  attempts = _JUDGE_RETRY.max_retries + 1
91
91
  last_failure = ""
92
92
  last_exc: Exception | None = None
93
- async with httpx.AsyncClient() as client:
93
+ async with httpx2.AsyncClient() as client:
94
94
  for attempt in range(attempts):
95
95
  if attempt:
96
96
  await asyncio.sleep(compute_backoff(_JUDGE_RETRY, attempt - 1))
97
97
  try:
98
98
  response = await client.post(url, headers=headers, json=body, timeout=timeout_seconds)
99
- except httpx.HTTPError as e:
99
+ except httpx2.HTTPError as e:
100
100
  last_failure = f"Bedrock invoke transport error: {e}"
101
101
  last_exc = e
102
102
  logger.warning("Bedrock judge attempt %d/%d failed: %s", attempt + 1, attempts, last_failure)
@@ -40,7 +40,7 @@ SUBMIT_VERDICT_ANTHROPIC_TOOL: dict[str, Any] = {
40
40
  "description": _SUBMIT_VERDICT_DESCRIPTION,
41
41
  "input_schema": JudgeVerdict.model_json_schema(),
42
42
  }
43
- """Anthropic-native tool spec for the Bedrock httpx-direct path and Anthropic SDK calls.
43
+ """Anthropic-native tool spec for the Bedrock httpx2-direct path and Anthropic SDK calls.
44
44
 
45
45
  Note: Anthropic uses ``input_schema``, not OpenAI's ``parameters``.
46
46
  """
@@ -132,7 +132,7 @@ def extract_verdict_from_anthropic_response(
132
132
  ``{"type": "tool_use", "name": "submit_verdict"}`` and validates the last
133
133
  one's ``input`` against ``JudgeVerdict``. Used by:
134
134
 
135
- * The Bedrock httpx path (``invoke_bedrock_judge_async``) — raw JSON dict.
135
+ * The Bedrock httpx2 path (``invoke_bedrock_judge_async``) — raw JSON dict.
136
136
  * The Anthropic SDK Direct path (``invoke_anthropic_judge_async``) —
137
137
  response converted via ``Message.model_dump()``.
138
138
 
@@ -290,11 +290,14 @@ def _validate_extra_mount(spec: str) -> str:
290
290
 
291
291
  Defends against typos that would silently expose the host fs to the
292
292
  container, and against mount specs that shadow framework-owned mounts.
293
- Normalizes the source side by expanding ``~`` and ``$VAR`` so authors
294
- can write portable specs. Returns the (possibly rewritten) spec to
295
- feed back into argv.
293
+ Normalizes BOTH sides by expanding ``~`` and ``$VAR`` so authors can
294
+ write portable specs. Returns the (possibly rewritten) spec to feed
295
+ back into argv.
296
296
 
297
297
  Notes:
298
+ - Destinations are expanded too. A container path that has to match a
299
+ host-valued var (``$SKILLS_REPO_PATH``) would otherwise have to be
300
+ hardcoded per machine.
298
301
  - Mode is REQUIRED. Forgetting ``:ro`` is the single most common way
299
302
  to accidentally hand the container RW access to a host directory,
300
303
  so we make the author write it explicitly.
@@ -312,26 +315,35 @@ def _validate_extra_mount(spec: str) -> str:
312
315
  parts = body.split(":")
313
316
  if len(parts) < 2 or len(parts) > 3:
314
317
  raise ValueError(f"Invalid extra_mounts entry {spec!r}: expected `src:dst[:ro|rw]`.")
315
- src, dst = head + parts[0], parts[1]
318
+ src, raw_dst = head + parts[0], parts[1]
316
319
  # Default to read-only when mode is omitted. Mounting host paths RW
317
320
  # by default is the wrong sandbox stance: the few RW use-cases are
318
321
  # better stated explicitly than implied by silence.
319
322
  mode = parts[2] if len(parts) == 3 else "ro"
320
323
  if not src:
321
324
  raise ValueError(f"Invalid extra_mounts entry {spec!r}: empty source path.")
322
- if not dst:
325
+ if not raw_dst:
323
326
  raise ValueError(f"Invalid extra_mounts entry {spec!r}: empty destination path.")
327
+ # Expanded before the absolute-path check: that is the point.
328
+ expanded_src = os.path.expandvars(os.path.expanduser(src))
329
+ dst = os.path.expandvars(os.path.expanduser(raw_dst))
330
+ # A variable whose value carries a ':' would add fields to the spec rebuilt
331
+ # at the bottom, silently moving the destination or widening the mode.
332
+ # The drive prefix is excluded: its colon is legitimate and already split off.
333
+ if ":" in dst or ":" in expanded_src[len(head) :]:
334
+ raise ValueError(f"Invalid extra_mounts entry {spec!r}: expansion introduced a ':' into a path.")
324
335
  if not dst.startswith("/"):
325
- raise ValueError(f"Invalid extra_mounts entry {spec!r}: destination must be an absolute path.")
336
+ # expandvars leaves an unset var verbatim, so typos land here.
337
+ detail = f"{raw_dst!r}" if dst == raw_dst else f"{raw_dst!r} (expanded to {dst!r})"
338
+ raise ValueError(f"Invalid extra_mounts entry {spec!r}: destination must be an absolute path, got {detail}.")
326
339
  if mode not in ("ro", "rw"):
327
340
  raise ValueError(f"Invalid extra_mounts entry {spec!r}: mode must be 'ro' or 'rw'.")
328
- # Expand ~ and $VAR in the source so authors can write portable specs.
329
- expanded_src = os.path.expandvars(os.path.expanduser(src))
330
341
  if not Path(expanded_src).exists():
331
342
  raise ValueError(f"Invalid extra_mounts entry {spec!r}: source path does not exist on host.")
332
343
  # Reject destinations that shadow framework-owned mounts inside the
333
344
  # container. ``/work`` substrings are caught too -- /work/foo would
334
345
  # land underneath our staging dir and shadow the input/output tree.
346
+ # Expanded form: a var could itself expand to a reserved path.
335
347
  dst_norm = dst.rstrip("/") or "/"
336
348
  if dst_norm in _RESERVED_MOUNT_DESTS or dst_norm.startswith(CONTAINER_WORK_DIR + "/"):
337
349
  raise ValueError(
@@ -410,6 +410,16 @@ class CommandTelemetry(BaseModel):
410
410
  result size from prompt-cache growth (which is unavailable when caching is
411
411
  disabled). Approximate, not the API's exact tokenizer count, but
412
412
  deterministic and always present. 0 when the tool returned no content.
413
+
414
+ This measure is only meaningful while ``result_summary`` stays whole: an
415
+ agent that truncates a command's output before recording it (as the Codex
416
+ agent once did with ``output[:100]``) silently under-reports that command's
417
+ result. Lint rule CE043 forbids truncating captured command output
418
+ (stdout/stderr) in the agents, so the "untruncated" contract holds for
419
+ command results across agents. (One-line summaries of non-command tool
420
+ items — e.g. collab/MCP status lines built by ``_summarize_tool_item`` —
421
+ are intentionally brief and out of scope.) Trim for DISPLAY in the
422
+ renderers/reports instead.
413
423
  """
414
424
  if not self.result_summary:
415
425
  return 0
@@ -104,14 +104,18 @@ class RichStreamRenderer:
104
104
  return f"[cyan]>>> TOOL: {escape(event.tool.tool_name)}[/cyan] | {params_str}"
105
105
 
106
106
  if isinstance(event, ToolEndEvent):
107
- preview = escape(event.tool.result_summary or "")
107
+ # result_summary is stored WHOLE (untruncated) at capture; cap it here
108
+ # for the terse live feed so a large command output doesn't flood the
109
+ # console. The reported char count reflects the true (full) length.
110
+ full = event.tool.result_summary or ""
111
+ preview = escape(_truncate(full, _MAX_RESULT_LEN))
108
112
  if event.status == ToolEndStatus.OK:
109
113
  tag = "[green]<<< OK[/green]"
110
114
  elif event.status == ToolEndStatus.UNRESOLVED:
111
115
  tag = "[yellow]<<< UNRESOLVED:[/yellow]"
112
116
  else:
113
117
  tag = f"[red]<<< {escape(event.status.value.upper())}:[/red]"
114
- return f"{tag} ({len(preview)} chars) {preview}"
118
+ return f"{tag} ({len(full)} chars) {preview}"
115
119
 
116
120
  if isinstance(event, TextChunkEvent):
117
121
  return f"[dim]{escape(event.text)}[/dim]"
@@ -0,0 +1,75 @@
1
+ """CE043: Agents must not truncate a command's output when recording it.
2
+
3
+ ``CommandTelemetry.result_summary`` is contractually the *untruncated* tool-result
4
+ body, and its length drives the ``result_tokens`` computed field (the cost
5
+ simulator's cache-independent measure of tool-output size). An agent that clips a
6
+ command's captured output before storing it silently under-reports every tool
7
+ result — exactly the bug the Codex agent shipped with (``f"Output: {output[:100]}"``),
8
+ which pinned ~77% of its Bash results at ~31 tokens and skewed the cost model.
9
+
10
+ This rule flags, inside ``src/coder_eval/agents/``, a constant-upper-bound slice
11
+ (``x[:N]``) applied to a value that denotes captured command output:
12
+
13
+ * a name whose id is/ends with ``output`` / ``stdout`` / ``stderr``
14
+ (e.g. ``output[:100]``, ``aggregated_output[:512]``, ``proc_stdout[:80]``)
15
+ * an attribute access ``.aggregated_output`` / ``.output`` / ``.stdout`` / ``.stderr``
16
+ (e.g. ``command_item.aggregated_output[:100]``)
17
+
18
+ Store the output whole (it is already bounded by the harness's own exec-output
19
+ truncation) and trim for DISPLAY in the renderers/reports instead.
20
+
21
+ Add ``# noqa: CE043`` on the offending line for a genuinely non-recorded use
22
+ (e.g. slicing stdout only to build a short crash/log message that never becomes a
23
+ ``result_summary``), with a comment explaining why.
24
+ """
25
+
26
+ import ast
27
+
28
+ from tests.lint.rules.base import BaseRule
29
+
30
+
31
+ _OUTPUT_NAMES = {"output", "stdout", "stderr", "aggregated_output"}
32
+
33
+
34
+ def _denotes_output(value: ast.AST) -> str | None:
35
+ """Return the output-ish identifier being sliced, or None."""
36
+ if isinstance(value, ast.Name):
37
+ low = value.id.lower()
38
+ if low in _OUTPUT_NAMES or low.endswith("_output") or low.endswith("_stdout") or low.endswith("_stderr"):
39
+ return value.id
40
+ elif isinstance(value, ast.Attribute):
41
+ if value.attr.lower() in _OUTPUT_NAMES:
42
+ return value.attr
43
+ return None
44
+
45
+
46
+ def _is_const_upper_slice(sl: ast.AST) -> bool:
47
+ """True for ``[:N]`` / ``[:N:...]`` with a constant int upper bound."""
48
+ return (
49
+ isinstance(sl, ast.Slice)
50
+ and sl.lower is None
51
+ and isinstance(sl.upper, ast.Constant)
52
+ and isinstance(sl.upper.value, int)
53
+ )
54
+
55
+
56
+ class NoCommandOutputTruncation(BaseRule):
57
+ id = "CE043"
58
+
59
+ def check(self, tree: ast.AST) -> list:
60
+ # Scope to the agent implementations — only they record CommandTelemetry.
61
+ if "/agents/" not in self.filepath.replace("\\", "/"):
62
+ return []
63
+ self.visit(tree)
64
+ return self.violations
65
+
66
+ def visit_Subscript(self, node: ast.Subscript) -> None:
67
+ name = _denotes_output(node.value)
68
+ if name is not None and _is_const_upper_slice(node.slice):
69
+ self.violation(
70
+ node,
71
+ f"Do not truncate command output ({name}[:...]); CommandTelemetry.result_summary "
72
+ "must stay whole (it drives result_tokens). Store the full output and trim for "
73
+ "display in the renderers/reports instead.",
74
+ )
75
+ self.generic_visit(node)
@@ -24,6 +24,7 @@ from tests.lint.rules.ce032_criteria_path_seam import CriteriaPathSeam
24
24
  from tests.lint.rules.ce037_no_dead_private_helper import NoDeadPrivateHelper
25
25
  from tests.lint.rules.ce038_acquire_inside_try import AcquireInsideTry
26
26
  from tests.lint.rules.ce039_config_error_escalates import ConfigErrorEscalates
27
+ from tests.lint.rules.ce043_no_command_output_truncation import NoCommandOutputTruncation
27
28
  from tests.lint.rules.no_agent_timing_access import NoAgentTimingAccess
28
29
  from tests.lint.rules.no_blocking_io_in_async import NoBlockingIoInAsync
29
30
  from tests.lint.rules.no_cli_imports_in_core import NoCliImportsInCore
@@ -71,6 +72,7 @@ ALL_RULES: list[RuleClass] = [
71
72
  NoDeadPrivateHelper,
72
73
  AcquireInsideTry,
73
74
  ConfigErrorEscalates,
75
+ NoCommandOutputTruncation,
74
76
  ]
75
77
 
76
78
  # Anti-shadow invariant (mirrors AgentRegistry / register_pricing): every CE rule
@@ -104,3 +104,28 @@ class TestCodexTurnState:
104
104
  # A tool_use block was recorded into the open buffer (cut at the next
105
105
  # tokenUsage flush, not here), joinable to the command by tool_id.
106
106
  assert any(b.block_type == "tool_use" and b.tool_use_id == "c1" for b in state.open_blocks)
107
+
108
+ def test_command_output_recorded_whole_not_truncated(self):
109
+ # Regression for the Codex `output[:100]` bug (CE043): result_summary must
110
+ # carry the FULL command output so result_tokens reflects real tool-output
111
+ # size instead of being pinned at a ~31-token, 100-char cap.
112
+ agent = CodexAgent(parse_agent_config(type=AgentKind.CODEX, model="gpt-5-codex"))
113
+ state, commands, _messages = self._state(agent)
114
+
115
+ big_output = "X" * 4000 # far beyond the old 100-char clip
116
+ cmd_root = SimpleNamespace(
117
+ type="commandExecution",
118
+ id="c2",
119
+ command="cat big.txt",
120
+ exit_code=0,
121
+ aggregated_output=big_output,
122
+ duration_ms=5,
123
+ )
124
+ state.on_item_started(_item_notification("item/started", cmd_root))
125
+ state.on_item_completed(_item_notification("item/completed", cmd_root))
126
+
127
+ cmd = commands[0]
128
+ assert big_output in (cmd.result_summary or ""), "full output must be recorded, not truncated"
129
+ # result_tokens (ceil(len/4)) must scale with the real output, not ~31.
130
+ assert cmd.result_tokens >= len(big_output) // 4
131
+ assert cmd.result_tokens > 100
@@ -60,6 +60,48 @@ class TestCE016NoComputedTokenUsageKwargs:
60
60
  assert not self._run("ReconciliationMessage(input_tokens=-5)")
61
61
 
62
62
 
63
+ @pytest.mark.lint
64
+ class TestCE043NoCommandOutputTruncation:
65
+ """CE043 flags truncation of captured command output inside agents/, only."""
66
+
67
+ @staticmethod
68
+ def _run(src: str, *, in_agents: bool = True):
69
+ import ast
70
+
71
+ from tests.lint.rules.ce043_no_command_output_truncation import NoCommandOutputTruncation
72
+
73
+ path = "src/coder_eval/agents/codex_agent.py" if in_agents else "src/coder_eval/reports_html.py"
74
+ return NoCommandOutputTruncation(path).check(ast.parse(src))
75
+
76
+ @pytest.mark.parametrize(
77
+ "expr",
78
+ [
79
+ "output[:100]",
80
+ "aggregated_output[:512]",
81
+ "command_item.aggregated_output[:100]",
82
+ "proc_stdout[:80]",
83
+ "result.stderr[:200]",
84
+ 'f"Output: {output[:100]}"',
85
+ ],
86
+ )
87
+ def test_flags_output_truncation_in_agents(self, expr: str):
88
+ assert self._run(f"x = {expr}"), f"expected CE043 to flag {expr!r}"
89
+
90
+ def test_allows_untruncated_output(self):
91
+ assert not self._run('summary = f"Output: {output}"')
92
+ assert not self._run("summary = aggregated_output")
93
+
94
+ def test_ignores_non_output_slices(self):
95
+ # Legit error/orchestration summaries that are NOT captured command output.
96
+ assert not self._run("detail = summary.result[:200]")
97
+ assert not self._run("msg = content_str[:200]")
98
+ assert not self._run("s = '; '.join(messages)[:200]")
99
+
100
+ def test_scoped_to_agents_only(self):
101
+ # The same pattern outside agents/ is not this rule's concern (display code).
102
+ assert not self._run("preview = output[:100]", in_agents=False)
103
+
104
+
63
105
  @pytest.mark.lint
64
106
  class TestCE017ModelsLazyAgentImports:
65
107
  """CE017 flags only module-level agents/plugins imports inside models/."""
@@ -108,6 +108,41 @@ class TestValidateExtraMount:
108
108
  result = _validate_extra_mount("$MYDIR:/mnt/x")
109
109
  assert result.startswith(real_dir + ":")
110
110
 
111
+ def test_var_expansion_in_destination(self, real_dir, monkeypatch):
112
+ """``$VAR`` in the destination expands too."""
113
+ monkeypatch.setenv("HOME", "/home/someuser")
114
+ result = _validate_extra_mount(f"{real_dir}:$HOME/.uipath:rw")
115
+ assert result == f"{real_dir}:/home/someuser/.uipath:rw"
116
+
117
+ def test_home_expansion_in_destination(self, real_dir, monkeypatch):
118
+ """``~`` in the destination expands the same way the source does."""
119
+ monkeypatch.setenv("HOME", "/home/someuser")
120
+ result = _validate_extra_mount(f"{real_dir}:~/.uipath:ro")
121
+ assert result == f"{real_dir}:/home/someuser/.uipath:ro"
122
+
123
+ def test_unset_var_destination_rejected_with_both_forms(self, real_dir):
124
+ """An unset var is left verbatim, so it must fail loudly."""
125
+ with pytest.raises(ValueError, match="destination must be an absolute path"):
126
+ _validate_extra_mount(f"{real_dir}:$NO_SUCH_VAR_HERE/x:ro")
127
+
128
+ def test_destination_var_expanding_to_reserved_is_rejected(self, real_dir, monkeypatch):
129
+ """The shadow check runs on the expanded destination."""
130
+ monkeypatch.setenv("SNEAKY", "/work")
131
+ with pytest.raises(ValueError, match="shadows a framework-owned mount"):
132
+ _validate_extra_mount(f"{real_dir}:$SNEAKY:ro")
133
+
134
+ def test_destination_var_carrying_a_colon_is_rejected(self, real_dir, monkeypatch):
135
+ """A ':' in an expanded value would add fields to the rebuilt spec."""
136
+ monkeypatch.setenv("SNEAKY", "/mnt/x:rw")
137
+ with pytest.raises(ValueError, match="introduced a ':'"):
138
+ _validate_extra_mount(f"{real_dir}:$SNEAKY:ro")
139
+
140
+ def test_source_var_carrying_a_colon_is_rejected(self, monkeypatch):
141
+ """Same guard on the source side, which is rebuilt the same way."""
142
+ monkeypatch.setenv("SNEAKY", "/mnt/x:rw")
143
+ with pytest.raises(ValueError, match="introduced a ':'"):
144
+ _validate_extra_mount("$SNEAKY:/mnt/y:ro")
145
+
111
146
  def test_malformed_no_colon(self):
112
147
  with pytest.raises(ValueError, match="expected `src:dst"):
113
148
  _validate_extra_mount("just-one-token")