benchflow 0.7.7.dev2316__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.dev2316 → benchflow-0.7.8}/CHANGELOG.md +63 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/PKG-INFO +1 -1
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/pyproject.toml +1 -1
- {benchflow-0.7.7.dev2316 → 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.dev2316 → 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.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/scoring.py +71 -3
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/yaml_loader.py +2 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/client.py +5 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/runtime.py +32 -5
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/session.py +26 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/credentials.py +50 -1
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/_live_progress.py +3 -6
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/eval_artifacts.py +1 -0
- {benchflow-0.7.7.dev2316 → 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.dev2316 → benchflow-0.7.8}/src/benchflow/contracts/planes.py +1 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/eval_artifacts.py +5 -3
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/eval_lift.py +12 -5
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/eval_plan.py +7 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/eval_sharding.py +16 -1
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/eval_worker.py +2 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/evaluation.py +55 -83
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/metrics.py +16 -19
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/models.py +26 -0
- {benchflow-0.7.7.dev2316 → 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.dev2316 → 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.dev2316 → 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.dev2316 → benchflow-0.7.8}/src/benchflow/review/runner.py +142 -67
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/review/wrapper.py +80 -12
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/__init__.py +57 -3
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/_config.py +8 -1
- {benchflow-0.7.7.dev2316 → 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.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/task_runtime.py +14 -7
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout_planes.py +5 -0
- {benchflow-0.7.7.dev2316 → 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.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore.py +98 -10
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/egress_denylist.py +33 -9
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/lockdown.py +4 -1
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/protocol.py +10 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sdk.py +3 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/_capture.py +19 -13
- {benchflow-0.7.7.dev2316 → 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.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/export_prime_sft.py +8 -3
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/export_trl_sft.py +1 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/results.py +17 -1
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/types.py +3 -2
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/boot.js +1 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/detail.js +78 -4
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/template.html +14 -0
- {benchflow-0.7.7.dev2316 → 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.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/viewer.css +22 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/models.py +48 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/payload.py +127 -1
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/render.py +10 -1
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/sources.py +9 -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.dev2316 → benchflow-0.7.8}/tests/test_agentcore_parallel.py +155 -0
- {benchflow-0.7.7.dev2316 → 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.dev2316 → 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.dev2316 → benchflow-0.7.8}/tests/test_egress_denylist.py +13 -3
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_egress_denylist_integration.py +61 -4
- benchflow-0.7.8/tests/test_egress_dynamic_certs.py +115 -0
- 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.dev2316 → 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.dev2316 → benchflow-0.7.8}/tests/trajectories/test_redaction.py +13 -0
- {benchflow-0.7.7.dev2316 → 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.dev2316/src/benchflow/sandbox/_egress_denylist_proxy.py +0 -520
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/.gitignore +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/LICENSE +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/README.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_paths.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_run.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_types.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/live_activity.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/container_transport.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/timeout_cleanup.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/acp/watchdog.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/codex_config.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/install.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/registry.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/branch.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/_failure_evidence.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/_shared.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/_traj_tui.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/_traj_upload_ui.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/cli/traj.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/continue_run/orchestrator.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/monitor.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/providers/litellm_gemini_passthrough_patch.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/providers/litellm_logging.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/providers/litellm_runtime.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/providers/runtime.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/publish/_progress.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/publish/azure_blob.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/publish/broker.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/publish/redact.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/publish/traj_capture.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/publish/traj_report.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/py.typed +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/review/scoring.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/_deadline.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/_setup.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_compose.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_compose_files/docker-compose-net-admin.yaml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/apple_container.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/daytona.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/daytona_dind.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/daytona_strategies.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/docker.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/process/_base.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/process/agentcore.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/process/apple.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/process/daytona.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/process/docker.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/providers.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/setup.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/scenes.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/skills.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/config.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/document.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/env.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/export.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/package.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/runtime_capabilities.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/task.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/sessions.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/__main__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/catalog.js +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/fonts/OFL-google-sans-code.txt +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-400-latin.woff2 +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-600-latin.woff2 +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/assets/viewer.js +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/catalog.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/legacy.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/trajectories/viewer/server.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_codex_config.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/README.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/conftest.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/environment/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → 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.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → 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.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/_consistency.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/check_results.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/run.sh +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/run_suite.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/scenarios.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acp.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_acp_timeout_evidence.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_adapters.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_cli.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_registry.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_router.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_setup.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agent_spec.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_branch.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_cli_misc.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_codex_review.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_config_override.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_config_redaction.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_console_progress.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_daytona_download.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_diagnostics.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_docs_examples.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_egress_model_gateway.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_env_registry.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_env_setup.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eval_lift.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_hosted_env.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_hosted_search_policy.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_integration_suite.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_internet_policy.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_job.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_learner_skills.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_learner_store.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_litellm_config.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_litellm_gemini_passthrough_patch.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_litellm_logging.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_litellm_reasoning_passthrough.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_litellm_runtime.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_live_llm_trajectory.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_llm_judge.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_loop_summary.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_metrics.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_network_denylist_config.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_oracle.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_paths_safe.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_process.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_providers.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_publish_azure_blob.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_publish_huggingface.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_reexport.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_registry_invariants.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_release_version.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_release_workflow_wiring.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_review_rubric.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_review_runtime.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_reward_node.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_reward_range.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rewards.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_hard_deadline.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_planes_contract.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rollout_upload.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_rubric_config.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_runtime.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_runtime_capabilities.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_scene.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_scoring.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skill_eval.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skill_policy.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skills.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_smoke.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_source_adapters.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_task_config.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_task_digest.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_task_document.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_task_download.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_task_export.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_task_output_format.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_task_package.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_tasks.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_train_cli.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traj_report.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traj_staging_phases.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traj_tui.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traj_upload_cli.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traj_upload_skill.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_traj_workspace.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trajectory_upload_layout.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trajectory_upload_service.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trial_litellm_runtime.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_trl_integration.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_usage_required.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_user.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_verifier_document.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_verifier_output.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_verifier_wedge_retry.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_verify.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_viewer_confirm.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/test_yaml_config.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.7.7.dev2316 → benchflow-0.7.8}/tests/trajectories/test_tree.py +0 -0
- {benchflow-0.7.7.dev2316 → 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
|
|
@@ -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
|
|
@@ -800,6 +800,28 @@ def _agent_prompt_timeout_error(session, timeout: int) -> AgentPromptTimeoutErro
|
|
|
800
800
|
)
|
|
801
801
|
|
|
802
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
|
+
|
|
803
825
|
async def _prompt_with_wall_clock_budget(
|
|
804
826
|
acp_client: ACPClient,
|
|
805
827
|
session,
|
|
@@ -807,12 +829,15 @@ async def _prompt_with_wall_clock_budget(
|
|
|
807
829
|
timeout: int,
|
|
808
830
|
):
|
|
809
831
|
"""Run a prompt until either it finishes or BenchFlow's budget expires."""
|
|
810
|
-
|
|
832
|
+
deadline = asyncio.get_running_loop().time() + timeout
|
|
833
|
+
prompt_task = asyncio.create_task(_timed_prompt(acp_client, prompt))
|
|
811
834
|
cleanup_attempted = False
|
|
812
835
|
try:
|
|
813
836
|
done, _pending = await asyncio.wait({prompt_task}, timeout=timeout)
|
|
814
837
|
if done:
|
|
815
|
-
return
|
|
838
|
+
return _completed_prompt_result(
|
|
839
|
+
prompt_task, session, deadline=deadline, timeout=timeout
|
|
840
|
+
)
|
|
816
841
|
cleanup_attempted = True
|
|
817
842
|
if await cancel_prompt_after_timeout(acp_client, prompt_task):
|
|
818
843
|
raise _agent_prompt_timeout_error(session, timeout)
|
|
@@ -831,7 +856,7 @@ async def _prompt_with_idle_watchdog(
|
|
|
831
856
|
idle_timeout: int,
|
|
832
857
|
):
|
|
833
858
|
"""Run one ACP prompt with wall-clock and idle-watchdog budgets."""
|
|
834
|
-
prompt_task = asyncio.create_task(acp_client
|
|
859
|
+
prompt_task = asyncio.create_task(_timed_prompt(acp_client, prompt))
|
|
835
860
|
cleanup_attempted = False
|
|
836
861
|
loop = asyncio.get_running_loop()
|
|
837
862
|
watchdog = IdleWatchdog.start(
|
|
@@ -864,7 +889,9 @@ async def _prompt_with_idle_watchdog(
|
|
|
864
889
|
f"Agent prompt exceeded wall-clock budget {timeout}s"
|
|
865
890
|
)
|
|
866
891
|
|
|
867
|
-
return
|
|
892
|
+
return _completed_prompt_result(
|
|
893
|
+
prompt_task, session, deadline=watchdog.deadline, timeout=timeout
|
|
894
|
+
)
|
|
868
895
|
finally:
|
|
869
896
|
# Always cancel + drain the prompt task on exit, including the
|
|
870
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
|
|
@@ -19,14 +19,63 @@ Does not own:
|
|
|
19
19
|
import json
|
|
20
20
|
import logging
|
|
21
21
|
import os
|
|
22
|
+
import posixpath
|
|
22
23
|
import shlex
|
|
23
24
|
import tempfile
|
|
24
|
-
from
|
|
25
|
+
from collections.abc import Mapping
|
|
26
|
+
from pathlib import Path, PurePosixPath
|
|
25
27
|
|
|
26
28
|
from benchflow.agents.registry import AGENTS
|
|
27
29
|
|
|
28
30
|
logger = logging.getLogger(__name__)
|
|
29
31
|
|
|
32
|
+
# These runtime files can contain API keys or OAuth tokens. Keep this inventory
|
|
33
|
+
# beside the credential writers, including files written by harness launchers
|
|
34
|
+
# rather than upload_credential. Evidence capture records every exclusion.
|
|
35
|
+
CREDENTIAL_EVIDENCE_PATHS = (
|
|
36
|
+
".codex/auth.json",
|
|
37
|
+
".claude/.credentials.json",
|
|
38
|
+
".config/opencode/auth.json",
|
|
39
|
+
".config/opencode/opencode.json",
|
|
40
|
+
".local/share/opencode/auth.json",
|
|
41
|
+
".config/mimocode/mimocode.json",
|
|
42
|
+
"mimocode.json",
|
|
43
|
+
".openhands/agent_settings.json",
|
|
44
|
+
".pi/agent/models.json",
|
|
45
|
+
".pi/agent/auth.json",
|
|
46
|
+
".openclaw/openclaw.json",
|
|
47
|
+
".openclaw/agents/main/agent/auth-profiles.json",
|
|
48
|
+
".gemini/oauth_creds.json",
|
|
49
|
+
".aws/credentials",
|
|
50
|
+
".config/gcloud/application_default_credentials.json",
|
|
51
|
+
".ssh",
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def credential_evidence_overrides(
|
|
56
|
+
agent_env: Mapping[str, str], *, workspace: str, cred_home: str
|
|
57
|
+
) -> tuple[str, ...]:
|
|
58
|
+
"""Resolve supported credential/config file overrides in sandbox paths.
|
|
59
|
+
|
|
60
|
+
Values are filenames, not credential JSON. In particular, CODEX_CONFIG is
|
|
61
|
+
inline JSON forwarded to the adapter and must never be treated as a path.
|
|
62
|
+
"""
|
|
63
|
+
paths: set[str] = set()
|
|
64
|
+
for variable in (
|
|
65
|
+
"MIMOCODE_CONFIG",
|
|
66
|
+
"OPENCODE_CONFIG",
|
|
67
|
+
"OPENCLAW_CONFIG_PATH",
|
|
68
|
+
"GOOGLE_APPLICATION_CREDENTIALS",
|
|
69
|
+
"AWS_SHARED_CREDENTIALS_FILE",
|
|
70
|
+
):
|
|
71
|
+
value = agent_env.get(variable)
|
|
72
|
+
if not value:
|
|
73
|
+
continue
|
|
74
|
+
if value.startswith("~/"):
|
|
75
|
+
value = str(PurePosixPath(cred_home) / value[2:])
|
|
76
|
+
paths.add(posixpath.normpath(str(PurePosixPath(workspace) / value)))
|
|
77
|
+
return tuple(sorted(paths))
|
|
78
|
+
|
|
30
79
|
|
|
31
80
|
def _owner_from_home(cred_home: str) -> str | None:
|
|
32
81
|
"""Return sandbox username for /home/<user> credential homes."""
|
|
@@ -264,13 +264,10 @@ class LiveEvalProgress:
|
|
|
264
264
|
def on_result(self, name: str, result: RunResult) -> None:
|
|
265
265
|
with self._lock:
|
|
266
266
|
self._running.pop(name, None)
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
rewards = getattr(result, "rewards", None)
|
|
270
|
-
reward = rewards.get("reward") if rewards else None
|
|
271
|
-
if reward == 1:
|
|
267
|
+
outcome = result.score_outcome
|
|
268
|
+
if outcome == "passed":
|
|
272
269
|
self._passed += 1
|
|
273
|
-
elif
|
|
270
|
+
elif outcome == "failed":
|
|
274
271
|
self._failed += 1
|
|
275
272
|
else:
|
|
276
273
|
self._errored += 1
|
|
@@ -35,6 +35,7 @@ def _redacted_eval_config(eval_config: EvaluationConfig) -> dict:
|
|
|
35
35
|
"skills_dir": eval_config.skills_dir,
|
|
36
36
|
"usage_tracking": eval_config.usage_tracking.to_config_artifact(),
|
|
37
37
|
"agent_env_keys": sorted(eval_config.agent_env),
|
|
38
|
+
"reviewer": eval_config.reviewer.to_config_artifact(),
|
|
38
39
|
"include_tasks": sorted(eval_config.include_tasks),
|
|
39
40
|
"exclude_tasks": sorted(eval_config.exclude_tasks),
|
|
40
41
|
"source_provenance": eval_config.source_provenance,
|