benchflow 0.6.7.dev1829__tar.gz → 0.6.7.dev1831__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.dev1831}/PKG-INFO +1 -1
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/pyproject.toml +1 -1
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/acp/container_transport.py +57 -1
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/acp/runtime.py +27 -10
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/_base.py +36 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/agentcore.py +18 -24
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/daytona.py +5 -16
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acp.py +175 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/.gitignore +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/CHANGELOG.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/LICENSE +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/README.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_paths.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_run.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_types.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/evaluation_results.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/live_activity.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/scoring.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/yaml_loader.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/acp/client.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/acp/session.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/codex_config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/credentials.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/install.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/registry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/branch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/_live_progress.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/_shared.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/main.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/orchestrator.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/contracts/planes.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/eval_plan.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/eval_worker.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/evaluation.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/metrics.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/models.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/monitor.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/providers/litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/providers/runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/py.typed +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/review/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/review/config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/review/prompts.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/review/runner.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/review/wrapper.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_deadline.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_results.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_setup.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout/task_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/rollout_planes.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/apple_container.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona_dind.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/daytona_strategies.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/docker.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/lockdown.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/apple.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/process/docker.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/protocol.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/providers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/setup.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/scenes.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/sdk.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/skills.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/document.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/export.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/package.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/task.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/_capture.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/_llm_capture.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/export_trl_sft.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/results.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/types.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/trajectories/viewer.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/README.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/conftest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/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.dev1831}/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.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/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.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/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.dev1831}/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.dev1831}/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.dev1831}/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.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/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.dev1831}/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.dev1831}/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.dev1831}/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.dev1831}/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.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/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.dev1831}/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.dev1831}/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.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/_consistency.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/check_results.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/run.sh +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/run_suite.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/scenarios.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_adapters.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_cli.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_registry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_router.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_setup.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agent_spec.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agentcore_parallel.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agentcore_sandbox.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_branch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_cli_live_progress.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_cli_misc.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_codex_review.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_config_override.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_config_redaction.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_console_progress.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_daytona_download.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_docs_examples.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_env_registry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_env_setup.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eval_lift.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_integration_suite.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_internet_policy.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_job.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_learner_skills.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_learner_store.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_litellm_config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_litellm_reasoning_passthrough.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_live_llm_trajectory.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_llm_judge.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_loop_summary.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_metrics.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_oracle.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_paths_safe.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_process.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_providers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_reexport.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_registry_invariants.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_release_version.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_release_workflow_wiring.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_review_rubric.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_review_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_reward_node.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_reward_range.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rewards.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_hard_deadline.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_planes_contract.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rollout_upload.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_rubric_config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_scene.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_scoring.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skill_eval.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skill_policy.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skills.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_smoke.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_source_adapters.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_digest.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_document.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_download.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_export.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_output_format.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_package.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_task_runtime_primitive.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_tasks.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_train_cli.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trial_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_trl_integration.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_usage_required.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_user.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_verifier_document.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_verifier_output.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_verifier_wedge_retry.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_verify.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/test_yaml_config.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/test_redaction.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/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.dev1831
|
|
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.dev1831}/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(
|
|
@@ -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.dev1831}/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.dev1831}/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(
|
|
@@ -613,6 +613,132 @@ class TestTransportProtocolFiltering:
|
|
|
613
613
|
)
|
|
614
614
|
|
|
615
615
|
|
|
616
|
+
class TestContainerTransportPtyNoise:
|
|
617
|
+
"""PTY-glued shell noise must not hide a protocol message on the same line.
|
|
618
|
+
|
|
619
|
+
Daytona's PTY transport gives the agent a real terminal; on BugSwarm-style
|
|
620
|
+
images the shell prompt (bracketed-paste CSI + OSC window title) lands on
|
|
621
|
+
the SAME pty line as the agent's initialize response. Whole-line json.loads
|
|
622
|
+
fails, the response is filed as non-protocol noise, and the handshake
|
|
623
|
+
"times out" at ANY window with the completed JSON sitting in the agent log
|
|
624
|
+
(observed 6/6 on fix-build-agentops at both 60s and 300s).
|
|
625
|
+
"""
|
|
626
|
+
|
|
627
|
+
# Exact shape captured from the failing run's agent/prime_agent.txt:
|
|
628
|
+
# bracketed-paste on, OSC 0 window title, prompt, bracketed-paste off,
|
|
629
|
+
# then the agent's initialize response glued on the same line.
|
|
630
|
+
PROMPT_GLUED_INIT = (
|
|
631
|
+
b"\x1b[?2004h"
|
|
632
|
+
b"\x1b]0;root@9ec4903f-9479-4754-9039-d1b5a544cb28: /home/github/build\x07"
|
|
633
|
+
b"root@9ec4903f-9479-4754-9039-d1b5a544cb28:/home/github/build# "
|
|
634
|
+
b"\x1b[?2004l"
|
|
635
|
+
b'{"jsonrpc": "2.0", "id": 100001, "result": {"protocolVersion": 1}}\n'
|
|
636
|
+
)
|
|
637
|
+
|
|
638
|
+
@pytest.mark.asyncio
|
|
639
|
+
async def test_prompt_glued_initialize_response_decodes(self, tmp_path) -> None:
|
|
640
|
+
fake_process = AsyncMock()
|
|
641
|
+
fake_process.readline = AsyncMock(return_value=self.PROMPT_GLUED_INIT)
|
|
642
|
+
agent_log = tmp_path / "agent" / "prime_agent.txt"
|
|
643
|
+
transport = ContainerTransport(
|
|
644
|
+
container_process=fake_process,
|
|
645
|
+
command="agent acp",
|
|
646
|
+
agent_log_path=agent_log,
|
|
647
|
+
)
|
|
648
|
+
|
|
649
|
+
await transport.start()
|
|
650
|
+
try:
|
|
651
|
+
msg = await asyncio.wait_for(transport.receive(), timeout=5)
|
|
652
|
+
finally:
|
|
653
|
+
await transport.close()
|
|
654
|
+
|
|
655
|
+
assert msg == {
|
|
656
|
+
"jsonrpc": "2.0",
|
|
657
|
+
"id": 100001,
|
|
658
|
+
"result": {"protocolVersion": 1},
|
|
659
|
+
}
|
|
660
|
+
# Decoded as protocol — nothing should be filed as noise.
|
|
661
|
+
assert not agent_log.exists()
|
|
662
|
+
|
|
663
|
+
def test_json_trailed_by_ansi_escapes_decodes(self) -> None:
|
|
664
|
+
"""The CSI/OSC strip path recovers JSON with trailing escape noise."""
|
|
665
|
+
from benchflow.acp.container_transport import _decode_pty_json_rpc_message
|
|
666
|
+
|
|
667
|
+
line = '\x1b[?2004l{"jsonrpc": "2.0", "id": 7, "result": {}}\x1b[K'
|
|
668
|
+
assert _decode_pty_json_rpc_message(line) == {
|
|
669
|
+
"jsonrpc": "2.0",
|
|
670
|
+
"id": 7,
|
|
671
|
+
"result": {},
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
def test_log_line_with_invalid_envelope_still_rejected(self) -> None:
|
|
675
|
+
"""A log line that merely contains JSON must stay non-protocol noise."""
|
|
676
|
+
from benchflow.acp.container_transport import _decode_pty_json_rpc_message
|
|
677
|
+
|
|
678
|
+
# Valid JSON after the first "{", but not a valid JSON-RPC envelope
|
|
679
|
+
# (no method, no result/error) — the envelope check must still reject.
|
|
680
|
+
assert (
|
|
681
|
+
_decode_pty_json_rpc_message('INFO {"jsonrpc": "2.0", "note": "boot"}')
|
|
682
|
+
is None
|
|
683
|
+
)
|
|
684
|
+
assert _decode_pty_json_rpc_message("plain log line, no json") is None
|
|
685
|
+
|
|
686
|
+
def test_plain_json_fast_path_unchanged(self) -> None:
|
|
687
|
+
from benchflow.acp.container_transport import _decode_pty_json_rpc_message
|
|
688
|
+
|
|
689
|
+
assert _decode_pty_json_rpc_message(
|
|
690
|
+
'{"jsonrpc": "2.0", "id": 1, "result": {"ok": true}}'
|
|
691
|
+
) == {"jsonrpc": "2.0", "id": 1, "result": {"ok": True}}
|
|
692
|
+
|
|
693
|
+
def test_valid_envelope_after_log_prefix_decodes_pre_latch(self) -> None:
|
|
694
|
+
"""Deliberate edge, documented: pre-latch, a log line that embeds a
|
|
695
|
+
COMPLETE valid JSON-RPC envelope decodes as protocol. That is the
|
|
696
|
+
exact shape of the prompt-glued handshake bug; before the first
|
|
697
|
+
protocol message it cannot be told apart from the real thing.
|
|
698
|
+
"""
|
|
699
|
+
from benchflow.acp.container_transport import _decode_pty_json_rpc_message
|
|
700
|
+
|
|
701
|
+
assert _decode_pty_json_rpc_message(
|
|
702
|
+
'INFO sent {"jsonrpc": "2.0", "id": 3, "result": {}}'
|
|
703
|
+
) == {"jsonrpc": "2.0", "id": 3, "result": {}}
|
|
704
|
+
|
|
705
|
+
@pytest.mark.asyncio
|
|
706
|
+
async def test_lenient_decode_latches_off_after_first_protocol_message(
|
|
707
|
+
self, tmp_path
|
|
708
|
+
) -> None:
|
|
709
|
+
"""After the first decoded protocol message the strict whole-line
|
|
710
|
+
decode rules: the same prefix-glued valid envelope that decodes
|
|
711
|
+
pre-latch is filed as noise post-latch, so a mid-session agent
|
|
712
|
+
echoing protocol envelopes into its logs cannot impersonate traffic.
|
|
713
|
+
"""
|
|
714
|
+
glued_log = b'INFO sent {"jsonrpc": "2.0", "id": 3, "result": {}}\n'
|
|
715
|
+
fake_process = AsyncMock()
|
|
716
|
+
fake_process.readline = AsyncMock(
|
|
717
|
+
side_effect=[
|
|
718
|
+
self.PROMPT_GLUED_INIT, # lenient path decodes; latch sets
|
|
719
|
+
glued_log, # post-latch: strict decode files it as noise
|
|
720
|
+
b'{"jsonrpc": "2.0", "id": 4, "result": {"ok": true}}\n',
|
|
721
|
+
]
|
|
722
|
+
)
|
|
723
|
+
agent_log = tmp_path / "agent" / "prime_agent.txt"
|
|
724
|
+
transport = ContainerTransport(
|
|
725
|
+
container_process=fake_process,
|
|
726
|
+
command="agent acp",
|
|
727
|
+
agent_log_path=agent_log,
|
|
728
|
+
)
|
|
729
|
+
|
|
730
|
+
await transport.start()
|
|
731
|
+
try:
|
|
732
|
+
first = await asyncio.wait_for(transport.receive(), timeout=5)
|
|
733
|
+
second = await asyncio.wait_for(transport.receive(), timeout=5)
|
|
734
|
+
finally:
|
|
735
|
+
await transport.close()
|
|
736
|
+
|
|
737
|
+
assert first["id"] == 100001
|
|
738
|
+
assert second == {"jsonrpc": "2.0", "id": 4, "result": {"ok": True}}
|
|
739
|
+
assert "INFO sent" in agent_log.read_text()
|
|
740
|
+
|
|
741
|
+
|
|
616
742
|
class TestACPInterleaving:
|
|
617
743
|
"""Test that _read_until_response handles interleaved notifications and agent requests."""
|
|
618
744
|
|
|
@@ -914,6 +1040,55 @@ class TestIdleTimeoutDiagnostics:
|
|
|
914
1040
|
assert exc_info.value.trajectory[1]["status"] == ToolCallStatus.PENDING.value
|
|
915
1041
|
|
|
916
1042
|
|
|
1043
|
+
class TestAcpHandshakeTimeout:
|
|
1044
|
+
"""The pre-prompt handshake timeout is env-configurable at use time.
|
|
1045
|
+
|
|
1046
|
+
A fixed 60s is wrong for heavyweight task images — agent startup scales
|
|
1047
|
+
with the image (workspace scanning, kernel prep), and on such images the
|
|
1048
|
+
``initialize`` response deterministically lands after the window. The
|
|
1049
|
+
override is read per call (not cached at import) so long-lived processes
|
|
1050
|
+
and these tests see env changes.
|
|
1051
|
+
"""
|
|
1052
|
+
|
|
1053
|
+
def test_default_is_60s_without_env(self, monkeypatch) -> None:
|
|
1054
|
+
from benchflow.acp.runtime import _acp_handshake_timeout_sec
|
|
1055
|
+
|
|
1056
|
+
monkeypatch.delenv("BENCHFLOW_ACP_HANDSHAKE_TIMEOUT", raising=False)
|
|
1057
|
+
assert _acp_handshake_timeout_sec() == 60.0
|
|
1058
|
+
|
|
1059
|
+
def test_env_override_is_honored(self, monkeypatch) -> None:
|
|
1060
|
+
from benchflow.acp.runtime import _acp_handshake_timeout_sec
|
|
1061
|
+
|
|
1062
|
+
monkeypatch.setenv("BENCHFLOW_ACP_HANDSHAKE_TIMEOUT", "300")
|
|
1063
|
+
assert _acp_handshake_timeout_sec() == 300.0
|
|
1064
|
+
# Float values are accepted too.
|
|
1065
|
+
monkeypatch.setenv("BENCHFLOW_ACP_HANDSHAKE_TIMEOUT", "90.5")
|
|
1066
|
+
assert _acp_handshake_timeout_sec() == 90.5
|
|
1067
|
+
|
|
1068
|
+
@pytest.mark.parametrize("garbage", ["banana", "", " ", "-5", "0", "nan"])
|
|
1069
|
+
def test_garbage_or_non_positive_falls_back_to_default(
|
|
1070
|
+
self, monkeypatch, garbage
|
|
1071
|
+
) -> None:
|
|
1072
|
+
from benchflow.acp.runtime import _acp_handshake_timeout_sec
|
|
1073
|
+
|
|
1074
|
+
monkeypatch.setenv("BENCHFLOW_ACP_HANDSHAKE_TIMEOUT", garbage)
|
|
1075
|
+
assert _acp_handshake_timeout_sec() == 60.0
|
|
1076
|
+
|
|
1077
|
+
@pytest.mark.asyncio
|
|
1078
|
+
async def test_timeout_error_carries_effective_value(self, monkeypatch) -> None:
|
|
1079
|
+
"""The TransportClosedError message interpolates the EFFECTIVE timeout."""
|
|
1080
|
+
from benchflow.acp.runtime import _wait_for_acp_handshake
|
|
1081
|
+
from benchflow.diagnostics import TransportClosedError
|
|
1082
|
+
|
|
1083
|
+
monkeypatch.setenv("BENCHFLOW_ACP_HANDSHAKE_TIMEOUT", "0.05")
|
|
1084
|
+
|
|
1085
|
+
with pytest.raises(TransportClosedError) as exc_info:
|
|
1086
|
+
await _wait_for_acp_handshake(asyncio.Future(), phase="initialize")
|
|
1087
|
+
|
|
1088
|
+
assert "timed out after 0.05s before the first prompt" in str(exc_info.value)
|
|
1089
|
+
assert exc_info.value.diagnostic.transport_diagnosis == "acp_initialize_timeout"
|
|
1090
|
+
|
|
1091
|
+
|
|
917
1092
|
class TestConnectAcpModelSelection:
|
|
918
1093
|
"""Verify connect_acp passes the right model string to set_model."""
|
|
919
1094
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/build_context_stage.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/dataset_registry.py
RENAMED
|
File without changes
|
|
File without changes
|
{benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/evaluation_results.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/source_provenance.py
RENAMED
|
File without changes
|
{benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/_utils/task_authoring/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_container.py
RENAMED
|
File without changes
|
{benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_fake_mail.py
RENAMED
|
File without changes
|
|
File without changes
|
{benchflow-0.6.7.dev1829 → benchflow-0.6.7.dev1831}/src/benchflow/adapters/_toolathlon_services.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|