benchflow 0.7.1.dev1972__tar.gz → 0.7.2__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 (723) hide show
  1. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/CHANGELOG.md +108 -0
  2. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/PKG-INFO +14 -11
  3. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/README.md +13 -10
  4. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/pyproject.toml +1 -1
  5. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/_traj_upload_ui.py +29 -1
  6. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/main.py +32 -2
  7. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/traj.py +166 -17
  8. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/publish/redact.py +138 -23
  9. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/publish/traj_capture.py +24 -4
  10. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/publish/traj_report.py +14 -1
  11. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/types.py +86 -18
  12. benchflow-0.7.2/src/benchflow/trajectories/viewer.py +872 -0
  13. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_cli_edge_case_hardening.py +60 -0
  14. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_traj_report.py +83 -0
  15. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_traj_upload_cli.py +278 -5
  16. benchflow-0.7.2/tests/test_viewer_confirm.py +279 -0
  17. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_redaction.py +142 -0
  18. benchflow-0.7.1.dev1972/src/benchflow/trajectories/viewer.py +0 -620
  19. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/.gitignore +0 -0
  20. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/LICENSE +0 -0
  21. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/__init__.py +0 -0
  22. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_dotenv.py +0 -0
  23. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_paths.py +0 -0
  24. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_run.py +0 -0
  25. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_types.py +0 -0
  26. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/__init__.py +0 -0
  27. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/benchmark_repos.py +0 -0
  28. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/build_context_stage.py +0 -0
  29. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/config.py +0 -0
  30. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/config_override.py +0 -0
  31. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/content_address.py +0 -0
  32. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/dataset_registry.py +0 -0
  33. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/env_registry.py +0 -0
  34. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/evaluation_results.py +0 -0
  35. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/hf_datasets.py +0 -0
  36. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/json_safe.py +0 -0
  37. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/learner_memory.py +0 -0
  38. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/live_activity.py +0 -0
  39. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/result_metadata.py +0 -0
  40. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/reward_events.py +0 -0
  41. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/scoring.py +0 -0
  42. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/source_provenance.py +0 -0
  43. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
  44. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
  45. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
  46. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
  47. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
  48. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/text.py +0 -0
  49. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/yaml_loader.py +0 -0
  50. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/acp/__init__.py +0 -0
  51. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/acp/client.py +0 -0
  52. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/acp/container_transport.py +0 -0
  53. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/acp/runtime.py +0 -0
  54. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/acp/selection.py +0 -0
  55. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/acp/session.py +0 -0
  56. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/acp/transport.py +0 -0
  57. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/acp/types.py +0 -0
  58. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/__init__.py +0 -0
  59. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/_toolathlon.py +0 -0
  60. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/_toolathlon_container.py +0 -0
  61. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
  62. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
  63. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/_toolathlon_services.py +0 -0
  64. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/harbor.py +0 -0
  65. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/inbound.py +0 -0
  66. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/inspect_ai.py +0 -0
  67. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/ors.py +0 -0
  68. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/resources/__init__.py +0 -0
  69. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
  70. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
  71. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/source.py +0 -0
  72. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agent_router.py +0 -0
  73. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agent_router_guide.py +0 -0
  74. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agent_router_parity.py +0 -0
  75. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agent_router_scaffold.py +0 -0
  76. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/__init__.py +0 -0
  77. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/codex_config.py +0 -0
  78. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/credentials.py +0 -0
  79. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
  80. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/env.py +0 -0
  81. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/errors.py +0 -0
  82. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
  83. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/install.py +0 -0
  84. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/manifest.py +0 -0
  85. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
  86. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/pi_acp_launcher.py +0 -0
  87. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/protocol.py +0 -0
  88. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/providers.py +0 -0
  89. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/registry.py +0 -0
  90. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/remote_manifests.py +0 -0
  91. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/branch.py +0 -0
  92. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/__init__.py +0 -0
  93. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/_failure_evidence.py +0 -0
  94. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/_hosted_env.py +0 -0
  95. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/_live_progress.py +0 -0
  96. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/_options.py +0 -0
  97. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/_shared.py +0 -0
  98. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/adopt.py +0 -0
  99. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/agent.py +0 -0
  100. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/continue_cmd.py +0 -0
  101. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/environment.py +0 -0
  102. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/eval_artifacts.py +0 -0
  103. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/eval_lift.py +0 -0
  104. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/hub.py +0 -0
  105. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/monitor.py +0 -0
  106. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/review.py +0 -0
  107. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/sandbox.py +0 -0
  108. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/skills.py +0 -0
  109. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/tasks.py +0 -0
  110. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/trace_import.py +0 -0
  111. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/train.py +0 -0
  112. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/continue_run/__init__.py +0 -0
  113. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/continue_run/batch.py +0 -0
  114. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/continue_run/orchestrator.py +0 -0
  115. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/continue_run/replay_proxy.py +0 -0
  116. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/continue_run/run_folder.py +0 -0
  117. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
  118. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/contracts/__init__.py +0 -0
  119. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/contracts/planes.py +0 -0
  120. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/contracts/user.py +0 -0
  121. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/demo_task/environment/Dockerfile +0 -0
  122. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/demo_task/instruction.md +0 -0
  123. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/demo_task/task.md +0 -0
  124. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/demo_task/task.toml +0 -0
  125. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/demo_task/tests/test.sh +0 -0
  126. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/diagnostics.py +0 -0
  127. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/environment/__init__.py +0 -0
  128. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
  129. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
  130. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/environment/manifest.py +0 -0
  131. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/environment/manifest_env.py +0 -0
  132. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/environment/protocol.py +0 -0
  133. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/environment/readiness.py +0 -0
  134. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/eval_artifacts.py +0 -0
  135. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/eval_lift.py +0 -0
  136. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/eval_plan.py +0 -0
  137. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/eval_sharding.py +0 -0
  138. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/eval_worker.py +0 -0
  139. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/evaluation.py +0 -0
  140. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/experimental/__init__.py +0 -0
  141. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/experimental/mcp/__init__.py +0 -0
  142. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/experimental/mcp/hooks.py +0 -0
  143. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
  144. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/hosted_env.py +0 -0
  145. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/hub/__init__.py +0 -0
  146. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/hub/harbor_registry.py +0 -0
  147. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/integrations/__init__.py +0 -0
  148. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/integrations/trl/__init__.py +0 -0
  149. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/integrations/trl/spec.py +0 -0
  150. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/learner_skills.py +0 -0
  151. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/learner_store.py +0 -0
  152. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/loop_strategies.py +0 -0
  153. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/loop_sweep.py +0 -0
  154. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/metrics.py +0 -0
  155. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/models.py +0 -0
  156. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/monitor.py +0 -0
  157. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/providers/__init__.py +0 -0
  158. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
  159. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
  160. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/providers/litellm_config.py +0 -0
  161. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/providers/litellm_logging.py +0 -0
  162. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/providers/litellm_runtime.py +0 -0
  163. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/providers/runtime.py +0 -0
  164. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/publish/__init__.py +0 -0
  165. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/publish/_progress.py +0 -0
  166. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/publish/azure_blob.py +0 -0
  167. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/publish/broker.py +0 -0
  168. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/publish/huggingface.py +0 -0
  169. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/py.typed +0 -0
  170. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/review/__init__.py +0 -0
  171. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/review/config.py +0 -0
  172. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/review/default-rubric.json +0 -0
  173. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/review/prompts.py +0 -0
  174. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/review/runner.py +0 -0
  175. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/review/wrapper.py +0 -0
  176. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/README.md +0 -0
  177. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/__init__.py +0 -0
  178. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/builtins.py +0 -0
  179. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/events.py +0 -0
  180. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/file_readers.py +0 -0
  181. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/llm.py +0 -0
  182. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/memory_scorer.py +0 -0
  183. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/node.py +0 -0
  184. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/protocol.py +0 -0
  185. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/rubric.py +0 -0
  186. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/rubric_config.py +0 -0
  187. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/validation.py +0 -0
  188. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/__init__.py +0 -0
  189. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/_config.py +0 -0
  190. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/_deadline.py +0 -0
  191. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/_results.py +0 -0
  192. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/_setup.py +0 -0
  193. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/_skills.py +0 -0
  194. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/_usage.py +0 -0
  195. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/_user_loop.py +0 -0
  196. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/session_factory_runtime.py +0 -0
  197. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/task_runtime.py +0 -0
  198. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout_branch.py +0 -0
  199. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout_planes.py +0 -0
  200. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/runtime.py +0 -0
  201. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/__init__.py +0 -0
  202. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/_base.py +0 -0
  203. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
  204. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/_compose.py +0 -0
  205. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
  206. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
  207. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
  208. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
  209. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/_sdk_ops.py +0 -0
  210. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/agentcore.py +0 -0
  211. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/agentcore_builder.py +0 -0
  212. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/agentcore_image.py +0 -0
  213. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
  214. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
  215. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
  216. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/apple_container.py +0 -0
  217. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/daytona.py +0 -0
  218. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/daytona_dind.py +0 -0
  219. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/daytona_pty.py +0 -0
  220. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/daytona_reaper.py +0 -0
  221. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/daytona_strategies.py +0 -0
  222. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/docker.py +0 -0
  223. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/lockdown.py +0 -0
  224. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/metadata.py +0 -0
  225. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/modal_impl.py +0 -0
  226. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/process/__init__.py +0 -0
  227. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/process/_base.py +0 -0
  228. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/process/agentcore.py +0 -0
  229. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/process/apple.py +0 -0
  230. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/process/daytona.py +0 -0
  231. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/process/docker.py +0 -0
  232. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/protocol.py +0 -0
  233. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/providers.py +0 -0
  234. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/services.py +0 -0
  235. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/setup.py +0 -0
  236. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/snapshot.py +0 -0
  237. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/user.py +0 -0
  238. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/scenes.py +0 -0
  239. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sdk.py +0 -0
  240. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/self_gen.py +0 -0
  241. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/skill_eval/__init__.py +0 -0
  242. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/skill_eval/_core.py +0 -0
  243. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/skill_eval/gepa_export.py +0 -0
  244. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/skill_eval/schema.py +0 -0
  245. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/skill_policy.py +0 -0
  246. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/skills.py +0 -0
  247. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/__init__.py +0 -0
  248. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/_document_evidence.py +0 -0
  249. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/_document_normalize.py +0 -0
  250. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/_document_parse.py +0 -0
  251. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/_document_profiles.py +0 -0
  252. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/acceptance_live.py +0 -0
  253. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/acceptance_live_model.py +0 -0
  254. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/acceptance_live_report.py +0 -0
  255. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/acceptance_live_validation.py +0 -0
  256. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/config.py +0 -0
  257. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/discovery.py +0 -0
  258. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/document.py +0 -0
  259. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/env.py +0 -0
  260. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/export.py +0 -0
  261. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/imports.py +0 -0
  262. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/output_format.py +0 -0
  263. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/package.py +0 -0
  264. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/paths.py +0 -0
  265. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/prompts.py +0 -0
  266. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/runtime_capabilities.py +0 -0
  267. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/runtime_view.py +0 -0
  268. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/task.py +0 -0
  269. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier.py +0 -0
  270. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier_core.py +0 -0
  271. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier_document.py +0 -0
  272. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier_errors.py +0 -0
  273. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier_judge_inputs.py +0 -0
  274. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier_ors_episode.py +0 -0
  275. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier_reward_kit.py +0 -0
  276. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier_scan.py +0 -0
  277. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier_script_strategy.py +0 -0
  278. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/templates/__init__.py +0 -0
  279. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/templates/judge.py.tmpl +0 -0
  280. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/templates/test.sh.tmpl +0 -0
  281. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/traces/__init__.py +0 -0
  282. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/traces/huggingface.py +0 -0
  283. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/traces/local.py +0 -0
  284. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/traces/models.py +0 -0
  285. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/traces/parsers.py +0 -0
  286. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/traces/task_gen.py +0 -0
  287. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/training/__init__.py +0 -0
  288. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/training/backends/__init__.py +0 -0
  289. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/training/backends/prime_rl.py +0 -0
  290. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/training/run_manifest.py +0 -0
  291. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/__init__.py +0 -0
  292. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/_capture.py +0 -0
  293. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/_export_common.py +0 -0
  294. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/_llm_capture.py +0 -0
  295. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/call_purpose.py +0 -0
  296. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/export.py +0 -0
  297. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/export_adp.py +0 -0
  298. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/export_atif.py +0 -0
  299. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/export_prime_sft.py +0 -0
  300. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/export_trl_sft.py +0 -0
  301. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/metrics.py +0 -0
  302. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/results.py +0 -0
  303. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/sessions.py +0 -0
  304. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/tree.py +0 -0
  305. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
  306. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/usage_tracking.py +0 -0
  307. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/__init__.py +0 -0
  308. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/acceptance_live_harness.py +0 -0
  309. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/__init__.py +0 -0
  310. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/test_manifest_dirscan.py +0 -0
  311. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/test_manifest_loader.py +0 -0
  312. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/test_manifest_parity.py +0 -0
  313. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/test_manifest_wiring.py +0 -0
  314. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/test_namespace_shorthand.py +0 -0
  315. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/test_plugin_entry_points.py +0 -0
  316. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/test_protocol.py +0 -0
  317. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/test_remote_manifest_autoload.py +0 -0
  318. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/README.md +0 -0
  319. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
  320. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
  321. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
  322. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/acp_smoke/instruction.md +0 -0
  323. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
  324. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/acp_smoke/task.md +0 -0
  325. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/acp_smoke/task.toml +0 -0
  326. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/acp_smoke/tests/test.sh +0 -0
  327. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/conformance-results.json +0 -0
  328. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/proof_multi_agent.py +0 -0
  329. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/proof_snapshot.py +0 -0
  330. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/run_conformance.py +0 -0
  331. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
  332. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conftest.py +0 -0
  333. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/continue_run/__init__.py +0 -0
  334. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/continue_run/_helpers.py +0 -0
  335. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/continue_run/test_batch.py +0 -0
  336. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/continue_run/test_orchestrator.py +0 -0
  337. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/continue_run/test_replay_proxy.py +0 -0
  338. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/continue_run/test_run_folder.py +0 -0
  339. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/environment/__init__.py +0 -0
  340. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/environment/test_chibench_manifest.py +0 -0
  341. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/environment/test_clawsbench_manifest.py +0 -0
  342. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/environment/test_manifest.py +0 -0
  343. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/environment/test_manifest_env.py +0 -0
  344. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/environment/test_protocol.py +0 -0
  345. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/environment/test_readiness.py +0 -0
  346. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
  347. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/hello-world-task/instruction.md +0 -0
  348. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/hello-world-task/solution/solve.sh +0 -0
  349. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/hello-world-task/task.md +0 -0
  350. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/hello-world-task/task.toml +0 -0
  351. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/hello-world-task/tests/test.sh +0 -0
  352. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/test_claude.sh +0 -0
  353. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/test_codex.sh +0 -0
  354. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/test_codex_custom_provider.sh +0 -0
  355. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/test_gemini.sh +0 -0
  356. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/test_openclaw.sh +0 -0
  357. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/traces/minimal-claude.jsonl +0 -0
  358. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
  359. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/README.md +0 -0
  360. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
  361. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
  362. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/alpha-task/task.toml +0 -0
  363. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
  364. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
  365. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
  366. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/beta-task/instruction.md +0 -0
  367. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/beta-task/task.toml +0 -0
  368. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
  369. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/mock_acp_agent.py +0 -0
  370. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
  371. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
  372. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/mock_openai_responses_server.py +0 -0
  373. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
  374. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
  375. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
  376. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
  377. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
  378. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
  379. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
  380. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
  381. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
  382. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
  383. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
  384. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
  385. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
  386. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
  387. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
  388. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
  389. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
  390. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
  391. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
  392. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
  393. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
  394. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
  395. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
  396. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
  397. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
  398. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
  399. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
  400. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
  401. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
  402. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
  403. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
  404. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
  405. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
  406. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
  407. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
  408. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
  409. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
  410. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
  411. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
  412. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
  413. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
  414. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
  415. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
  416. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
  417. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
  418. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
  419. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
  420. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
  421. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
  422. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
  423. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
  424. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
  425. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
  426. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
  427. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
  428. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
  429. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
  430. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
  431. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
  432. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
  433. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/_consistency.py +0 -0
  434. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/agent_judge.py +0 -0
  435. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/check_adapter_evidence.py +0 -0
  436. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/check_hosted_env_evidence.py +0 -0
  437. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/check_results.py +0 -0
  438. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
  439. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/check_trace_to_task_evidence.py +0 -0
  440. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/claude-agent-acp.yaml +0 -0
  441. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/codex-acp.yaml +0 -0
  442. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/gemini.yaml +0 -0
  443. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
  444. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/mimo.yaml +0 -0
  445. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/openclaw.yaml +0 -0
  446. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/opencode.yaml +0 -0
  447. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/openhands.yaml +0 -0
  448. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/pi-acp.yaml +0 -0
  449. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/deepagents_harness.py +0 -0
  450. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/rubric_checks.py +0 -0
  451. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/run.sh +0 -0
  452. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/run_suite.py +0 -0
  453. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/scenarios.py +0 -0
  454. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/suites/release.yaml +0 -0
  455. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acceptance_evidence.py +0 -0
  456. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acceptance_live.py +0 -0
  457. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acceptance_live_execution.py +0 -0
  458. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acp.py +0 -0
  459. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acp_capability_advertising.py +0 -0
  460. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acp_mcp_servers.py +0 -0
  461. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acp_model_config_dispatch.py +0 -0
  462. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acp_pinned_protocol_guard.py +0 -0
  463. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acp_setup_failure_propagation.py +0 -0
  464. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_adapter_scripts.py +0 -0
  465. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_adapters.py +0 -0
  466. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_cli.py +0 -0
  467. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_env_resolution.py +0 -0
  468. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_gemini_defaults.py +0 -0
  469. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_idle_timeout_cli.py +0 -0
  470. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_model_decouple.py +0 -0
  471. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_registry.py +0 -0
  472. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_router.py +0 -0
  473. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_router_cli_e2e.py +0 -0
  474. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_router_scaffold.py +0 -0
  475. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_setup.py +0 -0
  476. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_spec.py +0 -0
  477. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agentcore_builder.py +0 -0
  478. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agentcore_parallel.py +0 -0
  479. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agentcore_reaper.py +0 -0
  480. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agentcore_sandbox.py +0 -0
  481. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agentcore_transport.py +0 -0
  482. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_api_error_capture.py +0 -0
  483. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_apple_container_sandbox.py +0 -0
  484. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_bare_model_provider.py +0 -0
  485. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_base_install_imports.py +0 -0
  486. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_bedrock_thinking.py +0 -0
  487. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_benchflow_experiment_review_validator.py +0 -0
  488. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
  489. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_branch.py +0 -0
  490. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_build_context_stage.py +0 -0
  491. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_build_review_pack.py +0 -0
  492. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_capture_trajectory.py +0 -0
  493. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_check_skillsbench_harbor_parity.py +0 -0
  494. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_clawsbench_slice.py +0 -0
  495. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_cli_adopt_aliases.py +0 -0
  496. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_cli_arg_validation.py +0 -0
  497. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_cli_daytona.py +0 -0
  498. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_cli_docs_drift.py +0 -0
  499. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_cli_hub_env.py +0 -0
  500. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_cli_live_progress.py +0 -0
  501. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_cli_misc.py +0 -0
  502. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_codex_review.py +0 -0
  503. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_codex_self_write_auth.py +0 -0
  504. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_config_override.py +0 -0
  505. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_config_redaction.py +0 -0
  506. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_connect_as_env.py +0 -0
  507. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_console_error_truncation.py +0 -0
  508. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_console_progress.py +0 -0
  509. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_continuallearningbench_adapter.py +0 -0
  510. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_dataset_registry.py +0 -0
  511. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_daytona_command_polling.py +0 -0
  512. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_daytona_dind_compose_up.py +0 -0
  513. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_daytona_download.py +0 -0
  514. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_daytona_litellm_runtime.py +0 -0
  515. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_daytona_poll_deadline.py +0 -0
  516. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_daytona_reap.py +0 -0
  517. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_deepagents_agent.py +0 -0
  518. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_diagnostics.py +0 -0
  519. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_docker_prune_scoping.py +0 -0
  520. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_docker_uploads.py +0 -0
  521. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_docs_examples.py +0 -0
  522. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eng50_capabilities.py +0 -0
  523. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_env_registry.py +0 -0
  524. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_env_setup.py +0 -0
  525. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_environment_manifest_controls.py +0 -0
  526. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eval_artifact_cli.py +0 -0
  527. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eval_filters_applied.py +0 -0
  528. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eval_lift.py +0 -0
  529. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eval_sharding.py +0 -0
  530. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eval_single_task_summary.py +0 -0
  531. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eval_source_provenance.py +0 -0
  532. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eval_worker_retry.py +0 -0
  533. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eval_zero_task_guard.py +0 -0
  534. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_evaluation_environment_manifest.py +0 -0
  535. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_exclude_tasks.py +0 -0
  536. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_filter_credentialed_cells.py +0 -0
  537. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_harvey_lab_shim.py +0 -0
  538. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_hilbench_adapter.py +0 -0
  539. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_hosted_env.py +0 -0
  540. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_hosted_env_rollout_contract.py +0 -0
  541. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_hub_harbor_registry.py +0 -0
  542. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_inbound_adapter_manifest.py +0 -0
  543. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_inbound_adapters.py +0 -0
  544. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_integration_agent_judge.py +0 -0
  545. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_integration_check_results.py +0 -0
  546. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_integration_consistency.py +0 -0
  547. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_integration_matrix.py +0 -0
  548. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_integration_provider_selection.py +0 -0
  549. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_integration_run_suite.py +0 -0
  550. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_integration_suite.py +0 -0
  551. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_internet_policy.py +0 -0
  552. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_job.py +0 -0
  553. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_job_sequential_shared.py +0 -0
  554. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_job_sequential_shared_resume.py +0 -0
  555. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_judge_robustness.py +0 -0
  556. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_judge_symlink_ingestion.py +0 -0
  557. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_learner_skills.py +0 -0
  558. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_learner_skills_traversal.py +0 -0
  559. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_learner_store.py +0 -0
  560. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_learner_store_persistence.py +0 -0
  561. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_litellm_config.py +0 -0
  562. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_litellm_hardening.py +0 -0
  563. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_litellm_logging.py +0 -0
  564. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_litellm_model_via_env_generic.py +0 -0
  565. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_litellm_reasoning_passthrough.py +0 -0
  566. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_litellm_runtime.py +0 -0
  567. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_litellm_smoke.py +0 -0
  568. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_live_llm_trajectory.py +0 -0
  569. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_llm_judge.py +0 -0
  570. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_llm_judge_event_tags.py +0 -0
  571. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_llm_judge_verifier.py +0 -0
  572. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_loop_strategies.py +0 -0
  573. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_loop_summary.py +0 -0
  574. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_loop_sweep.py +0 -0
  575. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_memory_scorer.py +0 -0
  576. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_metrics.py +0 -0
  577. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_mle_bench_adapter.py +0 -0
  578. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_mock_openai_responses_server.py +0 -0
  579. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_monitor_scaffold.py +0 -0
  580. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_native_acp_usage.py +0 -0
  581. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_no_cross_provider_fallback.py +0 -0
  582. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_notification_order_real.py +0 -0
  583. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_opencode_family_proxy_tracking.py +0 -0
  584. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_oracle.py +0 -0
  585. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_oracle_chokepoint.py +0 -0
  586. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_paths_safe.py +0 -0
  587. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_paths_symlink_helpers.py +0 -0
  588. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_pi_acp_launcher.py +0 -0
  589. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_pi_acp_proxy_routing.py +0 -0
  590. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_process.py +0 -0
  591. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_project_skills_layout.py +0 -0
  592. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_provider_auth_detection.py +0 -0
  593. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_providers.py +0 -0
  594. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_publish_azure_blob.py +0 -0
  595. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_reexport.py +0 -0
  596. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_registry_invariants.py +0 -0
  597. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_release_hardening_r5.py +0 -0
  598. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_release_version.py +0 -0
  599. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_release_workflow_wiring.py +0 -0
  600. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_resolve_env_helpers.py +0 -0
  601. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_review_boundaries.py +0 -0
  602. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_review_rubric.py +0 -0
  603. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_review_runtime.py +0 -0
  604. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_reward_lenient.py +0 -0
  605. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_reward_node.py +0 -0
  606. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_reward_range.py +0 -0
  607. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_reward_unified_contract.py +0 -0
  608. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rewards.py +0 -0
  609. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rewards_jsonl.py +0 -0
  610. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_architecture.py +0 -0
  611. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_branch.py +0 -0
  612. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_config_path_coercion.py +0 -0
  613. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_environment.py +0 -0
  614. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_hard_deadline.py +0 -0
  615. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_import_no_side_effects.py +0 -0
  616. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_on_ask_user_wiring.py +0 -0
  617. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_planes_contract.py +0 -0
  618. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_probe_sandbox_health.py +0 -0
  619. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_session_factory_dispatch.py +0 -0
  620. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_setup_commands.py +0 -0
  621. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_upload.py +0 -0
  622. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rubric_checks.py +0 -0
  623. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rubric_config.py +0 -0
  624. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_runtime.py +0 -0
  625. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_runtime_capabilities.py +0 -0
  626. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_runtime_config_wired.py +0 -0
  627. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_runtime_live_sandbox.py +0 -0
  628. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox.py +0 -0
  629. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_exec_secret_handling.py +0 -0
  630. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_hardening.py +0 -0
  631. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
  632. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_live_process.py +0 -0
  633. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_multi_service.py +0 -0
  634. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_prebuilt_validation.py +0 -0
  635. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_protocol.py +0 -0
  636. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_provider_registry_drift.py +0 -0
  637. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_setup.py +0 -0
  638. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_snapshot_contract.py +0 -0
  639. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_upload_symlink.py +0 -0
  640. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_verifier_workspace.py +0 -0
  641. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_scene.py +0 -0
  642. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_scene_outbox_trial.py +0 -0
  643. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_scene_parallel_group.py +0 -0
  644. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_scene_result_aggregation.py +0 -0
  645. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_scoring.py +0 -0
  646. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sdk_internals.py +0 -0
  647. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sdk_lockdown.py +0 -0
  648. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sdk_run_alias.py +0 -0
  649. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sealed_channel_container.py +0 -0
  650. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_self_gen_cli.py +0 -0
  651. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_self_gen_export_error_channel.py +0 -0
  652. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_self_gen_export_failures.py +0 -0
  653. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_self_gen_orchestration.py +0 -0
  654. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_session_factory_runtime.py +0 -0
  655. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_session_request_permission_dispatch.py +0 -0
  656. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skill_eval.py +0 -0
  657. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skill_eval_dryrun.py +0 -0
  658. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skill_eval_integration.py +0 -0
  659. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skill_eval_sweep.py +0 -0
  660. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skill_eval_traversal.py +0 -0
  661. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skill_invocation_artifacts.py +0 -0
  662. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skill_policy.py +0 -0
  663. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skills.py +0 -0
  664. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skills_dir_agent_home_link.py +0 -0
  665. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skillsbench_conversion_conformance.py +0 -0
  666. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skillsbench_harbor_run_suite.py +0 -0
  667. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_smoke.py +0 -0
  668. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_smoke_wiring.py +0 -0
  669. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_source_adapters.py +0 -0
  670. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_subscription_auth.py +0 -0
  671. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_check_eval_consistency.py +0 -0
  672. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_config.py +0 -0
  673. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_digest.py +0 -0
  674. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_document.py +0 -0
  675. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_download.py +0 -0
  676. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_export.py +0 -0
  677. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_output_format.py +0 -0
  678. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_package.py +0 -0
  679. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_runtime_primitive.py +0 -0
  680. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_tasks.py +0 -0
  681. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_token_usage_normalization.py +0 -0
  682. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trace_import_cli.py +0 -0
  683. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trace_task_gen_traversal.py +0 -0
  684. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trace_to_task_evidence.py +0 -0
  685. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_traces_huggingface.py +0 -0
  686. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_traces_parsers.py +0 -0
  687. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_traces_task_gen.py +0 -0
  688. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_train_cli.py +0 -0
  689. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_train_mode_artifact_emission.py +0 -0
  690. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_train_trl_cli.py +0 -0
  691. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_traj_staging_phases.py +0 -0
  692. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_traj_upload_skill.py +0 -0
  693. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trajectory_integration.py +0 -0
  694. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trajectory_streaming.py +0 -0
  695. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trajectory_upload_layout.py +0 -0
  696. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trajectory_upload_service.py +0 -0
  697. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trial_agent_timeout_verify.py +0 -0
  698. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trial_install_agent_timeout.py +0 -0
  699. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trial_litellm_runtime.py +0 -0
  700. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trl_integration.py +0 -0
  701. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_usage_litellm.py +0 -0
  702. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_usage_required.py +0 -0
  703. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_usage_tracking.py +0 -0
  704. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_user.py +0 -0
  705. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_v06_guard_ports.py +0 -0
  706. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_verifier_document.py +0 -0
  707. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_verifier_multi_container.py +0 -0
  708. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_verifier_output.py +0 -0
  709. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_verifier_output_freshness.py +0 -0
  710. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_verifier_strategies.py +0 -0
  711. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_verifier_wedge_retry.py +0 -0
  712. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_verify.py +0 -0
  713. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_workflow_action_pinning.py +0 -0
  714. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_yaml_config.py +0 -0
  715. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/__init__.py +0 -0
  716. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_export.py +0 -0
  717. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_export_adp.py +0 -0
  718. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_export_atif.py +0 -0
  719. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_export_common.py +0 -0
  720. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_export_nan_handling.py +0 -0
  721. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_export_prime_sft.py +0 -0
  722. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_step_granularity.py +0 -0
  723. {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_tree.py +0 -0
@@ -2,6 +2,114 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## 0.7.2 — 2026-08-16
6
+
7
+ ### Added
8
+ - **The upload preview itemizes what redaction masked, by kind.** The
9
+ redactor now categorizes every replacement by the rule that fired — API
10
+ keys, bearer tokens, private key blocks, passwords, URL credentials, and
11
+ credential-bearing field values — and the terminal trajectory report shows
12
+ a `Masked for you: 2 API keys, 1 bearer token — originals never leave this
13
+ machine` breakdown under the masked-count row, plus a reassurance that
14
+ redaction ran locally and the server independently rescans staged
15
+ artifacts (or `No secrets or personal identifiers detected — nothing
16
+ needed masking.` when nothing matched). `bench traj upload --dry-run`
17
+ prints the same breakdown as a plain `Masked for you:` line, and
18
+ `bench eval view --confirm` gains a display-only `--redaction-summary`
19
+ flag that renders it in the confirm bar next to the Approve button; the
20
+ `benchflow-traj-upload` skill stages a dry run first and passes the line
21
+ through. The total `redaction_replacements` count and the manifest
22
+ `trajectory_report` contract are unchanged (the server validates the
23
+ report with a closed schema and exact recompute equality, so per-category
24
+ counts stay display-only).
25
+ - **The trajectory viewer can collect the eval-prize confirmation in the
26
+ browser.** `bench eval view PATH --confirm` renders the normal page plus a
27
+ sticky site-styled bottom bar ("Submit this trajectory to the BenchFlow
28
+ eval prize?") with **Approve & submit** / **Not this one** buttons. A click
29
+ POSTs to `/decision`; the server prints a machine-readable
30
+ `DECISION: approved` or `DECISION: rejected` line to stdout, shuts down,
31
+ and the CLI exits `0` on approve and `3` on reject (non-1/2 so rejection
32
+ never collides with error or usage exits). Without the flag, behavior is
33
+ unchanged (no bar, no endpoint, Ctrl+C to stop). The
34
+ `benchflow-traj-upload` skill now prefers the button flow and falls back
35
+ to chat confirmation on CLIs older than 0.7.2.
36
+ - **Trajectory uploads are tagged with the session's repository by
37
+ default.** Unless `--source-id` is given, `bench traj upload` reads the
38
+ session's recorded working directory (Claude `cwd` events, Codex
39
+ `session_meta`), resolves its git `origin` remote, and stores
40
+ `repo/<owner>/<name>` as the manifest source id, printing
41
+ `Repo: owner/name (from session cwd /path; use --no-repo to omit)` (the
42
+ local path is terminal output only, never uploaded). `--no-repo` opts out
43
+ — the `benchflow-traj-upload` skill now surfaces the detected tag during
44
+ the confirm step so contributors can decline it for private repos — and
45
+ undetectable repos fall back silently to the path-derived source id.
46
+
47
+ ### Fixed
48
+ - **The repo tag derives only from the session's own recorded cwd.** The
49
+ initial repo-tagging implementation (#1015) fell back to the upload
50
+ invocation directory's git remote when the session cwd yielded nothing; a
51
+ collector-side audit showed this mis-attributes provenance — a session
52
+ recorded in a non-repo directory, uploaded from the benchflow checkout,
53
+ was tagged `repo/benchflow-ai/benchflow` (two community-dataset entries
54
+ carry the mis-tag). The fallback is removed: no session cwd, a missing
55
+ directory, or no GitHub remote now mean no repo tag, exactly like
56
+ `--no-repo`.
57
+ - **The trajectory viewer header no longer shows `?` badges on real Claude
58
+ Code sessions.** `bench eval view` on a `~/.claude` session JSONL rendered
59
+ `model: ?`, `session: ?...`, `claude code: ?`, and `total cost: $0.0000`
60
+ because the header only read a `type: system` event that real session
61
+ files don't contain. The header now derives its metadata from what the
62
+ file actually carries (first assistant event's `message.model`, per-event
63
+ `version` / `sessionId`, the filename stem as a session fallback) and
64
+ hides any badge whose value is unknown — including the cost badge when no
65
+ event carries cost data. Presentation only.
66
+ - **Upload progress no longer claims the broker is waking up.** A warm
67
+ retry printed `Uploading… the first request can take a minute while the
68
+ service wakes up` even when the service was already up. The line is now
69
+ `Uploading… this can take up to a minute; retries are safe.`
70
+ - **`bench traj setup --list` no longer wraps session paths mid-token.**
71
+ Each hit prints index/source/time, then the path on its own line, then
72
+ the snippet, via plain `print` so Rich does not split a long JSONL path
73
+ and break copy-paste.
74
+
75
+ ### Changed
76
+ - **Trajectory viewer tool calls are color-coded and backgrounds are light.**
77
+ Each tool kind now gets a muted GitHub-label-style accent on its name pill
78
+ and a left border strip on the card: shell/exec → amber, write/edit → blue,
79
+ read → teal, agent/task/skill → purple, web/search/fetch → cyan, everything
80
+ else → neutral gray. Tool arguments and tool outputs render on light
81
+ surfaces (`#f5f5f5` / white with dark ink) instead of near-black blocks;
82
+ the dark `#141414` terminal treatment is reserved for shell-command output
83
+ only, and the ink-black result card stays as the deliberate bento-ink
84
+ accent. Presentation only (CSS classes + a tool-name→accent mapping);
85
+ content strings and behavior are unchanged. Applies to all three viewer
86
+ templates, which share one stylesheet since #1019.
87
+ - **The contributor prompt now tells the agent to upgrade BenchFlow first.**
88
+ `CONTRIBUTOR_PROMPT` (kept in sync in `README.md`, `docs/traj-upload.md`,
89
+ and the `benchflow-traj-upload` skill evals) is a three-line block that
90
+ says to run `uv tool install --python 3.12 --upgrade --force benchflow`
91
+ before reading the skill, so agents that skim the skill or hit a stale copy
92
+ still install the latest CLI. The prompt also names OpenCode and Cursor
93
+ sessions and the re:Agent hackathon 72-hour window; README/docs render it
94
+ as a blockquote (soft-wraps on GitHub) behind an explicit "send this to
95
+ your coding agent" framing, and `bench traj setup` prints the same framing.
96
+ The skill's Discover step gains best-effort Cursor
97
+ (`~/.cursor/projects/*/agent-transcripts/`) and OpenCode
98
+ (`~/.local/share/opencode/opencode.db`, `opencode db path`) locations plus
99
+ a prefer-recent-matching-sessions note. Follow-up to the version
100
+ precondition from #1013/#1014.
101
+ - **Trajectory viewer restyled to match www.benchflow.ai.** All three
102
+ `bench eval view` pages (stream-json/JSONL, ACP events, multi-turn trial)
103
+ now share one inline stylesheet with the site's design language: light
104
+ monochrome palette (`#fafafa` page, white cards, `#0a0a0a` ink, dark
105
+ `#141414` code blocks), Satoshi/Google Sans Code font stacks with
106
+ system-safe fallbacks, mono pill badges, and a small BenchFlow wordmark
107
+ header with the inline SVG logo. Pages remain fully offline (no external
108
+ font or CDN requests) and content/structure semantics are unchanged;
109
+ follows the contributor paste-line flow from #1013.
110
+
111
+ ## 0.7.1 — 2026-08-16
112
+
5
113
  ### Added
6
114
  - **`bench traj setup` / `bench traj upload` print an upgrade hint when
7
115
  outdated.** Both commands start with a lightweight PyPI latest-version
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: benchflow
3
- Version: 0.7.1.dev1972
3
+ Version: 0.7.2
4
4
  Summary: Multi-turn agent benchmarking with ACP — run any agent, any model, any provider.
5
5
  Project-URL: Homepage, https://github.com/benchflow-ai/benchflow
6
6
  Project-URL: Repository, https://github.com/benchflow-ai/benchflow
@@ -89,20 +89,23 @@ BenchFlow is a universal environment framework: it runs AI agents against task e
89
89
 
90
90
  ## Quick start: 1. Submit a trajectory
91
91
 
92
- Proud of a Claude Code or Codex session? Copy this line into Claude Code,
93
- Codex, Cursor, or any coding agent. That is the $2,000 eval prize path. No
94
- BenchFlow account, API key, or Azure login.
92
+ **Send these to your coding agent.** Copy
93
+ the block below and paste it as a message to Claude Code, Codex, OpenCode, or
94
+ Cursor. That is the $2,000 eval prize path. No BenchFlow account, API key, or
95
+ Azure login.
95
96
 
96
- ```
97
- Submit my best local Claude Code or Codex session to the BenchFlow eval prize. Read https://raw.githubusercontent.com/benchflow-ai/benchflow/main/.agents/skills/benchflow-traj-upload/SKILL.md and follow it: find a session, open the viewer, upload only after I review it.
98
- ```
97
+ > Submit my relevant local Claude Code, Codex, OpenCode, or Cursor session from the re:Agent e2e agentic science / ai4bio hackathon (last 72 hours, on this laptop) to the BenchFlow eval prize.
98
+ >
99
+ > 1. First make sure the latest benchflow CLI is installed: uv tool install --python 3.12 --upgrade --force benchflow
100
+ >
101
+ > 2. Then read https://raw.githubusercontent.com/benchflow-ai/benchflow/main/.agents/skills/benchflow-traj-upload/SKILL.md and follow it: find a session, open the viewer, and upload only after I (the human) review it.
99
102
 
100
103
  The agent finds sessions on this machine, opens the viewer, and uploads after
101
104
  you like what you see.
102
105
 
103
- Be on the latest BenchFlow first `uv tool install --python 3.12 --upgrade
104
- --force benchflow`. The `bench traj` commands print a one-line upgrade hint
105
- when a newer release is available.
106
+ The prompt has the agent install the latest BenchFlow first (`uv tool
107
+ install --python 3.12 --upgrade --force benchflow`). The `bench traj` commands
108
+ also print a one-line upgrade hint when a newer release is available.
106
109
 
107
110
  Prefer the terminal instead? The guided upload inspects before anything leaves
108
111
  your machine — it renders a redacted trajectory report (step counts, masked
@@ -128,7 +131,7 @@ bench traj setup
128
131
  ```
129
132
 
130
133
  `npx skills add` asks which agents to install for. `bench traj setup` copies
131
- the skill into this project and prints the same paste line. See the
134
+ the skill into this project and prints the same agent prompt. See the
132
135
  [upload skill](./.agents/skills/benchflow-traj-upload/SKILL.md).
133
136
 
134
137
  ## Quick start: 2. Run with a ChatGPT or Claude subscription
@@ -15,20 +15,23 @@ BenchFlow is a universal environment framework: it runs AI agents against task e
15
15
 
16
16
  ## Quick start: 1. Submit a trajectory
17
17
 
18
- Proud of a Claude Code or Codex session? Copy this line into Claude Code,
19
- Codex, Cursor, or any coding agent. That is the $2,000 eval prize path. No
20
- BenchFlow account, API key, or Azure login.
18
+ **Send these to your coding agent.** Copy
19
+ the block below and paste it as a message to Claude Code, Codex, OpenCode, or
20
+ Cursor. That is the $2,000 eval prize path. No BenchFlow account, API key, or
21
+ Azure login.
21
22
 
22
- ```
23
- Submit my best local Claude Code or Codex session to the BenchFlow eval prize. Read https://raw.githubusercontent.com/benchflow-ai/benchflow/main/.agents/skills/benchflow-traj-upload/SKILL.md and follow it: find a session, open the viewer, upload only after I review it.
24
- ```
23
+ > Submit my relevant local Claude Code, Codex, OpenCode, or Cursor session from the re:Agent e2e agentic science / ai4bio hackathon (last 72 hours, on this laptop) to the BenchFlow eval prize.
24
+ >
25
+ > 1. First make sure the latest benchflow CLI is installed: uv tool install --python 3.12 --upgrade --force benchflow
26
+ >
27
+ > 2. Then read https://raw.githubusercontent.com/benchflow-ai/benchflow/main/.agents/skills/benchflow-traj-upload/SKILL.md and follow it: find a session, open the viewer, and upload only after I (the human) review it.
25
28
 
26
29
  The agent finds sessions on this machine, opens the viewer, and uploads after
27
30
  you like what you see.
28
31
 
29
- Be on the latest BenchFlow first `uv tool install --python 3.12 --upgrade
30
- --force benchflow`. The `bench traj` commands print a one-line upgrade hint
31
- when a newer release is available.
32
+ The prompt has the agent install the latest BenchFlow first (`uv tool
33
+ install --python 3.12 --upgrade --force benchflow`). The `bench traj` commands
34
+ also print a one-line upgrade hint when a newer release is available.
32
35
 
33
36
  Prefer the terminal instead? The guided upload inspects before anything leaves
34
37
  your machine — it renders a redacted trajectory report (step counts, masked
@@ -54,7 +57,7 @@ bench traj setup
54
57
  ```
55
58
 
56
59
  `npx skills add` asks which agents to install for. `bench traj setup` copies
57
- the skill into this project and prints the same paste line. See the
60
+ the skill into this project and prints the same agent prompt. See the
58
61
  [upload skill](./.agents/skills/benchflow-traj-upload/SKILL.md).
59
62
 
60
63
  ## Quick start: 2. Run with a ChatGPT or Claude subscription
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "benchflow"
3
- version = "0.7.1.dev1972"
3
+ version = "0.7.2"
4
4
  description = "Multi-turn agent benchmarking with ACP — run any agent, any model, any provider."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -20,10 +20,29 @@ from rich.progress import (
20
20
  from rich.table import Table
21
21
  from rich.text import Text
22
22
 
23
- from benchflow.publish.redact import REDACTED
23
+ from benchflow.publish.redact import REDACTED, format_redaction_breakdown
24
24
  from benchflow.publish.traj_capture import StagedFile
25
25
  from benchflow.publish.traj_report import PREVIEW_WORD_LIMIT, TrajectoryReport
26
26
 
27
+ # Redaction-transparency copy shown with the masked-value count. The wording is
28
+ # deliberately honest: redaction is a local structural pass (no agents, no
29
+ # token spend), and the server independently rescans staged artifacts.
30
+ NO_MASKING_NEEDED_COPY = (
31
+ "No secrets or personal identifiers detected — nothing needed masking."
32
+ )
33
+ REDACTION_REASSURANCE_COPY = (
34
+ "Redaction ran locally before anything was staged; "
35
+ "the server independently rescans and rejects any survivor."
36
+ )
37
+
38
+
39
+ def masked_for_you_line(report: TrajectoryReport) -> str:
40
+ """Itemized ``Masked for you`` copy for a report with masked values."""
41
+ breakdown = format_redaction_breakdown(dict(report.masked_categories))
42
+ if not breakdown: # category data unavailable — fall back to the total
43
+ breakdown = f"{report.masked_values} secret-like values"
44
+ return f"{breakdown} — originals never leave this machine"
45
+
27
46
 
28
47
  def render_trajectory_report(report: TrajectoryReport, *, console: Console) -> None:
29
48
  """Render upload facts and a bounded, already-redacted trajectory preview."""
@@ -43,8 +62,17 @@ def render_trajectory_report(report: TrajectoryReport, *, console: Console) -> N
43
62
  "API keys / secrets masked",
44
63
  Text(str(report.masked_values), style="bold green"),
45
64
  )
65
+ if report.masked_values:
66
+ facts.add_row(
67
+ "Masked for you",
68
+ Text(masked_for_you_line(report), style="green"),
69
+ )
70
+ else:
71
+ facts.add_row("Masked for you", Text(NO_MASKING_NEEDED_COPY, style="dim"))
46
72
  facts.add_row("Safe replacement", Text(REDACTED))
47
73
  console.print(Panel(facts, title="Trajectory report", border_style="cyan"))
74
+ if report.masked_values:
75
+ console.print(f"[dim]{REDACTION_REASSURANCE_COPY}[/dim]")
48
76
 
49
77
  if not report.preview:
50
78
  return
@@ -1228,11 +1228,41 @@ def eval_view(
1228
1228
  ),
1229
1229
  ],
1230
1230
  port: Annotated[int, typer.Option(help="Server port")] = 8888,
1231
+ confirm: Annotated[
1232
+ bool,
1233
+ typer.Option(
1234
+ "--confirm",
1235
+ help=(
1236
+ "Show an Approve & submit / Not this one bar on the page; "
1237
+ "print DECISION: approved|rejected and exit 0 on approve, "
1238
+ "3 on reject."
1239
+ ),
1240
+ ),
1241
+ ] = False,
1242
+ redaction_summary: Annotated[
1243
+ str | None,
1244
+ typer.Option(
1245
+ "--redaction-summary",
1246
+ help=(
1247
+ "Masked-secret breakdown shown in the --confirm bar, e.g. "
1248
+ "'2 API keys, 1 bearer token' (lift it from "
1249
+ "`bench traj upload PATH --dry-run`). Display-only; no effect "
1250
+ "without --confirm."
1251
+ ),
1252
+ ),
1253
+ ] = None,
1231
1254
  ) -> None:
1232
1255
  """View a trial or session trajectory in the browser."""
1233
- from benchflow.trajectories.viewer import serve
1256
+ from benchflow.trajectories import viewer
1234
1257
 
1235
- serve(str(rollout_dir), port)
1258
+ decision = viewer.serve(
1259
+ str(rollout_dir), port, confirm=confirm, redaction_summary=redaction_summary
1260
+ )
1261
+ # Exit-code contract for --confirm: 0 approved, 3 rejected. 3 is chosen
1262
+ # so a rejection never collides with the CLI's existing error exits
1263
+ # (1 = errors, 2 = Typer usage errors).
1264
+ if decision == "rejected":
1265
+ raise typer.Exit(3)
1236
1266
 
1237
1267
 
1238
1268
  # ── Command-group wiring ──────────────────────────────────────────────
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import json
5
6
  import os
6
7
  import shutil
7
8
  import subprocess
@@ -22,6 +23,7 @@ from benchflow.cli._traj_upload_ui import (
22
23
  render_trajectory_report,
23
24
  upload_progress,
24
25
  )
26
+ from benchflow.publish.redact import format_redaction_breakdown
25
27
  from benchflow.publish.traj_capture import (
26
28
  StagedCapture,
27
29
  default_source_id,
@@ -29,6 +31,7 @@ from benchflow.publish.traj_capture import (
29
31
  stage_trajectory_artifacts,
30
32
  validate_email,
31
33
  validate_github_id,
34
+ validate_source_id,
32
35
  )
33
36
  from benchflow.publish.traj_report import (
34
37
  DEFAULT_PREVIEW_STEPS,
@@ -52,14 +55,26 @@ SKILL_RAW_URL = (
52
55
  "/.agents/skills/benchflow-traj-upload/SKILL.md"
53
56
  )
54
57
 
58
+ UPGRADE_COMMAND = "uv tool install --python 3.12 --upgrade --force benchflow"
59
+
60
+ # Three unwrapped lines separated by blank lines: each logical unit is one
61
+ # full physical line (no hard wraps mid-sentence), so the URL and the upgrade
62
+ # command stay selectable in agents and terminals.
55
63
  CONTRIBUTOR_PROMPT = (
56
- "Submit my best local Claude Code or Codex session to the BenchFlow eval "
57
- "prize. Read "
58
- f"{SKILL_RAW_URL} "
59
- "and follow it: find a session, open the viewer, upload only after I review it."
64
+ "Submit my relevant local Claude Code, Codex, OpenCode, or Cursor session "
65
+ "from the re:Agent e2e agentic science / ai4bio hackathon (last 72 hours, "
66
+ "on this laptop) to the BenchFlow eval prize."
67
+ "\n\n"
68
+ f"1. First make sure the latest benchflow CLI is installed: {UPGRADE_COMMAND}"
69
+ "\n\n"
70
+ f"2. Then read {SKILL_RAW_URL} "
71
+ "and follow it: find a session, open the viewer, and upload only after "
72
+ "I (the human) review it."
60
73
  )
61
74
 
62
- UPGRADE_COMMAND = "uv tool install --python 3.12 --upgrade --force benchflow"
75
+ CONTRIBUTOR_PROMPT_FRAMING = (
76
+ "Send this to your coding agent (it's a prompt for the agent, not steps for you):"
77
+ )
63
78
 
64
79
 
65
80
  def _fetch_latest_version() -> str | None:
@@ -127,6 +142,7 @@ class _UploadOptions:
127
142
  github_id: str | None
128
143
  email: str | None
129
144
  source_id: str | None
145
+ repo: bool
130
146
  direct: bool
131
147
  container_url: str | None
132
148
  dry_run: bool
@@ -163,14 +179,14 @@ def register_traj(app: typer.Typer) -> None:
163
179
  ] = False,
164
180
  prompt_only: Annotated[
165
181
  bool,
166
- typer.Option("--prompt", help="Print the copy-paste agent line and exit"),
182
+ typer.Option("--prompt", help="Print the copy-paste agent prompt and exit"),
167
183
  ] = False,
168
184
  list_sessions: Annotated[
169
185
  bool,
170
186
  typer.Option("--list", help="List recent local sessions and exit"),
171
187
  ] = False,
172
188
  ) -> None:
173
- """Install the submit skill, or print the line to paste into an agent."""
189
+ """Install the submit skill, or print the prompt to send to an agent."""
174
190
  _maybe_print_update_hint()
175
191
  if prompt_only:
176
192
  _print_contributor_prompt()
@@ -191,7 +207,6 @@ def register_traj(app: typer.Typer) -> None:
191
207
  _run_npx_skill_install()
192
208
  else:
193
209
  _install_project_skill(Path.cwd())
194
- console.print("Paste this to your agent:")
195
210
  _print_contributor_prompt()
196
211
  if interactive and typer.confirm(
197
212
  "List recent sessions and open the viewer now?", default=False
@@ -223,6 +238,14 @@ def register_traj(app: typer.Typer) -> None:
223
238
  str | None,
224
239
  typer.Option("--source-id", help="Stable contributor source identifier"),
225
240
  ] = None,
241
+ repo: Annotated[
242
+ bool,
243
+ typer.Option(
244
+ "--repo/--no-repo",
245
+ help="Tag the upload with the session's repository "
246
+ "(owner/name from its git remote) as the source id",
247
+ ),
248
+ ] = True,
226
249
  direct: Annotated[
227
250
  bool,
228
251
  typer.Option("--direct", help="Upload with local Azure credentials"),
@@ -254,6 +277,7 @@ def register_traj(app: typer.Typer) -> None:
254
277
  github_id=github_id,
255
278
  email=email,
256
279
  source_id=source_id,
280
+ repo=repo,
257
281
  direct=direct,
258
282
  container_url=container_url,
259
283
  dry_run=dry_run,
@@ -268,7 +292,23 @@ def register_traj(app: typer.Typer) -> None:
268
292
  def _run_upload(options: _UploadOptions) -> None:
269
293
  prompted = options.path is None
270
294
  path = options.path or _prompt_for_path()
271
- source_id = options.source_id or default_source_id(path)
295
+ detected: _DetectedRepo | None = None
296
+ if options.source_id is not None:
297
+ source_id = options.source_id
298
+ else:
299
+ if options.repo:
300
+ detected = _detect_repo_slug(path)
301
+ source_id = f"repo/{detected.slug}" if detected else default_source_id(path)
302
+ if detected:
303
+ # Contributor-visible metadata: surface the tag and where it came
304
+ # from so private-repo sessions can opt out before anything leaves
305
+ # the machine. The local path stays terminal-only; the uploaded
306
+ # source id is just repo/<owner>/<name>. Plain print keeps the line
307
+ # one physical line (no Rich wrapping) so the path stays selectable.
308
+ print(
309
+ f"Repo: {detected.slug} "
310
+ f"(from session cwd {detected.session_cwd}; use --no-repo to omit)"
311
+ )
272
312
  destination = _resolve_destination(options)
273
313
 
274
314
  with (
@@ -281,6 +321,7 @@ def _run_upload(options: _UploadOptions) -> None:
281
321
  artifacts.files,
282
322
  masked_values=artifacts.redaction_replacements,
283
323
  preview_steps=options.preview_steps,
324
+ masked_categories=artifacts.redaction_categories,
284
325
  )
285
326
  status.stop()
286
327
  render_trajectory_report(report, console=console)
@@ -310,10 +351,9 @@ def _run_upload(options: _UploadOptions) -> None:
310
351
  console.print("[yellow]Upload cancelled.[/yellow]")
311
352
  return
312
353
  if not destination.direct:
313
- console.print(
314
- "Uploading… the first request can take a minute "
315
- "while the service wakes up."
316
- )
354
+ # Honest on both cold and warm runs: the broker may already be
355
+ # up. Don't claim it's waking when a retry is just transferring.
356
+ console.print("Uploading… this can take up to a minute; retries are safe.")
317
357
  with upload_progress(staged.files, console=console) as hooks:
318
358
  result = _publish(staged, destination=destination, hooks=hooks)
319
359
  _print_upload_result(staged, result, direct=destination.direct)
@@ -381,6 +421,102 @@ def _infer_email() -> str:
381
421
  return ""
382
422
 
383
423
 
424
+ _SESSION_CWD_SCAN_LINES = 50
425
+
426
+
427
+ @dataclass(frozen=True)
428
+ class _DetectedRepo:
429
+ slug: str
430
+ session_cwd: Path
431
+
432
+
433
+ def _detect_repo_slug(path: Path) -> _DetectedRepo | None:
434
+ """Best-effort ``owner/name`` for the repository the session was about.
435
+
436
+ Reads the working directory the session recorded (Claude events carry a
437
+ ``cwd`` field; Codex ``session_meta`` payloads do too) and asks that
438
+ directory's git for the ``origin`` remote. The trajectory's own recorded
439
+ cwd is the ONLY provenance source: there is deliberately no fallback to
440
+ the upload invocation directory, which mis-attributed sessions recorded
441
+ outside a repo to whatever checkout the contributor happened to upload
442
+ from. No session cwd, a missing directory, or no GitHub remote all mean
443
+ no tag. Every failure is silent — repo tagging must never break an
444
+ upload — and local-path remotes never produce a tag, so no local
445
+ absolute path can leak into the manifest.
446
+ """
447
+ session_cwd = _session_cwd(path)
448
+ if session_cwd is None or not session_cwd.is_dir():
449
+ return None
450
+ remote = _command_stdout(
451
+ "git", "-C", str(session_cwd), "remote", "get-url", "origin"
452
+ )
453
+ slug = _repo_slug_from_remote(remote) if remote else None
454
+ if slug:
455
+ return _DetectedRepo(slug=slug, session_cwd=session_cwd)
456
+ return None
457
+
458
+
459
+ def _session_cwd(path: Path) -> Path | None:
460
+ """Working directory recorded by the first session event that has one."""
461
+ session = path.expanduser()
462
+ if not session.is_file():
463
+ return None
464
+ try:
465
+ with session.open(encoding="utf-8", errors="replace") as stream:
466
+ for line_number, line in enumerate(stream):
467
+ if line_number >= _SESSION_CWD_SCAN_LINES:
468
+ break
469
+ body = line.strip()
470
+ if not body:
471
+ continue
472
+ try:
473
+ event = json.loads(body)
474
+ except json.JSONDecodeError:
475
+ continue
476
+ if not isinstance(event, dict):
477
+ continue
478
+ cwd = event.get("cwd")
479
+ if isinstance(cwd, str) and cwd:
480
+ return Path(cwd)
481
+ payload = event.get("payload")
482
+ if (
483
+ event.get("type") == "session_meta"
484
+ and isinstance(payload, dict)
485
+ and isinstance(payload.get("cwd"), str)
486
+ and payload["cwd"]
487
+ ):
488
+ return Path(payload["cwd"])
489
+ except OSError:
490
+ return None
491
+ return None
492
+
493
+
494
+ def _repo_slug_from_remote(remote: str) -> str | None:
495
+ """Normalize an https/ssh git remote URL to ``owner/name``.
496
+
497
+ Only URL-shaped remotes qualify; a filesystem-path remote returns
498
+ ``None`` so local paths never enter the uploaded source id.
499
+ """
500
+ value = remote.strip()
501
+ if "://" in value:
502
+ _, _, rest = value.partition("://")
503
+ _, _, repo_path = rest.partition("/")
504
+ elif ":" in value and "@" in value.partition(":")[0]:
505
+ repo_path = value.partition(":")[2]
506
+ else:
507
+ return None
508
+ repo_path = repo_path.strip("/").removesuffix(".git")
509
+ segments = [segment for segment in repo_path.split("/") if segment]
510
+ if len(segments) < 2:
511
+ return None
512
+ slug = f"{segments[-2]}/{segments[-1]}"
513
+ try:
514
+ validate_source_id(f"repo/{slug}")
515
+ except ValueError:
516
+ return None
517
+ return slug
518
+
519
+
384
520
  def _git_config(key: str) -> str | None:
385
521
  return _command_stdout("git", "config", "--get", key)
386
522
 
@@ -514,10 +650,19 @@ def _print_dry_run(staged: StagedCapture) -> None:
514
650
  if staged.ignored:
515
651
  console.print(f"Ignored: {escape(', '.join(staged.ignored))}")
516
652
  console.print(f"Redactions: {staged.redaction_replacements}")
653
+ # One plain, greppable line so the upload skill can lift the breakdown into
654
+ # the viewer's confirm bar (bench eval view --redaction-summary "...").
655
+ breakdown = format_redaction_breakdown(dict(staged.artifact_redaction_categories))
656
+ if breakdown:
657
+ print(f"Masked for you: {breakdown}")
658
+ else:
659
+ print("Masked for you: nothing — no secrets detected")
517
660
 
518
661
 
519
662
  def _print_contributor_prompt() -> None:
520
- # One physical line so people can copy it. Rich wrapping would break that.
663
+ # Plain print: Rich wrapping would break the unbroken URL line and make
664
+ # the block awkward to copy.
665
+ print(CONTRIBUTOR_PROMPT_FRAMING)
521
666
  print(CONTRIBUTOR_PROMPT)
522
667
 
523
668
 
@@ -563,7 +708,7 @@ def _run_npx_skill_install() -> None:
563
708
  check=False,
564
709
  )
565
710
  if completed.returncode != 0:
566
- print_error("npx skills add failed; the copy-paste line below still works.")
711
+ print_error("npx skills add failed; the copy-paste prompt below still works.")
567
712
 
568
713
 
569
714
  def _print_session_hits() -> None:
@@ -571,11 +716,15 @@ def _print_session_hits() -> None:
571
716
 
572
717
  hits = list_recent_sessions()
573
718
  if not hits:
574
- console.print("No recent Claude Code, Codex, or trial sessions found.")
719
+ print("No recent Claude Code, Codex, or trial sessions found.")
575
720
  return
576
721
  for index, hit in enumerate(hits, start=1):
577
722
  snippet = hit.snippet or "(no prompt yet)"
578
- console.print(f"{index}. [{hit.source}] {hit.when} {hit.path}\n {snippet}")
723
+ # Plain print + path on its own line: Rich wrapping used to split
724
+ # long session paths mid-token and make them unselectable.
725
+ print(f"{index}. [{hit.source}] {hit.when}")
726
+ print(f" {hit.path}")
727
+ print(f" {snippet}")
579
728
 
580
729
 
581
730
  def _interactive_view() -> None: