benchflow 0.7.6.dev2255__tar.gz → 0.7.7__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.7.6.dev2255 → benchflow-0.7.7}/CHANGELOG.md +77 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/PKG-INFO +2 -2
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/pyproject.toml +3 -5
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/runtime.py +1 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/codex_config.py +23 -10
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/install.py +14 -8
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/manifest.py +2 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/registry.py +41 -8
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/contracts/planes.py +20 -2
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/contracts/user.py +1 -1
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/evaluation.py +13 -2
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/__init__.py +59 -2
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/_setup.py +6 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/task_runtime.py +5 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout_planes.py +32 -4
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/_compose.py +1 -0
- benchflow-0.7.7/src/benchflow/sandbox/_compose_files/docker-compose-net-admin.yaml +4 -0
- benchflow-0.7.7/src/benchflow/sandbox/_egress_denylist_proxy.py +520 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/daytona_dind.py +2 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/docker.py +8 -1
- benchflow-0.7.7/src/benchflow/sandbox/egress_denylist.py +351 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/lockdown.py +35 -8
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/providers.py +9 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/config.py +109 -6
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/runtime_capabilities.py +8 -0
- benchflow-0.7.7/tests/agents/test_codex_config.py +117 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/rubric_checks.py +43 -13
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_registry.py +9 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_spec.py +8 -0
- benchflow-0.7.7/tests/test_egress_denylist.py +570 -0
- benchflow-0.7.7/tests/test_egress_denylist_integration.py +259 -0
- benchflow-0.7.7/tests/test_egress_model_gateway.py +146 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eval_source_provenance.py +3 -1
- benchflow-0.7.7/tests/test_hosted_search_policy.py +847 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_internet_policy.py +6 -8
- benchflow-0.7.7/tests/test_network_denylist_config.py +305 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_reexport.py +4 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_registry_invariants.py +21 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_planes_contract.py +21 -3
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_runtime_primitive.py +7 -1
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trial_litellm_runtime.py +3 -1
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_verify.py +3 -1
- benchflow-0.7.6.dev2255/tests/agents/test_codex_config.py +0 -63
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/.gitignore +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/LICENSE +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/README.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_paths.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_run.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_types.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/evaluation_results.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/live_activity.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/scoring.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/_utils/yaml_loader.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/client.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/container_transport.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/session.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/timeout_cleanup.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/acp/watchdog.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/credentials.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/branch.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/_failure_evidence.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/_live_progress.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/_shared.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/_traj_tui.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/_traj_upload_ui.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/eval_artifacts.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/main.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/cli/traj.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/continue_run/orchestrator.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/eval_artifacts.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/eval_lift.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/eval_plan.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/eval_sharding.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/eval_worker.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/metrics.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/models.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/monitor.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/providers/litellm_gemini_passthrough_patch.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/providers/litellm_logging.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/providers/litellm_runtime.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/providers/runtime.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/publish/_progress.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/publish/azure_blob.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/publish/broker.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/publish/redact.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/publish/traj_capture.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/publish/traj_report.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/py.typed +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/review/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/review/config.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/review/prompts.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/review/runner.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/review/scoring.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/review/wrapper.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/_config.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/_deadline.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/_results.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/runtime.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/agentcore.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/apple_container.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/daytona.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/daytona_strategies.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/process/_base.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/process/agentcore.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/process/apple.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/process/daytona.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/process/docker.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/protocol.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/setup.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/scenes.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/sdk.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/skills.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/document.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/env.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/export.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/package.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/task.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/_capture.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/_llm_capture.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/export_prime_sft.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/export_trl_sft.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/results.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/sessions.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/types.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/__main__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/boot.js +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/catalog.js +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/detail.js +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/fonts/OFL-google-sans-code.txt +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-400-latin.woff2 +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-600-latin.woff2 +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/template.html +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/theme.css +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/viewer.css +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/assets/viewer.js +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/catalog.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/legacy.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/models.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/payload.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/render.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/server.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/trajectories/viewer/sources.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/README.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/conftest.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/environment/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/_consistency.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/check_results.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/run.sh +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/run_suite.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/scenarios.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acp.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_acp_timeout_evidence.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_adapters.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_cli.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_router.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agent_setup.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agentcore_parallel.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agentcore_sandbox.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_branch.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_cli_live_progress.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_cli_misc.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_codex_review.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_config_override.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_config_redaction.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_console_progress.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_daytona_download.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_diagnostics.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_docs_examples.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_env_registry.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_env_setup.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eval_lift.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_hosted_env.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_integration_suite.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_job.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_learner_skills.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_learner_store.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_litellm_config.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_litellm_gemini_passthrough_patch.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_litellm_logging.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_litellm_reasoning_passthrough.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_litellm_runtime.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_live_llm_trajectory.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_llm_judge.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_loop_summary.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_metrics.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_oracle.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_paths_safe.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_process.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_providers.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_publish_azure_blob.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_publish_huggingface.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_release_version.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_release_workflow_wiring.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_review_rubric.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_review_runtime.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_reward_node.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_reward_range.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rewards.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_hard_deadline.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rollout_upload.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_rubric_config.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_runtime.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_runtime_capabilities.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_scene.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_scoring.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skill_eval.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skill_policy.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skills.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_smoke.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_source_adapters.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_config.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_digest.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_document.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_download.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_export.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_output_format.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_task_package.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_tasks.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_train_cli.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traj_report.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traj_staging_phases.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traj_tui.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traj_upload_cli.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traj_upload_skill.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_traj_workspace.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trajectory_upload_layout.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trajectory_upload_service.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_trl_integration.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_usage_required.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_user.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_verifier_document.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_verifier_output.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_verifier_wedge_retry.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_viewer_confirm.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/test_yaml_config.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_redaction.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_tree.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_viewer_acp_renderer.py +0 -0
- {benchflow-0.7.6.dev2255 → benchflow-0.7.7}/tests/trajectories/test_viewer_browser.py +0 -0
|
@@ -2,6 +2,41 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## 0.7.7 — 2026-09-09
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- **`network_mode: denylist` blocks a list of URLs and hosts for the agent on
|
|
9
|
+
Docker and Daytona.** The task keeps internet access; `blocked_urls` and
|
|
10
|
+
`blocked_hosts` are enforced by a root-owned loopback proxy behind the
|
|
11
|
+
sandbox-user firewall, hosted search tools are switched off per harness,
|
|
12
|
+
and every refused request lands in `trajectory/egress_denylist.jsonl`.
|
|
13
|
+
Other backends refuse the mode at preflight. (#1113)
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- **Denylist egress no longer cuts the agent off from its own model.** The
|
|
18
|
+
controller registers the running LiteLLM gateway's exact
|
|
19
|
+
`127.0.0.1:<port>` endpoint with the proxy, so clients that ignore
|
|
20
|
+
`NO_PROXY` (Gemini's Undici `ProxyAgent` tunnels even plain HTTP) still
|
|
21
|
+
reach it; the exception comes from the live gateway, never task metadata or
|
|
22
|
+
agent-supplied environment, and every other private destination stays
|
|
23
|
+
blocked. Reconnects re-register the current port. (#1118)
|
|
24
|
+
- **The denylist is a shared sandbox policy, not a per-harness one.** Every
|
|
25
|
+
supported ACP harness — custom registrations included — gets the same proxy,
|
|
26
|
+
certificates, and UID firewall on primary connections and later roles alike,
|
|
27
|
+
independent of harness name, model id, or provider. (#1118)
|
|
28
|
+
- **`codex-acp` sessions are configured through native ACP settings.** Hosted
|
|
29
|
+
search is switched off via `CODEX_CONFIG.web_search` (the CLI ignores `-c`
|
|
30
|
+
overrides), and Codex runs in `agent-full-access` session mode when
|
|
31
|
+
BenchFlow has already selected a non-root sandbox user, so its bubblewrap
|
|
32
|
+
sandbox is not nested inside Docker or Daytona — BenchFlow's own user,
|
|
33
|
+
filesystem restrictions, proxy, and firewall still apply. (#1118)
|
|
34
|
+
- **`cryptography>=44` is a core dependency.** Denylist egress mints TLS
|
|
35
|
+
certificates on both Docker and Daytona, so the pin moved out of the
|
|
36
|
+
`sandbox-agentcore` extra. (#1118)
|
|
37
|
+
|
|
38
|
+
## 0.7.6 — 2026-09-04
|
|
39
|
+
|
|
5
40
|
### Added
|
|
6
41
|
- **ACP rollout directories render as an interactive reviewer page.**
|
|
7
42
|
`bench eval view <rollout>` now assembles a JSON payload (normalized
|
|
@@ -42,6 +77,48 @@
|
|
|
42
77
|
timestamps.** Steps gain a `+m:ss` offset chip and tool calls a duration
|
|
43
78
|
chip whenever events carry `ts` / `started_at` / `finished_at` fields;
|
|
44
79
|
with today's captures (which carry none) nothing changes visually.
|
|
80
|
+
- **Z.ai Coding Plan routing.** Coding Plan subscriptions route through the
|
|
81
|
+
provider layer, with validated generation parameters forwarded and explicit
|
|
82
|
+
provider endpoints preserved by the LiteLLM proxy. (#1074)
|
|
83
|
+
- **`bench eval run` publishes job artifacts and eval results.**
|
|
84
|
+
`--publish-bucket` syncs a job directory to a HuggingFace storage bucket (an
|
|
85
|
+
alternative to `--publish-hf`'s dataset-repo upload), and
|
|
86
|
+
`--eval-results-model/-dataset/-task` opens a community eval-results PR
|
|
87
|
+
(`.eval_results/*.yaml`) on a model's HF repo, scored from the run's mean
|
|
88
|
+
reward. (#1035)
|
|
89
|
+
|
|
90
|
+
### Fixed
|
|
91
|
+
|
|
92
|
+
- **`claude-fable-5-1` can run: the `claude-agent-acp` pin moves 0.40.0 to
|
|
93
|
+
0.73.0.** The old pin bundled `@anthropic-ai/claude-agent-sdk` 0.3.160, and
|
|
94
|
+
the model rejects Claude Code older than 2.1.251 with
|
|
95
|
+
`claude_code_version_too_old` (HTTP 400) — so every rollout failed on its
|
|
96
|
+
first API call. The new pin bundles sdk 0.3.257, and the `set_config_option`
|
|
97
|
+
`"model"` / `"effort"` wiring is re-verified against it by
|
|
98
|
+
`tests/test_acp_pinned_protocol_guard.py`. (#1086)
|
|
99
|
+
- **`codex-acp` dispatch modernized.** The shim pin moves to 1.6.0 and
|
|
100
|
+
reasoning effort travels inside the model id (`modelId[effort]`) through
|
|
101
|
+
`session/set_model`, rather than a config option the shim rejects. (#1044)
|
|
102
|
+
- **ACP usage and terminal evidence survive an agent timeout**, instead of
|
|
103
|
+
being dropped with the timed-out turn. (#1080)
|
|
104
|
+
- **A pending tool call can no longer defer the idle watchdog without
|
|
105
|
+
bound** — the deferral is capped. (#1066)
|
|
106
|
+
- **`bench eval` resume re-runs infra-retryable verifier-errored tasks**
|
|
107
|
+
rather than treating the infrastructure failure as a settled result. (#1063)
|
|
108
|
+
- **Sandbox hardening execs draw on the verifier-setup budget**, so hardening
|
|
109
|
+
no longer competes with the agent's own time. (#1062)
|
|
110
|
+
- **`--trials > 1` without `--matrix` is rejected up front.** (#1064)
|
|
111
|
+
- **Healthy native ACP subscription results are preserved.** (#1049)
|
|
112
|
+
- **The agent judge parses native edit targets.** (#1069)
|
|
113
|
+
- **Non-dict rewards no longer break completed-outcome classification.** (#1054)
|
|
114
|
+
- **Codex honors proxy-owned model selection.** (#1076)
|
|
115
|
+
- **Gemini routing corrections.** ACP model ids fixed and wrapped ids
|
|
116
|
+
normalized, Gemma routing supported with pass-through usage captured, every
|
|
117
|
+
Google key alias routed through the proxy, Google Gemini gateway routes
|
|
118
|
+
normalized, and headless runs trust the sandbox workspace.
|
|
119
|
+
- **LiteLLM provisions the Vertex sandbox runtime.** (#985)
|
|
120
|
+
- **OpenClaw caps supported model output tokens.**
|
|
121
|
+
- **RestrictedPython updated to 8.3.**
|
|
45
122
|
|
|
46
123
|
## 0.7.5 — 2026-08-19
|
|
47
124
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: benchflow
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.7
|
|
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
|
|
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
20
20
|
Requires-Python: >=3.12
|
|
21
21
|
Requires-Dist: agent-client-protocol>=0.10
|
|
22
22
|
Requires-Dist: anyio>=4.0
|
|
23
|
+
Requires-Dist: cryptography>=44
|
|
23
24
|
Requires-Dist: google-cloud-aiplatform<2.0,>=1.133.0
|
|
24
25
|
Requires-Dist: httpx>=0.27.0
|
|
25
26
|
Requires-Dist: litellm[proxy]==1.91.0
|
|
@@ -58,7 +59,6 @@ Requires-Dist: openai>=1.40; extra == 'judge'
|
|
|
58
59
|
Provides-Extra: sandbox-agentcore
|
|
59
60
|
Requires-Dist: bedrock-agentcore>=1.18; extra == 'sandbox-agentcore'
|
|
60
61
|
Requires-Dist: boto3>=1.43.31; extra == 'sandbox-agentcore'
|
|
61
|
-
Requires-Dist: cryptography>=44; extra == 'sandbox-agentcore'
|
|
62
62
|
Requires-Dist: pathspec>=0.12; extra == 'sandbox-agentcore'
|
|
63
63
|
Provides-Extra: sandbox-daytona
|
|
64
64
|
Requires-Dist: daytona>=0.184.0; extra == 'sandbox-daytona'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "benchflow"
|
|
3
|
-
version = "0.7.
|
|
3
|
+
version = "0.7.7"
|
|
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"
|
|
@@ -12,6 +12,8 @@ dependencies = [
|
|
|
12
12
|
"pydantic>=2.7",
|
|
13
13
|
"pyyaml>=6.0",
|
|
14
14
|
"rich>=13.0",
|
|
15
|
+
# Denylist egress mints TLS certificates on both Docker and Daytona.
|
|
16
|
+
"cryptography>=44",
|
|
15
17
|
# Dataset registry bench_version checks (PEP 440 specifier sets).
|
|
16
18
|
"packaging>=24",
|
|
17
19
|
"litellm[proxy]==1.91.0",
|
|
@@ -100,10 +102,6 @@ sandbox-agentcore = [
|
|
|
100
102
|
# (InvokeAgentRuntimeCommand). The boto3 floor is the first release that
|
|
101
103
|
# models the bedrock-agentcore/-control services.
|
|
102
104
|
"bedrock-agentcore>=1.18",
|
|
103
|
-
# Used directly by the sealed AgentCore transport (RSA-OAEP key wrap +
|
|
104
|
-
# AES-CTR/HMAC). It otherwise arrives only transitively via
|
|
105
|
-
# litellm[proxy]; declaring it here keeps the dependency honest.
|
|
106
|
-
"cryptography>=44",
|
|
107
105
|
"boto3>=1.43.31",
|
|
108
106
|
# Docker-compatible build-context filtering without requiring a daemon.
|
|
109
107
|
"pathspec>=0.12",
|
|
@@ -91,11 +91,23 @@ def apply_codex_launch_config(
|
|
|
91
91
|
*,
|
|
92
92
|
model: str | None,
|
|
93
93
|
reasoning_effort: str | None,
|
|
94
|
+
sandboxed: bool = False,
|
|
94
95
|
) -> tuple[dict[str, str], bool]:
|
|
95
|
-
"""
|
|
96
|
+
"""Configure the adapter's sandbox, web policy and launch-owned model effort."""
|
|
96
97
|
if agent != "codex-acp":
|
|
97
98
|
return agent_env, False
|
|
98
|
-
|
|
99
|
+
updated_env = dict(agent_env)
|
|
100
|
+
if sandboxed:
|
|
101
|
+
# BenchFlow's non-root sandbox and UID firewall own isolation. The
|
|
102
|
+
# adapter defaults to workspace-write, whose nested bwrap fails on
|
|
103
|
+
# Docker/Daytona before tools run. CODEX_CONFIG.sandbox_mode does not
|
|
104
|
+
# fix this: codex-acp overrides it with its session's AgentMode.
|
|
105
|
+
updated_env.setdefault("INITIAL_AGENT_MODE", "agent-full-access")
|
|
106
|
+
disable_search = any(
|
|
107
|
+
agent_env.get(key) == "1"
|
|
108
|
+
for key in ("BENCHFLOW_DISALLOW_WEB_TOOLS", "BENCHFLOW_EGRESS_DENYLIST")
|
|
109
|
+
)
|
|
110
|
+
config = _parse_codex_config(agent_env.get(CODEX_CONFIG_ENV), strict=disable_search)
|
|
99
111
|
provider_model = agent_env.get(_PROVIDER_MODEL_ENV)
|
|
100
112
|
owns_model = bool(
|
|
101
113
|
model
|
|
@@ -105,14 +117,15 @@ def apply_codex_launch_config(
|
|
|
105
117
|
and config is not None
|
|
106
118
|
and config.get("model") == provider_model
|
|
107
119
|
)
|
|
108
|
-
if not
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
120
|
+
if config is not None and (disable_search or (owns_model and reasoning_effort)):
|
|
121
|
+
if disable_search:
|
|
122
|
+
# codex-acp 1.6.0 ignores CLI -c flags; its supported CODEX_CONFIG
|
|
123
|
+
# is forwarded to the Codex app-server's thread configuration.
|
|
124
|
+
config["web_search"] = "disabled"
|
|
125
|
+
if owns_model and reasoning_effort:
|
|
126
|
+
config["model_reasoning_effort"] = reasoning_effort
|
|
127
|
+
updated_env[CODEX_CONFIG_ENV] = json.dumps(config, separators=(",", ":"))
|
|
128
|
+
return (updated_env if updated_env != agent_env else agent_env), owns_model
|
|
116
129
|
|
|
117
130
|
|
|
118
131
|
def _apply_codex_default_auth_request(
|
|
@@ -99,7 +99,7 @@ def _owner_from_home(home: str) -> str | None:
|
|
|
99
99
|
|
|
100
100
|
|
|
101
101
|
def _policy_home_dirs(agent: str, agent_cfg: AgentConfig) -> list[str]:
|
|
102
|
-
"""Agent home dirs a
|
|
102
|
+
"""Agent home dirs a web-policy setup command may create."""
|
|
103
103
|
dirs = set(agent_cfg.home_dirs)
|
|
104
104
|
for owned_path in agent_cfg.disallow_web_tools_owned_paths:
|
|
105
105
|
if not owned_path.startswith("$HOME/"):
|
|
@@ -265,15 +265,21 @@ async def apply_web_tool_policy(
|
|
|
265
265
|
home: str,
|
|
266
266
|
*,
|
|
267
267
|
disallow: bool,
|
|
268
|
+
disallow_hosted_search: bool = False,
|
|
268
269
|
) -> None:
|
|
269
|
-
"""Apply
|
|
270
|
-
if not
|
|
270
|
+
"""Apply the agent's no-web or hosted-search-off setup command in the agent home."""
|
|
271
|
+
if not agent_cfg:
|
|
272
|
+
return
|
|
273
|
+
if disallow:
|
|
274
|
+
policy, setup_cmd = "no-web", agent_cfg.disallow_web_tools_setup_cmd
|
|
275
|
+
elif disallow_hosted_search:
|
|
276
|
+
policy, setup_cmd = "hosted-search", agent_cfg.disallow_hosted_search_setup_cmd
|
|
277
|
+
else:
|
|
278
|
+
return
|
|
279
|
+
if not setup_cmd:
|
|
271
280
|
return
|
|
272
281
|
|
|
273
|
-
cmd = (
|
|
274
|
-
f"export BENCHFLOW_AGENT_HOME={shlex.quote(home)}; "
|
|
275
|
-
f"{agent_cfg.disallow_web_tools_setup_cmd}"
|
|
276
|
-
)
|
|
282
|
+
cmd = f"export BENCHFLOW_AGENT_HOME={shlex.quote(home)}; {setup_cmd}"
|
|
277
283
|
owner = _owner_from_home(home)
|
|
278
284
|
if owner:
|
|
279
285
|
q_owner = shlex.quote(owner)
|
|
@@ -296,7 +302,7 @@ async def apply_web_tool_policy(
|
|
|
296
302
|
if stderr:
|
|
297
303
|
details.append(f"stderr: {stderr}")
|
|
298
304
|
raise RuntimeError(
|
|
299
|
-
f"Failed to apply
|
|
305
|
+
f"Failed to apply {policy} policy for {agent}: {'; '.join(details)}"
|
|
300
306
|
)
|
|
301
307
|
|
|
302
308
|
|
|
@@ -89,6 +89,8 @@ _SHIM_ONLY = frozenset(
|
|
|
89
89
|
"disallow_web_tools_setup_cmd",
|
|
90
90
|
"disallow_web_tools_owned_paths",
|
|
91
91
|
"disallow_web_tools_launch_suffix",
|
|
92
|
+
"disallow_hosted_search_setup_cmd",
|
|
93
|
+
"disallow_hosted_search_launch_suffix",
|
|
92
94
|
"task_mcp_transport",
|
|
93
95
|
"task_mcp_config_path",
|
|
94
96
|
}
|
|
@@ -502,6 +502,12 @@ class AgentConfig:
|
|
|
502
502
|
# String appended to launch_cmd when BenchFlow's no-web policy is active.
|
|
503
503
|
# Use for agents whose supported toggle is a launch/config override.
|
|
504
504
|
disallow_web_tools_launch_suffix: str = ""
|
|
505
|
+
# Shell snippet that switches off hosted (provider-side) search tools when
|
|
506
|
+
# the denylist egress policy is active; local fetch tools stay on because
|
|
507
|
+
# they go through the egress proxy. Reuses disallow_web_tools_owned_paths.
|
|
508
|
+
disallow_hosted_search_setup_cmd: str = ""
|
|
509
|
+
# String appended to launch_cmd when the denylist egress policy is active.
|
|
510
|
+
disallow_hosted_search_launch_suffix: str = ""
|
|
505
511
|
# How task-declared MCP servers are delivered to the agent:
|
|
506
512
|
# "acp" sends them in session/new; "native-config" writes an agent-specific
|
|
507
513
|
# config file before launch (for agents whose ACP server drops/reformats
|
|
@@ -511,6 +517,15 @@ class AgentConfig:
|
|
|
511
517
|
task_mcp_config_path: str = ""
|
|
512
518
|
|
|
513
519
|
|
|
520
|
+
_GEMINI_EXCLUDE_WEB_TOOLS_CMD = _json_settings_merge(
|
|
521
|
+
"$BENCHFLOW_AGENT_HOME/.gemini/settings.json",
|
|
522
|
+
'd.setdefault("tools",{}).setdefault("exclude",[]);'
|
|
523
|
+
'[d["tools"]["exclude"].append(t) for t in '
|
|
524
|
+
'["google_web_search","web_fetch"] '
|
|
525
|
+
'if t not in d["tools"]["exclude"]]',
|
|
526
|
+
)
|
|
527
|
+
|
|
528
|
+
|
|
514
529
|
# Agent registry — all supported agents
|
|
515
530
|
AGENTS: dict[str, AgentConfig] = {
|
|
516
531
|
"claude-agent-acp": AgentConfig(
|
|
@@ -552,6 +567,12 @@ AGENTS: dict[str, AgentConfig] = {
|
|
|
552
567
|
'if t not in d["permissions"]["deny"]]',
|
|
553
568
|
),
|
|
554
569
|
disallow_web_tools_owned_paths=["$HOME/.claude"],
|
|
570
|
+
disallow_hosted_search_setup_cmd=_json_settings_merge(
|
|
571
|
+
"$BENCHFLOW_AGENT_HOME/.claude/settings.json",
|
|
572
|
+
'd.setdefault("permissions",{}).setdefault("deny",[]);'
|
|
573
|
+
'[d["permissions"]["deny"].append(t) for t in ["WebSearch"] '
|
|
574
|
+
'if t not in d["permissions"]["deny"]]',
|
|
575
|
+
),
|
|
555
576
|
supports_acp_set_model=False,
|
|
556
577
|
acp_model_config_id="model",
|
|
557
578
|
acp_effort_config_id="effort",
|
|
@@ -649,7 +670,8 @@ AGENTS: dict[str, AgentConfig] = {
|
|
|
649
670
|
HostAuthFile("~/.codex/auth.json", "{home}/.codex/auth.json"),
|
|
650
671
|
],
|
|
651
672
|
),
|
|
652
|
-
|
|
673
|
+
# codex-acp ignores CLI -c flags. codex_config applies the web policy
|
|
674
|
+
# through CODEX_CONFIG before launching the adapter.
|
|
653
675
|
),
|
|
654
676
|
"gemini": AgentConfig(
|
|
655
677
|
name="gemini",
|
|
@@ -694,14 +716,11 @@ AGENTS: dict[str, AgentConfig] = {
|
|
|
694
716
|
),
|
|
695
717
|
],
|
|
696
718
|
),
|
|
697
|
-
disallow_web_tools_setup_cmd=
|
|
698
|
-
"$BENCHFLOW_AGENT_HOME/.gemini/settings.json",
|
|
699
|
-
'd.setdefault("tools",{}).setdefault("exclude",[]);'
|
|
700
|
-
'[d["tools"]["exclude"].append(t) for t in '
|
|
701
|
-
'["google_web_search","web_fetch"] '
|
|
702
|
-
'if t not in d["tools"]["exclude"]]',
|
|
703
|
-
),
|
|
719
|
+
disallow_web_tools_setup_cmd=_GEMINI_EXCLUDE_WEB_TOOLS_CMD,
|
|
704
720
|
disallow_web_tools_owned_paths=["$HOME/.gemini"],
|
|
721
|
+
# web_fetch tries the hosted urlContext path before any local fetch, so
|
|
722
|
+
# the egress proxy cannot filter it; the denylist excludes both tools.
|
|
723
|
+
disallow_hosted_search_setup_cmd=_GEMINI_EXCLUDE_WEB_TOOLS_CMD,
|
|
705
724
|
),
|
|
706
725
|
"opencode": AgentConfig(
|
|
707
726
|
name="opencode",
|
|
@@ -730,6 +749,10 @@ AGENTS: dict[str, AgentConfig] = {
|
|
|
730
749
|
'd.setdefault("tools",{})["webfetch"]=False',
|
|
731
750
|
),
|
|
732
751
|
disallow_web_tools_owned_paths=["$HOME/.config/opencode"],
|
|
752
|
+
disallow_hosted_search_setup_cmd=_json_settings_merge(
|
|
753
|
+
"$BENCHFLOW_AGENT_HOME/.config/opencode/opencode.json",
|
|
754
|
+
'd.setdefault("tools",{})["websearch"]=False',
|
|
755
|
+
),
|
|
733
756
|
),
|
|
734
757
|
"mimo": AgentConfig(
|
|
735
758
|
name="mimo",
|
|
@@ -779,6 +802,10 @@ AGENTS: dict[str, AgentConfig] = {
|
|
|
779
802
|
'd.setdefault("tools",{})["webfetch"]=False',
|
|
780
803
|
),
|
|
781
804
|
disallow_web_tools_owned_paths=["$HOME/.config/mimocode"],
|
|
805
|
+
disallow_hosted_search_setup_cmd=_json_settings_merge(
|
|
806
|
+
"$BENCHFLOW_AGENT_HOME/.config/mimocode/mimocode.json",
|
|
807
|
+
'd.setdefault("tools",{})["websearch"]=False',
|
|
808
|
+
),
|
|
782
809
|
),
|
|
783
810
|
"harvey-lab-harness": AgentConfig(
|
|
784
811
|
name="harvey-lab-harness",
|
|
@@ -1183,6 +1210,8 @@ def _acpx_wrap(config: AgentConfig) -> AgentConfig:
|
|
|
1183
1210
|
disallow_web_tools_setup_cmd=config.disallow_web_tools_setup_cmd,
|
|
1184
1211
|
disallow_web_tools_owned_paths=config.disallow_web_tools_owned_paths,
|
|
1185
1212
|
disallow_web_tools_launch_suffix=config.disallow_web_tools_launch_suffix,
|
|
1213
|
+
disallow_hosted_search_setup_cmd=config.disallow_hosted_search_setup_cmd,
|
|
1214
|
+
disallow_hosted_search_launch_suffix=config.disallow_hosted_search_launch_suffix,
|
|
1186
1215
|
task_mcp_transport=config.task_mcp_transport,
|
|
1187
1216
|
task_mcp_config_path=config.task_mcp_config_path,
|
|
1188
1217
|
)
|
|
@@ -1377,6 +1406,8 @@ def register_agent(
|
|
|
1377
1406
|
disallow_web_tools_setup_cmd: str = "",
|
|
1378
1407
|
disallow_web_tools_owned_paths: list[str] | None = None,
|
|
1379
1408
|
disallow_web_tools_launch_suffix: str = "",
|
|
1409
|
+
disallow_hosted_search_setup_cmd: str = "",
|
|
1410
|
+
disallow_hosted_search_launch_suffix: str = "",
|
|
1380
1411
|
) -> AgentConfig:
|
|
1381
1412
|
"""Register a custom agent at runtime.
|
|
1382
1413
|
|
|
@@ -1416,6 +1447,8 @@ def register_agent(
|
|
|
1416
1447
|
disallow_web_tools_setup_cmd=disallow_web_tools_setup_cmd,
|
|
1417
1448
|
disallow_web_tools_owned_paths=disallow_web_tools_owned_paths or [],
|
|
1418
1449
|
disallow_web_tools_launch_suffix=disallow_web_tools_launch_suffix,
|
|
1450
|
+
disallow_hosted_search_setup_cmd=disallow_hosted_search_setup_cmd,
|
|
1451
|
+
disallow_hosted_search_launch_suffix=disallow_hosted_search_launch_suffix,
|
|
1419
1452
|
)
|
|
1420
1453
|
AGENTS[name] = config
|
|
1421
1454
|
AGENT_INSTALLERS[name] = install_cmd
|
|
@@ -8,10 +8,13 @@ the composition edge so the kernel does not import those concrete modules.
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
10
|
from pathlib import Path
|
|
11
|
-
from typing import Any, Protocol, runtime_checkable
|
|
11
|
+
from typing import TYPE_CHECKING, Any, Protocol, runtime_checkable
|
|
12
12
|
|
|
13
13
|
from benchflow.environment.manifest import EnvironmentManifest
|
|
14
14
|
|
|
15
|
+
if TYPE_CHECKING:
|
|
16
|
+
from benchflow.sandbox.egress_denylist import EgressDenylist
|
|
17
|
+
|
|
15
18
|
|
|
16
19
|
class LiveUsageGateway(Protocol):
|
|
17
20
|
"""A provider gateway process that reports live cumulative token usage.
|
|
@@ -33,7 +36,13 @@ class LiveUsageGateway(Protocol):
|
|
|
33
36
|
class RolloutPlanes(Protocol):
|
|
34
37
|
"""Concrete-plane operations the rollout kernel needs."""
|
|
35
38
|
|
|
36
|
-
def agent_launch(
|
|
39
|
+
def agent_launch(
|
|
40
|
+
self,
|
|
41
|
+
agent: str,
|
|
42
|
+
*,
|
|
43
|
+
disallow_web_tools: bool,
|
|
44
|
+
disallow_hosted_search: bool = False,
|
|
45
|
+
) -> str: ...
|
|
37
46
|
def agent_config(self, agent: str) -> Any: ...
|
|
38
47
|
|
|
39
48
|
def resolve_agent_env(
|
|
@@ -102,6 +111,15 @@ class RolloutPlanes(Protocol):
|
|
|
102
111
|
async def link_skill_paths(self, *args: Any, **kwargs: Any) -> None: ...
|
|
103
112
|
async def ensure_litellm_runtime(self, *args: Any, **kwargs: Any) -> Any: ...
|
|
104
113
|
async def stop_provider_runtime(self, runtime: Any) -> None: ...
|
|
114
|
+
async def start_egress_denylist(
|
|
115
|
+
self,
|
|
116
|
+
env: Any,
|
|
117
|
+
sandbox_user: str | None,
|
|
118
|
+
denylist: EgressDenylist,
|
|
119
|
+
*,
|
|
120
|
+
model_gateway_url: str | None = None,
|
|
121
|
+
) -> None: ...
|
|
122
|
+
async def stop_egress_denylist(self, env: Any, rollout_dir: Path) -> None: ...
|
|
105
123
|
def extract_usage(self, runtime: Any) -> dict[str, Any]: ...
|
|
106
124
|
async def connect_acp(self, *args: Any, **kwargs: Any) -> Any: ...
|
|
107
125
|
async def execute_prompts(self, *args: Any, **kwargs: Any) -> Any: ...
|
|
@@ -64,6 +64,7 @@ from benchflow._utils.scoring import (
|
|
|
64
64
|
classify_verifier_error,
|
|
65
65
|
count_audit_outcomes,
|
|
66
66
|
count_score_outcomes,
|
|
67
|
+
extract_reward,
|
|
67
68
|
mean_scored_reward,
|
|
68
69
|
pass_rate,
|
|
69
70
|
pass_rate_excl_errors,
|
|
@@ -431,8 +432,7 @@ def _classify_completed_outcomes(
|
|
|
431
432
|
"""
|
|
432
433
|
passed = failed = errored = 0
|
|
433
434
|
for r in completed.values():
|
|
434
|
-
|
|
435
|
-
reward = rewards.get("reward") if rewards else None
|
|
435
|
+
reward = extract_reward(r) if isinstance(r, dict) else None
|
|
436
436
|
if reward == 1:
|
|
437
437
|
passed += 1
|
|
438
438
|
elif reward is not None:
|
|
@@ -1107,6 +1107,17 @@ class Evaluation:
|
|
|
1107
1107
|
r = json.loads(rfile.read_text())
|
|
1108
1108
|
task = r["task_name"]
|
|
1109
1109
|
if r.get("rewards") is not None or r.get("verifier_error"):
|
|
1110
|
+
rewards = r.get("rewards")
|
|
1111
|
+
if rewards is not None and not isinstance(rewards, dict):
|
|
1112
|
+
logger.warning(
|
|
1113
|
+
"Malformed rewards field in %s for task %r: "
|
|
1114
|
+
"expected dict or null, got %s %r — "
|
|
1115
|
+
"treating as no reward (task will count as errored)",
|
|
1116
|
+
rfile,
|
|
1117
|
+
task,
|
|
1118
|
+
type(rewards).__name__,
|
|
1119
|
+
rewards,
|
|
1120
|
+
)
|
|
1110
1121
|
rank = (
|
|
1111
1122
|
r.get("rewards") is not None,
|
|
1112
1123
|
rfile.stat().st_mtime,
|
|
@@ -149,6 +149,7 @@ from benchflow.rollout._setup import _start_env_and_upload as _start_env_and_upl
|
|
|
149
149
|
from benchflow.rollout._setup import (
|
|
150
150
|
_task_disallows_internet as _task_disallows_internet,
|
|
151
151
|
)
|
|
152
|
+
from benchflow.rollout._setup import _task_egress_denylist as _task_egress_denylist
|
|
152
153
|
from benchflow.rollout._setup import _verify_rollout as _verify_rollout
|
|
153
154
|
from benchflow.rollout._skills import (
|
|
154
155
|
_resolve_skill_creator_root as _resolve_skill_creator_root,
|
|
@@ -197,6 +198,7 @@ from benchflow.rollout.task_runtime import TaskRuntimeConfig as TaskRuntimeConfi
|
|
|
197
198
|
from benchflow.rollout.task_runtime import TaskRuntimeResult as TaskRuntimeResult
|
|
198
199
|
from benchflow.rollout_branch import ChildRunner
|
|
199
200
|
from benchflow.rollout_branch import branch as _branch_engine
|
|
201
|
+
from benchflow.sandbox.egress_denylist import EgressDenylist, denylist_agent_env
|
|
200
202
|
from benchflow.sandbox.metadata import persist_sandbox_info
|
|
201
203
|
from benchflow.scenes import compile_scenes_to_steps
|
|
202
204
|
from benchflow.scenes import scene_step_prompt as scene_step_prompt
|
|
@@ -658,6 +660,8 @@ class Rollout:
|
|
|
658
660
|
self._timing: dict[str, float] = {}
|
|
659
661
|
self._effective_locked: list[str] = []
|
|
660
662
|
self._disallow_web_tools: bool = False
|
|
663
|
+
self._egress_denylist: EgressDenylist | None = None
|
|
664
|
+
self._disallow_hosted_search: bool = False
|
|
661
665
|
self._effective_skills_dir: Path | None = None
|
|
662
666
|
self._effective_skills_sandbox_dir: str | None = None
|
|
663
667
|
# Task dir actually deployed: a temp copy (self._task_tmp) when
|
|
@@ -952,6 +956,14 @@ class Rollout:
|
|
|
952
956
|
self._disallow_web_tools = (
|
|
953
957
|
_task_disallows_internet(self._task) or cfg.self_gen_no_internet
|
|
954
958
|
) and cfg.primary_agent != "oracle"
|
|
959
|
+
self._egress_denylist = (
|
|
960
|
+
None
|
|
961
|
+
if self._disallow_web_tools or cfg.primary_agent == "oracle"
|
|
962
|
+
else _task_egress_denylist(self._task)
|
|
963
|
+
)
|
|
964
|
+
if self._egress_denylist is not None and not cfg.sandbox_user:
|
|
965
|
+
raise ValueError("network_mode='denylist' requires a sandbox_user")
|
|
966
|
+
self._disallow_hosted_search = self._egress_denylist is not None
|
|
955
967
|
self._agent_env = _apply_web_policy(
|
|
956
968
|
self._planes.resolve_agent_env(
|
|
957
969
|
cfg.primary_agent, cfg.primary_model, cfg.agent_env
|
|
@@ -973,6 +985,7 @@ class Rollout:
|
|
|
973
985
|
self._agent_launch = self._planes.agent_launch(
|
|
974
986
|
cfg.primary_agent,
|
|
975
987
|
disallow_web_tools=self._disallow_web_tools,
|
|
988
|
+
disallow_hosted_search=self._disallow_hosted_search,
|
|
976
989
|
)
|
|
977
990
|
|
|
978
991
|
# Copy task dir to temp when Dockerfile mutations are needed
|
|
@@ -1231,6 +1244,7 @@ class Rollout:
|
|
|
1231
1244
|
self._agent_cfg,
|
|
1232
1245
|
cred_home,
|
|
1233
1246
|
disallow=self._disallow_web_tools,
|
|
1247
|
+
disallow_hosted_search=self._disallow_hosted_search,
|
|
1234
1248
|
)
|
|
1235
1249
|
await self._planes.snapshot_build_config(self._env, workspace=self._agent_cwd)
|
|
1236
1250
|
await self._planes.seed_verifier_workspace(
|
|
@@ -1274,11 +1288,22 @@ class Rollout:
|
|
|
1274
1288
|
return cfg.session_factory
|
|
1275
1289
|
return None
|
|
1276
1290
|
|
|
1291
|
+
async def _start_egress_denylist(self, denylist: EgressDenylist) -> None:
|
|
1292
|
+
"""(Re)start the egress proxy before an ACP connection; a restored sandbox has none running."""
|
|
1293
|
+
runtime = self._usage_runtime
|
|
1294
|
+
await self._planes.start_egress_denylist(
|
|
1295
|
+
self._env,
|
|
1296
|
+
self._config.sandbox_user,
|
|
1297
|
+
denylist,
|
|
1298
|
+
model_gateway_url=runtime.agent_base_url if runtime is not None else None,
|
|
1299
|
+
)
|
|
1300
|
+
|
|
1277
1301
|
async def connect(self) -> None:
|
|
1278
1302
|
"""Open an ACP connection to the agent. Can be called multiple times."""
|
|
1279
1303
|
cfg = self._config
|
|
1280
1304
|
rollout_dir = self._require_rollout_dir()
|
|
1281
1305
|
t0 = datetime.now()
|
|
1306
|
+
egress_denylist = getattr(self, "_egress_denylist", None)
|
|
1282
1307
|
|
|
1283
1308
|
(
|
|
1284
1309
|
self._agent_env,
|
|
@@ -1295,11 +1320,16 @@ class Rollout:
|
|
|
1295
1320
|
sandbox_setup_timeout=cfg.sandbox_setup_timeout,
|
|
1296
1321
|
required_skill_names=getattr(self, "_required_skill_names", ()),
|
|
1297
1322
|
live_trajectory_path=rollout_dir / "trajectory" / "llm_trajectory.jsonl",
|
|
1298
|
-
force_sandbox_local=getattr(self, "_disallow_web_tools", False)
|
|
1323
|
+
force_sandbox_local=getattr(self, "_disallow_web_tools", False)
|
|
1324
|
+
or egress_denylist is not None,
|
|
1299
1325
|
)
|
|
1326
|
+
if egress_denylist is not None:
|
|
1327
|
+
self._agent_env = denylist_agent_env(self._agent_env)
|
|
1300
1328
|
sf_entrypoint = self._session_factory_entrypoint(cfg.primary_agent)
|
|
1301
1329
|
self._is_session_factory = sf_entrypoint is not None
|
|
1302
1330
|
if sf_entrypoint is not None:
|
|
1331
|
+
if egress_denylist is not None:
|
|
1332
|
+
raise RuntimeError("network_mode='denylist' requires an ACP agent")
|
|
1303
1333
|
(
|
|
1304
1334
|
self._acp_client,
|
|
1305
1335
|
self._session,
|
|
@@ -1317,6 +1347,8 @@ class Rollout:
|
|
|
1317
1347
|
agent_cwd=self._agent_cwd,
|
|
1318
1348
|
)
|
|
1319
1349
|
else:
|
|
1350
|
+
if egress_denylist is not None:
|
|
1351
|
+
await self._start_egress_denylist(egress_denylist)
|
|
1320
1352
|
(
|
|
1321
1353
|
self._acp_client,
|
|
1322
1354
|
self._session,
|
|
@@ -2012,6 +2044,17 @@ class Rollout:
|
|
|
2012
2044
|
finally:
|
|
2013
2045
|
self._usage_runtime = None
|
|
2014
2046
|
|
|
2047
|
+
rollout_dir = getattr(self, "_rollout_dir", None)
|
|
2048
|
+
if (
|
|
2049
|
+
getattr(self, "_egress_denylist", None) is not None
|
|
2050
|
+
and self._env is not None
|
|
2051
|
+
and rollout_dir is not None
|
|
2052
|
+
):
|
|
2053
|
+
try:
|
|
2054
|
+
await self._planes.stop_egress_denylist(self._env, rollout_dir)
|
|
2055
|
+
except Exception as e:
|
|
2056
|
+
logger.warning(f"Egress denylist proxy stop failed: {e}")
|
|
2057
|
+
|
|
2015
2058
|
self._finalize_usage_metrics()
|
|
2016
2059
|
self._enforce_required_usage_tracking()
|
|
2017
2060
|
|
|
@@ -2272,9 +2315,16 @@ class Rollout:
|
|
|
2272
2315
|
if disallow_web_tools is None:
|
|
2273
2316
|
disallow_web_tools = _task_disallows_internet(getattr(self, "_task", None))
|
|
2274
2317
|
disallow_web_tools = bool(disallow_web_tools and role.agent != "oracle")
|
|
2318
|
+
egress_denylist = (
|
|
2319
|
+
None
|
|
2320
|
+
if disallow_web_tools or role.agent == "oracle"
|
|
2321
|
+
else _task_egress_denylist(getattr(self, "_task", None))
|
|
2322
|
+
)
|
|
2323
|
+
disallow_hosted_search = egress_denylist is not None
|
|
2275
2324
|
agent_launch = self._planes.agent_launch(
|
|
2276
2325
|
role.agent,
|
|
2277
2326
|
disallow_web_tools=disallow_web_tools,
|
|
2327
|
+
disallow_hosted_search=disallow_hosted_search,
|
|
2278
2328
|
)
|
|
2279
2329
|
agent_env = _apply_web_policy(
|
|
2280
2330
|
self._planes.resolve_agent_env(
|
|
@@ -2296,8 +2346,10 @@ class Rollout:
|
|
|
2296
2346
|
sandbox_setup_timeout=cfg.sandbox_setup_timeout,
|
|
2297
2347
|
required_skill_names=getattr(self, "_required_skill_names", ()),
|
|
2298
2348
|
live_trajectory_path=rollout_dir / "trajectory" / "llm_trajectory.jsonl",
|
|
2299
|
-
force_sandbox_local=disallow_web_tools,
|
|
2349
|
+
force_sandbox_local=disallow_web_tools or disallow_hosted_search,
|
|
2300
2350
|
)
|
|
2351
|
+
if egress_denylist is not None:
|
|
2352
|
+
agent_env = denylist_agent_env(agent_env)
|
|
2301
2353
|
|
|
2302
2354
|
role_agent_differs = role.agent != cfg.primary_agent
|
|
2303
2355
|
needs_role_credentials = (
|
|
@@ -2342,6 +2394,7 @@ class Rollout:
|
|
|
2342
2394
|
agent_cfg,
|
|
2343
2395
|
cred_home,
|
|
2344
2396
|
disallow=disallow_web_tools,
|
|
2397
|
+
disallow_hosted_search=disallow_hosted_search,
|
|
2345
2398
|
)
|
|
2346
2399
|
|
|
2347
2400
|
self._agent_launch = agent_launch
|
|
@@ -2349,6 +2402,8 @@ class Rollout:
|
|
|
2349
2402
|
sf_entrypoint = self._session_factory_entrypoint(role.agent)
|
|
2350
2403
|
self._is_session_factory = sf_entrypoint is not None
|
|
2351
2404
|
if sf_entrypoint is not None:
|
|
2405
|
+
if egress_denylist is not None:
|
|
2406
|
+
raise RuntimeError("network_mode='denylist' requires an ACP agent")
|
|
2352
2407
|
(
|
|
2353
2408
|
self._acp_client,
|
|
2354
2409
|
self._session,
|
|
@@ -2368,6 +2423,8 @@ class Rollout:
|
|
|
2368
2423
|
agent_cwd=self._agent_cwd,
|
|
2369
2424
|
)
|
|
2370
2425
|
else:
|
|
2426
|
+
if egress_denylist is not None:
|
|
2427
|
+
await self._start_egress_denylist(egress_denylist)
|
|
2371
2428
|
(
|
|
2372
2429
|
self._acp_client,
|
|
2373
2430
|
self._session,
|
|
@@ -42,6 +42,7 @@ from benchflow.rewards.validation import (
|
|
|
42
42
|
validate_reward_map,
|
|
43
43
|
)
|
|
44
44
|
from benchflow.rollout._results import _DIAG_TRUNCATE
|
|
45
|
+
from benchflow.sandbox.egress_denylist import EgressDenylist, egress_denylist_for
|
|
45
46
|
from benchflow.trajectories.types import redact_acp_trajectory_jsonl
|
|
46
47
|
|
|
47
48
|
logger = logging.getLogger(__name__)
|
|
@@ -55,6 +56,11 @@ def _task_disallows_internet(task: Any) -> bool:
|
|
|
55
56
|
return getattr(env_config, "allow_internet", True) is False
|
|
56
57
|
|
|
57
58
|
|
|
59
|
+
def _task_egress_denylist(task: Any) -> EgressDenylist | None:
|
|
60
|
+
"""Return the egress denylist the task's sandbox config declares, if any."""
|
|
61
|
+
return egress_denylist_for(getattr(getattr(task, "config", None), "sandbox", None))
|
|
62
|
+
|
|
63
|
+
|
|
58
64
|
def _read_task_instruction(task_path: Path) -> str:
|
|
59
65
|
"""Read the agent-facing instruction from legacy files or ``task.md``."""
|
|
60
66
|
document_path = task_path / "task.md"
|