benchflow 0.6.7.dev1845__tar.gz → 0.6.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/CHANGELOG.md +142 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/PKG-INFO +13 -2
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/README.md +1 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/pyproject.toml +16 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/config_override.py +3 -2
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/scoring.py +12 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/task_authoring/scaffolding.py +2 -2
- benchflow-0.6.8/src/benchflow/_utils/text.py +86 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/acp/container_transport.py +5 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/acp/runtime.py +1 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/_toolathlon.py +1 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/harbor.py +8 -6
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/source.py +1 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/openclaw_acp_shim.py +31 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/registry.py +6 -6
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/_live_progress.py +9 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/main.py +2 -0
- benchflow-0.6.8/src/benchflow/cli/traj.py +138 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/continue_run/orchestrator.py +2 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/demo_task/task.md +1 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/diagnostics.py +29 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/environment/_registry/env0@outage.toml +7 -8
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/environment/_registry/env0@prod.toml +10 -14
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/experimental/mcp/reviewer_server.py +1 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/providers/litellm_runtime.py +207 -20
- benchflow-0.6.8/src/benchflow/publish/azure_blob.py +142 -0
- benchflow-0.6.8/src/benchflow/publish/broker.py +193 -0
- benchflow-0.6.8/src/benchflow/publish/redact.py +209 -0
- benchflow-0.6.8/src/benchflow/publish/traj_capture.py +450 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/review/wrapper.py +1 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/__init__.py +28 -7
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/_setup.py +4 -4
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/apple_container.py +1 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/daytona.py +31 -27
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/daytona_pty.py +68 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/daytona_strategies.py +3 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/process/_base.py +56 -3
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/process/apple.py +3 -2
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/process/daytona.py +4 -3
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/process/docker.py +3 -3
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/setup.py +3 -3
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/skill_eval/_core.py +7 -8
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/skill_policy.py +2 -2
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/__init__.py +2 -2
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/_document_normalize.py +3 -3
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/_document_parse.py +81 -6
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/_document_profiles.py +2 -2
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/acceptance_live_validation.py +2 -2
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/config.py +144 -29
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/document.py +1 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/export.py +22 -2
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/imports.py +5 -2
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/runtime_capabilities.py +15 -15
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/traces/task_gen.py +1 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/types.py +9 -2
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/acceptance_live_harness.py +1 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/acp_smoke/task.md +1 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/hello-world-task/task.md +1 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acp.py +69 -2
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acp_mcp_servers.py +2 -2
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agentcore_sandbox.py +1 -3
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_bare_model_provider.py +7 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_cli_live_progress.py +69 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_config_override.py +4 -3
- benchflow-0.6.8/tests/test_diagnostics.py +151 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_env_setup.py +3 -3
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_environment_manifest_controls.py +4 -4
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_inbound_adapters.py +2 -2
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_internet_policy.py +8 -8
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_job.py +17 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_litellm_runtime.py +41 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_live_llm_trajectory.py +226 -2
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_mle_bench_adapter.py +1 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_process.py +65 -0
- benchflow-0.6.8/tests/test_publish_azure_blob.py +686 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_registry_invariants.py +5 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_release_workflow_wiring.py +24 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_setup_commands.py +3 -3
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_upload.py +9 -9
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_runtime_capabilities.py +9 -9
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skill_eval.py +3 -4
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skill_eval_integration.py +1 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skill_eval_sweep.py +4 -4
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skill_policy.py +1 -1
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_source_adapters.py +27 -29
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_config.py +133 -19
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_document.py +157 -24
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_export.py +62 -8
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_package.py +6 -6
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_traces_task_gen.py +2 -2
- benchflow-0.6.8/tests/test_traj_upload_cli.py +301 -0
- benchflow-0.6.8/tests/test_trajectory_upload_service.py +1304 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_verifier_document.py +2 -2
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_verify.py +1 -1
- benchflow-0.6.7.dev1845/src/benchflow/_utils/text.py +0 -37
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/.gitignore +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/LICENSE +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_paths.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_run.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_types.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/evaluation_results.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/live_activity.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/yaml_loader.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/acp/client.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/acp/session.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/codex_config.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/credentials.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/install.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/branch.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/_failure_evidence.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/_shared.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/contracts/planes.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/eval_plan.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/eval_worker.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/evaluation.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/metrics.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/models.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/monitor.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/providers/litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/providers/runtime.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/py.typed +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/review/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/review/config.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/review/prompts.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/review/runner.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/_config.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/_deadline.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/_results.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout/task_runtime.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/rollout_planes.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/runtime.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/_compose.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/agentcore.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/daytona_dind.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/docker.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/lockdown.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/process/agentcore.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/protocol.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/providers.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/scenes.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/sdk.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/skills.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/env.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/package.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/task.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/_capture.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/_llm_capture.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/export_trl_sft.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/results.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/trajectories/viewer.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/README.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/conftest.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/_consistency.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/check_results.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/run.sh +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/run_suite.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/scenarios.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_adapters.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_cli.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_registry.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_router.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_setup.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agent_spec.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agentcore_parallel.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_branch.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_cli_misc.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_codex_review.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_config_redaction.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_console_progress.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_daytona_download.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_docs_examples.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_env_registry.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eval_lift.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_integration_suite.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_learner_skills.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_learner_store.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_litellm_config.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_litellm_reasoning_passthrough.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_llm_judge.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_loop_summary.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_metrics.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_oracle.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_paths_safe.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_providers.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_reexport.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_release_version.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_review_rubric.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_review_runtime.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_reward_node.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_reward_range.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rewards.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_hard_deadline.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_planes_contract.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_rubric_config.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_runtime.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_scene.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_scoring.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skills.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_smoke.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_digest.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_download.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_output_format.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_task_runtime_primitive.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_tasks.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_train_cli.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trial_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_trl_integration.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_usage_required.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_user.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_verifier_output.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_verifier_wedge_retry.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/test_yaml_config.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_redaction.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.6.7.dev1845 → benchflow-0.6.8}/tests/trajectories/test_tree.py +0 -0
|
@@ -2,6 +2,68 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## 0.6.8 — 2026-08-15
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- **Public trajectory contribution.** `bench traj upload PATH` validates and
|
|
9
|
+
structurally redacts trajectory JSONL, creates a content-addressed manifest,
|
|
10
|
+
and uploads through the built-in public broker. Azure Blob quarantine,
|
|
11
|
+
versioning, short-lived create-only user-delegation SAS grants, and an
|
|
12
|
+
event-driven fail-closed validator keep untrusted captures out of the
|
|
13
|
+
community namespace until hashes, sizes, strict JSONL (including duplicate-key
|
|
14
|
+
and non-finite-number rejection), and artifact/manifest secret scans pass.
|
|
15
|
+
Replaying an ingested digest is a no-op; trusted operators can opt into direct
|
|
16
|
+
Azure upload with the `azure` extra and `--direct`.
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- **BREAKING (task.md): the `environment:` frontmatter key is renamed to
|
|
20
|
+
`sandbox:`.** The native task-config surface now accepts only `sandbox:`
|
|
21
|
+
(plus `verifier.sandbox:` for the verifier's separate sandbox spec and
|
|
22
|
+
`verifier.sandbox_mode:` for shared/separate selection); `environment:`,
|
|
23
|
+
`verifier.environment:`, and `verifier.environment_mode:` no longer
|
|
24
|
+
validate and fail with an actionable message naming the rename. **The
|
|
25
|
+
one-line fix for existing task.md files is renaming the key.**
|
|
26
|
+
Legacy/Harbor `task.toml` imports are unaffected: the toml loader
|
|
27
|
+
converts `[environment]`, `[verifier.environment]`, and
|
|
28
|
+
`environment_mode` to the `sandbox` spellings (declaring both spellings
|
|
29
|
+
in one file is an error), and `bench tasks export` emits the inverse —
|
|
30
|
+
a stock-Harbor `[environment]`-spelled `task.toml`. All native emitters
|
|
31
|
+
— `model_dump_toml`, `bench tasks migrate`, task scaffolding,
|
|
32
|
+
skill-eval/trace/adapter task generation, rubric-review wrappers — now
|
|
33
|
+
write `sandbox`. Python API: the compat property
|
|
34
|
+
`TaskConfig.environment` is removed (use `TaskConfig.sandbox`),
|
|
35
|
+
`VerifierConfig.environment`/`environment_mode` became
|
|
36
|
+
`sandbox`/`sandbox_mode`, and the `VerifierEnvironmentMode` enum is now
|
|
37
|
+
`VerifierSandboxMode`. The Environment plane
|
|
38
|
+
(`--environment-manifest`, `benchflow.environment.manifest`, the
|
|
39
|
+
eval-config `environment:` docker/daytona selector) is a different
|
|
40
|
+
subsystem and is unchanged.
|
|
41
|
+
|
|
42
|
+
### Fixed
|
|
43
|
+
- **Coherent integration coverage for code-and-fixture changes.** The
|
|
44
|
+
credential-free fixture job now tests pull-request source together with its
|
|
45
|
+
task fixtures, while the secret-bearing smoke job retains trusted fixtures;
|
|
46
|
+
the release gate requires both results. (#969)
|
|
47
|
+
- **Retryable Daytona transport failures stay retryable.** Transient SDK
|
|
48
|
+
transport errors are stamped while their vendor type is still available,
|
|
49
|
+
empty exception messages retain useful type information, and permanent
|
|
50
|
+
errors remain outside the retry policy. (#970)
|
|
51
|
+
- **Live token counters no longer freeze behind callback-log reads.** Larger,
|
|
52
|
+
bounded ranged reads distinguish EOF from read failure, expose lag, and keep
|
|
53
|
+
terminal phase labels from moving backwards. (#971)
|
|
54
|
+
- **Fresh OpenClaw installs and GPT-5.4 calls use compatible limits.** OpenClaw
|
|
55
|
+
is pinned to a Node-compatible runtime, and raw plus ACP-alias GPT-5.4 model
|
|
56
|
+
IDs clamp output tokens to the provider's 128,000-token limit. (#977, #986)
|
|
57
|
+
- **Anthropic Vertex routes include their required runtime.** The gateway now
|
|
58
|
+
installs the Google Cloud Vertex AI SDK used by LiteLLM's Anthropic Vertex
|
|
59
|
+
path. (#978)
|
|
60
|
+
- **ACP subprocess diagnostics survive normal teardown.** A bounded, redacted
|
|
61
|
+
stderr tail is retained even when stdout remains open; stderr drain failures
|
|
62
|
+
cannot mask the structured transport diagnosis, and repeated process close
|
|
63
|
+
calls are idempotent. (#980)
|
|
64
|
+
|
|
65
|
+
## 0.6.7 — 2026-08-09
|
|
66
|
+
|
|
5
67
|
### Added
|
|
6
68
|
- **Built-in environment registry.** The committed env-axis pins
|
|
7
69
|
(`env0@prod`, `env0@outage`) moved from `benchmarks/_environments/` into
|
|
@@ -10,13 +72,71 @@
|
|
|
10
72
|
`pip install benchflow` with no checkout and no env vars.
|
|
11
73
|
`$BENCHFLOW_ENV_REGISTRY`, when set, still wins entirely; resolution
|
|
12
74
|
stays content-addressed (sha256 logged), and unknown names now error
|
|
13
|
-
listing the available specs.
|
|
75
|
+
listing the available specs. (#961)
|
|
14
76
|
- **Console progress heartbeat.** Single-concurrency eval runs print a
|
|
15
77
|
throttled progress line (`… 6.2min, 12 tool calls (last: …)`) about every
|
|
16
78
|
45 seconds while the agent works, so a long prompt is distinguishable from
|
|
17
79
|
a hang. The heartbeat is auto-gated off for multi-concurrency jobs;
|
|
18
80
|
`bench eval run --quiet` suppresses it, and `BENCHFLOW_PROGRESS=on`/`off`
|
|
19
81
|
overrides the auto-gate. (#951)
|
|
82
|
+
- **Live per-task activity in the eval dashboard.** Under a TTY the
|
|
83
|
+
running-now table gains an activity column ("38 calls · last:
|
|
84
|
+
file_editor", plus tokens once a usage snapshot exists), polled from the
|
|
85
|
+
ACP session's existing heartbeat counters. The agents-manifest autoload
|
|
86
|
+
also clones quietly — one "Cloning …" summary line instead of raw git
|
|
87
|
+
progress. (#956)
|
|
88
|
+
- **Phase labels and per-task failure reasons.** The activity cell is never
|
|
89
|
+
blank while a row exists: sandbox create, agent install, and verify show
|
|
90
|
+
dim phase labels ("creating sandbox…", "installing agent…",
|
|
91
|
+
"verifying…"). The final block prints one dim "✗ task: reason" line per
|
|
92
|
+
failed task — verifier error first, else a compact reward/metric
|
|
93
|
+
breakdown, else the reward — capped at 5 lines. `--quiet` now silences
|
|
94
|
+
the dashboard as well as the heartbeat. (#957)
|
|
95
|
+
- **Failure reasons mined from verifier artifacts.** When a displayed
|
|
96
|
+
failure would read as a bare "reward X", the CLI reads a small bounded
|
|
97
|
+
artifact from the rollout's own verifier dir — the CTRF report (first
|
|
98
|
+
failed test plus its assertion line) or a tail of `test-stdout.txt` — and
|
|
99
|
+
a dim "(details: …/verifier)" pointer names the artifact directory.
|
|
100
|
+
Artifacts resolve by the recorded rollout name, never by glob. (#959)
|
|
101
|
+
- **Fractional rewards in console summaries.** Per-task lines carry the
|
|
102
|
+
scored reward (`✗ task (reward=0.30, tools=47)`), the Score line renders
|
|
103
|
+
", mean reward 0.30" alongside the binarized counts, and
|
|
104
|
+
`EvaluationResult` / `summary.json` gain a `mean_reward` field (mean over
|
|
105
|
+
scored rollouts; errors excluded, not zeroed). (#960)
|
|
106
|
+
- **Full failure counts on per-task console lines.** A CTRF report with
|
|
107
|
+
more than one failed test rolls up as " (+N more failure(s); P/T checks
|
|
108
|
+
passed)" after the first failure — the count suffix is never truncated
|
|
109
|
+
away — and parametrized test names keep their `[param]` ids whenever the
|
|
110
|
+
report carries them. (#962)
|
|
111
|
+
- **Live token usage in the dashboard footer.** The footer sums completed
|
|
112
|
+
tasks' trusted telemetry plus every running rollout's live ACP session
|
|
113
|
+
usage, so spend is visible while the run executes (usage lands per
|
|
114
|
+
completed prompt; cost stays scoring-time from the gateway log).
|
|
115
|
+
Single-tool agents' activity cell drops the redundant "last:" suffix in
|
|
116
|
+
favor of "38 calls · 412.0k tok" once tokens are available. (#963)
|
|
117
|
+
- **env0-shaped failure breakdowns.** The failure-reason tiers understand
|
|
118
|
+
metrics nested one level under `metrics` / `details`, pair
|
|
119
|
+
`<name>_found` with `<name>_total` into fractions ("deadlines 1/5",
|
|
120
|
+
lowest-signal first), probe `verifier/reward.json` on disk between the
|
|
121
|
+
CTRF and stdout tiers, and every failure block with on-disk verifier
|
|
122
|
+
artifacts gets one "(details: …)" pointer. (#964)
|
|
123
|
+
- **Mid-prompt live token usage via the gateway's live capture.** The #963
|
|
124
|
+
live tokens stepped forward only when an ACP prompt completed, so a
|
|
125
|
+
single-prompt rollout showed "— tokens" for its whole agent phase. The
|
|
126
|
+
proxy runtime's existing live-capture loop (which already tails the
|
|
127
|
+
sandbox gateway's callback log every second) now also accumulates
|
|
128
|
+
provider tokens into an O(1) counter, and the dashboard reconciles the
|
|
129
|
+
two non-decreasing live signals as max(ACP, gateway) — display-only,
|
|
130
|
+
still replaced by the trusted scoring import at completion, and any
|
|
131
|
+
gateway-side failure degrades to the ACP-only behavior. (#965)
|
|
132
|
+
|
|
133
|
+
- **Compact flow-style arrays in emitted task.md frontmatter.** Short
|
|
134
|
+
scalar-only lists render on one line (`tags: [parsing, nlp]`) instead of
|
|
135
|
+
multiline bullets, so hand-written flow arrays survive `bench tasks
|
|
136
|
+
migrate` / normalize round-trips. The style predicate measures each list
|
|
137
|
+
with the real YAML emitter (so it can never disagree with PyYAML's own
|
|
138
|
+
quoting) and falls back to block style for long, nested, or multiline
|
|
139
|
+
items. Parsing is unchanged — both styles were always accepted. (#967)
|
|
20
140
|
|
|
21
141
|
### Changed
|
|
22
142
|
- Migrated the clawsbench `archive-amazon-shipping` task to the native
|
|
@@ -51,6 +171,27 @@
|
|
|
51
171
|
environment now fails loud when it declares services but none are startable
|
|
52
172
|
in the image, instead of passing a vacuous readiness gate and dying at the
|
|
53
173
|
verifier. (#954)
|
|
174
|
+
- Pointed the built-in `env0@prod` / `env0@outage` pins at the org-owned
|
|
175
|
+
`ghcr.io/benchflow-ai/env0:0.2.0` base image. The wheel-shipped pins named a
|
|
176
|
+
personal Docker Hub image while their own comments and the environment docs
|
|
177
|
+
declared the ghcr image authoritative; `base_image` is recorded as rollout
|
|
178
|
+
provenance, so every env0 result carried the wrong base. Verified on Daytona
|
|
179
|
+
(env0 `auth-least-privilege-summary`, 8/8 services ready, reward 1.0).
|
|
180
|
+
- Restored the `env0@outage` perturbation (gmail and slack removed relative
|
|
181
|
+
to `env0@prod`) that the #954 upstream sync had erased by mirroring the
|
|
182
|
+
full service list into both pins, and corrected the pin header's stale
|
|
183
|
+
slack port. (#955)
|
|
184
|
+
- **ACP protocol JSON glued to PTY shell noise now decodes.** On PTY
|
|
185
|
+
transports, an agent's initialize response could arrive on the same line
|
|
186
|
+
as the shell prompt (ANSI/OSC-prefixed), fail the strict whole-line JSON
|
|
187
|
+
parse, and get filed as noise — the handshake then "timed out" at any
|
|
188
|
+
window with the answer sitting in the agent log. The PTY-facing transport
|
|
189
|
+
now retries from the first `{` and once more after an ANSI scrub, but
|
|
190
|
+
only until the first successfully decoded protocol message per
|
|
191
|
+
connection; afterwards the strict contract rules, so log-echoed envelopes
|
|
192
|
+
cannot impersonate protocol traffic mid-session. The pre-prompt handshake
|
|
193
|
+
window is also env-configurable via `BENCHFLOW_ACP_HANDSHAKE_TIMEOUT`
|
|
194
|
+
(seconds; default 60). (#958)
|
|
54
195
|
|
|
55
196
|
## 0.6.6 — 2026-08-04
|
|
56
197
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: benchflow
|
|
3
|
-
Version: 0.6.
|
|
3
|
+
Version: 0.6.8
|
|
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: google-cloud-aiplatform<2.0,>=1.133.0
|
|
23
24
|
Requires-Dist: httpx>=0.27.0
|
|
24
25
|
Requires-Dist: litellm[proxy]==1.91.0
|
|
25
26
|
Requires-Dist: packaging>=24
|
|
@@ -28,6 +29,15 @@ Requires-Dist: pyyaml>=6.0
|
|
|
28
29
|
Requires-Dist: rich>=13.0
|
|
29
30
|
Requires-Dist: tomli-w>=1.0
|
|
30
31
|
Requires-Dist: typer>=0.9
|
|
32
|
+
Provides-Extra: azure
|
|
33
|
+
Requires-Dist: azure-identity>=1.16; extra == 'azure'
|
|
34
|
+
Requires-Dist: azure-storage-blob>=12.19; extra == 'azure'
|
|
35
|
+
Provides-Extra: azure-service
|
|
36
|
+
Requires-Dist: azure-data-tables>=12.5; extra == 'azure-service'
|
|
37
|
+
Requires-Dist: azure-identity>=1.16; extra == 'azure-service'
|
|
38
|
+
Requires-Dist: azure-storage-blob>=12.19; extra == 'azure-service'
|
|
39
|
+
Requires-Dist: azure-storage-queue>=12.9; extra == 'azure-service'
|
|
40
|
+
Requires-Dist: uvicorn>=0.30; extra == 'azure-service'
|
|
31
41
|
Provides-Extra: bedrock
|
|
32
42
|
Requires-Dist: boto3>=1.40; extra == 'bedrock'
|
|
33
43
|
Provides-Extra: deepagents
|
|
@@ -145,6 +155,7 @@ Start with [Getting started](./docs/getting-started.md), then [Concepts](./docs/
|
|
|
145
155
|
| Multi-agent: coder + reviewer, simulated user, BYOS, stateful envs | [Use cases](./docs/use-cases.md) |
|
|
146
156
|
| Multi-round single-agent (progressive disclosure, oracle access) | [Progressive disclosure](./docs/progressive-disclosure.md) |
|
|
147
157
|
| Skill evaluation (when the artifact is a skill, not a workspace) | [Skill eval](./docs/skill-eval.md) |
|
|
158
|
+
| Contribute a trajectory capture | [Trajectory upload](./docs/traj-upload.md) |
|
|
148
159
|
| Understand the security model | [Sandbox hardening](./docs/sandbox-hardening.md) |
|
|
149
160
|
| Use public vs internal preview SDK releases | [Release channels](./docs/release.md) |
|
|
150
161
|
| CLI flags + commands | [CLI reference](./docs/reference/cli.md) |
|
|
@@ -81,6 +81,7 @@ Start with [Getting started](./docs/getting-started.md), then [Concepts](./docs/
|
|
|
81
81
|
| Multi-agent: coder + reviewer, simulated user, BYOS, stateful envs | [Use cases](./docs/use-cases.md) |
|
|
82
82
|
| Multi-round single-agent (progressive disclosure, oracle access) | [Progressive disclosure](./docs/progressive-disclosure.md) |
|
|
83
83
|
| Skill evaluation (when the artifact is a skill, not a workspace) | [Skill eval](./docs/skill-eval.md) |
|
|
84
|
+
| Contribute a trajectory capture | [Trajectory upload](./docs/traj-upload.md) |
|
|
84
85
|
| Understand the security model | [Sandbox hardening](./docs/sandbox-hardening.md) |
|
|
85
86
|
| Use public vs internal preview SDK releases | [Release channels](./docs/release.md) |
|
|
86
87
|
| CLI flags + commands | [CLI reference](./docs/reference/cli.md) |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "benchflow"
|
|
3
|
-
version = "0.6.
|
|
3
|
+
version = "0.6.8"
|
|
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"
|
|
@@ -15,6 +15,7 @@ dependencies = [
|
|
|
15
15
|
# Dataset registry bench_version checks (PEP 440 specifier sets).
|
|
16
16
|
"packaging>=24",
|
|
17
17
|
"litellm[proxy]==1.91.0",
|
|
18
|
+
"google-cloud-aiplatform>=1.133.0,<2.0",
|
|
18
19
|
"tomli-w>=1.0",
|
|
19
20
|
"typer>=0.9",
|
|
20
21
|
]
|
|
@@ -39,6 +40,20 @@ classifiers = [
|
|
|
39
40
|
]
|
|
40
41
|
|
|
41
42
|
[project.optional-dependencies]
|
|
43
|
+
azure = [
|
|
44
|
+
# Direct Azure Blob trajectory uploads (bench traj upload --direct).
|
|
45
|
+
# Broker-mode uploads need neither package.
|
|
46
|
+
"azure-storage-blob>=12.19",
|
|
47
|
+
"azure-identity>=1.16",
|
|
48
|
+
]
|
|
49
|
+
azure-service = [
|
|
50
|
+
# Dependencies baked into the public trajectory broker/validator image.
|
|
51
|
+
"azure-storage-blob>=12.19",
|
|
52
|
+
"azure-identity>=1.16",
|
|
53
|
+
"azure-data-tables>=12.5",
|
|
54
|
+
"azure-storage-queue>=12.9",
|
|
55
|
+
"uvicorn>=0.30",
|
|
56
|
+
]
|
|
42
57
|
dev = [
|
|
43
58
|
"pre-commit>=3.7",
|
|
44
59
|
# AgentCore's CodeBuild path must reproduce Docker's ignore rules in tests
|
|
@@ -144,8 +144,9 @@ def apply_config_override(config: Any, overlay: dict[str, Any] | None) -> Any:
|
|
|
144
144
|
|
|
145
145
|
# Merge against the FIELD-NAME dump (``by_alias=False``) so overlays use the
|
|
146
146
|
# canonical field names (``agent``, ``sandbox``, …); ``populate_by_name`` lets
|
|
147
|
-
# re-validation accept them. ``
|
|
148
|
-
#
|
|
147
|
+
# re-validation accept them. (``sandbox`` is now the only spelling — the
|
|
148
|
+
# legacy ``environment`` alias was removed in the rename — but ``oracle``
|
|
149
|
+
# still serializes via alias, so the field-name dump stays load-bearing.)
|
|
149
150
|
merged = deep_merge(config.model_dump(by_alias=False), overlay)
|
|
150
151
|
patched = TaskConfig.model_validate(merged)
|
|
151
152
|
logger.debug(
|
|
@@ -4,7 +4,10 @@ import math
|
|
|
4
4
|
from collections.abc import Iterable, Mapping
|
|
5
5
|
from typing import Any, Literal
|
|
6
6
|
|
|
7
|
-
from benchflow.diagnostics import
|
|
7
|
+
from benchflow.diagnostics import (
|
|
8
|
+
DIAGNOSTIC_REASON_IDLE_TIMEOUT,
|
|
9
|
+
TRANSIENT_SANDBOX_TRANSPORT_MARKER,
|
|
10
|
+
)
|
|
8
11
|
|
|
9
12
|
# Error category constants
|
|
10
13
|
INSTALL_FAILED = "install_failure"
|
|
@@ -174,6 +177,14 @@ def _looks_like_infra_error(error: str) -> bool:
|
|
|
174
177
|
"connection reset",
|
|
175
178
|
"connection refused",
|
|
176
179
|
"broken pipe",
|
|
180
|
+
# Stamped by TransientSandboxTransportError at the sandbox-SDK
|
|
181
|
+
# boundary, where the vendor exception type is still available to
|
|
182
|
+
# judge. One marker covers every provider call — exec, upload,
|
|
183
|
+
# download, stat — instead of one entry per vendor message
|
|
184
|
+
# prefix, which would be endless and silently incomplete.
|
|
185
|
+
TRANSIENT_SANDBOX_TRANSPORT_MARKER,
|
|
186
|
+
# Predates the marker above and is kept for strings rebuilt
|
|
187
|
+
# outside that boundary (e.g. a verifier error re-raised as text).
|
|
177
188
|
"failed to get session command",
|
|
178
189
|
"sandbox not found",
|
|
179
190
|
"workspace not found",
|
{benchflow-0.6.7.dev1845 → benchflow-0.6.8}/src/benchflow/_utils/task_authoring/scaffolding.py
RENAMED
|
@@ -333,7 +333,7 @@ timeout_sec = 300
|
|
|
333
333
|
[verifier]
|
|
334
334
|
timeout_sec = 120
|
|
335
335
|
|
|
336
|
-
[
|
|
336
|
+
[sandbox]
|
|
337
337
|
cpus = 1
|
|
338
338
|
memory_mb = 2048
|
|
339
339
|
""")
|
|
@@ -412,7 +412,7 @@ agent:
|
|
|
412
412
|
timeout_sec: 300
|
|
413
413
|
verifier:
|
|
414
414
|
timeout_sec: 120
|
|
415
|
-
|
|
415
|
+
sandbox:
|
|
416
416
|
cpus: 1
|
|
417
417
|
memory_mb: 2048
|
|
418
418
|
---
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"""Plain-text rendering for console and log lines.
|
|
2
|
+
|
|
3
|
+
Two helpers live here: :func:`truncate_end`, which shortens a message
|
|
4
|
+
without letting a sliced token read as a whole word, and
|
|
5
|
+
:func:`describe_exception`, which renders an exception so the resulting
|
|
6
|
+
line is never detail-free.
|
|
7
|
+
|
|
8
|
+
The eval console renders one line per rollout, e.g.::
|
|
9
|
+
|
|
10
|
+
[ERR] my-task (tools=0) (Docker compose command failed ...)
|
|
11
|
+
|
|
12
|
+
Error messages routinely embed task names and paths, and a bare
|
|
13
|
+
``msg[:n]`` slice can cut one of those tokens in half — ``environment
|
|
14
|
+
authored-task`` rendered as ``environment auth`` — which reads as a
|
|
15
|
+
different, complete name. ``truncate_end`` is the canonical fix: the cut
|
|
16
|
+
only ever removes the tail, backs up to a word boundary when one exists,
|
|
17
|
+
and is marked with an ellipsis so a shortened message can never
|
|
18
|
+
masquerade as a full one.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from __future__ import annotations
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def truncate_end(message: str, limit: int) -> str:
|
|
25
|
+
"""Shorten ``message`` to at most ``limit`` characters, ending in ``…``.
|
|
26
|
+
|
|
27
|
+
The kept text is always a verbatim prefix of the original (interior
|
|
28
|
+
words are never dropped), backed up to the previous word boundary so
|
|
29
|
+
a sliced token cannot read as a complete word. A single token longer
|
|
30
|
+
than the budget is still cut, with the ellipsis marking the cut.
|
|
31
|
+
Messages within budget are returned unchanged.
|
|
32
|
+
"""
|
|
33
|
+
if len(message) <= limit:
|
|
34
|
+
return message
|
|
35
|
+
if limit <= 1:
|
|
36
|
+
return "…" if limit == 1 else ""
|
|
37
|
+
kept = message[: limit - 1]
|
|
38
|
+
if message[limit - 1] != " ":
|
|
39
|
+
head, sep, _partial = kept.rpartition(" ")
|
|
40
|
+
if sep:
|
|
41
|
+
kept = head
|
|
42
|
+
return kept.rstrip() + "…"
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def describe_exception(exc: BaseException) -> str:
|
|
46
|
+
"""Render ``exc`` as a one-line description that is never detail-free.
|
|
47
|
+
|
|
48
|
+
``f"{exc}"`` keeps only ``str(exc)``, which for some SDK errors carries
|
|
49
|
+
no information at all. The Daytona SDK wraps every toolbox call as
|
|
50
|
+
``"<prefix>: " + str(underlying)``, and httpx raises its timeout and
|
|
51
|
+
connection errors with an *empty* message — so a read timeout on
|
|
52
|
+
``execute_session_command`` stringifies to the bare
|
|
53
|
+
``"Failed to execute session command: "``, a message whose detail after
|
|
54
|
+
the colon is empty. The exception *class* (``DaytonaTimeoutError`` vs
|
|
55
|
+
``DaytonaConnectionError``) is then the only surviving evidence of what
|
|
56
|
+
actually went wrong, and plain interpolation discards it.
|
|
57
|
+
|
|
58
|
+
Lead with the class name so "the exec timed out" can never again be
|
|
59
|
+
indistinguishable from "the connection dropped". The trailing
|
|
60
|
+
``status_code``/``error_code`` fields serve the *other* shape of SDK
|
|
61
|
+
failure — an OpenAPI exception carrying an HTTP response — and are
|
|
62
|
+
absent by construction for the detail-free transport case above, which
|
|
63
|
+
never reaches a response at all.
|
|
64
|
+
"""
|
|
65
|
+
name = type(exc).__name__
|
|
66
|
+
message = str(exc).strip()
|
|
67
|
+
# Approximation: this tests the whole message, not specifically the
|
|
68
|
+
# detail after a wrapper prefix — a message that legitimately ends in a
|
|
69
|
+
# colon is annotated too. That is harmless, and the alternative means
|
|
70
|
+
# knowing every vendor's prefix.
|
|
71
|
+
if message.endswith(":"):
|
|
72
|
+
message = f"{message} (no detail)"
|
|
73
|
+
described = f"{name}: {message}" if message else f"{name} (no message)"
|
|
74
|
+
details: list[str] = []
|
|
75
|
+
status_code = getattr(exc, "status_code", None)
|
|
76
|
+
# Both fields are "absent" when falsy, but only ``status_code`` has a
|
|
77
|
+
# meaningful zero-ish value to protect (no HTTP status is 0, yet an
|
|
78
|
+
# explicit 0 should still surface as evidence of a malformed response).
|
|
79
|
+
if status_code is not None:
|
|
80
|
+
details.append(f"status_code={status_code}")
|
|
81
|
+
error_code = getattr(exc, "error_code", None)
|
|
82
|
+
if error_code:
|
|
83
|
+
details.append(f"error_code={error_code}")
|
|
84
|
+
if details:
|
|
85
|
+
described = f"{described} [{', '.join(details)}]"
|
|
86
|
+
return described
|
|
@@ -7,6 +7,7 @@ from typing import Any, TextIO
|
|
|
7
7
|
|
|
8
8
|
from benchflow.sandbox.process import LiveProcess
|
|
9
9
|
from benchflow.sandbox.process._base import _ANSI_CSI_RE, _ANSI_OSC_RE
|
|
10
|
+
from benchflow.trajectories.types import redact_trajectory_text
|
|
10
11
|
|
|
11
12
|
from .transport import Transport, decode_json_rpc_message
|
|
12
13
|
|
|
@@ -138,3 +139,7 @@ class ContainerTransport(Transport):
|
|
|
138
139
|
self._agent_log_file.close()
|
|
139
140
|
self._agent_log_file = None
|
|
140
141
|
await self._cp.close()
|
|
142
|
+
stderr = getattr(self._cp, "stderr_tail", "")
|
|
143
|
+
if isinstance(stderr, str) and stderr and self._agent_log_path:
|
|
144
|
+
with self._agent_log_path.open("a") as agent_log:
|
|
145
|
+
agent_log.write(redact_trajectory_text(stderr))
|
|
@@ -549,7 +549,7 @@ async def connect_acp(
|
|
|
549
549
|
dormant and the auto-approve policy ran unconditionally (#382 follow-up).
|
|
550
550
|
|
|
551
551
|
``mcp_servers`` are the task's configured MCP servers (mapped from
|
|
552
|
-
``[[
|
|
552
|
+
``[[sandbox.mcp_servers]]``); they are attached to the ACP session at
|
|
553
553
|
``session/new`` so the agent can reach them. ``None`` attaches none.
|
|
554
554
|
|
|
555
555
|
Retries with exponential backoff on ConnectionError (Daytona SSH storms).
|
|
@@ -15,12 +15,14 @@ BenchFlow-native shape:
|
|
|
15
15
|
└── tests/ # test.sh — the verifier
|
|
16
16
|
|
|
17
17
|
This adapter is consequently a thin *normalizer*: it loads the foreign
|
|
18
|
-
``task.toml`` through
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
``task.toml`` through :func:`~benchflow.task.imports.import_task_config_toml`,
|
|
19
|
+
whose toml import boundary translates Harbor's ``[environment]``-keyed
|
|
20
|
+
sandbox section to the native ``sandbox`` key and handles the ``version`` ->
|
|
21
|
+
``schema_version`` rename before native :class:`TaskConfig` validation. It
|
|
22
|
+
then reads ``instruction.md`` and records the build/solution/test files under
|
|
23
|
+
their native relative paths. Beyond that spelling translation no field
|
|
24
|
+
remapping is needed — Harbor is structurally the native format, which is
|
|
25
|
+
exactly what makes Terminal-Bench backward-compatible through this edge.
|
|
24
26
|
"""
|
|
25
27
|
|
|
26
28
|
from __future__ import annotations
|
|
@@ -243,7 +243,7 @@ def _materialize_mcp_atlas(ctx: _SourceContext, output_dir: Path) -> None:
|
|
|
243
243
|
"MCP_ATLAS_JUDGE_MODEL": "${MCP_ATLAS_JUDGE_MODEL:-qwen/qwen-plus}",
|
|
244
244
|
},
|
|
245
245
|
},
|
|
246
|
-
"
|
|
246
|
+
"sandbox": {
|
|
247
247
|
"cpus": 4,
|
|
248
248
|
"memory_mb": 8192,
|
|
249
249
|
"storage_mb": 10240,
|
|
@@ -49,6 +49,17 @@ _PARAM_MAP = {
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
|
|
52
|
+
def _default_max_tokens(model: str) -> int | None:
|
|
53
|
+
# OpenClaw derives an invalid ~172k default for GPT-5.4; ACP sends a
|
|
54
|
+
# BenchFlow-generated LiteLLM alias in normal runs.
|
|
55
|
+
model = model.removeprefix("openai/")
|
|
56
|
+
if model == "gpt-5.4" or (
|
|
57
|
+
model.startswith("benchflow-") and model.endswith("-gpt-5.4")
|
|
58
|
+
):
|
|
59
|
+
return 128000
|
|
60
|
+
return None
|
|
61
|
+
|
|
62
|
+
|
|
52
63
|
# ── ACP stdio I/O ─────────────────────────────────────────────────────────────
|
|
53
64
|
|
|
54
65
|
|
|
@@ -671,6 +682,7 @@ def main():
|
|
|
671
682
|
|
|
672
683
|
elif method == "session/set_model":
|
|
673
684
|
model = params.get("modelId", "")
|
|
685
|
+
requested_model = model
|
|
674
686
|
# A provider-resolution / config-write failure here must NOT crash the
|
|
675
687
|
# shim: an unhandled exception exits rc=1, which benchflow sees as the
|
|
676
688
|
# ACP transport dying mid-set_model ("Process closed stdout (rc=1)") —
|
|
@@ -726,6 +738,25 @@ def main():
|
|
|
726
738
|
check=True,
|
|
727
739
|
timeout=10,
|
|
728
740
|
)
|
|
741
|
+
max_tokens = _default_max_tokens(requested_model)
|
|
742
|
+
configured_max_tokens = os.environ.get("BENCHFLOW_MODEL_MAX_TOKENS")
|
|
743
|
+
if max_tokens is not None and (
|
|
744
|
+
not configured_max_tokens
|
|
745
|
+
or not configured_max_tokens.isdigit()
|
|
746
|
+
or int(configured_max_tokens) > max_tokens
|
|
747
|
+
):
|
|
748
|
+
subprocess.run(
|
|
749
|
+
[
|
|
750
|
+
_OPENCLAW_BIN,
|
|
751
|
+
"config",
|
|
752
|
+
"set",
|
|
753
|
+
_PARAM_MAP["BENCHFLOW_MODEL_MAX_TOKENS"],
|
|
754
|
+
str(max_tokens),
|
|
755
|
+
],
|
|
756
|
+
capture_output=True,
|
|
757
|
+
check=True,
|
|
758
|
+
timeout=10,
|
|
759
|
+
)
|
|
729
760
|
except Exception as exc:
|
|
730
761
|
diag = (
|
|
731
762
|
f"[openclaw-acp-shim] set_model setup failed, continuing: {exc!r}"
|
|
@@ -53,6 +53,8 @@ import shlex
|
|
|
53
53
|
from dataclasses import dataclass, field
|
|
54
54
|
from pathlib import Path
|
|
55
55
|
|
|
56
|
+
from benchflow._utils.text import describe_exception
|
|
57
|
+
|
|
56
58
|
|
|
57
59
|
def _install_python_script(container_path: str, source: str) -> str:
|
|
58
60
|
"""Shell snippet that ensures python3 and writes `source` to container_path.
|
|
@@ -124,9 +126,7 @@ _JS_AGENT_PATH = (
|
|
|
124
126
|
f"{_BENCHFLOW_BIN_PREFIX}:{_BENCHFLOW_JS_AGENT_PREFIX}/bin:"
|
|
125
127
|
f"{_BENCHFLOW_NODE_PREFIX}/bin:$PATH"
|
|
126
128
|
)
|
|
127
|
-
# Node
|
|
128
|
-
# @latest); keep this pin at or above that floor or the openclaw ACP
|
|
129
|
-
# bootstrap aborts at its runtime version check (BF-10).
|
|
129
|
+
# Node 22.20.0 supports OpenClaw 2026.6.9. Keep their pin pair in sync.
|
|
130
130
|
_NODE_INSTALL = (
|
|
131
131
|
"export DEBIAN_FRONTEND=noninteractive; "
|
|
132
132
|
f"BF_NODE_DIR={_BENCHFLOW_NODE_PREFIX}; "
|
|
@@ -583,7 +583,7 @@ AGENTS: dict[str, AgentConfig] = {
|
|
|
583
583
|
description="OpenClaw agent via ACP shim — model set at runtime via --model",
|
|
584
584
|
skill_paths=["$HOME/.claude/skills", "$WORKSPACE/skills"],
|
|
585
585
|
install_cmd=(
|
|
586
|
-
f"{_js_agent_install('openclaw', 'openclaw')} && "
|
|
586
|
+
f"{_js_agent_install('openclaw', 'openclaw@2026.6.9')} && "
|
|
587
587
|
# Configure: auto-approve tools (no model — set at runtime via ACP set_model)
|
|
588
588
|
"mkdir -p ~/.openclaw && "
|
|
589
589
|
'echo \'{"version":1,"defaults":{"allow_all":true}}\''
|
|
@@ -1469,7 +1469,7 @@ def _load_agent_plugin_packages() -> None:
|
|
|
1469
1469
|
try:
|
|
1470
1470
|
eps = entry_points(group="benchflow.agents")
|
|
1471
1471
|
except Exception as exc: # pragma: no cover - metadata backend quirks
|
|
1472
|
-
FAILED_AGENT_PLUGINS["<entry-point-scan>"] =
|
|
1472
|
+
FAILED_AGENT_PLUGINS["<entry-point-scan>"] = describe_exception(exc)
|
|
1473
1473
|
logging.getLogger(__name__).warning(
|
|
1474
1474
|
"benchflow.agents entry-point scan failed; ALL agent plugins are "
|
|
1475
1475
|
"disabled: %s",
|
|
@@ -1483,7 +1483,7 @@ def _load_agent_plugin_packages() -> None:
|
|
|
1483
1483
|
if callable(loaded):
|
|
1484
1484
|
loaded()
|
|
1485
1485
|
except Exception as exc:
|
|
1486
|
-
FAILED_AGENT_PLUGINS[ep.name] =
|
|
1486
|
+
FAILED_AGENT_PLUGINS[ep.name] = describe_exception(exc)
|
|
1487
1487
|
logging.getLogger(__name__).warning(
|
|
1488
1488
|
"benchflow.agents plugin %r failed to load (some or all of its "
|
|
1489
1489
|
"agents may be unavailable or partially registered): %s",
|
|
@@ -135,13 +135,21 @@ def _fmt_tokens(n: int) -> str:
|
|
|
135
135
|
# while the session counters are unavailable — before the agent session
|
|
136
136
|
# exists and after it is torn down — so sandbox create, agent install, and
|
|
137
137
|
# the verifier read as work, not as a hang.
|
|
138
|
+
#
|
|
139
|
+
# The labels must be monotonic across a run: the row is a progress indicator,
|
|
140
|
+
# so stepping back to an earlier stage reads as the run having restarted.
|
|
141
|
+
# "executed" maps to the agent stage, not the verifier: since verify() marks
|
|
142
|
+
# "verifying" at its own entry, the only stretch that renders under "executed"
|
|
143
|
+
# is the inside of disconnect() (session already dropped, agent process being
|
|
144
|
+
# killed) — labelling that "verifying…" made the row show "verifying…", then
|
|
145
|
+
# "running agent…" (disconnect's "installed"), then "verifying…" again.
|
|
138
146
|
_PHASE_LABELS = {
|
|
139
147
|
"created": "creating sandbox…",
|
|
140
148
|
"setup": "creating sandbox…",
|
|
141
149
|
"started": "installing agent…",
|
|
142
150
|
"installed": "running agent…",
|
|
143
151
|
"connected": "running agent…",
|
|
144
|
-
"executed": "
|
|
152
|
+
"executed": "running agent…",
|
|
145
153
|
"verifying": "verifying…",
|
|
146
154
|
"verified": "cleaning up…",
|
|
147
155
|
"cleaned": "cleaning up…",
|
|
@@ -57,6 +57,7 @@ from benchflow.cli.sandbox import register_sandbox
|
|
|
57
57
|
from benchflow.cli.skills import register_skills
|
|
58
58
|
from benchflow.cli.tasks import register_tasks
|
|
59
59
|
from benchflow.cli.train import register_train
|
|
60
|
+
from benchflow.cli.traj import register_traj
|
|
60
61
|
from benchflow.eval_plan import EvalCreateRequest, EvalPlanError, build_eval_plan
|
|
61
62
|
from benchflow.evaluation import DEFAULT_AGENT, effective_model
|
|
62
63
|
from benchflow.sandbox.providers import providers_phrase
|
|
@@ -1242,6 +1243,7 @@ register_continue(eval_app, alias_app=app)
|
|
|
1242
1243
|
register_skills(app)
|
|
1243
1244
|
register_review(app)
|
|
1244
1245
|
register_tasks(app)
|
|
1246
|
+
register_traj(app)
|
|
1245
1247
|
register_train(app)
|
|
1246
1248
|
register_hub(app)
|
|
1247
1249
|
register_agent(app)
|