verifiers 0.2.2.dev93__tar.gz → 0.2.2.dev95__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 (430) hide show
  1. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/PKG-INFO +1 -1
  2. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/test_e2e.py +2 -1
  3. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/harnesses/rlm.py +2 -3
  4. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/utils/git_checkout_cache.py +2 -1
  5. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/path_utils.py +12 -0
  6. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/acp/runner.py +39 -17
  7. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/interception/tunnel/prime.py +2 -2
  8. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/runtimes/limiters.py +19 -15
  9. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/runtimes/modal.py +1 -1
  10. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/runtimes/prime.py +1 -1
  11. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/.gitignore +0 -0
  12. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/LICENSE +0 -0
  13. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/README.md +0 -0
  14. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/pyproject.toml +0 -0
  15. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/__init__.py +0 -0
  16. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/conftest.py +0 -0
  17. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_browser_env.py +0 -0
  18. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_build_script.py +0 -0
  19. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_cli_agent_env.py +0 -0
  20. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_client_auth_errors.py +0 -0
  21. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_client_config.py +0 -0
  22. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_client_multimodal_types.py +0 -0
  23. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_composable_env.py +0 -0
  24. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_context_token_metrics.py +0 -0
  25. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_decorator_ranks.py +0 -0
  26. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_endpoint_registry.py +0 -0
  27. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_env_group.py +0 -0
  28. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_env_server.py +0 -0
  29. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_environment.py +0 -0
  30. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_environment_extra.py +0 -0
  31. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_error_chain.py +0 -0
  32. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_eval_display.py +0 -0
  33. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_eval_utils.py +0 -0
  34. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_gepa_cli.py +0 -0
  35. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_gepa_utils.py +0 -0
  36. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_gym_env.py +0 -0
  37. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_harbor_env_mcp.py +0 -0
  38. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_imports.py +0 -0
  39. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_init_script.py +0 -0
  40. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_install_utils.py +0 -0
  41. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_interception_utils.py +0 -0
  42. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_logging.py +0 -0
  43. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_math_rubric.py +0 -0
  44. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_maybe_think_parser.py +0 -0
  45. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_message_utils.py +0 -0
  46. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_message_utils_multimodal.py +0 -0
  47. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_multiturn_env.py +0 -0
  48. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_nemorl_client.py +0 -0
  49. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_openai_chat_completions_token_client.py +0 -0
  50. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_openai_responses_client.py +0 -0
  51. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_opencode_rlm_env.py +0 -0
  52. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_openenv_client.py +0 -0
  53. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_parser.py +0 -0
  54. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_path_utils.py +0 -0
  55. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_per_turn_timing.py +0 -0
  56. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_pricing_utils.py +0 -0
  57. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_prime_plugin.py +0 -0
  58. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_renderer_client.py +0 -0
  59. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_renderer_e2e.py +0 -0
  60. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_rlm_composable_env.py +0 -0
  61. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_rubric.py +0 -0
  62. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_rubric_group.py +0 -0
  63. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_sandbox_debug_env.py +0 -0
  64. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_sandbox_env.py +0 -0
  65. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_sandbox_mixin.py +0 -0
  66. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_save_utils.py +0 -0
  67. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_setup_script.py +0 -0
  68. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_singleturn_env.py +0 -0
  69. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_stateful_tool_env.py +0 -0
  70. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_think_parser.py +0 -0
  71. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_tool_env.py +0 -0
  72. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_tool_utils.py +0 -0
  73. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_trajectory_processing.py +0 -0
  74. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_tui_info_formatting.py +0 -0
  75. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_types.py +0 -0
  76. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/test_xml_parser.py +0 -0
  77. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/conftest.py +0 -0
  78. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/fixtures/counter_tool_v1.py +0 -0
  79. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/fixtures/duet_v1.py +0 -0
  80. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/fixtures/echo_acp_resume_v1.py +0 -0
  81. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/fixtures/echo_agentic_v1.py +0 -0
  82. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/fixtures/echo_multi_v0.py +0 -0
  83. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/fixtures/echo_tool_v1.py +0 -0
  84. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/fixtures/echo_user_sim_v1.py +0 -0
  85. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/fixtures/echo_v0.py +0 -0
  86. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/fixtures/echo_v1.py +0 -0
  87. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/fixtures/pyproject.toml +0 -0
  88. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/fixtures/tool_response_image_v1.py +0 -0
  89. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/test_color_codeword_tasks.py +0 -0
  90. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/test_configs.py +0 -0
  91. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/test_envs.py +0 -0
  92. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/test_graph.py +0 -0
  93. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/test_judges.py +0 -0
  94. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/test_legacy.py +0 -0
  95. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/test_scoring.py +0 -0
  96. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/test_taskset.py +0 -0
  97. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/tests/v1/test_trace.py +0 -0
  98. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/__init__.py +0 -0
  99. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/cli/__init__.py +0 -0
  100. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/cli/commands/__init__.py +0 -0
  101. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/cli/commands/build.py +0 -0
  102. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/cli/commands/eval.py +0 -0
  103. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/cli/commands/gepa.py +0 -0
  104. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/cli/commands/init.py +0 -0
  105. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/cli/commands/install.py +0 -0
  106. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/cli/commands/setup.py +0 -0
  107. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/cli/plugins/__init__.py +0 -0
  108. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/cli/plugins/prime.py +0 -0
  109. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/cli/tui.py +0 -0
  110. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/clients/__init__.py +0 -0
  111. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/clients/anthropic_messages_client.py +0 -0
  112. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/clients/client.py +0 -0
  113. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  114. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/clients/openai_chat_completions_client.py +0 -0
  115. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  116. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/clients/openai_completions_client.py +0 -0
  117. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/clients/openai_responses_client.py +0 -0
  118. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/clients/renderer_client.py +0 -0
  119. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/decorators.py +0 -0
  120. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/__init__.py +0 -0
  121. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/env_group.py +0 -0
  122. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/environment.py +0 -0
  123. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/README.md +0 -0
  124. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/__init__.py +0 -0
  125. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  126. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/README.md +0 -0
  127. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/__init__.py +0 -0
  128. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/_filter.py +0 -0
  129. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  130. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/harness.py +0 -0
  131. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/harnesses/__init__.py +0 -0
  132. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +0 -0
  133. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/harnesses/opencode.py +0 -0
  134. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  135. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/sandbox_debug_env.py +0 -0
  136. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  137. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/task.py +0 -0
  138. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  139. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  140. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  141. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  142. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  143. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/harbor/cli_gym.py +0 -0
  144. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  145. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/harbor/terminal_lego.py +0 -0
  146. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  147. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  148. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  149. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  150. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  151. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  152. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  153. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  154. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  155. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  156. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  157. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  158. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  159. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  160. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  161. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  162. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  163. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  164. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  165. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  166. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  167. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  168. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  169. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  170. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  171. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  172. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/gym_env.py +0 -0
  173. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  174. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  175. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  176. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/mcp_env.py +0 -0
  177. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/opencode_env.py +0 -0
  178. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  179. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  180. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  181. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/utils/__init__.py +0 -0
  182. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  183. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/integrations/README.md +0 -0
  184. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/integrations/__init__.py +0 -0
  185. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/integrations/browser_env/README.md +0 -0
  186. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  187. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  188. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  189. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  190. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  191. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  192. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/integrations/openenv_env.py +0 -0
  193. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  194. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/integrations/textarena_env.py +0 -0
  195. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/multiturn_env.py +0 -0
  196. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/python_env.py +0 -0
  197. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/sandbox_env.py +0 -0
  198. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/singleturn_env.py +0 -0
  199. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/stateful_tool_env.py +0 -0
  200. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/envs/tool_env.py +0 -0
  201. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/errors.py +0 -0
  202. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/gepa/__init__.py +0 -0
  203. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/gepa/adapter.py +0 -0
  204. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/gepa/config.py +0 -0
  205. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/gepa/display.py +0 -0
  206. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/gepa/gepa_utils.py +0 -0
  207. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/parsers/__init__.py +0 -0
  208. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/parsers/maybe_think_parser.py +0 -0
  209. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/parsers/parser.py +0 -0
  210. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/parsers/think_parser.py +0 -0
  211. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/parsers/xml_parser.py +0 -0
  212. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/rubrics/__init__.py +0 -0
  213. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  214. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/rubrics/judge_rubric.py +0 -0
  215. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/rubrics/math_rubric.py +0 -0
  216. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/rubrics/rubric.py +0 -0
  217. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/rubrics/rubric_group.py +0 -0
  218. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/scripts/__init__.py +0 -0
  219. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/scripts/build.py +0 -0
  220. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/scripts/eval.py +0 -0
  221. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/scripts/gepa.py +0 -0
  222. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/scripts/init.py +0 -0
  223. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/scripts/install.py +0 -0
  224. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/scripts/setup.py +0 -0
  225. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/scripts/tui.py +0 -0
  226. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/serve/__init__.py +0 -0
  227. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/serve/client/env_client.py +0 -0
  228. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/serve/client/zmq_env_client.py +0 -0
  229. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/serve/server/__init__.py +0 -0
  230. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/serve/server/env_router.py +0 -0
  231. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/serve/server/env_server.py +0 -0
  232. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/serve/server/env_worker.py +0 -0
  233. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/serve/server/zmq_env_server.py +0 -0
  234. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/serve/types.py +0 -0
  235. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/types.py +0 -0
  236. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/__init__.py +0 -0
  237. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/async_utils.py +0 -0
  238. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/client_utils.py +0 -0
  239. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/config_utils.py +0 -0
  240. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/data_utils.py +0 -0
  241. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/display_utils.py +0 -0
  242. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/env_config_utils.py +0 -0
  243. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/env_utils.py +0 -0
  244. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/error_utils.py +0 -0
  245. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/eval_display.py +0 -0
  246. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/eval_utils.py +0 -0
  247. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/heartbeat.py +0 -0
  248. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/import_utils.py +0 -0
  249. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/install_utils.py +0 -0
  250. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/interception_utils.py +0 -0
  251. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/logging_utils.py +0 -0
  252. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/message_utils.py +0 -0
  253. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/metric_utils.py +0 -0
  254. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/pricing_utils.py +0 -0
  255. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/process_utils.py +0 -0
  256. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/response_utils.py +0 -0
  257. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/save_utils.py +0 -0
  258. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/serve_utils.py +0 -0
  259. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/thread_utils.py +0 -0
  260. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/threaded_sandbox_client.py +0 -0
  261. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/tool_utils.py +0 -0
  262. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/usage_utils.py +0 -0
  263. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/utils/version_utils.py +0 -0
  264. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/__init__.py +0 -0
  265. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/acp/__init__.py +0 -0
  266. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/agent.py +0 -0
  267. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/cli/__init__.py +0 -0
  268. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/cli/dashboard/__init__.py +0 -0
  269. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/cli/dashboard/base.py +0 -0
  270. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/cli/dashboard/eval.py +0 -0
  271. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/cli/dashboard/replay.py +0 -0
  272. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/cli/dashboard/validate.py +0 -0
  273. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/cli/debug.py +0 -0
  274. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/cli/eval/__init__.py +0 -0
  275. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/cli/eval/main.py +0 -0
  276. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/cli/eval/resume.py +0 -0
  277. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/cli/eval/runner.py +0 -0
  278. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/cli/gepa.py +0 -0
  279. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/cli/init.py +0 -0
  280. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/cli/output.py +0 -0
  281. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/cli/replay.py +0 -0
  282. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/cli/resolve.py +0 -0
  283. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/cli/validate.py +0 -0
  284. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/clients/__init__.py +0 -0
  285. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/clients/base.py +0 -0
  286. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/clients/client.py +0 -0
  287. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/clients/eval.py +0 -0
  288. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/clients/train.py +0 -0
  289. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/__init__.py +0 -0
  290. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/agent.py +0 -0
  291. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/cli/__init__.py +0 -0
  292. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/cli/debug.py +0 -0
  293. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/cli/env.py +0 -0
  294. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/cli/eval.py +0 -0
  295. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/cli/init.py +0 -0
  296. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/cli/replay.py +0 -0
  297. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/cli/validate.py +0 -0
  298. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/client.py +0 -0
  299. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/env.py +0 -0
  300. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/harness.py +0 -0
  301. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/judge.py +0 -0
  302. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/legacy.py +0 -0
  303. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/retries.py +0 -0
  304. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/serve.py +0 -0
  305. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/task.py +0 -0
  306. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/configs/taskset.py +0 -0
  307. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/dialects/__init__.py +0 -0
  308. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/dialects/anthropic.py +0 -0
  309. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/dialects/base.py +0 -0
  310. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/dialects/chat.py +0 -0
  311. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/dialects/responses.py +0 -0
  312. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/env.py +0 -0
  313. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/envs/__init__.py +0 -0
  314. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/envs/agentic_judge/__init__.py +0 -0
  315. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/envs/agentic_judge/env.py +0 -0
  316. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/envs/best_of_n/__init__.py +0 -0
  317. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/envs/best_of_n/env.py +0 -0
  318. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/envs/shared_agentic_judge/__init__.py +0 -0
  319. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/envs/single_agent/__init__.py +0 -0
  320. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/envs/single_agent/env.py +0 -0
  321. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/envs/user_sim/__init__.py +0 -0
  322. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/envs/user_sim/env.py +0 -0
  323. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/episode.py +0 -0
  324. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/errors.py +0 -0
  325. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/gepa/__init__.py +0 -0
  326. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/gepa/adapter.py +0 -0
  327. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/gepa/config.py +0 -0
  328. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/gepa/dataset.py +0 -0
  329. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/gepa/reflection.py +0 -0
  330. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/gepa/runner.py +0 -0
  331. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/graph.py +0 -0
  332. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harness.py +0 -0
  333. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/__init__.py +0 -0
  334. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/bash/__init__.py +0 -0
  335. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/bash/harness.py +0 -0
  336. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/bash/program.py +0 -0
  337. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/browser_use/__init__.py +0 -0
  338. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/browser_use/harness.py +0 -0
  339. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/browser_use/program.py +0 -0
  340. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/claude_code/__init__.py +0 -0
  341. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/claude_code/harness.py +0 -0
  342. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/codex/__init__.py +0 -0
  343. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/codex/harness.py +0 -0
  344. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/hermes_agent/__init__.py +0 -0
  345. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/hermes_agent/harness.py +0 -0
  346. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/hermes_agent/program.py +0 -0
  347. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/kimi_code/__init__.py +0 -0
  348. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/kimi_code/harness.py +0 -0
  349. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/mini_swe_agent/__init__.py +0 -0
  350. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/mini_swe_agent/harness.py +0 -0
  351. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/mini_swe_agent/program.py +0 -0
  352. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/node.py +0 -0
  353. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/null/__init__.py +0 -0
  354. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/null/harness.py +0 -0
  355. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/null/program.py +0 -0
  356. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/openclaw/__init__.py +0 -0
  357. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/openclaw/harness.py +0 -0
  358. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/pi/__init__.py +0 -0
  359. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/pi/harness.py +0 -0
  360. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/pool/__init__.py +0 -0
  361. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/pool/harness.py +0 -0
  362. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/rlm/__init__.py +0 -0
  363. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/rlm/harness.py +0 -0
  364. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/terminus_2/__init__.py +0 -0
  365. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/terminus_2/harness.py +0 -0
  366. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/harnesses/terminus_2/program.py +0 -0
  367. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/interception/__init__.py +0 -0
  368. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/interception/base.py +0 -0
  369. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/interception/pool.py +0 -0
  370. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/interception/server.py +0 -0
  371. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/interception/tunnel/__init__.py +0 -0
  372. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/interception/tunnel/base.py +0 -0
  373. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/interception/tunnel/custom.py +0 -0
  374. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/judge.py +0 -0
  375. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/judges/__init__.py +0 -0
  376. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/judges/reference.py +0 -0
  377. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/judges/reference.txt +0 -0
  378. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/judges/rubric.py +0 -0
  379. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/judges/rubric.txt +0 -0
  380. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/legacy.py +0 -0
  381. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/mcp/__init__.py +0 -0
  382. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/mcp/launch.py +0 -0
  383. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/mcp/server.py +0 -0
  384. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/mcp/toolset.py +0 -0
  385. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/rollout.py +0 -0
  386. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/runtimes/__init__.py +0 -0
  387. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/runtimes/base.py +0 -0
  388. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/runtimes/docker/__init__.py +0 -0
  389. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/runtimes/docker/egress.py +0 -0
  390. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/runtimes/subprocess.py +0 -0
  391. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/serve/__init__.py +0 -0
  392. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/serve/client.py +0 -0
  393. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/serve/pool.py +0 -0
  394. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/serve/server.py +0 -0
  395. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/serve/types.py +0 -0
  396. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/session.py +0 -0
  397. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/state.py +0 -0
  398. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/task.py +0 -0
  399. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/taskset.py +0 -0
  400. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/tasksets/__init__.py +0 -0
  401. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/tasksets/harbor/__init__.py +0 -0
  402. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/tasksets/harbor/env.py +0 -0
  403. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/tasksets/harbor/taskset.py +0 -0
  404. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/tasksets/lean/__init__.py +0 -0
  405. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/tasksets/lean/scoring.py +0 -0
  406. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/tasksets/lean/taskset.py +0 -0
  407. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/tasksets/openenv/__init__.py +0 -0
  408. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/tasksets/openenv/taskset.py +0 -0
  409. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/tasksets/textarena/__init__.py +0 -0
  410. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/tasksets/textarena/taskset.py +0 -0
  411. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/trace.py +0 -0
  412. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/types.py +0 -0
  413. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/utils/__init__.py +0 -0
  414. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/utils/aio.py +0 -0
  415. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/utils/artifacts.py +0 -0
  416. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/utils/compile.py +0 -0
  417. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/utils/decorators.py +0 -0
  418. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/utils/format.py +0 -0
  419. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/utils/generic.py +0 -0
  420. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/utils/git.py +0 -0
  421. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/utils/image.py +0 -0
  422. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/utils/install.py +0 -0
  423. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/utils/interrupt.py +0 -0
  424. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/utils/loaders.py +0 -0
  425. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/utils/logging.py +0 -0
  426. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/utils/memory.py +0 -0
  427. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/utils/platform.py +0 -0
  428. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/utils/retries.py +0 -0
  429. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/verifiers/v1/utils/score.py +0 -0
  430. {verifiers-0.2.2.dev93 → verifiers-0.2.2.dev95}/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.dev93
