benchflow 0.6.5__tar.gz → 0.6.7.dev1798__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.
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/CHANGELOG.md +93 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/PKG-INFO +15 -9
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/README.md +6 -6
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/pyproject.toml +23 -3
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/__init__.py +14 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/scoring.py +4 -1
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/task_authoring/__init__.py +27 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/acp/runtime.py +106 -23
- benchflow-0.6.7.dev1798/src/benchflow/acp/selection.py +30 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/install.py +31 -1
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/registry.py +63 -32
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/_shared.py +24 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/continue_cmd.py +3 -9
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/environment.py +6 -1
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/main.py +21 -23
- benchflow-0.6.7.dev1798/src/benchflow/cli/review.py +233 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/sandbox.py +78 -15
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/train.py +128 -20
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/continue_run/orchestrator.py +4 -4
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/providers/litellm_logging.py +116 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/providers/litellm_runtime.py +189 -20
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/providers/runtime.py +7 -0
- benchflow-0.6.7.dev1798/src/benchflow/review/__init__.py +70 -0
- benchflow-0.6.7.dev1798/src/benchflow/review/config.py +250 -0
- benchflow-0.6.7.dev1798/src/benchflow/review/default-rubric.json +14 -0
- benchflow-0.6.7.dev1798/src/benchflow/review/prompts.py +102 -0
- benchflow-0.6.7.dev1798/src/benchflow/review/runner.py +639 -0
- benchflow-0.6.7.dev1798/src/benchflow/review/wrapper.py +312 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/__init__.py +61 -5
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/_config.py +5 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/_results.py +5 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/_setup.py +22 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/_user_loop.py +5 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/_base.py +70 -2
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/_compose.py +22 -0
- benchflow-0.6.7.dev1798/src/benchflow/sandbox/agentcore.py +973 -0
- benchflow-0.6.7.dev1798/src/benchflow/sandbox/agentcore_builder.py +653 -0
- benchflow-0.6.7.dev1798/src/benchflow/sandbox/agentcore_image.py +199 -0
- benchflow-0.6.7.dev1798/src/benchflow/sandbox/agentcore_provisioning.py +362 -0
- benchflow-0.6.7.dev1798/src/benchflow/sandbox/agentcore_reaper.py +173 -0
- benchflow-0.6.7.dev1798/src/benchflow/sandbox/agentcore_sealed.py +284 -0
- benchflow-0.6.7.dev1798/src/benchflow/sandbox/apple_container.py +620 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/daytona.py +84 -19
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/daytona_dind.py +54 -1
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/daytona_reaper.py +45 -5
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/daytona_strategies.py +38 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/docker.py +17 -2
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/lockdown.py +96 -5
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/modal_impl.py +8 -3
- benchflow-0.6.7.dev1798/src/benchflow/sandbox/process/__init__.py +39 -0
- benchflow-0.6.7.dev1798/src/benchflow/sandbox/process/_base.py +193 -0
- benchflow-0.6.7.dev1798/src/benchflow/sandbox/process/agentcore.py +419 -0
- benchflow-0.6.7.dev1798/src/benchflow/sandbox/process/apple.py +134 -0
- benchflow-0.6.5/src/benchflow/sandbox/process.py → benchflow-0.6.7.dev1798/src/benchflow/sandbox/process/daytona.py +27 -288
- benchflow-0.6.7.dev1798/src/benchflow/sandbox/process/docker.py +185 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/protocol.py +8 -1
- benchflow-0.6.7.dev1798/src/benchflow/sandbox/providers.py +140 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/setup.py +29 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/config.py +18 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/runtime_capabilities.py +43 -1
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/_capture.py +169 -0
- benchflow-0.6.7.dev1798/src/benchflow/trajectories/_llm_capture.py +46 -0
- benchflow-0.6.7.dev1798/src/benchflow/trajectories/call_purpose.py +39 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/export_prime_sft.py +4 -0
- benchflow-0.6.7.dev1798/src/benchflow/trajectories/export_trl_sft.py +650 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/results.py +202 -9
- benchflow-0.6.7.dev1798/src/benchflow/trajectories/trl_sft_tokenization.py +257 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/types.py +9 -2
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/continue_run/test_orchestrator.py +2 -1
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acp.py +60 -129
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acp_model_config_dispatch.py +0 -4
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acp_setup_failure_propagation.py +86 -20
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_registry.py +143 -5
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_setup.py +96 -3
- benchflow-0.6.7.dev1798/tests/test_agentcore_builder.py +818 -0
- benchflow-0.6.7.dev1798/tests/test_agentcore_parallel.py +956 -0
- benchflow-0.6.7.dev1798/tests/test_agentcore_reaper.py +297 -0
- benchflow-0.6.7.dev1798/tests/test_agentcore_sandbox.py +580 -0
- benchflow-0.6.7.dev1798/tests/test_agentcore_transport.py +484 -0
- benchflow-0.6.7.dev1798/tests/test_apple_container_sandbox.py +578 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_benchflow_experiment_review_validator.py +197 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_capture_trajectory.py +161 -1
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_cli_docs_drift.py +4 -2
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_config_override.py +57 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_daytona_command_polling.py +45 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_daytona_reap.py +73 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_docker_uploads.py +23 -1
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_job.py +7 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_litellm_hardening.py +10 -3
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_litellm_logging.py +345 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_litellm_runtime.py +95 -11
- benchflow-0.6.7.dev1798/tests/test_live_llm_trajectory.py +238 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_opencode_family_proxy_tracking.py +12 -2
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_oracle_chokepoint.py +19 -3
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_process.py +175 -1
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_registry_invariants.py +12 -0
- benchflow-0.6.7.dev1798/tests/test_release_workflow_wiring.py +329 -0
- benchflow-0.6.7.dev1798/tests/test_review_boundaries.py +558 -0
- benchflow-0.6.7.dev1798/tests/test_review_rubric.py +438 -0
- benchflow-0.6.7.dev1798/tests/test_review_runtime.py +629 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_on_ask_user_wiring.py +0 -4
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_upload.py +33 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_runtime_capabilities.py +16 -1
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_runtime_config_wired.py +17 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_hardening.py +54 -0
- benchflow-0.6.7.dev1798/tests/test_sandbox_live_process.py +224 -0
- benchflow-0.6.7.dev1798/tests/test_sandbox_prebuilt_validation.py +157 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_provider_registry_drift.py +33 -11
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_setup.py +9 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_scene_outbox_trial.py +9 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sdk_internals.py +41 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sdk_lockdown.py +99 -2
- benchflow-0.6.7.dev1798/tests/test_sealed_channel_container.py +264 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trace_import_cli.py +3 -1
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_train_mode_artifact_emission.py +376 -0
- benchflow-0.6.7.dev1798/tests/test_train_trl_cli.py +586 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trial_litellm_runtime.py +2 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_verify.py +103 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_export_prime_sft.py +40 -0
- benchflow-0.6.5/src/benchflow/sandbox/providers.py +0 -76
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/.gitignore +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/LICENSE +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_paths.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_run.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_types.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/evaluation_results.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/_utils/yaml_loader.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/acp/client.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/acp/container_transport.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/acp/session.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/codex_config.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/credentials.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/branch.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/_live_progress.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/eval_artifacts.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/contracts/planes.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/eval_artifacts.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/eval_lift.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/eval_plan.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/eval_sharding.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/eval_worker.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/evaluation.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/metrics.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/models.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/monitor.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/py.typed +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout/task_runtime.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/rollout_planes.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/runtime.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/scenes.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/sdk.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/skills.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/document.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/env.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/export.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/package.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/task.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/trajectories/viewer.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/README.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/conftest.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/environment/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/_consistency.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/check_results.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/run.sh +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/run_suite.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/scenarios.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_adapters.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_cli.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_router.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_agent_spec.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_branch.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_cli_live_progress.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_cli_misc.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_codex_review.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_config_redaction.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_daytona_download.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_docs_examples.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_env_registry.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_env_setup.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eval_lift.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_hosted_env.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_integration_suite.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_internet_policy.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_learner_skills.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_learner_store.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_litellm_config.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_llm_judge.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_loop_summary.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_metrics.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_oracle.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_paths_safe.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_providers.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_reexport.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_release_version.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_reward_node.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_reward_range.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rewards.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_planes_contract.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_rubric_config.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_runtime.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_scene.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_scoring.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skill_eval.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skill_policy.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skills.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_smoke.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_source_adapters.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_config.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_digest.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_document.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_download.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_export.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_output_format.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_package.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_task_runtime_primitive.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_tasks.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_train_cli.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_trl_integration.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_usage_required.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_user.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_verifier_document.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_verifier_output.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/test_yaml_config.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_redaction.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.6.5 → benchflow-0.6.7.dev1798}/tests/trajectories/test_tree.py +0 -0
|
@@ -2,6 +2,99 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
### Fixed
|
|
6
|
+
- Isolated pull-request and post-test integration concurrency groups so a
|
|
7
|
+
credential-free workflow completion cannot cancel an active PR rollout.
|
|
8
|
+
|
|
9
|
+
## 0.6.6 — 2026-08-04
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- **Apple Container and Amazon Bedrock AgentCore sandboxes.** Apple Silicon
|
|
13
|
+
users can run supported single-container arm64 tasks through Apple's
|
|
14
|
+
Virtualization.framework, while `--sandbox agentcore` builds task-specific
|
|
15
|
+
AWS runtimes with lease-aware cleanup for supported public-network,
|
|
16
|
+
single-container arm64 tasks. (#936, #937)
|
|
17
|
+
- **Rubric review (`bench review`).** Detached agentic grading of finished
|
|
18
|
+
rollouts against a `rubric.json` — rubric contract **v0.1**: an object with
|
|
19
|
+
a `criteria` list, each entry carrying a `name` (structured-output field), a
|
|
20
|
+
`description` (author documentation, never shown to the reviewer), and
|
|
21
|
+
`guidance` (the grading contract). The document carries no in-file
|
|
22
|
+
version key. One
|
|
23
|
+
reviewer agent per rollout runs as an ordinary rollout of a throwaway
|
|
24
|
+
wrapper task on a digest-pinned multi-architecture base image and no
|
|
25
|
+
task-authored Dockerfile
|
|
26
|
+
(AgentCore still builds a derived runtime image), reads a read-only evidence
|
|
27
|
+
copy of the rollout and, when admitted from a trusted `--tasks-root` with a
|
|
28
|
+
verified digest, its task, and answers every criterion with `pass` / `fail` /
|
|
29
|
+
`not_applicable` plus an explanation. The wrapper's own reward means only
|
|
30
|
+
"the reviewer produced a structurally valid result"; graded outcomes land
|
|
31
|
+
in `review_report.json`. Reviews never modify a reviewed rollout's rewards
|
|
32
|
+
or `result.json`. Rubric resolution: `-r` > the task's own
|
|
33
|
+
`verifier/rubric.json` > a built-in default (`reward_hacking`,
|
|
34
|
+
`task_specification`). `--passing` / `--failing` filter the rollouts under
|
|
35
|
+
review; a job-level prose summary aggregates multi-rollout runs. The
|
|
36
|
+
default reviewer harness is `opencode` (pinned to `1.18.11`).
|
|
37
|
+
Evidence mounts at `/evidence` outside the agent workdir (root-owned,
|
|
38
|
+
unwritable by the reviewer), symlinks are dropped rather than
|
|
39
|
+
dereferenced, task skills, shipped rubrics, and cumulative provider-history
|
|
40
|
+
trajectories are excluded while the canonical ACP trajectory is retained;
|
|
41
|
+
dropped ACP tool observations and generic tool titles are repaired from
|
|
42
|
+
exact-ID events in the trusted provider capture,
|
|
43
|
+
reviewer egress is gateway-scoped via the sandbox lockdown flag, artifact
|
|
44
|
+
consumption is pinned to each invocation's unique runtime leaf, and the
|
|
45
|
+
job summary is a deterministic aggregation.
|
|
46
|
+
- **Sealed AgentCore uploads.** Every AgentCore **upload and staged
|
|
47
|
+
environment** is now encrypted end-to-end: the sandbox generates a
|
|
48
|
+
keypair, only the public key appears in command output, payloads travel
|
|
49
|
+
as AES-256-CTR ciphertext with an HMAC-SHA256 tag over IV and
|
|
50
|
+
ciphertext (verified before decryption), and the decrypted key never
|
|
51
|
+
appears in command text. Fixes provider credentials from
|
|
52
|
+
`launch_config.json` and command environments being recoverable from
|
|
53
|
+
the runtime's CloudWatch command log; the generated wrapper image
|
|
54
|
+
installs `openssl` when missing. Downloads are not sealed: they return
|
|
55
|
+
file contents as base64 through command output, so they must only carry
|
|
56
|
+
non-secret run artifacts.
|
|
57
|
+
- **`RolloutConfig.uploads`.** Generic post-start host→sandbox uploads
|
|
58
|
+
(directory or file → absolute sandbox path), used by rubric review to
|
|
59
|
+
deliver evidence into prebuilt-image sandboxes and available to any caller
|
|
60
|
+
whose task data is not baked into the image.
|
|
61
|
+
- **Native TRL tool-calling SFT export.** `bench train convert --format
|
|
62
|
+
trl-sft` emits conversational prompt/completion rows with a `tools` column,
|
|
63
|
+
excludes OpenCode title/summary helper calls, and accepts rollout trees,
|
|
64
|
+
canonical `results.jsonl`, or existing TRL JSONL. `bench train validate
|
|
65
|
+
--format trl-sft` can render rows with a pinned tokenizer and fail closed on
|
|
66
|
+
missing assistant masks or overlength samples. Tokenizer-aware
|
|
67
|
+
`--context-policy message-window` keeps the harness/task prefix and the
|
|
68
|
+
longest complete recent assistant/tool suffix when exact rows exceed the
|
|
69
|
+
student context window. (#925)
|
|
70
|
+
- **LLM call-purpose provenance.** Captured LLM exchanges retain provider/model
|
|
71
|
+
metadata and classify agent, title, summary, compaction, and helper calls;
|
|
72
|
+
`results.jsonl` carries the metadata on each trajectory step. (#925)
|
|
73
|
+
- **Live trajectory streaming and token logprobs.** Redacted LLM trajectory
|
|
74
|
+
snapshots are written during active rollouts, and training runs can opt into
|
|
75
|
+
sampled-token logprobs with `BENCHFLOW_CAPTURE_TOKEN_LOGPROBS=1`. (#922, #926)
|
|
76
|
+
|
|
77
|
+
### Changed
|
|
78
|
+
- OpenHands supports requested reasoning effort through its LiteLLM request
|
|
79
|
+
body and now fails closed if completed provider exchanges are missing from
|
|
80
|
+
trainer trajectories. The built-in OpenCode harness is version-pinned for
|
|
81
|
+
reproducibility. (#921, #931)
|
|
82
|
+
|
|
83
|
+
### Fixed
|
|
84
|
+
- Restored the documented `test` → live `integration-light` → internal-preview
|
|
85
|
+
publication chain for successful `main` pushes, pinned to the exact tested
|
|
86
|
+
commit and fail-closed against untrusted workflow sources.
|
|
87
|
+
- Fixed OpenHands startup outside root-owned workdirs, OpenCode gateway setup
|
|
88
|
+
in non-Python task images, Qwen3.5 TRL SFT tokenization, and incomplete agent
|
|
89
|
+
skill-path validation. (#919, #924, #929, #932)
|
|
90
|
+
- Moved recursive review evidence work and blocking platform probes off the
|
|
91
|
+
async event loop so concurrent reviews and rollouts retain responsive
|
|
92
|
+
scheduling and timeouts.
|
|
93
|
+
- Remove staged Docker and Apple Container credential files when live process
|
|
94
|
+
launch fails before the agent can source and unlink them.
|
|
95
|
+
- Corrected release-facing authentication, sandbox, trajectory-artifact,
|
|
96
|
+
branching, and provider documentation to match the shipped interfaces.
|
|
97
|
+
|
|
5
98
|
## 0.6.5 — 2026-07-10
|
|
6
99
|
|
|
7
100
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: benchflow
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.7.dev1798
|
|
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
|
|
@@ -21,7 +21,7 @@ Requires-Python: >=3.12
|
|
|
21
21
|
Requires-Dist: agent-client-protocol>=0.10
|
|
22
22
|
Requires-Dist: anyio>=4.0
|
|
23
23
|
Requires-Dist: httpx>=0.27.0
|
|
24
|
-
Requires-Dist: litellm[proxy]==1.
|
|
24
|
+
Requires-Dist: litellm[proxy]==1.91.0
|
|
25
25
|
Requires-Dist: packaging>=24
|
|
26
26
|
Requires-Dist: pydantic>=2.7
|
|
27
27
|
Requires-Dist: pyyaml>=6.0
|
|
@@ -34,6 +34,7 @@ Provides-Extra: deepagents
|
|
|
34
34
|
Requires-Dist: deepagents>=0.6; extra == 'deepagents'
|
|
35
35
|
Requires-Dist: langchain-openai>=0.2; extra == 'deepagents'
|
|
36
36
|
Provides-Extra: dev
|
|
37
|
+
Requires-Dist: pathspec>=0.12; extra == 'dev'
|
|
37
38
|
Requires-Dist: pre-commit>=3.7; extra == 'dev'
|
|
38
39
|
Requires-Dist: pytest-asyncio>=0.24.0; extra == 'dev'
|
|
39
40
|
Requires-Dist: pytest>=9.0.3; extra == 'dev'
|
|
@@ -43,6 +44,11 @@ Provides-Extra: judge
|
|
|
43
44
|
Requires-Dist: anthropic>=0.40; extra == 'judge'
|
|
44
45
|
Requires-Dist: google-genai>=1.0; extra == 'judge'
|
|
45
46
|
Requires-Dist: openai>=1.40; extra == 'judge'
|
|
47
|
+
Provides-Extra: sandbox-agentcore
|
|
48
|
+
Requires-Dist: bedrock-agentcore>=1.18; extra == 'sandbox-agentcore'
|
|
49
|
+
Requires-Dist: boto3>=1.43.31; extra == 'sandbox-agentcore'
|
|
50
|
+
Requires-Dist: cryptography>=44; extra == 'sandbox-agentcore'
|
|
51
|
+
Requires-Dist: pathspec>=0.12; extra == 'sandbox-agentcore'
|
|
46
52
|
Provides-Extra: sandbox-daytona
|
|
47
53
|
Requires-Dist: daytona>=0.184.0; extra == 'sandbox-daytona'
|
|
48
54
|
Requires-Dist: tenacity>=8.0; extra == 'sandbox-daytona'
|
|
@@ -53,7 +59,7 @@ Provides-Extra: train
|
|
|
53
59
|
Requires-Dist: transformers==5.6.2; extra == 'train'
|
|
54
60
|
Provides-Extra: trl
|
|
55
61
|
Requires-Dist: datasets>=2.19.0; extra == 'trl'
|
|
56
|
-
Requires-Dist: trl
|
|
62
|
+
Requires-Dist: trl<2,>=1.8.0; extra == 'trl'
|
|
57
63
|
Description-Content-Type: text/markdown
|
|
58
64
|
|
|
59
65
|
<div align="center">
|
|
@@ -77,9 +83,9 @@ BenchFlow is a universal environment framework: it runs AI agents against task e
|
|
|
77
83
|
- **Loop strategies** — wrap any agent in a `--loop-strategy` (`verify-retry`, `self-review`); every rollout captures a per-iteration reward + token trajectory, so you can plot capability against cost (can a cheap model + loops match an expensive one at equal token spend?)
|
|
78
84
|
- **`task.md` tasks** — one file (YAML frontmatter + prompt body) replaces the split `task.toml` + `instruction.md` layout; author with `bench tasks init` / `check` / `migrate` / `export`
|
|
79
85
|
- **Hosted environments** — run external PrimeIntellect / Verifiers environments through `--source-env`, without converting them to BenchFlow tasks
|
|
80
|
-
- **Sandboxes** — Docker locally, Daytona for parallel cloud runs (orphaned sandboxes auto-reaped at eval start), Modal for serverless/GPU-backed task environments
|
|
86
|
+
- **Sandboxes** — Docker locally, Apple Container on Apple Silicon Macs, Daytona for parallel cloud runs (orphaned sandboxes auto-reaped at eval start), Modal for serverless/GPU-backed task environments, and AgentCore for AWS-hosted runtimes
|
|
81
87
|
- **Hardened verifier** — defaults block BenchJack/Meerkat-style reward-hacking; tasks opt out per-feature
|
|
82
|
-
- **Training-ready output** —
|
|
88
|
+
- **Training-ready output** — scored rollouts emit a Verifiers/ORS reward record and best-effort ATIF (`trainer/atif.json`) / ADP (`trainer/adp.jsonl`) conversions; ATIF is omitted when the trajectory is empty, and conversion errors are reported in the rollout result
|
|
83
89
|
|
|
84
90
|
## Quickstart
|
|
85
91
|
|
|
@@ -88,14 +94,14 @@ BenchFlow is a universal environment framework: it runs AI agents against task e
|
|
|
88
94
|
uv tool install --python 3.12 --upgrade benchflow
|
|
89
95
|
|
|
90
96
|
# Run a benchmark: any task source, any ACP agent, any sandbox
|
|
91
|
-
export GEMINI_API_KEY=... # or claude login / codex
|
|
97
|
+
export GEMINI_API_KEY=... # or claude auth login / codex login for subscription auth
|
|
92
98
|
bench eval run \
|
|
93
99
|
--source-repo benchflow-ai/skillsbench --source-path tasks \
|
|
94
100
|
--agent gemini --model gemini-3.1-flash-lite-preview \
|
|
95
101
|
--sandbox docker
|
|
96
102
|
```
|
|
97
103
|
|
|
98
|
-
Each run writes a per-task `result.json` (rewards
|
|
104
|
+
Each run writes a per-task `result.json` (rewards, trajectory summary, and token usage), full events under `trajectory/`, and a job `summary.json` (pass-rate, cost, and — for looped runs — a pass@iteration convergence curve). New here? Start with [Getting started](./docs/getting-started.md), or paste the [agent quickstart prompt](./docs/agent-quickstart.md) into Claude Code / Codex / Gemini CLI and let it drive the whole thing.
|
|
99
105
|
|
|
100
106
|
## Install
|
|
101
107
|
|
|
@@ -110,7 +116,7 @@ uv tool install --python 3.12 --upgrade benchflow
|
|
|
110
116
|
in the install command so `uv` does not resolve an older Python-compatible
|
|
111
117
|
package that lacks the CLI entrypoints.
|
|
112
118
|
- If you see `Executables already exist: bench, benchflow`, re-run with `uv tool install --python 3.12 --upgrade --force benchflow` to replace stale entrypoints from an older install.
|
|
113
|
-
- For Daytona or
|
|
119
|
+
- For Daytona, Modal, or AgentCore extras, install the relevant optional package, for example `uv tool install --python 3.12 --upgrade 'benchflow[sandbox-daytona]'`.
|
|
114
120
|
|
|
115
121
|
Internal users wanting the newest preview from `main` install the [internal preview channel](./docs/release.md) (`uv tool install --python 3.12 --prerelease allow --upgrade benchflow`).
|
|
116
122
|
|
|
@@ -118,7 +124,7 @@ Internal users wanting the newest preview from `main` install the [internal prev
|
|
|
118
124
|
`--python 3.12` flag lets it provision a compatible interpreter for the tool
|
|
119
125
|
install. Set `DAYTONA_API_KEY` for Daytona or configure Modal auth for Modal;
|
|
120
126
|
export an agent API key (`GEMINI_API_KEY`, `ANTHROPIC_API_KEY`, …) or use
|
|
121
|
-
subscription auth (`claude login` / `codex
|
|
127
|
+
subscription auth (`claude auth login` / `codex login`). Provider-prefixed models
|
|
122
128
|
may need provider-specific credentials; Azure Foundry uses `AZURE_API_KEY` +
|
|
123
129
|
`AZURE_API_ENDPOINT`.
|
|
124
130
|
|
|
@@ -19,9 +19,9 @@ BenchFlow is a universal environment framework: it runs AI agents against task e
|
|
|
19
19
|
- **Loop strategies** — wrap any agent in a `--loop-strategy` (`verify-retry`, `self-review`); every rollout captures a per-iteration reward + token trajectory, so you can plot capability against cost (can a cheap model + loops match an expensive one at equal token spend?)
|
|
20
20
|
- **`task.md` tasks** — one file (YAML frontmatter + prompt body) replaces the split `task.toml` + `instruction.md` layout; author with `bench tasks init` / `check` / `migrate` / `export`
|
|
21
21
|
- **Hosted environments** — run external PrimeIntellect / Verifiers environments through `--source-env`, without converting them to BenchFlow tasks
|
|
22
|
-
- **Sandboxes** — Docker locally, Daytona for parallel cloud runs (orphaned sandboxes auto-reaped at eval start), Modal for serverless/GPU-backed task environments
|
|
22
|
+
- **Sandboxes** — Docker locally, Apple Container on Apple Silicon Macs, Daytona for parallel cloud runs (orphaned sandboxes auto-reaped at eval start), Modal for serverless/GPU-backed task environments, and AgentCore for AWS-hosted runtimes
|
|
23
23
|
- **Hardened verifier** — defaults block BenchJack/Meerkat-style reward-hacking; tasks opt out per-feature
|
|
24
|
-
- **Training-ready output** —
|
|
24
|
+
- **Training-ready output** — scored rollouts emit a Verifiers/ORS reward record and best-effort ATIF (`trainer/atif.json`) / ADP (`trainer/adp.jsonl`) conversions; ATIF is omitted when the trajectory is empty, and conversion errors are reported in the rollout result
|
|
25
25
|
|
|
26
26
|
## Quickstart
|
|
27
27
|
|
|
@@ -30,14 +30,14 @@ BenchFlow is a universal environment framework: it runs AI agents against task e
|
|
|
30
30
|
uv tool install --python 3.12 --upgrade benchflow
|
|
31
31
|
|
|
32
32
|
# Run a benchmark: any task source, any ACP agent, any sandbox
|
|
33
|
-
export GEMINI_API_KEY=... # or claude login / codex
|
|
33
|
+
export GEMINI_API_KEY=... # or claude auth login / codex login for subscription auth
|
|
34
34
|
bench eval run \
|
|
35
35
|
--source-repo benchflow-ai/skillsbench --source-path tasks \
|
|
36
36
|
--agent gemini --model gemini-3.1-flash-lite-preview \
|
|
37
37
|
--sandbox docker
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
Each run writes a per-task `result.json` (rewards
|
|
40
|
+
Each run writes a per-task `result.json` (rewards, trajectory summary, and token usage), full events under `trajectory/`, and a job `summary.json` (pass-rate, cost, and — for looped runs — a pass@iteration convergence curve). New here? Start with [Getting started](./docs/getting-started.md), or paste the [agent quickstart prompt](./docs/agent-quickstart.md) into Claude Code / Codex / Gemini CLI and let it drive the whole thing.
|
|
41
41
|
|
|
42
42
|
## Install
|
|
43
43
|
|
|
@@ -52,7 +52,7 @@ uv tool install --python 3.12 --upgrade benchflow
|
|
|
52
52
|
in the install command so `uv` does not resolve an older Python-compatible
|
|
53
53
|
package that lacks the CLI entrypoints.
|
|
54
54
|
- If you see `Executables already exist: bench, benchflow`, re-run with `uv tool install --python 3.12 --upgrade --force benchflow` to replace stale entrypoints from an older install.
|
|
55
|
-
- For Daytona or
|
|
55
|
+
- For Daytona, Modal, or AgentCore extras, install the relevant optional package, for example `uv tool install --python 3.12 --upgrade 'benchflow[sandbox-daytona]'`.
|
|
56
56
|
|
|
57
57
|
Internal users wanting the newest preview from `main` install the [internal preview channel](./docs/release.md) (`uv tool install --python 3.12 --prerelease allow --upgrade benchflow`).
|
|
58
58
|
|
|
@@ -60,7 +60,7 @@ Internal users wanting the newest preview from `main` install the [internal prev
|
|
|
60
60
|
`--python 3.12` flag lets it provision a compatible interpreter for the tool
|
|
61
61
|
install. Set `DAYTONA_API_KEY` for Daytona or configure Modal auth for Modal;
|
|
62
62
|
export an agent API key (`GEMINI_API_KEY`, `ANTHROPIC_API_KEY`, …) or use
|
|
63
|
-
subscription auth (`claude login` / `codex
|
|
63
|
+
subscription auth (`claude auth login` / `codex login`). Provider-prefixed models
|
|
64
64
|
may need provider-specific credentials; Azure Foundry uses `AZURE_API_KEY` +
|
|
65
65
|
`AZURE_API_ENDPOINT`.
|
|
66
66
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "benchflow"
|
|
3
|
-
version = "0.6.
|
|
3
|
+
version = "0.6.7.dev1798"
|
|
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"
|
|
@@ -14,7 +14,7 @@ dependencies = [
|
|
|
14
14
|
"rich>=13.0",
|
|
15
15
|
# Dataset registry bench_version checks (PEP 440 specifier sets).
|
|
16
16
|
"packaging>=24",
|
|
17
|
-
"litellm[proxy]==1.
|
|
17
|
+
"litellm[proxy]==1.91.0",
|
|
18
18
|
"tomli-w>=1.0",
|
|
19
19
|
"typer>=0.9",
|
|
20
20
|
]
|
|
@@ -41,6 +41,9 @@ classifiers = [
|
|
|
41
41
|
[project.optional-dependencies]
|
|
42
42
|
dev = [
|
|
43
43
|
"pre-commit>=3.7",
|
|
44
|
+
# AgentCore's CodeBuild path must reproduce Docker's ignore rules in tests
|
|
45
|
+
# even when the optional AWS backend is not installed.
|
|
46
|
+
"pathspec>=0.12",
|
|
44
47
|
"pytest>=9.0.3",
|
|
45
48
|
"pytest-asyncio>=0.24.0",
|
|
46
49
|
"ruff>=0.7.0",
|
|
@@ -52,7 +55,9 @@ train = [
|
|
|
52
55
|
"transformers==5.6.2",
|
|
53
56
|
]
|
|
54
57
|
trl = [
|
|
55
|
-
|
|
58
|
+
# Native tool-calling prompt/completion rows, assistant-only masks, and
|
|
59
|
+
# training chat-template patches used by `bench train validate --format trl-sft`.
|
|
60
|
+
"trl>=1.8.0,<2",
|
|
56
61
|
"datasets>=2.19.0",
|
|
57
62
|
]
|
|
58
63
|
sandbox-daytona = [
|
|
@@ -68,6 +73,21 @@ sandbox-modal = [
|
|
|
68
73
|
"modal>=0.73",
|
|
69
74
|
"tenacity>=8.0",
|
|
70
75
|
]
|
|
76
|
+
sandbox-agentcore = [
|
|
77
|
+
# Bedrock AgentCore Runtime microVMs. The SDK supplies the interactive
|
|
78
|
+
# shell (`open_shell`) used as the ACP transport; boto3 supplies the
|
|
79
|
+
# control plane (CreateAgentRuntime) and the command plane
|
|
80
|
+
# (InvokeAgentRuntimeCommand). The boto3 floor is the first release that
|
|
81
|
+
# models the bedrock-agentcore/-control services.
|
|
82
|
+
"bedrock-agentcore>=1.18",
|
|
83
|
+
# Used directly by the sealed AgentCore transport (RSA-OAEP key wrap +
|
|
84
|
+
# AES-CTR/HMAC). It otherwise arrives only transitively via
|
|
85
|
+
# litellm[proxy]; declaring it here keeps the dependency honest.
|
|
86
|
+
"cryptography>=44",
|
|
87
|
+
"boto3>=1.43.31",
|
|
88
|
+
# Docker-compatible build-context filtering without requiring a daemon.
|
|
89
|
+
"pathspec>=0.12",
|
|
90
|
+
]
|
|
71
91
|
bedrock = [
|
|
72
92
|
"boto3>=1.40",
|
|
73
93
|
]
|
|
@@ -60,6 +60,14 @@ from benchflow.monitor import (
|
|
|
60
60
|
MonitorNotImplementedError,
|
|
61
61
|
MonitorResult,
|
|
62
62
|
)
|
|
63
|
+
from benchflow.review import (
|
|
64
|
+
ReviewReport,
|
|
65
|
+
ReviewRubricError,
|
|
66
|
+
run_reviews,
|
|
67
|
+
)
|
|
68
|
+
from benchflow.review import Rubric as ReviewRubric
|
|
69
|
+
from benchflow.review import RubricCriterion as ReviewRubricCriterion
|
|
70
|
+
from benchflow.review import load_rubric as load_review_rubric
|
|
63
71
|
|
|
64
72
|
# Rewards plane. Reward is the canonical node-based contract
|
|
65
73
|
# (``score(node) -> VerifyResult``); RewardFunc is the legacy path-based shape
|
|
@@ -160,6 +168,12 @@ __all__ = [
|
|
|
160
168
|
"load_rubric",
|
|
161
169
|
"load_rubric_json",
|
|
162
170
|
"load_rubric_toml",
|
|
171
|
+
"ReviewReport",
|
|
172
|
+
"ReviewRubric",
|
|
173
|
+
"ReviewRubricCriterion",
|
|
174
|
+
"ReviewRubricError",
|
|
175
|
+
"load_review_rubric",
|
|
176
|
+
"run_reviews",
|
|
163
177
|
"Sandbox",
|
|
164
178
|
"SandboxExecResult",
|
|
165
179
|
"SandboxImage",
|
|
@@ -216,7 +216,10 @@ def contains_verifier_dep_install_marker(text: str) -> bool:
|
|
|
216
216
|
|
|
217
217
|
|
|
218
218
|
def _looks_like_verifier_infra_error(error: str) -> bool:
|
|
219
|
-
|
|
219
|
+
# Verifier execution uses the same sandbox transport as agent execution.
|
|
220
|
+
# Preserve retry parity for transport failures such as Daytona losing its
|
|
221
|
+
# session command between execution phases.
|
|
222
|
+
return _looks_like_infra_error(error) or any(
|
|
220
223
|
marker in error
|
|
221
224
|
for marker in (
|
|
222
225
|
"failed to add tests directory",
|
|
@@ -143,6 +143,32 @@ def task_digest(task_dir: Path) -> str:
|
|
|
143
143
|
return f"sha256:{digest.hexdigest()}"
|
|
144
144
|
|
|
145
145
|
|
|
146
|
+
def _check_review_rubric(verifier_dir: Path, *, verifier_label: str) -> list[str]:
|
|
147
|
+
"""Validate a review ``rubric.json`` when the task ships one.
|
|
148
|
+
|
|
149
|
+
Review rubrics are ``{"criteria": [{name, description, guidance}]}``
|
|
150
|
+
JSON documents. A ``rubric.json`` that is not shaped like that (for
|
|
151
|
+
example an llm-judge rubric owned by the verifier-strategy machinery)
|
|
152
|
+
is not checked here.
|
|
153
|
+
"""
|
|
154
|
+
from benchflow.review.config import (
|
|
155
|
+
ReviewRubricError,
|
|
156
|
+
is_review_rubric_file,
|
|
157
|
+
load_rubric,
|
|
158
|
+
)
|
|
159
|
+
|
|
160
|
+
candidate = verifier_dir / "rubric.json"
|
|
161
|
+
if not candidate.is_file() or not is_review_rubric_file(candidate):
|
|
162
|
+
# Absent, unreadable, or another rubric dialect (e.g. an llm-judge
|
|
163
|
+
# rubric with id/match_criteria entries) — not ours to validate.
|
|
164
|
+
return []
|
|
165
|
+
try:
|
|
166
|
+
load_rubric(candidate)
|
|
167
|
+
except ReviewRubricError as e:
|
|
168
|
+
return [f"{verifier_label}/rubric.json invalid: {e}"]
|
|
169
|
+
return []
|
|
170
|
+
|
|
171
|
+
|
|
146
172
|
def check_task(
|
|
147
173
|
task_dir: Path,
|
|
148
174
|
*,
|
|
@@ -241,6 +267,7 @@ def check_task(
|
|
|
241
267
|
verifier_label=verifier_label,
|
|
242
268
|
)
|
|
243
269
|
)
|
|
270
|
+
issues.extend(_check_review_rubric(verifier_dir, verifier_label=verifier_label))
|
|
244
271
|
else:
|
|
245
272
|
issues.append(
|
|
246
273
|
"Missing verifier/ directory (or legacy tests/; verifier needs "
|
|
@@ -25,6 +25,7 @@ from pathlib import Path
|
|
|
25
25
|
|
|
26
26
|
from benchflow.acp.client import ACPClient
|
|
27
27
|
from benchflow.acp.container_transport import ContainerTransport
|
|
28
|
+
from benchflow.acp.selection import selected_acp_transport
|
|
28
29
|
from benchflow.acp.types import McpServerSpec
|
|
29
30
|
from benchflow.agents.protocol import ACPSessionAdapter
|
|
30
31
|
from benchflow.agents.providers import (
|
|
@@ -38,9 +39,13 @@ from benchflow.diagnostics import (
|
|
|
38
39
|
AgentPromptTimeoutError,
|
|
39
40
|
IdleTimeoutDiagnostic,
|
|
40
41
|
IdleTimeoutError,
|
|
42
|
+
TransportClosedDiagnostic,
|
|
43
|
+
TransportClosedError,
|
|
44
|
+
)
|
|
45
|
+
from benchflow.sandbox.lockdown import (
|
|
46
|
+
build_priv_drop_cmd,
|
|
47
|
+
enforce_agent_egress_firewall,
|
|
41
48
|
)
|
|
42
|
-
from benchflow.sandbox.lockdown import build_priv_drop_cmd
|
|
43
|
-
from benchflow.sandbox.process import DaytonaProcess, DaytonaPtyProcess, DockerProcess
|
|
44
49
|
from benchflow.trajectories._capture import _capture_session_trajectory
|
|
45
50
|
|
|
46
51
|
# Re-exported for backwards compatibility — tests and downstream code
|
|
@@ -51,6 +56,7 @@ __all__ = [
|
|
|
51
56
|
"IdleTimeoutError",
|
|
52
57
|
"connect_acp",
|
|
53
58
|
"execute_prompts",
|
|
59
|
+
"selected_acp_transport",
|
|
54
60
|
]
|
|
55
61
|
|
|
56
62
|
logger = logging.getLogger(__name__)
|
|
@@ -59,6 +65,84 @@ logger = logging.getLogger(__name__)
|
|
|
59
65
|
_ACP_CONNECT_MAX_RETRIES = 3
|
|
60
66
|
_ACP_CONNECT_BASE_DELAY = 2.0
|
|
61
67
|
_PROMPT_CANCEL_DRAIN_TIMEOUT_SEC = 0.25
|
|
68
|
+
_ACP_HANDSHAKE_TIMEOUT_SEC = 60
|
|
69
|
+
_OPENHANDS_DISABLE_SUBAGENTS_ENV = "BENCHFLOW_OPENHANDS_DISABLE_SUBAGENTS"
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
async def _prepare_openhands_direct_execution(
|
|
73
|
+
env,
|
|
74
|
+
*,
|
|
75
|
+
agent: str,
|
|
76
|
+
agent_env: dict[str, str],
|
|
77
|
+
) -> dict[str, str]:
|
|
78
|
+
"""Patch OpenHands as root before a sandbox-user privilege drop.
|
|
79
|
+
|
|
80
|
+
OpenHands is installed under ``/root/.local/share/uv/tools`` and exposed to
|
|
81
|
+
the sandbox user through a read-only symlink. Running the opt-in patch from
|
|
82
|
+
the launch command only worked for tasks whose workspace was ``/root``,
|
|
83
|
+
because sandbox-user setup happened to chown that whole directory. Tasks
|
|
84
|
+
rooted elsewhere (for example ``/app``) exited before ACP initialization.
|
|
85
|
+
|
|
86
|
+
Apply the same narrow patch through the environment's root execution plane,
|
|
87
|
+
then disable the duplicate launch-time patch for this process. The caller's
|
|
88
|
+
environment mapping is copied so recorded run provenance still reflects the
|
|
89
|
+
requested opt-in value.
|
|
90
|
+
"""
|
|
91
|
+
if agent != "openhands" or agent_env.get(_OPENHANDS_DISABLE_SUBAGENTS_ENV) != "1":
|
|
92
|
+
return agent_env
|
|
93
|
+
|
|
94
|
+
patch_cmd = (
|
|
95
|
+
'export PATH="$HOME/.local/bin:$PATH"; '
|
|
96
|
+
'OH_BIN="$(command -v openhands)"; '
|
|
97
|
+
'[ -n "$OH_BIN" ] || { echo "Cannot locate OpenHands executable" >&2; exit 127; }; '
|
|
98
|
+
'OH_PY="$(dirname "$(readlink -f "$OH_BIN")")/python"; '
|
|
99
|
+
'[ -x "$OH_PY" ] || { '
|
|
100
|
+
'echo "Cannot locate OpenHands tool interpreter" >&2; exit 127; }; '
|
|
101
|
+
'"$OH_PY" -c \'from pathlib import Path; '
|
|
102
|
+
"import openhands_cli.utils as u; "
|
|
103
|
+
"p=Path(u.__file__); s=p.read_text(); "
|
|
104
|
+
'old=" Tool(name=task_tool_name),\\n"; '
|
|
105
|
+
'new=" # BenchFlow: delegation disabled for this run.\\n"; '
|
|
106
|
+
"assert old in s or new in s; "
|
|
107
|
+
"p.write_text(s.replace(old,new,1)) if old in s else None; "
|
|
108
|
+
"assert new in p.read_text()'"
|
|
109
|
+
)
|
|
110
|
+
result = await env.exec(patch_cmd, user="root", timeout_sec=30)
|
|
111
|
+
return_code = getattr(
|
|
112
|
+
result,
|
|
113
|
+
"return_code",
|
|
114
|
+
getattr(result, "exit_code", 1),
|
|
115
|
+
)
|
|
116
|
+
if return_code != 0:
|
|
117
|
+
stdout = (getattr(result, "stdout", "") or "").strip()
|
|
118
|
+
stderr = (getattr(result, "stderr", "") or "").strip()
|
|
119
|
+
detail = stderr or stdout or "no output"
|
|
120
|
+
raise RuntimeError(
|
|
121
|
+
"Failed to prepare OpenHands direct-execution mode as root "
|
|
122
|
+
f"(exit code {return_code}): {detail[:2000]}"
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
launch_env = dict(agent_env)
|
|
126
|
+
launch_env[_OPENHANDS_DISABLE_SUBAGENTS_ENV] = "0"
|
|
127
|
+
logger.info("Prepared OpenHands direct-execution mode before privilege drop")
|
|
128
|
+
return launch_env
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
async def _wait_for_acp_handshake(awaitable, *, phase: str):
|
|
132
|
+
try:
|
|
133
|
+
return await asyncio.wait_for(awaitable, timeout=_ACP_HANDSHAKE_TIMEOUT_SEC)
|
|
134
|
+
except TimeoutError as e:
|
|
135
|
+
msg = (
|
|
136
|
+
f"ACP {phase} timed out after {_ACP_HANDSHAKE_TIMEOUT_SEC}s "
|
|
137
|
+
"before the first prompt"
|
|
138
|
+
)
|
|
139
|
+
raise TransportClosedError(
|
|
140
|
+
msg,
|
|
141
|
+
TransportClosedDiagnostic(
|
|
142
|
+
raw_message=msg,
|
|
143
|
+
transport_diagnosis=f"acp_{phase}_timeout",
|
|
144
|
+
),
|
|
145
|
+
) from e
|
|
62
146
|
|
|
63
147
|
|
|
64
148
|
# models.dev provider inference — used when acp_model_format="provider/model"
|
|
@@ -453,6 +537,12 @@ async def connect_acp(
|
|
|
453
537
|
|
|
454
538
|
Retries with exponential backoff on ConnectionError (Daytona SSH storms).
|
|
455
539
|
"""
|
|
540
|
+
agent_env = await _prepare_openhands_direct_execution(
|
|
541
|
+
env,
|
|
542
|
+
agent=agent,
|
|
543
|
+
agent_env=agent_env,
|
|
544
|
+
)
|
|
545
|
+
|
|
456
546
|
# Resolve agent binary path for non-docker environments
|
|
457
547
|
if environment != "docker":
|
|
458
548
|
which_result = await env.exec(
|
|
@@ -481,24 +571,13 @@ async def connect_acp(
|
|
|
481
571
|
await asyncio.sleep(delay)
|
|
482
572
|
|
|
483
573
|
try:
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
live_proc = await DaytonaPtyProcess.from_sandbox_env(env)
|
|
492
|
-
logger.info("Using PTY transport for Daytona sandbox")
|
|
493
|
-
else:
|
|
494
|
-
is_dind = hasattr(env, "_strategy") and hasattr(
|
|
495
|
-
env._strategy, "_compose_cmd"
|
|
496
|
-
)
|
|
497
|
-
if is_dind:
|
|
498
|
-
live_proc = await DaytonaPtyProcess.from_sandbox_env(env)
|
|
499
|
-
logger.info("Using PTY transport for DinD compose task")
|
|
500
|
-
else:
|
|
501
|
-
live_proc = await DaytonaProcess.from_sandbox_env(env)
|
|
574
|
+
# The sandbox owns its transport: it knows how to reach into
|
|
575
|
+
# itself, so there is no provider-name branch here. Backends with
|
|
576
|
+
# no live-process transport raise an actionable NotImplementedError
|
|
577
|
+
# from BaseSandbox.live_process rather than silently receiving
|
|
578
|
+
# another backend's transport (Modal previously fell through to
|
|
579
|
+
# DaytonaProcess and failed deep inside SSH setup).
|
|
580
|
+
live_proc = await env.live_process(agent=agent)
|
|
502
581
|
|
|
503
582
|
agent_log = rollout_dir / "agent" / f"{agent.replace('-', '_')}.txt"
|
|
504
583
|
transport = ContainerTransport(
|
|
@@ -511,15 +590,18 @@ async def connect_acp(
|
|
|
511
590
|
acp_client = ACPClient(transport)
|
|
512
591
|
await acp_client.connect()
|
|
513
592
|
|
|
514
|
-
init_result = await
|
|
593
|
+
init_result = await _wait_for_acp_handshake(
|
|
594
|
+
acp_client.initialize(),
|
|
595
|
+
phase="initialize",
|
|
596
|
+
)
|
|
515
597
|
agent_name = (
|
|
516
598
|
init_result.agent_info.name if init_result.agent_info else agent
|
|
517
599
|
)
|
|
518
600
|
logger.info(f"ACP agent: {agent_name}")
|
|
519
601
|
|
|
520
|
-
session = await
|
|
602
|
+
session = await _wait_for_acp_handshake(
|
|
521
603
|
acp_client.session_new(cwd=agent_cwd, mcp_servers=mcp_servers),
|
|
522
|
-
|
|
604
|
+
phase="session_new",
|
|
523
605
|
)
|
|
524
606
|
logger.info(f"Session: {session.session_id}")
|
|
525
607
|
break
|
|
@@ -552,6 +634,7 @@ async def connect_acp(
|
|
|
552
634
|
agent_env=agent_env,
|
|
553
635
|
reasoning_effort=reasoning_effort,
|
|
554
636
|
)
|
|
637
|
+
await enforce_agent_egress_firewall(env, sandbox_user, agent_env)
|
|
555
638
|
except Exception:
|
|
556
639
|
with contextlib.suppress(Exception):
|
|
557
640
|
await acp_client.close()
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""Pure ACP transport selection helpers shared by runtime and artifacts."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
import os
|
|
5
|
+
|
|
6
|
+
logger = logging.getLogger(__name__)
|
|
7
|
+
|
|
8
|
+
_DAYTONA_ACP_TRANSPORT_ENV = "BENCHFLOW_DAYTONA_ACP_TRANSPORT"
|
|
9
|
+
_DAYTONA_ACP_TRANSPORTS = {"pty", "ssh"}
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def daytona_acp_transport() -> str:
|
|
13
|
+
value = os.environ.get(_DAYTONA_ACP_TRANSPORT_ENV, "pty").strip().lower()
|
|
14
|
+
if value in _DAYTONA_ACP_TRANSPORTS:
|
|
15
|
+
return value
|
|
16
|
+
logger.warning(
|
|
17
|
+
"Invalid %s=%r; using PTY transport",
|
|
18
|
+
_DAYTONA_ACP_TRANSPORT_ENV,
|
|
19
|
+
value,
|
|
20
|
+
)
|
|
21
|
+
return "pty"
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def selected_acp_transport(*, agent: str, environment: str) -> str:
|
|
25
|
+
"""Return the concrete agent transport selected for artifact provenance."""
|
|
26
|
+
if environment == "docker":
|
|
27
|
+
return "docker-stdio"
|
|
28
|
+
if environment == "daytona":
|
|
29
|
+
return "ssh" if agent == "gemini" else daytona_acp_transport()
|
|
30
|
+
return "provider-default"
|