benchflow 0.6.7.dev1829__tar.gz → 0.6.7.dev1833__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/PKG-INFO +1 -1
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/pyproject.toml +1 -1
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/evaluation_results.py +1 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/acp/container_transport.py +57 -1
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/acp/runtime.py +27 -10
- benchflow-0.6.7.dev1833/src/benchflow/cli/_failure_evidence.py +122 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/_shared.py +47 -18
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/evaluation.py +7 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/process/_base.py +36 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/process/agentcore.py +18 -24
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/process/daytona.py +5 -16
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acp.py +175 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_cli_live_progress.py +206 -2
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_job.py +4 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/.gitignore +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/CHANGELOG.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/LICENSE +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/README.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_paths.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_run.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_types.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/live_activity.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/scoring.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/_utils/yaml_loader.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/acp/client.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/acp/session.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/codex_config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/credentials.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/install.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/registry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/branch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/_live_progress.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/main.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/continue_run/orchestrator.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/contracts/planes.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/eval_plan.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/eval_worker.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/metrics.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/models.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/monitor.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/providers/litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/providers/litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/providers/runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/py.typed +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/review/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/review/config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/review/prompts.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/review/runner.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/review/wrapper.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/_config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/_deadline.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/_results.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/_setup.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout/task_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/rollout_planes.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/_compose.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/agentcore.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/apple_container.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/daytona.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/daytona_dind.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/daytona_strategies.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/docker.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/lockdown.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/process/apple.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/process/docker.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/protocol.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/providers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/setup.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/scenes.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sdk.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/skills.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/document.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/export.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/package.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/task.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/_capture.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/_llm_capture.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/export_trl_sft.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/results.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/types.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/trajectories/viewer.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/README.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/conftest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/_consistency.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/check_results.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/run.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/run_suite.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/scenarios.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_adapters.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_cli.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_registry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_router.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_setup.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agent_spec.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agentcore_parallel.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agentcore_sandbox.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_branch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_cli_misc.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_codex_review.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_config_override.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_config_redaction.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_console_progress.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_daytona_download.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_docs_examples.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_env_registry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_env_setup.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eval_lift.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_integration_suite.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_internet_policy.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_learner_skills.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_learner_store.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_litellm_config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_litellm_reasoning_passthrough.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_live_llm_trajectory.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_llm_judge.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_loop_summary.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_metrics.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_oracle.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_paths_safe.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_process.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_providers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_reexport.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_registry_invariants.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_release_version.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_release_workflow_wiring.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_review_rubric.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_review_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_reward_node.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_reward_range.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rewards.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_hard_deadline.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_planes_contract.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rollout_upload.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_rubric_config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_scene.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_scoring.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skill_eval.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skill_policy.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skills.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_smoke.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_source_adapters.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_digest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_document.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_download.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_export.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_output_format.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_package.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_task_runtime_primitive.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_tasks.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_train_cli.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trial_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_trl_integration.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_usage_required.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_user.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_verifier_document.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_verifier_output.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_verifier_wedge_retry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_verify.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/test_yaml_config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/test_redaction.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/tests/trajectories/test_tree.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: benchflow
|
|
3
|
-
Version: 0.6.7.
|
|
3
|
+
Version: 0.6.7.dev1833
|
|
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
|
{benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/acp/container_transport.py
RENAMED
|
@@ -6,12 +6,58 @@ from pathlib import Path
|
|
|
6
6
|
from typing import Any, TextIO
|
|
7
7
|
|
|
8
8
|
from benchflow.sandbox.process import LiveProcess
|
|
9
|
+
from benchflow.sandbox.process._base import _ANSI_CSI_RE, _ANSI_OSC_RE
|
|
9
10
|
|
|
10
11
|
from .transport import Transport, decode_json_rpc_message
|
|
11
12
|
|
|
12
13
|
logger = logging.getLogger(__name__)
|
|
13
14
|
|
|
14
15
|
|
|
16
|
+
def _decode_pty_json_rpc_message(text: str) -> dict[str, Any] | None:
|
|
17
|
+
"""Decode one JSON-RPC message from a line that may carry PTY noise.
|
|
18
|
+
|
|
19
|
+
Daytona's PTY transport gives the agent a real terminal, so the shell
|
|
20
|
+
prompt (with its CSI/OSC escape sequences) can land on the SAME line as
|
|
21
|
+
the agent's first protocol message — observed on BugSwarm-style images
|
|
22
|
+
as ``\\x1b[?2004h\\x1b]0;root@…\\x07root@…# \\x1b[?2004l{"jsonrpc":…}``.
|
|
23
|
+
Whole-line ``json.loads`` fails on that prefix, the response is treated
|
|
24
|
+
as non-protocol noise, and the handshake "times out" with the completed
|
|
25
|
+
initialize JSON sitting in the captured agent log — at ANY timeout.
|
|
26
|
+
|
|
27
|
+
Recovery is bounded to where the bug lives: :meth:`ContainerTransport.
|
|
28
|
+
receive` calls this lenient path only until the first successfully
|
|
29
|
+
decoded protocol message per connection (prompt glue is by construction
|
|
30
|
+
a pre-first-message PTY phenomenon), and stdio pipes keep the strict
|
|
31
|
+
whole-line contract in :func:`decode_json_rpc_message`.
|
|
32
|
+
|
|
33
|
+
1. fast path — the plain whole-line decode, unchanged;
|
|
34
|
+
2. retry from the first ``{`` when it is not at position 0 (drops a
|
|
35
|
+
glued prompt prefix);
|
|
36
|
+
3. if the line carries ``\\x1b``, strip CSI/OSC sequences (drops escapes
|
|
37
|
+
trailing or embedded around the JSON) and retry from the first ``{``.
|
|
38
|
+
|
|
39
|
+
Every retry still goes through :func:`decode_json_rpc_message`, so the
|
|
40
|
+
JSON-RPC 2.0 envelope check keeps rejecting agent log lines that merely
|
|
41
|
+
contain JSON (e.g. ``INFO {"jsonrpc": …}`` with a bad envelope).
|
|
42
|
+
"""
|
|
43
|
+
message = decode_json_rpc_message(text)
|
|
44
|
+
if message is not None:
|
|
45
|
+
return message
|
|
46
|
+
if "{" not in text:
|
|
47
|
+
return None
|
|
48
|
+
brace = text.index("{")
|
|
49
|
+
if brace: # brace == 0 would just repeat the whole-line decode
|
|
50
|
+
message = decode_json_rpc_message(text[brace:])
|
|
51
|
+
if message is not None:
|
|
52
|
+
return message
|
|
53
|
+
if "\x1b" not in text:
|
|
54
|
+
return None
|
|
55
|
+
cleaned = _ANSI_CSI_RE.sub("", _ANSI_OSC_RE.sub("", text))
|
|
56
|
+
if "{" not in cleaned:
|
|
57
|
+
return None
|
|
58
|
+
return decode_json_rpc_message(cleaned[cleaned.index("{") :])
|
|
59
|
+
|
|
60
|
+
|
|
15
61
|
class ContainerTransport(Transport):
|
|
16
62
|
"""ACP transport that speaks to an agent running inside a sandbox.
|
|
17
63
|
|
|
@@ -34,6 +80,12 @@ class ContainerTransport(Transport):
|
|
|
34
80
|
self._cwd = cwd
|
|
35
81
|
self._agent_log_path = agent_log_path
|
|
36
82
|
self._agent_log_file: TextIO | None = None
|
|
83
|
+
# First-message latch: the lenient PTY-noise decode applies only
|
|
84
|
+
# until the first successfully decoded protocol message (prompt glue
|
|
85
|
+
# is a startup phenomenon). Afterwards the strict whole-line decode
|
|
86
|
+
# rules, so an agent echoing valid protocol envelopes into its logs
|
|
87
|
+
# mid-session can never impersonate protocol traffic.
|
|
88
|
+
self._saw_protocol = False
|
|
37
89
|
|
|
38
90
|
async def start(self) -> None:
|
|
39
91
|
"""Start the agent process inside the sandbox."""
|
|
@@ -65,8 +117,12 @@ class ContainerTransport(Transport):
|
|
|
65
117
|
text = line.decode(errors="replace").strip()
|
|
66
118
|
if not text:
|
|
67
119
|
continue
|
|
68
|
-
|
|
120
|
+
if self._saw_protocol:
|
|
121
|
+
message = decode_json_rpc_message(text)
|
|
122
|
+
else:
|
|
123
|
+
message = _decode_pty_json_rpc_message(text)
|
|
69
124
|
if message is not None:
|
|
125
|
+
self._saw_protocol = True
|
|
70
126
|
return message
|
|
71
127
|
# Capture non-protocol output (agent debug logs, errors, warnings).
|
|
72
128
|
if self._agent_log_path:
|
|
@@ -6,10 +6,11 @@ Owns the live agent-side of a run:
|
|
|
6
6
|
- execute_prompts: send each prompt through the session, capture the
|
|
7
7
|
ACP-native trajectory, and report tool-call counts
|
|
8
8
|
|
|
9
|
-
The
|
|
10
|
-
``from benchflow.sandbox.lockdown import build_priv_drop_cmd
|
|
11
|
-
the agent launch command in the sandbox user's privilege-drop prefix
|
|
12
|
-
before handing it to the transport
|
|
9
|
+
The allowed horizontal phase imports in this refactor live here:
|
|
10
|
+
``from benchflow.sandbox.lockdown import build_priv_drop_cmd`` (connect_acp
|
|
11
|
+
wraps the agent launch command in the sandbox user's privilege-drop prefix
|
|
12
|
+
before handing it to the transport) and the shared timeout-env parser from
|
|
13
|
+
``benchflow.sandbox.process._base``. Both are single pure-function calls
|
|
13
14
|
with no shared state — not a coupling of concerns.
|
|
14
15
|
|
|
15
16
|
Does not own:
|
|
@@ -46,6 +47,7 @@ from benchflow.sandbox.lockdown import (
|
|
|
46
47
|
build_priv_drop_cmd,
|
|
47
48
|
enforce_agent_egress_firewall,
|
|
48
49
|
)
|
|
50
|
+
from benchflow.sandbox.process._base import _timeout_sec_from_env
|
|
49
51
|
from benchflow.trajectories._capture import _capture_session_trajectory
|
|
50
52
|
|
|
51
53
|
# Re-exported for backwards compatibility — tests and downstream code
|
|
@@ -65,10 +67,27 @@ logger = logging.getLogger(__name__)
|
|
|
65
67
|
_ACP_CONNECT_MAX_RETRIES = 3
|
|
66
68
|
_ACP_CONNECT_BASE_DELAY = 2.0
|
|
67
69
|
_PROMPT_CANCEL_DRAIN_TIMEOUT_SEC = 0.25
|
|
68
|
-
|
|
70
|
+
_ACP_HANDSHAKE_TIMEOUT_ENV = "BENCHFLOW_ACP_HANDSHAKE_TIMEOUT"
|
|
71
|
+
_ACP_HANDSHAKE_TIMEOUT_DEFAULT_SEC = 60.0
|
|
69
72
|
_OPENHANDS_DISABLE_SUBAGENTS_ENV = "BENCHFLOW_OPENHANDS_DISABLE_SUBAGENTS"
|
|
70
73
|
|
|
71
74
|
|
|
75
|
+
def _acp_handshake_timeout_sec() -> float:
|
|
76
|
+
"""Effective timeout for the pre-prompt ACP handshake, in seconds.
|
|
77
|
+
|
|
78
|
+
Agent startup cost scales with the task image — heavyweight images
|
|
79
|
+
(workspace scanning, kernel prep) can push the ``initialize`` response
|
|
80
|
+
past the 60s default, so operators can override it with
|
|
81
|
+
``BENCHFLOW_ACP_HANDSHAKE_TIMEOUT`` (seconds). Parsing (use-time read,
|
|
82
|
+
positive-float validation, warn-and-fall-back) is shared with the other
|
|
83
|
+
transport timeout knobs in :mod:`benchflow.sandbox.process._base`.
|
|
84
|
+
"""
|
|
85
|
+
return _timeout_sec_from_env(
|
|
86
|
+
_ACP_HANDSHAKE_TIMEOUT_ENV,
|
|
87
|
+
_ACP_HANDSHAKE_TIMEOUT_DEFAULT_SEC,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
|
|
72
91
|
async def _prepare_openhands_direct_execution(
|
|
73
92
|
env,
|
|
74
93
|
*,
|
|
@@ -129,13 +148,11 @@ async def _prepare_openhands_direct_execution(
|
|
|
129
148
|
|
|
130
149
|
|
|
131
150
|
async def _wait_for_acp_handshake(awaitable, *, phase: str):
|
|
151
|
+
timeout_sec = _acp_handshake_timeout_sec()
|
|
132
152
|
try:
|
|
133
|
-
return await asyncio.wait_for(awaitable, timeout=
|
|
153
|
+
return await asyncio.wait_for(awaitable, timeout=timeout_sec)
|
|
134
154
|
except TimeoutError as e:
|
|
135
|
-
msg =
|
|
136
|
-
f"ACP {phase} timed out after {_ACP_HANDSHAKE_TIMEOUT_SEC}s "
|
|
137
|
-
"before the first prompt"
|
|
138
|
-
)
|
|
155
|
+
msg = f"ACP {phase} timed out after {timeout_sec:g}s before the first prompt"
|
|
139
156
|
raise TransportClosedError(
|
|
140
157
|
msg,
|
|
141
158
|
TransportClosedDiagnostic(
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"""Verifier-artifact mining for the eval report's failure lines.
|
|
2
|
+
|
|
3
|
+
The one file-touching corner of the CLI's final report block: when a failed
|
|
4
|
+
task's reason would otherwise be the bare ``reward X`` fallback, mine the
|
|
5
|
+
rollout's verifier artifacts for a one-line explanation. Lives in its own
|
|
6
|
+
module so ``cli/_shared.py`` stays the side-effect-free display helpers it
|
|
7
|
+
advertises.
|
|
8
|
+
|
|
9
|
+
Contract (the engine stays file-free — these reads are CLI-side, report-time
|
|
10
|
+
only):
|
|
11
|
+
|
|
12
|
+
- The rollout dir is resolved exactly, from the ``rollout_name`` the engine
|
|
13
|
+
records on every result — never guessed from globs.
|
|
14
|
+
- Evidence sources are tried in order (CTRF report, then test-stdout tail);
|
|
15
|
+
the first that yields a line wins.
|
|
16
|
+
- Every read is bounded (``_ARTIFACT_READ_BYTES`` per file) and nothing here
|
|
17
|
+
raises — any surprise degrades to ``None``, i.e. the bare reward reason.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import json
|
|
23
|
+
import re
|
|
24
|
+
from typing import TYPE_CHECKING
|
|
25
|
+
|
|
26
|
+
if TYPE_CHECKING:
|
|
27
|
+
from collections.abc import Callable
|
|
28
|
+
from pathlib import Path
|
|
29
|
+
|
|
30
|
+
# Never read more than this many bytes per file, and evidence is only mined
|
|
31
|
+
# for the <= _MAX_FAILURE_LINES tasks the report block displays.
|
|
32
|
+
_ARTIFACT_READ_BYTES = 64 * 1024
|
|
33
|
+
# Pytest final summary, decoration stripped: "1 failed, 2 passed in 40.86s".
|
|
34
|
+
_PYTEST_SUMMARY_RE = re.compile(r"\d+ failed\b")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _ctrf_failure_line(ctrf_path: Path) -> str | None:
|
|
38
|
+
"""``<test> failed[: <assertion>]`` from the first failed CTRF test.
|
|
39
|
+
|
|
40
|
+
The verifier's pytest run writes a CTRF report (``pytest --ctrf``, see the
|
|
41
|
+
standard path in ``task_authoring/structural_checks.py``). Per test the
|
|
42
|
+
useful failure evidence is the ``E …`` assertion line inside ``trace``;
|
|
43
|
+
``message`` is only a generic phase description, so it is the fallback.
|
|
44
|
+
"""
|
|
45
|
+
if ctrf_path.stat().st_size > _ARTIFACT_READ_BYTES:
|
|
46
|
+
# JSON only parses whole — an oversized report is skipped (not
|
|
47
|
+
# truncated) and the next evidence source gets its turn.
|
|
48
|
+
return None
|
|
49
|
+
data = json.loads(ctrf_path.read_text(encoding="utf-8", errors="replace"))
|
|
50
|
+
tests = (data.get("results") or {}).get("tests") or []
|
|
51
|
+
for test in tests:
|
|
52
|
+
if not isinstance(test, dict) or test.get("status") != "failed":
|
|
53
|
+
continue
|
|
54
|
+
# Full pytest node ids ("tests/test_x.py::test_build") waste the
|
|
55
|
+
# 100-char line budget; keep the test function name.
|
|
56
|
+
name = str(test.get("name") or "test").rsplit("::", 1)[-1]
|
|
57
|
+
trace = test.get("trace")
|
|
58
|
+
if isinstance(trace, str):
|
|
59
|
+
for line in trace.splitlines():
|
|
60
|
+
stripped = line.strip()
|
|
61
|
+
if stripped.startswith("E "):
|
|
62
|
+
assertion = stripped[2:].strip()
|
|
63
|
+
# "<test> failed:" already says it's an assertion — drop
|
|
64
|
+
# the prefix to reclaim line budget for the message.
|
|
65
|
+
assertion = assertion.removeprefix("AssertionError: ")
|
|
66
|
+
return f"{name} failed: {assertion}"
|
|
67
|
+
message = test.get("message")
|
|
68
|
+
if isinstance(message, str) and message.strip():
|
|
69
|
+
return f"{name} failed: {' '.join(message.split())}"
|
|
70
|
+
return f"{name} failed"
|
|
71
|
+
return None
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def _stdout_tail_failure_line(stdout_path: Path) -> str | None:
|
|
75
|
+
"""Last pytest summary ("N failed, M passed …") — else last ``FAILED …``
|
|
76
|
+
line — from a bounded tail of the verifier's test-stdout capture."""
|
|
77
|
+
with stdout_path.open("rb") as fh:
|
|
78
|
+
fh.seek(0, 2) # SEEK_END
|
|
79
|
+
fh.seek(max(0, fh.tell() - _ARTIFACT_READ_BYTES))
|
|
80
|
+
tail = fh.read(_ARTIFACT_READ_BYTES).decode("utf-8", errors="replace")
|
|
81
|
+
last_failed: str | None = None
|
|
82
|
+
for line in reversed(tail.splitlines()):
|
|
83
|
+
bare = line.strip().strip("=").strip()
|
|
84
|
+
if _PYTEST_SUMMARY_RE.match(bare):
|
|
85
|
+
return bare
|
|
86
|
+
if last_failed is None and line.strip().startswith("FAILED "):
|
|
87
|
+
last_failed = line.strip()
|
|
88
|
+
return last_failed
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def artifact_failure_evidence(
|
|
92
|
+
job_dir: Path, rollout_name: str
|
|
93
|
+
) -> tuple[str, Path] | None:
|
|
94
|
+
"""One-liner mined from the rollout's verifier artifacts, or ``None``.
|
|
95
|
+
|
|
96
|
+
Returns the one-liner plus the verifier dir it came from (for the report
|
|
97
|
+
block's single ``(details: …)`` pointer line). Never raises.
|
|
98
|
+
"""
|
|
99
|
+
# Local import: RolloutPaths pulls in the task package, which the CLI
|
|
100
|
+
# shouldn't pay for until a failure actually needs artifact evidence.
|
|
101
|
+
from benchflow.task.paths import RolloutPaths
|
|
102
|
+
|
|
103
|
+
rollout_paths = RolloutPaths(rollout_dir=job_dir / rollout_name)
|
|
104
|
+
verifier_dir = rollout_paths.verifier_dir
|
|
105
|
+
attempts: list[tuple[Path, Callable[[Path], str | None]]] = [
|
|
106
|
+
# ctrf.json has no RolloutPaths property — the verifier recovers it by
|
|
107
|
+
# literal name (verifier_core.py, `_recover_main_verifier_outputs`).
|
|
108
|
+
(verifier_dir / "ctrf.json", _ctrf_failure_line),
|
|
109
|
+
(rollout_paths.test_stdout_path, _stdout_tail_failure_line),
|
|
110
|
+
]
|
|
111
|
+
for path, extract in attempts:
|
|
112
|
+
try:
|
|
113
|
+
if not path.is_file():
|
|
114
|
+
continue
|
|
115
|
+
detail = extract(path)
|
|
116
|
+
except Exception:
|
|
117
|
+
# Unreadable file, bad JSON, permissions … try the next source;
|
|
118
|
+
# the report must never crash over evidence mining.
|
|
119
|
+
continue
|
|
120
|
+
if detail is not None:
|
|
121
|
+
return detail, verifier_dir
|
|
122
|
+
return None
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
These are the cross-cutting, side-effect-free helpers that several CLI command
|
|
4
4
|
groups (``cli/main.py`` and the ``cli/<group>.py`` modules) need in common: the
|
|
5
5
|
shared Rich :data:`console`, the evaluation-result summary/exit helpers, and the
|
|
6
|
-
agent ``Requires`` rendering used by ``agents``/``agent`` listings.
|
|
6
|
+
agent ``Requires`` rendering used by ``agents``/``agent`` listings. The one
|
|
7
|
+
file-reading step of the eval report (mining verifier artifacts for failure
|
|
8
|
+
evidence) is delegated to :mod:`._failure_evidence` to keep that claim true.
|
|
7
9
|
|
|
8
10
|
Keeping them here lets each command group import one stable surface instead of
|
|
9
11
|
re-deriving the formatting, and lets ``cli/main.py`` stay a thin app + eval
|
|
@@ -19,6 +21,7 @@ from rich.console import Console
|
|
|
19
21
|
from rich.markup import escape
|
|
20
22
|
|
|
21
23
|
from benchflow._utils.text import truncate_end
|
|
24
|
+
from benchflow.cli._failure_evidence import artifact_failure_evidence
|
|
22
25
|
|
|
23
26
|
if TYPE_CHECKING:
|
|
24
27
|
from pathlib import Path
|
|
@@ -109,17 +112,24 @@ _FAILURE_LINE_LIMIT = 100
|
|
|
109
112
|
_FAILURE_REASON_METRICS = 3
|
|
110
113
|
|
|
111
114
|
|
|
112
|
-
def _failure_reason(
|
|
115
|
+
def _failure_reason(
|
|
116
|
+
failure: TaskFailure, job_dir: Path | None = None
|
|
117
|
+
) -> tuple[str, Path | None]:
|
|
113
118
|
"""One cheap line explaining why a FAILED (scored, reward != 1) task
|
|
114
|
-
failed,
|
|
119
|
+
failed, plus the verifier dir when artifacts supplied the evidence.
|
|
115
120
|
|
|
116
121
|
Priority: the verifier's own error if set; else the reward plus a compact
|
|
117
122
|
breakdown of the named metrics in the reward dict (zero/failed metrics
|
|
118
|
-
first — they explain the miss); else
|
|
123
|
+
first — they explain the miss); else the reward plus a one-liner mined
|
|
124
|
+
from the rollout's verifier artifacts (bounded CLI-side reads resolved via
|
|
125
|
+
the ``rollout_name`` the engine records — the engine stays file-free);
|
|
126
|
+
else just the reward. The returned path is non-``None`` only for the
|
|
127
|
+
artifact tier, so the caller can print one ``(details: …)`` pointer per
|
|
128
|
+
report block.
|
|
119
129
|
"""
|
|
120
130
|
if failure.verifier_error:
|
|
121
131
|
# Collapse whitespace: verifier errors are routinely multi-line.
|
|
122
|
-
return " ".join(failure.verifier_error.split())
|
|
132
|
+
return " ".join(failure.verifier_error.split()), None
|
|
123
133
|
rewards = failure.rewards or {}
|
|
124
134
|
reward = rewards.get("reward")
|
|
125
135
|
metrics = [
|
|
@@ -127,15 +137,22 @@ def _failure_reason(failure: TaskFailure) -> str:
|
|
|
127
137
|
for name, value in rewards.items()
|
|
128
138
|
if name != "reward" and isinstance(value, (bool, int, float))
|
|
129
139
|
]
|
|
130
|
-
if
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
140
|
+
if metrics:
|
|
141
|
+
# Zero/failed metrics first (stable within each group), capped so one
|
|
142
|
+
# metric-happy verifier can't flood the line.
|
|
143
|
+
metrics.sort(key=lambda kv: kv[1] != 0)
|
|
144
|
+
shown = ", ".join(
|
|
145
|
+
f"{name} {value}" for name, value in metrics[:_FAILURE_REASON_METRICS]
|
|
146
|
+
)
|
|
147
|
+
return f"reward {reward} — {shown}", None
|
|
148
|
+
# No rollout_name (pre-#957-follow-up result.json, sharded aggregation):
|
|
149
|
+
# nothing to resolve — the bare reward is as honest as it gets.
|
|
150
|
+
if job_dir is not None and failure.rollout_name:
|
|
151
|
+
evidence = artifact_failure_evidence(job_dir, failure.rollout_name)
|
|
152
|
+
if evidence is not None:
|
|
153
|
+
detail, verifier_dir = evidence
|
|
154
|
+
return f"reward {reward} — {detail}", verifier_dir
|
|
155
|
+
return f"reward {reward}", None
|
|
139
156
|
|
|
140
157
|
|
|
141
158
|
def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -> None:
|
|
@@ -145,9 +162,13 @@ def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -
|
|
|
145
162
|
now the line is green only on a full clean pass, red on a shutout, amber
|
|
146
163
|
otherwise, and ``errors=N`` is red when non-zero. Each FAILED task gets one
|
|
147
164
|
dim ``✗ task: reason`` line (capped at ``_MAX_FAILURE_LINES``) so the "why"
|
|
148
|
-
doesn't require opening summary.json
|
|
149
|
-
|
|
150
|
-
|
|
165
|
+
doesn't require opening summary.json; when ``job_dir`` is given, a reason
|
|
166
|
+
that would otherwise be a bare ``reward X`` is upgraded from the rollout's
|
|
167
|
+
verifier artifacts (bounded reads, displayed failures only), with a single
|
|
168
|
+
``(details: …/verifier)`` pointer line for the block. When ``job_dir`` is
|
|
169
|
+
given, the result/summary paths are printed so testers know where to look
|
|
170
|
+
(the guide repeatedly says "read summary.json" but the CLI never said
|
|
171
|
+
where).
|
|
151
172
|
"""
|
|
152
173
|
errors = int(getattr(result, "errored", 0) or 0)
|
|
153
174
|
verifier_errors = int(getattr(result, "verifier_errored", 0) or 0)
|
|
@@ -176,15 +197,23 @@ def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -
|
|
|
176
197
|
# summary.json to learn why. getattr(): sharded aggregation and older
|
|
177
198
|
# SimpleNamespace-style callers don't carry task_failures.
|
|
178
199
|
failures = getattr(result, "task_failures", None) or []
|
|
200
|
+
artifact_pointer: Path | None = None
|
|
179
201
|
for failure in failures[:_MAX_FAILURE_LINES]:
|
|
202
|
+
reason, verifier_dir = _failure_reason(failure, job_dir)
|
|
203
|
+
if artifact_pointer is None and verifier_dir is not None:
|
|
204
|
+
artifact_pointer = verifier_dir
|
|
180
205
|
line = truncate_end(
|
|
181
|
-
f" ✗ {failure.task_name}: {
|
|
206
|
+
f" ✗ {failure.task_name}: {reason}",
|
|
182
207
|
_FAILURE_LINE_LIMIT,
|
|
183
208
|
)
|
|
184
209
|
console.print(f"[dim]{escape(line)}[/dim]")
|
|
185
210
|
extra = len(failures) - _MAX_FAILURE_LINES
|
|
186
211
|
if extra > 0:
|
|
187
212
|
console.print(f"[dim] … and {extra} more[/dim]")
|
|
213
|
+
# One pointer per block (not per line): the first artifact-backed reason's
|
|
214
|
+
# verifier dir, so "where do I look next" needs no summary.json dig either.
|
|
215
|
+
if artifact_pointer is not None:
|
|
216
|
+
console.print(f"[dim] (details: {escape(str(artifact_pointer))})[/dim]")
|
|
188
217
|
if job_dir is not None:
|
|
189
218
|
console.print(f"[dim]Artifacts:[/dim] {escape(str(job_dir))}")
|
|
190
219
|
console.print(f"[dim]Summary: [/dim] {escape(str(job_dir))}/summary.json")
|
|
@@ -588,6 +588,10 @@ class TaskFailure:
|
|
|
588
588
|
task_name: str
|
|
589
589
|
rewards: dict[str, Any] | None
|
|
590
590
|
verifier_error: str | None
|
|
591
|
+
# The task's rollout dir name under the job dir (``<task>__<uuid8>``), so
|
|
592
|
+
# the CLI can find the rollout's verifier artifacts without guessing.
|
|
593
|
+
# None on results persisted before the key existed.
|
|
594
|
+
rollout_name: str | None = None
|
|
591
595
|
|
|
592
596
|
|
|
593
597
|
@dataclass
|
|
@@ -1801,6 +1805,9 @@ class Evaluation:
|
|
|
1801
1805
|
task_name=name,
|
|
1802
1806
|
rewards=r.get("rewards"),
|
|
1803
1807
|
verifier_error=r.get("verifier_error"),
|
|
1808
|
+
# `or None`: RolloutResult defaults rollout_name to "" — don't
|
|
1809
|
+
# let that masquerade as a resolvable rollout dir.
|
|
1810
|
+
rollout_name=r.get("rollout_name") or None,
|
|
1804
1811
|
)
|
|
1805
1812
|
for name, r in sorted(all_results.items())
|
|
1806
1813
|
if classify_score_outcome(r) == "failed"
|
|
@@ -23,6 +23,7 @@ from __future__ import annotations
|
|
|
23
23
|
import asyncio
|
|
24
24
|
import contextlib
|
|
25
25
|
import logging
|
|
26
|
+
import os
|
|
26
27
|
import re
|
|
27
28
|
from abc import ABC, abstractmethod
|
|
28
29
|
|
|
@@ -33,6 +34,41 @@ _DIAG_TRUNCATE = 2000 # max chars for diagnostic stderr in error messages
|
|
|
33
34
|
_BOOTSTRAP_DONE = "__BENCHFLOW_BOOTSTRAP_DONE__"
|
|
34
35
|
_ENV_KEY_RE = re.compile(r"^[A-Za-z_][A-Za-z0-9_]*$")
|
|
35
36
|
|
|
37
|
+
# Terminal control sequences a PTY-backed transport can interleave with
|
|
38
|
+
# protocol output: ECMA-48 CSI (parameter bytes 0x30-0x3F, intermediate
|
|
39
|
+
# bytes 0x20-0x2F, one final byte 0x40-0x7E) and OSC (BEL- or ST-terminated,
|
|
40
|
+
# e.g. the ``\x1b]0;<title>\x07`` window-title update shell prompts emit).
|
|
41
|
+
# One canonical pair — the AgentCore stdout chunker and the ACP container
|
|
42
|
+
# transport must not drift apart on what counts as terminal noise.
|
|
43
|
+
_ANSI_CSI_PATTERN = r"\x1b\[[0-?]*[ -/]*[@-~]"
|
|
44
|
+
_ANSI_OSC_PATTERN = r"\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)"
|
|
45
|
+
_ANSI_CSI_RE = re.compile(_ANSI_CSI_PATTERN)
|
|
46
|
+
_ANSI_OSC_RE = re.compile(_ANSI_OSC_PATTERN)
|
|
47
|
+
_ANSI_CSI_RE_BYTES = re.compile(_ANSI_CSI_PATTERN.encode())
|
|
48
|
+
_ANSI_OSC_RE_BYTES = re.compile(_ANSI_OSC_PATTERN.encode())
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def _timeout_sec_from_env(env_var: str, default: float) -> float:
|
|
52
|
+
"""Read a positive seconds value from *env_var*, else *default*.
|
|
53
|
+
|
|
54
|
+
The one parser for operator-tunable timeout knobs on this plane (PTY
|
|
55
|
+
readline timeouts, the ACP handshake window). Read at use time so
|
|
56
|
+
long-lived processes and tests see env changes. Unset or empty means
|
|
57
|
+
the default; non-numeric, non-positive, or NaN values warn and fall
|
|
58
|
+
back rather than disabling or breaking the guarded wait.
|
|
59
|
+
"""
|
|
60
|
+
raw = os.environ.get(env_var)
|
|
61
|
+
if raw is None or not raw.strip():
|
|
62
|
+
return default
|
|
63
|
+
try:
|
|
64
|
+
value = float(raw)
|
|
65
|
+
except ValueError:
|
|
66
|
+
value = float("nan")
|
|
67
|
+
if not value > 0: # also rejects NaN
|
|
68
|
+
logger.warning("Invalid %s=%r; using default %.0fs", env_var, raw, default)
|
|
69
|
+
return default
|
|
70
|
+
return value
|
|
71
|
+
|
|
36
72
|
|
|
37
73
|
async def drain_oversized_line(reader: asyncio.StreamReader) -> int:
|
|
38
74
|
"""Drain an oversized line from *reader* after a buffer overflow.
|
{benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/process/agentcore.py
RENAMED
|
@@ -19,12 +19,17 @@ from __future__ import annotations
|
|
|
19
19
|
import asyncio
|
|
20
20
|
import contextlib
|
|
21
21
|
import logging
|
|
22
|
-
import re
|
|
23
22
|
import shlex
|
|
24
23
|
import uuid
|
|
25
24
|
from typing import Any
|
|
26
25
|
|
|
27
|
-
from benchflow.sandbox.process._base import
|
|
26
|
+
from benchflow.sandbox.process._base import (
|
|
27
|
+
_ANSI_CSI_RE_BYTES,
|
|
28
|
+
_ANSI_OSC_RE_BYTES,
|
|
29
|
+
_ENV_KEY_RE,
|
|
30
|
+
LiveProcess,
|
|
31
|
+
_timeout_sec_from_env,
|
|
32
|
+
)
|
|
28
33
|
|
|
29
34
|
logger = logging.getLogger(__name__)
|
|
30
35
|
|
|
@@ -38,26 +43,10 @@ _READER_ENDED = object()
|
|
|
38
43
|
_START_MARKER_TIMEOUT_SEC = 180
|
|
39
44
|
_READLINE_TIMEOUT_ENV = "BENCHFLOW_AGENTCORE_READLINE_TIMEOUT"
|
|
40
45
|
_READLINE_TIMEOUT_DEFAULT_SEC = 900.0
|
|
41
|
-
_ANSI_CSI_RE = re.compile(rb"\x1b\[[0-?]*[ -/]*[@-~]")
|
|
42
46
|
|
|
43
47
|
|
|
44
48
|
def _readline_timeout_sec() -> float:
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
value = os.environ.get(_READLINE_TIMEOUT_ENV)
|
|
48
|
-
if value is None:
|
|
49
|
-
return _READLINE_TIMEOUT_DEFAULT_SEC
|
|
50
|
-
try:
|
|
51
|
-
timeout = float(value)
|
|
52
|
-
except ValueError:
|
|
53
|
-
logger.warning(
|
|
54
|
-
"Invalid %s=%r; using default %.0fs",
|
|
55
|
-
_READLINE_TIMEOUT_ENV,
|
|
56
|
-
value,
|
|
57
|
-
_READLINE_TIMEOUT_DEFAULT_SEC,
|
|
58
|
-
)
|
|
59
|
-
return _READLINE_TIMEOUT_DEFAULT_SEC
|
|
60
|
-
return timeout if timeout > 0 else _READLINE_TIMEOUT_DEFAULT_SEC
|
|
49
|
+
return _timeout_sec_from_env(_READLINE_TIMEOUT_ENV, _READLINE_TIMEOUT_DEFAULT_SEC)
|
|
61
50
|
|
|
62
51
|
|
|
63
52
|
class AgentCoreProcess(LiveProcess):
|
|
@@ -119,9 +108,12 @@ class AgentCoreProcess(LiveProcess):
|
|
|
119
108
|
line, self._partial = self._partial.split(b"\n", 1)
|
|
120
109
|
# Bash/readline emits bracketed-paste CSI sequences when a
|
|
121
110
|
# command takes over the PTY, including a standalone
|
|
122
|
-
# ``ESC[?2004l`` *after* the startup marker
|
|
123
|
-
#
|
|
124
|
-
|
|
111
|
+
# ``ESC[?2004l`` *after* the startup marker, and shell
|
|
112
|
+
# prompts emit OSC window-title updates. Those bytes are
|
|
113
|
+
# terminal state, never ACP JSON-RPC.
|
|
114
|
+
line = line.replace(b"\r", b"")
|
|
115
|
+
line = _ANSI_OSC_RE_BYTES.sub(b"", line)
|
|
116
|
+
line = _ANSI_CSI_RE_BYTES.sub(b"", line)
|
|
125
117
|
if line:
|
|
126
118
|
await self._line_buffer.put(line + b"\n")
|
|
127
119
|
except asyncio.CancelledError:
|
|
@@ -308,8 +300,10 @@ class AgentCoreProcess(LiveProcess):
|
|
|
308
300
|
# before echo suppression takes effect. Substring matching accepts
|
|
309
301
|
# that echoed command and releases startup too early, putting the
|
|
310
302
|
# prompt/command noise into ACP's JSON-RPC stream. The real marker
|
|
311
|
-
# is its own line, possibly wrapped in bracketed-paste ANSI codes
|
|
312
|
-
|
|
303
|
+
# is its own line, possibly wrapped in bracketed-paste ANSI codes
|
|
304
|
+
# or an OSC window-title update from the shell prompt.
|
|
305
|
+
cleaned = _ANSI_CSI_RE_BYTES.sub(b"", _ANSI_OSC_RE_BYTES.sub(b"", line))
|
|
306
|
+
text = cleaned.decode(errors="replace").strip()
|
|
313
307
|
if text == marker:
|
|
314
308
|
return
|
|
315
309
|
|
{benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1833}/src/benchflow/sandbox/process/daytona.py
RENAMED
|
@@ -18,6 +18,7 @@ from benchflow.sandbox.process._base import (
|
|
|
18
18
|
_ENV_KEY_RE,
|
|
19
19
|
LiveProcess,
|
|
20
20
|
SubprocessLiveProcess,
|
|
21
|
+
_timeout_sec_from_env,
|
|
21
22
|
)
|
|
22
23
|
|
|
23
24
|
logger = logging.getLogger(__name__)
|
|
@@ -30,22 +31,10 @@ _DAYTONA_SSH_SERVER_ALIVE_COUNT_MAX = 12
|
|
|
30
31
|
|
|
31
32
|
|
|
32
33
|
def _daytona_pty_readline_timeout_sec() -> float:
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
timeout = float(value)
|
|
38
|
-
except ValueError:
|
|
39
|
-
logger.warning(
|
|
40
|
-
"Invalid %s=%r; using default %.0fs",
|
|
41
|
-
_DAYTONA_PTY_READLINE_TIMEOUT_ENV,
|
|
42
|
-
value,
|
|
43
|
-
_DAYTONA_PTY_READLINE_TIMEOUT_DEFAULT_SEC,
|
|
44
|
-
)
|
|
45
|
-
return _DAYTONA_PTY_READLINE_TIMEOUT_DEFAULT_SEC
|
|
46
|
-
if timeout <= 0:
|
|
47
|
-
return _DAYTONA_PTY_READLINE_TIMEOUT_DEFAULT_SEC
|
|
48
|
-
return timeout
|
|
34
|
+
return _timeout_sec_from_env(
|
|
35
|
+
_DAYTONA_PTY_READLINE_TIMEOUT_ENV,
|
|
36
|
+
_DAYTONA_PTY_READLINE_TIMEOUT_DEFAULT_SEC,
|
|
37
|
+
)
|
|
49
38
|
|
|
50
39
|
|
|
51
40
|
async def _cleanup_daytona_remote_env_file(
|