3
+ Version: 0.2.2.dev95
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
@@ -231,11 +231,12 @@ async def test_acp_resume_with_tool(run_v1, harness, harness_runtime, tmp_path):
231
231
  assert trace.ok, trace.errors
232
232
  assert trace.stop_condition == "user_closed"
233
233
  assert trace.rewards["resumed"].score == 1.0
234
- assert trace.tools # ACP-native tools, or Pi's MCP adapter meta-tool
235
234
  segments = trace.info["acp_segments"]
236
235
  assert len(segments) == 2
237
236
  assert segments[0]["terminated"] is False
238
237
  assert segments[1]["terminated"] is False
238
+ # Native MCP tools need not appear in the intercepted model request that
239
+ # populates trace.tools; the ACP transcript is the source of truth for use.
239
240
  assert "tool" in segments[1]["roles"]
240
241
  assert segments[1]["tool_outputs"]
241
242
  if harness == "rlm":
@@ -15,6 +15,7 @@ from verifiers.envs.experimental.utils.git_checkout_cache import (
15
15
  validate_git_checkout,
16
16
  )
17
17
  from verifiers.types import Messages, State, SystemMessage, TrajectoryStep
18
+ from verifiers.utils.path_utils import CACHE_DIR
18
19
 
19
20
  DEFAULT_RLM_REPO_URL = "github.com/PrimeIntellect-ai/rlm-harness.git"
