benchflow 0.7.8.dev2347__tar.gz → 0.7.9.dev2354__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.8.dev2347 → benchflow-0.7.9.dev2354}/CHANGELOG.md +38 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/PKG-INFO +1 -1
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/pyproject.toml +1 -1
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/evidence.py +25 -10
- benchflow-0.7.9.dev2354/src/benchflow/review/evidence_runtime.py +49 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/__init__.py +4 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/_review.py +9 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/protocol.py +10 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_automatic.py +48 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_evidence.py +79 -6
- benchflow-0.7.9.dev2354/tests/test_review_evidence_runtime.py +107 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/.gitignore +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/LICENSE +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/README.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_paths.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_run.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_types.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/config_redaction.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/evaluation_results.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/live_activity.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/result_paths.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/scoring.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/yaml_loader.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/client.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/container_transport.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/runtime.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/session.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/timeout_cleanup.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/watchdog.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/codex_config.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/credentials.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/install.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/registry.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/branch.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/_failure_evidence.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/_live_progress.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/_shared.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/_traj_tui.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/_traj_upload_ui.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/eval_artifacts.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/main.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/rescore.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/reviewer_options.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/cli/traj.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/continue_run/orchestrator.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/contracts/planes.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/eval_artifacts.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/eval_lift.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/eval_plan.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/eval_sharding.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/eval_worker.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/evaluation.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/metrics.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/models.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/monitor.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/providers/litellm_gemini_passthrough_patch.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/providers/litellm_logging.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/providers/litellm_runtime.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/providers/runtime.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/publish/_progress.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/publish/azure_blob.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/publish/broker.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/publish/redact.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/publish/traj_capture.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/publish/traj_report.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/py.typed +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/automatic.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/config.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/options.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/outcome.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/persistence.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/preflight.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/prompts.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/resume.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/runner.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/scoring.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/review/wrapper.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/_config.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/_deadline.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/_results.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/_setup.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout/task_runtime.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/rollout_planes.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/runtime.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_compose.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_compose_files/docker-compose-net-admin.yaml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_egress_denylist_proxy.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/agentcore.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/apple_container.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/daytona.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/daytona_dind.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/daytona_strategies.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/docker.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/egress_denylist.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/lockdown.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/process/_base.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/process/agentcore.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/process/apple.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/process/daytona.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/process/docker.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/providers.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/setup.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/scenes.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/sdk.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/skills.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/config.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/document.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/env.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/export.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/package.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/runtime_capabilities.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/task.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/_capture.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/_llm_capture.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/_snapshot.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/export_prime_sft.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/export_trl_sft.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/results.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/sessions.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/types.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/__main__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/boot.js +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/catalog.js +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/detail.js +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/fonts/OFL-google-sans-code.txt +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-400-latin.woff2 +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-600-latin.woff2 +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/template.html +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/theme.css +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/theme.js +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/vendor/LICENSE.highlight.js +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/vendor/highlight.min.js +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/viewer.css +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/assets/viewer.js +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/catalog.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/legacy.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/models.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/payload.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/render.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/server.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/trajectories/viewer/sources.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_codex_config.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/README.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/conftest.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/environment/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/_consistency.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/check_results.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/run.sh +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/run_suite.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/scenarios.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acp.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acp_buffered_timeout.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_acp_timeout_evidence.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_adapters.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_cli.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_egress_firewall.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_registry.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_router.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_setup.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agent_spec.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agentcore_parallel.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agentcore_sandbox.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_automatic_review_scoring.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_branch.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_cli_live_progress.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_cli_misc.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_codex_review.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_config_override.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_config_redaction.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_console_progress.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_daytona_download.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_diagnostics.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_docs_examples.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_egress_connect_authority.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_egress_denylist.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_egress_denylist_integration.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_egress_dynamic_certs.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_egress_model_gateway.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_env_registry.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_env_setup.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eval_lift.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_hosted_env.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_hosted_search_policy.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_integration_suite.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_internet_policy.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_job.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_learner_skills.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_learner_store.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_litellm_config.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_litellm_gemini_passthrough_patch.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_litellm_logging.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_litellm_reasoning_passthrough.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_litellm_runtime.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_live_llm_trajectory.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_llm_judge.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_loop_summary.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_metrics.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_network_denylist_config.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_oracle.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_paths_safe.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_process.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_providers.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_publish_azure_blob.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_publish_huggingface.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_redacted_snapshot.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_reexport.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_registry_invariants.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_release_version.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_release_workflow_wiring.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_lifecycle.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_resume.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_rubric.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_runtime.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_runtime_automatic.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_review_snapshot.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_reviewer_options.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_reward_node.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_reward_range.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rewards.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_hard_deadline.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_planes_contract.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rollout_upload.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_rubric_config.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_runtime.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_runtime_capabilities.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_scene.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_scoring.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skill_eval.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skill_policy.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skills.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_smoke.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_source_adapters.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_config.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_digest.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_document.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_download.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_export.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_output_format.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_package.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_task_runtime_primitive.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_tasks.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_tool_call_raw_io.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_train_cli.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traj_report.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traj_staging_phases.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traj_tui.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traj_upload_cli.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traj_upload_skill.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_traj_workspace.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trajectory_upload_layout.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trajectory_upload_service.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trial_litellm_runtime.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_trl_integration.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_usage_required.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_user.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_verifier_document.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_verifier_output.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_verifier_wedge_retry.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_verify.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_viewer_confirm.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/test_yaml_config.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_redaction.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_tree.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_viewer_acp_renderer.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_viewer_browser.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_viewer_rubric.py +0 -0
- {benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/tests/trajectories/test_viewer_theme.py +0 -0
|
@@ -2,6 +2,44 @@
|
|
|
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
|
+
|
|
5
43
|
## 0.7.7 — 2026-09-09
|
|
6
44
|
|
|
7
45
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: benchflow
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.9.dev2354
|
|
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
|
|
@@ -25,7 +25,7 @@ from typing import Literal, Self
|
|
|
25
25
|
from pydantic import BaseModel, ConfigDict, Field, model_validator
|
|
26
26
|
|
|
27
27
|
from benchflow.agents.credentials import CREDENTIAL_EVIDENCE_PATHS
|
|
28
|
-
from benchflow.sandbox.protocol import Sandbox
|
|
28
|
+
from benchflow.sandbox.protocol import SANDBOX_RUNTIME_STATE_PATHS, Sandbox
|
|
29
29
|
from benchflow.task.config import ArtifactConfig
|
|
30
30
|
|
|
31
31
|
logger = logging.getLogger(__name__)
|
|
@@ -51,7 +51,7 @@ class EvidenceExclusion(BaseModel):
|
|
|
51
51
|
model_config = ConfigDict(extra="forbid", frozen=True)
|
|
52
52
|
|
|
53
53
|
original_path: str
|
|
54
|
-
reason: Literal["credential", "task_exclude"]
|
|
54
|
+
reason: Literal["credential", "sandbox_runtime", "special_file", "task_exclude"]
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
class ArtifactEvidence(BaseModel):
|
|
@@ -94,8 +94,10 @@ class _CaptureReceipt(BaseModel):
|
|
|
94
94
|
|
|
95
95
|
|
|
96
96
|
# Runs in both Docker and Daytona without requiring BenchFlow in the image.
|
|
97
|
-
# Enumeration is explicit so
|
|
98
|
-
#
|
|
97
|
+
# Enumeration is explicit so nothing is silently omitted by a tar command.
|
|
98
|
+
# Sockets, devices and FIFOs hold no bytes to preserve, and provider runtime
|
|
99
|
+
# state is harness-owned, so both are recorded as manifest exclusions; quota
|
|
100
|
+
# overflows, escaping links and concurrent changes still fail the capture.
|
|
99
101
|
_CAPTURE_SCRIPT = r"""
|
|
100
102
|
import fnmatch, hashlib, json, os, pathlib, stat, sys, tarfile, tempfile
|
|
101
103
|
source = pathlib.Path(sys.argv[1]).resolve()
|
|
@@ -107,18 +109,26 @@ root = source if source.is_dir() else source.parent
|
|
|
107
109
|
max_bytes, max_entries = map(int, sys.argv[2:4])
|
|
108
110
|
rules = json.loads(sys.argv[4])
|
|
109
111
|
paths, exclusions, total = [], [], 0
|
|
112
|
+
def record(path, reason):
|
|
113
|
+
exclusions.append({"original_path": path.as_posix(), "reason": reason})
|
|
114
|
+
if len(paths) + len(exclusions) > max_entries:
|
|
115
|
+
raise ValueError("workspace evidence exceeds configured capture limits")
|
|
116
|
+
def component(path, rule):
|
|
117
|
+
return path.endswith("/" + rule) or "/" + rule + "/" in path
|
|
110
118
|
def excluded(path):
|
|
111
119
|
absolute = path.as_posix()
|
|
112
120
|
relative = path.relative_to(root).as_posix()
|
|
113
|
-
credential = any(absolute
|
|
121
|
+
credential = any(component(absolute, rule) for rule in rules["credentials"])
|
|
114
122
|
credential |= any(path == pathlib.Path(rule) or path.is_relative_to(rule) for rule in rules["paths"])
|
|
115
123
|
reason = "credential" if credential else None
|
|
124
|
+
# Relative to the captured root: runtime state below the root is dropped,
|
|
125
|
+
# but a root that itself lies under such a directory is still captured.
|
|
126
|
+
if reason is None and any(component("/" + relative, rule) for rule in rules["sandbox_runtime"]):
|
|
127
|
+
reason = "sandbox_runtime"
|
|
116
128
|
if reason is None and any(fnmatch.fnmatchcase(relative, rule) or fnmatch.fnmatchcase(path.name, rule) for rule in rules["exclude"]):
|
|
117
129
|
reason = "task_exclude"
|
|
118
130
|
if reason:
|
|
119
|
-
|
|
120
|
-
if len(paths) + len(exclusions) > max_entries:
|
|
121
|
-
raise ValueError("workspace evidence exceeds configured capture limits")
|
|
131
|
+
record(path, reason)
|
|
122
132
|
return True
|
|
123
133
|
return False
|
|
124
134
|
def scan_error(error):
|
|
@@ -136,7 +146,8 @@ for directory, dirs, files in walk:
|
|
|
136
146
|
info = path.lstat()
|
|
137
147
|
if not any(check(info.st_mode) for check in
|
|
138
148
|
(stat.S_ISREG, stat.S_ISDIR, stat.S_ISLNK)):
|
|
139
|
-
|
|
149
|
+
record(path, "special_file")
|
|
150
|
+
continue
|
|
140
151
|
if path.is_symlink() and not path.resolve().is_relative_to(root):
|
|
141
152
|
raise ValueError("workspace symlink escapes evidence: " + str(path))
|
|
142
153
|
total += info.st_size if stat.S_ISREG(info.st_mode) else 0
|
|
@@ -334,7 +345,10 @@ async def capture_workspace(
|
|
|
334
345
|
|
|
335
346
|
``destination`` must not exist. It receives ``workspace/`` and
|
|
336
347
|
``manifest.json`` together after successful validation. Capture limits are
|
|
337
|
-
hard errors: this API never labels a truncated tree complete.
|
|
348
|
+
hard errors: this API never labels a truncated tree complete. Credential
|
|
349
|
+
files, provider runtime state (``SANDBOX_RUNTIME_STATE_PATHS``) and
|
|
350
|
+
sockets, FIFOs or device nodes stay out of the bundle, each recorded in
|
|
351
|
+
``manifest.exclusions``.
|
|
338
352
|
"""
|
|
339
353
|
if destination.exists() or destination.is_symlink():
|
|
340
354
|
raise EvidenceError(f"Evidence destination already exists: {destination}")
|
|
@@ -346,6 +360,7 @@ async def capture_workspace(
|
|
|
346
360
|
rules = json.dumps(
|
|
347
361
|
{
|
|
348
362
|
"credentials": CREDENTIAL_EVIDENCE_PATHS,
|
|
363
|
+
"sandbox_runtime": SANDBOX_RUNTIME_STATE_PATHS,
|
|
349
364
|
"exclude": list(exclude),
|
|
350
365
|
"paths": list(excluded_paths),
|
|
351
366
|
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"""Provision the stdlib runtime used for trusted workspace capture."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import shlex
|
|
6
|
+
|
|
7
|
+
from benchflow.review.evidence import EvidenceError
|
|
8
|
+
from benchflow.sandbox.protocol import Sandbox
|
|
9
|
+
|
|
10
|
+
_PYTHON_PROBE = "import sys; raise SystemExit(sys.version_info < (3, 10))"
|
|
11
|
+
_SETUP_SCRIPT = f"""
|
|
12
|
+
set -eu
|
|
13
|
+
if python3 -I -c {shlex.quote(_PYTHON_PROBE)} >/dev/null 2>&1; then
|
|
14
|
+
exit 0
|
|
15
|
+
fi
|
|
16
|
+
if command -v apt-get >/dev/null 2>&1; then
|
|
17
|
+
apt-get update -qq
|
|
18
|
+
DEBIAN_FRONTEND=noninteractive apt-get install -y -qq --no-install-recommends python3
|
|
19
|
+
elif command -v apk >/dev/null 2>&1; then
|
|
20
|
+
apk add --no-cache python3
|
|
21
|
+
elif command -v dnf >/dev/null 2>&1; then
|
|
22
|
+
dnf install -y python3
|
|
23
|
+
elif command -v microdnf >/dev/null 2>&1; then
|
|
24
|
+
microdnf install -y python3
|
|
25
|
+
elif command -v yum >/dev/null 2>&1; then
|
|
26
|
+
yum install -y python3
|
|
27
|
+
else
|
|
28
|
+
echo 'Automatic review requires Python 3.10+ in the task image; no supported package manager is available.' >&2
|
|
29
|
+
exit 1
|
|
30
|
+
fi
|
|
31
|
+
python3 -I -c {shlex.quote(_PYTHON_PROBE)}
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
async def ensure_evidence_python(env: Sandbox, *, timeout_sec: int = 600) -> None:
|
|
36
|
+
"""Prepare capture before the solver runs, including shell-only images.
|
|
37
|
+
|
|
38
|
+
Existing compatible interpreters require no package installation. Failure
|
|
39
|
+
is a setup error, before a solver can spend its budget producing evidence
|
|
40
|
+
that the controller cannot preserve.
|
|
41
|
+
"""
|
|
42
|
+
result = await env.exec(
|
|
43
|
+
shlex.join(["sh", "-c", _SETUP_SCRIPT]),
|
|
44
|
+
user="root",
|
|
45
|
+
timeout_sec=timeout_sec,
|
|
46
|
+
)
|
|
47
|
+
if result.return_code != 0:
|
|
48
|
+
details = (result.stderr or result.stdout or "")[-2000:]
|
|
49
|
+
raise EvidenceError(f"Could not prepare workspace capture Python: {details}")
|
|
@@ -1189,6 +1189,10 @@ class Rollout:
|
|
|
1189
1189
|
|
|
1190
1190
|
self._agent_cwd = await _resolve_agent_cwd(self._env, self._task)
|
|
1191
1191
|
|
|
1192
|
+
from benchflow.rollout._review import prepare_capture_runtime
|
|
1193
|
+
|
|
1194
|
+
await prepare_capture_runtime(self)
|
|
1195
|
+
|
|
1192
1196
|
if cfg.primary_agent == "oracle":
|
|
1193
1197
|
if cfg.sandbox_user:
|
|
1194
1198
|
await self._planes.setup_sandbox_user(
|
|
@@ -10,6 +10,7 @@ from benchflow._utils.text import describe_exception
|
|
|
10
10
|
from benchflow.agents.credentials import credential_evidence_overrides
|
|
11
11
|
from benchflow.review.automatic import finish_review, prepare_review
|
|
12
12
|
from benchflow.review.evidence import capture_task_evidence
|
|
13
|
+
from benchflow.review.evidence_runtime import ensure_evidence_python
|
|
13
14
|
from benchflow.review.outcome import scoring_error
|
|
14
15
|
from benchflow.review.persistence import commit_scoring_result, scoring_lock
|
|
15
16
|
|
|
@@ -35,6 +36,14 @@ def prepare_terminal_review(rollout: Rollout) -> None:
|
|
|
35
36
|
cfg.task_digest = digest
|
|
36
37
|
|
|
37
38
|
|
|
39
|
+
async def prepare_capture_runtime(rollout: Rollout) -> None:
|
|
40
|
+
"""Ensure required capture dependencies exist before solver execution."""
|
|
41
|
+
if rollout._review_plan is not None or rollout._config.purpose == "reviewer":
|
|
42
|
+
await ensure_evidence_python(
|
|
43
|
+
rollout._env, timeout_sec=rollout._config.sandbox_setup_timeout
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
38
47
|
async def capture_terminal_workspace(rollout: Rollout) -> None:
|
|
39
48
|
"""Freeze solver or reviewer files before verifier hardening mutates them."""
|
|
40
49
|
if rollout._review_plan is None and rollout._config.purpose != "reviewer":
|
|
@@ -6,6 +6,16 @@ from dataclasses import dataclass, field
|
|
|
6
6
|
from pathlib import Path
|
|
7
7
|
from typing import Protocol, runtime_checkable
|
|
8
8
|
|
|
9
|
+
# Directories a provider daemon owns inside the sandbox, matched as path
|
|
10
|
+
# components below a captured root. Daytona keeps ~/.daytona/sessions in the
|
|
11
|
+
# home of the account its daemon runs as (root in task images): the
|
|
12
|
+
# entrypoint's stdin/stdout/stderr FIFOs plus every session command's script,
|
|
13
|
+
# output log and exit code. With a /root workspace that tree sits inside the
|
|
14
|
+
# solver's working directory, changes while any command runs (evidence capture
|
|
15
|
+
# included), and is harness state rather than solver output. Docker keeps exec
|
|
16
|
+
# state outside the container filesystem, so it needs no entry.
|
|
17
|
+
SANDBOX_RUNTIME_STATE_PATHS = (".daytona",)
|
|
18
|
+
|
|
9
19
|
|
|
10
20
|
@dataclass(frozen=True)
|
|
11
21
|
class ExecResult:
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import json
|
|
6
|
+
import os
|
|
6
7
|
from datetime import datetime
|
|
7
8
|
from pathlib import Path
|
|
8
9
|
from types import SimpleNamespace
|
|
@@ -14,9 +15,11 @@ import benchflow
|
|
|
14
15
|
from benchflow._utils.result_paths import iter_task_result_paths
|
|
15
16
|
from benchflow._utils.scoring import classify_score_outcome
|
|
16
17
|
from benchflow.review import automatic, persistence
|
|
18
|
+
from benchflow.review.evidence import EvidenceManifest
|
|
17
19
|
from benchflow.review.options import ReviewerConfig
|
|
18
20
|
from benchflow.rollout import _review
|
|
19
21
|
from benchflow.rollout._results import _build_rollout_result
|
|
22
|
+
from tests.test_review_evidence import LocalTransport
|
|
20
23
|
from tests.test_review_runtime import (
|
|
21
24
|
WEIGHTED_RUBRIC,
|
|
22
25
|
FakeRun,
|
|
@@ -308,6 +311,51 @@ async def test_workspace_freezes_before_capture_and_keeps_actual_cwd(
|
|
|
308
311
|
assert order == ["disconnect", "stop", "capture"]
|
|
309
312
|
|
|
310
313
|
|
|
314
|
+
@pytest.mark.asyncio
|
|
315
|
+
async def test_daytona_session_fifos_keep_terminal_evidence_scorable(tmp_path):
|
|
316
|
+
"""Guards terminal capture on Daytona /root workspaces after PR #1126.
|
|
317
|
+
|
|
318
|
+
Daytona's entrypoint FIFOs under /root/.daytona made capture fail, which
|
|
319
|
+
set _export_error; finish_review then ended in a scoring error with
|
|
320
|
+
rewards null even though the verifier had run.
|
|
321
|
+
"""
|
|
322
|
+
workspace = tmp_path / "root"
|
|
323
|
+
entrypoint = workspace / ".daytona/sessions/entrypoint/entrypoint_command"
|
|
324
|
+
entrypoint.mkdir(parents=True)
|
|
325
|
+
os.mkfifo(entrypoint / "input.pipe")
|
|
326
|
+
(workspace / "paper.pdf").write_bytes(b"%PDF-1.7 solver paper")
|
|
327
|
+
rollout_dir = tmp_path / "rollout"
|
|
328
|
+
rollout_dir.mkdir()
|
|
329
|
+
|
|
330
|
+
async def idle(*_args):
|
|
331
|
+
return None
|
|
332
|
+
|
|
333
|
+
rollout = SimpleNamespace(
|
|
334
|
+
_review_plan=object(),
|
|
335
|
+
_config=SimpleNamespace(purpose="task", sandbox_user=None),
|
|
336
|
+
_env=LocalTransport(),
|
|
337
|
+
_agent_env={},
|
|
338
|
+
_planes=SimpleNamespace(quiesce_agent=idle),
|
|
339
|
+
_task=SimpleNamespace(config=SimpleNamespace(artifacts=[])),
|
|
340
|
+
_agent_cwd=str(workspace),
|
|
341
|
+
disconnect=idle,
|
|
342
|
+
_require_rollout_dir=lambda: rollout_dir,
|
|
343
|
+
)
|
|
344
|
+
|
|
345
|
+
await _review.capture_terminal_workspace(rollout)
|
|
346
|
+
|
|
347
|
+
assert getattr(rollout, "_export_error", None) is None
|
|
348
|
+
manifest = EvidenceManifest.model_validate_json(
|
|
349
|
+
(rollout_dir / "evidence" / "manifest.json").read_text()
|
|
350
|
+
)
|
|
351
|
+
assert [(entry.original_path, entry.reason) for entry in manifest.exclusions] == [
|
|
352
|
+
(str(workspace / ".daytona"), "sandbox_runtime")
|
|
353
|
+
]
|
|
354
|
+
assert (
|
|
355
|
+
rollout_dir / "evidence" / "workspace" / "paper.pdf"
|
|
356
|
+
).read_bytes() == b"%PDF-1.7 solver paper"
|
|
357
|
+
|
|
358
|
+
|
|
311
359
|
def test_reviewer_child_never_recursively_preflights(monkeypatch):
|
|
312
360
|
"""Guards child execution recursion after PR #1126."""
|
|
313
361
|
prepare = Mock(side_effect=AssertionError("reviewer cannot review itself"))
|
|
@@ -11,6 +11,7 @@ import io
|
|
|
11
11
|
import os
|
|
12
12
|
import shlex
|
|
13
13
|
import shutil
|
|
14
|
+
import socket
|
|
14
15
|
import sys
|
|
15
16
|
import tarfile
|
|
16
17
|
from pathlib import Path
|
|
@@ -157,13 +158,83 @@ async def test_external_symlink_never_imports_outside_files(tmp_path):
|
|
|
157
158
|
|
|
158
159
|
|
|
159
160
|
@pytest.mark.asyncio
|
|
160
|
-
|
|
161
|
+
@pytest.mark.parametrize("kind", ["fifo", "socket"])
|
|
162
|
+
async def test_special_files_are_recorded_not_silently_omitted(
|
|
163
|
+
tmp_path, monkeypatch, kind
|
|
164
|
+
):
|
|
165
|
+
"""Guards the evidence-capture fix for automatic review from PR #1126.
|
|
166
|
+
|
|
167
|
+
A socket or FIFO holds no bytes to preserve. Aborting on one discarded the
|
|
168
|
+
solver's whole review; it is now an explicit manifest exclusion and the
|
|
169
|
+
rest of the workspace is still captured.
|
|
170
|
+
"""
|
|
161
171
|
source = tmp_path / "source"
|
|
162
172
|
source.mkdir()
|
|
163
|
-
|
|
173
|
+
(source / "answer.txt").write_text("solver output")
|
|
174
|
+
special = source / "results-pipe"
|
|
175
|
+
if kind == "fifo":
|
|
176
|
+
os.mkfifo(special)
|
|
177
|
+
else:
|
|
178
|
+
# AF_UNIX addresses are length-limited; bind relative to the workspace.
|
|
179
|
+
monkeypatch.chdir(source)
|
|
180
|
+
with socket.socket(socket.AF_UNIX) as server:
|
|
181
|
+
server.bind(special.name)
|
|
182
|
+
bundle = tmp_path / "evidence"
|
|
164
183
|
|
|
165
|
-
|
|
166
|
-
|
|
184
|
+
manifest = await capture_workspace(LocalTransport(), str(source), bundle)
|
|
185
|
+
|
|
186
|
+
assert (bundle / "workspace" / "answer.txt").read_text() == "solver output"
|
|
187
|
+
assert not (bundle / "workspace" / special.name).exists()
|
|
188
|
+
assert [(entry.original_path, entry.reason) for entry in manifest.exclusions] == [
|
|
189
|
+
(str(special), "special_file")
|
|
190
|
+
]
|
|
191
|
+
validate_workspace(bundle / "workspace", manifest)
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
@pytest.mark.asyncio
|
|
195
|
+
async def test_daytona_session_state_never_blocks_or_enters_evidence(tmp_path):
|
|
196
|
+
"""Guards automatic review on Daytona /root workspaces after PR #1126.
|
|
197
|
+
|
|
198
|
+
Daytona's daemon keeps ~/.daytona/sessions in /root: the entrypoint's
|
|
199
|
+
stdin/stdout/stderr FIFOs plus each session command's script, log and exit
|
|
200
|
+
code (layout observed in a live sandbox). Capture aborted on
|
|
201
|
+
input.pipe, so every such rollout lost its review and final reward.
|
|
202
|
+
"""
|
|
203
|
+
source = tmp_path / "root"
|
|
204
|
+
entrypoint = source / ".daytona/sessions/entrypoint/entrypoint_command"
|
|
205
|
+
entrypoint.mkdir(parents=True)
|
|
206
|
+
for pipe in ("input.pipe", "stdout.pipe", "stderr.pipe"):
|
|
207
|
+
os.mkfifo(entrypoint / pipe)
|
|
208
|
+
(entrypoint / "cmd.sh").write_text("sleep infinity\n")
|
|
209
|
+
(entrypoint / "output.log").write_text("")
|
|
210
|
+
command = source / ".daytona/sessions/benchflow-exec/0b5e4c1d"
|
|
211
|
+
command.mkdir(parents=True)
|
|
212
|
+
(command / "cmd.sh").write_text("python3 -c capture\n")
|
|
213
|
+
(command / "exit_code").write_text("0")
|
|
214
|
+
(command / "output.log").write_text("harness output")
|
|
215
|
+
(source / "paper.pdf").write_bytes(b"%PDF-1.7 solver paper")
|
|
216
|
+
(source / "chains").mkdir()
|
|
217
|
+
(source / "chains" / "lcdm.csv").write_text("Om,rdh\n0.30,101.0\n")
|
|
218
|
+
(source / ".daytonarc").write_text("solver file that only resembles provider state")
|
|
219
|
+
(source / "daytona").mkdir()
|
|
220
|
+
(source / "daytona" / "notes.md").write_text("solver notes")
|
|
221
|
+
bundle = tmp_path / "evidence"
|
|
222
|
+
|
|
223
|
+
manifest = await capture_workspace(LocalTransport(), str(source), bundle)
|
|
224
|
+
|
|
225
|
+
assert [(entry.original_path, entry.reason) for entry in manifest.exclusions] == [
|
|
226
|
+
(str(source / ".daytona"), "sandbox_runtime")
|
|
227
|
+
]
|
|
228
|
+
assert not (bundle / "workspace" / ".daytona").exists()
|
|
229
|
+
assert {entry.path for entry in manifest.entries} == {
|
|
230
|
+
".daytonarc",
|
|
231
|
+
"chains",
|
|
232
|
+
"chains/lcdm.csv",
|
|
233
|
+
"daytona",
|
|
234
|
+
"daytona/notes.md",
|
|
235
|
+
"paper.pdf",
|
|
236
|
+
}
|
|
237
|
+
validate_workspace(bundle / "workspace", manifest)
|
|
167
238
|
|
|
168
239
|
|
|
169
240
|
@pytest.mark.asyncio
|
|
@@ -442,10 +513,12 @@ async def test_external_artifact_failure_does_not_publish_partial_task_evidence(
|
|
|
442
513
|
source.mkdir()
|
|
443
514
|
(source / "answer").write_text("fine")
|
|
444
515
|
unsupported = tmp_path / "unsupported-artifact"
|
|
445
|
-
|
|
516
|
+
unsupported.mkdir()
|
|
517
|
+
(tmp_path / "outside-secret").write_text("do not export")
|
|
518
|
+
(unsupported / "escape").symlink_to(tmp_path / "outside-secret")
|
|
446
519
|
bundle = tmp_path / "evidence"
|
|
447
520
|
|
|
448
|
-
with pytest.raises(EvidenceError, match="
|
|
521
|
+
with pytest.raises(EvidenceError, match="symlink escapes"):
|
|
449
522
|
await capture_task_evidence(
|
|
450
523
|
LocalTransport(), str(source), bundle, artifacts=[str(unsupported)]
|
|
451
524
|
)
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"""Guards PR #1127's fix for shell-only capture failures introduced by PR #1126."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
import os
|
|
7
|
+
import shlex
|
|
8
|
+
import shutil
|
|
9
|
+
import sys
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from unittest.mock import AsyncMock, Mock
|
|
12
|
+
|
|
13
|
+
import pytest
|
|
14
|
+
|
|
15
|
+
from benchflow.review.evidence import EvidenceError, capture_workspace
|
|
16
|
+
from benchflow.review.evidence_runtime import ensure_evidence_python
|
|
17
|
+
from benchflow.rollout import Rollout, RolloutConfig
|
|
18
|
+
from benchflow.sandbox.protocol import ExecResult
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class ShellOnlyTransport:
|
|
22
|
+
"""Execute real capture code with Python absent from the initial PATH."""
|
|
23
|
+
|
|
24
|
+
def __init__(self, binary_dir: Path):
|
|
25
|
+
self.binary_dir = binary_dir
|
|
26
|
+
|
|
27
|
+
async def exec(self, cmd, *, user="root", timeout_sec=30):
|
|
28
|
+
assert user == "root"
|
|
29
|
+
process = await asyncio.create_subprocess_exec(
|
|
30
|
+
"/bin/sh",
|
|
31
|
+
"-c",
|
|
32
|
+
cmd,
|
|
33
|
+
env={**os.environ, "PATH": str(self.binary_dir)},
|
|
34
|
+
stdout=asyncio.subprocess.PIPE,
|
|
35
|
+
stderr=asyncio.subprocess.PIPE,
|
|
36
|
+
)
|
|
37
|
+
stdout, stderr = await asyncio.wait_for(process.communicate(), timeout_sec)
|
|
38
|
+
return ExecResult(process.returncode, stdout.decode(), stderr.decode())
|
|
39
|
+
|
|
40
|
+
async def download_file(self, src, dst):
|
|
41
|
+
shutil.copyfile(src, dst)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def shell_image(tmp_path, *, has_python=False, package_manager=False):
|
|
45
|
+
binary_dir = tmp_path / "bin"
|
|
46
|
+
binary_dir.mkdir()
|
|
47
|
+
for name in ("sh", "rm"):
|
|
48
|
+
(binary_dir / name).symlink_to(shutil.which(name))
|
|
49
|
+
python = binary_dir / "python3"
|
|
50
|
+
marker = tmp_path / "package-manager-called"
|
|
51
|
+
if has_python:
|
|
52
|
+
python.symlink_to(sys.executable)
|
|
53
|
+
if package_manager:
|
|
54
|
+
manager = binary_dir / "apt-get"
|
|
55
|
+
manager.write_text(
|
|
56
|
+
"#!/bin/sh\n"
|
|
57
|
+
f": > {shlex.quote(str(marker))}\n"
|
|
58
|
+
'if [ "$1" = install ]; then\n'
|
|
59
|
+
f" /bin/ln -s {shlex.quote(sys.executable)} {shlex.quote(str(python))}\n"
|
|
60
|
+
"fi\n"
|
|
61
|
+
)
|
|
62
|
+
manager.chmod(0o755)
|
|
63
|
+
return ShellOnlyTransport(binary_dir), marker
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
@pytest.mark.asyncio
|
|
67
|
+
async def test_shell_only_task_can_capture_after_trusted_setup(tmp_path):
|
|
68
|
+
"""Guards PR #1127: reproduce missing Python, then capture real evidence."""
|
|
69
|
+
transport, marker = shell_image(tmp_path, package_manager=True)
|
|
70
|
+
source = tmp_path / "workspace"
|
|
71
|
+
source.mkdir()
|
|
72
|
+
(source / "hello.txt").write_text("Hello, world!\n")
|
|
73
|
+
with pytest.raises(EvidenceError, match=r"python3:.*not found"):
|
|
74
|
+
await capture_workspace(transport, str(source), tmp_path / "before")
|
|
75
|
+
|
|
76
|
+
await ensure_evidence_python(transport)
|
|
77
|
+
manifest = await capture_workspace(transport, str(source), tmp_path / "after")
|
|
78
|
+
|
|
79
|
+
assert marker.exists()
|
|
80
|
+
assert [entry.path for entry in manifest.entries] == ["hello.txt"]
|
|
81
|
+
assert (tmp_path / "after/workspace/hello.txt").read_text() == "Hello, world!\n"
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
@pytest.mark.asyncio
|
|
85
|
+
async def test_existing_python_does_not_install_packages(tmp_path):
|
|
86
|
+
"""Guards PR #1127 against changing already compatible task images."""
|
|
87
|
+
transport, marker = shell_image(tmp_path, has_python=True, package_manager=True)
|
|
88
|
+
await ensure_evidence_python(transport)
|
|
89
|
+
assert not marker.exists()
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@pytest.mark.asyncio
|
|
93
|
+
async def test_missing_capture_runtime_fails_before_agent_setup(tmp_path, monkeypatch):
|
|
94
|
+
"""Guards PR #1127 against spending solver budget before a capture failure."""
|
|
95
|
+
transport, _ = shell_image(tmp_path)
|
|
96
|
+
rollout = Rollout(RolloutConfig(task_path=tmp_path, agent="oracle"))
|
|
97
|
+
rollout._env = transport
|
|
98
|
+
rollout._task = Mock()
|
|
99
|
+
rollout._rollout_dir = tmp_path
|
|
100
|
+
rollout._review_plan = object()
|
|
101
|
+
rollout._planes.setup_sandbox_user = AsyncMock()
|
|
102
|
+
monkeypatch.setattr(
|
|
103
|
+
"benchflow.rollout._resolve_agent_cwd", AsyncMock(return_value="/app")
|
|
104
|
+
)
|
|
105
|
+
with pytest.raises(EvidenceError, match="no supported package manager"):
|
|
106
|
+
await rollout.install_agent()
|
|
107
|
+
rollout._planes.setup_sandbox_user.assert_not_awaited()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/build_context_stage.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/config_redaction.py
RENAMED
|
File without changes
|
|
File without changes
|
{benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/dataset_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
{benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/evaluation_results.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/source_provenance.py
RENAMED
|
File without changes
|
{benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/_utils/task_authoring/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{benchflow-0.7.8.dev2347 → benchflow-0.7.9.dev2354}/src/benchflow/acp/container_transport.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|