verifiers 0.1.15.dev163__tar.gz → 0.1.15.dev165__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 (324) hide show
  1. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/PKG-INFO +1 -1
  2. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_composable_env.py +7 -12
  3. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_harbor_cli.py +24 -27
  4. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_mini_swe_agent.py +10 -14
  5. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_rlm_swe.py +3 -3
  6. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/harnesses/__init__.py +4 -2
  7. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/harnesses/mini_swe_agent.py +54 -15
  8. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/harnesses/opencode.py +4 -21
  9. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/harness.py +5 -1
  10. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/.gitignore +0 -0
  11. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/LICENSE +0 -0
  12. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/README.md +0 -0
  13. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/pyproject.toml +0 -0
  14. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/AGENTS.md +0 -0
  15. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/README.md +0 -0
  16. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/__init__.py +0 -0
  17. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/conftest.py +0 -0
  18. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_browser_env.py +0 -0
  19. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_build_script.py +0 -0
  20. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_cli_agent_env.py +0 -0
  21. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_client_auth_errors.py +0 -0
  22. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_client_config.py +0 -0
  23. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_client_multimodal_types.py +0 -0
  24. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_context_token_metrics.py +0 -0
  25. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_decorator_ranks.py +0 -0
  26. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_endpoint_registry.py +0 -0
  27. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_env_group.py +0 -0
  28. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_env_server.py +0 -0
  29. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_environment.py +0 -0
  30. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_environment_extra.py +0 -0
  31. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_envs.py +0 -0
  32. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_error_chain.py +0 -0
  33. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_eval_cli.py +0 -0
  34. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_eval_display.py +0 -0
  35. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_eval_utils.py +0 -0
  36. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_gepa_cli.py +0 -0
  37. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_gepa_utils.py +0 -0
  38. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_gym_env.py +0 -0
  39. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_harbor_env_mcp.py +0 -0
  40. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_imports.py +0 -0
  41. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_init_script.py +0 -0
  42. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_install_utils.py +0 -0
  43. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_interception_utils.py +0 -0
  44. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_langchain_deep_agents_wikispeedia.py +0 -0
  45. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_lean_task.py +0 -0
  46. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_logging.py +0 -0
  47. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_math_rubric.py +0 -0
  48. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_maybe_think_parser.py +0 -0
  49. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_mcp_search_env.py +0 -0
  50. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_message_utils.py +0 -0
  51. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_message_utils_multimodal.py +0 -0
  52. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_multiturn_env.py +0 -0
  53. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_nemorl_client.py +0 -0
  54. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_openai_chat_completions_token_client.py +0 -0
  55. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_openai_responses_client.py +0 -0
  56. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_opencode_harbor.py +0 -0
  57. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_opencode_rlm_env.py +0 -0
  58. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_openenv_client.py +0 -0
  59. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_parser.py +0 -0
  60. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_path_utils.py +0 -0
  61. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_per_turn_timing.py +0 -0
  62. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_pricing_utils.py +0 -0
  63. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_prime_plugin.py +0 -0
  64. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_renderer_client.py +0 -0
  65. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_renderer_e2e.py +0 -0
  66. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_rlm_composable_env.py +0 -0
  67. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_rubric.py +0 -0
  68. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_rubric_group.py +0 -0
  69. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_sandbox_env.py +0 -0
  70. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_sandbox_mixin.py +0 -0
  71. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_save_utils.py +0 -0
  72. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_setup_script.py +0 -0
  73. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_singleturn_env.py +0 -0
  74. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_stateful_tool_env.py +0 -0
  75. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_think_parser.py +0 -0
  76. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_tool_env.py +0 -0
  77. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_tool_utils.py +0 -0
  78. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_trajectory_processing.py +0 -0
  79. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_tui_info_formatting.py +0 -0
  80. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_types.py +0 -0
  81. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_bfcl.py +0 -0
  82. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_config_extension.py +0 -0
  83. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_empty_completions.py +0 -0
  84. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_endpoint_protocols.py +0 -0
  85. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_example_counts.py +0 -0
  86. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_group_reward_env.py +0 -0
  87. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_nemo_gym_harness.py +0 -0
  88. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_openenv_taskset.py +0 -0
  89. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_openreward_taskset.py +0 -0
  90. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_replay_harness.py +0 -0
  91. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_runtime_lifecycle.py +0 -0
  92. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_scoring_functions.py +0 -0
  93. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_taskset_bindings.py +0 -0
  94. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_taskset_utils.py +0 -0
  95. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_v1_textarena_taskset.py +0 -0
  96. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_wiki_search_v1.py +0 -0
  97. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_wordle_env.py +0 -0
  98. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_wordle_v1_env.py +0 -0
  99. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/tests/test_xml_parser.py +0 -0
  100. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/AGENTS.md +0 -0
  101. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/__init__.py +0 -0
  102. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/cli/__init__.py +0 -0
  103. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/cli/commands/__init__.py +0 -0
  104. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/cli/commands/build.py +0 -0
  105. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/cli/commands/eval.py +0 -0
  106. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/cli/commands/gepa.py +0 -0
  107. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/cli/commands/init.py +0 -0
  108. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/cli/commands/install.py +0 -0
  109. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/cli/commands/setup.py +0 -0
  110. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/cli/plugins/__init__.py +0 -0
  111. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/cli/plugins/prime.py +0 -0
  112. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/cli/tui.py +0 -0
  113. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/clients/__init__.py +0 -0
  114. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/clients/anthropic_messages_client.py +0 -0
  115. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/clients/client.py +0 -0
  116. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/clients/nemorl_chat_completions_client.py +0 -0
  117. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/clients/openai_chat_completions_client.py +0 -0
  118. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/clients/openai_chat_completions_token_client.py +0 -0
  119. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/clients/openai_completions_client.py +0 -0
  120. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/clients/openai_responses_client.py +0 -0
  121. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/clients/renderer_client.py +0 -0
  122. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/decorators.py +0 -0
  123. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/AGENTS.md +0 -0
  124. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/__init__.py +0 -0
  125. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/env_group.py +0 -0
  126. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/environment.py +0 -0
  127. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/README.md +0 -0
  128. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/__init__.py +0 -0
  129. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/cli_agent_env.py +0 -0
  130. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/README.md +0 -0
  131. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/__init__.py +0 -0
  132. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/_filter.py +0 -0
  133. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/composable_env.py +0 -0
  134. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/harness.py +0 -0
  135. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/harnesses/prompt.txt +0 -0
  136. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/harnesses/rlm.py +0 -0
  137. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/swe_debug_env.py +0 -0
  138. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/task.py +0 -0
  139. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/__init__.py +0 -0
  140. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/cp/__init__.py +0 -0
  141. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/cp/cp_task.py +0 -0
  142. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/cp/test_utils.py +0 -0
  143. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/harbor/__init__.py +0 -0
  144. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/harbor/harbor.py +0 -0
  145. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/lean/__init__.py +0 -0
  146. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/lean/lean_task.py +0 -0
  147. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/math/__init__.py +0 -0
  148. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/math/math_task.py +0 -0
  149. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/README.md +0 -0
  150. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/__init__.py +0 -0
  151. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/__init__.py +0 -0
  152. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/extract_fix_patch.sh +0 -0
  153. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/multi_swe/taskset.py +0 -0
  154. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/openswe/__init__.py +0 -0
  155. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/openswe/taskset.py +0 -0
  156. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/__init__.py +0 -0
  157. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/log_parser.py +0 -0
  158. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/r2e_gym/taskset.py +0 -0
  159. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/__init__.py +0 -0
  160. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/scale_swe/taskset.py +0 -0
  161. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/shared/__init__.py +0 -0
  162. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/shared/test_patch.py +0 -0
  163. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/__init__.py +0 -0
  164. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/swe_bench/taskset.py +0 -0
  165. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/__init__.py +0 -0
  166. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/swe_lego/taskset.py +0 -0
  167. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/__init__.py +0 -0
  168. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/log_parsers.py +0 -0
  169. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/swe_rebench_v2/taskset.py +0 -0
  170. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/__init__.py +0 -0
  171. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/swe_smith/taskset.py +0 -0
  172. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/composable/tasksets/swe/swe_tasksets.py +0 -0
  173. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/gym_env.py +0 -0
  174. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/harbor_env/__init__.py +0 -0
  175. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/harbor_env/env.py +0 -0
  176. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/harbor_env/mcp.py +0 -0
  177. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/mcp_env.py +0 -0
  178. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/opencode_env.py +0 -0
  179. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/opencode_qa_env.py +0 -0
  180. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/opencode_rlm_env.py +0 -0
  181. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/sandbox_mixin.py +0 -0
  182. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/utils/__init__.py +0 -0
  183. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/utils/file_locks.py +0 -0
  184. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/experimental/utils/git_checkout_cache.py +0 -0
  185. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/integrations/README.md +0 -0
  186. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/integrations/__init__.py +0 -0
  187. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/integrations/browser_env/README.md +0 -0
  188. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/integrations/browser_env/__init__.py +0 -0
  189. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/integrations/browser_env/browser_env.py +0 -0
  190. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/integrations/browser_env/modes/__init__.py +0 -0
  191. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/integrations/browser_env/modes/base.py +0 -0
  192. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/integrations/browser_env/modes/cua_mode.py +0 -0
  193. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/integrations/browser_env/modes/dom_mode.py +0 -0
  194. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/integrations/openenv_env.py +0 -0
  195. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/integrations/reasoninggym_env.py +0 -0
  196. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/integrations/textarena_env.py +0 -0
  197. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/multiturn_env.py +0 -0
  198. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/python_env.py +0 -0
  199. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/sandbox_env.py +0 -0
  200. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/singleturn_env.py +0 -0
  201. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/stateful_tool_env.py +0 -0
  202. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/envs/tool_env.py +0 -0
  203. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/errors.py +0 -0
  204. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/gepa/__init__.py +0 -0
  205. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/gepa/adapter.py +0 -0
  206. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/gepa/config.py +0 -0
  207. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/gepa/display.py +0 -0
  208. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/gepa/gepa_utils.py +0 -0
  209. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/parsers/__init__.py +0 -0
  210. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/parsers/maybe_think_parser.py +0 -0
  211. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/parsers/parser.py +0 -0
  212. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/parsers/think_parser.py +0 -0
  213. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/parsers/xml_parser.py +0 -0
  214. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/rl/README.md +0 -0
  215. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/rl/__init__.py +0 -0
  216. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/rl/inference/__init__.py +0 -0
  217. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/rl/inference/client.py +0 -0
  218. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/rl/inference/server.py +0 -0
  219. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/rl/trainer/__init__.py +0 -0
  220. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/rl/trainer/config.py +0 -0
  221. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/rl/trainer/orchestrator.py +0 -0
  222. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/rl/trainer/trainer.py +0 -0
  223. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/rl/trainer/utils.py +0 -0
  224. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/rubrics/__init__.py +0 -0
  225. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/rubrics/experimental/hybrid_math_rubric.py +0 -0
  226. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/rubrics/judge_rubric.py +0 -0
  227. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/rubrics/math_rubric.py +0 -0
  228. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/rubrics/rubric.py +0 -0
  229. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/rubrics/rubric_group.py +0 -0
  230. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/scripts/__init__.py +0 -0
  231. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/scripts/build.py +0 -0
  232. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/scripts/eval.py +0 -0
  233. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/scripts/gepa.py +0 -0
  234. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/scripts/init.py +0 -0
  235. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/scripts/install.py +0 -0
  236. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/scripts/rl.py +0 -0
  237. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/scripts/setup.py +0 -0
  238. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/scripts/train.py +0 -0
  239. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/scripts/tui.py +0 -0
  240. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/scripts/vllm.py +0 -0
  241. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/serve/__init__.py +0 -0
  242. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/serve/client/env_client.py +0 -0
  243. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/serve/client/zmq_env_client.py +0 -0
  244. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/serve/server/__init__.py +0 -0
  245. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/serve/server/env_router.py +0 -0
  246. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/serve/server/env_server.py +0 -0
  247. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/serve/server/env_worker.py +0 -0
  248. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/serve/server/zmq_env_server.py +0 -0
  249. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/serve/types.py +0 -0
  250. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/types.py +0 -0
  251. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/__init__.py +0 -0
  252. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/async_utils.py +0 -0
  253. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/client_utils.py +0 -0
  254. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/config_utils.py +0 -0
  255. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/data_utils.py +0 -0
  256. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/display_utils.py +0 -0
  257. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/env_config_utils.py +0 -0
  258. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/env_utils.py +0 -0
  259. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/error_utils.py +0 -0
  260. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/eval_display.py +0 -0
  261. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/eval_utils.py +0 -0
  262. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/heartbeat.py +0 -0
  263. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/import_utils.py +0 -0
  264. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/install_utils.py +0 -0
  265. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/interception_utils.py +0 -0
  266. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/logging_utils.py +0 -0
  267. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/message_utils.py +0 -0
  268. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/metric_utils.py +0 -0
  269. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/path_utils.py +0 -0
  270. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/pricing_utils.py +0 -0
  271. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/process_utils.py +0 -0
  272. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/response_utils.py +0 -0
  273. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/save_utils.py +0 -0
  274. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/serve_utils.py +0 -0
  275. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/thread_utils.py +0 -0
  276. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/threaded_sandbox_client.py +0 -0
  277. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/tool_utils.py +0 -0
  278. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/usage_utils.py +0 -0
  279. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/utils/version_utils.py +0 -0
  280. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/ENVIRONMENT_BEST_PRACTICES.md +0 -0
  281. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/README.md +0 -0
  282. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/RE_MIGRATION.md +0 -0
  283. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/__init__.py +0 -0
  284. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/artifact.py +0 -0
  285. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/config.py +0 -0
  286. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/env.py +0 -0
  287. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/model.py +0 -0
  288. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/program.py +0 -0
  289. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/runtime.py +0 -0
  290. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/runtime_handles.py +0 -0
  291. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/sandbox.py +0 -0
  292. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/state.py +0 -0
  293. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/task.py +0 -0
  294. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/taskset.py +0 -0
  295. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/toolset.py +0 -0
  296. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/types.py +0 -0
  297. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/user.py +0 -0
  298. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/__init__.py +0 -0
  299. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/binding_utils.py +0 -0
  300. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/config_callable_utils.py +0 -0
  301. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/config_utils.py +0 -0
  302. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/endpoint_utils.py +0 -0
  303. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/json_utils.py +0 -0
  304. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/judge_utils.py +0 -0
  305. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/lifecycle_utils.py +0 -0
  306. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/logging_utils.py +0 -0
  307. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/mcp_proxy_utils.py +0 -0
  308. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/mcp_utils.py +0 -0
  309. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/object_utils.py +0 -0
  310. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/program_utils.py +0 -0
  311. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/prompt_utils.py +0 -0
  312. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/runtime_owner_utils.py +0 -0
  313. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/runtime_registry.py +0 -0
  314. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/sandbox_program_utils.py +0 -0
  315. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/sandbox_python_utils.py +0 -0
  316. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/sandbox_utils.py +0 -0
  317. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/scoring_utils.py +0 -0
  318. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/serialization_utils.py +0 -0
  319. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/task_freeze_utils.py +0 -0
  320. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/taskset_utils.py +0 -0
  321. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/tool_utils.py +0 -0
  322. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/toolset_utils.py +0 -0
  323. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/trajectory_utils.py +0 -0
  324. {verifiers-0.1.15.dev163 → verifiers-0.1.15.dev165}/verifiers/v1/utils/usage_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: verifiers