20
21
  DEFAULT_RLM_REF = "main"
@@ -24,9 +25,7 @@ DEFAULT_RLM_MAX_DEPTH = 0
24
25
  DEFAULT_APPEND_TO_SYSTEM_PROMPT_PATH = "/task/append_to_system_prompt.txt"
25
26
  DEFAULT_RLM_CHECKOUT_PATH = "/tmp/rlm-checkout"
26
27
  DEFAULT_RLM_CHECKOUT_UPLOAD_NAME = "rlm_checkout"
27
- DEFAULT_RLM_LOCAL_CHECKOUT_CACHE_ROOT = (
28
- Path.home() / ".cache" / "verifiers" / "rlm-checkouts"
29
- )
28
+ DEFAULT_RLM_LOCAL_CHECKOUT_CACHE_ROOT = CACHE_DIR / "rlm-checkouts"
30
29
  _REQUIRED_CHECKOUT_FILES = ("install.sh", "pyproject.toml")
31
30
 
32
31
  COMPACTION_BOUNDARY_MARKER = "--- context compacted ---"
@@ -16,6 +16,7 @@ from verifiers.envs.experimental.utils.file_locks import (
16
16
  exclusive_path_lock,
17
17
  sibling_lock_path,
18
18
  )
19
+ from verifiers.utils.path_utils import CACHE_DIR
19
20
 
