coder-eval 0.12.12__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.12 → coder_eval-0.12.14}/.claude/notes/README.md +1 -0
  2. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/notes/agents.md +42 -8
  3. coder_eval-0.12.14/.claude/notes/context-window.md +170 -0
  4. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/notes/lint-rules.md +1 -1
  5. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/notes/timing.md +6 -1
  6. {coder_eval-0.12.12 → coder_eval-0.12.14}/CHANGELOG.md +68 -0
  7. {coder_eval-0.12.12 → coder_eval-0.12.14}/PKG-INFO +1 -1
  8. {coder_eval-0.12.12 → coder_eval-0.12.14}/action.yml +1 -1
  9. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/AB_EXPERIMENTS.md +23 -0
  10. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/EXTENDING.md +16 -0
  11. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/TASK_DEFINITION_GUIDE.md +9 -1
  12. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/agents/ANTIGRAVITY.md +1 -1
  13. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/agents/CLAUDE_CODE.md +5 -2
  14. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/agents/CODEX.md +10 -2
  15. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/agents/DELEGATE.md +2 -2
  16. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/agents/HARNESS_PARITY.md +50 -16
  17. {coder_eval-0.12.12 → coder_eval-0.12.14}/plugins/coder-eval/.claude-plugin/plugin.json +1 -1
  18. {coder_eval-0.12.12 → coder_eval-0.12.14}/pyproject.toml +1 -1
  19. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/__init__.py +1 -1
  20. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/agents/claude_code_agent.py +104 -10
  21. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/agents/codex_agent.py +92 -42
  22. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/agents/delegate_agent.py +88 -42
  23. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/agent_config.py +82 -0
  24. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/pricing.py +6 -2
  25. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/reports/experiment.py +6 -2
  26. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/reports/html.py +4 -1
  27. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/reports/markdown.py +23 -2
  28. coder_eval-0.12.14/tasks/agents/codex_skills_test.yaml +30 -0
  29. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_bracket_clock.py +2 -2
  30. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/delegate_fixtures.py +49 -2
  31. coder_eval-0.12.14/tests/_fixtures/golden_streams/expected/delegate_e_tool_only_call_crosses_cap.json +112 -0
  32. coder_eval-0.12.14/tests/_fixtures/golden_streams/expected/delegate_f_batched_tools_in_sequence.json +150 -0
  33. coder_eval-0.12.14/tests/test_agent_context_window.py +152 -0
  34. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_codex_agent_unit.py +76 -0
  35. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_delegate_agent.py +139 -9
  36. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_delegate_agent_live.py +20 -0
  37. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_docker_runner_mounts.py +1 -1
  38. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_plugin_processing.py +2 -2
  39. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_skill_triggered.py +2 -2
  40. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_timing_identity_contract.py +12 -13
  41. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_token_usage.py +135 -0
  42. {coder_eval-0.12.12 → coder_eval-0.12.14}/uv.lock +1 -1
  43. coder_eval-0.12.12/tasks/agents/codex_skills_test.yaml +0 -30
  44. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/commands/coder-eval-code-review-full.md +0 -0
  45. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/commands/coder-eval-code-review-wf.md +0 -0
  46. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/commands/coder-eval-code-review.md +0 -0
  47. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/commands/coder-eval-create-plan.md +0 -0
  48. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/commands/coder-eval-implement-plan.md +0 -0
  49. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/commands/coder-eval-review.md +0 -0
  50. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/harness-candidates.md +0 -0
  51. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/notes/contracts.md +0 -0
  52. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/notes/isolation.md +0 -0
  53. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/notes/orchestration.md +0 -0
  54. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/notes/permissions.md +0 -0
  55. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/notes/persistence.md +0 -0
  56. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/notes/reporting.md +0 -0
  57. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/shared/axes.md +0 -0
  58. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/shared/multi-model-review.md +0 -0
  59. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/shared/review-rubric.md +0 -0
  60. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/shared/run-layout.md +0 -0
  61. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/workflows/cr-axis.js +0 -0
  62. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude/workflows/cr-parent.js +0 -0
  63. {coder_eval-0.12.12 → coder_eval-0.12.14}/.claude-plugin/marketplace.json +0 -0
  64. {coder_eval-0.12.12 → coder_eval-0.12.14}/.env.example +0 -0
  65. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/CODEOWNERS +0 -0
  66. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/ISSUE_TEMPLATE/adopter.yml +0 -0
  67. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  68. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  69. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/actionlint.yaml +0 -0
  70. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/code_review.md +0 -0
  71. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/dependabot.yml +0 -0
  72. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/pages-stub/index.html +0 -0
  73. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/scripts/diagnose_delegate_token_claims.py +0 -0
  74. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/scripts/harbor_e2e.py +0 -0
  75. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/scripts/release_notes.py +0 -0
  76. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/workflows/claude-pr-review.yml +0 -0
  77. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/workflows/codeql.yml +0 -0
  78. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/workflows/conventional-commits.yml +0 -0
  79. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/workflows/docker-publish.yml +0 -0
  80. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/workflows/docs.yml +0 -0
  81. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/workflows/harbor-e2e.yml +0 -0
  82. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/workflows/pr-checks.yml +0 -0
  83. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/workflows/publish-testpypi.yml +0 -0
  84. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/workflows/release.yml +0 -0
  85. {coder_eval-0.12.12 → coder_eval-0.12.14}/.github/workflows/verify-published-action.yml +0 -0
  86. {coder_eval-0.12.12 → coder_eval-0.12.14}/.gitignore +0 -0
  87. {coder_eval-0.12.12 → coder_eval-0.12.14}/.pre-commit-config.yaml +0 -0
  88. {coder_eval-0.12.12 → coder_eval-0.12.14}/.python-version +0 -0
  89. {coder_eval-0.12.12 → coder_eval-0.12.14}/ADOPTERS.md +0 -0
  90. {coder_eval-0.12.12 → coder_eval-0.12.14}/CLAUDE.md +0 -0
  91. {coder_eval-0.12.12 → coder_eval-0.12.14}/CODE_OF_CONDUCT.md +0 -0
  92. {coder_eval-0.12.12 → coder_eval-0.12.14}/CONTRIBUTING.md +0 -0
  93. {coder_eval-0.12.12 → coder_eval-0.12.14}/LICENSE +0 -0
  94. {coder_eval-0.12.12 → coder_eval-0.12.14}/Makefile +0 -0
  95. {coder_eval-0.12.12 → coder_eval-0.12.14}/NOTICE +0 -0
  96. {coder_eval-0.12.12 → coder_eval-0.12.14}/README.md +0 -0
  97. {coder_eval-0.12.12 → coder_eval-0.12.14}/SECURITY.md +0 -0
  98. {coder_eval-0.12.12 → coder_eval-0.12.14}/comparison.md +0 -0
  99. {coder_eval-0.12.12 → coder_eval-0.12.14}/docker/Dockerfile +0 -0
  100. {coder_eval-0.12.12 → coder_eval-0.12.14}/docker/Dockerfile.runtime +0 -0
  101. {coder_eval-0.12.12 → coder_eval-0.12.14}/docker/coder_eval_entrypoint.sh +0 -0
  102. {coder_eval-0.12.12 → coder_eval-0.12.14}/docker/coder_eval_runtime_entrypoint.sh +0 -0
  103. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/CI_GATE.md +0 -0
  104. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/DATASETS.md +0 -0
  105. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/DIALOG_MODE.md +0 -0
  106. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/DOCKER_ISOLATION.md +0 -0
  107. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/PLUGIN.md +0 -0
  108. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/REPORT_SCHEMA.md +0 -0
  109. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/USER_GUIDE.md +0 -0
  110. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/agents/OPENCODE.md +0 -0
  111. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/agents/PI.md +0 -0
  112. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/assets/hero.gif +0 -0
  113. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/comparison.md +0 -0
  114. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/index.md +0 -0
  115. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/llms.txt +0 -0
  116. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/tutorials/01-first-evaluation.md +0 -0
  117. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/tutorials/02-ci-pipeline.md +0 -0
  118. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/tutorials/03-evalboard-local.md +0 -0
  119. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/tutorials/04-writing-a-task.md +0 -0
  120. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/tutorials/05-comparing-models.md +0 -0
  121. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/tutorials/06-use-docker-isolation.md +0 -0
  122. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/tutorials/07-plugin-in-claude-code.md +0 -0
  123. {coder_eval-0.12.12 → coder_eval-0.12.14}/docs/tutorials/README.md +0 -0
  124. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/.gitignore +0 -0
  125. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/README.md +0 -0
  126. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_components/__tests__/harness-badge.test.tsx +0 -0
  127. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_components/__tests__/harness-selector.test.tsx +0 -0
  128. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_components/__tests__/search-box.test.tsx +0 -0
  129. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_components/__tests__/skeleton.test.tsx +0 -0
  130. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_components/col-help.tsx +0 -0
  131. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_components/collapsible-rail.tsx +0 -0
  132. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_components/harness-badge.tsx +0 -0
  133. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_components/harness-selector.tsx +0 -0
  134. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_components/scroll-table.tsx +0 -0
  135. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_components/search-box.tsx +0 -0
  136. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_components/skeleton.tsx +0 -0
  137. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_components/unit-toggle.tsx +0 -0
  138. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_components/version-list.tsx +0 -0
  139. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_lib/__tests__/source-param.test.ts +0 -0
  140. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_lib/source-param.ts +0 -0
  141. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_overview/__tests__/efficiency-charts.test.tsx +0 -0
  142. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_overview/__tests__/harness-legend.test.tsx +0 -0
  143. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_overview/__tests__/harness-series.test.ts +0 -0
  144. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_overview/daily-chart.tsx +0 -0
  145. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_overview/efficiency-charts.tsx +0 -0
  146. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_overview/harness-legend.tsx +0 -0
  147. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_overview/harness-series.ts +0 -0
  148. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_overview/tag-rail.tsx +0 -0
  149. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_overview/turn-budget-chart.tsx +0 -0
  150. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_overview/wall-clock-chart.tsx +0 -0
  151. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/_overview/window-summary.tsx +0 -0
  152. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/api/download/route.ts +0 -0
  153. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/api/file/route.ts +0 -0
  154. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/api/refresh/__tests__/route.test.ts +0 -0
  155. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/api/refresh/route.ts +0 -0
  156. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/error.tsx +0 -0
  157. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/globals.css +0 -0
  158. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/icon.png +0 -0
  159. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/layout.tsx +0 -0
  160. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/loading.tsx +0 -0
  161. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/page.tsx +0 -0
  162. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/path-to-ga/__tests__/task-table.test.tsx +0 -0
  163. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/path-to-ga/page.tsx +0 -0
  164. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/path-to-ga/task-table.tsx +0 -0
  165. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/scribe/page.tsx +0 -0
  166. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/scribe/run-table.tsx +0 -0
  167. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/trends/__tests__/trends-view.test.tsx +0 -0
  168. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/trends/actions.ts +0 -0
  169. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/trends/page.tsx +0 -0
  170. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/trends/trends-view.tsx +0 -0
  171. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/watchlist/__tests__/watchlist-view.test.tsx +0 -0
  172. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/watchlist/page.tsx +0 -0
  173. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/app/watchlist/watchlist-view.tsx +0 -0
  174. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/next-env.d.ts +0 -0
  175. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/next.config.mjs +0 -0
  176. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/package.json +0 -0
  177. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/pnpm-lock.yaml +0 -0
  178. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/postcss.config.mjs +0 -0
  179. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/public/harness/antigravity.png +0 -0
  180. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/public/harness/claude-code.png +0 -0
  181. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/public/harness/codex.png +0 -0
  182. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/public/harness/pi.png +0 -0
  183. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/public/uipath.png +0 -0
  184. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/tailwind.config.ts +0 -0
  185. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/tsconfig.json +0 -0
  186. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/vitest.config.ts +0 -0
  187. {coder_eval-0.12.12 → coder_eval-0.12.14}/evalboard/vitest.setup.ts +0 -0
  188. {coder_eval-0.12.12 → coder_eval-0.12.14}/experiments/default.yaml +0 -0
  189. {coder_eval-0.12.12 → coder_eval-0.12.14}/experiments/early-stop-ab.yaml +0 -0
  190. {coder_eval-0.12.12 → coder_eval-0.12.14}/experiments/model-comparison.yaml +0 -0
  191. {coder_eval-0.12.12 → coder_eval-0.12.14}/experiments/permissions-smoke.yaml +0 -0
  192. {coder_eval-0.12.12 → coder_eval-0.12.14}/experiments/plugin-comparison.yaml +0 -0
  193. {coder_eval-0.12.12 → coder_eval-0.12.14}/experiments/prompt-mutations-example.yaml +0 -0
  194. {coder_eval-0.12.12 → coder_eval-0.12.14}/experiments/smoke_variants.yaml +0 -0
  195. {coder_eval-0.12.12 → coder_eval-0.12.14}/litellm/README.md +0 -0
  196. {coder_eval-0.12.12 → coder_eval-0.12.14}/litellm/cost_logger.py +0 -0
  197. {coder_eval-0.12.12 → coder_eval-0.12.14}/litellm/litellm-config.yaml +0 -0
  198. {coder_eval-0.12.12 → coder_eval-0.12.14}/litellm/start-litellm.sh +0 -0
  199. {coder_eval-0.12.12 → coder_eval-0.12.14}/mkdocs.yml +0 -0
  200. {coder_eval-0.12.12 → coder_eval-0.12.14}/osv-scanner.toml +0 -0
  201. {coder_eval-0.12.12 → coder_eval-0.12.14}/plugins/coder-eval/README.md +0 -0
  202. {coder_eval-0.12.12 → coder_eval-0.12.14}/plugins/coder-eval/reference/cli-setup.md +0 -0
  203. {coder_eval-0.12.12 → coder_eval-0.12.14}/plugins/coder-eval/reference/criteria.md +0 -0
  204. {coder_eval-0.12.12 → coder_eval-0.12.14}/plugins/coder-eval/reference/repo-layout.md +0 -0
  205. {coder_eval-0.12.12 → coder_eval-0.12.14}/plugins/coder-eval/reference/run-layout.md +0 -0
  206. {coder_eval-0.12.12 → coder_eval-0.12.14}/plugins/coder-eval/reference/task-rubric.md +0 -0
  207. {coder_eval-0.12.12 → coder_eval-0.12.14}/plugins/coder-eval/reference/templates/activation-rows.jsonl +0 -0
  208. {coder_eval-0.12.12 → coder_eval-0.12.14}/plugins/coder-eval/reference/templates/activation.yaml +0 -0
  209. {coder_eval-0.12.12 → coder_eval-0.12.14}/plugins/coder-eval/skills/analyze/SKILL.md +0 -0
  210. {coder_eval-0.12.12 → coder_eval-0.12.14}/plugins/coder-eval/skills/check-skill/SKILL.md +0 -0
  211. {coder_eval-0.12.12 → coder_eval-0.12.14}/plugins/coder-eval/skills/ci/SKILL.md +0 -0
  212. {coder_eval-0.12.12 → coder_eval-0.12.14}/plugins/coder-eval/skills/init/SKILL.md +0 -0
  213. {coder_eval-0.12.12 → coder_eval-0.12.14}/plugins/coder-eval/skills/lint-tasks/SKILL.md +0 -0
  214. {coder_eval-0.12.12 → coder_eval-0.12.14}/plugins/coder-eval/skills/task/SKILL.md +0 -0
  215. {coder_eval-0.12.12 → coder_eval-0.12.14}/scripts/check_commit_msg.sh +0 -0
  216. {coder_eval-0.12.12 → coder_eval-0.12.14}/scripts/timing/corpus/README.md +0 -0
  217. {coder_eval-0.12.12 → coder_eval-0.12.14}/scripts/timing/corpus/antigravity.json +0 -0
  218. {coder_eval-0.12.12 → coder_eval-0.12.14}/scripts/timing/corpus/claude-code.json +0 -0
  219. {coder_eval-0.12.12 → coder_eval-0.12.14}/scripts/timing/corpus/codex.json +0 -0
  220. {coder_eval-0.12.12 → coder_eval-0.12.14}/scripts/timing/corpus/opencode.json +0 -0
  221. {coder_eval-0.12.12 → coder_eval-0.12.14}/scripts/timing/corpus/pi.json +0 -0
  222. {coder_eval-0.12.12 → coder_eval-0.12.14}/scripts/timing/decompose_run.py +0 -0
  223. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/.gitattributes +0 -0
  224. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/agent.py +0 -0
  225. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/agents/__init__.py +0 -0
  226. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/agents/_logging.py +0 -0
  227. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/agents/_skills.py +0 -0
  228. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/agents/antigravity_agent.py +0 -0
  229. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/agents/delegate/.gitignore +0 -0
  230. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/agents/delegate/package.json +0 -0
  231. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/agents/noop_agent.py +0 -0
  232. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/agents/opencode_agent.py +0 -0
  233. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/agents/pi_agent.py +0 -0
  234. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/agents/registry.py +0 -0
  235. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/agents/watchdog.py +0 -0
  236. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/analysis.py +0 -0
  237. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/argv_match.py +0 -0
  238. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/cli/__init__.py +0 -0
  239. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/cli/console.py +0 -0
  240. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/cli/evaluate_command.py +0 -0
  241. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/cli/evaluate_target.py +0 -0
  242. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/cli/execute_command.py +0 -0
  243. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/cli/export_command.py +0 -0
  244. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/cli/harbor_command.py +0 -0
  245. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/cli/plan_command.py +0 -0
  246. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/cli/report_command.py +0 -0
  247. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/cli/run_command.py +0 -0
  248. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/cli/run_helpers.py +0 -0
  249. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/cli/run_task_internal_command.py +0 -0
  250. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/cli/utils.py +0 -0
  251. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/config.py +0 -0
  252. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/__init__.py +0 -0
  253. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/_classification_aggregate.py +0 -0
  254. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/agent_judge.py +0 -0
  255. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/base.py +0 -0
  256. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/classification_match.py +0 -0
  257. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/cli_called.py +0 -0
  258. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/command_executed.py +0 -0
  259. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/commands_efficiency.py +0 -0
  260. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/file_check.py +0 -0
  261. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/file_contains.py +0 -0
  262. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/file_exists.py +0 -0
  263. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/file_matches_regex.py +0 -0
  264. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/json_check.py +0 -0
  265. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/llm_judge.py +0 -0
  266. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/reference_comparison.py +0 -0
  267. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/run_command.py +0 -0
  268. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/skill_triggered.py +0 -0
  269. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/system_one_judge.py +0 -0
  270. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/criteria/uipath_eval.py +0 -0
  271. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/durations.py +0 -0
  272. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/errors/__init__.py +0 -0
  273. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/errors/agent.py +0 -0
  274. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/errors/budget.py +0 -0
  275. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/errors/categories.py +0 -0
  276. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/errors/categorization.py +0 -0
  277. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/errors/checker_misuse.py +0 -0
  278. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/errors/executor.py +0 -0
  279. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/errors/judge.py +0 -0
  280. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/errors/reference.py +0 -0
  281. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/errors/retry.py +0 -0
  282. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/errors/timeout.py +0 -0
  283. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/evaluation/__init__.py +0 -0
  284. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/evaluation/checker.py +0 -0
  285. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/evaluation/judge_anthropic.py +0 -0
  286. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/evaluation/judge_bedrock.py +0 -0
  287. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/evaluation/judge_context.py +0 -0
  288. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/evaluation/judge_litellm.py +0 -0
  289. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/evaluation/judge_models.py +0 -0
  290. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/evaluation/judge_persistence.py +0 -0
  291. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/evaluation/judge_system_one.py +0 -0
  292. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/evaluation/judge_usage.py +0 -0
  293. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/evaluation/sub_agent.py +0 -0
  294. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/evaluation/summaries.py +0 -0
  295. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/evaluation/system_one_scoring.py +0 -0
  296. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/evaluation/verdict_tool.py +0 -0
  297. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/formatting.py +0 -0
  298. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/fs_permissions.py +0 -0
  299. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/harbor/__init__.py +0 -0
  300. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/harbor/agent.py +0 -0
  301. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/harbor/agent_paths.py +0 -0
  302. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/harbor/atif_emit.py +0 -0
  303. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/harbor/atif_hydrate.py +0 -0
  304. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/harbor/atif_models.py +0 -0
  305. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/harbor/experiment_packager.py +0 -0
  306. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/harbor/packager.py +0 -0
  307. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/harbor/portability.py +0 -0
  308. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/harbor/reward.py +0 -0
  309. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/invocation_log.py +0 -0
  310. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/isolation/__init__.py +0 -0
  311. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/isolation/docker_runner.py +0 -0
  312. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/isolation/eval_material.py +0 -0
  313. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/litellm_cost.py +0 -0
  314. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/logging_config.py +0 -0
  315. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/__init__.py +0 -0
  316. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/cli_match.py +0 -0
  317. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/container_context.py +0 -0
  318. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/container_paths.py +0 -0
  319. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/criteria.py +0 -0
  320. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/enums.py +0 -0
  321. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/experiment.py +0 -0
  322. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/judge.py +0 -0
  323. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/judge_defaults.py +0 -0
  324. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/limits.py +0 -0
  325. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/merge_strategy.py +0 -0
  326. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/mutations.py +0 -0
  327. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/results.py +0 -0
  328. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/routing.py +0 -0
  329. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/sandbox.py +0 -0
  330. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/system_one.py +0 -0
  331. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/tasks.py +0 -0
  332. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/telemetry.py +0 -0
  333. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/models/templates.py +0 -0
  334. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/orchestration/__init__.py +0 -0
  335. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/orchestration/batch.py +0 -0
  336. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/orchestration/config.py +0 -0
  337. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/orchestration/config_merge.py +0 -0
  338. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/orchestration/early_stop.py +0 -0
  339. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/orchestration/evaluation.py +0 -0
  340. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/orchestration/experiment.py +0 -0
  341. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/orchestration/overrides.py +0 -0
  342. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/orchestration/regrade.py +0 -0
  343. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/orchestration/run_limits.py +0 -0
  344. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/orchestration/run_summary_rebuild.py +0 -0
  345. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/orchestration/task_loader.py +0 -0
  346. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/orchestrator.py +0 -0
  347. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/path_utils.py +0 -0
  348. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/plugins.py +0 -0
  349. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/py.typed +0 -0
  350. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/reports/__init__.py +0 -0
  351. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/reports/helpers.py +0 -0
  352. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/reports/junit.py +0 -0
  353. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/resources/__init__.py +0 -0
  354. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/resources/default_ignore_patterns.yaml +0 -0
  355. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/resources/tags.yaml +0 -0
  356. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/result_metrics.py +0 -0
  357. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/run_record.py +0 -0
  358. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/sandbox.py +0 -0
  359. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/scoring/__init__.py +0 -0
  360. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/scoring/ast_similarity.py +0 -0
  361. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/scoring/complexity.py +0 -0
  362. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/scoring/quality.py +0 -0
  363. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/scoring/signature_similarity.py +0 -0
  364. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/scoring/similarity.py +0 -0
  365. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/scoring/token_similarity.py +0 -0
  366. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/simulation/__init__.py +0 -0
  367. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/simulation/termination.py +0 -0
  368. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/simulation/user_simulator.py +0 -0
  369. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/simulation/utterance.py +0 -0
  370. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/stats.py +0 -0
  371. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/streaming/__init__.py +0 -0
  372. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/streaming/callbacks.py +0 -0
  373. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/streaming/collector.py +0 -0
  374. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/streaming/events.py +0 -0
  375. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/streaming/renderers.py +0 -0
  376. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/streaming/wire.py +0 -0
  377. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/telemetry.py +0 -0
  378. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/timing.py +0 -0
  379. {coder_eval-0.12.12 → coder_eval-0.12.14}/src/coder_eval/utils.py +0 -0
  380. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/README.md +0 -0
  381. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/agentless_smoke_test.yaml +0 -0
  382. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/agents/antigravity_hello_world.yaml +0 -0
  383. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/agents/antigravity_hello_world_docker.yaml +0 -0
  384. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/agents/claude_hello_world.yaml +0 -0
  385. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/agents/claude_hello_world_docker.yaml +0 -0
  386. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/agents/claude_parallel_single_gen.yaml +0 -0
  387. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/agents/claude_subagent_test.yaml +0 -0
  388. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/agents/codex_disallowed_tools_test.yaml +0 -0
  389. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/agents/codex_hello_world.yaml +0 -0
  390. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/agents/codex_parallel_commands.yaml +0 -0
  391. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/agents/codex_parallel_single_gen.yaml +0 -0
  392. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/agents/codex_string_utils.yaml +0 -0
  393. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/agents/codex_subagent_test.yaml +0 -0
  394. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/agents/subagent_bash_long_input.yaml +0 -0
  395. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/agents/subagent_merge_sort.yaml +0 -0
  396. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/anti_cheat_reference/anti_cheat_reference.yaml +0 -0
  397. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/anti_cheat_reference/reference/solution.py +0 -0
  398. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/byod_smoke_test.yaml +0 -0
  399. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/dataset_example.yaml +0 -0
  400. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/datasets/sentiment.jsonl +0 -0
  401. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/delegate/fizzbuzz_delegate.yaml +0 -0
  402. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/delegate/hello_date_delegate.yaml +0 -0
  403. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/dockerfile_build_example/dockerfile_build_example.yaml +0 -0
  404. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/dockerfile_build_example/environment/Dockerfile +0 -0
  405. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/dockerfile_build_example/environment/Dockerfile.workdir +0 -0
  406. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/dockerfile_build_example/environment/input.txt +0 -0
  407. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/dockerfile_build_example/working_dir_auto_example.yaml +0 -0
  408. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/dockerfile_build_example/working_dir_concrete_example.yaml +0 -0
  409. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/early_stop_decision_budget_exceeded.yaml +0 -0
  410. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/early_stop_weighted_high_weight_kills_run.yaml +0 -0
  411. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/early_stop_weighted_low_weight_absorbed.yaml +0 -0
  412. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/fibonacci_with_template.yaml +0 -0
  413. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/hello_date.yaml +0 -0
  414. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/inline_starter_example.yaml +0 -0
  415. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/internal/session_resumption.yaml +0 -0
  416. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/mock_path_dirs_smoke.yaml +0 -0
  417. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/mock_path_dirs_template_dir/mock-cli-bins/README.md +0 -0
  418. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/echo_args +0 -0
  419. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/fixtures/config.json +0 -0
  420. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/mock_path_dirs_template_dir/mock-cli-bins/mocks/say_hello +0 -0
  421. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/mock_path_dirs_template_dir/task.yaml +0 -0
  422. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/opencode_smoke_test.yaml +0 -0
  423. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/pi_smoke_test.yaml +0 -0
  424. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/python_cli_simulated_judged/echo_simulated_judged.yaml +0 -0
  425. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/record_cli_responses.yaml +0 -0
  426. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/run_limits/max_turns_cap.yaml +0 -0
  427. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/run_limits/turn_timeout.yaml +0 -0
  428. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/samples/skillsbench/3d-scan-calc/3d-scan-calc.yaml +0 -0
  429. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/samples/skillsbench/3d-scan-calc/environment/Dockerfile +0 -0
  430. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/samples/skillsbench/3d-scan-calc/environment/material_density_table.md +0 -0
  431. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/samples/skillsbench/3d-scan-calc/environment/scan_data.stl +0 -0
  432. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/samples/skillsbench/3d-scan-calc/verifier/test.sh +0 -0
  433. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/samples/skillsbench/3d-scan-calc/verifier/test_outputs.py +0 -0
  434. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/samples/skillsbench/README.md +0 -0
  435. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/samples/skillsbench/court-form-filling/court-form-filling.yaml +0 -0
  436. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/samples/skillsbench/court-form-filling/environment/Dockerfile +0 -0
  437. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/samples/skillsbench/court-form-filling/environment/sc100-blank.pdf +0 -0
  438. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/samples/skillsbench/court-form-filling/verifier/test.sh +0 -0
  439. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/samples/skillsbench/court-form-filling/verifier/test_outputs.py +0 -0
  440. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/samples/skillsbench/dialogue-parser/dialogue-parser.yaml +0 -0
  441. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/samples/skillsbench/dialogue-parser/environment/Dockerfile +0 -0
  442. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/samples/skillsbench/dialogue-parser/environment/script.txt +0 -0
  443. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/samples/skillsbench/dialogue-parser/verifier/test.sh +0 -0
  444. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/samples/skillsbench/dialogue-parser/verifier/test_outputs.py +0 -0
  445. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/sentiment_classification.yaml +0 -0
  446. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/smoke_agent_judge.yaml +0 -0
  447. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/smoke_budget_exceeded.yaml +0 -0
  448. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/smoke_cost_budget_exceeded.yaml +0 -0
  449. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/smoke_llm_judge.yaml +0 -0
  450. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/smoke_negative_path.yaml +0 -0
  451. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/smoke_system_one_judge.yaml +0 -0
  452. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/smoke_task_timeout.yaml +0 -0
  453. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/smoke_variants.yaml +0 -0
  454. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/test_sandbox.yaml +0 -0
  455. {coder_eval-0.12.12 → coder_eval-0.12.14}/tasks/token_check.yaml +0 -0
  456. {coder_eval-0.12.12 → coder_eval-0.12.14}/templates/byod_smoke_test/Dockerfile +0 -0
  457. {coder_eval-0.12.12 → coder_eval-0.12.14}/templates/fibonacci-starter/README.md +0 -0
  458. {coder_eval-0.12.12 → coder_eval-0.12.14}/templates/fibonacci-starter/src/main.py +0 -0
  459. {coder_eval-0.12.12 → coder_eval-0.12.14}/templates/fibonacci-starter/tests/test_main.py +0 -0
  460. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/__init__.py +0 -0
  461. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_container_contract.py +0 -0
  462. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/__init__.py +0 -0
  463. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/__init__.py +0 -0
  464. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/_scrub.py +0 -0
  465. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/antigravity_fixtures.py +0 -0
  466. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/claude_fixtures.py +0 -0
  467. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/codex_fixtures.py +0 -0
  468. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/antigravity_a_single_text_turn.json +0 -0
  469. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/antigravity_b_tool_call_resolved.json +0 -0
  470. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/antigravity_c_thinking_and_tool_same_generation.json +0 -0
  471. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/antigravity_d_orphaned_tool.json +0 -0
  472. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/antigravity_e_multi_generation.json +0 -0
  473. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_a_single_text_turn.json +0 -0
  474. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_b_tool_use_result.json +0 -0
  475. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_c_multi_emission_delta.json +0 -0
  476. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_d_subagent_terminal.json +0 -0
  477. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_e_model_usage_and_backfill.json +0 -0
  478. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_f_orphaned_tool.json +0 -0
  479. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_g_crash_format_placeholder.json +0 -0
  480. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_h1_timeout_process_error.json +0 -0
  481. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_h2_process_error_crash.json +0 -0
  482. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/claude_i_in_loop_deadline_break.json +0 -0
  483. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/codex_a_agent_message_only.json +0 -0
  484. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/codex_b_command_execution.json +0 -0
  485. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/codex_c_reasoning_placeholder.json +0 -0
  486. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/codex_d_cross_flush_is_error.json +0 -0
  487. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/codex_e_orphan_tool.json +0 -0
  488. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/codex_f_collab_fallback.json +0 -0
  489. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/codex_g_items_rebuild.json +0 -0
  490. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/codex_h_no_turn_completed_crash.json +0 -0
  491. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/delegate_a_tool_call.json +0 -0
  492. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/delegate_b_max_turns_cut.json +0 -0
  493. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/delegate_c_error_frame_crash.json +0 -0
  494. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/delegate_d_orphaned_tool.json +0 -0
  495. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/opencode_a_single_text_turn.json +0 -0
  496. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/opencode_b_tool_call_resolved.json +0 -0
  497. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/opencode_c_multi_step_tiling.json +0 -0
  498. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/opencode_d_orphaned_tool.json +0 -0
  499. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/opencode_e_error_after_generation.json +0 -0
  500. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/pi_a_single_text_turn.json +0 -0
  501. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/pi_b_tool_call_resolved.json +0 -0
  502. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/pi_c_multi_turn_tiling.json +0 -0
  503. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/pi_d_orphaned_tool.json +0 -0
  504. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/pi_e_error_after_generation.json +0 -0
  505. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/expected/pi_f_duplicate_turn_end.json +0 -0
  506. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/opencode_fixtures.py +0 -0
  507. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/golden_streams/pi_fixtures.py +0 -0
  508. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/expected/environment/Dockerfile +0 -0
  509. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/expected/environment/docker-compose.yaml +0 -0
  510. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/expected/environment/task.yaml +0 -0
  511. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/expected/instruction.md +0 -0
  512. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/expected/task.toml +0 -0
  513. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/expected/tests/reference/greeting.txt +0 -0
  514. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/expected/tests/task.yaml +0 -0
  515. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/expected/tests/test.sh +0 -0
  516. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/source_task/environment/Dockerfile +0 -0
  517. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/source_task/reference/greeting.txt +0 -0
  518. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/harbor_export_golden/source_task/task.yaml +0 -0
  519. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/live_criteria.py +0 -0
  520. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/report_snapshots/__init__.py +0 -0
  521. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/report_snapshots/_snapshot.py +0 -0
  522. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/report_snapshots/experiment_2variant.md +0 -0
  523. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/report_snapshots/experiment_3variant.md +0 -0
  524. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/report_snapshots/experiment_replicates.md +0 -0
  525. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/report_snapshots/run_full.md +0 -0
  526. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/report_snapshots/run_minimal.md +0 -0
  527. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_fixtures/timing_union_cases.json +0 -0
  528. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/_path_helpers.py +0 -0
  529. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/conftest.py +0 -0
  530. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/fixtures/__init__.py +0 -0
  531. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/fixtures/atif/known_good_trajectory.json +0 -0
  532. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/fixtures/byoa_demo_plugin/byoa_demo.py +0 -0
  533. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/fixtures/byoa_demo_plugin/pyproject.toml +0 -0
  534. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/fixtures/mock_agent.py +0 -0
  535. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/fixtures/pi_happy_stream.jsonl +0 -0
  536. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/fixtures/tasks/test_task_informational_criterion.yaml +0 -0
  537. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/fixtures/tasks/test_task_multiple_criteria.yaml +0 -0
  538. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/fixtures/tasks/test_task_pass.yaml +0 -0
  539. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/fixtures/text_stub_agent.py +0 -0
  540. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/harbor_e2e/fixtures/docker_baseline.yaml +0 -0
  541. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/harbor_e2e/fixtures/llm_judge.yaml +0 -0
  542. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/harbor_e2e/fixtures/template_sources.yaml +0 -0
  543. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/harbor_e2e/fixtures/trajectory_criteria.yaml +0 -0
  544. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/__init__.py +0 -0
  545. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/action_docs.py +0 -0
  546. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/agent_roster_parity.py +0 -0
  547. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/dead_config_fields.py +0 -0
  548. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/doc_env_parity.py +0 -0
  549. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/doc_examples.py +0 -0
  550. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/doc_indexes.py +0 -0
  551. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/doc_schema_parity.py +0 -0
  552. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/generated.py +0 -0
  553. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/live_verdict_contract.py +0 -0
  554. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/plugin_manifest_parity.py +0 -0
  555. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/plugin_reference.py +0 -0
  556. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/pricing_mirror.py +0 -0
  557. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/prose_budget.py +0 -0
  558. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/pyright_config.py +0 -0
  559. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/__init__.py +0 -0
  560. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/_layers.py +0 -0
  561. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/_model_ctor.py +0 -0
  562. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/base.py +0 -0
  563. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce014_merge_strategy_declared.py +0 -0
  564. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce015_create_subprocess_limit.py +0 -0
  565. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce016_no_computed_tokenusage_kwargs.py +0 -0
  566. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce017_models_lazy_agent_imports.py +0 -0
  567. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce018_no_final_status_name_denylist.py +0 -0
  568. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce019_telemetry_non_fatal.py +0 -0
  569. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce020_no_sdk_typed_base_agent_fields.py +0 -0
  570. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce021_guarded_evaluationresult_parse.py +0 -0
  571. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce022_dialog_loop_statement_cap.py +0 -0
  572. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce024_discriminated_unions.py +0 -0
  573. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce032_criteria_path_seam.py +0 -0
  574. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce037_no_dead_private_helper.py +0 -0
  575. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce038_acquire_inside_try.py +0 -0
  576. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce039_config_error_escalates.py +0 -0
  577. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce043_no_command_output_truncation.py +0 -0
  578. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce046_env_info_spreads_super.py +0 -0
  579. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce048_no_in_process_typer_command_call.py +0 -0
  580. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce049_no_score_or_zero.py +0 -0
  581. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce050_no_union_getattr_probe.py +0 -0
  582. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce051_no_driver_override.py +0 -0
  583. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce052_process_lethal_must_be_container_gated.py +0 -0
  584. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce053_run_record_filename_literal.py +0 -0
  585. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce054_env_info_key_round_trip.py +0 -0
  586. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce056_no_container_env_literal.py +0 -0
  587. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce057_sidecar_shim_stdlib_only.py +0 -0
  588. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce058_no_timing_literal.py +0 -0
  589. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce059_generation_window_is_two_reads.py +0 -0
  590. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce060_message_id_declared.py +0 -0
  591. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce061_window_via_close_window.py +0 -0
  592. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce063_no_busy_ms_in_agents.py +0 -0
  593. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce064_turn_bracket_on_the_clock.py +0 -0
  594. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/ce066_no_report_imports_in_core.py +0 -0
  595. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/no_agent_timing_access.py +0 -0
  596. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/no_blocking_io_in_async.py +0 -0
  597. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/no_cli_imports_in_core.py +0 -0
  598. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/no_silent_except.py +0 -0
  599. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/no_submodule_model_imports.py +0 -0
  600. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/no_top_level_run_limits_access.py +0 -0
  601. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/no_transcript_regex_in_eval.py +0 -0
  602. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/no_type_name_string_dispatch.py +0 -0
  603. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/open_explicit_encoding.py +0 -0
  604. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/read_text_explicit_encoding.py +0 -0
  605. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/register_criterion_required.py +0 -0
  606. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/subprocess_run_explicit_encoding.py +0 -0
  607. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/rules/yaml_models_forbid_extras.py +0 -0
  608. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/runner.py +0 -0
  609. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/violation.py +0 -0
  610. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/lint/workflow_outputs.py +0 -0
  611. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_action_inputs.py +0 -0
  612. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_action_version_pin.py +0 -0
  613. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_agent.py +0 -0
  614. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_agent_config_no_timing_fields.py +0 -0
  615. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_agent_config_optional_type.py +0 -0
  616. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_agent_config_registry_dispatch.py +0 -0
  617. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_agent_config_sdk_decoupling.py +0 -0
  618. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_agent_golden_master.py +0 -0
  619. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_agent_judge_criterion.py +0 -0
  620. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_agent_telemetry.py +0 -0
  621. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_agent_telemetry_advanced.py +0 -0
  622. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_agent_timeout.py +0 -0
  623. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_agentless.py +0 -0
  624. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_antigravity_agent.py +0 -0
  625. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_atif_emit.py +0 -0
  626. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_atif_hydrate.py +0 -0
  627. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_atif_models.py +0 -0
  628. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_byoa_plugin.py +0 -0
  629. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_byoa_plugin_live.py +0 -0
  630. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_byod_feature.py +0 -0
  631. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_check_all_async.py +0 -0
  632. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_checker_logging.py +0 -0
  633. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_classification_match.py +0 -0
  634. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_claude_settings_enforcement_live.py +0 -0
  635. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_cleanup_preservation_guard.py +0 -0
  636. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_cli_backend_flag.py +0 -0
  637. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_cli_called_criterion.py +0 -0
  638. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_cli_empty_glob.py +0 -0
  639. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_cli_match_parity.py +0 -0
  640. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_cli_sdk_options.py +0 -0
  641. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_cli_set_overrides.py +0 -0
  642. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_cli_telemetry.py +0 -0
  643. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_cli_type_flag.py +0 -0
  644. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_code_review_bugs.py +0 -0
  645. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_codex_agent.py +0 -0
  646. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_codex_agent_live.py +0 -0
  647. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_codex_token_mapping.py +0 -0
  648. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_command_executed.py +0 -0
  649. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_command_statistics.py +0 -0
  650. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_command_telemetry_result_data.py +0 -0
  651. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_commands_efficiency.py +0 -0
  652. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_config_lineage.py +0 -0
  653. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_config_merge_engine.py +0 -0
  654. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_config_precedence.py +0 -0
  655. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_container_context.py +0 -0
  656. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_continuous_scoring.py +0 -0
  657. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_cost_accounting_paths.py +0 -0
  658. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_criterion_result_round_trip.py +0 -0
  659. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_custom_lint.py +0 -0
  660. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_dataset_expansion.py +0 -0
  661. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_debug_logging.py +0 -0
  662. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_delegate_agent_config.py +0 -0
  663. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_delegate_agent_registration.py +0 -0
  664. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_detached_grading_boundaries.py +0 -0
  665. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_detached_grading_guards.py +0 -0
  666. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_docker_build_failure.py +0 -0
  667. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_docker_litellm_env.py +0 -0
  668. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_docker_runner_container_death.py +0 -0
  669. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_docker_runner_stream_limit.py +0 -0
  670. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_docker_wildcard_env.py +0 -0
  671. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_docker_workdir_live.py +0 -0
  672. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_driver_resolver.py +0 -0
  673. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_durations.py +0 -0
  674. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_early_stop.py +0 -0
  675. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_error_handling.py +0 -0
  676. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_eval_material.py +0 -0
  677. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_evaluate_command.py +0 -0
  678. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_evaluate_format_harbor.py +0 -0
  679. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_evaluate_target.py +0 -0
  680. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_evaluator.py +0 -0
  681. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_event_collector.py +0 -0
  682. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_execute_command.py +0 -0
  683. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_execute_evaluate_loop.py +0 -0
  684. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_execute_format_harbor.py +0 -0
  685. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_experiment_cli.py +0 -0
  686. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_experiment_loader.py +0 -0
  687. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_experiment_models.py +0 -0
  688. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_experiment_reports.py +0 -0
  689. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_experiment_resolver.py +0 -0
  690. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_experiment_runner.py +0 -0
  691. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_file_check.py +0 -0
  692. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_file_contains_scoring.py +0 -0
  693. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_formatting.py +0 -0
  694. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_git_clone_failure.py +0 -0
  695. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_glob_paths_in_file_criteria.py +0 -0
  696. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_harbor_agent.py +0 -0
  697. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_harbor_e2e_fixtures.py +0 -0
  698. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_harbor_experiment_packager.py +0 -0
  699. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_harbor_export_golden.py +0 -0
  700. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_harbor_packager.py +0 -0
  701. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_harbor_portability.py +0 -0
  702. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_harbor_reward.py +0 -0
  703. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_heartbeat_watchdog.py +0 -0
  704. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_ignore_patterns_negation.py +0 -0
  705. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_image_from_dockerfiles.py +0 -0
  706. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_image_skew_refusal.py +0 -0
  707. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_integration.py +0 -0
  708. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_json_check.py +0 -0
  709. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_judge_anthropic.py +0 -0
  710. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_judge_bedrock.py +0 -0
  711. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_judge_burn_in_live.py +0 -0
  712. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_judge_context_builder.py +0 -0
  713. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_judge_litellm.py +0 -0
  714. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_judge_models.py +0 -0
  715. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_judge_persistence.py +0 -0
  716. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_judge_system_one.py +0 -0
  717. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_lint_no_top_level_run_limits.py +0 -0
  718. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_lint_runner.py +0 -0
  719. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_litellm_config.py +0 -0
  720. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_litellm_cost.py +0 -0
  721. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_litellm_cost_logger.py +0 -0
  722. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_litellm_judge_live.py +0 -0
  723. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_litellm_route.py +0 -0
  724. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_llm_judge_criterion.py +0 -0
  725. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_log_tail_buffer.py +0 -0
  726. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_logging.py +0 -0
  727. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_logging_isolation.py +0 -0
  728. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_merge_characterization.py +0 -0
  729. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_merge_strategy_annotations.py +0 -0
  730. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_merge_unification.py +0 -0
  731. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_models.py +0 -0
  732. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_mutations.py +0 -0
  733. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_new_criteria.py +0 -0
  734. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_node_env_config.py +0 -0
  735. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_opencode_agent.py +0 -0
  736. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_optional_dependencies.py +0 -0
  737. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_orchestrator.py +0 -0
  738. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_orchestrator_error_log_tail.py +0 -0
  739. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_orchestrator_telemetry.py +0 -0
  740. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_overrides_engine.py +0 -0
  741. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_parallel.py +0 -0
  742. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_path_utils.py +0 -0
  743. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_pi_agent.py +0 -0
  744. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_pi_agent_config.py +0 -0
  745. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_pi_smoke_task.py +0 -0
  746. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_plan_command.py +0 -0
  747. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_plugins.py +0 -0
  748. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_post_run.py +0 -0
  749. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_pr_review_workflow.py +0 -0
  750. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_pre_run.py +0 -0
  751. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_preservation_mode.py +0 -0
  752. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_pricing_mirror.py +0 -0
  753. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_pricing_registry.py +0 -0
  754. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_prose_budget.py +0 -0
  755. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_prose_budget_commands.py +0 -0
  756. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_reference_comparison_scoring.py +0 -0
  757. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_reference_evaluator.py +0 -0
  758. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_reference_missing_file.py +0 -0
  759. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_reference_models.py +0 -0
  760. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_reference_permissions.py +0 -0
  761. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_registry.py +0 -0
  762. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_regrade.py +0 -0
  763. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_release_notes.py +0 -0
  764. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_replicate_stats.py +0 -0
  765. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_report_command.py +0 -0
  766. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_reports.py +0 -0
  767. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_reports_html.py +0 -0
  768. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_reports_junit.py +0 -0
  769. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_reports_package.py +0 -0
  770. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_resolve_task_files.py +0 -0
  771. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_result_metrics.py +0 -0
  772. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_resume.py +0 -0
  773. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_retry_logic_comprehensive.py +0 -0
  774. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_route_seam_exhaustiveness.py +0 -0
  775. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_routing.py +0 -0
  776. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_run_command_junit.py +0 -0
  777. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_run_command_stdout.py +0 -0
  778. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_run_helpers.py +0 -0
  779. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_run_limits_models.py +0 -0
  780. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_run_limits_orchestrator.py +0 -0
  781. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_run_limits_resolver.py +0 -0
  782. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_run_metrics.py +0 -0
  783. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_run_record.py +0 -0
  784. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_run_summary_rebuild.py +0 -0
  785. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_run_task_internal.py +0 -0
  786. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_runtime_tool_versions.py +0 -0
  787. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_sandbox.py +0 -0
  788. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_sandbox_adopt.py +0 -0
  789. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_sandbox_layer_builder.py +0 -0
  790. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_sandbox_optional.py +0 -0
  791. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_sandbox_record_cli.py +0 -0
  792. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_sandbox_security.py +0 -0
  793. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_sandbox_symlink_preservation.py +0 -0
  794. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_sandbox_templates.py +0 -0
  795. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_sandbox_venv_live.py +0 -0
  796. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_scorers.py +0 -0
  797. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_scoring_quality.py +0 -0
  798. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_sdk_option_classification.py +0 -0
  799. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_seed_from_prior_result.py +0 -0
  800. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_simulation_config.py +0 -0
  801. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_simulation_integration.py +0 -0
  802. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_simulation_termination.py +0 -0
  803. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_simulation_trials.py +0 -0
  804. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_stats.py +0 -0
  805. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_stats_nonfinite.py +0 -0
  806. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_streaming_agent_integration.py +0 -0
  807. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_streaming_batch.py +0 -0
  808. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_streaming_callbacks.py +0 -0
  809. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_streaming_cli.py +0 -0
  810. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_streaming_events.py +0 -0
  811. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_streaming_orchestrator.py +0 -0
  812. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_streaming_renderers.py +0 -0
  813. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_streaming_wire.py +0 -0
  814. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_sub_agent_runner.py +0 -0
  815. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_success_criterion_union.py +0 -0
  816. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_suite_rollup.py +0 -0
  817. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_summaries.py +0 -0
  818. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_system_one_judge.py +0 -0
  819. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_system_one_judge_live.py +0 -0
  820. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_tags.py +0 -0
  821. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_task_definition_unknown_fields.py +0 -0
  822. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_teardown_interrupt.py +0 -0
  823. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_telemetry.py +0 -0
  824. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_template_env_expansion.py +0 -0
  825. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_threshold_enforcement.py +0 -0
  826. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_timeout_batch.py +0 -0
  827. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_timeout_categorization.py +0 -0
  828. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_timeout_exceptions.py +0 -0
  829. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_timeout_models.py +0 -0
  830. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_timeout_orchestrator.py +0 -0
  831. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_timing_close_window.py +0 -0
  832. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_timing_union_parity.py +0 -0
  833. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_uipath_eval.py +0 -0
  834. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_ungraded_reporting.py +0 -0
  835. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_user_simulator.py +0 -0
  836. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_utils.py +0 -0
  837. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_utterance_extraction.py +0 -0
  838. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_variant_prompt_file.py +0 -0
  839. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_verdict_tool.py +0 -0
  840. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_verify_published_workflow.py +0 -0
  841. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_watchdog.py +0 -0
  842. {coder_eval-0.12.12 → coder_eval-0.12.14}/tests/test_yaml_migration.py +0 -0