3
- Version: 0.1.15.dev163
3
+ Version: 0.1.15.dev165
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
@@ -193,25 +193,20 @@ def test_taskset_repr():
193
193
  assert "3" in repr(ts)
194
194
 
195
195
 
196
- def test_composable_mini_swe_agent_unversioned_package_uses_unpinned_requirement():
197
- setup = build_mini_swe_agent_install_script(package=" mini-swe-agent ")
196
+ def test_composable_mini_swe_agent_install_script_uses_pip_requirement():
197
+ setup = build_mini_swe_agent_install_script()
198
198
 
199
- assert (
200
- "vf_python_install --target /opt/mini-swe-agent/prefix/site-packages mini-swe-agent"
201
- in setup
202
- )
203
- assert "mini-swe-agent==mini-swe-agent" not in setup
199
+ assert "mini-swe-agent==2.2.8" in setup
200
+ assert "files.pythonhosted.org" not in setup
204
201
 
205
202
 
206
- def test_composable_opencode_unversioned_release_uses_latest_download_url():
203
+ def test_composable_opencode_install_script_owns_release_download():
207
204
  setup = build_opencode_install_script(
208
- release=" PrimeIntellect-ai/opencode ",
209
205
  install_ripgrep=False,
210
206
  )
211
207
 
212
- assert "OPENCODE_RELEASE_REPO=PrimeIntellect-ai/opencode" in setup
213
- assert "OPENCODE_RELEASE_PATH=releases/latest/download" in setup
214
- assert "releases/download/vPrimeIntellect-ai/opencode" not in setup
208
+ assert "PrimeIntellect-ai/opencode/releases/download/v1.1.63-rl2" in setup
209
+ assert "tar -xzf /tmp/opencode.tar.gz" in setup
215
210
 