20
21
  _IN_USE_LOCK_SUFFIX = ".in-use.lock"
21
22
 
@@ -23,7 +24,7 @@ _IN_USE_LOCK_SUFFIX = ".in-use.lock"
23
24
  # resolved checkout's in-use lock file. See ``_acquire_in_use_lock``.
24
25
  _held_in_use_locks: dict[Path, IO] = {}
25
26
 
26
- DEFAULT_GIT_CHECKOUT_CACHE_ROOT = Path.home() / ".cache" / "verifiers" / "git-checkouts"
27
+ DEFAULT_GIT_CHECKOUT_CACHE_ROOT = CACHE_DIR / "git-checkouts"
27
28
  _FULL_COMMIT_SHA_RE = re.compile(r"^[0-9a-fA-F]{40}$")
28
29
 
29
30
  logger = logging.getLogger(__name__)
@@ -9,6 +9,18 @@ from verifiers.types import EvalConfig
9
9
  logger = logging.getLogger(__name__)
10
10
 
11
11
 
12
+ def home_dir() -> Path:
13
+ """Best-effort home directory; fall back to the temp dir so import never fails."""
14
+ try:
15
+ return Path.home()
16
+ except RuntimeError:
17
+ return Path(tempfile.gettempdir())
18
+
19
+
20
+ CACHE_DIR = home_dir() / ".cache" / "verifiers"
21
+ """User-local cache root for verifiers-managed state."""
22
+
23
+
12
24
  def write_temp_file(content: str, suffix: str = ".txt") -> str:
