verifiers 0.3.2.dev156__tar.gz → 0.3.2.dev157__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 (221) hide show
  1. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/PKG-INFO +1 -1
  2. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/artifacts.py +61 -2
  3. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/.gitignore +0 -0
  4. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/LICENSE +0 -0
  5. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/README.md +0 -0
  6. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/pyproject.toml +0 -0
  7. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/conftest.py +0 -0
  8. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  9. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/fixtures/duet_v1.py +0 -0
  10. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  11. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  12. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  13. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  14. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/fixtures/echo_v1.py +0 -0
  15. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/fixtures/pyproject.toml +0 -0
  16. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  17. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/test_color_codeword_tasks.py +0 -0
  18. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/test_configs.py +0 -0
  19. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/test_e2e.py +0 -0
  20. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/test_envs.py +0 -0
  21. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/test_graph.py +0 -0
  22. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/test_judges.py +0 -0
  23. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/test_platform_run.py +0 -0
  24. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/test_scoring.py +0 -0
  25. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/test_serve_delta.py +0 -0
  26. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/test_taskset.py +0 -0
  27. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/tests/v1/test_trace.py +0 -0
  28. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/__init__.py +0 -0
  29. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/__init__.py +0 -0
  30. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/acp/__init__.py +0 -0
  31. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/acp/runner.py +0 -0
  32. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/agent.py +0 -0
  33. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/__init__.py +0 -0
  34. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  35. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/dashboard/base.py +0 -0
  36. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/dashboard/eval.py +0 -0
  37. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/dashboard/replay.py +0 -0
  38. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/dashboard/validate.py +0 -0
  39. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/debug.py +0 -0
  40. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/eval/__init__.py +0 -0
  41. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/eval/hint.py +0 -0
  42. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/eval/main.py +0 -0
  43. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/eval/resume.py +0 -0
  44. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/eval/runner.py +0 -0
  45. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/gepa.py +0 -0
  46. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/init.py +0 -0
  47. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/output.py +0 -0
  48. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/replay.py +0 -0
  49. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/resolve.py +0 -0
  50. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/resume.py +0 -0
  51. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/cli/validate.py +0 -0
  52. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/clients/__init__.py +0 -0
  53. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/clients/base.py +0 -0
  54. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/clients/client.py +0 -0
  55. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/clients/eval.py +0 -0
  56. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/clients/train.py +0 -0
  57. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/__init__.py +0 -0
  58. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/agent.py +0 -0
  59. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/cli/__init__.py +0 -0
  60. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/cli/debug.py +0 -0
  61. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/cli/env.py +0 -0
  62. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/cli/eval.py +0 -0
  63. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/cli/init.py +0 -0
  64. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/cli/replay.py +0 -0
  65. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/cli/validate.py +0 -0
  66. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/client.py +0 -0
  67. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/env.py +0 -0
  68. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/harness.py +0 -0
  69. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/judge.py +0 -0
  70. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/retries.py +0 -0
  71. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/runtime.py +0 -0
  72. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/select.py +0 -0
  73. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/serve.py +0 -0
  74. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/task.py +0 -0
  75. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/configs/taskset.py +0 -0
  76. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/dialects/__init__.py +0 -0
  77. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/dialects/anthropic.py +0 -0
  78. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/dialects/base.py +0 -0
  79. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/dialects/chat.py +0 -0
  80. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/dialects/responses.py +0 -0
  81. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/env.py +0 -0
  82. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/envs/__init__.py +0 -0
  83. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  84. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  85. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  86. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/envs/best_of_n/env.py +0 -0
  87. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/envs/isolated_verifier/__init__.py +0 -0
  88. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/envs/isolated_verifier/env.py +0 -0
  89. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
  90. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  91. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/envs/single_agent/env.py +0 -0
  92. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  93. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/envs/user_sim/env.py +0 -0
  94. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/episode.py +0 -0
  95. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/errors.py +0 -0
  96. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/gepa/__init__.py +0 -0
  97. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/gepa/adapter.py +0 -0
  98. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/gepa/config.py +0 -0
  99. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/gepa/dataset.py +0 -0
  100. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/gepa/reflection.py +0 -0
  101. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/gepa/runner.py +0 -0
  102. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/graph.py +0 -0
  103. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harness.py +0 -0
  104. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/__init__.py +0 -0
  105. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  106. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/bash/harness.py +0 -0
  107. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  108. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  109. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  110. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  111. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  112. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  113. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/codex/gate.mjs +0 -0
  114. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/codex/harness.py +0 -0
  115. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  116. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  117. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  118. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  119. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  120. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  121. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  122. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  123. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/node.py +0 -0
  124. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/null/__init__.py +0 -0
  125. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/null/harness.py +0 -0
  126. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  127. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  128. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  129. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/pi/gate.mjs +0 -0
  130. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/pi/harness.py +0 -0
  131. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/prime_agent/__init__.py +0 -0
  132. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/prime_agent/harness.py +0 -0
  133. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  134. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  135. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  136. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  137. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  138. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/utils/__init__.py +0 -0
  139. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/utils/compaction.py +0 -0
  140. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/utils/core.py +0 -0
  141. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/utils/install.py +0 -0
  142. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/utils/launch.py +0 -0
  143. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/harnesses/utils/mcp.py +0 -0
  144. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/interception/__init__.py +0 -0
  145. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/interception/base.py +0 -0
  146. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/interception/pool.py +0 -0
  147. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/interception/server.py +0 -0
  148. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  149. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/interception/tunnel/base.py +0 -0
  150. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/interception/tunnel/custom.py +0 -0
  151. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/interception/tunnel/prime.py +0 -0
  152. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/judge.py +0 -0
  153. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/judges/__init__.py +0 -0
  154. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/judges/reference.py +0 -0
  155. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/judges/reference.txt +0 -0
  156. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/judges/rubric.py +0 -0
  157. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/judges/rubric.txt +0 -0
  158. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/mcp/__init__.py +0 -0
  159. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/mcp/launch.py +0 -0
  160. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/mcp/server.py +0 -0
  161. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/mcp/toolset.py +0 -0
  162. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/rollout.py +0 -0
  163. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/runtimes/__init__.py +0 -0
  164. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/runtimes/apptainer.py +0 -0
  165. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/runtimes/base.py +0 -0
  166. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/runtimes/container.py +0 -0
  167. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  168. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/runtimes/docker/egress.py +0 -0
  169. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/runtimes/limiters.py +0 -0
  170. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/runtimes/modal.py +0 -0
  171. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/runtimes/prime.py +0 -0
  172. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/runtimes/subprocess.py +0 -0
  173. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/semantic.py +0 -0
  174. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/serve/__init__.py +0 -0
  175. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/serve/client.py +0 -0
  176. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/serve/delta.py +0 -0
  177. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/serve/encoding.py +0 -0
  178. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/serve/pool.py +0 -0
  179. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/serve/server.py +0 -0
  180. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/serve/types.py +0 -0
  181. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/session.py +0 -0
  182. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/state.py +0 -0
  183. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/task.py +0 -0
  184. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/taskset.py +0 -0
  185. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/tasksets/__init__.py +0 -0
  186. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  187. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/tasksets/harbor/compose.py +0 -0
  188. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/tasksets/harbor/env.py +0 -0
  189. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  190. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/tasksets/harbor/toolset.py +0 -0
  191. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/tasksets/nemo_gym/__init__.py +0 -0
  192. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/tasksets/nemo_gym/response.py +0 -0
  193. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/tasksets/nemo_gym/server.py +0 -0
  194. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/tasksets/nemo_gym/taskset.py +0 -0
  195. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/tasksets/nemo_gym/toolset.py +0 -0
  196. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  197. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  198. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  199. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  200. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/trace.py +0 -0
  201. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/types.py +0 -0
  202. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/__init__.py +0 -0
  203. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/aio.py +0 -0
  204. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/compile.py +0 -0
  205. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/decorators.py +0 -0
  206. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/format.py +0 -0
  207. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/generic.py +0 -0
  208. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/git.py +0 -0
  209. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/image.py +0 -0
  210. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/interrupt.py +0 -0
  211. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/loaders.py +0 -0
  212. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/logging.py +0 -0
  213. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/memory.py +0 -0
  214. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/paths.py +0 -0
  215. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/platform.py +0 -0
  216. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/prime.py +0 -0
  217. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/retries.py +0 -0
  218. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/scope.py +0 -0
  219. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/score.py +0 -0
  220. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/trace_store.py +0 -0
  221. {verifiers-0.3.2.dev156 → verifiers-0.3.2.dev157}/verifiers/v1/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: verifiers