216
211
 
217
212
  @pytest.mark.asyncio
@@ -25,10 +25,10 @@ from harnesses import (
25
25
  Terminus2Config,
26
26
  Terminus2ProgramConfig,
27
27
  )
28
- from harnesses.pi import PI_DEFAULT_PACKAGE
28
+ from harnesses.pi import PI_DEFAULT_VERSION
29
29
  from harnesses.terminus_2 import (
30
30
  TERMINUS_2_DEFAULT_API_BASE_URL,
31
- TERMINUS_2_DEFAULT_HARBOR_PACKAGE,
31
+ TERMINUS_2_DEFAULT_VERSION,
32
32
  TERMINUS_2_DEFAULT_MODEL_NAME,
33
33
  Terminus2,
34
34
  )
@@ -268,7 +268,7 @@ def test_opencode_config_owns_opencode_harness_fields() -> None:
268
268
  max_turns=2,
269
269
  )
270
270
  )
271
- program = cast(dict[str, object], harness.config.program.data())
271
+ program = cast(dict[str, object], harness.program_config.data())
272
272
  command = cast(list[object], program["command"])
273
273
  mcp_setup = cast(dict[str, object], program["channels"])["mcp"]
274
274
  setup = cast(str, program["setup"])
@@ -287,33 +287,34 @@ def test_opencode_config_owns_opencode_harness_fields() -> None:
287
287
 