@@ -13,6 +13,7 @@ rule docstrings in `tests/lint/rules/`, then the guides under `docs/`.
13
13
  ## Contents
14
14
 
15
15
  - [agents.md](agents.md) — agent adapters, the turn lifecycle, token reconciliation, harness parity
16
+ - [context-window.md](context-window.md) — the `agent.context_window` cap, per harness
16
17
  - [contracts.md](contracts.md) — criteria, datasets, aggregation, judging
17
18
  - [isolation.md](isolation.md) — the docker driver, the sandbox, detached grading
18
19
  - [lint-rules.md](lint-rules.md) — why each CE lint rule exists
@@ -306,6 +306,15 @@ cost bills it at the input rate and the cache buckets separately.
306
306
  id), and the `usage` snapshot the last resort. Cost is backfilled from the rate card
307
307
  when a turn was timed out or killed, so there is no terminal `ResultMessage` — the
308
308
  tokens are already captured, so this is pure pricing.
309
+ `model_usage` and `total_cost_usd` count the whole SESSION: a CLI resumed with
310
+ `resume=` restores the running totals it saved on exit, so a dialog's turn N reports
311
+ turns 1..N (`usage` and `num_turns` stay per-turn). `_turn_usage_slice` subtracts what
312
+ the same session last reported, from any ResultMessage, error or not, since the CLI
313
+ saves on every exit. Summing unsliced snapshots shows as a reconciliation row equal to
314
+ the previous turn's total (200/200 multi-turn tasks of a 2026-10-07 Haiku 5.5 run),
315
+ and inflates the simulator's tokens the same way. A counter that moved
316
+ backwards means no restore, and the snapshot is booked whole. A killed turn reports
317
+ nothing, so if its CLI saved totals, the next turn absorbs its usage.
309
318
  - **Codex/OpenAI** report `input_tokens` INCLUSIVE of the cached prefix, and bill no
