coder-eval 0.12.13__tar.gz → 0.12.14__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 (842) hide show
  1. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/notes/agents.md +9 -2
  2. {coder_eval-0.12.13 → coder_eval-0.12.14}/CHANGELOG.md +9 -0
  3. {coder_eval-0.12.13 → coder_eval-0.12.14}/PKG-INFO +1 -1
  4. {coder_eval-0.12.13 → coder_eval-0.12.14}/action.yml +1 -1
  5. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/TASK_DEFINITION_GUIDE.md +1 -1
  6. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/agents/ANTIGRAVITY.md +1 -1
  7. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/agents/CODEX.md +3 -2
  8. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/agents/HARNESS_PARITY.md +1 -1
  9. {coder_eval-0.12.13 → coder_eval-0.12.14}/plugins/coder-eval/.claude-plugin/plugin.json +1 -1
  10. {coder_eval-0.12.13 → coder_eval-0.12.14}/pyproject.toml +1 -1
  11. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/__init__.py +1 -1
  12. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/agents/codex_agent.py +88 -42
  13. coder_eval-0.12.14/tasks/agents/codex_skills_test.yaml +30 -0
  14. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_codex_agent_unit.py +76 -0
  15. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_docker_runner_mounts.py +1 -1
  16. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_plugin_processing.py +2 -2
  17. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_skill_triggered.py +2 -2
  18. {coder_eval-0.12.13 → coder_eval-0.12.14}/uv.lock +1 -1
  19. coder_eval-0.12.13/tasks/agents/codex_skills_test.yaml +0 -30
  20. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/commands/coder-eval-code-review-full.md +0 -0
  21. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/commands/coder-eval-code-review-wf.md +0 -0
  22. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/commands/coder-eval-code-review.md +0 -0
  23. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/commands/coder-eval-create-plan.md +0 -0
  24. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/commands/coder-eval-implement-plan.md +0 -0
  25. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/commands/coder-eval-review.md +0 -0
  26. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/harness-candidates.md +0 -0
  27. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/notes/README.md +0 -0
  28. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/notes/context-window.md +0 -0
  29. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/notes/contracts.md +0 -0
  30. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/notes/isolation.md +0 -0
  31. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/notes/lint-rules.md +0 -0
  32. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/notes/orchestration.md +0 -0
  33. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/notes/permissions.md +0 -0
  34. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/notes/persistence.md +0 -0
  35. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/notes/reporting.md +0 -0
  36. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/notes/timing.md +0 -0
  37. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/shared/axes.md +0 -0
  38. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/shared/multi-model-review.md +0 -0
  39. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/shared/review-rubric.md +0 -0
  40. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/shared/run-layout.md +0 -0
  41. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/workflows/cr-axis.js +0 -0
  42. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude/workflows/cr-parent.js +0 -0
  43. {coder_eval-0.12.13 → coder_eval-0.12.14}/.claude-plugin/marketplace.json +0 -0
  44. {coder_eval-0.12.13 → coder_eval-0.12.14}/.env.example +0 -0
  45. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/CODEOWNERS +0 -0
  46. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
  47. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  48. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  49. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/actionlint.yaml +0 -0
  50. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/code_review.md +0 -0
  51. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/dependabot.yml +0 -0
  52. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/pages-stub/index.html +0 -0
  53. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/scripts/diagnose_delegate_token_claims.py +0 -0
  54. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/scripts/harbor_e2e.py +0 -0
  55. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/scripts/release_notes.py +0 -0
  56. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/workflows/claude-pr-review.yml +0 -0
  57. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/workflows/codeql.yml +0 -0
  58. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/workflows/conventional-commits.yml +0 -0
  59. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/workflows/docker-publish.yml +0 -0
  60. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/workflows/docs.yml +0 -0
  61. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/workflows/harbor-e2e.yml +0 -0
  62. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/workflows/pr-checks.yml +0 -0
  63. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/workflows/publish-testpypi.yml +0 -0
  64. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/workflows/release.yml +0 -0
  65. {coder_eval-0.12.13 → coder_eval-0.12.14}/.github/workflows/verify-published-action.yml +0 -0
  66. {coder_eval-0.12.13 → coder_eval-0.12.14}/.gitignore +0 -0
  67. {coder_eval-0.12.13 → coder_eval-0.12.14}/.pre-commit-config.yaml +0 -0
  68. {coder_eval-0.12.13 → coder_eval-0.12.14}/.python-version +0 -0
  69. {coder_eval-0.12.13 → coder_eval-0.12.14}/ADOPTERS.md +0 -0
  70. {coder_eval-0.12.13 → coder_eval-0.12.14}/CLAUDE.md +0 -0
  71. {coder_eval-0.12.13 → coder_eval-0.12.14}/CODE_OF_CONDUCT.md +0 -0
  72. {coder_eval-0.12.13 → coder_eval-0.12.14}/CONTRIBUTING.md +0 -0
  73. {coder_eval-0.12.13 → coder_eval-0.12.14}/LICENSE +0 -0
  74. {coder_eval-0.12.13 → coder_eval-0.12.14}/Makefile +0 -0
  75. {coder_eval-0.12.13 → coder_eval-0.12.14}/NOTICE +0 -0
  76. {coder_eval-0.12.13 → coder_eval-0.12.14}/README.md +0 -0
  77. {coder_eval-0.12.13 → coder_eval-0.12.14}/SECURITY.md +0 -0
  78. {coder_eval-0.12.13 → coder_eval-0.12.14}/comparison.md +0 -0
  79. {coder_eval-0.12.13 → coder_eval-0.12.14}/docker/Dockerfile +0 -0
  80. {coder_eval-0.12.13 → coder_eval-0.12.14}/docker/Dockerfile.runtime +0 -0
  81. {coder_eval-0.12.13 → coder_eval-0.12.14}/docker/coder_eval_entrypoint.sh +0 -0
  82. {coder_eval-0.12.13 → coder_eval-0.12.14}/docker/coder_eval_runtime_entrypoint.sh +0 -0
  83. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/AB_EXPERIMENTS.md +0 -0
  84. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/CI_GATE.md +0 -0
  85. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/DATASETS.md +0 -0
  86. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/DIALOG_MODE.md +0 -0
  87. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/DOCKER_ISOLATION.md +0 -0
  88. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/EXTENDING.md +0 -0
  89. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/PLUGIN.md +0 -0
  90. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/REPORT_SCHEMA.md +0 -0
  91. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/USER_GUIDE.md +0 -0
  92. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/agents/CLAUDE_CODE.md +0 -0
  93. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/agents/DELEGATE.md +0 -0
  94. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/agents/OPENCODE.md +0 -0
  95. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/agents/PI.md +0 -0
  96. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/assets/hero.gif +0 -0
  97. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/comparison.md +0 -0
  98. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/index.md +0 -0
  99. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/llms.txt +0 -0
  100. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/tutorials/01-first-evaluation.md +0 -0
  101. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/tutorials/02-ci-pipeline.md +0 -0
  102. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/tutorials/03-evalboard-local.md +0 -0
  103. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/tutorials/04-writing-a-task.md +0 -0
  104. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/tutorials/05-comparing-models.md +0 -0
  105. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/tutorials/06-use-docker-isolation.md +0 -0
  106. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/tutorials/07-plugin-in-claude-code.md +0 -0
  107. {coder_eval-0.12.13 → coder_eval-0.12.14}/docs/tutorials/README.md +0 -0
  108. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/.gitignore +0 -0
  109. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/README.md +0 -0
  110. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_components/__tests__/harness-badge.test.tsx +0 -0
  111. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
  112. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
  113. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_components/__tests__/skeleton.test.tsx +0 -0
  114. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_components/col-help.tsx +0 -0
  115. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_components/collapsible-rail.tsx +0 -0
  116. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_components/harness-badge.tsx +0 -0
  117. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_components/harness-selector.tsx +0 -0
  118. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_components/scroll-table.tsx +0 -0
  119. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_components/search-box.tsx +0 -0
  120. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_components/skeleton.tsx +0 -0
  121. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_components/unit-toggle.tsx +0 -0
  122. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_components/version-list.tsx +0 -0
  123. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_lib/__tests__/source-param.test.ts +0 -0
  124. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_lib/source-param.ts +0 -0
  125. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_overview/__tests__/efficiency-charts.test.tsx +0 -0
  126. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
  127. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
  128. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_overview/daily-chart.tsx +0 -0
  129. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_overview/efficiency-charts.tsx +0 -0
  130. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_overview/harness-legend.tsx +0 -0
  131. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_overview/harness-series.ts +0 -0
  132. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_overview/tag-rail.tsx +0 -0
  133. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
  134. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_overview/wall-clock-chart.tsx +0 -0
  135. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/_overview/window-summary.tsx +0 -0
  136. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/api/download/route.ts +0 -0
  137. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/api/file/route.ts +0 -0
  138. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
  139. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/api/refresh/route.ts +0 -0
  140. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/error.tsx +0 -0
  141. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/globals.css +0 -0
  142. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/icon.png +0 -0
  143. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/layout.tsx +0 -0
  144. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/loading.tsx +0 -0
  145. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/page.tsx +0 -0
  146. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +0 -0
  147. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/path-to-ga/page.tsx +0 -0
  148. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/path-to-ga/task-table.tsx +0 -0
  149. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/scribe/page.tsx +0 -0
  150. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/scribe/run-table.tsx +0 -0
  151. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
  152. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/trends/actions.ts +0 -0
  153. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/trends/page.tsx +0 -0
  154. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/trends/trends-view.tsx +0 -0
  155. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
  156. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/watchlist/page.tsx +0 -0
  157. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
  158. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/next-env.d.ts +0 -0
  159. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/next.config.mjs +0 -0
  160. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/package.json +0 -0
  161. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/pnpm-lock.yaml +0 -0
  162. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/postcss.config.mjs +0 -0
  163. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/public/harness/antigravity.png +0 -0
  164. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/public/harness/claude-code.png +0 -0
  165. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/public/harness/codex.png +0 -0
  166. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/public/harness/pi.png +0 -0
  167. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/public/uipath.png +0 -0
  168. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/tailwind.config.ts +0 -0
  169. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/tsconfig.json +0 -0
  170. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/vitest.config.ts +0 -0
  171. {coder_eval-0.12.13 → coder_eval-0.12.14}/evalboard/vitest.setup.ts +0 -0
  172. {coder_eval-0.12.13 → coder_eval-0.12.14}/experiments/default.yaml +0 -0
  173. {coder_eval-0.12.13 → coder_eval-0.12.14}/experiments/early-stop-ab.yaml +0 -0
  174. {coder_eval-0.12.13 → coder_eval-0.12.14}/experiments/model-comparison.yaml +0 -0
  175. {coder_eval-0.12.13 → coder_eval-0.12.14}/experiments/permissions-smoke.yaml +0 -0
  176. {coder_eval-0.12.13 → coder_eval-0.12.14}/experiments/plugin-comparison.yaml +0 -0
  177. {coder_eval-0.12.13 → coder_eval-0.12.14}/experiments/prompt-mutations-example.yaml +0 -0
  178. {coder_eval-0.12.13 → coder_eval-0.12.14}/experiments/smoke_variants.yaml +0 -0
  179. {coder_eval-0.12.13 → coder_eval-0.12.14}/litellm/README.md +0 -0
  180. {coder_eval-0.12.13 → coder_eval-0.12.14}/litellm/cost_logger.py +0 -0
  181. {coder_eval-0.12.13 → coder_eval-0.12.14}/litellm/litellm-config.yaml +0 -0
  182. {coder_eval-0.12.13 → coder_eval-0.12.14}/litellm/start-litellm.sh +0 -0
  183. {coder_eval-0.12.13 → coder_eval-0.12.14}/mkdocs.yml +0 -0
  184. {coder_eval-0.12.13 → coder_eval-0.12.14}/osv-scanner.toml +0 -0
  185. {coder_eval-0.12.13 → coder_eval-0.12.14}/plugins/coder-eval/README.md +0 -0
  186. {coder_eval-0.12.13 → coder_eval-0.12.14}/plugins/coder-eval/reference/cli-setup.md +0 -0
  187. {coder_eval-0.12.13 → coder_eval-0.12.14}/plugins/coder-eval/reference/criteria.md +0 -0
  188. {coder_eval-0.12.13 → coder_eval-0.12.14}/plugins/coder-eval/reference/repo-layout.md +0 -0
  189. {coder_eval-0.12.13 → coder_eval-0.12.14}/plugins/coder-eval/reference/run-layout.md +0 -0
  190. {coder_eval-0.12.13 → coder_eval-0.12.14}/plugins/coder-eval/reference/task-rubric.md +0 -0
  191. {coder_eval-0.12.13 → coder_eval-0.12.14}/plugins/coder-eval/reference/templates/activation-rows.jsonl +0 -0
  192. {coder_eval-0.12.13 → coder_eval-0.12.14}/plugins/coder-eval/reference/templates/activation.yaml +0 -0
  193. {coder_eval-0.12.13 → coder_eval-0.12.14}/plugins/coder-eval/skills/analyze/SKILL.md +0 -0
  194. {coder_eval-0.12.13 → coder_eval-0.12.14}/plugins/coder-eval/skills/check-skill/SKILL.md +0 -0
  195. {coder_eval-0.12.13 → coder_eval-0.12.14}/plugins/coder-eval/skills/ci/SKILL.md +0 -0
  196. {coder_eval-0.12.13 → coder_eval-0.12.14}/plugins/coder-eval/skills/init/SKILL.md +0 -0
  197. {coder_eval-0.12.13 → coder_eval-0.12.14}/plugins/coder-eval/skills/lint-tasks/SKILL.md +0 -0
  198. {coder_eval-0.12.13 → coder_eval-0.12.14}/plugins/coder-eval/skills/task/SKILL.md +0 -0
  199. {coder_eval-0.12.13 → coder_eval-0.12.14}/scripts/check_commit_msg.sh +0 -0
  200. {coder_eval-0.12.13 → coder_eval-0.12.14}/scripts/timing/corpus/README.md +0 -0
  201. {coder_eval-0.12.13 → coder_eval-0.12.14}/scripts/timing/corpus/antigravity.json +0 -0
  202. {coder_eval-0.12.13 → coder_eval-0.12.14}/scripts/timing/corpus/claude-code.json +0 -0
  203. {coder_eval-0.12.13 → coder_eval-0.12.14}/scripts/timing/corpus/codex.json +0 -0
  204. {coder_eval-0.12.13 → coder_eval-0.12.14}/scripts/timing/corpus/opencode.json +0 -0
  205. {coder_eval-0.12.13 → coder_eval-0.12.14}/scripts/timing/corpus/pi.json +0 -0
  206. {coder_eval-0.12.13 → coder_eval-0.12.14}/scripts/timing/decompose_run.py +0 -0
  207. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/.gitattributes +0 -0
  208. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/agent.py +0 -0
  209. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/agents/__init__.py +0 -0
  210. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/agents/_logging.py +0 -0
  211. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/agents/_skills.py +0 -0
  212. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/agents/antigravity_agent.py +0 -0
  213. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/agents/claude_code_agent.py +0 -0
  214. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/agents/delegate/.gitignore +0 -0
  215. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/agents/delegate/package.json +0 -0
  216. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/agents/delegate_agent.py +0 -0
  217. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/agents/noop_agent.py +0 -0
  218. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/agents/opencode_agent.py +0 -0
  219. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/agents/pi_agent.py +0 -0
  220. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/agents/registry.py +0 -0
  221. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/agents/watchdog.py +0 -0
  222. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/analysis.py +0 -0
  223. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/argv_match.py +0 -0
  224. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/cli/__init__.py +0 -0
  225. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/cli/console.py +0 -0
  226. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/cli/evaluate_command.py +0 -0
  227. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/cli/evaluate_target.py +0 -0
  228. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/cli/execute_command.py +0 -0
  229. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/cli/export_command.py +0 -0
  230. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/cli/harbor_command.py +0 -0
  231. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/cli/plan_command.py +0 -0
  232. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/cli/report_command.py +0 -0
  233. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/cli/run_command.py +0 -0
  234. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/cli/run_helpers.py +0 -0
  235. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/cli/run_task_internal_command.py +0 -0
  236. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/cli/utils.py +0 -0
  237. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/config.py +0 -0
  238. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/__init__.py +0 -0
  239. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
  240. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/agent_judge.py +0 -0
  241. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/base.py +0 -0
  242. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/classification_match.py +0 -0
  243. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/cli_called.py +0 -0
  244. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/command_executed.py +0 -0
  245. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/commands_efficiency.py +0 -0
  246. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/file_check.py +0 -0
  247. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/file_contains.py +0 -0
  248. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/file_exists.py +0 -0
  249. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/file_matches_regex.py +0 -0
  250. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/json_check.py +0 -0
  251. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/llm_judge.py +0 -0
  252. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/reference_comparison.py +0 -0
  253. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/run_command.py +0 -0
  254. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/skill_triggered.py +0 -0
  255. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/system_one_judge.py +0 -0
  256. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/criteria/uipath_eval.py +0 -0
  257. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/durations.py +0 -0
  258. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/errors/__init__.py +0 -0
  259. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/errors/agent.py +0 -0
  260. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/errors/budget.py +0 -0
  261. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/errors/categories.py +0 -0
  262. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/errors/categorization.py +0 -0
  263. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/errors/checker_misuse.py +0 -0
  264. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/errors/executor.py +0 -0
  265. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/errors/judge.py +0 -0
  266. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/errors/reference.py +0 -0
  267. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/errors/retry.py +0 -0
  268. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/errors/timeout.py +0 -0
  269. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/evaluation/__init__.py +0 -0
  270. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/evaluation/checker.py +0 -0
  271. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
  272. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
  273. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/evaluation/judge_context.py +0 -0
  274. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/evaluation/judge_litellm.py +0 -0
  275. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/evaluation/judge_models.py +0 -0
  276. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/evaluation/judge_persistence.py +0 -0
  277. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/evaluation/judge_system_one.py +0 -0
  278. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/evaluation/judge_usage.py +0 -0
  279. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/evaluation/sub_agent.py +0 -0
  280. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/evaluation/summaries.py +0 -0
  281. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/evaluation/system_one_scoring.py +0 -0
  282. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/evaluation/verdict_tool.py +0 -0
  283. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/formatting.py +0 -0
  284. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/fs_permissions.py +0 -0
  285. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/harbor/__init__.py +0 -0
  286. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/harbor/agent.py +0 -0
  287. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/harbor/agent_paths.py +0 -0
  288. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/harbor/atif_emit.py +0 -0
  289. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/harbor/atif_hydrate.py +0 -0
  290. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/harbor/atif_models.py +0 -0
  291. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/harbor/experiment_packager.py +0 -0
  292. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/harbor/packager.py +0 -0
  293. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/harbor/portability.py +0 -0
  294. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/harbor/reward.py +0 -0
  295. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/invocation_log.py +0 -0
  296. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/isolation/__init__.py +0 -0
  297. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/isolation/docker_runner.py +0 -0
  298. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/isolation/eval_material.py +0 -0
  299. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/litellm_cost.py +0 -0
  300. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/logging_config.py +0 -0
  301. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/__init__.py +0 -0
  302. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/agent_config.py +0 -0
  303. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/cli_match.py +0 -0
  304. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/container_context.py +0 -0
  305. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/container_paths.py +0 -0
  306. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/criteria.py +0 -0
  307. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/enums.py +0 -0
  308. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/experiment.py +0 -0
  309. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/judge.py +0 -0
  310. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/judge_defaults.py +0 -0
  311. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/limits.py +0 -0
  312. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/merge_strategy.py +0 -0
  313. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/mutations.py +0 -0
  314. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/results.py +0 -0
  315. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/routing.py +0 -0
  316. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/sandbox.py +0 -0
  317. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/system_one.py +0 -0
  318. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/tasks.py +0 -0
  319. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/telemetry.py +0 -0
  320. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/models/templates.py +0 -0
  321. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/orchestration/__init__.py +0 -0
  322. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/orchestration/batch.py +0 -0
  323. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/orchestration/config.py +0 -0
  324. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/orchestration/config_merge.py +0 -0
  325. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/orchestration/early_stop.py +0 -0
  326. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/orchestration/evaluation.py +0 -0
  327. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/orchestration/experiment.py +0 -0
  328. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/orchestration/overrides.py +0 -0
  329. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/orchestration/regrade.py +0 -0
  330. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/orchestration/run_limits.py +0 -0
  331. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/orchestration/run_summary_rebuild.py +0 -0
  332. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/orchestration/task_loader.py +0 -0
  333. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/orchestrator.py +0 -0
  334. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/path_utils.py +0 -0
  335. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/plugins.py +0 -0
  336. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/pricing.py +0 -0
  337. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/py.typed +0 -0
  338. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/reports/__init__.py +0 -0
  339. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/reports/experiment.py +0 -0
  340. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/reports/helpers.py +0 -0
  341. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/reports/html.py +0 -0
  342. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/reports/junit.py +0 -0
  343. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/reports/markdown.py +0 -0
  344. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/resources/__init__.py +0 -0
  345. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
  346. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/resources/tags.yaml +0 -0
  347. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/result_metrics.py +0 -0
  348. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/run_record.py +0 -0
  349. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/sandbox.py +0 -0
  350. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/scoring/__init__.py +0 -0
  351. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/scoring/ast_similarity.py +0 -0
  352. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/scoring/complexity.py +0 -0
  353. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/scoring/quality.py +0 -0
  354. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/scoring/signature_similarity.py +0 -0
  355. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/scoring/similarity.py +0 -0
  356. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/scoring/token_similarity.py +0 -0
  357. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/simulation/__init__.py +0 -0
  358. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/simulation/termination.py +0 -0
  359. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/simulation/user_simulator.py +0 -0
  360. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/simulation/utterance.py +0 -0
  361. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/stats.py +0 -0
  362. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/streaming/__init__.py +0 -0
  363. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/streaming/callbacks.py +0 -0
  364. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/streaming/collector.py +0 -0
  365. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/streaming/events.py +0 -0
  366. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/streaming/renderers.py +0 -0
  367. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/streaming/wire.py +0 -0
  368. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/telemetry.py +0 -0
  369. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/timing.py +0 -0
  370. {coder_eval-0.12.13 → coder_eval-0.12.14}/src/coder_eval/utils.py +0 -0
  371. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/README.md +0 -0
  372. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/agentless_smoke_test.yaml +0 -0
  373. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/agents/antigravity_hello_world.yaml +0 -0
  374. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
  375. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/agents/claude_hello_world.yaml +0 -0
  376. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/agents/claude_hello_world_docker.yaml +0 -0
  377. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
  378. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/agents/claude_subagent_test.yaml +0 -0
  379. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
  380. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/agents/codex_hello_world.yaml +0 -0
  381. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/agents/codex_parallel_commands.yaml +0 -0
  382. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
  383. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/agents/codex_string_utils.yaml +0 -0
  384. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/agents/codex_subagent_test.yaml +0 -0
  385. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/agents/subagent_bash_long_input.yaml +0 -0
  386. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/agents/subagent_merge_sort.yaml +0 -0
  387. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/anti_cheat_reference/anti_cheat_reference.yaml +0 -0
  388. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/anti_cheat_reference/reference/solution.py +0 -0
  389. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/byod_smoke_test.yaml +0 -0
  390. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/dataset_example.yaml +0 -0
  391. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/datasets/sentiment.jsonl +0 -0
  392. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/delegate/fizzbuzz_delegate.yaml +0 -0
  393. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/delegate/hello_date_delegate.yaml +0 -0
  394. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
  395. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
  396. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
  397. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/dockerfile_build_example/environment/input.txt +0 -0
  398. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
  399. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
  400. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/early_stop_decision_budget_exceeded.yaml +0 -0
  401. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/early_stop_weighted_high_weight_kills_run.yaml +0 -0
  402. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/early_stop_weighted_low_weight_absorbed.yaml +0 -0
  403. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/fibonacci_with_template.yaml +0 -0
  404. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/hello_date.yaml +0 -0
  405. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/inline_starter_example.yaml +0 -0
  406. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/internal/session_resumption.yaml +0 -0
  407. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/mock_path_dirs_smoke.yaml +0 -0
  408. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
  409. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
  410. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
  411. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
  412. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
  413. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/opencode_smoke_test.yaml +0 -0
  414. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/pi_smoke_test.yaml +0 -0
  415. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
  416. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/record_cli_responses.yaml +0 -0
  417. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/run_limits/max_turns_cap.yaml +0 -0
  418. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/run_limits/turn_timeout.yaml +0 -0
  419. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
  420. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
  421. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
  422. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
  423. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
  424. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
  425. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/samples/skillsbench/README.md +0 -0
  426. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
  427. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
  428. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
  429. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
  430. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
  431. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
  432. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
  433. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
  434. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
  435. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
  436. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/sentiment_classification.yaml +0 -0
  437. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/smoke_agent_judge.yaml +0 -0
  438. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/smoke_budget_exceeded.yaml +0 -0
  439. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
  440. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/smoke_llm_judge.yaml +0 -0
  441. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/smoke_negative_path.yaml +0 -0
  442. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/smoke_system_one_judge.yaml +0 -0
  443. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/smoke_task_timeout.yaml +0 -0
  444. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/smoke_variants.yaml +0 -0
  445. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/test_sandbox.yaml +0 -0
  446. {coder_eval-0.12.13 → coder_eval-0.12.14}/tasks/token_check.yaml +0 -0
  447. {coder_eval-0.12.13 → coder_eval-0.12.14}/templates/byod_smoke_test/Dockerfile +0 -0
  448. {coder_eval-0.12.13 → coder_eval-0.12.14}/templates/fibonacci-starter/README.md +0 -0
  449. {coder_eval-0.12.13 → coder_eval-0.12.14}/templates/fibonacci-starter/src/main.py +0 -0
  450. {coder_eval-0.12.13 → coder_eval-0.12.14}/templates/fibonacci-starter/tests/test_main.py +0 -0
  451. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/__init__.py +0 -0
  452. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_bracket_clock.py +0 -0
  453. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_container_contract.py +0 -0
  454. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/__init__.py +0 -0
  455. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/__init__.py +0 -0
  456. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/_scrub.py +0 -0
  457. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/antigravity_fixtures.py +0 -0
  458. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
  459. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
  460. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/delegate_fixtures.py +0 -0
  461. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/antigravity_a_single_text_turn.json +0 -0
  462. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/antigravity_b_tool_call_resolved.json +0 -0
  463. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/antigravity_c_thinking_and_tool_same_generation.json +0 -0
  464. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/antigravity_d_orphaned_tool.json +0 -0
  465. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/antigravity_e_multi_generation.json +0 -0
  466. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
  467. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
  468. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
  469. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
  470. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
  471. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
  472. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
  473. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
  474. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
  475. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
  476. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
  477. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +0 -0
  478. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
  479. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +0 -0
  480. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
  481. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
  482. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
  483. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
  484. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/delegate_a_tool_call.json +0 -0
  485. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/delegate_b_max_turns_cut.json +0 -0
  486. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/delegate_c_error_frame_crash.json +0 -0
  487. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/delegate_d_orphaned_tool.json +0 -0
  488. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/delegate_e_tool_only_call_crosses_cap.json +0 -0
  489. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/delegate_f_batched_tools_in_sequence.json +0 -0
  490. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/opencode_a_single_text_turn.json +0 -0
  491. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/opencode_b_tool_call_resolved.json +0 -0
  492. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/opencode_c_multi_step_tiling.json +0 -0
  493. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/opencode_d_orphaned_tool.json +0 -0
  494. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/opencode_e_error_after_generation.json +0 -0
  495. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/pi_a_single_text_turn.json +0 -0
  496. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/pi_b_tool_call_resolved.json +0 -0
  497. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/pi_c_multi_turn_tiling.json +0 -0
  498. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/pi_d_orphaned_tool.json +0 -0
  499. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/pi_e_error_after_generation.json +0 -0
  500. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/pi_f_duplicate_turn_end.json +0 -0
  501. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/opencode_fixtures.py +0 -0
  502. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/pi_fixtures.py +0 -0
  503. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/expected/environment/Dockerfile +0 -0
  504. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/expected/environment/docker-compose.yaml +0 -0
  505. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/expected/environment/task.yaml +0 -0
  506. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/expected/instruction.md +0 -0
  507. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/expected/task.toml +0 -0
  508. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/expected/tests/reference/greeting.txt +0 -0
  509. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/expected/tests/task.yaml +0 -0
  510. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/expected/tests/test.sh +0 -0
  511. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/source_task/environment/Dockerfile +0 -0
  512. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/source_task/reference/greeting.txt +0 -0
  513. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/source_task/task.yaml +0 -0
  514. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/live_criteria.py +0 -0
  515. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/report_snapshots/__init__.py +0 -0
  516. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
  517. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
  518. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
  519. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
  520. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/report_snapshots/run_full.md +0 -0
  521. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
  522. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_fixtures/timing_union_cases.json +0 -0
  523. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/_path_helpers.py +0 -0
  524. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/conftest.py +0 -0
  525. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/fixtures/__init__.py +0 -0
  526. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/fixtures/atif/known_good_trajectory.json +0 -0
  527. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
  528. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
  529. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/fixtures/mock_agent.py +0 -0
  530. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/fixtures/pi_happy_stream.jsonl +0 -0
  531. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
  532. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
  533. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
  534. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/fixtures/text_stub_agent.py +0 -0
  535. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/harbor_e2e/fixtures/docker_baseline.yaml +0 -0
  536. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/harbor_e2e/fixtures/llm_judge.yaml +0 -0
  537. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/harbor_e2e/fixtures/template_sources.yaml +0 -0
  538. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/harbor_e2e/fixtures/trajectory_criteria.yaml +0 -0
  539. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/__init__.py +0 -0
  540. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/action_docs.py +0 -0
  541. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/agent_roster_parity.py +0 -0
  542. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/dead_config_fields.py +0 -0
  543. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/doc_env_parity.py +0 -0
  544. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/doc_examples.py +0 -0
  545. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/doc_indexes.py +0 -0
  546. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/doc_schema_parity.py +0 -0
  547. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/generated.py +0 -0
  548. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/live_verdict_contract.py +0 -0
  549. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/plugin_manifest_parity.py +0 -0
  550. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/plugin_reference.py +0 -0
  551. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/pricing_mirror.py +0 -0
  552. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/prose_budget.py +0 -0
  553. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/pyright_config.py +0 -0
  554. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/__init__.py +0 -0
  555. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/_layers.py +0 -0
  556. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/_model_ctor.py +0 -0
  557. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/base.py +0 -0
  558. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
  559. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
  560. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
  561. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
  562. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
  563. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
  564. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
  565. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
  566. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
  567. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
  568. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
  569. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce037_no_dead_private_helper.py +0 -0
  570. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce038_acquire_inside_try.py +0 -0
  571. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce039_config_error_escalates.py +0 -0
  572. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce043_no_command_output_truncation.py +0 -0
  573. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce046_env_info_spreads_super.py +0 -0
  574. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce048_no_in_process_typer_command_call.py +0 -0
  575. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce049_no_score_or_zero.py +0 -0
  576. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce050_no_union_getattr_probe.py +0 -0
  577. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce051_no_driver_override.py +0 -0
  578. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce052_process_lethal_must_be_container_gated.py +0 -0
  579. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce053_run_record_filename_literal.py +0 -0
  580. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce054_env_info_key_round_trip.py +0 -0
  581. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce056_no_container_env_literal.py +0 -0
  582. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce057_sidecar_shim_stdlib_only.py +0 -0
  583. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce058_no_timing_literal.py +0 -0
  584. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce059_generation_window_is_two_reads.py +0 -0
  585. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce060_message_id_declared.py +0 -0
  586. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce061_window_via_close_window.py +0 -0
  587. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce063_no_busy_ms_in_agents.py +0 -0
  588. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce064_turn_bracket_on_the_clock.py +0 -0
  589. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/ce066_no_report_imports_in_core.py +0 -0
  590. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/no_agent_timing_access.py +0 -0
  591. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
  592. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
  593. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/no_silent_except.py +0 -0
  594. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/no_submodule_model_imports.py +0 -0
  595. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
  596. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
  597. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
  598. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/open_explicit_encoding.py +0 -0
  599. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
  600. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/register_criterion_required.py +0 -0
  601. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
  602. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
  603. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/runner.py +0 -0
  604. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/violation.py +0 -0
  605. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/lint/workflow_outputs.py +0 -0
  606. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_action_inputs.py +0 -0
  607. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_action_version_pin.py +0 -0
  608. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_agent.py +0 -0
  609. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_agent_config_no_timing_fields.py +0 -0
  610. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_agent_config_optional_type.py +0 -0
  611. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_agent_config_registry_dispatch.py +0 -0
  612. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_agent_config_sdk_decoupling.py +0 -0
  613. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_agent_context_window.py +0 -0
  614. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_agent_golden_master.py +0 -0
  615. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_agent_judge_criterion.py +0 -0
  616. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_agent_telemetry.py +0 -0
  617. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_agent_telemetry_advanced.py +0 -0
  618. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_agent_timeout.py +0 -0
  619. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_agentless.py +0 -0
  620. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_antigravity_agent.py +0 -0
  621. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_atif_emit.py +0 -0
  622. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_atif_hydrate.py +0 -0
  623. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_atif_models.py +0 -0
  624. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_byoa_plugin.py +0 -0
  625. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_byoa_plugin_live.py +0 -0
  626. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_byod_feature.py +0 -0
  627. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_check_all_async.py +0 -0
  628. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_checker_logging.py +0 -0
  629. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_classification_match.py +0 -0
  630. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_claude_settings_enforcement_live.py +0 -0
  631. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_cleanup_preservation_guard.py +0 -0
  632. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_cli_backend_flag.py +0 -0
  633. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_cli_called_criterion.py +0 -0
  634. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_cli_empty_glob.py +0 -0
  635. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_cli_match_parity.py +0 -0
  636. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_cli_sdk_options.py +0 -0
  637. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_cli_set_overrides.py +0 -0
  638. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_cli_telemetry.py +0 -0
  639. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_cli_type_flag.py +0 -0
  640. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_code_review_bugs.py +0 -0
  641. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_codex_agent.py +0 -0
  642. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_codex_agent_live.py +0 -0
  643. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_codex_token_mapping.py +0 -0
  644. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_command_executed.py +0 -0
  645. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_command_statistics.py +0 -0
  646. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_command_telemetry_result_data.py +0 -0
  647. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_commands_efficiency.py +0 -0
  648. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_config_lineage.py +0 -0
  649. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_config_merge_engine.py +0 -0
  650. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_config_precedence.py +0 -0
  651. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_container_context.py +0 -0
  652. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_continuous_scoring.py +0 -0
  653. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_cost_accounting_paths.py +0 -0
  654. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_criterion_result_round_trip.py +0 -0
  655. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_custom_lint.py +0 -0
  656. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_dataset_expansion.py +0 -0
  657. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_debug_logging.py +0 -0
  658. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_delegate_agent.py +0 -0
  659. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_delegate_agent_config.py +0 -0
  660. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_delegate_agent_live.py +0 -0
  661. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_delegate_agent_registration.py +0 -0
  662. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_detached_grading_boundaries.py +0 -0
  663. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_detached_grading_guards.py +0 -0
  664. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_docker_build_failure.py +0 -0
  665. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_docker_litellm_env.py +0 -0
  666. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_docker_runner_container_death.py +0 -0
  667. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_docker_runner_stream_limit.py +0 -0
  668. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_docker_wildcard_env.py +0 -0
  669. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_docker_workdir_live.py +0 -0
  670. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_driver_resolver.py +0 -0
  671. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_durations.py +0 -0
  672. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_early_stop.py +0 -0
  673. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_error_handling.py +0 -0
  674. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_eval_material.py +0 -0
  675. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_evaluate_command.py +0 -0
  676. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_evaluate_format_harbor.py +0 -0
  677. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_evaluate_target.py +0 -0
  678. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_evaluator.py +0 -0
  679. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_event_collector.py +0 -0
  680. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_execute_command.py +0 -0
  681. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_execute_evaluate_loop.py +0 -0
  682. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_execute_format_harbor.py +0 -0
  683. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_experiment_cli.py +0 -0
  684. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_experiment_loader.py +0 -0
  685. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_experiment_models.py +0 -0
  686. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_experiment_reports.py +0 -0
  687. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_experiment_resolver.py +0 -0
  688. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_experiment_runner.py +0 -0
  689. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_file_check.py +0 -0
  690. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_file_contains_scoring.py +0 -0
  691. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_formatting.py +0 -0
  692. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_git_clone_failure.py +0 -0
  693. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_glob_paths_in_file_criteria.py +0 -0
  694. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_harbor_agent.py +0 -0
  695. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_harbor_e2e_fixtures.py +0 -0
  696. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_harbor_experiment_packager.py +0 -0
  697. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_harbor_export_golden.py +0 -0
  698. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_harbor_packager.py +0 -0
  699. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_harbor_portability.py +0 -0
  700. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_harbor_reward.py +0 -0
  701. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_heartbeat_watchdog.py +0 -0
  702. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_ignore_patterns_negation.py +0 -0
  703. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_image_from_dockerfiles.py +0 -0
  704. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_image_skew_refusal.py +0 -0
  705. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_integration.py +0 -0
  706. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_json_check.py +0 -0
  707. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_judge_anthropic.py +0 -0
  708. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_judge_bedrock.py +0 -0
  709. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_judge_burn_in_live.py +0 -0
  710. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_judge_context_builder.py +0 -0
  711. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_judge_litellm.py +0 -0
  712. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_judge_models.py +0 -0
  713. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_judge_persistence.py +0 -0
  714. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_judge_system_one.py +0 -0
  715. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_lint_no_top_level_run_limits.py +0 -0
  716. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_lint_runner.py +0 -0
  717. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_litellm_config.py +0 -0
  718. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_litellm_cost.py +0 -0
  719. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_litellm_cost_logger.py +0 -0
  720. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_litellm_judge_live.py +0 -0
  721. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_litellm_route.py +0 -0
  722. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_llm_judge_criterion.py +0 -0
  723. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_log_tail_buffer.py +0 -0
  724. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_logging.py +0 -0
  725. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_logging_isolation.py +0 -0
  726. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_merge_characterization.py +0 -0
  727. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_merge_strategy_annotations.py +0 -0
  728. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_merge_unification.py +0 -0
  729. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_models.py +0 -0
  730. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_mutations.py +0 -0
  731. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_new_criteria.py +0 -0
  732. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_node_env_config.py +0 -0
  733. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_opencode_agent.py +0 -0
  734. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_optional_dependencies.py +0 -0
  735. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_orchestrator.py +0 -0
  736. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_orchestrator_error_log_tail.py +0 -0
  737. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_orchestrator_telemetry.py +0 -0
  738. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_overrides_engine.py +0 -0
  739. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_parallel.py +0 -0
  740. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_path_utils.py +0 -0
  741. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_pi_agent.py +0 -0
  742. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_pi_agent_config.py +0 -0
  743. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_pi_smoke_task.py +0 -0
  744. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_plan_command.py +0 -0
  745. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_plugins.py +0 -0
  746. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_post_run.py +0 -0
  747. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_pr_review_workflow.py +0 -0
  748. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_pre_run.py +0 -0
  749. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_preservation_mode.py +0 -0
  750. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_pricing_mirror.py +0 -0
  751. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_pricing_registry.py +0 -0
  752. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_prose_budget.py +0 -0
  753. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_prose_budget_commands.py +0 -0
  754. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_reference_comparison_scoring.py +0 -0
  755. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_reference_evaluator.py +0 -0
  756. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_reference_missing_file.py +0 -0
  757. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_reference_models.py +0 -0
  758. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_reference_permissions.py +0 -0
  759. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_registry.py +0 -0
  760. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_regrade.py +0 -0
  761. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_release_notes.py +0 -0
  762. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_replicate_stats.py +0 -0
  763. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_report_command.py +0 -0
  764. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_reports.py +0 -0
  765. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_reports_html.py +0 -0
  766. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_reports_junit.py +0 -0
  767. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_reports_package.py +0 -0
  768. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_resolve_task_files.py +0 -0
  769. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_result_metrics.py +0 -0
  770. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_resume.py +0 -0
  771. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_retry_logic_comprehensive.py +0 -0
  772. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_route_seam_exhaustiveness.py +0 -0
  773. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_routing.py +0 -0
  774. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_run_command_junit.py +0 -0
  775. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_run_command_stdout.py +0 -0
  776. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_run_helpers.py +0 -0
  777. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_run_limits_models.py +0 -0
  778. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_run_limits_orchestrator.py +0 -0
  779. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_run_limits_resolver.py +0 -0
  780. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_run_metrics.py +0 -0
  781. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_run_record.py +0 -0
  782. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_run_summary_rebuild.py +0 -0
  783. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_run_task_internal.py +0 -0
  784. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_runtime_tool_versions.py +0 -0
  785. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_sandbox.py +0 -0
  786. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_sandbox_adopt.py +0 -0
  787. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_sandbox_layer_builder.py +0 -0
  788. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_sandbox_optional.py +0 -0
  789. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_sandbox_record_cli.py +0 -0
  790. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_sandbox_security.py +0 -0
  791. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_sandbox_symlink_preservation.py +0 -0
  792. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_sandbox_templates.py +0 -0
  793. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_sandbox_venv_live.py +0 -0
  794. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_scorers.py +0 -0
  795. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_scoring_quality.py +0 -0
  796. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_sdk_option_classification.py +0 -0
  797. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_seed_from_prior_result.py +0 -0
  798. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_simulation_config.py +0 -0
  799. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_simulation_integration.py +0 -0
  800. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_simulation_termination.py +0 -0
  801. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_simulation_trials.py +0 -0
  802. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_stats.py +0 -0
  803. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_stats_nonfinite.py +0 -0
  804. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_streaming_agent_integration.py +0 -0
  805. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_streaming_batch.py +0 -0
  806. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_streaming_callbacks.py +0 -0
  807. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_streaming_cli.py +0 -0
  808. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_streaming_events.py +0 -0
  809. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_streaming_orchestrator.py +0 -0
  810. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_streaming_renderers.py +0 -0
  811. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_streaming_wire.py +0 -0
  812. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_sub_agent_runner.py +0 -0
  813. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_success_criterion_union.py +0 -0
  814. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_suite_rollup.py +0 -0
  815. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_summaries.py +0 -0
  816. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_system_one_judge.py +0 -0
  817. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_system_one_judge_live.py +0 -0
  818. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_tags.py +0 -0
  819. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_task_definition_unknown_fields.py +0 -0
  820. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_teardown_interrupt.py +0 -0
  821. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_telemetry.py +0 -0
  822. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_template_env_expansion.py +0 -0
  823. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_threshold_enforcement.py +0 -0
  824. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_timeout_batch.py +0 -0
  825. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_timeout_categorization.py +0 -0
  826. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_timeout_exceptions.py +0 -0
  827. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_timeout_models.py +0 -0
  828. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_timeout_orchestrator.py +0 -0
  829. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_timing_close_window.py +0 -0
  830. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_timing_identity_contract.py +0 -0
  831. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_timing_union_parity.py +0 -0
  832. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_token_usage.py +0 -0
  833. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_uipath_eval.py +0 -0
  834. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_ungraded_reporting.py +0 -0
  835. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_user_simulator.py +0 -0
  836. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_utils.py +0 -0
  837. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_utterance_extraction.py +0 -0
  838. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_variant_prompt_file.py +0 -0
  839. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_verdict_tool.py +0 -0
  840. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_verify_published_workflow.py +0 -0
  841. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_watchdog.py +0 -0
  842. {coder_eval-0.12.13 → coder_eval-0.12.14}/tests/test_yaml_migration.py +0 -0