288
288
 
289
289
  @pytest.mark.parametrize(
290
- "release", ["PrimeIntellect-ai/opencode@latest", " PrimeIntellect-ai/opencode "]
290
+ "version",
291
+ ["PrimeIntellect-ai/opencode@latest", " PrimeIntellect-ai/opencode "],
291
292
  )
292
- def test_opencode_latest_release_uses_latest_download_url(release: str) -> None:
293
+ def test_opencode_latest_version_uses_latest_download_url(
294
+ version: str,
295
+ ) -> None:
293
296
  harness = OpenCode(
294
297
  config=OpenCodeConfig(
298
+ version=version,
295
299
  program=OpenCodeProgramConfig(
296
- release=release,
297
300
  install_ripgrep=False,
298
- )
301
+ ),
299
302
  )
300
303
  )
301
- program = cast(dict[str, object], harness.config.program.data())
304
+ program = cast(dict[str, object], harness.program_config.data())
302
305
  setup = cast(str, program["setup"])
303
306
 
304
307
  assert "OPENCODE_RELEASE_REPO=PrimeIntellect-ai/opencode" in setup
305
308
  assert "OPENCODE_RELEASE_PATH=releases/latest/download" in setup
306
309
 
307
310
 
308
- def test_opencode_custom_release_uses_versioned_spec() -> None:
311
+ def test_opencode_custom_version_uses_versioned_release() -> None:
309
312
  harness = OpenCode(
310
313
  config=OpenCodeConfig(
311
- program=OpenCodeProgramConfig(
312
- release="Example/open-code@v2.0.0",
313
- )
314
+ version="Example/open-code@v2.0.0",
314
315
  )
315
316
  )
316
- program = cast(dict[str, object], harness.config.program.data())
317
+ program = cast(dict[str, object], harness.program_config.data())
317
318
  setup = cast(str, program["setup"])
318
319
 
319
320
  assert "OPENCODE_RELEASE_REPO=Example/open-code" in setup
@@ -339,7 +340,7 @@ def test_packaged_command_harnesses_defer_partial_program_overrides(
339
340
  "args": ["--caller"],
340
341
  }
341
342
  harness = harness_cls(config=config_cls(program=override))
342
- program = cast(dict[str, object], harness.config.program.data())
343
+ program = cast(dict[str, object], harness.program_config.data())
343
344
  env = cast(dict[str, object], program["env"])
344
345
  setup = cast(list[object], program["setup"])
345
346
  args = cast(list[object], program["args"])
@@ -363,7 +364,7 @@ def test_packaged_command_harness_config_program_patch_precedence() -> None:
363
364
  program=MiniSWEAgentProgramConfig(env={"OPENAI_MODEL": "caller-model"})
