verifiers 0.2.2.dev14__tar.gz → 0.2.2.dev16__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 (407) hide show
  1. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/PKG-INFO +1 -1
  2. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/README.md +1 -1
  3. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/README.md +1 -1
  4. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/agent.py +32 -5
  5. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/debug.py +1 -0
  6. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/interception/__init__.py +6 -11
  7. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/interception/server.py +5 -8
  8. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/interception/tunnel/base.py +4 -7
  9. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/mcp/launch.py +36 -8
  10. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/rollout.py +4 -0
  11. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/runtimes/__init__.py +2 -3
  12. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/runtimes/base.py +20 -10
  13. verifiers-0.2.2.dev16/verifiers/v1/runtimes/docker/__init__.py +418 -0
  14. verifiers-0.2.2.dev16/verifiers/v1/runtimes/docker/egress.py +364 -0
  15. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/task.py +7 -0
  16. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/harbor/taskset.py +12 -0
  17. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/utils/compile.py +28 -4
  18. verifiers-0.2.2.dev14/verifiers/v1/runtimes/docker.py +0 -211
  19. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/.gitignore +0 -0
  20. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/LICENSE +0 -0
  21. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/README.md +0 -0
  22. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/pyproject.toml +0 -0
  23. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/__init__.py +0 -0
  24. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/conftest.py +0 -0
  25. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_browser_env.py +0 -0
  26. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_build_script.py +0 -0
  27. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_cli_agent_env.py +0 -0
  28. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_client_auth_errors.py +0 -0
  29. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_client_config.py +0 -0
  30. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_client_multimodal_types.py +0 -0
  31. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_composable_env.py +0 -0
  32. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_context_token_metrics.py +0 -0
  33. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_decorator_ranks.py +0 -0
  34. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_endpoint_registry.py +0 -0
  35. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_env_group.py +0 -0
  36. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_env_server.py +0 -0
  37. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_environment.py +0 -0
  38. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_environment_extra.py +0 -0
  39. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_error_chain.py +0 -0
  40. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_eval_display.py +0 -0
  41. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_eval_utils.py +0 -0
  42. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_gepa_cli.py +0 -0
  43. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_gepa_utils.py +0 -0
  44. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_gym_env.py +0 -0
  45. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_harbor_env_mcp.py +0 -0
  46. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_imports.py +0 -0
  47. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_init_script.py +0 -0
  48. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_install_utils.py +0 -0
  49. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_interception_utils.py +0 -0
  50. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_logging.py +0 -0
  51. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_math_rubric.py +0 -0
  52. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_maybe_think_parser.py +0 -0
  53. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_message_utils.py +0 -0
  54. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_message_utils_multimodal.py +0 -0
  55. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_multiturn_env.py +0 -0
  56. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_nemorl_client.py +0 -0
  57. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_openai_chat_completions_token_client.py +0 -0
  58. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_openai_responses_client.py +0 -0
  59. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_opencode_rlm_env.py +0 -0
  60. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_openenv_client.py +0 -0
  61. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_parser.py +0 -0
  62. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_path_utils.py +0 -0
  63. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_per_turn_timing.py +0 -0
  64. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_pricing_utils.py +0 -0
  65. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_prime_plugin.py +0 -0
  66. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_renderer_client.py +0 -0
  67. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_renderer_e2e.py +0 -0
  68. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_rlm_composable_env.py +0 -0
  69. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_rubric.py +0 -0
  70. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_rubric_group.py +0 -0
  71. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_sandbox_debug_env.py +0 -0
  72. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_sandbox_env.py +0 -0
  73. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_sandbox_mixin.py +0 -0
  74. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_save_utils.py +0 -0
  75. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_setup_script.py +0 -0
  76. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_singleturn_env.py +0 -0
  77. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_stateful_tool_env.py +0 -0
  78. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_think_parser.py +0 -0
  79. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_tool_env.py +0 -0
  80. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_tool_utils.py +0 -0
  81. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_trajectory_processing.py +0 -0
  82. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_tui_info_formatting.py +0 -0
  83. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_types.py +0 -0
  84. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/test_xml_parser.py +0 -0
  85. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/conftest.py +0 -0
  86. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  87. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/fixtures/duet_v1.py +0 -0
  88. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  89. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  90. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  91. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  92. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/fixtures/echo_v0.py +0 -0
  93. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/fixtures/echo_v1.py +0 -0
  94. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/fixtures/pyproject.toml +0 -0
  95. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  96. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/test_color_codeword_tasks.py +0 -0
  97. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/test_configs.py +0 -0
  98. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/test_e2e.py +0 -0
  99. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/test_envs.py +0 -0
  100. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/test_graph.py +0 -0
  101. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/test_judges.py +0 -0
  102. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/test_legacy.py +0 -0
  103. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/test_scoring.py +0 -0
  104. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/test_taskset.py +0 -0
  105. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/tests/v1/test_trace.py +0 -0
  106. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/__init__.py +0 -0
  107. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/cli/__init__.py +0 -0
  108. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/cli/commands/__init__.py +0 -0
  109. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/cli/commands/build.py +0 -0
  110. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/cli/commands/eval.py +0 -0
  111. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/cli/commands/gepa.py +0 -0
  112. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/cli/commands/init.py +0 -0
  113. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/cli/commands/install.py +0 -0
  114. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/cli/commands/setup.py +0 -0
  115. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/cli/plugins/__init__.py +0 -0
  116. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/cli/plugins/prime.py +0 -0
  117. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/cli/tui.py +0 -0
  118. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/clients/__init__.py +0 -0
  119. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/clients/anthropic_messages_client.py +0 -0
  120. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/clients/client.py +0 -0
  121. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  122. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/clients/openai_chat_completions_client.py +0 -0
  123. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  124. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/clients/openai_completions_client.py +0 -0
  125. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/clients/openai_responses_client.py +0 -0
  126. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/clients/renderer_client.py +0 -0
  127. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/decorators.py +0 -0
  128. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/__init__.py +0 -0
  129. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/env_group.py +0 -0
  130. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/environment.py +0 -0
  131. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/README.md +0 -0
  132. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/__init__.py +0 -0
  133. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  134. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/__init__.py +0 -0
  135. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/_filter.py +0 -0
  136. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  137. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/harness.py +0 -0
  138. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  139. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  140. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  141. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  142. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  143. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  144. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  145. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/task.py +0 -0
  146. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  147. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  148. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  149. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  150. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  151. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  152. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  153. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  154. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  155. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  156. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  157. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  158. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  159. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  160. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  161. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  162. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  163. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  164. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  165. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  166. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  167. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  168. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  169. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  170. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  171. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  172. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  173. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  174. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  175. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  176. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  177. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  178. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  179. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  180. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/gym_env.py +0 -0
  181. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  182. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  183. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  184. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/mcp_env.py +0 -0
  185. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/opencode_env.py +0 -0
  186. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  187. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  188. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  189. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/utils/__init__.py +0 -0
  190. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  191. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  192. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/__init__.py +0 -0
  193. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/browser_env/README.md +0 -0
  194. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  195. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  196. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  197. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  198. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  199. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  200. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/openenv_env.py +0 -0
  201. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  202. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/integrations/textarena_env.py +0 -0
  203. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/multiturn_env.py +0 -0
  204. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/python_env.py +0 -0
  205. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/sandbox_env.py +0 -0
  206. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/singleturn_env.py +0 -0
  207. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/stateful_tool_env.py +0 -0
  208. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/envs/tool_env.py +0 -0
  209. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/errors.py +0 -0
  210. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/gepa/__init__.py +0 -0
  211. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/gepa/adapter.py +0 -0
  212. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/gepa/config.py +0 -0
  213. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/gepa/display.py +0 -0
  214. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/gepa/gepa_utils.py +0 -0
  215. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/parsers/__init__.py +0 -0
  216. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/parsers/maybe_think_parser.py +0 -0
  217. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/parsers/parser.py +0 -0
  218. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/parsers/think_parser.py +0 -0
  219. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/parsers/xml_parser.py +0 -0
  220. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/rubrics/__init__.py +0 -0
  221. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  222. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/rubrics/judge_rubric.py +0 -0
  223. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/rubrics/math_rubric.py +0 -0
  224. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/rubrics/rubric.py +0 -0
  225. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/rubrics/rubric_group.py +0 -0
  226. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/scripts/__init__.py +0 -0
  227. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/scripts/build.py +0 -0
  228. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/scripts/eval.py +0 -0
  229. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/scripts/gepa.py +0 -0
  230. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/scripts/init.py +0 -0
  231. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/scripts/install.py +0 -0
  232. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/scripts/setup.py +0 -0
  233. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/scripts/tui.py +0 -0
  234. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/serve/__init__.py +0 -0
  235. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/serve/client/env_client.py +0 -0
  236. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/serve/client/zmq_env_client.py +0 -0
  237. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/serve/server/__init__.py +0 -0
  238. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/serve/server/env_router.py +0 -0
  239. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/serve/server/env_server.py +0 -0
  240. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/serve/server/env_worker.py +0 -0
  241. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/serve/server/zmq_env_server.py +0 -0
  242. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/serve/types.py +0 -0
  243. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/types.py +0 -0
  244. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/__init__.py +0 -0
  245. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/async_utils.py +0 -0
  246. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/client_utils.py +0 -0
  247. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/config_utils.py +0 -0
  248. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/data_utils.py +0 -0
  249. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/display_utils.py +0 -0
  250. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/env_config_utils.py +0 -0
  251. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/env_utils.py +0 -0
  252. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/error_utils.py +0 -0
  253. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/eval_display.py +0 -0
  254. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/eval_utils.py +0 -0
  255. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/heartbeat.py +0 -0
  256. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/import_utils.py +0 -0
  257. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/install_utils.py +0 -0
  258. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/interception_utils.py +0 -0
  259. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/logging_utils.py +0 -0
  260. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/message_utils.py +0 -0
  261. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/metric_utils.py +0 -0
  262. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/path_utils.py +0 -0
  263. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/pricing_utils.py +0 -0
  264. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/process_utils.py +0 -0
  265. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/response_utils.py +0 -0
  266. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/save_utils.py +0 -0
  267. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/serve_utils.py +0 -0
  268. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/thread_utils.py +0 -0
  269. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/threaded_sandbox_client.py +0 -0
  270. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/tool_utils.py +0 -0
  271. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/usage_utils.py +0 -0
  272. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/utils/version_utils.py +0 -0
  273. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/__init__.py +0 -0
  274. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/__init__.py +0 -0
  275. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  276. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/dashboard/base.py +0 -0
  277. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/dashboard/eval.py +0 -0
  278. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/dashboard/replay.py +0 -0
  279. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/dashboard/validate.py +0 -0
  280. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/eval/__init__.py +0 -0
  281. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/eval/main.py +0 -0
  282. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/eval/resume.py +0 -0
  283. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/eval/runner.py +0 -0
  284. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/gepa.py +0 -0
  285. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/init.py +0 -0
  286. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/output.py +0 -0
  287. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/replay.py +0 -0
  288. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/resolve.py +0 -0
  289. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/serve.py +0 -0
  290. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/cli/validate.py +0 -0
  291. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/clients/__init__.py +0 -0
  292. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/clients/client.py +0 -0
  293. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/clients/config.py +0 -0
  294. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/clients/eval.py +0 -0
  295. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/clients/train.py +0 -0
  296. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/configs/__init__.py +0 -0
  297. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/configs/debug.py +0 -0
  298. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/configs/env.py +0 -0
  299. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/configs/eval.py +0 -0
  300. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/configs/init.py +0 -0
  301. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/configs/replay.py +0 -0
  302. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/configs/serve.py +0 -0
  303. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/configs/validate.py +0 -0
  304. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/decorators.py +0 -0
  305. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/dialects/__init__.py +0 -0
  306. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/dialects/anthropic.py +0 -0
  307. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/dialects/base.py +0 -0
  308. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/dialects/chat.py +0 -0
  309. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/dialects/responses.py +0 -0
  310. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/env.py +0 -0
  311. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/envs/__init__.py +0 -0
  312. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  313. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  314. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  315. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/envs/best_of_n/env.py +0 -0
  316. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  317. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/envs/single_agent/env.py +0 -0
  318. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/episode.py +0 -0
  319. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/errors.py +0 -0
  320. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/gepa/__init__.py +0 -0
  321. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/gepa/adapter.py +0 -0
  322. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/gepa/config.py +0 -0
  323. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/gepa/dataset.py +0 -0
  324. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/gepa/reflection.py +0 -0
  325. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/gepa/runner.py +0 -0
  326. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/graph.py +0 -0
  327. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harness.py +0 -0
  328. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/__init__.py +0 -0
  329. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  330. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/bash/harness.py +0 -0
  331. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/bash/program.py +0 -0
  332. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  333. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  334. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  335. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/codex/harness.py +0 -0
  336. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  337. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  338. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  339. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  340. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  341. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/null/__init__.py +0 -0
  342. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/null/harness.py +0 -0
  343. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/null/program.py +0 -0
  344. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  345. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/pi/harness.py +0 -0
  346. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/pool/__init__.py +0 -0
  347. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/pool/harness.py +0 -0
  348. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  349. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  350. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  351. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  352. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  353. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/interception/base.py +0 -0
  354. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/interception/pool.py +0 -0
  355. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  356. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/interception/tunnel/custom.py +0 -0
  357. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/interception/tunnel/prime.py +0 -0
  358. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/judge.py +0 -0
  359. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/judges/__init__.py +0 -0
  360. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/judges/reference.py +0 -0
  361. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/judges/reference.txt +0 -0
  362. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/judges/rubric.py +0 -0
  363. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/judges/rubric.txt +0 -0
  364. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/legacy.py +0 -0
  365. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/loaders.py +0 -0
  366. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/mcp/__init__.py +0 -0
  367. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/mcp/server.py +0 -0
  368. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/mcp/toolset.py +0 -0
  369. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/mcp/user.py +0 -0
  370. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/push.py +0 -0
  371. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/retries.py +0 -0
  372. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/runtimes/limiters.py +0 -0
  373. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/runtimes/modal.py +0 -0
  374. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/runtimes/prime.py +0 -0
  375. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/runtimes/subprocess.py +0 -0
  376. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/scoring.py +0 -0
  377. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/serve/__init__.py +0 -0
  378. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/serve/client.py +0 -0
  379. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/serve/pool.py +0 -0
  380. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/serve/server.py +0 -0
  381. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/serve/types.py +0 -0
  382. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/session.py +0 -0
  383. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/state.py +0 -0
  384. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/taskset.py +0 -0
  385. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/__init__.py +0 -0
  386. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  387. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  388. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  389. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  390. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  391. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  392. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  393. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  394. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/trace.py +0 -0
  395. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/types.py +0 -0
  396. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/utils/__init__.py +0 -0
  397. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/utils/aio.py +0 -0
  398. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/utils/format.py +0 -0
  399. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/utils/generic.py +0 -0
  400. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/utils/git.py +0 -0
  401. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/utils/image.py +0 -0
  402. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/utils/install.py +0 -0
  403. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/utils/interrupt.py +0 -0
  404. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/utils/logging.py +0 -0
  405. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/utils/memory.py +0 -0
  406. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/utils/sampling.py +0 -0
  407. {verifiers-0.2.2.dev14 → verifiers-0.2.2.dev16}/verifiers/v1/utils/version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: verifiers