310
319
  separate cache-write fee. So the fresh slice is `input - cached`, `cache_creation` is 0,
311
320
  and `cache_read` is `cached`.
@@ -708,8 +717,15 @@ being hardcoded, so a plugin that relocates its skills keeps working.
708
717
  skips external *plugins*, not configured skill paths. An inherited value is appended to
709
718
  rather than clobbered, since the host may legitimately configure OpenCode the same way.
710
719
  - **Pi** passes each as `--skill <dir>`.
711
- - **Codex** symlinks (or copies, on Windows) each skill dir into `.agents/skills/`, which
712
- 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.
713
729
  - **Antigravity** takes search paths natively via `skills_paths` — but those only drive
714
730
  DISCOVERY. The file-tool allowlist is `workspaces` alone, so the skill roots must appear
715
731
  there too, or the agent discovers a skill and every read of its `SKILL.md` is denied as
@@ -846,12 +862,29 @@ shared `agents/_skills.py` resolver: the SDK wants ONE parent directory, not a l
846
862
  ran 7 steps). The adapter counts calls from the event stream and abandons the host when call N+1
847
863
  opens; `len(turnUsages)` from the `result` then replaces the estimate as `num_turns`.
848
864
 
865
+ **A call opens on its first text, or on its `usage` frame when it streams none — never on a tool
866
+ event.** The host streams a call's text, flushes the call's `usage` frame, then runs the call's
867
+ tools, and it runs a batched reply's tools one at a time: `tool_call`, `tool_result`, `tool_call`,
868
+ `tool_result`. The adapter once opened call N+1 when every open tool had returned. With that order
869
+ the open set empties after each tool, so every tool counted as a call: a downstream suite saw a turn
870
+ with 16 round-trips and 96 tool calls cut at `max_turns: 80`. Now a `thinking` or `message` event
871
+ opens a call unless the open call has already streamed text, and a `usage` frame opens one only for
872
+ a call that streamed none. A crossing call that streams text is cut at that text, before any of its
873
+ tools. A tool-only crossing call is cut at its own frame, and its first tool can start before the kill:
874
+ the host starts a call's tools right after the frame, and the stream gives no earlier boundary. A host
875
+ without `usage` frames counts only the calls that stream text; such a host is below the 1.203.0 floor,
876
+ which is also the first release that takes the `auth` init option.
877
+ Only `_TurnState.on_text` / `on_tool_event` / `on_usage_frame` / `on_result` write the count, so the rule
878
+ lives in one place. `on_result` compares the live count with `len(turnUsages)` and warns when they
879
+ differ: the order is read from the 1.203.1 host and SDK source, not from a live transcript, so a host
880
+ release that reorders the frames shows up in the logs instead of silently moving the cap.
881
+
849
882
  **A cut turn keeps the usage of its finished calls.** A turn cut by `max_turns` or a stop gets no