13
25
  """Write content to a named temporary file and return its path.
14
26
 
@@ -36,6 +36,7 @@ from acp.schema import (
36
36
  )
37
37
 
38
38
  MAX_PACKET_BYTES = 128 * 1024 * 1024
39
+ LATE_UPDATE_GRACE_SECONDS = 1.0
39
40
 
40
41
 
41
42
  class VerifiersACPClient(Client):
@@ -43,6 +44,7 @@ class VerifiersACPClient(Client):
43
44
  self.visible_reply = ""
44
45
  self.message_id: str | None = None
45
46
  self.tool_calls: dict[str, str] = {}
47
+ self.output_changed = asyncio.Condition()
46
48
 
47
49
  def reset(self) -> None:
48
50
  self.visible_reply = ""
@@ -50,22 +52,23 @@ class VerifiersACPClient(Client):
50
52
  self.tool_calls = {}
51
53
 
52
54
  async def session_update(self, session_id: str, update: Any, **kwargs: Any) -> None:
53
- if isinstance(update, ToolCall):
54
- self.tool_calls[update.tool_call_id] = update.status or "pending"
55
- return
56
- if isinstance(update, ToolCallUpdate):
57
- if update.status:
58
- self.tool_calls[update.tool_call_id] = update.status
59
- return
60
- if not isinstance(update, AgentMessageChunk) or not isinstance(
61
- update.content, TextContentBlock
62
- ):
63
- return
64
- message_id = getattr(update, "message_id", None)
65
- if message_id is not None and message_id != self.message_id:
66
- self.visible_reply = ""
67
- self.message_id = message_id
68
- self.visible_reply += update.content.text
55
+ async with self.output_changed:
56
+ if isinstance(update, ToolCall):
57
+ self.tool_calls[update.tool_call_id] = update.status or "pending"
58
+ elif isinstance(update, ToolCallUpdate):
59
+ if update.status:
60
+ self.tool_calls[update.tool_call_id] = update.status
61
+ elif isinstance(update, AgentMessageChunk) and isinstance(
62
+ update.content, TextContentBlock
63
+ ):
64
+ message_id = getattr(update, "message_id", None)
65
+ if message_id is not None and message_id != self.message_id:
66
+ self.visible_reply = ""
67
+ self.message_id = message_id
68
+ self.visible_reply += update.content.text
69
+ else:
70
+ return
71
+ self.output_changed.notify_all()
69
72
 
70
73
  async def request_permission(
71
74
  self,
@@ -172,6 +175,25 @@ async def prompt(
172
175
  except RequestError as error:
173
176
  detail = error.data.get("details") if isinstance(error.data, dict) else None
174
177
  raise RuntimeError(detail or str(error)) from error
178
+
179
+ # ACP 0.11 dispatches notifications in background tasks but resolves a request
180
+ # response directly in its receive loop. An agent that sends its final
181
+ # session/update immediately before session/prompt returns can therefore wake
182
+ # this coroutine before the update handler has run. Wait specifically for text:
183
+ # a completed tool update may also arrive first and must not hide a later reply.
184
+ def has_visible_reply() -> bool:
185
+ return bool(client.visible_reply.strip())
186
+
187
+ if not has_visible_reply():
188
+ async with client.output_changed:
189
+ try:
190
+ await asyncio.wait_for(
191
+ client.output_changed.wait_for(has_visible_reply),
192
+ timeout=LATE_UPDATE_GRACE_SECONDS,
193
+ )
194
+ except asyncio.TimeoutError: # noqa: UP041 - Python 3.10 compatibility
195
+ pass
196
+
175
197
  tool_statuses = list(client.tool_calls.values())
176
198
  completed_tool_turn = (
177
199
  config.get("allow_empty_tool_reply", False)
@@ -179,7 +201,7 @@ async def prompt(
179
201
  and bool(tool_statuses)
180
202
  and all(status in ("completed", "failed") for status in tool_statuses)
181
203
  )
182
- if not client.visible_reply.strip() and not completed_tool_turn:
204
+ if not has_visible_reply() and not completed_tool_turn:
183
205
  raise RuntimeError(
184
206
  "ACP agent produced no visible reply "
185
207
  f"(stop_reason={response.stop_reason}, tool_statuses={tool_statuses})"
@@ -13,7 +13,7 @@ from verifiers.v1.runtimes.limiters import creation_limiter
13
13
  from verifiers.v1.utils.aio import run_shielded
14
14
 
15
15
  # The prime_tunnel service caps tunnel starts at 512/min per API token — a property of the
16
- # tunnel service, shared by every process on the host that opens one. One host-global
16
+ # tunnel service, shared by every process for the user that opens one. One user-global
17
17
  # limiter, not a per-runtime config knob.
18
18
  _TUNNELS_PER_MIN = 512
19
19
  TUNNEL_LIMITER = creation_limiter(_TUNNELS_PER_MIN / 60, "prime-tunnel")
@@ -30,7 +30,7 @@ class PrimeTunnel(Tunnel[PrimeTunnelConfig]):
30
30
  @contextlib.asynccontextmanager
31
31
  async def expose(self, port: int) -> AsyncIterator[str]:
32
32
  """Bridge the host `port` to a public URL via prime_tunnel (frpc). Tunnel creation