364
365
  )
365
366
  )
366
- program = cast(dict[str, object], harness.config.program.data())
367
+ program = cast(dict[str, object], harness.program_config.data())
367
368
  env = cast(dict[str, object], program["env"])
368
369
 
369
370
  assert env["OPENAI_MODEL"] == "caller-model"
@@ -385,16 +386,16 @@ def test_packaged_command_harness_config_program_rejects_owned_keys(
385
386
 
386
387
  def test_pi_harness_writes_intercepted_model_and_mcp_config() -> None:
387
388
  harness = Pi()
388
- program = cast(dict[str, object], harness.config.program.data())
389
+ program = cast(dict[str, object], harness.program_config.data())
389
390
  setup = cast(str, program["setup"])
390
391
  channels = cast(dict[str, object], program["channels"])
391
392
  mcp_setup = cast(str, channels["mcp"])
392
393
 
393
394
  assert "apt-get -o Acquire::Retries=3 update" in setup
394
395
  assert "apt-get -o Acquire::Retries=3 install" in setup
395
- assert harness.config.program.package == PI_DEFAULT_PACKAGE
396
- assert PI_DEFAULT_PACKAGE == "@earendil-works/pi-coding-agent@latest"
397
- assert f"npm install -g --ignore-scripts {PI_DEFAULT_PACKAGE}" in setup
396
+ assert harness.config.version == PI_DEFAULT_VERSION
397
+ assert PI_DEFAULT_VERSION == "@earendil-works/pi-coding-agent@latest"
398
+ assert f"npm install -g --ignore-scripts {PI_DEFAULT_VERSION}" in setup
398
399
  assert "mariozechner" not in setup
399
400
  assert '"baseUrl": "${OPENAI_BASE_URL}"' in mcp_setup
400
401
  assert '"api": "openai-completions"' in mcp_setup
@@ -404,13 +405,9 @@ def test_pi_harness_writes_intercepted_model_and_mcp_config() -> None:
404
405
  assert f'"command": "{SANDBOX_PYTHON}"' in mcp_setup
405
406
 
406
407
 
407
- def test_pi_harness_preserves_scoped_npm_package_versions() -> None:
408
- harness = Pi(
409
- config=PiConfig(
410
- program=PiProgramConfig(package="@anthropic-ai/claude-code@1.2.3")
411
- )
412
- )
413
- program = cast(dict[str, object], harness.config.program.data())
408
+ def test_pi_harness_preserves_scoped_npm_versions() -> None:
409
+ harness = Pi(config=PiConfig(version="@anthropic-ai/claude-code@1.2.3"))
410
+ program = cast(dict[str, object], harness.program_config.data())
414
411
  setup = cast(str, program["setup"])
415
412
 
416
413
  assert "npm install -g --ignore-scripts @anthropic-ai/claude-code@1.2.3" in setup
@@ -445,7 +442,7 @@ def test_terminus_2_harness_builds_sandbox_program() -> None:
445
442
 
446
443
  run_script = cast(str, command[2])
447
444
  assert "TERMINUS_2_WORKDIR=/workspace" in run_script
448
- assert f"--with {TERMINUS_2_DEFAULT_HARBOR_PACKAGE}" in run_script
445
+ assert f"--with {TERMINUS_2_DEFAULT_VERSION}" in run_script
449
446
  assert "git+https://github.com" not in run_script
450
447
  assert "max_turns=7" in run_script
451
448
 
@@ -68,7 +68,7 @@ def test_mini_swe_agent_builds_sandbox_program():
68
68
  ),
69
69
  )
70
70
  )
71
- program = cast(dict[str, Any], harness.config.program.data())
71
+ program = cast(dict[str, Any], harness.program_config.data())
72
72
  command = cast(list[str], program["command"])
73
73
  script = command[-1]
74
74
 
@@ -86,12 +86,12 @@ def test_mini_swe_agent_builds_sandbox_program():
86
86
  assert "mini_swe_agent_log" in cast(dict[str, object], program["artifacts"])
87
87
 
88
88
 
89
- @pytest.mark.parametrize("package", ["mini-swe-agent@latest", " mini-swe-agent "])
90
- def test_mini_swe_agent_latest_package_uses_unpinned_pip_requirement(package: str):
91
- harness = MiniSWEAgent(
92
- config=MiniSWEAgentConfig(program=MiniSWEAgentProgramConfig(package=package))
93
- )
94
- program = cast(dict[str, Any], harness.config.program.data())
89
+ @pytest.mark.parametrize("version", ["mini-swe-agent@latest", " mini-swe-agent "])
90
+ def test_mini_swe_agent_latest_version_uses_unpinned_pip_requirement(
91
+ version: str,
92
+ ):
93
+ harness = MiniSWEAgent(config=MiniSWEAgentConfig(version=version))
94
+ program = cast(dict[str, Any], harness.program_config.data())
95
95
  setup = cast(str, program["setup"])
96
96
 