850
883
  `result`, so the adapter sums the per-round-trip `usage` frames; the `result`'s total replaces the sum
851
- when it arrives. Ordering (from SDK/backend source, not a live transcript): call N's `usage` frame
852
- always precedes the `tool_result` that opens call N+1. The frame is NOT a call boundary — it arrives
853
- before its call's tools run — so the cap stays on "the previous call's tools have all returned". The
854
- adapter warns when a cut turn had finished calls but no usage.
884
+ when it arrives. Ordering (from the host and SDK source, not a live transcript): call N's `usage` frame
885
+ precedes every tool event of call N. A crossing call that streams text is cut at that text, so its usage
886
+ is dropped; a tool-only crossing call is cut at its own frame, so its usage is booked. The adapter warns
887
+ when a cut turn had finished calls but no usage.
855
888
 
856
889
  **One `AssistantMessage` per `communicate()`.** `isStepStart` and `turnUsages` would allow a
857
890
  per-round-trip split; today `isStepStart` only merges streamed deltas. `close_window` opens the one
@@ -948,8 +981,9 @@ introduced or should silently "fix" by picking one number over the other.
948
981
 
949
982
  ### Delegate agent golden-master coverage
950
983
 
951
- `tests/_fixtures/golden_streams/delegate_fixtures.py` scripts the host's stdout frames for four
952
- scenarios: a tool call, a `max_turns` cut, an `error`-frame crash and an orphaned tool. The `event`,
984
+ `tests/_fixtures/golden_streams/delegate_fixtures.py` scripts the host's stdout frames for six
985
+ scenarios: a tool call, a `max_turns` cut, an `error`-frame crash, an orphaned tool, a tool-only call
986
+ that crosses the cap, and a batched reply whose tools run one at a time. The `event`,
953
987
  `result` and `error` frames mirror the live `1.202.1` transcript. The `usage` frame and the `result`