@@ -717,8 +717,15 @@ being hardcoded, so a plugin that relocates its skills keeps working.
717
717
  skips external *plugins*, not configured skill paths. An inherited value is appended to
718
718
  rather than clobbered, since the host may legitimately configure OpenCode the same way.
719
719
  - **Pi** passes each as `--skill <dir>`.
720
- - **Codex** symlinks (or copies, on Windows) each skill dir into `.agents/skills/`, which
721
- the CLI auto-discovers from the working directory upward.
720
+ - **Codex** copies each skill dir into `.agents/skills/`, which the CLI auto-discovers from
721
+ the working directory upward. Copies, not symlinks, for two reasons that compound. Codex
722
+ resolves a symlinked skill to its source, finds the plugin manifest there and lists the
723
+ skill as `<plugin>:<skill>`; models sometimes turn that into the nonexistent path
724
+ `.agents/skills/<plugin>/<skill>/SKILL.md`. The search that follows (`rg --files`,
725
+ `find`) skips symlinks and returns nothing, so the agent works without the skill. The
726
+ copies are made before each turn and removed after it, the same concern that kept
727
+ OpenCode out of the sandbox: criteria and run artifacts must see only what the agent
728
+ left. Skill dirs the workspace already has are never touched.
722
729
  - **Antigravity** takes search paths natively via `skills_paths` — but those only drive
