benchflow 0.6.7.dev1827__tar.gz → 0.6.7.dev1829__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.dev1827 → benchflow-0.6.7.dev1829}/PKG-INFO +1 -1
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/pyproject.toml +1 -1
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/live_activity.py +34 -5
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/_live_progress.py +34 -9
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/_shared.py +57 -4
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/main.py +6 -2
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/evaluation.py +30 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/__init__.py +17 -6
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_cli_live_progress.py +198 -13
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_job.py +36 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/.gitignore +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/CHANGELOG.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/LICENSE +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/README.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_paths.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_run.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_types.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/evaluation_results.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/scoring.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/_utils/yaml_loader.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/acp/client.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/acp/container_transport.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/acp/runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/acp/session.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agents/codex_config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agents/credentials.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agents/install.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agents/registry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/branch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/continue_run/orchestrator.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/contracts/planes.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/eval_plan.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/eval_worker.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/metrics.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/models.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/monitor.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/providers/litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/providers/litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/providers/runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/py.typed +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/review/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/review/config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/review/prompts.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/review/runner.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/review/wrapper.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/_config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/_deadline.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/_results.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/_setup.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rollout/task_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/rollout_planes.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/_compose.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/agentcore.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/apple_container.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/daytona.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/daytona_dind.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/daytona_strategies.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/docker.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/lockdown.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/process/_base.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/process/agentcore.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/process/apple.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/process/daytona.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/process/docker.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/protocol.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/providers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/setup.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/scenes.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/sdk.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/skills.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/document.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/export.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/package.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/task.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/_capture.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/_llm_capture.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/export_trl_sft.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/results.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/types.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/trajectories/viewer.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/conformance/README.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/conftest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/_consistency.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/check_results.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/run.sh +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/run_suite.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/scenarios.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_acp.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_adapters.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_agent_cli.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_agent_registry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_agent_router.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_agent_setup.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_agent_spec.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_agentcore_parallel.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_agentcore_sandbox.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_branch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_cli_misc.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_codex_review.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_config_override.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_config_redaction.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_console_progress.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_daytona_download.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_docs_examples.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_env_registry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_env_setup.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_eval_lift.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_integration_suite.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_internet_policy.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_learner_skills.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_learner_store.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_litellm_config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_litellm_reasoning_passthrough.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_live_llm_trajectory.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_llm_judge.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_loop_summary.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_metrics.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_oracle.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_paths_safe.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_process.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_providers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_reexport.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_registry_invariants.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_release_version.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_release_workflow_wiring.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_review_rubric.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_review_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_reward_node.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_reward_range.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_rewards.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_rollout_hard_deadline.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_rollout_planes_contract.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_rollout_upload.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_rubric_config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_sandbox.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_scene.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_scoring.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_skill_eval.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_skill_policy.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_skills.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_smoke.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_source_adapters.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_task_config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_task_digest.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_task_document.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_task_download.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_task_export.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_task_output_format.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_task_package.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_task_runtime_primitive.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_tasks.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_train_cli.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_trial_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_trl_integration.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_usage_required.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_user.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_verifier_document.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_verifier_output.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_verifier_wedge_retry.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_verify.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/test_yaml_config.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/trajectories/test_redaction.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.6.7.dev1827 → benchflow-0.6.7.dev1829}/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.dev1829
|
|
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
|
|
@@ -12,7 +12,34 @@ never to a render error.
|
|
|
12
12
|
from __future__ import annotations
|
|
13
13
|
|
|
14
14
|
import threading
|
|
15
|
-
from typing import Any
|
|
15
|
+
from typing import Any, NamedTuple
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class SessionCounters(NamedTuple):
|
|
19
|
+
"""The live ACP session counters the console heartbeat logs.
|
|
20
|
+
|
|
21
|
+
``total_tokens`` is None until the session has a usage snapshot (i.e.
|
|
22
|
+
after a completed prompt).
|
|
23
|
+
"""
|
|
24
|
+
|
|
25
|
+
tool_calls: int
|
|
26
|
+
last_tool: str
|
|
27
|
+
total_tokens: int | None
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class ActivitySnapshot(NamedTuple):
|
|
31
|
+
"""One dashboard poll of a live rollout.
|
|
32
|
+
|
|
33
|
+
``phase`` is the rollout's lifecycle phase (``Rollout._phase``) and is
|
|
34
|
+
always present, so the activity cell can label the long non-agent
|
|
35
|
+
stretches — sandbox create, agent install, verify — instead of blanking
|
|
36
|
+
in a way that is indistinguishable from a hang. ``counters`` is None
|
|
37
|
+
until the agent session exists (session-factory agents never grow one).
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
phase: str
|
|
41
|
+
counters: SessionCounters | None
|
|
42
|
+
|
|
16
43
|
|
|
17
44
|
_lock = threading.Lock()
|
|
18
45
|
# Task name -> live Rollout. Task basenames are unique keys by engine-wide
|
|
@@ -33,11 +60,13 @@ def unregister(task_name: str) -> None:
|
|
|
33
60
|
_live.pop(task_name, None)
|
|
34
61
|
|
|
35
62
|
|
|
36
|
-
def activity(task_name: str) ->
|
|
37
|
-
"""
|
|
63
|
+
def activity(task_name: str) -> ActivitySnapshot | None:
|
|
64
|
+
"""The :class:`ActivitySnapshot` for a running task, or None when the
|
|
65
|
+
rollout isn't registered (pre-create, between retries, teardown).
|
|
38
66
|
|
|
39
|
-
None until the task's agent session
|
|
40
|
-
(session-factory) agents, which never grow an
|
|
67
|
+
``counters`` inside the snapshot is None until the task's agent session
|
|
68
|
+
exists — including non-ACP (session-factory) agents, which never grow an
|
|
69
|
+
ACP client — but ``phase`` is always present. The dig into
|
|
41
70
|
client/session state lives on ``Rollout.activity_snapshot()`` (typed,
|
|
42
71
|
owner-side); the except here only guards renders racing rollout teardown.
|
|
43
72
|
"""
|
|
@@ -128,24 +128,49 @@ def _fmt_tokens(n: int) -> str:
|
|
|
128
128
|
return str(n)
|
|
129
129
|
|
|
130
130
|
|
|
131
|
+
# Rollout lifecycle phase (Rollout._phase — the completed phase, except
|
|
132
|
+
# "verifying" which verify() marks at entry) -> what is running now. Shown
|
|
133
|
+
# while the session counters are unavailable — before the agent session
|
|
134
|
+
# exists and after it is torn down — so sandbox create, agent install, and
|
|
135
|
+
# the verifier read as work, not as a hang.
|
|
136
|
+
_PHASE_LABELS = {
|
|
137
|
+
"created": "creating sandbox…",
|
|
138
|
+
"setup": "creating sandbox…",
|
|
139
|
+
"started": "installing agent…",
|
|
140
|
+
"installed": "running agent…",
|
|
141
|
+
"connected": "running agent…",
|
|
142
|
+
"executed": "verifying…",
|
|
143
|
+
"verifying": "verifying…",
|
|
144
|
+
"verified": "cleaning up…",
|
|
145
|
+
"cleaned": "cleaning up…",
|
|
146
|
+
}
|
|
147
|
+
# Unknown phases (e.g. "branched") and pre-register/teardown races: still
|
|
148
|
+
# never blank — a blank cell on a live row reads as a hang.
|
|
149
|
+
_PHASE_FALLBACK = "starting…"
|
|
150
|
+
|
|
151
|
+
|
|
131
152
|
def _activity_cell(name: str) -> str:
|
|
132
153
|
"""Per-task activity for the "running now" table, e.g.
|
|
133
154
|
``38 calls · last: file_editor``.
|
|
134
155
|
|
|
135
156
|
Polls the live rollout's ACP session counters — the same ones the console
|
|
136
157
|
heartbeat logs, which the Live display otherwise mutes — via the
|
|
137
|
-
live-activity registry.
|
|
138
|
-
|
|
158
|
+
live-activity registry. Until the agent session exists (and after it is
|
|
159
|
+
closed for the verifier) the cell shows the rollout's lifecycle phase as a
|
|
160
|
+
label instead, so the row is never blank. Tokens appear only once the
|
|
161
|
+
session has a usage snapshot (i.e. after a completed prompt).
|
|
139
162
|
"""
|
|
140
163
|
snap = live_activity.activity(name)
|
|
141
164
|
if snap is None:
|
|
142
|
-
return
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
if
|
|
148
|
-
cell += f" ·
|
|
165
|
+
return _PHASE_FALLBACK
|
|
166
|
+
counters = snap.counters
|
|
167
|
+
if counters is None:
|
|
168
|
+
return _PHASE_LABELS.get(snap.phase, _PHASE_FALLBACK)
|
|
169
|
+
cell = f"{counters.tool_calls} calls"
|
|
170
|
+
if counters.total_tokens:
|
|
171
|
+
cell += f" · {_fmt_tokens(counters.total_tokens)} tok"
|
|
172
|
+
if counters.last_tool:
|
|
173
|
+
cell += f" · last: {counters.last_tool[:30]}"
|
|
149
174
|
return cell
|
|
150
175
|
|
|
151
176
|
|
|
@@ -18,10 +18,12 @@ import typer
|
|
|
18
18
|
from rich.console import Console
|
|
19
19
|
from rich.markup import escape
|
|
20
20
|
|
|
21
|
+
from benchflow._utils.text import truncate_end
|
|
22
|
+
|
|
21
23
|
if TYPE_CHECKING:
|
|
22
24
|
from pathlib import Path
|
|
23
25
|
|
|
24
|
-
from benchflow.evaluation import EvaluationResult
|
|
26
|
+
from benchflow.evaluation import EvaluationResult, TaskFailure
|
|
25
27
|
|
|
26
28
|
console = Console()
|
|
27
29
|
|
|
@@ -100,14 +102,52 @@ def _exit_if_evaluation_had_errors(result: object) -> None:
|
|
|
100
102
|
raise typer.Exit(1)
|
|
101
103
|
|
|
102
104
|
|
|
105
|
+
# Final-block failure lines: keep the block skimmable on big jobs and each
|
|
106
|
+
# line inside a typical terminal width.
|
|
107
|
+
_MAX_FAILURE_LINES = 5
|
|
108
|
+
_FAILURE_LINE_LIMIT = 100
|
|
109
|
+
_FAILURE_REASON_METRICS = 3
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def _failure_reason(failure: TaskFailure) -> str:
|
|
113
|
+
"""One cheap line explaining why a FAILED (scored, reward != 1) task
|
|
114
|
+
failed, from evidence already on the result — no file reads.
|
|
115
|
+
|
|
116
|
+
Priority: the verifier's own error if set; else the reward plus a compact
|
|
117
|
+
breakdown of the named metrics in the reward dict (zero/failed metrics
|
|
118
|
+
first — they explain the miss); else just the reward.
|
|
119
|
+
"""
|
|
120
|
+
if failure.verifier_error:
|
|
121
|
+
# Collapse whitespace: verifier errors are routinely multi-line.
|
|
122
|
+
return " ".join(failure.verifier_error.split())
|
|
123
|
+
rewards = failure.rewards or {}
|
|
124
|
+
reward = rewards.get("reward")
|
|
125
|
+
metrics = [
|
|
126
|
+
(name, value)
|
|
127
|
+
for name, value in rewards.items()
|
|
128
|
+
if name != "reward" and isinstance(value, (bool, int, float))
|
|
129
|
+
]
|
|
130
|
+
if not metrics:
|
|
131
|
+
return f"reward {reward}"
|
|
132
|
+
# Zero/failed metrics first (stable within each group), capped so one
|
|
133
|
+
# metric-happy verifier can't flood the line.
|
|
134
|
+
metrics.sort(key=lambda kv: kv[1] != 0)
|
|
135
|
+
shown = ", ".join(
|
|
136
|
+
f"{name} {value}" for name, value in metrics[:_FAILURE_REASON_METRICS]
|
|
137
|
+
)
|
|
138
|
+
return f"reward {reward} — {shown}"
|
|
139
|
+
|
|
140
|
+
|
|
103
141
|
def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -> None:
|
|
104
142
|
"""Print the Score/errors summary line, colored by outcome, plus artifacts.
|
|
105
143
|
|
|
106
144
|
A clean pass and a total failure used to look identical (both bold white);
|
|
107
145
|
now the line is green only on a full clean pass, red on a shutout, amber
|
|
108
|
-
otherwise, and ``errors=N`` is red when non-zero.
|
|
109
|
-
|
|
110
|
-
|
|
146
|
+
otherwise, and ``errors=N`` is red when non-zero. Each FAILED task gets one
|
|
147
|
+
dim ``✗ task: reason`` line (capped at ``_MAX_FAILURE_LINES``) so the "why"
|
|
148
|
+
doesn't require opening summary.json. When ``job_dir`` is given, the
|
|
149
|
+
result/summary paths are printed so testers know where to look (the guide
|
|
150
|
+
repeatedly says "read summary.json" but the CLI never said where).
|
|
111
151
|
"""
|
|
112
152
|
errors = int(getattr(result, "errored", 0) or 0)
|
|
113
153
|
verifier_errors = int(getattr(result, "verifier_errored", 0) or 0)
|
|
@@ -132,6 +172,19 @@ def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -
|
|
|
132
172
|
f"\n[{style}]{mark} Score: {result.passed}/{result.total} "
|
|
133
173
|
f"({result.score:.1%})[/{style}]{err_part}"
|
|
134
174
|
)
|
|
175
|
+
# One dim reason line per FAILED task, so "0/1" doesn't force a dig into
|
|
176
|
+
# summary.json to learn why. getattr(): sharded aggregation and older
|
|
177
|
+
# SimpleNamespace-style callers don't carry task_failures.
|
|
178
|
+
failures = getattr(result, "task_failures", None) or []
|
|
179
|
+
for failure in failures[:_MAX_FAILURE_LINES]:
|
|
180
|
+
line = truncate_end(
|
|
181
|
+
f" ✗ {failure.task_name}: {_failure_reason(failure)}",
|
|
182
|
+
_FAILURE_LINE_LIMIT,
|
|
183
|
+
)
|
|
184
|
+
console.print(f"[dim]{escape(line)}[/dim]")
|
|
185
|
+
extra = len(failures) - _MAX_FAILURE_LINES
|
|
186
|
+
if extra > 0:
|
|
187
|
+
console.print(f"[dim] … and {extra} more[/dim]")
|
|
135
188
|
if job_dir is not None:
|
|
136
189
|
console.print(f"[dim]Artifacts:[/dim] {escape(str(job_dir))}")
|
|
137
190
|
console.print(f"[dim]Summary: [/dim] {escape(str(job_dir))}/summary.json")
|
|
@@ -389,8 +389,9 @@ def eval_run(
|
|
|
389
389
|
typer.Option(
|
|
390
390
|
"--quiet",
|
|
391
391
|
help=(
|
|
392
|
-
"Suppress the
|
|
393
|
-
"'… Nmin, K
|
|
392
|
+
"Suppress live progress output: the Rich dashboard on a TTY "
|
|
393
|
+
"and the per-run console progress heartbeat (the '… Nmin, K "
|
|
394
|
+
"tool calls' lines during agent execution)."
|
|
394
395
|
),
|
|
395
396
|
),
|
|
396
397
|
] = False,
|
|
@@ -597,6 +598,9 @@ def eval_run(
|
|
|
597
598
|
# Explicit off beats the session layer's auto-gate; see
|
|
598
599
|
# benchflow.acp.session._console_progress_enabled.
|
|
599
600
|
os.environ["BENCHFLOW_PROGRESS"] = "off"
|
|
601
|
+
# --quiet silences ALL live progress: the heartbeat lines above and
|
|
602
|
+
# the TTY Rich dashboard (see cli._live_progress.progress_enabled).
|
|
603
|
+
os.environ["BENCHFLOW_NO_PROGRESS"] = "1"
|
|
600
604
|
|
|
601
605
|
request = EvalCreateRequest(
|
|
602
606
|
config_file=config_file,
|
|
@@ -60,6 +60,7 @@ from benchflow._utils.scoring import (
|
|
|
60
60
|
VERIFIER_TIMEOUT,
|
|
61
61
|
api_error_is_transient,
|
|
62
62
|
classify_error,
|
|
63
|
+
classify_score_outcome,
|
|
63
64
|
classify_verifier_error,
|
|
64
65
|
count_audit_outcomes,
|
|
65
66
|
count_score_outcomes,
|
|
@@ -574,6 +575,21 @@ class EvaluationConfig:
|
|
|
574
575
|
)
|
|
575
576
|
|
|
576
577
|
|
|
578
|
+
@dataclass(frozen=True)
|
|
579
|
+
class TaskFailure:
|
|
580
|
+
"""Cheap failure evidence for one FAILED (scored, reward != 1) task.
|
|
581
|
+
|
|
582
|
+
Carried on :class:`EvaluationResult` so the CLI's final block can print a
|
|
583
|
+
one-line reason per failed task from data the engine already holds —
|
|
584
|
+
without re-reading result.json files. Errored tasks are excluded (they
|
|
585
|
+
already surface through the error counters and warning replay).
|
|
586
|
+
"""
|
|
587
|
+
|
|
588
|
+
task_name: str
|
|
589
|
+
rewards: dict[str, Any] | None
|
|
590
|
+
verifier_error: str | None
|
|
591
|
+
|
|
592
|
+
|
|
577
593
|
@dataclass
|
|
578
594
|
class EvaluationResult:
|
|
579
595
|
"""Aggregated results for a job."""
|
|
@@ -588,6 +604,7 @@ class EvaluationResult:
|
|
|
588
604
|
elapsed_sec: float = 0.0
|
|
589
605
|
memory_score: float | None = None
|
|
590
606
|
memory_scores: dict[str, float] = field(default_factory=dict)
|
|
607
|
+
task_failures: list[TaskFailure] = field(default_factory=list)
|
|
591
608
|
|
|
592
609
|
@property
|
|
593
610
|
def score(self) -> float:
|
|
@@ -1776,6 +1793,18 @@ class Evaluation:
|
|
|
1776
1793
|
score_counts = count_score_outcomes(all_results.values())
|
|
1777
1794
|
audit_counts = count_audit_outcomes(all_results.values())
|
|
1778
1795
|
memory, memory_scores = memory_summary(all_results)
|
|
1796
|
+
# Per-task failure evidence for the CLI's final block — FAILED (scored,
|
|
1797
|
+
# reward != 1) tasks only, from data already in memory. Sorted by name
|
|
1798
|
+
# so the printed lines are deterministic across resume/concurrency.
|
|
1799
|
+
task_failures = [
|
|
1800
|
+
TaskFailure(
|
|
1801
|
+
task_name=name,
|
|
1802
|
+
rewards=r.get("rewards"),
|
|
1803
|
+
verifier_error=r.get("verifier_error"),
|
|
1804
|
+
)
|
|
1805
|
+
for name, r in sorted(all_results.items())
|
|
1806
|
+
if classify_score_outcome(r) == "failed"
|
|
1807
|
+
]
|
|
1779
1808
|
job_result = EvaluationResult(
|
|
1780
1809
|
job_name=self._job_name,
|
|
1781
1810
|
config=cfg,
|
|
@@ -1791,6 +1820,7 @@ class Evaluation:
|
|
|
1791
1820
|
elapsed_sec=elapsed,
|
|
1792
1821
|
memory_score=memory["avg_score"],
|
|
1793
1822
|
memory_scores=memory_scores,
|
|
1823
|
+
task_failures=task_failures,
|
|
1794
1824
|
)
|
|
1795
1825
|
|
|
1796
1826
|
assert (
|
|
@@ -72,6 +72,7 @@ from benchflow._types import Role, Scene, Turn
|
|
|
72
72
|
# / ``_capture_session_trajectory`` / ``default_rollout_planes`` keep affecting
|
|
73
73
|
# the ``Rollout`` methods that call those names, because those methods stay
|
|
74
74
|
# defined in this module.
|
|
75
|
+
from benchflow._utils.live_activity import ActivitySnapshot, SessionCounters
|
|
75
76
|
from benchflow._utils.scoring import classify_error as classify_error
|
|
76
77
|
from benchflow.acp.types import McpServerSpec
|
|
77
78
|
from benchflow.agents.credentials import upload_credential
|
|
@@ -755,22 +756,26 @@ class Rollout:
|
|
|
755
756
|
def acp_client(self) -> Any:
|
|
756
757
|
return self._acp_client
|
|
757
758
|
|
|
758
|
-
def activity_snapshot(self) ->
|
|
759
|
-
"""
|
|
760
|
-
|
|
759
|
+
def activity_snapshot(self) -> ActivitySnapshot:
|
|
760
|
+
"""The eval dashboard's per-task :class:`ActivitySnapshot`: the
|
|
761
|
+
current lifecycle phase plus the live :class:`SessionCounters` (tool
|
|
762
|
+
calls, last tool title, total tokens). ``counters`` is None before
|
|
763
|
+
the agent session exists — the phase then carries the cell
|
|
764
|
+
("creating sandbox…", "verifying…"), so a 90s sandbox create is not
|
|
765
|
+
indistinguishable from a hang.
|
|
761
766
|
|
|
762
767
|
Rollout owns the client/session dig so a rename breaks here — in
|
|
763
768
|
typed, tested code — instead of silently blanking the dashboard cell
|
|
764
769
|
(see benchflow._utils.live_activity). Session-factory agents have no
|
|
765
|
-
ACP client and always
|
|
770
|
+
ACP client and always report counter-less snapshots.
|
|
766
771
|
"""
|
|
767
772
|
session = self._acp_client.session if self._acp_client else None
|
|
768
773
|
if session is None:
|
|
769
|
-
return None
|
|
774
|
+
return ActivitySnapshot(self._phase, None)
|
|
770
775
|
calls, last_title = session.progress_snapshot()
|
|
771
776
|
usage = session.latest_usage_totals()
|
|
772
777
|
tokens = usage.get("total_tokens") if usage else None
|
|
773
|
-
return calls, last_title, tokens
|
|
778
|
+
return ActivitySnapshot(self._phase, SessionCounters(calls, last_title, tokens))
|
|
774
779
|
|
|
775
780
|
@property
|
|
776
781
|
def trajectory(self) -> list[dict]:
|
|
@@ -1737,6 +1742,12 @@ class Rollout:
|
|
|
1737
1742
|
"""Run the verifier and return rewards."""
|
|
1738
1743
|
cfg = self._config
|
|
1739
1744
|
|
|
1745
|
+
# Mark the phase at entry (the other transitions mark completion):
|
|
1746
|
+
# the verifier can run for minutes after disconnect() reset the phase
|
|
1747
|
+
# to "installed", and the dashboard's activity cell reads _phase to
|
|
1748
|
+
# label that stretch "verifying…" instead of going blank.
|
|
1749
|
+
self._phase = "verifying"
|
|
1750
|
+
|
|
1740
1751
|
if not self._trajectory and cfg.primary_agent != "oracle":
|
|
1741
1752
|
scraped = await _scrape_agent_trajectory(
|
|
1742
1753
|
self._env, cfg.primary_agent, cfg.sandbox_user
|
|
@@ -6,6 +6,7 @@ exercised for "doesn't raise" rather than pixel-asserted.
|
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
+
import contextlib
|
|
9
10
|
import logging
|
|
10
11
|
from types import SimpleNamespace
|
|
11
12
|
|
|
@@ -105,28 +106,43 @@ def test_activity_cell_polls_live_session_counters():
|
|
|
105
106
|
# 2026-08-09): the heartbeat's counters must reach the dashboard, since
|
|
106
107
|
# the Live mutes the logged heartbeat line itself.
|
|
107
108
|
from benchflow._utils import live_activity
|
|
109
|
+
from benchflow._utils.live_activity import ActivitySnapshot, SessionCounters
|
|
108
110
|
from benchflow.cli._live_progress import _activity_cell
|
|
109
111
|
|
|
110
112
|
live_activity.register(
|
|
111
|
-
"edit-pdf",
|
|
113
|
+
"edit-pdf",
|
|
114
|
+
SimpleNamespace(
|
|
115
|
+
activity_snapshot=lambda: ActivitySnapshot(
|
|
116
|
+
"connected", SessionCounters(38, "file_editor", 1500)
|
|
117
|
+
)
|
|
118
|
+
),
|
|
112
119
|
)
|
|
113
120
|
try:
|
|
114
121
|
assert _activity_cell("edit-pdf") == "38 calls · 1.5k tok · last: file_editor"
|
|
115
122
|
finally:
|
|
116
123
|
live_activity.unregister("edit-pdf")
|
|
117
|
-
# Unregistered tasks (
|
|
118
|
-
|
|
124
|
+
# Unregistered tasks (pre-register, teardown races) degrade to the
|
|
125
|
+
# fallback label — a live row's cell must never be blank, and never raise.
|
|
126
|
+
assert _activity_cell("edit-pdf") == "starting…"
|
|
119
127
|
|
|
120
128
|
|
|
121
129
|
def test_rollout_activity_snapshot_reads_acp_session():
|
|
122
130
|
# The client/session dig lives on Rollout (typed, owner-side) so a rename
|
|
123
131
|
# of session counters breaks HERE instead of silently blanking the cell.
|
|
132
|
+
from benchflow._utils.live_activity import ActivitySnapshot, SessionCounters
|
|
124
133
|
from benchflow.rollout import Rollout
|
|
125
134
|
|
|
126
|
-
connected = SimpleNamespace(
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
assert Rollout.activity_snapshot(
|
|
135
|
+
connected = SimpleNamespace(
|
|
136
|
+
_acp_client=SimpleNamespace(session=_FakeSession()), _phase="connected"
|
|
137
|
+
)
|
|
138
|
+
assert Rollout.activity_snapshot(connected) == ActivitySnapshot(
|
|
139
|
+
"connected", SessionCounters(38, "file_editor", 1500)
|
|
140
|
+
)
|
|
141
|
+
# Pre-connect (and session-factory) rollouts have no client: counters are
|
|
142
|
+
# None but the lifecycle phase still rides out so the cell can label it.
|
|
143
|
+
assert Rollout.activity_snapshot(
|
|
144
|
+
SimpleNamespace(_acp_client=None, _phase="setup")
|
|
145
|
+
) == ActivitySnapshot("setup", None)
|
|
130
146
|
|
|
131
147
|
|
|
132
148
|
def test_dashboard_renders_activity_for_registered_running_task():
|
|
@@ -135,9 +151,15 @@ def test_dashboard_renders_activity_for_registered_running_task():
|
|
|
135
151
|
import io
|
|
136
152
|
|
|
137
153
|
from benchflow._utils import live_activity
|
|
154
|
+
from benchflow._utils.live_activity import ActivitySnapshot, SessionCounters
|
|
138
155
|
|
|
139
156
|
live_activity.register(
|
|
140
|
-
"edit-pdf",
|
|
157
|
+
"edit-pdf",
|
|
158
|
+
SimpleNamespace(
|
|
159
|
+
activity_snapshot=lambda: ActivitySnapshot(
|
|
160
|
+
"connected", SessionCounters(38, "file_editor", None)
|
|
161
|
+
)
|
|
162
|
+
),
|
|
141
163
|
)
|
|
142
164
|
try:
|
|
143
165
|
d = _dash()
|
|
@@ -152,17 +174,28 @@ def test_dashboard_renders_activity_for_registered_running_task():
|
|
|
152
174
|
live_activity.unregister("edit-pdf")
|
|
153
175
|
|
|
154
176
|
|
|
155
|
-
def
|
|
177
|
+
def test_activity_cell_shows_phase_label_before_session_exists():
|
|
178
|
+
# Fresh-user dogfood follow-up: ~1.5min of sandbox create / agent install
|
|
179
|
+
# (and the whole verifier) used to render a blank cell — indistinguishable
|
|
180
|
+
# from a hang. Counter-less snapshots must surface the lifecycle phase.
|
|
156
181
|
from benchflow._utils import live_activity
|
|
182
|
+
from benchflow._utils.live_activity import ActivitySnapshot
|
|
157
183
|
from benchflow.cli._live_progress import _activity_cell
|
|
158
184
|
|
|
159
|
-
|
|
160
|
-
# the cell stays empty and the render is unperturbed.
|
|
185
|
+
phase = "setup"
|
|
161
186
|
live_activity.register(
|
|
162
|
-
"warming-up",
|
|
187
|
+
"warming-up",
|
|
188
|
+
SimpleNamespace(activity_snapshot=lambda: ActivitySnapshot(phase, None)),
|
|
163
189
|
)
|
|
164
190
|
try:
|
|
165
|
-
assert _activity_cell("warming-up") == ""
|
|
191
|
+
assert _activity_cell("warming-up") == "creating sandbox…"
|
|
192
|
+
phase = "started"
|
|
193
|
+
assert _activity_cell("warming-up") == "installing agent…"
|
|
194
|
+
phase = "verifying"
|
|
195
|
+
assert _activity_cell("warming-up") == "verifying…"
|
|
196
|
+
# Unknown phases (e.g. "branched") still never blank the cell.
|
|
197
|
+
phase = "branched"
|
|
198
|
+
assert _activity_cell("warming-up") == "starting…"
|
|
166
199
|
d = _dash()
|
|
167
200
|
d.on_plan(total=1, done=0, remaining=1)
|
|
168
201
|
d.on_task_start("warming-up")
|
|
@@ -171,6 +204,54 @@ def test_activity_cell_empty_before_session_exists():
|
|
|
171
204
|
live_activity.unregister("warming-up")
|
|
172
205
|
|
|
173
206
|
|
|
207
|
+
def test_dashboard_renders_phase_label_for_counterless_task():
|
|
208
|
+
# End-to-end through __rich__: the phase label must reach the rendered
|
|
209
|
+
# panel, not just the cell helper — reverting the table wiring fails this.
|
|
210
|
+
import io
|
|
211
|
+
|
|
212
|
+
from benchflow._utils import live_activity
|
|
213
|
+
from benchflow._utils.live_activity import ActivitySnapshot
|
|
214
|
+
|
|
215
|
+
live_activity.register(
|
|
216
|
+
"edit-pdf",
|
|
217
|
+
SimpleNamespace(activity_snapshot=lambda: ActivitySnapshot("started", None)),
|
|
218
|
+
)
|
|
219
|
+
try:
|
|
220
|
+
d = _dash()
|
|
221
|
+
d.on_plan(total=1, done=0, remaining=1)
|
|
222
|
+
d.on_task_start("edit-pdf")
|
|
223
|
+
out = Console(file=io.StringIO(), width=120)
|
|
224
|
+
out.print(d.__rich__())
|
|
225
|
+
assert "installing agent…" in out.file.getvalue()
|
|
226
|
+
finally:
|
|
227
|
+
live_activity.unregister("edit-pdf")
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
def test_rollout_verify_marks_verifying_phase():
|
|
231
|
+
# verify() must flip _phase to "verifying" at ENTRY (other transitions
|
|
232
|
+
# mark completion): disconnect() has already reset the phase to
|
|
233
|
+
# "installed" by then, and the activity cell keys off this value for the
|
|
234
|
+
# minutes-long verifier stretch.
|
|
235
|
+
import asyncio
|
|
236
|
+
|
|
237
|
+
from benchflow.rollout import Rollout
|
|
238
|
+
|
|
239
|
+
rollout = SimpleNamespace(
|
|
240
|
+
_config=SimpleNamespace(primary_agent="x"),
|
|
241
|
+
_trajectory=[{"type": "tool_call"}], # non-empty: skip the scrape path
|
|
242
|
+
_phase="installed",
|
|
243
|
+
)
|
|
244
|
+
|
|
245
|
+
async def run() -> None:
|
|
246
|
+
# The full verify flow needs a sandbox; stop at the first await and
|
|
247
|
+
# assert the phase already transitioned.
|
|
248
|
+
with contextlib.suppress(AttributeError):
|
|
249
|
+
await Rollout.verify(rollout)
|
|
250
|
+
|
|
251
|
+
asyncio.run(run())
|
|
252
|
+
assert rollout._phase == "verifying"
|
|
253
|
+
|
|
254
|
+
|
|
174
255
|
def test_progress_enabled_respects_tty_and_optout(monkeypatch):
|
|
175
256
|
tty = SimpleNamespace(is_terminal=True)
|
|
176
257
|
notty = SimpleNamespace(is_terminal=False)
|
|
@@ -243,6 +324,110 @@ def test_report_eval_result_surfaces_verifier_errors(monkeypatch):
|
|
|
243
324
|
assert "Score: 0/3" in out
|
|
244
325
|
|
|
245
326
|
|
|
327
|
+
def _reported(result) -> str:
|
|
328
|
+
"""Render _report_eval_result through a captured Console, return the text."""
|
|
329
|
+
import io
|
|
330
|
+
|
|
331
|
+
from rich.console import Console
|
|
332
|
+
|
|
333
|
+
import benchflow.cli._shared as shared
|
|
334
|
+
|
|
335
|
+
rec = Console(file=io.StringIO(), width=200)
|
|
336
|
+
original = shared.console
|
|
337
|
+
shared.console = rec
|
|
338
|
+
try:
|
|
339
|
+
shared._report_eval_result(result)
|
|
340
|
+
finally:
|
|
341
|
+
shared.console = original
|
|
342
|
+
return rec.file.getvalue()
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
def _failed_result(task_failures):
|
|
346
|
+
return SimpleNamespace(
|
|
347
|
+
passed=0,
|
|
348
|
+
total=len(task_failures),
|
|
349
|
+
errored=0,
|
|
350
|
+
verifier_errored=0,
|
|
351
|
+
score=0.0,
|
|
352
|
+
job_name="j",
|
|
353
|
+
task_failures=task_failures,
|
|
354
|
+
)
|
|
355
|
+
|
|
356
|
+
|
|
357
|
+
def test_report_eval_result_prints_failure_reason_lines():
|
|
358
|
+
# Dogfood follow-up: "✗ Score: 0/1" alone forces a dig into summary.json.
|
|
359
|
+
# Each FAILED task gets one dim reason line — verifier_error first, else a
|
|
360
|
+
# compact reward/metric breakdown (zero metrics first), else the reward.
|
|
361
|
+
from benchflow.evaluation import TaskFailure
|
|
362
|
+
|
|
363
|
+
out = _reported(
|
|
364
|
+
_failed_result(
|
|
365
|
+
[
|
|
366
|
+
TaskFailure(
|
|
367
|
+
task_name="edit-pdf",
|
|
368
|
+
rewards={"reward": 0.0},
|
|
369
|
+
verifier_error="AssertionError:\n output.pdf missing",
|
|
370
|
+
),
|
|
371
|
+
TaskFailure(
|
|
372
|
+
task_name="plan-meeting",
|
|
373
|
+
rewards={
|
|
374
|
+
"reward": 0.3,
|
|
375
|
+
"decisions_found": 0.0,
|
|
376
|
+
"deadlines_found": 0.0,
|
|
377
|
+
"sections": 1.0,
|
|
378
|
+
"extra_metric": 1.0,
|
|
379
|
+
},
|
|
380
|
+
verifier_error=None,
|
|
381
|
+
),
|
|
382
|
+
TaskFailure(
|
|
383
|
+
task_name="sum-csv", rewards={"reward": 0.0}, verifier_error=None
|
|
384
|
+
),
|
|
385
|
+
]
|
|
386
|
+
)
|
|
387
|
+
)
|
|
388
|
+
# verifier_error wins and is collapsed to one line.
|
|
389
|
+
assert "✗ edit-pdf: AssertionError: output.pdf missing" in out
|
|
390
|
+
# Metric breakdown: zero/failed metrics first, capped at 3.
|
|
391
|
+
assert (
|
|
392
|
+
"✗ plan-meeting: reward 0.3 — decisions_found 0.0, deadlines_found 0.0, "
|
|
393
|
+
"sections 1.0" in out
|
|
394
|
+
)
|
|
395
|
+
assert "extra_metric" not in out
|
|
396
|
+
# No named metrics: just the reward.
|
|
397
|
+
assert "✗ sum-csv: reward 0.0" in out
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
def test_report_eval_result_caps_failure_lines_at_five():
|
|
401
|
+
from benchflow.evaluation import TaskFailure
|
|
402
|
+
|
|
403
|
+
failures = [
|
|
404
|
+
TaskFailure(task_name=f"task-{i}", rewards={"reward": 0.0}, verifier_error=None)
|
|
405
|
+
for i in range(7)
|
|
406
|
+
]
|
|
407
|
+
out = _reported(_failed_result(failures))
|
|
408
|
+
assert out.count("✗ task-") == 5
|
|
409
|
+
assert "… and 2 more" in out
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
def test_report_eval_result_truncates_failure_lines():
|
|
413
|
+
from benchflow.evaluation import TaskFailure
|
|
414
|
+
|
|
415
|
+
out = _reported(
|
|
416
|
+
_failed_result(
|
|
417
|
+
[
|
|
418
|
+
TaskFailure(
|
|
419
|
+
task_name="edit-pdf",
|
|
420
|
+
rewards=None,
|
|
421
|
+
verifier_error="boom " * 60,
|
|
422
|
+
)
|
|
423
|
+
]
|
|
424
|
+
)
|
|
425
|
+
)
|
|
426
|
+
(line,) = [ln for ln in out.splitlines() if "✗ edit-pdf" in ln]
|
|
427
|
+
assert len(line.rstrip()) <= 100
|
|
428
|
+
assert line.rstrip().endswith("…")
|
|
429
|
+
|
|
430
|
+
|
|
246
431
|
def test_fire_progress_swallows_callback_errors():
|
|
247
432
|
# The feature's core safety contract: a raising display hook must never
|
|
248
433
|
# propagate out of the engine (a render bug can't abort a run).
|