954
988
  fields new in `1.203.0` follow the host source of UiPath/Autopilot#6656 (`src/usage.ts` and
955
989
  `handleSend`): every usage object carries all four buckets with `input_tokens` exclusive of cache,
@@ -0,0 +1,170 @@
1
+ # Capping the agent's context window
2
+
3
+ Analysis and design for `agent.context_window`: one harness-neutral field that caps the
4
+ context window an agent works within, set per agent config or per experiment variant.
5
+
6
+ ## Problem and evidence
7
+
8
+ A benchmark of Claude Code on Sonnet 5 (Bedrock, 1M-token window) let runs grow to
9
+ 250k-480k tokens of context. Above about 150k tokens each extended-thinking step got
10
+ about 10x slower, so most runs hit the 2-hour task limit. The operator wants to measure
11
+ pass rate and cost at several context caps, for example one variant at 200k and one at
12
+ 400k, on the same tasks.
13
+
14
+ Before this change no harness-neutral way existed:
15
+
16
+ - **claude-code**: `claude_settings` (`--settings`) could carry `autoCompactWindow`. That
17
+ works for one harness only, and when `claude_settings` is a file path a variant cannot
18
+ merge one key into it.
19
+ - **codex**: `CodexAgentConfig` has no pass-through. `CodexAgent._build_thread_options`
20
+ builds the thread `config` dict itself, so no value reached Codex.
21
+ - **antigravity, opencode, pi, delegate**: no knob is wired.
22
+
23
+ ## How each harness controls its window
24
+
25
+ ### claude-code
26
+
27
+ Verified in the CLI the SDK spawns. `claude-agent-sdk` runs its **bundled** CLI before it
28
+ looks for `claude` on `PATH` (`SubprocessCLITransport._find_cli`), so the CLI that runs is
29
+ the one the SDK wheel bundles, not the one the agent image installs with npm:
30
+
31
+ | coder_eval | claude-agent-sdk (uv.lock) | bundled CLI | image npm CLI |
32
+ |---|---|---|---|
33
+ | 0.12.1 | 0.2.124 | 2.1.216 | 2.1.177 |
34
+ | 0.12.12 | 0.2.159 | 2.1.281 | 2.1.281 |
35
+
36
+ `environment_info.claude_code_cli` records `claude -v` from `PATH`, so a 0.12.1 run
37
+ records 2.1.177 while 2.1.216 ran. That is a separate defect and is not fixed here.
38
+
39
+ Three inputs set the auto-compact window. Both bundled CLIs (2.1.216 and 2.1.281) contain
40
+ the same resolution function. The highest precedence comes first:
41
+
42
+ 1. `CLAUDE_CODE_AUTO_COMPACT_WINDOW` environment variable: a plain token count. It
43
+ outranks the flag and every settings scope.
44
+ 2. `--autocompact <auto|tokens>`: added in 2.1.221 (CLI reference). It is absent from
45
+ 2.1.216 as a parsed option.
46
+ 3. `autoCompactWindow` settings key. The settings schema is
47
+ `int().min(100000).max(1000000).optional().catch(undefined)`, so an out-of-range
48
+ value is **silently dropped**.
49
+
50
+ The effective window is `min(model context window, configured value)`. Auto-compaction
51
+ starts when the context approaches that window.
52
+
53
+ ### codex
54
+
55
+ Verified in the `openai-codex-cli-bin` 0.156.1 binary (the pin) and its source at tag
56
+ `rust-v0.156.1`:
57
+
58
+ - `model_context_window` ("Size of the context window for the model, in tokens"):
59
+ `with_config_overrides` sets the model's `context_window` to
60
+ `min(value, max_context_window)`. Three things follow from it. The default
61
+ auto-compact limit becomes 90% of it. The hard cap, which forces compaction, becomes
62
+ `context_window * effective_context_window_percent / 100`. The remaining-window figure
63
+ the model is shown also changes.
64
+ - `model_auto_compact_token_limit` ("Token usage threshold triggering auto-compaction"):
65
+ the trigger only, clamped to 90% of the resolved window. It does not change the window.
66
+ - `model_auto_compact_token_limit_scope` (`total` by default, or `body_after_prefix`) and
67
+ `model_post_turn_compact_threshold_percent` (turn-end compaction, off by default) tune
68
+ when compaction starts. They are not caps.
69
+
70
+ The thread `config` dict `thread_start` takes is the same override surface that
71
+ coder_eval already uses for `enabled_tools` and `model_providers`.
72
+
73
+ ### antigravity, opencode, pi, delegate
74
+
75
+ None of them has a context-window knob wired in coder_eval. They are out of scope, and
76
+ they reject the field.
77
+
78
+ ## Options considered
79
+
80
+ **Per-harness pass-through** (a Codex `config` pass-through next to `claude_settings`).
81
+ It is flexible, but a variant would have to name a different key per harness, and the
82
+ recorded value would mean something different on each. It also opens a free-form
83
+ pass-through on Codex with no denylist. Rejected.
84
+
85
+ **A field under `run_limits`.** Run limits are caps that the orchestrator or the agent
86
+ enforces on a run (turns, time, tokens, USD), and the parity table lists them. A context
87
+ window is not a spend cap. It is a harness setting that changes what the agent does, and
88
+ it depends on the agent type, which `run_limits` does not know. The guide also says that
89
+ `agent:` holds no run-time caps. Rejected.
90
+
91
+ **A field on the agent config.** One name, accepted on a type-less config so that
92
+ experiment defaults and variants can set it, and validated against the concrete type
93
+ when the config resolves. **Chosen.**
94
+
95
+ Naming: `context_window`, in tokens. It names the quantity the operator caps, matches
96
+ Codex's `model_context_window`, and avoids "auto-compact", which describes a mechanism of
97
+ one harness. `max_context_tokens` was considered, but it reads as a per-request input
98
+ limit, which neither harness enforces.
99
+
100
+ ## Recommended design
101
+
102
+ `BaseAgentConfig.context_window: int | None` (default `None`, `gt=0`).
103
+
104
+ - Each config class declares `_context_window_range: ClassVar[tuple[int, int | None] |
105
+ None]`. `None` (the base default) means that the harness cannot apply the field.
106
+ `ClaudeCodeAgentConfig` declares `(100_000, 1_000_000)` and `CodexAgentConfig` declares
107
+ `(32_768, None)`.
108
+ - `check_context_window_supported` (model validator) rejects an unsupported type or an
109
+ out-of-range value as soon as the type is known. A plugin agent inherits `None`, so it
110
+ also rejects the field until it opts in.
111
+ - The field uses the default `replace` merge strategy. It is set at any of the five
112
+ layers, and with `-D agent.context_window=N`.
113
+
114
+ Per-harness mapping:
115
+
116
+ - **claude-code**: `CLAUDE_CODE_AUTO_COMPACT_WINDOW=<N>` in the SDK `env`. The
117
+ environment variable was chosen over the settings key and the flag for four reasons.
118
+ It has the highest precedence, so host, project and `claude_settings` values cannot
119
+ override the cap. It works whether `claude_settings` is a dict or a file path. Both
120
+ bundled CLIs read it, which the flag does not. `extra_args` stays framework-owned.
121
+ `claude_settings.autoCompactWindow` together with `context_window` is a load error,
122
+ because the environment variable would silently override it.
123
+ - **codex**: `model_context_window: <N>` in the thread `config`. No trigger key is set,
124
+ so Codex compacts at its default 90% of the window.
125
+
126
+ ## Validation
127
+
128
+ - `gt=0` on every config, so a type-less config rejects nonsense as well.
129
+ - claude-code: 100000-1000000, the CLI's documented range. Outside that range the CLI
130
+ drops a settings value silently, so coder_eval enforces the range itself.
131
+ - codex: 32768 and up. Codex clamps the value to the model's catalog maximum, and the
132
+ floor rejects a window too small to work in, such as a YAML `yes` coerced to 1.
133
+ - every other type: rejected at load, naming the supported types. A variant that
134
+ switches `type` to an unsupported harness fails when the experiment resolves.
135
+
136
+ ## Recording
137
+
138
+ The resolved agent config is persisted as `agent_config` on every task row (`run.json`
139
+ and `task.json`). `agent.context_window` therefore appears per task, and config lineage
140
+ records which layer set it (for example, the variant). The experiment report groups by
141
+ variant, so a cap per variant groups without new report code. On claude-code the
142
+ `sdk_options` dump also shows the environment variable in `env`.
143
+
144
+ ## Open questions
145
+
146
+ - **A silent clamp to the model's window.** Neither harness reports that the model's
147
+ window lowered the cap. A cap above the model's window runs at the model's window.
148
+ Recording the effective window would need a per-model catalog in coder_eval.
149
+ - **Trigger points differ.** Codex compacts at 90% of the window. Claude Code compacts
150
+ when the context approaches the window, minus an internal buffer. Equal caps therefore
151
+ do not compact at exactly the same token count. A separate harness-neutral trigger
152
+ field is possible, but it is not added until a benchmark needs it.
153
+ - **A host `CLAUDE_CODE_AUTO_COMPACT_WINDOW` and uncapped runs.** Decided: the SDK starts
154
+ the CLI with `os.environ` underneath `options.env`, so when the field is unset the
155
+ claude-code agent blanks a host value. A run recorded as uncapped is never capped by
156
+ the host. This changes every claude-code run on a host that sets the variable,
157
+ including runs that never set `context_window`. Codex has no equivalent: an unset
158
+ field leaves a host `model_context_window` in `$CODEX_HOME/config.toml` in effect.
159
+ - **The recorded CLI version is wrong.** See the version table above:
160
+ `environment_info.claude_code_cli` should record the bundled CLI version.
161
+ - **Other harnesses.** Pi can lower a model's window with
162
+ `providers.<provider>.modelOverrides.<model>.contextWindow` in `models.json`. A mapping
163
+ was written and then reverted (d1757a60), because no live run backed it and no task
164
+ uses `type: pi`; it comes back with a live test. OpenCode (`limit.context` and
165
+ `limit.input` in provider config) needs a `limit.output` coder_eval does not know, and
166
+ an unpinned CLI. Antigravity's `CompactionConfig(token_threshold=N)` only moves the
167
+ trigger. Delegate keeps its history in the backend. Each needs its own verification
168
+ before it opts in.
169
+ - **How often a run compacted is not recorded.** A cap A/B cannot yet tell "cap never
170
+ reached" from "compacted N times" from the task row alone.
@@ -845,7 +845,7 @@ assertion for each. A defaulted `AgentStartEvent` lands ~365 days before the clo
845
845
  first window, so the head blows any sane UPPER bound by the whole offset. A defaulted