3
- Version: 0.2.2.dev14
3
+ Version: 0.2.2.dev16
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
@@ -115,7 +115,7 @@ Each taskset provides its own rubric via `get_rubric()`. The rubric owns **all s
115
115
 
116
116
  Use `keep_sandbox_for_scoring=True` on the environment so the sandbox stays alive after the rollout for the rubric to use.
117
117
 
118
- ```
118
+ ```text
119
119
  Rollout completes → sandbox kept alive → rubric.score_rollout() runs tests
120
120
  → rubric.cleanup() deletes sandbox
121
121
  ```
@@ -139,7 +139,7 @@ Drop-in adapter for [OpenEnv](https://github.com/meta-pytorch/OpenEnv) environme
139
139
 
140
140
  The Verifiers adapter uses OpenEnv's public async clients. The bundled OpenEnv project under `proj/` declares its own server dependencies for the sandbox image.
141
141
 
142
- ### Quick Start
142
+ ### OpenEnv Quick Start
143
143
 
144
144
  Initialize an OpenEnv environment with the template:
145
145
 
@@ -26,6 +26,7 @@ from verifiers.v1.mcp import SharedToolServer
26
26
  from verifiers.v1.retries import RetryConfig, backoff, trace_should_retry
27
27
  from verifiers.v1.rollout import RolloutRun
28
28
  from verifiers.v1.runtimes import (
29
+ DockerConfig,
29
30
  Runtime,
30
31
  RuntimeConfig,
31
32
  SubprocessConfig,
@@ -93,11 +94,37 @@ class AgentConfig(BaseConfig):
93
94
  return data
94
95
 
95
96
 
96
- def _check_borrowed_placement(task: Task, runtime: Runtime) -> None:
97
+ def _check_borrowed_placement(
98
+ task: Task, runtime: Runtime, base_config: RuntimeConfig
99
+ ) -> None:
97
100
  """A borrowed box is never re-provisioned, so a task's placement fields can't
98
- be honored. A task `image` on a subprocess box raises (a wiring bug — it goes
99
- to the caller, not the trace); a container box whose image differs only warns,
100
- since placing a run into an existing world is the point of borrowing."""
101
+ be honored. Reject requirements that cannot be applied to the running box; an
102
+ image mismatch on a container only warns, since sharing its world is the point."""
103
+ task_policy = "*" not in task.data.network_allow or bool(task.data.network_block)
104
+ base_docker = base_config if isinstance(base_config, DockerConfig) else None
105
+ if task_policy or (base_docker is not None and base_docker.network_isolated):
106
+ config = runtime.config
107
+ if not isinstance(config, DockerConfig):
108
+ raise ValueError(
109
+ f"task {task.data.idx!r} requires a Docker URL network policy, but "
110
+ f"borrowed runtime {runtime.name!r} is not Docker-backed; use "
111
+ "agent.provision(task)"
112
+ )
113
+ policy_base = (
114
+ base_docker if base_docker is not None else DockerConfig(allow=["*"])
115
+ )
116
+ expected = resolve_runtime_config(policy_base, task)
117
+ assert isinstance(expected, DockerConfig)
118
+ # Do not inherit extra destinations from a box provisioned for another task.
119
+ if set(config.allow) != set(expected.allow) or set(config.block) != set(
120
+ expected.block
121
+ ):
122
+ raise ValueError(
123
+ f"task {task.data.idx!r} requires allow={expected.allow!r} and "
124
+ f"block={expected.block!r}, but borrowed runtime {runtime.name!r} "
125
+ f"has allow={config.allow!r} and block={config.block!r}; use "
126
+ "agent.provision(task)"
127
+ )
101
128
  if task.data.image is None:
102
129
  return
103
130
  if isinstance(runtime.config, SubprocessConfig):
@@ -299,7 +326,7 @@ class Agent:
299
326
  ) -> dict:
300
327
  """Resolve one run's runtime config, pairing checks, timeouts, interception."""
301
328
  if runtime is not None:
302
- _check_borrowed_placement(task, runtime)
329
+ _check_borrowed_placement(task, runtime, self.runtime_config)
303
330
  runtime_config = runtime.config
304
331
  run_is_local = runtime.is_local
305
332
  else:
@@ -230,6 +230,7 @@ async def debug_task(task: Task, config: DebugConfig) -> tuple[Trace, bool]:
230
230
  invoke(task.setup, {"trace": trace, "runtime": runtime}),
231
231
  setup_timeout,
232
232
  )
233
+ await runtime.prepare_execution([])
233
234
  trace.timing.setup.end = time.time()
234
235
 
235
236
  trace.timing.generation.start = time.time()
@@ -34,13 +34,10 @@ def requires_tunnel(
34
34
  server_configs: Iterable[BaseConfig] = (),
35
35
  shared: "Iterable[SharedToolServer]" = (),
36
36
  ) -> bool:
37
- """Whether the interception must be exposed via a tunnel some consumer is off the
38
- host network: the harness itself, a live `shared` server in a remote runtime, or a
39
- tool/user server config placing one there (each reaches the `/state` channel from
40
- its own runtime). Skipped as non-consumers: a `colocated` server (shares the
41
- harness's runtime, covered by `harness_is_local`), a config-`url` server (external —
42
- it connects out), and an `external` shared server (outside the state machinery
43
- entirely). False means every consumer reaches the server at localhost."""
37
+ """Whether interception needs a public tunnel because some consumer cannot use a
38
+ host-local URL: the harness itself, a live `shared` server in a remote runtime, or a
39
+ tool/user server placed there. Colocated servers, configured URLs, and external shared
40
+ servers add no consumer. False means local URL translation is sufficient."""
44
41
  if not harness_is_local:
45
42
  return True
46
43
  if any(not s.external and not s.local for s in shared):
@@ -57,10 +54,8 @@ def make_interception(
57
54
  config: InterceptionConfig, *, requires_tunnel: bool
58
55
  ) -> Interception:
59
56
  """The interception for a config, picked by type (the host-side counterpart to
60
- `make_runtime`). With `requires_tunnel` (some consumer is off the host network — see
61
- the `requires_tunnel` util) each server is exposed via its configured tunnel; without
62
- it they get none and are reached at localhost. The caller computes it (see
63
- `Env._requires_tunnel`)."""
57
+ `make_runtime`). With `requires_tunnel`, each server is exposed through its configured
58
+ tunnel; otherwise it remains on host loopback. The caller computes this requirement."""
64
59
  if isinstance(config, InterceptionServerConfig):
65
60
  return InterceptionServer(config, requires_tunnel)
66
61
  if isinstance(config, StaticInterceptionPoolConfig):
@@ -121,11 +121,9 @@ class InterceptionServerConfig(BaseInterceptionConfig):
121
121
 
122
122
  class InterceptionServer(Interception):
123
123
  """A server that proxies model calls for one or more rollouts — and is itself the
124
- single-server `Interception` (the pools compose several of these). With
125
- `requires_tunnel` (some consumer is off the host network) it mints its configured
126
- tunnel; on `start` it then binds where the tunnel says (`bind_host`/`bind_port`) and
127
- sets `base_url` — the one URL every consumer reaches it at — to the tunnel's public
128
- URL. Without, every consumer is on the host network: it binds loopback, tunnel-free."""
124
+ single-server `Interception` (the pools compose several of these). When a consumer
125
+ needs a public URL, it mints the configured tunnel and binds where that tunnel says;
126
+ otherwise it stays on host loopback."""
129
127
 
130
128
  def __init__(
131
129
  self,
@@ -203,9 +201,8 @@ class InterceptionServer(Interception):
203
201
  self.runner = web.AppRunner(app)
204
202
  await self.runner.setup()
205
203
  self.stack.push_async_callback(self.runner.cleanup)
206
- # No tunnel every consumer shares the host network: bind loopback on any ephemeral
207
- # port. Otherwise the tunnel says where to bind for it to reach the port, and
208
- # `expose` publishes it.
204
+ # Without a tunnel, local URL translation reaches an ephemeral loopback port.
205
+ # Otherwise the tunnel determines the bind address and publishes it.
209
206
  if self.tunnel is None:
210
207
  self.host, bind_port = "127.0.0.1", 0
211
208
  else:
@@ -1,12 +1,9 @@
1
1
  """The Tunnel contract: expose a host interception port to a remote consumer.
2
2
 
3
- The interception server runs on the host. A *local* consumer (host network) reaches it at
4
- localhost no tunnel, whatever the config. A *remote* one needs the port published outward:
5
- that's a `Tunnel`. It says where the server must bind for the tunnel to reach it
6
- (`bind_host`/`bind_port`) and `expose`s the bound port as a public URL. So a tunnel knows
7
- nothing about locality — the caller (`InterceptionServer.start`) uses it only in the remote
8
- case. The host-side counterpart to a `Runtime`: `Runtime.expose` publishes a port *inside* a
9
- sandbox; `Tunnel.expose` a *host* port.
3
+ The interception server runs on the host. Local runtimes use a host-local URL directly or
4
+ through their runtime translation; remote runtimes need the port published outward. A
5
+ `Tunnel` supplies the bind address and exposes that host port as a public URL. It is the
6
+ host-side counterpart to `Runtime.expose`, which publishes a port inside a sandbox.
10
7
  """
11
8
 
12
9
  import contextlib
@@ -23,6 +23,7 @@ from verifiers.v1.errors import RolloutError, ToolsetError, UserError
23
23
  from verifiers.v1.interception.tunnel import PrimeTunnel
24
24
  from verifiers.v1.mcp.server import STATE_SECRET_PARAM, STATE_URL_PARAM, ServerBase
25
25
  from verifiers.v1.runtimes import (
26
+ DockerConfig,
26
27
  Runtime,
27
28
  make_runtime,
28
29
  runtime_is_local,
@@ -238,18 +239,18 @@ async def reachable_url(
238
239
  """Yield the URL a consumer uses to reach the server at (`service`, `port`), over two
239
240
  primitives: `Runtime.expose` (publish a port out of a sandbox) and a host `Tunnel` (reach
240
241
  into the host from a remote runtime). `colocated` = the server shares the consumer's
241
- runtime; `consumer_is_local` = the consumer is on the host network.
242
+ runtime; `consumer_is_local` = the consumer can use a host-local URL without a tunnel.
242
243
 
243
244
  - `colocated` -> localhost (same runtime, in-sandbox or host loopback);
244
245
  - the server runs in a remote sandbox -> its own published URL (`expose`), reachable anywhere;
245
- - else it's on the host network -> localhost to a local consumer, a host tunnel to a remote one."""
246
+ - else it's host-local -> localhost to a local consumer, a host tunnel to a remote one."""
246
247
  if colocated:
247
248
  yield f"http://127.0.0.1:{port}"
248
249
  elif not service.is_local: # in a remote sandbox → it publishes its own port
249
250
  yield await service.expose(port)
250
- elif consumer_is_local: # host network, local consumer → localhost, no tunnel
251
+ elif consumer_is_local: # local consumer → localhost, no public tunnel
251
252
  yield f"http://127.0.0.1:{port}"
252
- else: # host network, remote consumer → a host tunnel publishes the port outward
253
+ else: # remote consumer → a host tunnel publishes the port outward
253
254
  async with PrimeTunnel().expose(port) as url:
254
255
  yield url
255
256
 
@@ -265,8 +266,33 @@ async def serve(
265
266
  state_base: str | None = None,
266
267
  ):
267
268
  cfg = server.config
269
+ colocated = getattr(cfg, "colocated", False)
268
270
  async with contextlib.AsyncExitStack() as stack:
269
- if getattr(cfg, "colocated", False) and harness_runtime is not None:
271
+ # Colocated servers inherit the harness cut. A separately provisioned filtered
272
+ # Docker server has neither that lifecycle nor a published port after isolation;
273
+ # reject it instead of silently leaving its requested policy unenforced.
274
+ if (
275
+ isinstance(cfg.runtime, DockerConfig)
276
+ and cfg.runtime.network_isolated
277
+ and not (colocated and harness_runtime is not None)
278
+ ):
279
+ raise ToolsetError(
280
+ "Docker network policies are supported on the harness runtime; "
281
+ f"server {server.server_name!r} must be colocated or use an "
282
+ "unrestricted Docker runtime"
283
+ )
284
+ if (
285
+ harness_runtime is not None
286
+ and harness_runtime.network_isolated
287
+ and colocated
288
+ and for_host
289
+ ):
290
+ raise UserError(
291
+ "a colocated user simulator is unreachable from the host when "
292
+ "the harness uses a Docker network policy; use a local "
293
+ "(subprocess) user simulator"
294
+ )
295
+ if colocated and harness_runtime is not None:
270
296
  runtime = harness_runtime
271
297
  else:
272
298
  runtime = make_runtime(cfg.runtime)
@@ -307,7 +333,9 @@ async def serve(
307
333
  runtime, port, colocated=colocated, consumer_is_local=consumer_is_local
308
334
  )
309
335
  )
310
- if not for_host and not colocated and harness_runtime is not None:
336
+ if colocated and harness_runtime is not None and runtime.network_isolated:
337
+ base = base.replace("127.0.0.1", "localhost", 1)
338
+ elif not colocated and not for_host and harness_runtime is not None:
311
339
  base = harness_runtime.host_url(base)
312
340
  yield f"{base.rstrip('/')}/mcp"
313
341
 
@@ -406,7 +434,7 @@ async def serve_tools(
406
434
  # Not ours: a pre-existing endpoint with no vf state channel. Pass the URL
407
435
  # through bare — a state tag would be useless, and the per-rollout secret
408
436
  # must not ride the query string to a third-party host.
409
- urls[name] = server.url
437
+ urls[name] = harness_runtime.host_url(server.url)
410
438
  logger.info("tool server '%s' (shared, external): %s", name, server.url)
411
439
  continue
412
440
  url = harness_runtime.host_url(server.url) if server.local else server.url
@@ -422,7 +450,7 @@ async def serve_tools(
422
450
  )
423
451
  cfg = toolset.config
424
452
  if cfg.url:
425
- urls[name] = cfg.url
453
+ urls[name] = harness_runtime.host_url(cfg.url)
426
454
  logger.info("tool server '%s' (remote): %s", name, cfg.url)
427
455
  else:
428
456
  urls[name] = await stack.enter_async_context(
@@ -191,6 +191,7 @@ class RolloutRun:
191
191
  try:
192
192
  if self._owns_runtime:
193
193
  await runtime.start()
194
+ await runtime.prepare_setup()
194
195
  now = time.time()
195
196
  self.trace.timing.boot.end = now
196
197
  self.trace.timing.setup.start = now
@@ -251,6 +252,9 @@ class RolloutRun:
251
252
  "conversation; set task.prompt or declare a simulator "
252
253
  "class on Task.user"
253
254
  )
255
+ # Setup and service provisioning are complete. Apply the runtime's
256
+ # execution policy while preserving the framework routes the agent uses.
257
+ await runtime.prepare_execution([self._endpoint, *self._urls.values()])
254
258
  except Exception as e:
255
259
  self.fail(e)
256
260
  return False
@@ -45,9 +45,8 @@ def make_runtime(config: RuntimeConfig, name: str | None = None) -> Runtime:
45
45
 
46
46
 
47
47
  def runtime_is_local(config: RuntimeConfig) -> bool:
48
- """Whether a runtime of this config shares the host network (so a program inside it reaches a
49
- host service at localhost, no tunnel) — read off the runtime class, without provisioning one.
50
- The interception / tool serving use it to decide whether to tunnel their host port."""
48
+ """Whether a runtime of this config exchanges host-local URLs without a public
49
+ tunnel, read off the runtime class without provisioning one."""
51
50
  return _runtime_cls(config).is_local
52
51
 
53
52
 
@@ -103,10 +103,9 @@ class BaseRuntimeInfo(BaseConfig):
103
103
 
104
104
  class Runtime(ABC):
105
105
  is_local: ClassVar[bool] = True
106
- """Whether this runtime shares the host network a program inside it reaches a host service
107
- at localhost (no tunnel) and a service inside it is reachable at localhost. True for
108
- subprocess / docker(--network host); remote runtimes (modal/prime) override to False (they
109
- need a tunnel each way: a host `Tunnel` (interception.tunnel) inward, `expose` outward)."""
106
+ """Whether this runtime exchanges host-local URLs without a public tunnel. True for
107
+ subprocess and Docker (directly or through Docker's policy proxy); remote runtimes
108
+ override to False and use a host `Tunnel` inward plus `expose` outward."""
110
109
 
111
110
  info: BaseRuntimeInfo
112
111
 
@@ -243,19 +242,30 @@ class Runtime(ABC):
243
242
  """The URL a program inside this runtime uses to reach a host-bound `url`."""
244
243
  return url
245
244
 
245
+ async def prepare_setup(self) -> None:
246
+ """Claim the runtime for trusted setup; restricted runtimes may reject reuse."""
247
+
248
+ async def prepare_execution(self, routes: list[str]) -> None:
249
+ """Last setup step, right before the agent starts. Restricted runtimes enforce
250
+ their policy here while keeping the interception and MCP `routes` reachable."""
251
+
252
+ @property
253
+ def network_isolated(self) -> bool:
254
+ """Whether the agent phase uses filtered networking (see `prepare_execution`)."""
255
+ return False
256
+
246
257
  @property
247
258
  def published_port(self) -> int | None:
248
259
  """A fixed port this runtime exposes to the outside at startup, declared up front to the
249
260
  provider (Modal forwards only ports named at `Sandbox.create`). When set, a server placed
250
261
  here binds it instead of a host-chosen free port, and `expose` returns its public URL.
251
- `None` for host-networked runtimes (subprocess/docker), which pick a free port and are
252
- reached over the shared host network."""
262
+ `None` for local runtimes (subprocess/docker), which pick a free port."""
253
263
  return None
254
264
 
255
265
  async def expose(self, port: int) -> str | None:
256
266
  """Publish a port running *inside this runtime* to a URL reachable from the host/outside,
257
- or None when local (it's on the host network reach it at localhost). A remote runtime
258
- overrides this with the provider's native port exposure (modal `tunnels()`, prime
259
- `client.expose`), torn down with the sandbox in `stop()`. The reverse of a host `Tunnel`
260
- (interception.tunnel, which reaches a host port from inside a runtime)."""
267
+ or None when local. A remote runtime overrides this with the provider's native port
268
+ exposure (modal `tunnels()`, prime `client.expose`), torn down with the sandbox in
269
+ `stop()`. The reverse of a host `Tunnel` (interception.tunnel, which reaches a host
270
+ port from inside a runtime)."""
261
271
  return None