3
- Version: 0.3.2.dev156
3
+ Version: 0.3.2.dev157
4
4
  Summary: Verifiers: Environments for LLM Reinforcement Learning
5
5
  Project-URL: Homepage, https://github.com/primeintellect-ai/verifiers
6
6
  Project-URL: Documentation, https://github.com/primeintellect-ai/verifiers
@@ -141,7 +141,8 @@ async def restore(runtime: Runtime, collected: dict[str, bytes | None]) -> None:
141
141
 
142
142
  Archive bytes are untrusted: the agent controls both their source files and the
143
143
  runtime tooling that creates them. Every archive is therefore validated on the host
144
- before the grading runtime is changed. Only regular files and directories travel.
144
+ before the grading runtime is changed. Regular files, directories, and confined links
145
+ can travel; link chains and extraction through symlinks cannot.
145
146
  """
146
147
  if not collected:
147
148
  return
@@ -214,6 +215,9 @@ def _validate_restore(root: str, archive: bytes | None) -> None:
214
215
 
215
216
  try:
216
217
  with tarfile.open(fileobj=io.BytesIO(archive), mode="r:") as tar:
218
+ regular_files: set[PurePosixPath] = set()
219
+ members: set[PurePosixPath] = set()
220
+ symlinks: dict[PurePosixPath, str] = {}
217
221
  for member in tar:
218
222
  member_path = PurePosixPath(member.name)
219
223
  destination = PurePosixPath("/") / member_path
@@ -227,10 +231,65 @@ def _validate_restore(root: str, archive: bytes | None) -> None:
227
231
  f"artifact member {member.name!r} is outside declared root "
228
232
  f"{root!r}"
229
233
  )
230
- if not (member.isfile() or member.isdir()):
234
+ if member_path in members:
235
+ raise RuntimeError(f"duplicate artifact member {member.name!r}")
236
+ members.add(member_path)
237
+ if member.issym():
238
+ symlinks[member_path] = member.linkname
239
+ elif member.islnk():
240
+ # Tar deduplicates hard-linked build outputs (e.g. Cargo's build
241
+ # scripts). A target must already be a regular member of this
242
+ # archive, never a path supplied by the verifier image.
243
+ target = PurePosixPath(member.linkname)
244
+ if (
245
+ not member.linkname
246
+ or target.is_absolute()
247
+ or ".." in target.parts
248
+ or target not in regular_files
249
+ or target == member_path
250
+ ):
251
+ raise RuntimeError(
252
+ f"artifact hard link {member.name!r} has unsafe target "
253
+ f"{member.linkname!r}"
254
+ )
255
+ elif not (member.isfile() or member.isdir()):
231
256
  raise RuntimeError(
232
257
  f"artifact member {member.name!r} is a link or special file"
233
258
  )
259
+ if member.isfile():
260
+ regular_files.add(member_path)
261
+ # Check after reading the whole archive, so a later symlink cannot
262
+ # turn an earlier member's parent or a link target into a redirection.
263
+ for member_path in members:
264
+ if any(parent in symlinks for parent in member_path.parents):
265
+ raise RuntimeError(
266
+ f"artifact member {str(member_path)!r} traverses a symlink"
267
+ )
268
+ relative_root = root_path.relative_to("/")
269
+ for member_path, linkname in symlinks.items():
270
+ target = PurePosixPath(linkname)
271
+ if not linkname or target.is_absolute():
272
+ raise RuntimeError(
273
+ f"artifact symlink {str(member_path)!r} has unsafe target "
274
+ f"{linkname!r}"
275
+ )
276
+ resolved = member_path.parent
277
+ if not resolved.is_relative_to(relative_root):
278
+ raise RuntimeError(
279
+ f"artifact symlink {str(member_path)!r} has unsafe target "
280
+ f"{linkname!r}"
281
+ )
282
+ # Walk before normalizing '..': a/../b is unsafe if a is itself
283
+ # a symlink. Missing internal targets are safe (e.g. build outputs).
284
+ for part in target.parts:
285
+ resolved = resolved.parent if part == ".." else resolved / part
286
+ if not resolved.is_relative_to(relative_root) or any(
287
+ path in symlinks for path in (resolved, *resolved.parents)
288
+ ):
289
+ raise RuntimeError(
290
+ f"artifact symlink {str(member_path)!r} has unsafe target "
291
+ f"{linkname!r}"
292
+ )
234
293
  except tarfile.TarError as exc:
235
294
  raise RuntimeError(f"unreadable artifact archive for {root!r}: {exc}") from exc
236
295