846
846
  `AgentEndEvent` lands ~365 days BEFORE its own last message, so `decompose_turn` clamps the
847
847
  negative to `0.0` — "measured, and instant", which passes an upper bound. Only a strict
848
- `> 0.0` catches it. It holds on all three clocked harnesses because real work separates a
848
+ `> 0.0` catches it. It holds on every clocked harness because real work separates a
849
849
  turn's last flush from its end event. The margin is smallest on antigravity, which holds
850
850
  its process across turns: it measures 0.007-0.035 ms there, 7-35 ticks of the 1 us
851
851
  resolution that both `datetime` and `time.monotonic()` have on Linux, macOS and Windows.
@@ -16,6 +16,11 @@ removes:
16
16
  transition or an NTP step inside a turn lands directly in a generation window — an
17
17
  hour-long jump in a millisecond field. Nightly runs start at 04:18 and run for hours,
18
18
  so it is reachable rather than theoretical. A monotonic-derived stamp cannot express it.
19
+ - Delegate stamped its one window and its tool spans with raw `datetime.now()` but measured
20
+ `duration_seconds` with `time.monotonic()`. On Windows the wall clock moved 0.24-0.37 ms
21
+ further than the monotonic one inside a sub-millisecond turn, so the tail alone came out
22
+ longer than the whole turn and `test_delegate_golden[a_tool_call]` failed at random. One
23
+ window has no inter-window drift to correct, but it still shares the turn's duration.
19
24
 