33
- is network-bound and globally rate-capped (512/min, host-wide via the shared
33
+ is network-bound and globally rate-capped (512/min, user-wide via the shared
34
34
  `TUNNEL_LIMITER`), so transient failures are retried; a terminal one raises
35
35
  `TunnelError`. The tunnel is torn down on exit."""
36
36
  from prime_tunnel import Tunnel as TunnelClient
@@ -1,41 +1,45 @@
1
- """Host-global creation-rate limiters for the remote runtimes.
1
+ """User-global creation-rate limiters for the remote runtimes.
2
2
 
3
- A leaky bucket backed by a lock file, so a provider's per-account creation rate (Modal
4
- sandboxes, Prime tunnels) is enforced across EVERY process on the host the single-process
5
- eval and all the elastically-spawned env-server worker processes alike not just within one
6
- process. So the configured rate is the actual account-wide rate (assuming one env-server
7
- host). Keyed by name: one bucket file per name, shared by every process (and run) on the host.
3
+ A leaky bucket backed by a lock file under the user cache (``~/.cache/verifiers``, falling
4
+ back to the temp dir when no home is resolvable), so a provider's per-account creation rate
5
+ (Modal sandboxes, Prime tunnels) is enforced across EVERY process for the user
6
+ the single-process eval and all the elastically-spawned env-server worker processes alike — not
7
+ just within one process. Keyed by name: one bucket file per name, shared by every process (and
8
+ run) for the user.
8
9
  """
9
10
 
10
11
  import asyncio
11
12
  import fcntl
12
13
  import os
13
- import tempfile
14
14
  import time
15
15
  from typing import Self
16
16
 
17
- _LIMITER_DIR = os.path.join(tempfile.gettempdir(), "vf-rate-limiters")
17
+ from verifiers.utils.path_utils import CACHE_DIR
18
+
19
+ LIMITER_DIR = CACHE_DIR / "limiter"
18
20
 
19
21
 
20
22
  class CreationLimiter:
21
23
  """An async leaky bucket shared across processes via a lock file: each `async with`
22
24
  reserves the next `1/per_sec`-spaced slot (advancing the on-disk cursor under an exclusive
23
- flock) and sleeps until it, so the aggregate creation rate across all host processes stays
24
- at `per_sec`. The reservation runs off the event loop; the wait does not hold the lock."""
25
+ flock) and sleeps until it, so the aggregate creation rate across all of the user's
26
+ processes stays at `per_sec`. The reservation runs off the event loop; the wait does not
27
+ hold the lock."""
25
28
 
26
29
  def __init__(self, name: str, per_sec: float) -> None:
27
30
  self._interval = 1 / per_sec
28
- self._path = os.path.join(_LIMITER_DIR, f"{name}.bucket")
31
+ self._path = LIMITER_DIR / f"{name}.bucket"
29
32
 
30
33
  def _reserve(self) -> float:
31
- os.makedirs(_LIMITER_DIR, exist_ok=True)
32
- # monotonic is host-wide on Linux, so the cursor is comparable across processes.
34
+ os.makedirs(LIMITER_DIR, exist_ok=True)
35
+ # Wall clock persists across reboots (monotonic does not), so a cursor left in
36
+ # ~/.cache from a previous boot cannot turn into a huge stale wait.
33
37
  with open(self._path, "a+") as f:
34
38
  fcntl.flock(f.fileno(), fcntl.LOCK_EX)
35
39
  try:
36
40
  f.seek(0)
37
41
  data = f.read().strip()
38
- now = time.monotonic()
42
+ now = time.time()
39
43
  slot = max(now, float(data) if data else 0.0)
40
44
  f.seek(0)
41
45
  f.truncate()
@@ -59,7 +63,7 @@ _creation_limiters: dict[str, CreationLimiter] = {}
59
63
 
60
64
 
61
65
  def creation_limiter(per_sec: float | None, name: str) -> CreationLimiter | None:
62
- """A host-global limiter pacing `name`'s creation to `per_sec`/s (None/<= 0 disables).
66
+ """A user-global limiter pacing `name`'s creation to `per_sec`/s (None/<= 0 disables).
63
67
 
64
68
  All callers (and processes) sharing a `name` share one bucket, so use one rate per name."""
65
69
  if not per_sec or per_sec <= 0:
@@ -53,7 +53,7 @@ class ModalConfig(BaseConfig):
53
53
  """Disk in GB. Modal sandboxes have no disk knob, so this is accepted (so a task can
54
54
  declare it without a warning) but not enforced."""
55
55
  creates_per_sec: float | None = 40.0
56
- """Pace sandbox creation to this many per second, enforced host-wide across every
56
+ """Pace sandbox creation to this many per second, enforced user-wide across every
57
57
  env-server worker process (None/<= 0 disables it)."""
58
58
 
59
59
 
@@ -66,7 +66,7 @@ class PrimeConfig(NetworkPolicyConfig):
66
66
  idle_timeout: float | None = 3600
67
67
  """Seconds of inactivity before the sandbox self-deletes (None disables)."""
68
68
  creates_per_min: int | None = None
69
- """Pace sandbox creation to this many per minute, enforced host-wide across every
69
+ """Pace sandbox creation to this many per minute, enforced user-wide across every
70
70
  env-server worker process (None/<= 0 disables it). (Tunnel creation is limited separately
71
71
  and globally — see interception.tunnel.prime.TUNNEL_LIMITER.)"""
72
72
 
File without changes