723
730
  DISCOVERY. The file-tool allowlist is `workspaces` alone, so the skill roots must appear
724
731
  there too, or the agent discovers a skill and every read of its `SKILL.md` is denied as
@@ -2,6 +2,15 @@
2
2
 
3
3
  <!-- version list -->
4
4
 
5
+ ## v0.12.14 (2026-10-15)
6
+
7
+ ### Bug Fixes
8
+
9
+ - **codex**: Copy skills into .agents/skills instead of symlinking
10
+ ([#225](https://github.com/UiPath/coder_eval/pull/225),
11
+ [`1895a2c`](https://github.com/UiPath/coder_eval/commit/1895a2cfb0c2f0d8a171b2e445b0b034440209b2))
12
+
13
+
5
14
  ## v0.12.13 (2026-10-13)
6
15
 
7
16
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: coder-eval
3
- Version: 0.12.13
3
+ Version: 0.12.14
4
4
  Summary: Evaluate, benchmark, and A/B-test AI coding agents (Claude Code, Codex, Gemini/Antigravity, OpenCode, Pi, Delegate) 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
@@ -25,7 +25,7 @@ inputs:
25
25
  version:
26
26
  description: coder-eval version to install from PyPI, or "local" to install from the action checkout
27
27
  required: false
28
- default: "0.12.13" # <-- kept in sync with releases by release.yml
28
+ default: "0.12.14" # <-- kept in sync with releases by release.yml
29
29
  extras:
30
30
  description: >-
31
31
  Comma-separated coder-eval extras (`codex`, `antigravity,litellm`), composed
@@ -1345,7 +1345,7 @@ Like `skill_triggered`, this criterion emits a `ClassificationCriterionResult`,
1345
1345
 
1346
1346
  ### `skill_triggered`
1347
1347
 
1348
- Binary classifier: **did the agent engage the target skill during the run?** Agent-agnostic — scans the run's `turn_records` for either signal: Claude's explicit `Skill` tool call whose `skill` parameter matches `skill_name` (namespace prefixes like `plugin:skill` are stripped, so `skill_name: uipath-agents` matches `Skill(skill="uipath-coded-agents:uipath-agents")`), or — for an agent with no `Skill` tool, e.g. Codex — a command that reads the skill's files off disk (a parameter contains `skills/<skill_name>/`, matching both the repo path and the `.agents/skills/` symlink).
1348
+ Binary classifier: **did the agent engage the target skill during the run?** Agent-agnostic — scans the run's `turn_records` for either signal: Claude's explicit `Skill` tool call whose `skill` parameter matches `skill_name` (namespace prefixes like `plugin:skill` are stripped, so `skill_name: uipath-agents` matches `Skill(skill="uipath-coded-agents:uipath-agents")`), or — for an agent with no `Skill` tool, e.g. Codex — a command that reads the skill's files off disk (a parameter contains `skills/<skill_name>/`, matching both the repo path and the `.agents/skills/` copy).
1349
1349
 
1350
1350
  Observed label is `"yes"` when either signal is found, else `"no"`. Expected label is `"yes"` iff `expected_skill == skill_name`. **Binary scoring:** `1.0` when observed matches expected, else `0.0`.
1351
1351
 
@@ -127,7 +127,7 @@ Antigravity supports [Agent Skills](https://agentskills.io/specification)
127
127
  2. the runtime plugin directory passed to `start()`.
128
128
 
129
129
  For each source, the harness is handed whichever of `<source>/skills` or `<source>`
130
- directly contains subdirectories with a `SKILL.md`. Unlike Codex — which symlinks
130
+ directly contains subdirectories with a `SKILL.md`. Unlike Codex — which copies
131
131
  skills into `.agents/skills/` — Antigravity is given the search-path roots directly
132
132
  via the SDK's `skills_paths`, and those roots are also added to the harness
133
133
  `workspaces` allowlist (otherwise the agent would find a skill but be denied the
@@ -115,7 +115,7 @@ CodexAgent supports SKILL.md files following the [Agent Skills open standard](ht
115
115
  1. **config.plugins** - Local plugins with `type: local` and `path` pointing to a skills directory
116
116
  2. **plugin_tools_dir** parameter - Runtime plugin directory passed to `start()`
117
117
 
118
- Skills are symlinked (or copied) to `.agents/skills/` where the Codex CLI auto-discovers them. Environment variables in plugin paths (`$VAR`, `${VAR}`) are expanded at runtime.
118
+ Skills are copied to `.agents/skills/` for each turn, where the Codex CLI auto-discovers them, and removed when the turn ends. Environment variables in plugin paths (`$VAR`, `${VAR}`) are expanded at runtime.
119
119
 
120
120
  Example with environment variable:
121
121
  ```yaml
@@ -206,8 +206,9 @@ The agent sets up SKILL.md files (Agent Skills open standard) in `.agents/skills
206
206
  1. Scans `config.plugins` for local plugins with `path` field
207
207
  2. Checks `plugin_tools_dir` parameter passed to `start()`
208
208
  3. Expands environment variables in paths (`$PLUGIN_PATH`, `${PLUGIN_PATH}`)
209
- 4. Symlinks skill directories (falls back to copying if symlink fails)
209
+ 4. Copies each skill directory into `.agents/skills/` before every turn (real files, not symlinks), skipping any skill dir the workspace already has
210
210
  5. Codex CLI auto-discovers skills in `.agents/skills/`
211
+ 6. Removes the copies when the turn ends, so criteria and run artifacts never see them
211
212
 
212
213
  ### Async Integration
213
214
 
@@ -684,7 +684,7 @@ This field breaks it silently.
684
684
  claude-code hands the value to the SDK as a *plugin directory*, and a plugin's skills
685
685
  live at `<plugin>/skills/<name>/SKILL.md`. Point it at the directory that directly
686
686
  parents the skill directories and no skill loads. Codex
687
- (`codex_agent._setup_skills`) and Antigravity (`antigravity_agent._resolve_skills_paths`)
687
+ (`codex_agent._collect_skills`) and Antigravity (`antigravity_agent._resolve_skills_paths`)
688
688
  both scan **both** layouts and take whichever actually holds a `<skill>/SKILL.md`.
689
689
 
690
690
  † Pi uses the shared `_plugin_skill_dirs` resolver, whose bare-dir fallback resolves a
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "coder-eval",
4
4
  "displayName": "Coder Eval",
5
- "version": "0.12.13",
5
+ "version": "0.12.14",
6
6
  "description": "Test whether your Claude Code skills actually trigger, and benchmark any coding agent — author, run, and analyze the eval suite that proves it, locally or as a CI gate.",
7
7
  "author": { "name": "UiPath", "email": "coder-eval@uipath.com", "url": "https://github.com/UiPath/coder_eval" },
8
8
  "homepage": "https://coder-eval.com",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "coder-eval"
3
- version = "0.12.13"
3
+ version = "0.12.14"
4
4
  description = "Evaluate, benchmark, and A/B-test AI coding agents (Claude Code, Codex, Gemini/Antigravity, OpenCode, Pi, Delegate) 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.12.13"
3
+ __version__ = "0.12.14"
@@ -854,6 +854,9 @@ class CodexAgent(Agent[CodexAgentConfig]):
854
854
  self.working_directory: Path | None = None
855
855
  self._env_path_prepend: list[str] = []
856
856
  self._login_shell_home: Path | None = None
857
+ self._skill_dirs: list[Path] = []
858
+ self._skill_copies: list[Path] = []
859
+ self._skill_parent_dirs: list[Path] = []
857
860
  # _state / _iteration / _iteration_was_incremented / pending_turn lifecycle
858
861
  # bookkeeping lives on the Agent base class (shared defaults + helpers).
859
862
  self._log = PrefixedAdapter(logger, {"prefix": instance_name})
@@ -909,8 +912,7 @@ class CodexAgent(Agent[CodexAgentConfig]):
909
912
  "CodexAgent: login_api_key failed — agent will fall back to env-based auth: %s", exc
910
913
  )
911
914
 
912
- # Set up skills from plugin_tools_dir or plugins config
913
- self._setup_skills(plugin_tools_dir)
915
+ self._collect_skills(plugin_tools_dir)
914
916
 
915
917
  # Log permission and tool configuration
916
918
  self._log_config_enforcement()
@@ -954,6 +956,27 @@ class CodexAgent(Agent[CodexAgentConfig]):
954
956
  if not self.working_directory or not self.codex_client:
955
957
  raise RuntimeError("Agent not started. Call start() first.")
956
958
 
959
+ self._install_skills()
960
+ try:
961
+ return await self._communicate_turn(
962
+ user_input,
963
+ stream_callback=stream_callback,
964
+ timeout=timeout,
965
+ max_turns=max_turns,
966
+ should_stop=should_stop,
967
+ )
968
+ finally:
969
+ self._remove_skills()
970
+
971
+ async def _communicate_turn(
972
+ self,
973
+ user_input: str,
974
+ *,
975
+ stream_callback: StreamCallback | None,
976
+ timeout: float | None,
977
+ max_turns: int | None,
978
+ should_stop: Callable[[], bool] | None,
979
+ ) -> TurnRecord:
957
980
  assert self.config.type is not None, "CodexAgent requires AgentConfig.type to be set before communicate()"
958
981
 
959
982
  # Reset the pending slot + bump the iteration counter (shared lifecycle).
@@ -1092,6 +1115,7 @@ class CodexAgent(Agent[CodexAgentConfig]):
1092
1115
  self._thread_usage_baseline = _ThreadTotals()
1093
1116
  self._active_turn_handle = None
1094
1117
  self._cleanup_login_shell_home()
1118
+ self._remove_skills()
1095
1119
  self._mark_stopped()
1096
1120
 
1097
1121
  async def kill(self) -> None:
@@ -1108,6 +1132,7 @@ class CodexAgent(Agent[CodexAgentConfig]):
1108
1132
  self._interrupt_active_turn()
1109
1133
  self._close_client()
1110
1134
  self._cleanup_login_shell_home()
1135
+ self._remove_skills()
1111
1136
 
1112
1137
  def _interrupt_active_turn(self) -> None:
1113
1138
  """Interrupt the in-flight Codex turn, if any (best-effort, idempotent)."""
@@ -1147,17 +1172,16 @@ class CodexAgent(Agent[CodexAgentConfig]):
1147
1172
  "codex_model_is_deployment": True,
1148
1173
  }
1149
1174
 
1150
- def _setup_skills(self, plugin_tools_dir: str | None) -> None:
1151
- """Set up .agents/skills directory from plugins or plugin_tools_dir.
1175
+ def _collect_skills(self, plugin_tools_dir: str | None) -> None:
1176
+ """Resolve the skill dirs that :meth:`_install_skills` copies in for each turn.
1152
1177
 
1153
- Codex auto-discovers skills in ``.agents/skills/``, scanned from the working
1154
- directory up to the repo root, so each source's skill dirs are symlinked
1155
- (or copied, on Windows) into it.
1178
+ A source may hold skill dirs directly or be a plugin root whose skills live
1179
+ one level deeper; both layouts are scanned, and the first source to provide
1180
+ a skill name wins.
1156
1181
 
1157
1182
  Rationale: .claude/notes/agents.md § Skills, per harness
1158
1183
  """
1159
- if not self.working_directory:
1160
- return
1184
+ self._skill_dirs = []
1161
1185
 
1162
1186
  skills_sources: list[Path] = []
1163
1187
 
@@ -1179,7 +1203,7 @@ class CodexAgent(Agent[CodexAgentConfig]):
1179
1203
  hint = "env var likely unset" if "$" in expanded_path else "path does not exist"
1180
1204
  self._log.warning(
1181
1205
  f"Plugin skills path did not resolve: {path_str!r} "
1182
- + f"→ {expanded_path!r} ({hint}); no skills linked from it"
1206
+ + f"→ {expanded_path!r} ({hint}); no skills taken from it"
1183
1207
  )
1184
1208
 
1185
1209
  # Also check plugin_tools_dir parameter
@@ -1192,53 +1216,75 @@ class CodexAgent(Agent[CodexAgentConfig]):
1192
1216
  if not skills_sources:
1193
1217
  return
1194
1218
 
1195
- # Create .agents/skills directory (Codex auto-discovery location)
1196
- agents_skills_dir = self.working_directory / ".agents" / "skills"
1197
1219
  try:
1198
- agents_skills_dir.mkdir(parents=True, exist_ok=True)
1199
-
1200
- # A source may hold skill dirs directly or be a plugin root whose
1201
- # skills live one level deeper. Scan both layouts.
1202
1220
  for skills_source in skills_sources:
1203
1221
  scan_dirs = [skills_source]
1204
1222
  nested = skills_source / "skills"
1205
1223
  if nested.is_dir():
1206
1224
  scan_dirs.append(nested)
1207
-
1208
1225
  for scan_dir in scan_dirs:
1209
1226
  for skill_dir in scan_dir.iterdir():
1210
1227
  if not (skill_dir.is_dir() and (skill_dir / "SKILL.md").exists()):
1211
1228
  continue
1212
- target = agents_skills_dir / skill_dir.name
1213
- if target.exists():
1214
- # Skip if already exists (first source wins)
1215
- continue
1229
+ if all(d.name != skill_dir.name for d in self._skill_dirs):
1230
+ self._skill_dirs.append(skill_dir)
1231
+ except OSError as e:
1232
+ self._log.warning(f"Failed to scan skills: {e}")
1216
1233
 
1217
- try:
1218
- # Try to create a symlink for efficiency
1219
- target.symlink_to(skill_dir)
1220
- self._log.debug(f"Linked skill: {skill_dir.name}")
1221
- except (OSError, NotImplementedError):
1222
- # Fall back to copying if symlink fails (Windows compatibility)
1223
- shutil.copytree(skill_dir, target, dirs_exist_ok=True)
1224
- self._log.debug(f"Copied skill: {skill_dir.name}")
1225
-
1226
- linked = list(agents_skills_dir.iterdir())
1227
- if linked:
1228
- self._log.debug(f"Linked {len(linked)} skill(s) into {agents_skills_dir}")
1229
- else:
1230
- # Sources existed but held no SKILL.md, so codex runs with no
1231
- # skill context at all.
1232
- self._log.warning(
1233
- f"0 skills linked into {agents_skills_dir} despite "
1234
- + f"{len(skills_sources)} plugin source(s): "
1235
- + f"{[str(s) for s in skills_sources]}; "
1236
- + "check the plugin path points at a skills repo root"
1237
- )
1234
+ if self._skill_dirs:
1235
+ self._log.debug(f"Found {len(self._skill_dirs)} skill(s): {[d.name for d in self._skill_dirs]}")
1236
+ else:
1237
+ # Sources existed but held no SKILL.md, so codex runs with no
1238
+ # skill context at all.
1239
+ self._log.warning(
1240
+ f"0 skills found in {len(skills_sources)} plugin source(s): "
1241
+ + f"{[str(s) for s in skills_sources]}; "
1242
+ + "check the plugin path points at a skills repo root"
1243
+ )
1238
1244
 
1245
+ def _install_skills(self) -> None:
1246
+ """Copy the collected skills into ``.agents/skills/``, where Codex auto-discovers them.
1247
+
1248
+ Real copies, not symlinks. Codex resolves a symlinked skill to its source,
1249
+ finds the plugin manifest there and lists it as ``<plugin>:<skill>``, which
1250
+ models turn into a nonexistent ``<plugin>/<skill>/`` path; ``rg --files`` and
1251
+ ``find`` then skip the symlinks, so the search that follows finds nothing. A
1252
+ skill dir already in the workspace is left alone and never removed.
1253
+
1254
+ Rationale: .claude/notes/agents.md § Skills, per harness
1255
+ """
1256
+ if not (self.working_directory and self._skill_dirs):
1257
+ return
1258
+ agents_skills_dir = self.working_directory / ".agents" / "skills"
1259
+ try:
1260
+ for parent in (agents_skills_dir.parent, agents_skills_dir):
1261
+ if not parent.exists():
1262
+ parent.mkdir()
1263
+ self._skill_parent_dirs.append(parent)
1264
+ for skill_dir in self._skill_dirs:
1265
+ target = agents_skills_dir / skill_dir.name
1266
+ if target.exists() or target.is_symlink():
1267
+ continue
1268
+ self._skill_copies.append(target)
1269
+ shutil.copytree(skill_dir, target, symlinks=True)
1270
+ self._log.debug(f"Copied {len(self._skill_copies)} skill(s) into {agents_skills_dir}")
1239
1271
  except Exception as e:
1240
1272
  self._log.warning(f"Failed to set up skills: {e}")
1241
1273
 
1274
+ def _remove_skills(self) -> None:
1275
+ """Remove what :meth:`_install_skills` created (best-effort, idempotent).
1276
+
1277
+ Runs at the end of every turn, so criteria and run artifacts see the workspace
1278
+ the agent left, not the skill copies.
1279
+ """
1280
+ copies, self._skill_copies = self._skill_copies, []
1281
+ parents, self._skill_parent_dirs = self._skill_parent_dirs, []
1282
+ for copy in copies:
1283
+ shutil.rmtree(copy, ignore_errors=True)
1284
+ for parent in reversed(parents):
1285
+ with contextlib.suppress(OSError):
1286
+ parent.rmdir()
1287
+
1242
1288
  @staticmethod
1243
1289
  def _resolve_base_url() -> str | None:
1244
1290
  """Custom Codex endpoint base URL from CODEX_BASE_URL, or None."""
@@ -0,0 +1,30 @@
1
+ task_id: codex_skills_test
2
+ description: Test that CodexAgent installs SKILL.md files for the turn and removes them before grading
3
+
4
+ tags:
5
+ - codex
6
+ - streaming
7
+ - skills
8
+
9
+ agent:
10
+ type: codex
11
+ model: gpt-5.5
12
+ permission_mode: acceptEdits
13
+ plugins:
14
+ - type: local
15
+ path: "$PLUGIN_PATH"
16
+
17
+ initial_prompt: |
18
+ Run `find .agents/skills -name SKILL.md | wc -l` and write the number it prints, and
19
+ nothing else, to skill_count.txt.
20
+
21
+ success_criteria:
22
+ - type: run_command
23
+ description: find should see at least one SKILL.md under .agents/skills
24
+ command: grep -Eq '^[[:space:]]*[1-9][0-9]*[[:space:]]*$' skill_count.txt
25
+ expected_exit_code: 0
26
+
27
+ - type: run_command
28
+ description: The skill copies are gone by grading time
29
+ command: test ! -e .agents
30
+ expected_exit_code: 0
@@ -14,8 +14,10 @@ module's ``importorskip("openai_codex")``.
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
+ import os
17
18
  import time
18
19
  from datetime import datetime
20
+ from pathlib import Path
19
21
  from types import SimpleNamespace
20
22
 
21
23
  import pytest
@@ -272,3 +274,77 @@ class TestExecutionBoundsFromSdkStamps:
272
274
  # tool_use block; deriving it from the flush time would be a guess.
273
275
  tel = self._build(factory(), root_type, started_ms=_EPOCH_MS, completed_ms=_EPOCH_MS + 1)
274
276
  assert tel.generation_completed_at is None
277
+
278
+
279
+ def _skills_repo(root: Path, *names: str) -> Path:
280
+ for name in names:
281
+ (root / "skills" / name / "references").mkdir(parents=True)
282
+ (root / "skills" / name / "SKILL.md").write_text("---\nname: x\n---\n", encoding="utf-8")
283
+ (root / "skills" / name / "references" / "guide.md").write_text("ref\n", encoding="utf-8")
284
+ return root
285
+
286
+
287
+ class TestSkillCopies:
288
+ """Skills reach ``.agents/skills/`` as real files for each turn, and leave with it."""
289
+
290
+ @staticmethod
291
+ def _agent(tmp_path: Path, *names: str) -> CodexAgent:
292
+ plugin = _skills_repo(tmp_path / "plugin", *names)
293
+ agent = CodexAgent(
294
+ parse_agent_config(type=AgentKind.CODEX, model="gpt-5.5", plugins=[{"type": "local", "path": str(plugin)}])
295
+ )
296
+ agent.working_directory = tmp_path / "work"
297
+ agent.working_directory.mkdir()
298
+ agent._collect_skills(None)
299
+ return agent
300
+
301
+ def test_a_walk_that_skips_symlinks_still_lists_the_skill(self, tmp_path):
302
+ # os.walk without followlinks sees what `rg --files` and `find` see.
303
+ agent = self._agent(tmp_path, "uipath-planner")
304
+ agent._install_skills()
305
+ skills_root = agent.working_directory / ".agents" / "skills"
306
+ found = sorted(
307
+ (Path(d) / f).relative_to(skills_root).as_posix() for d, _, files in os.walk(skills_root) for f in files
308
+ )
309
+ assert found == ["uipath-planner/SKILL.md", "uipath-planner/references/guide.md"]
310
+
311
+ def test_remove_restores_the_workspace(self, tmp_path):
312
+ agent = self._agent(tmp_path, "uipath-planner")
313
+ agent._install_skills()
314
+ agent._remove_skills()
315
+ assert list(agent.working_directory.iterdir()) == []
316
+
317
+ def test_workspace_skill_dirs_and_agent_files_survive(self, tmp_path):
318
+ agent = self._agent(tmp_path, "uipath-planner", "uipath-rpa")
319
+ own = agent.working_directory / ".agents" / "skills" / "uipath-rpa"
320
+ own.mkdir(parents=True)
321
+ (own / "SKILL.md").write_text("task-provided\n", encoding="utf-8")
322
+ agent._install_skills()
323
+ (agent.working_directory / ".agents" / "notes.md").write_text("agent output\n", encoding="utf-8")
324
+ agent._remove_skills()
325
+ assert (own / "SKILL.md").read_text(encoding="utf-8") == "task-provided\n"
326
+ assert (agent.working_directory / ".agents" / "notes.md").is_file()
327
+ assert not (agent.working_directory / ".agents" / "skills" / "uipath-planner").exists()
328
+
329
+ @pytest.mark.parametrize("turn_raises", [False, True])
330
+ async def test_skills_exist_only_during_each_turn(self, tmp_path, monkeypatch, turn_raises):
331
+ agent = self._agent(tmp_path, "uipath-planner")
332
+ agent.codex_client = object()
333
+ skill_md = agent.working_directory / ".agents" / "skills" / "uipath-planner" / "SKILL.md"
334
+ seen: list[bool] = []
335
+
336
+ async def fake_turn(user_input, **_):
337
+ seen.append(skill_md.is_file())
338
+ if turn_raises:
339
+ raise RuntimeError("turn failed")
340
+ return "record"
341
+
342
+ monkeypatch.setattr(agent, "_communicate_turn", fake_turn)
343
+ for _ in range(2):
344
+ if turn_raises:
345
+ with pytest.raises(RuntimeError):
346
+ await agent.communicate("go")
347
+ else:
348
+ assert await agent.communicate("go") == "record"
349
+ assert not (agent.working_directory / ".agents").exists()
350
+ assert seen == [True, True]
@@ -801,7 +801,7 @@ class TestAutoMountAllowlistMask:
801
801
  assert f"{CONTAINER_PLUGINS_DIR}/0/.claude-plugin" not in tmpfs
802
802
 
803
803
  def test_tmpfs_targets_are_under_mounted_container_root(self, tmp_path: Path):
804
- # Codex symlinks / Antigravity search paths dereference the container path
804
+ # Codex skill copies / Antigravity search paths read from the container path
805
805
  # the staged task.yaml names, so the mask must sit under that path.
806
806
  root = self._plugin_root(tmp_path / "plugin")
807
807
  (root / "skills" / "demo").mkdir(parents=True)
@@ -113,9 +113,9 @@ class TestPluginRootWarning:
113
113
  scores 0 and the suite reports recall 0.0, indistinguishable from a skill that
114
114
  never triggers. That shipped in six documentation surfaces before anyone noticed.
115
115
 
116
- Codex (`codex_agent._setup_skills`) and Antigravity
116
+ Codex (`codex_agent._collect_skills`) and Antigravity
117
117
  (`antigravity_agent._resolve_skills_paths`) accept BOTH depths and already log
118
- when they link zero skills. claude-code — the one harness where the wrong depth is
118
+ when they find zero skills. claude-code — the one harness where the wrong depth is
119
119
  fatal — was the only one that stayed silent, and a repo-scoped lint rule cannot
120
120
  reach the user repos where `/coder-eval:check-skill` writes these suites.
121
121
  """
@@ -325,7 +325,7 @@ class TestSkillTriggeredCodex:
325
325
 
326
326
  The detectable signal is a command whose recorded text references the skill's
327
327
  directory, ``skills/<skill_name>/`` (present in both the repo path and the
328
- ``.agents/skills/`` symlink).
328
+ ``.agents/skills/`` copy).
329
329
  """
330
330
 
331
331
  def _sed(self, path: str) -> CommandTelemetry:
@@ -347,7 +347,7 @@ class TestSkillTriggeredCodex:
347
347
  )
348
348
  assert result.score == 1.0 and result.observed_label == "yes"
349
349
 
350
- def test_codex_reads_skill_md_agents_symlink_tp(self) -> None:
350
+ def test_codex_reads_skill_md_agents_copy_tp(self) -> None:
351
351
  result = _check(
352
352
  expected_skill="uipath-agents",
353
353
  skill_name="uipath-agents",
@@ -513,7 +513,7 @@ wheels = [
513
513
 
514
514
  [[package]]
515
515
  name = "coder-eval"
516
- version = "0.12.13"
516
+ version = "0.12.14"
517
517
  source = { editable = "." }
518
518
  dependencies = [
519
519
  { name = "anthropic" },
@@ -1,30 +0,0 @@
1
- task_id: codex_skills_test
2
- description: Test that CodexAgent properly sets up and discovers SKILL.md files
3
-
4
- tags:
5
- - codex
6
- - streaming
7
- - skills
8
-
9
- agent:
10
- type: codex
11
- model: gpt-5.5
12
- permission_mode: acceptEdits
13
- plugins:
14
- - type: local
15
- path: "$PLUGIN_PATH"
16
-
17
- initial_prompt: |
18
- List all available skills in your environment by checking the .agents/skills directory.
19
- Count how many SKILL.md files are available.
20
-
21
- success_criteria:
22
- - type: run_command
23
- description: .agents/skills directory should exist
24
- command: test -d .agents/skills
25
- expected_exit_code: 0
26
-
27
- - type: run_command
28
- description: Should have at least one SKILL.md file
29
- command: find .agents/skills -name "SKILL.md" | wc -l | grep -v "^0$"
30
- expected_exit_code: 0
File without changes