20
25
  It is an EXTRACTION, not an invention: antigravity already captured this exact pair at
21
26
  the top of `communicate` and simply did not use it for later stamps.
@@ -205,7 +210,7 @@ Magnitudes are only real where a scripted clock makes them real, so each case dr
205
210
  harness's own reducer with a hand-moved clock and feeds its output through a real
206
211
  `EventCollector`, the seam production uses to compute the head and the tail. The module
207
212
  reuses the three clock-injection idioms the per-harness suites already use rather than
208
- inventing a fourth: an injected `TurnClock` stand-in (pi, antigravity, claude-code), a
213
+ inventing a fourth: an injected `TurnClock` stand-in (pi, antigravity, claude-code, delegate), a
209
214
  `datetime` subclass patched onto the module (opencode), and scripted SDK epoch-millisecond
210
215
  stamps (codex). OpenCode needs a `datetime` SUBCLASS rather than a stub because the
211
216
  reducer also calls `datetime.fromtimestamp` through the same module global to convert the
@@ -2,6 +2,74 @@
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
+
14
+ ## v0.12.13 (2026-10-13)
15
+
16
+ ### Bug Fixes
17
+
18
+ - **agent**: Address the context_window review
19
+ ([#219](https://github.com/UiPath/coder_eval/pull/219),
20
+ [`ae02485`](https://github.com/UiPath/coder_eval/commit/ae02485a7a21944e2ee15a0f72131def5f2e425a))
21
+
22
+ - **agents**: Count Delegate batched tool calls once under max_turns and stamp turns off one
23
+ TurnClock ([#222](https://github.com/UiPath/coder_eval/pull/222),
24
+ [`db2067e`](https://github.com/UiPath/coder_eval/commit/db2067e94e458796c10cfe5f2b0c0383a3c8db03))
25
+
26
+ - **claude-code**: Book only the turn's own usage on a resumed session
27
+ ([#221](https://github.com/UiPath/coder_eval/pull/221),
28
+ [`c9456e5`](https://github.com/UiPath/coder_eval/commit/c9456e58b49174c29f48577507f249eb9e98a94b))
29
+
30
+ - **delegate**: Count a batched reply's tools as one model call under max_turns
31
+ ([#222](https://github.com/UiPath/coder_eval/pull/222),
32
+ [`db2067e`](https://github.com/UiPath/coder_eval/commit/db2067e94e458796c10cfe5f2b0c0383a3c8db03))
33
+
34
+ - **delegate**: Keep the max_turns count in one place and warn when it drifts
35
+ ([#222](https://github.com/UiPath/coder_eval/pull/222),
36
+ [`db2067e`](https://github.com/UiPath/coder_eval/commit/db2067e94e458796c10cfe5f2b0c0383a3c8db03))
37
+
38
+ - **delegate**: Stamp the whole turn off one TurnClock
39
+ ([#222](https://github.com/UiPath/coder_eval/pull/222),
40
+ [`db2067e`](https://github.com/UiPath/coder_eval/commit/db2067e94e458796c10cfe5f2b0c0383a3c8db03))
41
+
42
+ - **pricing**: Add Haiku 5.5, Sonnet 5.5 and GPT-6.1 Sol, re-verify every row
43
+ ([#220](https://github.com/UiPath/coder_eval/pull/220),
44
+ [`b3ae960`](https://github.com/UiPath/coder_eval/commit/b3ae96033d32f3e88bff68a15219e85372762220))
45
+
46
+ ### Chores
47
+
48
+ - **no-mistakes/document**: Name Delegate among the TurnClock harnesses in timing docs
49
+ ([#222](https://github.com/UiPath/coder_eval/pull/222),
50
+ [`db2067e`](https://github.com/UiPath/coder_eval/commit/db2067e94e458796c10cfe5f2b0c0383a3c8db03))
51
+
52
+ ### Documentation
53
+
54
+ - **delegate**: Count the six Delegate golden-master scenarios in the notes
55
+ ([#222](https://github.com/UiPath/coder_eval/pull/222),
56
+ [`db2067e`](https://github.com/UiPath/coder_eval/commit/db2067e94e458796c10cfe5f2b0c0383a3c8db03))
57
+
58
+ - **delegate**: Document the tool-only cut race and relax the live test count
59
+ ([#222](https://github.com/UiPath/coder_eval/pull/222),
60
+ [`db2067e`](https://github.com/UiPath/coder_eval/commit/db2067e94e458796c10cfe5f2b0c0383a3c8db03))
61
+
62
+ ### Features
63
+
64
+ - **agent**: Cap Pi's context window with agent.context_window
65
+ ([#219](https://github.com/UiPath/coder_eval/pull/219),
66
+ [`ae02485`](https://github.com/UiPath/coder_eval/commit/ae02485a7a21944e2ee15a0f72131def5f2e425a))
67
+
68
+ - **agent**: Cap the agent's context window with agent.context_window
69
+ ([#219](https://github.com/UiPath/coder_eval/pull/219),
70
+ [`ae02485`](https://github.com/UiPath/coder_eval/commit/ae02485a7a21944e2ee15a0f72131def5f2e425a))
71
+
72
+
5
73
  ## v0.12.12 (2026-10-06)
6
74
 
7
75
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: coder-eval
3
- Version: 0.12.12
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.12" # <-- 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
@@ -23,6 +23,7 @@ to the orchestrator are involved.
23
23
  - [What a Variant Can Override](#what-a-variant-can-override)
24
24
  - [Recipe: A/B a Skill](#recipe-ab-a-skill)
25
25
  - [Recipe: A/B a Model](#recipe-ab-a-model)
26
+ - [Recipe: A/B a Context Window](#recipe-ab-a-context-window)
26
27
  - [Recipe: A/B a Prompt](#recipe-ab-a-prompt)
27
28
  - [Recipe: Smoke vs. e2e Flavors (Early Stop)](#recipe-smoke-vs-e2e-flavors-early-stop)
28
29
  - [Replicates (Statistical Power)](#replicates-statistical-power)
@@ -222,6 +223,28 @@ variants:
222
223
  agent: { model: claude-opus-5 }
223
224
  ```
224
225
 
226
+ ## Recipe: A/B a Context Window
227
+
228
+ `agent.context_window` caps the context the agent works within, in tokens: the
229
+ harness compacts the conversation before it outgrows the cap. Use it to measure
230
+ pass rate and cost against the cap on a model with a large window. Each task row
231
+ records the cap in `agent_config.context_window`.
232
+
233
+ ```yaml
234
+ experiment_id: context-window
235
+ description: "The same model with a 200k and a 400k context cap"
236
+
237
+ variants:
238
+ - variant_id: cap-200k
239
+ agent: { context_window: 200000 }
240
+ - variant_id: cap-400k
241
+ agent: { context_window: 400000 }
242
+ ```
243
+
244
+ An agent type that cannot apply the cap fails the experiment at load.
245
+ [Run-Limit Parity](agents/HARNESS_PARITY.md#the-context-window-cap-per-harness) lists which
246
+ agent types accept it and what the cap does on each.
247
+
225
248
  ## Recipe: A/B a Prompt
226
249
 
227
250
  Use `prompt_mutations` (transform the task prompt) or `initial_prompt` /
@@ -80,6 +80,22 @@ class MyAgentConfig(BaseAgentConfig):
80
80
  The factory `create_agent(kind, config, …)` raises `TypeError` if the passed config
81
81
  isn't an instance of the registered `config_class`, so keep them paired.
82
82
 
83
+ To accept `agent.context_window`, declare the inclusive range of tokens your harness
84
+ can cap its context window to, and apply `self.config.context_window` when the agent
85
+ starts. A config class that declares nothing rejects the field at load, which is the
86
+ right default: a capped variant must never run uncapped.
87
+
88
+ ```python
89
+ from typing import ClassVar
90
+
91
+ class MyAgentConfig(BaseAgentConfig):
92
+ type: Literal["my-agent"] = "my-agent"
93
+ _context_window_range: ClassVar[tuple[int, int | None] | None] = (32_768, None)
94
+ ```
95
+
96
+ Add your harness to the table in
97
+ [Run-Limit Parity](agents/HARNESS_PARITY.md#the-context-window-cap-per-harness).
98
+
83
99
  ### The `Agent` ABC — implementation checklist
84
100
 
85
101
  Implement these three abstract methods:
@@ -170,6 +170,7 @@ agent:
170
170
  - "Write"
171
171
  - "Bash"
172
172
  model: "claude-sonnet-5" # Optional: specific model
173
+ context_window: 200000 # Optional: cap the context window, in tokens (claude-code, codex)
173
174
  sdk_options: # Optional: agent SDK pass-through (keys depend on `type`)
174
175
  effort: high # claude-code: any non-framework-managed ClaudeAgentOptions field
175
176
  ```
@@ -188,6 +189,13 @@ validates its own keys at YAML load:
188
189
  Deep-merged across the 5-layer config chain. Override via CLI with the
189
190
  repeatable `-D agent.sdk_options.KEY=VALUE`.
190
191
 
192
+ **`context_window`** caps the context window the agent works within, in tokens: the
193
+ harness compacts the conversation before it outgrows the cap, and never runs past the
194
+ model's own window. Override via CLI with `-D agent.context_window=400000`. Which agent
195
+ types accept it, in what range, what each does with it and what an unset value means:
196
+ [Run-Limit Parity](agents/HARNESS_PARITY.md#the-context-window-cap-per-harness). An agent
197
+ type that cannot apply it rejects it at load.
198
+
191
199
  **Permission Modes:**
192
200
  - `default` — Default permission handling
193
201
  - `acceptEdits` — Auto-accept file edits (recommended for evaluations)
@@ -1337,7 +1345,7 @@ Like `skill_triggered`, this criterion emits a `ClassificationCriterionResult`,
1337
1345
 
1338
1346
  ### `skill_triggered`
1339
1347
 
1340
- 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).
1341
1349
 
1342
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`.
1343
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
@@ -104,6 +104,7 @@ agent:
104
104
  | `system_prompt_file` | `str \| null` | Path (relative to the task YAML) loaded into `system_prompt` at resolution. Works with either `system_prompt_mode`. |
105
105
  | `setting_sources` | `list["user"\|"project"\|"local"] \| null` | Which host setting sources the SDK reads. Default resolves to `["project"]`. See [Sandbox isolation](#sandbox-isolation). |
106
106
  | `claude_settings` | `str \| dict \| null` | Passed to the SDK `--settings`. A dict is JSON-serialized; a str is a settings file path. Use `permissions.deny` to block tools/paths. |
107
+ | `context_window` | `int \| null` (100000-1000000) | Auto-compact window, in tokens, sent as `CLAUDE_CODE_AUTO_COMPACT_WINDOW`. It outranks `--autocompact` and every settings scope, and is capped to the model's window. Setting `claude_settings.autoCompactWindow` too is a load error. See [Harness parity](HARNESS_PARITY.md#the-context-window-cap-per-harness). |
107
108
  | `sdk_options` | `dict` (default `{}`) | Pass-through for `ClaudeAgentOptions` fields Coder Eval doesn't own (e.g. `effort`). Validated at load — an unknown or framework-owned key is a hard error. |
108
109
  | `ignore_patterns` | `list[str] \| null` | Gitignore-style overrides for the workspace copy used by judge sub-agents (supports `!` negation). |
109
110
 
@@ -212,9 +213,11 @@ resolution for any agent that does not declare `supports_cooperative_stop`. See
212
213
 
213
214
  Claude Code produces the richest telemetry of the agents:
214
215
 
215
- - **Authoritative billing** comes from the SDK's cumulative `model_usage` on the
216
+ - **Authoritative billing** comes from the SDK's `model_usage` on the
216
217
  terminal result message and reconciles to `total_cost_usd` — this already includes
217
- sub-agent consumption that the per-message stream under-reports.
218
+ sub-agent consumption that the per-message stream under-reports. Both count the
219
+ whole session, so a resumed turn books only what changed since the session's
220
+ previous result message.
218
221
  - **Sub-agent accounting** is derived by grouping `parent_tool_use_id`-tagged
219
222
  assistant messages; there is no separate per-sub-agent field. The terminal
220
223
  sub-agent generation (delivered as the Agent tool result, never streamed) is
@@ -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
@@ -192,6 +192,13 @@ The agent maps `permission_mode` to the Codex SDK's `Sandbox`. The approval mode
192
192
 
193
193
  `allowed_tools` / `disallowed_tools` are normalized (`Bash` → `shell`, `Write`/`Edit` → `apply_patch`, etc.) and passed as `enabled_tools` / `disabled_tools` in the thread `config`. **Note:** the Codex SDK does not currently enforce `disabled_tools`; do not rely on it as a security boundary (the agent logs a warning when it is set).
194
194
 
195
+ ### Context Window
196
+
197
+ `agent.context_window` is passed as `model_context_window` in the thread `config`. Codex
198
+ uses it as the model's context window, capped to the model's catalog maximum, and
199
+ auto-compacts at 90% of it. See
200
+ [Harness parity](HARNESS_PARITY.md#the-context-window-cap-per-harness).
201
+
195
202
  ### Skills Discovery
196
203
 
197
204
  The agent sets up SKILL.md files (Agent Skills open standard) in `.agents/skills/` directory:
@@ -199,8 +206,9 @@ The agent sets up SKILL.md files (Agent Skills open standard) in `.agents/skills
199
206
  1. Scans `config.plugins` for local plugins with `path` field
200
207
  2. Checks `plugin_tools_dir` parameter passed to `start()`
201
208
  3. Expands environment variables in paths (`$PLUGIN_PATH`, `${PLUGIN_PATH}`)
202
- 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
203
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
204
212
 
205
213
  ### Async Integration
206
214
 
@@ -168,8 +168,8 @@ Run-limit semantics per harness: [Run-Limit Parity](HARNESS_PARITY.md).
168
168
  ## Known Limitations
169
169
 
170
170
  1. **No multi-generation transcript splitting.** This agent builds one `AssistantMessage` per `communicate()` call, not one per backend round-trip. The host does send the signals a split needs (`isStepStart` on `message` events and per-round-trip `turnUsages` on `result`), but this agent does not use them yet.
171
- 2. **`max_turns` is enforced by coder_eval, not by the host.** The host's `maxSteps` option on `send` does not stop the turn (confirmed live: `maxSteps: 2` ran 7 steps and only reported `maxStepsReached: true`), so this agent does not send it. See [Run-Limit Parity](HARNESS_PARITY.md).
172
- A turn cut at `max_turns`, or by a cooperative early stop, keeps the token usage and cost of every model call that finished before the cut, as on the other agents. The host sends a `usage` frame for each call before that call's tool results. The call in progress at the cut has no usage. A host that does not send `usage` frames reports usage only on its final `result` frame, which a cut turn never gets: that turn has no usage, and the agent logs a warning.
171
+ 2. **`max_turns` is enforced by coder_eval, not by the host.** The host's `maxSteps` option on `send` does not stop the turn (confirmed live: `maxSteps: 2` ran 7 steps and only reported `maxStepsReached: true`), so this agent does not send it. It counts a call on the call's first streamed text, or on its `usage` frame when the call streams none. The host runs a batched reply's tools one at a time, so tool events do not mark a call. See [Run-Limit Parity](HARNESS_PARITY.md).
172
+ A turn cut at `max_turns`, or by a cooperative early stop, keeps the token usage and cost of every model call that finished before the cut, as on the other agents. The host sends a `usage` frame for each call before that call's tool results. Which side of the cut the crossing call lands on depends on its shape. A call that streams text is cut at that text, before its `usage` frame and before any of its tools, so its usage is dropped. A tool-only call is cut at its own `usage` frame, so its usage is booked, and its first tool can start before the kill: the host starts a call's tools right after the frame, and the stream gives no earlier boundary. When the `result` arrives, the agent compares its own call count with the host's `turnUsages` and logs a warning if they differ, because a change in the host's frame order would move the cap. A host that does not send `usage` frames reports usage only on its final `result` frame, which a cut turn never gets: that turn has no usage, and the agent logs a warning.
173
173
  3. **Only three backend failures get a specific diagnosis.** A Cloudflare WAF block page is reported as a content-filter failure and is not retried: the same prompt or tool result is blocked again. An SSE connect timeout is reported as a connection failure and is retried. A session conflict ("A reply is already being generated") is retried in a new conversation when no turn of that conversation has finished. After a finished turn, or with a `session_id` set in the config, the retry stays in the same conversation, so the agent never continues without its earlier turns: the retry succeeds once the backend releases the conversation (it stops the reply when the host disconnects), or the task ends as an error. There is no first-response stall detection: a stalled turn ends at its turn timeout. Every other crash ends the turn as an `AgentCrashError`, which is retried unless its message matches a category that is not retried (a timeout, or an auth, billing or content-filter error).
174
174
  4. **`sdk_options` accepts only `effort`.** Reasoning effort uses the same `sdk_options.effort` key as Claude Code, so `-D agent.sdk_options.effort=high` works for both agents. Any other key, or an `effort` that is not a string, is a validation error. The host checks the tier itself: it logs a tier it does not recognize and uses the model's default. `project_id`, `session_id` and `enable_computer_use` are typed config fields.
175
175
  5. **`enable_computer_use: true` requires local permissions and is unavailable on Linux.** macOS needs Accessibility + Screen Recording grants; the SDK throws unconditionally on Linux when this is enabled.