benchflow 0.6.7.dev1839__tar.gz → 0.6.7.dev1841__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.dev1839 → benchflow-0.6.7.dev1841}/PKG-INFO +1 -1
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/pyproject.toml +1 -1
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/live_activity.py +4 -1
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/acp/session.py +55 -9
- benchflow-0.6.7.dev1841/src/benchflow/cli/_failure_evidence.py +167 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/_live_progress.py +55 -15
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/_shared.py +24 -13
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/__init__.py +6 -2
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_cli_live_progress.py +297 -92
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_console_progress.py +50 -0
- benchflow-0.6.7.dev1839/src/benchflow/cli/_failure_evidence.py +0 -122
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/.gitignore +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/CHANGELOG.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/LICENSE +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/README.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_paths.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_run.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_types.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/evaluation_results.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/scoring.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/_utils/yaml_loader.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/acp/client.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/acp/container_transport.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/acp/runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agents/codex_config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agents/credentials.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agents/install.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agents/registry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/branch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/main.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/continue_run/orchestrator.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/contracts/planes.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/eval_artifacts.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/eval_lift.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/eval_plan.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/eval_worker.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/evaluation.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/metrics.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/models.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/monitor.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/providers/litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/providers/litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/providers/runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/py.typed +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/review/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/review/config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/review/prompts.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/review/runner.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/review/wrapper.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/_config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/_deadline.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/_results.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/_setup.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rollout/task_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/rollout_planes.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/_compose.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/agentcore.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/apple_container.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/daytona.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/daytona_dind.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/daytona_strategies.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/docker.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/lockdown.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/process/_base.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/process/agentcore.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/process/apple.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/process/daytona.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/process/docker.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/protocol.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/providers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/setup.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/scenes.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/sdk.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/skills.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/document.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/export.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/package.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/task.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/_capture.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/_llm_capture.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/export_trl_sft.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/results.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/types.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/trajectories/viewer.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/agents/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/conformance/README.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/conftest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/environment/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/_consistency.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/check_results.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/run.sh +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/run_suite.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/scenarios.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_acp.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_adapters.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_agent_cli.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_agent_registry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_agent_router.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_agent_setup.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_agent_spec.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_agentcore_parallel.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_agentcore_sandbox.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_branch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_cli_misc.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_codex_review.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_config_override.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_config_redaction.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_daytona_download.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_docs_examples.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_env_registry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_env_setup.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_eval_lift.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_hosted_env.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_integration_suite.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_internet_policy.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_job.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_learner_skills.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_learner_store.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_litellm_config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_litellm_logging.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_litellm_reasoning_passthrough.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_live_llm_trajectory.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_llm_judge.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_loop_summary.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_metrics.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_oracle.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_paths_safe.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_process.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_providers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_reexport.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_registry_invariants.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_release_version.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_release_workflow_wiring.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_review_rubric.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_review_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_reward_node.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_reward_range.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_rewards.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_rollout_hard_deadline.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_rollout_planes_contract.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_rollout_upload.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_rubric_config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_runtime_capabilities.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_sandbox.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_scene.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_scoring.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_skill_eval.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_skill_policy.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_skills.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_smoke.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_source_adapters.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_task_config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_task_digest.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_task_document.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_task_download.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_task_export.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_task_output_format.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_task_package.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_task_runtime_primitive.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_tasks.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_train_cli.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_trial_litellm_runtime.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_trl_integration.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_usage_required.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_user.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_verifier_document.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_verifier_output.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_verifier_wedge_retry.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_verify.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/test_yaml_config.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/trajectories/test_redaction.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.6.7.dev1839 → benchflow-0.6.7.dev1841}/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.dev1841
|
|
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
|
|
@@ -19,12 +19,15 @@ class SessionCounters(NamedTuple):
|
|
|
19
19
|
"""The live ACP session counters the console heartbeat logs.
|
|
20
20
|
|
|
21
21
|
``total_tokens`` is None until the session has a usage snapshot (i.e.
|
|
22
|
-
after a completed prompt).
|
|
22
|
+
after a completed prompt). ``distinct_tools`` counts distinct tool
|
|
23
|
+
display titles seen this session; None means unknown, which renderers
|
|
24
|
+
treat like varied (keep the ``last:`` cell).
|
|
23
25
|
"""
|
|
24
26
|
|
|
25
27
|
tool_calls: int
|
|
26
28
|
last_tool: str
|
|
27
29
|
total_tokens: int | None
|
|
30
|
+
distinct_tools: int | None = None
|
|
28
31
|
|
|
29
32
|
|
|
30
33
|
class ActivitySnapshot(NamedTuple):
|
|
@@ -138,6 +138,17 @@ def _canonical_tool_kind(kind: object, title: object = "") -> str:
|
|
|
138
138
|
return raw_kind
|
|
139
139
|
|
|
140
140
|
|
|
141
|
+
def _tool_display_title(title: str, kind: str) -> str:
|
|
142
|
+
"""A tool call's display title: first line of ``title``, else ``kind``.
|
|
143
|
+
|
|
144
|
+
``split`` not ``splitlines`` so a whitespace-only title strips to ``""``
|
|
145
|
+
instead of raising on an empty line list. Shared by the heartbeat/dashboard
|
|
146
|
+
snapshot and the distinct-title tracker so "distinct" means exactly
|
|
147
|
+
"renders differently".
|
|
148
|
+
"""
|
|
149
|
+
return (title or kind or "").strip().split("\n", 1)[0]
|
|
150
|
+
|
|
151
|
+
|
|
141
152
|
class ToolCallRecord:
|
|
142
153
|
"""Record of a single tool call within a session.
|
|
143
154
|
|
|
@@ -191,6 +202,12 @@ class ACPSession:
|
|
|
191
202
|
self.thought_chunks: list[str] = []
|
|
192
203
|
self.tool_calls: list[ToolCallRecord] = []
|
|
193
204
|
self._tool_call_map: dict[str, ToolCallRecord] = {}
|
|
205
|
+
# Distinct display titles across recorded tool calls, maintained
|
|
206
|
+
# incrementally at record creation so the eval dashboard can detect
|
|
207
|
+
# single-tool agents (prime-agent funnels everything through one
|
|
208
|
+
# IPython tool — a constant "last: IPython cell" carries no
|
|
209
|
+
# information) in O(1) at render time.
|
|
210
|
+
self._seen_tool_titles: set[str] = set()
|
|
194
211
|
self.stop_reason: StopReason | None = None
|
|
195
212
|
self.usage_snapshots: list[ACPUsageSnapshot] = []
|
|
196
213
|
self.created_at = datetime.now()
|
|
@@ -226,15 +243,24 @@ class ACPSession:
|
|
|
226
243
|
counters, also polled by the live eval dashboard's activity cell.
|
|
227
244
|
|
|
228
245
|
The title is the raw first line (untruncated — display width belongs
|
|
229
|
-
to each render site
|
|
230
|
-
title strips to ``""`` instead of raising on an empty line list.
|
|
246
|
+
to each render site; see :func:`_tool_display_title`).
|
|
231
247
|
"""
|
|
232
248
|
title = ""
|
|
233
249
|
if self.tool_calls:
|
|
234
250
|
last = self.tool_calls[-1]
|
|
235
|
-
title = (last.title
|
|
251
|
+
title = _tool_display_title(last.title, last.kind)
|
|
236
252
|
return len(self.tool_calls), title
|
|
237
253
|
|
|
254
|
+
@property
|
|
255
|
+
def distinct_tool_titles(self) -> int:
|
|
256
|
+
"""Count of distinct display titles across recorded tool calls.
|
|
257
|
+
|
|
258
|
+
O(1) read for the eval dashboard: ``1`` with several calls means a
|
|
259
|
+
single-tool agent, whose activity cell drops the constant ``last:``
|
|
260
|
+
suffix in favour of the token count.
|
|
261
|
+
"""
|
|
262
|
+
return len(self._seen_tool_titles)
|
|
263
|
+
|
|
238
264
|
def _maybe_log_progress(self) -> None:
|
|
239
265
|
if not self._progress_enabled or self._prompt_started_at is None:
|
|
240
266
|
return
|
|
@@ -324,6 +350,22 @@ class ACPSession:
|
|
|
324
350
|
self.events.append(current)
|
|
325
351
|
self._pending_text.clear()
|
|
326
352
|
|
|
353
|
+
def _record_tool_call(self, record: ToolCallRecord) -> None:
|
|
354
|
+
"""Register a newly created tool-call record in every live structure.
|
|
355
|
+
|
|
356
|
+
Single bookkeeping site for the two creation paths in
|
|
357
|
+
:meth:`handle_update` (``tool_call``, and the ``tool_call_update``
|
|
358
|
+
fallback for unseen ids), so the distinct-title tracker can never
|
|
359
|
+
drift from the record list. ``title`` itself is never rewritten after
|
|
360
|
+
creation, but an empty-title record's display title follows ``kind``,
|
|
361
|
+
which the legacy-skill upgrade can rewrite — that site re-registers
|
|
362
|
+
the new display title (over-counting fails safe).
|
|
363
|
+
"""
|
|
364
|
+
self.tool_calls.append(record)
|
|
365
|
+
self._tool_call_map[record.tool_call_id] = record
|
|
366
|
+
self._seen_tool_titles.add(_tool_display_title(record.title, record.kind))
|
|
367
|
+
self.events.append({"type": "tool_call", "record": record})
|
|
368
|
+
|
|
327
369
|
_RECOGNIZED_UPDATE_TYPES = frozenset(
|
|
328
370
|
{
|
|
329
371
|
"tool_call",
|
|
@@ -356,9 +398,7 @@ class ACPSession:
|
|
|
356
398
|
update.get("kind", "other"), update.get("title", "")
|
|
357
399
|
),
|
|
358
400
|
)
|
|
359
|
-
self.
|
|
360
|
-
self._tool_call_map[record.tool_call_id] = record
|
|
361
|
-
self.events.append({"type": "tool_call", "record": record})
|
|
401
|
+
self._record_tool_call(record)
|
|
362
402
|
|
|
363
403
|
elif update_type == "tool_call_update":
|
|
364
404
|
tc_id = update.get("toolCallId", "")
|
|
@@ -372,9 +412,7 @@ class ACPSession:
|
|
|
372
412
|
update.get("kind", "tool"), update.get("title", "")
|
|
373
413
|
),
|
|
374
414
|
)
|
|
375
|
-
self.
|
|
376
|
-
self._tool_call_map[tc_id] = record
|
|
377
|
-
self.events.append({"type": "tool_call", "record": record})
|
|
415
|
+
self._record_tool_call(record)
|
|
378
416
|
try:
|
|
379
417
|
status = ToolCallStatus(update.get("status", "in_progress"))
|
|
380
418
|
except ValueError:
|
|
@@ -390,6 +428,14 @@ class ACPSession:
|
|
|
390
428
|
record.kind, record.title, record.content
|
|
391
429
|
):
|
|
392
430
|
record.kind = "skill"
|
|
431
|
+
# An empty-title record's DISPLAY title falls back to kind, so
|
|
432
|
+
# this upgrade can change what renders. Re-register the new
|
|
433
|
+
# display title: the set may now over-count (creation-time
|
|
434
|
+
# fallback + "skill"), which fails safe — the cell keeps the
|
|
435
|
+
# last: suffix instead of falsely claiming a single tool.
|
|
436
|
+
self._seen_tool_titles.add(
|
|
437
|
+
_tool_display_title(record.title, record.kind)
|
|
438
|
+
)
|
|
393
439
|
|
|
394
440
|
elif update_type == "agent_message_chunk":
|
|
395
441
|
content = update.get("content", {})
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"""Verifier-artifact mining for the eval report's failure lines.
|
|
2
|
+
|
|
3
|
+
The one file-touching corner of the CLI's final report block: when a failed
|
|
4
|
+
task's reason would otherwise be the bare ``reward X`` fallback, mine the
|
|
5
|
+
rollout's verifier artifacts for a one-line explanation. Lives in its own
|
|
6
|
+
module so ``cli/_shared.py`` stays the side-effect-free display helpers it
|
|
7
|
+
advertises.
|
|
8
|
+
|
|
9
|
+
Contract (the engine stays file-free — these reads are CLI-side, report-time
|
|
10
|
+
only):
|
|
11
|
+
|
|
12
|
+
- The rollout dir is resolved exactly, from the ``rollout_name`` the engine
|
|
13
|
+
records on every result — never guessed from globs.
|
|
14
|
+
- Evidence sources are tried in order (CTRF report, then test-stdout tail);
|
|
15
|
+
the first that yields a line wins.
|
|
16
|
+
- Every read is bounded (``_ARTIFACT_READ_BYTES`` per file) and nothing here
|
|
17
|
+
raises — any surprise degrades to ``None``, i.e. the bare reward reason.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import json
|
|
23
|
+
import re
|
|
24
|
+
from typing import TYPE_CHECKING, NamedTuple
|
|
25
|
+
|
|
26
|
+
if TYPE_CHECKING:
|
|
27
|
+
from collections.abc import Callable
|
|
28
|
+
from pathlib import Path
|
|
29
|
+
|
|
30
|
+
# Never read more than this many bytes per file, and evidence is only mined
|
|
31
|
+
# for the <= _MAX_FAILURE_LINES tasks the report block displays.
|
|
32
|
+
_ARTIFACT_READ_BYTES = 64 * 1024
|
|
33
|
+
# Pytest final summary, decoration stripped: "1 failed, 2 passed in 40.86s".
|
|
34
|
+
_PYTEST_SUMMARY_RE = re.compile(r"\d+ failed\b")
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class FailureLine(NamedTuple):
|
|
38
|
+
"""A failure one-liner in two parts with distinct truncation contracts.
|
|
39
|
+
|
|
40
|
+
``body`` is the free-text evidence (test name plus assertion) and competes
|
|
41
|
+
for the display line's char budget; ``suffix`` is the compact multi-failure
|
|
42
|
+
roll-up count (empty when the evidence covers everything) and must survive
|
|
43
|
+
display truncation. Renderers give ``body`` the full line budget and append
|
|
44
|
+
``suffix`` whole past it — never truncating the concatenation, or a long
|
|
45
|
+
assertion would silently eat the "there is more broken than this" signal.
|
|
46
|
+
"""
|
|
47
|
+
|
|
48
|
+
body: str
|
|
49
|
+
suffix: str = ""
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def _display_test_name(raw_name: str) -> str:
|
|
53
|
+
"""Test name for display: node-id path segments dropped, param id kept.
|
|
54
|
+
|
|
55
|
+
Full pytest node ids ("tests/test_x.py::test_build[param]") waste the
|
|
56
|
+
100-char line budget; keep the function name plus any ``[param]`` id.
|
|
57
|
+
The split must not touch the bracket part — a param id may itself contain
|
|
58
|
+
``::`` — so only the text before the first ``[`` is segment-split. (When
|
|
59
|
+
the report was written by pytest-json-ctrf — as of 0.5.x — the param id
|
|
60
|
+
is already gone — the plugin stores ``nodeid.split('[')[0]`` as ``name``
|
|
61
|
+
— but other CTRF producers keep the full name, and we must not re-trim
|
|
62
|
+
it.)
|
|
63
|
+
"""
|
|
64
|
+
head, bracket, param = raw_name.partition("[")
|
|
65
|
+
return head.rsplit("::", 1)[-1] + bracket + param
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def _ctrf_failure_line(ctrf_path: Path) -> FailureLine | None:
|
|
69
|
+
"""``<test> failed[: <assertion>]`` from the first failed CTRF test.
|
|
70
|
+
|
|
71
|
+
The verifier's pytest run writes a CTRF report (``pytest --ctrf``, see the
|
|
72
|
+
standard path in ``task_authoring/structural_checks.py``). Per test the
|
|
73
|
+
useful failure evidence is the ``E …`` assertion line inside ``trace``;
|
|
74
|
+
``message`` is only a generic phase description, so it is the fallback.
|
|
75
|
+
When the report holds more than one failed test, the first failure's line
|
|
76
|
+
carries a count suffix (``(+N more failures; P/T checks passed)``) so the
|
|
77
|
+
console never under-reports how much is broken.
|
|
78
|
+
"""
|
|
79
|
+
if ctrf_path.stat().st_size > _ARTIFACT_READ_BYTES:
|
|
80
|
+
# JSON only parses whole — an oversized report is skipped (not
|
|
81
|
+
# truncated) and the next evidence source gets its turn.
|
|
82
|
+
return None
|
|
83
|
+
data = json.loads(ctrf_path.read_text(encoding="utf-8", errors="replace"))
|
|
84
|
+
raw_tests = (data.get("results") or {}).get("tests") or []
|
|
85
|
+
tests = [test for test in raw_tests if isinstance(test, dict)]
|
|
86
|
+
failed = [test for test in tests if test.get("status") == "failed"]
|
|
87
|
+
if not failed:
|
|
88
|
+
return None
|
|
89
|
+
suffix = ""
|
|
90
|
+
if len(failed) > 1:
|
|
91
|
+
# Counts come from the same rolled-up test list the first-failure pick
|
|
92
|
+
# uses, so the suffix can never disagree with the shown evidence.
|
|
93
|
+
# T is all entries — skips count against the denominator, not as passes.
|
|
94
|
+
extra = len(failed) - 1
|
|
95
|
+
passed = sum(1 for test in tests if test.get("status") == "passed")
|
|
96
|
+
plural = "" if extra == 1 else "s"
|
|
97
|
+
suffix = (
|
|
98
|
+
f" (+{extra} more failure{plural}; {passed}/{len(tests)} checks passed)"
|
|
99
|
+
)
|
|
100
|
+
test = failed[0]
|
|
101
|
+
name = _display_test_name(str(test.get("name") or "test"))
|
|
102
|
+
trace = test.get("trace")
|
|
103
|
+
if isinstance(trace, str):
|
|
104
|
+
for line in trace.splitlines():
|
|
105
|
+
stripped = line.strip()
|
|
106
|
+
if stripped.startswith("E "):
|
|
107
|
+
assertion = stripped[2:].strip()
|
|
108
|
+
# "<test> failed:" already says it's an assertion — drop
|
|
109
|
+
# the prefix to reclaim line budget for the message.
|
|
110
|
+
assertion = assertion.removeprefix("AssertionError: ")
|
|
111
|
+
return FailureLine(f"{name} failed: {assertion}", suffix)
|
|
112
|
+
message = test.get("message")
|
|
113
|
+
if isinstance(message, str) and message.strip():
|
|
114
|
+
return FailureLine(f"{name} failed: {' '.join(message.split())}", suffix)
|
|
115
|
+
return FailureLine(f"{name} failed", suffix)
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def _stdout_tail_failure_line(stdout_path: Path) -> FailureLine | None:
|
|
119
|
+
"""Last pytest summary ("N failed, M passed …") — else last ``FAILED …``
|
|
120
|
+
line — from a bounded tail of the verifier's test-stdout capture. No count
|
|
121
|
+
suffix: the summary line already carries the full counts itself."""
|
|
122
|
+
with stdout_path.open("rb") as fh:
|
|
123
|
+
fh.seek(0, 2) # SEEK_END
|
|
124
|
+
fh.seek(max(0, fh.tell() - _ARTIFACT_READ_BYTES))
|
|
125
|
+
tail = fh.read(_ARTIFACT_READ_BYTES).decode("utf-8", errors="replace")
|
|
126
|
+
last_failed: str | None = None
|
|
127
|
+
for line in reversed(tail.splitlines()):
|
|
128
|
+
bare = line.strip().strip("=").strip()
|
|
129
|
+
if _PYTEST_SUMMARY_RE.match(bare):
|
|
130
|
+
return FailureLine(bare)
|
|
131
|
+
if last_failed is None and line.strip().startswith("FAILED "):
|
|
132
|
+
last_failed = line.strip()
|
|
133
|
+
return FailureLine(last_failed) if last_failed is not None else None
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
def artifact_failure_evidence(
|
|
137
|
+
job_dir: Path, rollout_name: str
|
|
138
|
+
) -> tuple[FailureLine, Path] | None:
|
|
139
|
+
"""``FailureLine`` mined from the rollout's verifier artifacts, or ``None``.
|
|
140
|
+
|
|
141
|
+
Returns the structured one-liner plus the verifier dir it came from (for
|
|
142
|
+
the report block's single ``(details: …)`` pointer line). Never raises.
|
|
143
|
+
"""
|
|
144
|
+
# Local import: RolloutPaths pulls in the task package, which the CLI
|
|
145
|
+
# shouldn't pay for until a failure actually needs artifact evidence.
|
|
146
|
+
from benchflow.task.paths import RolloutPaths
|
|
147
|
+
|
|
148
|
+
rollout_paths = RolloutPaths(rollout_dir=job_dir / rollout_name)
|
|
149
|
+
verifier_dir = rollout_paths.verifier_dir
|
|
150
|
+
attempts: list[tuple[Path, Callable[[Path], FailureLine | None]]] = [
|
|
151
|
+
# ctrf.json has no RolloutPaths property — the verifier recovers it by
|
|
152
|
+
# literal name (verifier_core.py, `_recover_main_verifier_outputs`).
|
|
153
|
+
(verifier_dir / "ctrf.json", _ctrf_failure_line),
|
|
154
|
+
(rollout_paths.test_stdout_path, _stdout_tail_failure_line),
|
|
155
|
+
]
|
|
156
|
+
for path, extract in attempts:
|
|
157
|
+
try:
|
|
158
|
+
if not path.is_file():
|
|
159
|
+
continue
|
|
160
|
+
detail = extract(path)
|
|
161
|
+
except Exception:
|
|
162
|
+
# Unreadable file, bad JSON, permissions … try the next source;
|
|
163
|
+
# the report must never crash over evidence mining.
|
|
164
|
+
continue
|
|
165
|
+
if detail is not None:
|
|
166
|
+
return detail, verifier_dir
|
|
167
|
+
return None
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
Renders a single Rich :class:`~rich.live.Live` panel — a progress bar with ETA,
|
|
4
4
|
queued/running/passed/failed/errored counts, a "running now" table, and running
|
|
5
5
|
token / cost / pass-rate totals — fed by the :class:`~benchflow.evaluation.Evaluation`
|
|
6
|
-
engine's ``on_plan`` / ``on_task_start`` / ``on_result`` hooks
|
|
6
|
+
engine's ``on_plan`` / ``on_task_start`` / ``on_result`` hooks, plus render-time
|
|
7
|
+
polls of the live-activity registry for the running tasks' in-flight session
|
|
8
|
+
counters (activity cells and the footer's live token sum).
|
|
7
9
|
|
|
8
10
|
TTY-only by contract: the CLI keeps its plain ``logger.info`` lines when stdout
|
|
9
11
|
isn't a terminal (CI, pipes, parity files), so machine-readable output is never
|
|
@@ -149,18 +151,21 @@ _PHASE_LABELS = {
|
|
|
149
151
|
_PHASE_FALLBACK = "starting…"
|
|
150
152
|
|
|
151
153
|
|
|
152
|
-
def _activity_cell(
|
|
154
|
+
def _activity_cell(snap: live_activity.ActivitySnapshot | None) -> str:
|
|
153
155
|
"""Per-task activity for the "running now" table, e.g.
|
|
154
156
|
``38 calls · last: file_editor``.
|
|
155
157
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
158
|
+
Pure formatter over one polled :class:`~benchflow._utils.live_activity.
|
|
159
|
+
ActivitySnapshot` — ``__rich__`` polls the registry exactly once per
|
|
160
|
+
running task per frame and shares the snapshots with the footer's live
|
|
161
|
+
token sum. The counters are the same ones the console heartbeat logs,
|
|
162
|
+
which the Live display otherwise mutes. Until the agent session exists
|
|
163
|
+
(and after it is closed for the verifier) the cell shows the rollout's
|
|
164
|
+
lifecycle phase as a label instead, and a registry miss (None) shows the
|
|
165
|
+
fallback label, so the row is never blank. Tokens appear only once the
|
|
166
|
+
session has a usage snapshot (i.e. after a completed prompt); once they
|
|
167
|
+
do, a single-tool agent's cell is ``38 calls · 412.0k tok`` (no ``last:``).
|
|
162
168
|
"""
|
|
163
|
-
snap = live_activity.activity(name)
|
|
164
169
|
if snap is None:
|
|
165
170
|
return _PHASE_FALLBACK
|
|
166
171
|
counters = snap.counters
|
|
@@ -169,7 +174,12 @@ def _activity_cell(name: str) -> str:
|
|
|
169
174
|
cell = f"{counters.tool_calls} calls"
|
|
170
175
|
if counters.total_tokens:
|
|
171
176
|
cell += f" · {_fmt_tokens(counters.total_tokens)} tok"
|
|
172
|
-
|
|
177
|
+
# A single-tool agent (prime-agent funnels every call through one IPython
|
|
178
|
+
# tool) makes "last: <name>" a constant: once tokens carry the signal,
|
|
179
|
+
# drop it. Varied tool names — and unknown distinct counts (0), and a
|
|
180
|
+
# first lone call, where the name is still news — keep the last: suffix.
|
|
181
|
+
constant_tool = counters.tool_calls > 1 and counters.distinct_tools == 1
|
|
182
|
+
if counters.last_tool and not (constant_tool and counters.total_tokens):
|
|
173
183
|
cell += f" · last: {counters.last_tool[:30]}"
|
|
174
184
|
return cell
|
|
175
185
|
|
|
@@ -335,6 +345,13 @@ class LiveEvalProgress:
|
|
|
335
345
|
|
|
336
346
|
parts: list[RenderableType] = [header, bar, counts]
|
|
337
347
|
|
|
348
|
+
# ONE registry poll per running task per frame (each poll an O(1)
|
|
349
|
+
# counter read; see live_activity), shared by the running-now cells
|
|
350
|
+
# and the footer's live token sum — displayed rows are never polled
|
|
351
|
+
# twice, and cell vs footer can't read different snapshots within a
|
|
352
|
+
# frame.
|
|
353
|
+
snaps = {name: live_activity.activity(name) for name in running}
|
|
354
|
+
|
|
338
355
|
# "Running now" — cap rows so short terminals don't overflow.
|
|
339
356
|
if running:
|
|
340
357
|
tbl = Table(
|
|
@@ -354,16 +371,34 @@ class LiveEvalProgress:
|
|
|
354
371
|
tbl.add_row(
|
|
355
372
|
Text(name),
|
|
356
373
|
_fmt_dur(now - running[name]),
|
|
357
|
-
Text(_activity_cell(name), style="dim"),
|
|
374
|
+
Text(_activity_cell(snaps.get(name)), style="dim"),
|
|
358
375
|
)
|
|
359
376
|
extra = len(running) - _MAX_RUNNING_ROWS
|
|
360
377
|
if extra > 0:
|
|
361
378
|
tbl.add_row(f"… {extra} more", "", "")
|
|
362
379
|
parts.append(tbl)
|
|
363
380
|
|
|
364
|
-
# Footer: pass-rate (excl errors) + token/cost economics.
|
|
365
|
-
#
|
|
366
|
-
#
|
|
381
|
+
# Footer: pass-rate (excl errors) + token/cost economics. Tokens sum
|
|
382
|
+
# the completed tasks' trusted telemetry PLUS the running sessions'
|
|
383
|
+
# live ACP usage (stepping forward as each prompt completes), so a
|
|
384
|
+
# 51-minute agent phase shows its spend while it runs, not only at
|
|
385
|
+
# scoring. The total is NOT monotonic across a task's completion
|
|
386
|
+
# boundary: scoring swaps the ACP self-report for the gateway
|
|
387
|
+
# measurement (which can be lower), and a task completing with
|
|
388
|
+
# untrusted/absent telemetry drops its live contribution entirely —
|
|
389
|
+
# a sole-task footer can collapse back to "— tokens". Clamping would
|
|
390
|
+
# falsify the trusted sum, so the dip is intended. Show "—" (not 0 /
|
|
391
|
+
# $0.00) when neither signal exists, so a coverage-0 run reads
|
|
392
|
+
# broken, not free — matching the summary.json contract. Cost stays
|
|
393
|
+
# completed-tasks-only: $ comes from the sandbox LiteLLM gateway log
|
|
394
|
+
# imported at scoring time (BenchFlow computes no prices of its own),
|
|
395
|
+
# so there is no live $ to show.
|
|
396
|
+
live_tokens = sum(
|
|
397
|
+
snap.counters.total_tokens or 0
|
|
398
|
+
for snap in snaps.values()
|
|
399
|
+
if snap is not None and snap.counters is not None
|
|
400
|
+
)
|
|
401
|
+
|
|
367
402
|
footer = Text()
|
|
368
403
|
scored = passed + failed
|
|
369
404
|
if scored:
|
|
@@ -371,7 +406,12 @@ class LiveEvalProgress:
|
|
|
371
406
|
else:
|
|
372
407
|
footer.append("pass-rate —", style="dim")
|
|
373
408
|
footer.append(" · ")
|
|
374
|
-
footer.append(
|
|
409
|
+
footer.append(
|
|
410
|
+
f"{_fmt_tokens(tokens + live_tokens)} tokens"
|
|
411
|
+
if covered or live_tokens
|
|
412
|
+
else "— tokens",
|
|
413
|
+
"dim",
|
|
414
|
+
)
|
|
375
415
|
footer.append(" · ")
|
|
376
416
|
footer.append(f"${cost:.2f}" if covered else "$—", style="dim")
|
|
377
417
|
if completed:
|
|
@@ -21,7 +21,7 @@ from rich.console import Console
|
|
|
21
21
|
from rich.markup import escape
|
|
22
22
|
|
|
23
23
|
from benchflow._utils.text import truncate_end
|
|
24
|
-
from benchflow.cli._failure_evidence import artifact_failure_evidence
|
|
24
|
+
from benchflow.cli._failure_evidence import FailureLine, artifact_failure_evidence
|
|
25
25
|
|
|
26
26
|
if TYPE_CHECKING:
|
|
27
27
|
from pathlib import Path
|
|
@@ -106,7 +106,8 @@ def _exit_if_evaluation_had_errors(result: object) -> None:
|
|
|
106
106
|
|
|
107
107
|
|
|
108
108
|
# Final-block failure lines: keep the block skimmable on big jobs and each
|
|
109
|
-
# line inside a typical terminal width
|
|
109
|
+
# line inside a typical terminal width — except lines carrying a multi-failure
|
|
110
|
+
# count suffix, which deliberately run ~40 chars past the budget.
|
|
110
111
|
_MAX_FAILURE_LINES = 5
|
|
111
112
|
_FAILURE_LINE_LIMIT = 100
|
|
112
113
|
_FAILURE_REASON_METRICS = 3
|
|
@@ -114,7 +115,7 @@ _FAILURE_REASON_METRICS = 3
|
|
|
114
115
|
|
|
115
116
|
def _failure_reason(
|
|
116
117
|
failure: TaskFailure, job_dir: Path | None = None
|
|
117
|
-
) -> tuple[
|
|
118
|
+
) -> tuple[FailureLine, Path | None]:
|
|
118
119
|
"""One cheap line explaining why a FAILED (scored, reward != 1) task
|
|
119
120
|
failed, plus the verifier dir when artifacts supplied the evidence.
|
|
120
121
|
|
|
@@ -123,13 +124,15 @@ def _failure_reason(
|
|
|
123
124
|
first — they explain the miss); else the reward plus a one-liner mined
|
|
124
125
|
from the rollout's verifier artifacts (bounded CLI-side reads resolved via
|
|
125
126
|
the ``rollout_name`` the engine records — the engine stays file-free);
|
|
126
|
-
else just the reward. The
|
|
127
|
-
|
|
128
|
-
|
|
127
|
+
else just the reward. The reason is a ``FailureLine`` so the artifact
|
|
128
|
+
tier's multi-failure count suffix stays separable from the truncatable
|
|
129
|
+
body (only the artifact tier ever sets it). The returned path is
|
|
130
|
+
non-``None`` only for the artifact tier, so the caller can print one
|
|
131
|
+
``(details: …)`` pointer per report block.
|
|
129
132
|
"""
|
|
130
133
|
if failure.verifier_error:
|
|
131
134
|
# Collapse whitespace: verifier errors are routinely multi-line.
|
|
132
|
-
return " ".join(failure.verifier_error.split()), None
|
|
135
|
+
return FailureLine(" ".join(failure.verifier_error.split())), None
|
|
133
136
|
rewards = failure.rewards or {}
|
|
134
137
|
reward = rewards.get("reward")
|
|
135
138
|
metrics = [
|
|
@@ -144,15 +147,18 @@ def _failure_reason(
|
|
|
144
147
|
shown = ", ".join(
|
|
145
148
|
f"{name} {value}" for name, value in metrics[:_FAILURE_REASON_METRICS]
|
|
146
149
|
)
|
|
147
|
-
return f"reward {reward} — {shown}", None
|
|
150
|
+
return FailureLine(f"reward {reward} — {shown}"), None
|
|
148
151
|
# No rollout_name (pre-#957-follow-up result.json, sharded aggregation):
|
|
149
152
|
# nothing to resolve — the bare reward is as honest as it gets.
|
|
150
153
|
if job_dir is not None and failure.rollout_name:
|
|
151
154
|
evidence = artifact_failure_evidence(job_dir, failure.rollout_name)
|
|
152
155
|
if evidence is not None:
|
|
153
156
|
detail, verifier_dir = evidence
|
|
154
|
-
return
|
|
155
|
-
|
|
157
|
+
return (
|
|
158
|
+
FailureLine(f"reward {reward} — {detail.body}", detail.suffix),
|
|
159
|
+
verifier_dir,
|
|
160
|
+
)
|
|
161
|
+
return FailureLine(f"reward {reward}"), None
|
|
156
162
|
|
|
157
163
|
|
|
158
164
|
def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -> None:
|
|
@@ -207,11 +213,16 @@ def _report_eval_result(result: EvaluationResult, job_dir: Path | None = None) -
|
|
|
207
213
|
reason, verifier_dir = _failure_reason(failure, job_dir)
|
|
208
214
|
if artifact_pointer is None and verifier_dir is not None:
|
|
209
215
|
artifact_pointer = verifier_dir
|
|
210
|
-
|
|
211
|
-
|
|
216
|
+
# The char budget governs only the free-text body; the multi-failure
|
|
217
|
+
# count suffix is appended AFTER truncation so a long assertion can
|
|
218
|
+
# never swallow the "more than this is broken" signal. Worst case the
|
|
219
|
+
# line runs ~40 chars past the budget — completeness beats strict
|
|
220
|
+
# width for this one signal.
|
|
221
|
+
body = truncate_end(
|
|
222
|
+
f" ✗ {failure.task_name}: {reason.body}",
|
|
212
223
|
_FAILURE_LINE_LIMIT,
|
|
213
224
|
)
|
|
214
|
-
console.print(f"[dim]{escape(
|
|
225
|
+
console.print(f"[dim]{escape(body + reason.suffix)}[/dim]")
|
|
215
226
|
extra = len(failures) - _MAX_FAILURE_LINES
|
|
216
227
|
if extra > 0:
|
|
217
228
|
console.print(f"[dim] … and {extra} more[/dim]")
|
|
@@ -759,7 +759,8 @@ class Rollout:
|
|
|
759
759
|
def activity_snapshot(self) -> ActivitySnapshot:
|
|
760
760
|
"""The eval dashboard's per-task :class:`ActivitySnapshot`: the
|
|
761
761
|
current lifecycle phase plus the live :class:`SessionCounters` (tool
|
|
762
|
-
calls, last tool title, total tokens
|
|
762
|
+
calls, last tool title, total tokens, distinct tool titles).
|
|
763
|
+
``counters`` is None before
|
|
763
764
|
the agent session exists — the phase then carries the cell
|
|
764
765
|
("creating sandbox…", "verifying…"), so a 90s sandbox create is not
|
|
765
766
|
indistinguishable from a hang.
|
|
@@ -775,7 +776,10 @@ class Rollout:
|
|
|
775
776
|
calls, last_title = session.progress_snapshot()
|
|
776
777
|
usage = session.latest_usage_totals()
|
|
777
778
|
tokens = usage.get("total_tokens") if usage else None
|
|
778
|
-
return ActivitySnapshot(
|
|
779
|
+
return ActivitySnapshot(
|
|
780
|
+
self._phase,
|
|
781
|
+
SessionCounters(calls, last_title, tokens, session.distinct_tool_titles),
|
|
782
|
+
)
|
|
779
783
|
|
|
780
784
|
@property
|
|
781
785
|
def trajectory(self) -> list[dict]:
|