benchflow 0.7.7.dev2305__tar.gz → 0.7.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.7.7.dev2305 → benchflow-0.7.8}/CHANGELOG.md +63 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/PKG-INFO +2 -2
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/pyproject.toml +3 -5
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/__init__.py +2 -0
- benchflow-0.7.8/src/benchflow/_utils/config_redaction.py +55 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/evaluation_results.py +6 -0
- benchflow-0.7.8/src/benchflow/_utils/result_paths.py +74 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/scoring.py +71 -3
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/yaml_loader.py +2 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/acp/client.py +5 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/acp/runtime.py +33 -5
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/acp/session.py +26 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agents/codex_config.py +23 -10
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agents/credentials.py +50 -1
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agents/registry.py +2 -2
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/_live_progress.py +3 -6
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/eval_artifacts.py +1 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/main.py +53 -0
- benchflow-0.7.8/src/benchflow/cli/rescore.py +116 -0
- benchflow-0.7.8/src/benchflow/cli/reviewer_options.py +62 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/contracts/planes.py +7 -1
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/eval_artifacts.py +5 -3
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/eval_lift.py +12 -5
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/eval_plan.py +7 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/eval_sharding.py +16 -1
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/eval_worker.py +2 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/evaluation.py +55 -83
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/metrics.py +16 -19
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/models.py +26 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/review/__init__.py +49 -15
- benchflow-0.7.8/src/benchflow/review/automatic.py +226 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/review/config.py +27 -13
- benchflow-0.7.8/src/benchflow/review/evidence.py +735 -0
- benchflow-0.7.8/src/benchflow/review/evidence_runtime.py +49 -0
- benchflow-0.7.8/src/benchflow/review/options.py +83 -0
- benchflow-0.7.8/src/benchflow/review/outcome.py +175 -0
- benchflow-0.7.8/src/benchflow/review/persistence.py +215 -0
- benchflow-0.7.8/src/benchflow/review/preflight.py +53 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/review/prompts.py +18 -3
- benchflow-0.7.8/src/benchflow/review/resume.py +174 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/review/runner.py +142 -67
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/review/wrapper.py +80 -12
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rollout/__init__.py +62 -4
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rollout/_config.py +8 -1
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rollout/_results.py +55 -51
- benchflow-0.7.8/src/benchflow/rollout/_review.py +112 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rollout/task_runtime.py +14 -7
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rollout_planes.py +14 -2
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/runtime.py +11 -0
- benchflow-0.7.8/src/benchflow/sandbox/_egress_denylist_proxy.py +914 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore.py +98 -10
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/egress_denylist.py +52 -9
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/lockdown.py +4 -1
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/protocol.py +10 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sdk.py +3 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/_capture.py +19 -13
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/_llm_capture.py +5 -1
- benchflow-0.7.8/src/benchflow/trajectories/_snapshot.py +39 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/export_prime_sft.py +8 -3
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/export_trl_sft.py +1 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/results.py +17 -1
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/types.py +3 -2
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/boot.js +1 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/detail.js +78 -4
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/template.html +14 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/theme.css +30 -0
- benchflow-0.7.8/src/benchflow/trajectories/viewer/assets/theme.js +103 -0
- benchflow-0.7.8/src/benchflow/trajectories/viewer/assets/vendor/LICENSE.highlight.js +29 -0
- benchflow-0.7.8/src/benchflow/trajectories/viewer/assets/vendor/highlight.min.js +1213 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/viewer.css +22 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/models.py +48 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/payload.py +127 -1
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/render.py +10 -1
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/sources.py +9 -0
- benchflow-0.7.8/tests/agents/test_codex_config.py +117 -0
- benchflow-0.7.8/tests/test_acp_buffered_timeout.py +122 -0
- benchflow-0.7.8/tests/test_agent_egress_firewall.py +80 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_agentcore_parallel.py +155 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_agentcore_sandbox.py +101 -0
- benchflow-0.7.8/tests/test_automatic_review_scoring.py +299 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_cli_live_progress.py +3 -1
- benchflow-0.7.8/tests/test_egress_connect_authority.py +417 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_egress_denylist.py +14 -4
- benchflow-0.7.8/tests/test_egress_denylist_integration.py +316 -0
- benchflow-0.7.8/tests/test_egress_dynamic_certs.py +115 -0
- benchflow-0.7.8/tests/test_egress_model_gateway.py +146 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_hosted_search_policy.py +86 -8
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_internet_policy.py +2 -6
- benchflow-0.7.8/tests/test_redacted_snapshot.py +222 -0
- benchflow-0.7.8/tests/test_review_automatic.py +380 -0
- benchflow-0.7.8/tests/test_review_evidence.py +591 -0
- benchflow-0.7.8/tests/test_review_evidence_runtime.py +107 -0
- benchflow-0.7.8/tests/test_review_lifecycle.py +126 -0
- benchflow-0.7.8/tests/test_review_resume.py +393 -0
- benchflow-0.7.8/tests/test_review_runtime_automatic.py +300 -0
- benchflow-0.7.8/tests/test_review_snapshot.py +102 -0
- benchflow-0.7.8/tests/test_reviewer_options.py +425 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_rollout_planes_contract.py +19 -3
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_task_runtime_primitive.py +38 -0
- benchflow-0.7.8/tests/test_tool_call_raw_io.py +175 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/trajectories/test_redaction.py +13 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/trajectories/test_viewer_acp_renderer.py +5 -1
- benchflow-0.7.8/tests/trajectories/test_viewer_rubric.py +227 -0
- benchflow-0.7.8/tests/trajectories/test_viewer_theme.py +59 -0
- benchflow-0.7.7.dev2305/src/benchflow/sandbox/_egress_denylist_proxy.py +0 -494
- benchflow-0.7.7.dev2305/tests/agents/test_codex_config.py +0 -63
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/.gitignore +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/LICENSE +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/README.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_paths.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_run.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_types.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/live_activity.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/acp/container_transport.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/acp/timeout_cleanup.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/acp/watchdog.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agents/install.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/branch.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/_failure_evidence.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/_shared.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/_traj_tui.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/_traj_upload_ui.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/cli/traj.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/continue_run/orchestrator.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/monitor.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/providers/litellm_gemini_passthrough_patch.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/providers/litellm_logging.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/providers/litellm_runtime.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/providers/runtime.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/publish/_progress.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/publish/azure_blob.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/publish/broker.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/publish/redact.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/publish/traj_capture.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/publish/traj_report.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/py.typed +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/review/scoring.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rollout/_deadline.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rollout/_setup.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/_compose.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/_compose_files/docker-compose-net-admin.yaml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/apple_container.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/daytona.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/daytona_dind.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/daytona_strategies.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/docker.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/process/_base.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/process/agentcore.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/process/apple.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/process/daytona.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/process/docker.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/providers.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/setup.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/scenes.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/skills.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/config.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/document.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/env.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/export.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/package.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/runtime_capabilities.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/task.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/sessions.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/__main__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/catalog.js +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/fonts/OFL-google-sans-code.txt +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-400-latin.woff2 +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-600-latin.woff2 +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/viewer.js +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/catalog.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/legacy.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/server.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/agents/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/conformance/README.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/conftest.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/environment/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/_consistency.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/check_results.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/run.sh +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/run_suite.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/scenarios.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_acp.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_acp_timeout_evidence.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_adapters.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_agent_cli.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_agent_registry.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_agent_router.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_agent_setup.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_agent_spec.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_branch.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_cli_misc.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_codex_review.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_config_override.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_config_redaction.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_console_progress.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_daytona_download.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_diagnostics.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_docs_examples.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_env_registry.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_env_setup.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_eval_lift.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_hosted_env.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_integration_suite.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_job.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_learner_skills.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_learner_store.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_litellm_config.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_litellm_gemini_passthrough_patch.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_litellm_logging.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_litellm_reasoning_passthrough.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_litellm_runtime.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_live_llm_trajectory.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_llm_judge.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_loop_summary.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_metrics.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_network_denylist_config.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_oracle.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_paths_safe.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_process.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_providers.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_publish_azure_blob.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_publish_huggingface.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_reexport.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_registry_invariants.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_release_version.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_release_workflow_wiring.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_review_rubric.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_review_runtime.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_reward_node.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_reward_range.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_rewards.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_rollout_hard_deadline.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_rollout_upload.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_rubric_config.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_runtime.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_runtime_capabilities.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_sandbox.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_scene.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_scoring.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_skill_eval.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_skill_policy.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_skills.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_smoke.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_source_adapters.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_task_config.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_task_digest.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_task_document.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_task_download.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_task_export.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_task_output_format.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_task_package.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_tasks.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_train_cli.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_traj_report.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_traj_staging_phases.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_traj_tui.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_traj_upload_cli.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_traj_upload_skill.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_traj_workspace.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_trajectory_upload_layout.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_trajectory_upload_service.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_trial_litellm_runtime.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_trl_integration.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_usage_required.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_user.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_verifier_document.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_verifier_output.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_verifier_wedge_retry.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_verify.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_viewer_confirm.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/test_yaml_config.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/trajectories/test_tree.py +0 -0
- {benchflow-0.7.7.dev2305 → benchflow-0.7.8}/tests/trajectories/test_viewer_browser.py +0 -0
|
@@ -2,6 +2,46 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## 0.7.8 — 2026-09-14
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **Automatic rubric review and scoring.** Tasks with a weighted `rubric.json`
|
|
10
|
+
run a separate reviewer after verification. Passing requires all required
|
|
11
|
+
tests and rubric blockers to pass; the final reward is the weighted quality
|
|
12
|
+
score. Solver evidence and reviewer runs are retained, and `bench eval score`
|
|
13
|
+
can retry an interrupted review without rerunning the solver. (#1126)
|
|
14
|
+
- **Rubric results in the trajectory viewer.** The Rubric tab displays criterion
|
|
15
|
+
judgments, explanations, blocker outcomes, and weighted scores. (#1102)
|
|
16
|
+
- **Viewer themes and syntax highlighting.** Trajectory pages support a dark
|
|
17
|
+
theme and highlighted tool content. (#1098)
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- **Automatic rubric review works on Daytona when the task workspace is
|
|
22
|
+
`/root`.** Daytona's daemon keeps its session tree in `/root/.daytona` (the
|
|
23
|
+
entrypoint's FIFOs plus every session command's script, log and exit code),
|
|
24
|
+
and evidence capture aborted on the first FIFO, so the rollout ended in a
|
|
25
|
+
scoring error with `rewards: null` although its verifier had run. Capture now
|
|
26
|
+
leaves that tree out as `sandbox_runtime` and records any other socket, FIFO
|
|
27
|
+
or device node as a `special_file` exclusion instead of aborting. Capture
|
|
28
|
+
limits, escaping symlinks and concurrent changes still fail closed. (#1128)
|
|
29
|
+
- **Automatic review supports shell-only task images.** Required Python
|
|
30
|
+
capture tools are provisioned before the solver starts, so a successful
|
|
31
|
+
shell task does not lose its review to a missing interpreter. (#1127)
|
|
32
|
+
- **Denylist enforcement closes CONNECT and HTTP Host bypasses.** TLS identity
|
|
33
|
+
and HTTP authority are checked against the allowed destination on Docker and
|
|
34
|
+
Daytona. (#1122)
|
|
35
|
+
- **IPv6 egress rules are installed when procfs reports zero-size files.**
|
|
36
|
+
Sandbox firewall setup reads the kernel data instead of relying on the
|
|
37
|
+
reported file size. (#1124)
|
|
38
|
+
- **Buffered ACP prompts respect their deadlines.** Timeout handling no longer
|
|
39
|
+
repeats captured provider history. (#1125)
|
|
40
|
+
- **Tool captures retain their content and raw input/output.** ACP trajectories
|
|
41
|
+
preserve observations needed for later review. (#1100)
|
|
42
|
+
|
|
43
|
+
## 0.7.7 — 2026-09-09
|
|
44
|
+
|
|
5
45
|
### Added
|
|
6
46
|
- **`network_mode: denylist` blocks a list of URLs and hosts for the agent on
|
|
7
47
|
Docker and Daytona.** The task keeps internet access; `blocked_urls` and
|
|
@@ -10,6 +50,29 @@
|
|
|
10
50
|
and every refused request lands in `trajectory/egress_denylist.jsonl`.
|
|
11
51
|
Other backends refuse the mode at preflight. (#1113)
|
|
12
52
|
|
|
53
|
+
### Fixed
|
|
54
|
+
|
|
55
|
+
- **Denylist egress no longer cuts the agent off from its own model.** The
|
|
56
|
+
controller registers the running LiteLLM gateway's exact
|
|
57
|
+
`127.0.0.1:<port>` endpoint with the proxy, so clients that ignore
|
|
58
|
+
`NO_PROXY` (Gemini's Undici `ProxyAgent` tunnels even plain HTTP) still
|
|
59
|
+
reach it; the exception comes from the live gateway, never task metadata or
|
|
60
|
+
agent-supplied environment, and every other private destination stays
|
|
61
|
+
blocked. Reconnects re-register the current port. (#1118)
|
|
62
|
+
- **The denylist is a shared sandbox policy, not a per-harness one.** Every
|
|
63
|
+
supported ACP harness — custom registrations included — gets the same proxy,
|
|
64
|
+
certificates, and UID firewall on primary connections and later roles alike,
|
|
65
|
+
independent of harness name, model id, or provider. (#1118)
|
|
66
|
+
- **`codex-acp` sessions are configured through native ACP settings.** Hosted
|
|
67
|
+
search is switched off via `CODEX_CONFIG.web_search` (the CLI ignores `-c`
|
|
68
|
+
overrides), and Codex runs in `agent-full-access` session mode when
|
|
69
|
+
BenchFlow has already selected a non-root sandbox user, so its bubblewrap
|
|
70
|
+
sandbox is not nested inside Docker or Daytona — BenchFlow's own user,
|
|
71
|
+
filesystem restrictions, proxy, and firewall still apply. (#1118)
|
|
72
|
+
- **`cryptography>=44` is a core dependency.** Denylist egress mints TLS
|
|
73
|
+
certificates on both Docker and Daytona, so the pin moved out of the
|
|
74
|
+
`sandbox-agentcore` extra. (#1118)
|
|
75
|
+
|
|
13
76
|
## 0.7.6 — 2026-09-04
|
|
14
77
|
|
|
15
78
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: benchflow
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.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: cryptography>=44
|
|
23
24
|
Requires-Dist: google-cloud-aiplatform<2.0,>=1.133.0
|
|
24
25
|
Requires-Dist: httpx>=0.27.0
|
|
25
26
|
Requires-Dist: litellm[proxy]==1.91.0
|
|
@@ -58,7 +59,6 @@ Requires-Dist: openai>=1.40; extra == 'judge'
|
|
|
58
59
|
Provides-Extra: sandbox-agentcore
|
|
59
60
|
Requires-Dist: bedrock-agentcore>=1.18; extra == 'sandbox-agentcore'
|
|
60
61
|
Requires-Dist: boto3>=1.43.31; extra == 'sandbox-agentcore'
|
|
61
|
-
Requires-Dist: cryptography>=44; extra == 'sandbox-agentcore'
|
|
62
62
|
Requires-Dist: pathspec>=0.12; extra == 'sandbox-agentcore'
|
|
63
63
|
Provides-Extra: sandbox-daytona
|
|
64
64
|
Requires-Dist: daytona>=0.184.0; extra == 'sandbox-daytona'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "benchflow"
|
|
3
|
-
version = "0.7.
|
|
3
|
+
version = "0.7.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"
|
|
@@ -12,6 +12,8 @@ dependencies = [
|
|
|
12
12
|
"pydantic>=2.7",
|
|
13
13
|
"pyyaml>=6.0",
|
|
14
14
|
"rich>=13.0",
|
|
15
|
+
# Denylist egress mints TLS certificates on both Docker and Daytona.
|
|
16
|
+
"cryptography>=44",
|
|
15
17
|
# Dataset registry bench_version checks (PEP 440 specifier sets).
|
|
16
18
|
"packaging>=24",
|
|
17
19
|
"litellm[proxy]==1.91.0",
|
|
@@ -100,10 +102,6 @@ sandbox-agentcore = [
|
|
|
100
102
|
# (InvokeAgentRuntimeCommand). The boto3 floor is the first release that
|
|
101
103
|
# models the bedrock-agentcore/-control services.
|
|
102
104
|
"bedrock-agentcore>=1.18",
|
|
103
|
-
# Used directly by the sealed AgentCore transport (RSA-OAEP key wrap +
|
|
104
|
-
# AES-CTR/HMAC). It otherwise arrives only transitively via
|
|
105
|
-
# litellm[proxy]; declaring it here keeps the dependency honest.
|
|
106
|
-
"cryptography>=44",
|
|
107
105
|
"boto3>=1.43.31",
|
|
108
106
|
# Docker-compatible build-context filtering without requiring a daemon.
|
|
109
107
|
"pathspec>=0.12",
|
|
@@ -62,6 +62,7 @@ from benchflow.monitor import (
|
|
|
62
62
|
)
|
|
63
63
|
from benchflow.review import (
|
|
64
64
|
PublicationDecision,
|
|
65
|
+
ReviewerConfig,
|
|
65
66
|
ReviewReport,
|
|
66
67
|
ReviewRubricError,
|
|
67
68
|
ReviewScoring,
|
|
@@ -172,6 +173,7 @@ __all__ = [
|
|
|
172
173
|
"load_rubric_json",
|
|
173
174
|
"load_rubric_toml",
|
|
174
175
|
"ReviewReport",
|
|
176
|
+
"ReviewerConfig",
|
|
175
177
|
"PublicationDecision",
|
|
176
178
|
"ReviewRubric",
|
|
177
179
|
"ReviewRubricCriterion",
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""Dependency-neutral redaction policy for persisted execution configuration.
|
|
2
|
+
|
|
3
|
+
Both solver and reviewer artifacts keep nonsecret execution settings so that
|
|
4
|
+
scoring-only resume preserves the inference protocol without persisting auth.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from benchflow.trajectories.types import redact_trajectory_text
|
|
10
|
+
|
|
11
|
+
# Substrings that flag an env var name as secret-bearing for ``config.json``
|
|
12
|
+
# redaction. Matching is case-insensitive (callers ``.upper()`` the key first)
|
|
13
|
+
# and uses substring containment so derived names like ``MY_AUTH_HEADER``,
|
|
14
|
+
# ``SESSION_COOKIE``, or ``GH_TOKEN`` are caught. This stays a denylist (rather
|
|
15
|
+
# than an allowlist of safe keys) because agent env varies per agent — the
|
|
16
|
+
# union of safe keys is not knowable here — but the list now covers the common
|
|
17
|
+
# auth-bearing names that issue #410 called out (COOKIE, AUTHORIZATION, AUTH,
|
|
18
|
+
# BEARER, SESSION) on top of the original KEY/TOKEN/SECRET/PASSWORD/CREDENTIALS.
|
|
19
|
+
_SECRET_ENV_SUBSTRINGS: tuple[str, ...] = (
|
|
20
|
+
"KEY",
|
|
21
|
+
"TOKEN",
|
|
22
|
+
"SECRET",
|
|
23
|
+
"PASSWORD",
|
|
24
|
+
"CREDENTIALS",
|
|
25
|
+
"COOKIE",
|
|
26
|
+
"AUTHORIZATION",
|
|
27
|
+
"AUTH",
|
|
28
|
+
"BEARER",
|
|
29
|
+
"SESSION",
|
|
30
|
+
)
|
|
31
|
+
_SECRET_URL_PATH_MARKERS: tuple[str, ...] = ("/__benchflow/",)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _is_secret_env_key(name: str) -> bool:
|
|
35
|
+
"""Return True if *name* looks like it carries a secret value.
|
|
36
|
+
|
|
37
|
+
Case-insensitive substring match against :data:`_SECRET_ENV_SUBSTRINGS`.
|
|
38
|
+
Used by :func:`_write_config` to drop secret-bearing entries before
|
|
39
|
+
persisting ``agent_env`` to the rollout's ``config.json``.
|
|
40
|
+
"""
|
|
41
|
+
upper = name.upper()
|
|
42
|
+
return any(s in upper for s in _SECRET_ENV_SUBSTRINGS)
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _is_secret_env_value(name: str, value: str) -> bool:
|
|
46
|
+
"""Return True if a normally public env value embeds a runtime secret."""
|
|
47
|
+
# Inline harness JSON/TOML can contain credentials under a harmless env
|
|
48
|
+
# name. Drop the whole value; redacted placeholders cannot safely replay.
|
|
49
|
+
return any(marker in value for marker in _SECRET_URL_PATH_MARKERS) or (
|
|
50
|
+
redact_trajectory_text(value) != value
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _should_record_env_entry(name: str, value: str) -> bool:
|
|
55
|
+
return not _is_secret_env_key(name) and not _is_secret_env_value(name, value)
|
|
@@ -75,6 +75,12 @@ def rollout_result_payload(
|
|
|
75
75
|
"task_name": result.task_name,
|
|
76
76
|
"rollout_name": result.rollout_name,
|
|
77
77
|
"rewards": result.rewards,
|
|
78
|
+
**({"scoring": result.scoring.to_dict()} if result.scoring is not None else {}),
|
|
79
|
+
**(
|
|
80
|
+
{"purpose": result.purpose, "parent_rollout": result.parent_rollout}
|
|
81
|
+
if result.purpose != "task"
|
|
82
|
+
else {}
|
|
83
|
+
),
|
|
78
84
|
"error": result.error,
|
|
79
85
|
"error_category": result.error_category,
|
|
80
86
|
"verifier_error": result.verifier_error,
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"""Discover task results without counting nested review/evidence runs."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import logging
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from typing import Any
|
|
9
|
+
|
|
10
|
+
logger = logging.getLogger(__name__)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def iter_task_result_paths(root: Path) -> list[Path]:
|
|
14
|
+
"""Return result files at trial boundaries, excluding reviewer children.
|
|
15
|
+
|
|
16
|
+
A result below a trial's result or solver checkpoint is an artifact of that
|
|
17
|
+
parent, not an additional trial. In particular, captured files must remain
|
|
18
|
+
excluded while the parent awaits review and has no final result yet. The
|
|
19
|
+
explicit role also covers orphaned reviewer runs. Corrupt task files are
|
|
20
|
+
left to callers' existing error handling.
|
|
21
|
+
"""
|
|
22
|
+
paths = sorted(root.rglob("result.json"))
|
|
23
|
+
trial_dirs = {path.parent for path in paths}
|
|
24
|
+
trial_dirs.update(path.parent for path in root.rglob("solver.json"))
|
|
25
|
+
selected: list[Path] = []
|
|
26
|
+
for path in paths:
|
|
27
|
+
if any(parent in trial_dirs for parent in path.parent.parents):
|
|
28
|
+
continue
|
|
29
|
+
try:
|
|
30
|
+
result = json.loads(path.read_text())
|
|
31
|
+
except (OSError, ValueError):
|
|
32
|
+
result = None
|
|
33
|
+
if isinstance(result, dict) and result.get("purpose") == "reviewer":
|
|
34
|
+
continue
|
|
35
|
+
selected.append(path)
|
|
36
|
+
return selected
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def load_task_results(root: Path) -> dict[str, dict[str, Any]]:
|
|
40
|
+
"""Load one durable result per task, preferring scored then newer trials.
|
|
41
|
+
|
|
42
|
+
Evaluation resume and scoring-only summary refresh must select identical
|
|
43
|
+
records. Malformed files remain logged and skipped as in evaluation resume;
|
|
44
|
+
a malformed reward envelope remains visible as an errored trial.
|
|
45
|
+
"""
|
|
46
|
+
best: dict[str, tuple[tuple[bool, float, str], dict[str, Any]]] = {}
|
|
47
|
+
for path in iter_task_result_paths(root):
|
|
48
|
+
try:
|
|
49
|
+
result = json.loads(path.read_text())
|
|
50
|
+
task = result["task_name"]
|
|
51
|
+
rewards = result.get("rewards")
|
|
52
|
+
if (
|
|
53
|
+
rewards is None
|
|
54
|
+
and not result.get("verifier_error")
|
|
55
|
+
and result.get("scoring") is None
|
|
56
|
+
):
|
|
57
|
+
continue
|
|
58
|
+
if rewards is not None and not isinstance(rewards, dict):
|
|
59
|
+
logger.warning(
|
|
60
|
+
"Malformed rewards field in %s for task %r: "
|
|
61
|
+
"expected dict or null, got %s %r — "
|
|
62
|
+
"treating as no reward (task will count as errored)",
|
|
63
|
+
path,
|
|
64
|
+
task,
|
|
65
|
+
type(rewards).__name__,
|
|
66
|
+
rewards,
|
|
67
|
+
)
|
|
68
|
+
rank = (rewards is not None, path.stat().st_mtime, str(path))
|
|
69
|
+
previous = best.get(task)
|
|
70
|
+
if previous is None or rank >= previous[0]:
|
|
71
|
+
best[task] = (rank, result)
|
|
72
|
+
except (OSError, ValueError, TypeError, KeyError) as exc:
|
|
73
|
+
logger.debug("Skipping corrupt result file %s: %s", path, exc)
|
|
74
|
+
return {task: result for task, (_, result) in best.items()}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Pure scoring and classification helpers — no external dependencies."""
|
|
2
2
|
|
|
3
3
|
import math
|
|
4
|
+
from collections import Counter
|
|
4
5
|
from collections.abc import Iterable, Mapping
|
|
5
6
|
from typing import Any, Literal
|
|
6
7
|
|
|
@@ -110,6 +111,18 @@ ResultOutcome = Literal["passed", "failed", "errored", "verifier_errored", "unsc
|
|
|
110
111
|
|
|
111
112
|
def extract_reward(result: Mapping[str, Any]) -> float | None:
|
|
112
113
|
"""Extract the reward value from a result dict, or None if absent."""
|
|
114
|
+
if result.get("scoring") is not None:
|
|
115
|
+
from benchflow.review.outcome import scoring_from_result
|
|
116
|
+
|
|
117
|
+
try:
|
|
118
|
+
scoring = scoring_from_result(result)
|
|
119
|
+
except ValueError:
|
|
120
|
+
return None
|
|
121
|
+
if scoring is None or scoring.status != "complete":
|
|
122
|
+
return None
|
|
123
|
+
rewards = scoring.numeric_rewards()
|
|
124
|
+
assert rewards is not None
|
|
125
|
+
return rewards["reward"]
|
|
113
126
|
rewards = result.get("rewards")
|
|
114
127
|
if not isinstance(rewards, dict):
|
|
115
128
|
return None
|
|
@@ -283,10 +296,20 @@ def classify_result(
|
|
|
283
296
|
def classify_score_outcome(result: Mapping[str, Any]) -> ScoreOutcome:
|
|
284
297
|
"""Classify a persisted result for score/invariant accounting.
|
|
285
298
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
299
|
+
Integrated review uses its explicit gate verdict. Legacy results keep
|
|
300
|
+
reward/agent-error precedence. Malformed or incomplete scoring is never a
|
|
301
|
+
capability failure or an accidental pass from a stale reward.
|
|
289
302
|
"""
|
|
303
|
+
if result.get("scoring") is not None:
|
|
304
|
+
from benchflow.review.outcome import scoring_from_result
|
|
305
|
+
|
|
306
|
+
try:
|
|
307
|
+
scoring = scoring_from_result(result)
|
|
308
|
+
except ValueError:
|
|
309
|
+
scoring = None
|
|
310
|
+
if scoring is not None and scoring.status == "complete":
|
|
311
|
+
return "passed" if scoring.passed else "failed"
|
|
312
|
+
return "errored" if result.get("error") else "verifier_errored"
|
|
290
313
|
return classify_result(
|
|
291
314
|
reward=extract_reward(result),
|
|
292
315
|
error=result.get("error"),
|
|
@@ -309,6 +332,8 @@ def classify_audit_outcome(result: Mapping[str, Any]) -> ResultOutcome:
|
|
|
309
332
|
"""
|
|
310
333
|
if result.get("verifier_error"):
|
|
311
334
|
return "verifier_errored"
|
|
335
|
+
if result.get("scoring") is not None:
|
|
336
|
+
return classify_score_outcome(result)
|
|
312
337
|
reward = extract_reward(result)
|
|
313
338
|
if reward == 1.0:
|
|
314
339
|
return "passed"
|
|
@@ -386,3 +411,46 @@ def pass_rate_excl_errors(*, passed: int, failed: int) -> float:
|
|
|
386
411
|
"""Pass rate excluding errored tasks."""
|
|
387
412
|
completed = passed + failed
|
|
388
413
|
return passed / completed if completed > 0 else 0.0
|
|
414
|
+
|
|
415
|
+
|
|
416
|
+
def score_summary_fields(results: Iterable[Mapping[str, Any]]) -> dict[str, Any]:
|
|
417
|
+
"""Scoring fields shared by initial evaluation and scoring-only resume.
|
|
418
|
+
|
|
419
|
+
Callers retain run configuration, solver usage, timing, and provenance; only
|
|
420
|
+
fields derived from the current terminal scoring evidence are rebuilt.
|
|
421
|
+
"""
|
|
422
|
+
rows = list(results)
|
|
423
|
+
counts = count_audit_outcomes(rows)
|
|
424
|
+
error_categories: Counter[str] = Counter()
|
|
425
|
+
verifier_categories: Counter[str] = Counter()
|
|
426
|
+
for row in rows:
|
|
427
|
+
category = row.get("error_category") or classify_error(row.get("error"))
|
|
428
|
+
if category:
|
|
429
|
+
error_categories[category] += 1
|
|
430
|
+
verifier_category = row.get(
|
|
431
|
+
"verifier_error_category"
|
|
432
|
+
) or classify_verifier_error(row.get("verifier_error"))
|
|
433
|
+
if verifier_category:
|
|
434
|
+
verifier_categories[verifier_category] += 1
|
|
435
|
+
ratio = pass_rate(passed=counts["passed"], total=len(rows))
|
|
436
|
+
scored_ratio = pass_rate_excl_errors(
|
|
437
|
+
passed=counts["passed"], failed=counts["failed"]
|
|
438
|
+
)
|
|
439
|
+
return {
|
|
440
|
+
"total": len(rows),
|
|
441
|
+
"passed": counts["passed"],
|
|
442
|
+
"failed": counts["failed"],
|
|
443
|
+
"errored": counts["errored"],
|
|
444
|
+
"verifier_errored": counts["verifier_errored"],
|
|
445
|
+
"pass": counts["passed"],
|
|
446
|
+
"fail": counts["failed"],
|
|
447
|
+
"error": counts["errored"],
|
|
448
|
+
"idle_timeout": error_categories.get(IDLE_TIMEOUT, 0),
|
|
449
|
+
"error_categories": dict(error_categories) or None,
|
|
450
|
+
"verifier_error_categories": dict(verifier_categories) or None,
|
|
451
|
+
"score": f"{ratio:.1%}",
|
|
452
|
+
"score_ratio": ratio,
|
|
453
|
+
"score_excl_errors": f"{scored_ratio:.1%}",
|
|
454
|
+
"score_excl_errors_ratio": scored_ratio,
|
|
455
|
+
"mean_reward": mean_scored_reward(rows),
|
|
456
|
+
}
|
|
@@ -44,6 +44,7 @@ from typing import Any
|
|
|
44
44
|
import yaml
|
|
45
45
|
|
|
46
46
|
from benchflow._types import Role, Scene, Turn
|
|
47
|
+
from benchflow.review.options import ReviewerConfig
|
|
47
48
|
from benchflow.rollout import RolloutConfig
|
|
48
49
|
from benchflow.skill_policy import SKILL_MODE_NO_SKILL
|
|
49
50
|
from benchflow.usage_tracking import UsageTrackingConfig
|
|
@@ -109,6 +110,7 @@ def rollout_config_from_dict(
|
|
|
109
110
|
|
|
110
111
|
return RolloutConfig(
|
|
111
112
|
task_path=tp,
|
|
113
|
+
reviewer=ReviewerConfig.coerce(raw.get("reviewer")),
|
|
112
114
|
scenes=scenes,
|
|
113
115
|
environment=raw.get("environment", "docker"),
|
|
114
116
|
sandbox_user=raw.get("sandbox_user", "agent"),
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"""ACP client — benchflow acts as the client, agents are ACP servers."""
|
|
2
2
|
|
|
3
|
+
import asyncio
|
|
3
4
|
import logging
|
|
4
5
|
from collections.abc import Awaitable, Callable
|
|
5
6
|
from typing import Any
|
|
@@ -137,6 +138,10 @@ class ACPClient:
|
|
|
137
138
|
async def _read_until_response(self, request_id: int) -> dict[str, Any]:
|
|
138
139
|
"""Read messages, handling notifications, until we get the response we want."""
|
|
139
140
|
while True:
|
|
141
|
+
# Buffered transports can receive inline, and session capture is
|
|
142
|
+
# synchronous. Give cancellation and watchdog tasks a turn even
|
|
143
|
+
# while the peer's notification backlog remains non-empty.
|
|
144
|
+
await asyncio.sleep(0)
|
|
140
145
|
msg = await self._transport.receive()
|
|
141
146
|
logger.debug(
|
|
142
147
|
f"ACPClient recv: id={msg.get('id')} method={msg.get('method', '')} "
|
|
@@ -30,7 +30,7 @@ from benchflow.acp.timeout_cleanup import (
|
|
|
30
30
|
cancel_and_drain_prompt_task,
|
|
31
31
|
cancel_prompt_after_timeout,
|
|
32
32
|
)
|
|
33
|
-
from benchflow.acp.types import McpServerSpec
|
|
33
|
+
from benchflow.acp.types import McpServerSpec, PromptResult
|
|
34
34
|
from benchflow.acp.watchdog import IdleWatchdog
|
|
35
35
|
from benchflow.agents.codex_config import apply_codex_launch_config
|
|
36
36
|
from benchflow.agents.protocol import ACPSessionAdapter
|
|
@@ -621,6 +621,7 @@ async def connect_acp(
|
|
|
621
621
|
agent_env,
|
|
622
622
|
model=model,
|
|
623
623
|
reasoning_effort=reasoning_effort,
|
|
624
|
+
sandboxed=bool(sandbox_user),
|
|
624
625
|
)
|
|
625
626
|
agent_env = await _prepare_openhands_direct_execution(
|
|
626
627
|
env,
|
|
@@ -799,6 +800,28 @@ def _agent_prompt_timeout_error(session, timeout: int) -> AgentPromptTimeoutErro
|
|
|
799
800
|
)
|
|
800
801
|
|
|
801
802
|
|
|
803
|
+
async def _timed_prompt(
|
|
804
|
+
acp_client: ACPClient, prompt: str
|
|
805
|
+
) -> tuple[PromptResult, float]:
|
|
806
|
+
"""Record completion in the prompt task, before a delayed observer runs."""
|
|
807
|
+
result = await acp_client.prompt(prompt)
|
|
808
|
+
return result, asyncio.get_running_loop().time()
|
|
809
|
+
|
|
810
|
+
|
|
811
|
+
def _completed_prompt_result(
|
|
812
|
+
prompt_task: asyncio.Task[tuple[PromptResult, float]],
|
|
813
|
+
session,
|
|
814
|
+
*,
|
|
815
|
+
deadline: float,
|
|
816
|
+
timeout: int,
|
|
817
|
+
) -> PromptResult:
|
|
818
|
+
"""A delayed watchdog must distinguish late completion from late observation."""
|
|
819
|
+
result, completed_at = prompt_task.result()
|
|
820
|
+
if completed_at > deadline:
|
|
821
|
+
raise _agent_prompt_timeout_error(session, timeout)
|
|
822
|
+
return result
|
|
823
|
+
|
|
824
|
+
|
|
802
825
|
async def _prompt_with_wall_clock_budget(
|
|
803
826
|
acp_client: ACPClient,
|
|
804
827
|
session,
|
|
@@ -806,12 +829,15 @@ async def _prompt_with_wall_clock_budget(
|
|
|
806
829
|
timeout: int,
|
|
807
830
|
):
|
|
808
831
|
"""Run a prompt until either it finishes or BenchFlow's budget expires."""
|
|
809
|
-
|
|
832
|
+
deadline = asyncio.get_running_loop().time() + timeout
|
|
833
|
+
prompt_task = asyncio.create_task(_timed_prompt(acp_client, prompt))
|
|
810
834
|
cleanup_attempted = False
|
|
811
835
|
try:
|
|
812
836
|
done, _pending = await asyncio.wait({prompt_task}, timeout=timeout)
|
|
813
837
|
if done:
|
|
814
|
-
return
|
|
838
|
+
return _completed_prompt_result(
|
|
839
|
+
prompt_task, session, deadline=deadline, timeout=timeout
|
|
840
|
+
)
|
|
815
841
|
cleanup_attempted = True
|
|
816
842
|
if await cancel_prompt_after_timeout(acp_client, prompt_task):
|
|
817
843
|
raise _agent_prompt_timeout_error(session, timeout)
|
|
@@ -830,7 +856,7 @@ async def _prompt_with_idle_watchdog(
|
|
|
830
856
|
idle_timeout: int,
|
|
831
857
|
):
|
|
832
858
|
"""Run one ACP prompt with wall-clock and idle-watchdog budgets."""
|
|
833
|
-
prompt_task = asyncio.create_task(acp_client
|
|
859
|
+
prompt_task = asyncio.create_task(_timed_prompt(acp_client, prompt))
|
|
834
860
|
cleanup_attempted = False
|
|
835
861
|
loop = asyncio.get_running_loop()
|
|
836
862
|
watchdog = IdleWatchdog.start(
|
|
@@ -863,7 +889,9 @@ async def _prompt_with_idle_watchdog(
|
|
|
863
889
|
f"Agent prompt exceeded wall-clock budget {timeout}s"
|
|
864
890
|
)
|
|
865
891
|
|
|
866
|
-
return
|
|
892
|
+
return _completed_prompt_result(
|
|
893
|
+
prompt_task, session, deadline=watchdog.deadline, timeout=timeout
|
|
894
|
+
)
|
|
867
895
|
finally:
|
|
868
896
|
# Always cancel + drain the prompt task on exit, including the
|
|
869
897
|
# external-cancellation path (CancelledError from sleep). Bound the
|
|
@@ -162,6 +162,10 @@ class ToolCallRecord:
|
|
|
162
162
|
self.kind = kind
|
|
163
163
|
self.status = ToolCallStatus.PENDING
|
|
164
164
|
self.content: list[dict] = []
|
|
165
|
+
# ACP ``rawInput`` / ``rawOutput``: the agent's own view of the call.
|
|
166
|
+
# codex-acp puts the command and its output here and nowhere else.
|
|
167
|
+
self.raw_input: object | None = None
|
|
168
|
+
self.raw_output: object | None = None
|
|
165
169
|
self.started_at = datetime.now()
|
|
166
170
|
self.finished_at: datetime | None = None
|
|
167
171
|
|
|
@@ -178,6 +182,13 @@ class ToolCallRecord:
|
|
|
178
182
|
):
|
|
179
183
|
self.finished_at = datetime.now()
|
|
180
184
|
|
|
185
|
+
def absorb_raw_io(self, update: dict) -> None:
|
|
186
|
+
"""Keep the latest ``rawInput`` / ``rawOutput`` an update carries."""
|
|
187
|
+
if update.get("rawInput") is not None:
|
|
188
|
+
self.raw_input = update["rawInput"]
|
|
189
|
+
if update.get("rawOutput") is not None:
|
|
190
|
+
self.raw_output = update["rawOutput"]
|
|
191
|
+
|
|
181
192
|
|
|
182
193
|
class ACPSession:
|
|
183
194
|
"""Tracks mutable state for one ACP session.
|
|
@@ -417,6 +428,20 @@ class ACPSession:
|
|
|
417
428
|
update.get("kind", "other"), update.get("title", "")
|
|
418
429
|
),
|
|
419
430
|
)
|
|
431
|
+
# The opening notification may already carry content (codex-acp
|
|
432
|
+
# sends file-change diffs this way) and raw I/O.
|
|
433
|
+
initial_content = update.get("content")
|
|
434
|
+
if isinstance(initial_content, list) and initial_content:
|
|
435
|
+
record.content.extend(initial_content)
|
|
436
|
+
record.absorb_raw_io(update)
|
|
437
|
+
# An opening call may already be terminal (codex-acp file edits
|
|
438
|
+
# arrive completed with no later update); honor its status so it
|
|
439
|
+
# never lingers in pending_tool_call_ids().
|
|
440
|
+
if update.get("status") is not None:
|
|
441
|
+
try:
|
|
442
|
+
record.update_status(ToolCallStatus(update["status"]))
|
|
443
|
+
except ValueError:
|
|
444
|
+
logger.warning(f"Unknown tool call status: {update.get('status')}")
|
|
420
445
|
self._record_tool_call(record)
|
|
421
446
|
|
|
422
447
|
elif update_type == "tool_call_update":
|
|
@@ -440,6 +465,7 @@ class ACPSession:
|
|
|
440
465
|
status = ToolCallStatus.IN_PROGRESS
|
|
441
466
|
content = update.get("content")
|
|
442
467
|
record.update_status(status, content)
|
|
468
|
+
record.absorb_raw_io(update)
|
|
443
469
|
if status in (ToolCallStatus.PENDING, ToolCallStatus.IN_PROGRESS):
|
|
444
470
|
self._pending_tool_call_update_counts[tc_id] = (
|
|
445
471
|
self._pending_tool_call_update_counts.get(tc_id, 0) + 1
|
|
@@ -91,11 +91,23 @@ def apply_codex_launch_config(
|
|
|
91
91
|
*,
|
|
92
92
|
model: str | None,
|
|
93
93
|
reasoning_effort: str | None,
|
|
94
|
+
sandboxed: bool = False,
|
|
94
95
|
) -> tuple[dict[str, str], bool]:
|
|
95
|
-
"""
|
|
96
|
+
"""Configure the adapter's sandbox, web policy and launch-owned model effort."""
|
|
96
97
|
if agent != "codex-acp":
|
|
97
98
|
return agent_env, False
|
|
98
|
-
|
|
99
|
+
updated_env = dict(agent_env)
|
|
100
|
+
if sandboxed:
|
|
101
|
+
# BenchFlow's non-root sandbox and UID firewall own isolation. The
|
|
102
|
+
# adapter defaults to workspace-write, whose nested bwrap fails on
|
|
103
|
+
# Docker/Daytona before tools run. CODEX_CONFIG.sandbox_mode does not
|
|
104
|
+
# fix this: codex-acp overrides it with its session's AgentMode.
|
|
105
|
+
updated_env.setdefault("INITIAL_AGENT_MODE", "agent-full-access")
|
|
106
|
+
disable_search = any(
|
|
107
|
+
agent_env.get(key) == "1"
|
|
108
|
+
for key in ("BENCHFLOW_DISALLOW_WEB_TOOLS", "BENCHFLOW_EGRESS_DENYLIST")
|
|
109
|
+
)
|
|
110
|
+
config = _parse_codex_config(agent_env.get(CODEX_CONFIG_ENV), strict=disable_search)
|
|
99
111
|
provider_model = agent_env.get(_PROVIDER_MODEL_ENV)
|
|
100
112
|
owns_model = bool(
|
|
101
113
|
model
|
|
@@ -105,14 +117,15 @@ def apply_codex_launch_config(
|
|
|
105
117
|
and config is not None
|
|
106
118
|
and config.get("model") == provider_model
|
|
107
119
|
)
|
|
108
|
-
if not
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
120
|
+
if config is not None and (disable_search or (owns_model and reasoning_effort)):
|
|
121
|
+
if disable_search:
|
|
122
|
+
# codex-acp 1.6.0 ignores CLI -c flags; its supported CODEX_CONFIG
|
|
123
|
+
# is forwarded to the Codex app-server's thread configuration.
|
|
124
|
+
config["web_search"] = "disabled"
|
|
125
|
+
if owns_model and reasoning_effort:
|
|
126
|
+
config["model_reasoning_effort"] = reasoning_effort
|
|
127
|
+
updated_env[CODEX_CONFIG_ENV] = json.dumps(config, separators=(",", ":"))
|
|
128
|
+
return (updated_env if updated_env != agent_env else agent_env), owns_model
|
|
116
129
|
|
|
117
130
|
|
|
118
131
|
def _apply_codex_default_auth_request(
|