97
97
  assert (
@@ -100,13 +100,9 @@ def test_mini_swe_agent_latest_package_uses_unpinned_pip_requirement(package: st
100
100
  )
101
101
 
102
102
 
103
- def test_mini_swe_agent_pinned_package_uses_pip_requirement():
104
- harness = MiniSWEAgent(
105
- config=MiniSWEAgentConfig(
106
- program=MiniSWEAgentProgramConfig(package="mini-swe-agent@2.2.7")
107
- )
108
- )
109
- program = cast(dict[str, Any], harness.config.program.data())
103
+ def test_mini_swe_agent_pinned_version_uses_pip_requirement():
104
+ harness = MiniSWEAgent(config=MiniSWEAgentConfig(version="mini-swe-agent@2.2.7"))
105
+ program = cast(dict[str, Any], harness.program_config.data())
110
106
  setup = cast(str, program["setup"])
111
107
 
112
108
  assert "mini-swe-agent==2.2.7" in setup
@@ -81,8 +81,8 @@ def test_rlm_harness_accepts_typed_config_surface():
81
81
  config=RLMConfig(
82
82
  program=RLMProgramConfig(
83
83
  local_checkout="/tmp/checkout",
84
- rlm_tools=["bash", "edit"],
85
- rlm_exec_timeout=11,
84
+ tools=["bash", "edit"],
85
+ exec_timeout=11,
86
86
  env_vars={"CUSTOM": "1"},
87
87
  )
88
88
  )
@@ -90,7 +90,7 @@ def test_rlm_harness_accepts_typed_config_surface():
90
90
  program = as_dict(harness.config.program)
91
91
  program_env = as_dict(program["env"])
92
92
 
93
- assert harness.config.program.rlm_tools == ["bash", "edit"]
93
+ assert harness.config.program.tools == ["bash", "edit"]
94
94
  assert program_env["RLM_TOOLS"] == "bash,edit"
95
95
  assert program_env["RLM_EXEC_TIMEOUT"] == "11"
96
96
  assert program_env["CUSTOM"] == "1"
@@ -9,7 +9,8 @@ from verifiers.envs.experimental.composable.harnesses.rlm import (
9
9
  )
10
10
  from verifiers.envs.experimental.composable.harnesses.opencode import (
11
11
  DEFAULT_DISABLED_TOOLS,
12
- DEFAULT_RELEASE,
12
+ DEFAULT_RELEASE_REPO,
13
+ DEFAULT_RELEASE_VERSION,
13
14
  DEFAULT_SYSTEM_PROMPT,
14
15
  OPENCODE_INSTALL_SCRIPT,
15
16
  build_install_script as build_opencode_install_script,
@@ -39,7 +40,8 @@ __all__ = [
39
40
  "build_opencode_run_command",
40
41
  "OPENCODE_INSTALL_SCRIPT",
41
42
  "DEFAULT_DISABLED_TOOLS",
42
- "DEFAULT_RELEASE",
43
+ "DEFAULT_RELEASE_REPO",
44
+ "DEFAULT_RELEASE_VERSION",
43
45
  "DEFAULT_SYSTEM_PROMPT",
44
46
  "mini_swe_agent_harness",
45
47
  "build_mini_swe_agent_install_script",
@@ -3,18 +3,15 @@
3
3
  from pathlib import PurePosixPath
4
4
  import shlex
5
5
 
6
- from harnesses.mini_swe_agent import (
7
- MINI_SWE_AGENT_DEFAULT_PACKAGE,
8
- build_mini_swe_agent_install_script as build_packaged_mini_swe_agent_install_script,
9
- )
10
-
11
6
  DEFAULT_INSTALL_DIR = "/opt/mini-swe-agent"
12
7
  DEFAULT_PREFIX_DIR = f"{DEFAULT_INSTALL_DIR}/prefix"
13
8
  DEFAULT_SITE_PACKAGES_DIR = f"{DEFAULT_PREFIX_DIR}/site-packages"
9
+ DEFAULT_UV_SITE_PACKAGES_DIR = f"{DEFAULT_INSTALL_DIR}/uv-site-packages"
14
10
  DEFAULT_MINI_BINARY = f"{DEFAULT_PREFIX_DIR}/bin/mini"
15
11
  MINI_SWE_AGENT_CLI_PACKAGE = "mini-swe-agent"
16
12
  MINI_SWE_AGENT_CLI_VERSION = "2.2.8"
17
- DEFAULT_PACKAGE = MINI_SWE_AGENT_DEFAULT_PACKAGE
13
+ MINI_SWE_AGENT_PYTHON_VERSION = "3.11"
14
+ UV_PACKAGE_VERSION = "0.11.7"
18
15
  DEFAULT_INSTRUCTION_PATH = "/mini-swe-agent/prompt.txt"
19
16
  DEFAULT_SYSTEM_PROMPT_PATH = "/mini-swe-agent/system.txt"
20
17
  DEFAULT_LOG_DIR = "/logs/agent"
@@ -27,14 +24,59 @@ DEFAULT_ENVIRONMENT_TIMEOUT = 120
27
24
 
28
25
 
29
26
  def build_mini_swe_agent_install_script(
30
- package: str = DEFAULT_PACKAGE,
31
27
  prefix_dir: str = DEFAULT_PREFIX_DIR,
28
+ install_python: bool = True,
32
29
  ) -> str:
33
30
  """Build the shell script that installs mini-SWE-agent."""
34
- return build_packaged_mini_swe_agent_install_script(
35
- package=package,
36
- prefix_dir=prefix_dir,
37
- )
31
+ install_tools = ""
32
+ if install_python:
33
+ # Acquire::Retries=3 mitigates transient archive.ubuntu.com CDN sync
34
+ # mismatches that fail fresh-sandbox apt-get update mid-rollout.
35
+ install_tools = """\
36
+ export DEBIAN_FRONTEND=noninteractive
37
+ if ! command -v python3 >/dev/null 2>&1 || ! python3 -m pip --version >/dev/null 2>&1; then
38
+ apt-get -o Acquire::Retries=3 update -qq
39
+ apt-get -o Acquire::Retries=3 install -y -qq python3 python3-pip ca-certificates
40
+ fi
41
+ """
42
+
43
+ quoted_prefix_dir = shlex.quote(prefix_dir)
44
+ site_packages_dir = f"{prefix_dir}/site-packages"
45
+ package_requirement = f"{MINI_SWE_AGENT_CLI_PACKAGE}=={MINI_SWE_AGENT_CLI_VERSION}"
46
+ quoted_site_packages_dir = shlex.quote(site_packages_dir)
47
+ quoted_install_dir = shlex.quote(DEFAULT_INSTALL_DIR)
48
+ quoted_uv_site_packages_dir = shlex.quote(DEFAULT_UV_SITE_PACKAGES_DIR)
49
+ quoted_package_requirement = shlex.quote(package_requirement)
50
+ return f"""\
51
+ set -e
52
+ {install_tools}
53
+ rm -rf {quoted_prefix_dir}
54
+ mkdir -p {quoted_install_dir} {quoted_prefix_dir}/bin {quoted_site_packages_dir} {quoted_uv_site_packages_dir} {shlex.quote(DEFAULT_LOG_DIR)} /mini-swe-agent
55
+ export PIP_CONFIG_FILE=/dev/null
56
+ export PIP_INDEX_URL=https://pypi.org/simple
57
+ export PIP_BREAK_SYSTEM_PACKAGES=1
58
+ unset PIP_EXTRA_INDEX_URL
59
+ PYTHON_BIN="$(command -v python3)"
60
+ MINI_SWE_AGENT_PYTHON="$PYTHON_BIN"
61
+ if ! "$PYTHON_BIN" -c 'import sys; raise SystemExit(sys.version_info < (3, 10))'; then
62
+ "$PYTHON_BIN" -m pip install --quiet --target {quoted_uv_site_packages_dir} uv=={UV_PACKAGE_VERSION}
63
+ env PYTHONPATH={quoted_uv_site_packages_dir} "$PYTHON_BIN" -m uv python install {MINI_SWE_AGENT_PYTHON_VERSION}
64
+ MINI_SWE_AGENT_PYTHON="$(env PYTHONPATH={quoted_uv_site_packages_dir} "$PYTHON_BIN" -m uv python find {MINI_SWE_AGENT_PYTHON_VERSION})"
65
+ fi
66
+ if [ "$MINI_SWE_AGENT_PYTHON" = "$PYTHON_BIN" ]; then
67
+ "$PYTHON_BIN" -m pip install --quiet --target {quoted_site_packages_dir} {quoted_package_requirement}
68
+ else
69
+ env PYTHONPATH={quoted_uv_site_packages_dir} "$PYTHON_BIN" -m uv pip install --python "$MINI_SWE_AGENT_PYTHON" --target {quoted_site_packages_dir} {quoted_package_requirement}
70
+ fi
71
+ echo "$MINI_SWE_AGENT_PYTHON" > {quoted_prefix_dir}/python
72
+ cat > {quoted_prefix_dir}/bin/mini <<'EOF'
73
+ #!/usr/bin/env sh
74
+ export PYTHONPATH={shlex.quote(site_packages_dir)}:${{PYTHONPATH:-}}
75
+ exec "$(cat {quoted_prefix_dir}/python)" -m minisweagent.run.mini "$@"
76
+ EOF
77
+ chmod +x {quoted_prefix_dir}/bin/mini
78
+ test -x {quoted_prefix_dir}/bin/mini
79
+ """
38
80
 
39
81
 
40
82
  def build_mini_swe_agent_run_command(
@@ -133,7 +175,6 @@ def mini_swe_agent_harness(
133
175
  system_prompt_path: str = DEFAULT_SYSTEM_PROMPT_PATH,
134
176
  log_path: str = DEFAULT_LOG_PATH,
135
177
  trajectory_path: str = DEFAULT_TRAJECTORY_PATH,
136
- package: str = DEFAULT_PACKAGE,
137
178
  config_spec: str = DEFAULT_CONFIG_SPEC,
138
179
  model_class: str = DEFAULT_MODEL_CLASS,
139
180
  environment_timeout: int = DEFAULT_ENVIRONMENT_TIMEOUT,
@@ -152,9 +193,7 @@ def mini_swe_agent_harness(
152
193
  # The system prompt is passed through ComposableEnv as a file and injected
153
194
  # into mini's agent.system_template at runtime.
154
195
  return Harness(
155
- install_script=build_mini_swe_agent_install_script(
156
- package=package,
157
- ),
196
+ install_script=build_mini_swe_agent_install_script(),
158
197
  run_command=build_mini_swe_agent_run_command(
159
198
  agent_workdir=agent_workdir,
160
199
  instruction_path=instruction_path,
@@ -13,11 +13,10 @@ import json
13
13
  import shlex
14
14
  from pathlib import Path, PurePosixPath
15
15
 
16
- from harnesses.utils import split_versioned_agent_spec
17
-
18
16
  # ── Defaults ─────────────────────────────────────────────────────────────
19
17
 
20
- DEFAULT_RELEASE = "PrimeIntellect-ai/opencode@1.1.63-rl2"
18
+ DEFAULT_RELEASE_REPO = "PrimeIntellect-ai/opencode"
19
+ DEFAULT_RELEASE_VERSION = "1.1.63-rl2"
21
20
  DEFAULT_SYSTEM_PROMPT = (Path(__file__).parent / "prompt.txt").read_text()
22
21
 
23
22
  DEFAULT_DISABLED_TOOLS = [
@@ -47,7 +46,6 @@ DEFAULT_DISABLED_TOOLS = [
47
46
 
48
47
 
49
48
  def build_install_script(
50
- release: str = DEFAULT_RELEASE,
51
49
  install_ripgrep: bool = True,
52
50
  ) -> str:
53
51
  """Build the shell script that installs OpenCode in a sandbox."""
@@ -56,15 +54,6 @@ def build_install_script(
56
54
  if install_ripgrep
57
55
  else ""
58
56
  )
59
- release_repo, release_version = split_versioned_agent_spec(release)
60
- release_path = "releases/latest/download"
61
- if release_version and release_version != "latest":
62
- release_tag = (
63
- release_version
64
- if release_version.startswith("v")
65
- else f"v{release_version}"
66
- )
67
- release_path = f"releases/download/{release_tag}"
68
57
  # Acquire::Retries=3 mitigates transient archive.ubuntu.com CDN sync mismatches
69
58
  # (e.g. "File has unexpected size ... Mirror sync in progress?"). See launchpad
70
59
  # bug #1876035. apt's default retries is 0, so one bad fetch fails the rollout.
@@ -73,9 +62,6 @@ set -e
73
62
  apt-get -o Acquire::Retries=3 update -qq && apt-get -o Acquire::Retries=3 install -y -qq curl tar > /dev/null 2>&1
74
63
  {rg_install}
75
64
 
76
- OPENCODE_RELEASE_REPO={shlex.quote(release_repo)}
77
- OPENCODE_RELEASE_PATH={shlex.quote(release_path)}
78
-
79
65
  case "$(uname -m)" in
80
66
  x86_64) OPENCODE_ARCH=x64 ;;
81
67
  aarch64|arm64) OPENCODE_ARCH=arm64 ;;
@@ -83,7 +69,7 @@ case "$(uname -m)" in
83
69
  esac
84
70
 
85
71
  OPENCODE_ASSET="opencode-linux-$OPENCODE_ARCH.tar.gz"
86
- OPENCODE_RELEASE_URL="https://github.com/$OPENCODE_RELEASE_REPO/$OPENCODE_RELEASE_PATH/$OPENCODE_ASSET"
72
+ OPENCODE_RELEASE_URL="https://github.com/{DEFAULT_RELEASE_REPO}/releases/download/v{DEFAULT_RELEASE_VERSION}/$OPENCODE_ASSET"
87
73
 
88
74
  mkdir -p "$HOME/.opencode/bin"
89
75
  if [ -x "$HOME/.opencode/bin/opencode" ]; then
@@ -248,7 +234,6 @@ def opencode_harness(
248
234
  agent_workdir: str = "/app",
249
235
  allow_git: bool = False,
250
236
  disable_compaction: bool = True,
251
- release: str = DEFAULT_RELEASE,
252
237
  instruction_path: str = "/opencode/prompt.txt",
253
238
  system_prompt_path: str = "/opencode/system.txt",
254
239
  log_path: str = "/opencode/logs.txt",
@@ -275,9 +260,7 @@ def opencode_harness(
275
260
  system_prompt = task_system_prompt
276
261
 
277
262
  return Harness(
278
- install_script=build_install_script(
279
- release=release,
280
- ),
263
+ install_script=build_install_script(),
281
264
  run_command=build_opencode_run_command(
282
265
  agent_workdir=agent_workdir,
283
266
  prompt_path=instruction_path,
@@ -106,6 +106,7 @@ class HarnessConfig(LifecycleConfig):
106
106
  )
107
107
  program: ProgramConfig = ProgramConfig()
108
108
  model: ModelConfig = ModelConfig()
109
+ version: str | None = None
109
110
  system_prompt: SystemPrompt = None
110
111
  system_prompt_strategy: SystemPromptStrategy = "HT"
111
112
  sandbox: SandboxConfig | None = None
@@ -189,7 +190,7 @@ class Harness(RuntimeOwnerMixin[ConfigT], Generic[ConfigT]):
189
190
  ):
190
191
  raise TypeError("harness_id must be a string.")
191
192
  self.harness_id = resolved_harness_id or type(self).__name__
192
- self.program_config = self.config.program.resolve()
193
+ self.program_config = self.load_program_config(self.config)
193
194
  system_prompt_value = self.load_system_prompt(self.config)
194
195
  self.system_prompt = normalize_system_prompt(
195
196
  system_prompt_value, field_name="harness.system_prompt"
@@ -220,6 +221,9 @@ class Harness(RuntimeOwnerMixin[ConfigT], Generic[ConfigT]):
220
221
  def load_system_prompt(self, config: ConfigT) -> SystemPrompt:
221
222
  return config.system_prompt
222
223
 
224
+ def load_program_config(self, config: ConfigT) -> ProgramConfig:
225
+ return config.program.resolve()
226
+
223
227
  def load_sandbox(self, config: SandboxConfig | None) -> SandboxConfig | None:
224
228
  sandbox = self.program_config.sandbox
225
229
  if sandbox is None or sandbox is False: