benchflow 0.6.10.dev1930__tar.gz → 0.6.10.dev1961__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.10.dev1930 → benchflow-0.6.10.dev1961}/PKG-INFO +16 -16
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/README.md +15 -15
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/pyproject.toml +9 -2
- benchflow-0.6.10.dev1961/src/benchflow/cli/_traj_upload_ui.py +138 -0
- benchflow-0.6.10.dev1961/src/benchflow/cli/traj.py +278 -0
- benchflow-0.6.10.dev1961/src/benchflow/publish/_progress.py +38 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/publish/azure_blob.py +11 -2
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/publish/broker.py +18 -8
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/publish/redact.py +33 -7
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/publish/traj_capture.py +171 -63
- benchflow-0.6.10.dev1961/src/benchflow/publish/traj_report.py +762 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/trajectories/types.py +7 -3
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_publish_azure_blob.py +50 -6
- benchflow-0.6.10.dev1961/tests/test_traj_report.py +443 -0
- benchflow-0.6.10.dev1961/tests/test_traj_staging_phases.py +242 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_traj_upload_cli.py +205 -10
- benchflow-0.6.10.dev1961/tests/test_traj_upload_skill.py +100 -0
- benchflow-0.6.10.dev1961/tests/test_trajectory_upload_layout.py +77 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_trajectory_upload_service.py +225 -3
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/trajectories/test_redaction.py +20 -0
- benchflow-0.6.10.dev1930/src/benchflow/cli/traj.py +0 -148
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/.gitignore +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/CHANGELOG.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/LICENSE +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_paths.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_run.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_types.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/evaluation_results.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/live_activity.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/scoring.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/_utils/yaml_loader.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/acp/client.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/acp/container_transport.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/acp/runtime.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/acp/session.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agents/codex_config.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agents/credentials.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agents/install.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agents/registry.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/branch.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/_failure_evidence.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/_live_progress.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/_shared.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/eval_artifacts.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/main.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/continue_run/orchestrator.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/contracts/planes.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/eval_artifacts.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/eval_lift.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/eval_plan.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/eval_sharding.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/eval_worker.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/evaluation.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/metrics.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/models.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/monitor.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/providers/litellm_logging.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/providers/litellm_runtime.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/providers/runtime.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/py.typed +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/review/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/review/config.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/review/prompts.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/review/runner.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/review/wrapper.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rollout/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rollout/_config.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rollout/_deadline.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rollout/_results.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rollout/_setup.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rollout/task_runtime.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/rollout_planes.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/runtime.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/_compose.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/agentcore.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/apple_container.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/daytona.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/daytona_dind.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/daytona_strategies.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/docker.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/lockdown.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/process/_base.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/process/agentcore.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/process/apple.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/process/daytona.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/process/docker.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/protocol.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/providers.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/setup.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/scenes.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/sdk.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/skills.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/config.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/document.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/env.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/export.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/package.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/runtime_capabilities.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/task.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/trajectories/_capture.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/trajectories/_llm_capture.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/trajectories/export_prime_sft.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/trajectories/export_trl_sft.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/trajectories/results.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/trajectories/viewer.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/agents/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/conformance/README.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/conftest.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/environment/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/_consistency.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/check_results.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/run.sh +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/run_suite.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/scenarios.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_acp.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_adapters.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_agent_cli.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_agent_registry.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_agent_router.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_agent_setup.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_agent_spec.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_agentcore_parallel.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_agentcore_sandbox.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_branch.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_cli_live_progress.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_cli_misc.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_codex_review.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_config_override.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_config_redaction.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_console_progress.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_daytona_download.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_diagnostics.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_docs_examples.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_env_registry.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_env_setup.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_eval_lift.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_hosted_env.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_integration_suite.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_internet_policy.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_job.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_learner_skills.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_learner_store.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_litellm_config.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_litellm_logging.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_litellm_reasoning_passthrough.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_litellm_runtime.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_live_llm_trajectory.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_llm_judge.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_loop_summary.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_metrics.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_oracle.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_paths_safe.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_process.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_providers.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_reexport.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_registry_invariants.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_release_version.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_release_workflow_wiring.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_review_rubric.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_review_runtime.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_reward_node.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_reward_range.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_rewards.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_rollout_hard_deadline.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_rollout_planes_contract.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_rollout_upload.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_rubric_config.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_runtime.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_runtime_capabilities.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_sandbox.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_scene.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_scoring.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_skill_eval.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_skill_policy.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_skills.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_smoke.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_source_adapters.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_task_config.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_task_digest.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_task_document.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_task_download.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_task_export.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_task_output_format.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_task_package.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_task_runtime_primitive.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_tasks.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_train_cli.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_trial_litellm_runtime.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_trl_integration.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_usage_required.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_user.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_verifier_document.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_verifier_output.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_verifier_wedge_retry.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_verify.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/test_yaml_config.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.6.10.dev1930 → benchflow-0.6.10.dev1961}/tests/trajectories/test_tree.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: benchflow
|
|
3
|
-
Version: 0.6.10.
|
|
3
|
+
Version: 0.6.10.dev1961
|
|
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
|
|
@@ -87,36 +87,36 @@ Description-Content-Type: text/markdown
|
|
|
87
87
|
|
|
88
88
|
BenchFlow is a universal environment framework: it runs AI agents against task environments and scores them through one hardened contract. **A benchmark is just a frozen environment** — point BenchFlow at any of them, drive it with *any* ACP agent, and run single-agent, multi-agent, or multi-round patterns over the same Scene-based lifecycle.
|
|
89
89
|
|
|
90
|
-
|
|
91
|
-
- **Any ACP agent** — Gemini CLI, Claude Code, Codex, OpenCode, OpenHands, Pi, or your own
|
|
92
|
-
- **Single + multi + progressive** — single-agent / multi-agent (coder + reviewer, simulated user) / multi-round with a Python `BaseUser` callback
|
|
93
|
-
- **Loop strategies** — wrap any agent in a `--loop-strategy` (`verify-retry`, `self-review`); every rollout captures a per-iteration reward + token trajectory, so you can plot capability against cost (can a cheap model + loops match an expensive one at equal token spend?)
|
|
94
|
-
- **`task.md` tasks** — one file (YAML frontmatter + prompt body) replaces the split `task.toml` + `instruction.md` layout; author with `bench tasks init` / `check` / `migrate` / `export`
|
|
95
|
-
- **Hosted environments** — run external PrimeIntellect / Verifiers environments through `--source-env`, without converting them to BenchFlow tasks
|
|
96
|
-
- **Sandboxes** — Docker locally, Apple Container on Apple Silicon Macs, Daytona for parallel cloud runs (orphaned sandboxes auto-reaped at eval start), Modal for serverless/GPU-backed task environments, and AgentCore for AWS-hosted runtimes
|
|
97
|
-
- **Hardened verifier** — defaults block BenchJack/Meerkat-style reward-hacking; tasks opt out per-feature
|
|
98
|
-
- **Training-ready output** — scored rollouts emit a Verifiers/ORS reward record and best-effort ATIF (`trainer/atif.json`) / ADP (`trainer/adp.jsonl`) conversions; ATIF is omitted when the trajectory is empty, and conversion errors are reported in the rollout result
|
|
90
|
+
## Qucik start: 1. Upload a trajectory
|
|
99
91
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
No BenchFlow account, Azure credentials, or API key is required:
|
|
92
|
+
For local Claude Code or Codex jsonl formatted trajectory files that you are proud of (contain challenging tasks you dealed with via chatting to agents), you can upload that file to BenchFlow to join the competition for winning $2,000 cash reward. No BenchFlow account, credentials, or API key is required:
|
|
103
93
|
|
|
104
94
|
```bash
|
|
105
95
|
# Install or upgrade BenchFlow
|
|
106
96
|
uv tool install --python 3.12 --upgrade benchflow
|
|
107
97
|
|
|
108
|
-
#
|
|
98
|
+
# Interactive upload (prompts for path, GitHub ID, then email)
|
|
99
|
+
bench traj upload
|
|
100
|
+
|
|
101
|
+
# Or provide every input up front
|
|
109
102
|
bench traj upload /absolute/path/to/trial \
|
|
110
103
|
--github-id YOUR_GITHUB_ID \
|
|
111
104
|
--email YOU@example.com
|
|
112
105
|
```
|
|
113
106
|
|
|
114
107
|
The path may be a trial directory, a directory of JSONL files, or one JSONL
|
|
115
|
-
file.
|
|
108
|
+
file. Path and contributor details are required inputs; any that are omitted are
|
|
109
|
+
prompted for interactively. Detected secret values are replaced locally with
|
|
110
|
+
`<XXX-benchflow-key-values-XXX>` before upload. Contributor details are stored
|
|
111
|
+
in `manifest.json`. After the path is entered, the CLI shows a redacted preview
|
|
112
|
+
and a trajectory report with partitioned human, thinking, and tool-call counts,
|
|
113
|
+
creation time, file size, and the number of masked key values. Interactive users
|
|
114
|
+
confirm the report before a byte-progress display starts the upload. The full
|
|
115
|
+
redacted report is retained in the uploaded `manifest.json`.
|
|
116
116
|
See the concise [upload skill](./.agents/skills/benchflow-traj-upload/SKILL.md)
|
|
117
117
|
or the [trajectory upload guide](./docs/traj-upload.md).
|
|
118
118
|
|
|
119
|
-
## 2. Run with a ChatGPT or Claude subscription
|
|
119
|
+
## Qucik start: 2. Run with a ChatGPT or Claude subscription
|
|
120
120
|
|
|
121
121
|
No OpenAI or Anthropic API key is required. Start Docker, install BenchFlow,
|
|
122
122
|
then run **one** of these options. BenchFlow detects the saved host login and
|
|
@@ -13,36 +13,36 @@
|
|
|
13
13
|
|
|
14
14
|
BenchFlow is a universal environment framework: it runs AI agents against task environments and scores them through one hardened contract. **A benchmark is just a frozen environment** — point BenchFlow at any of them, drive it with *any* ACP agent, and run single-agent, multi-agent, or multi-round patterns over the same Scene-based lifecycle.
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
- **Any ACP agent** — Gemini CLI, Claude Code, Codex, OpenCode, OpenHands, Pi, or your own
|
|
18
|
-
- **Single + multi + progressive** — single-agent / multi-agent (coder + reviewer, simulated user) / multi-round with a Python `BaseUser` callback
|
|
19
|
-
- **Loop strategies** — wrap any agent in a `--loop-strategy` (`verify-retry`, `self-review`); every rollout captures a per-iteration reward + token trajectory, so you can plot capability against cost (can a cheap model + loops match an expensive one at equal token spend?)
|
|
20
|
-
- **`task.md` tasks** — one file (YAML frontmatter + prompt body) replaces the split `task.toml` + `instruction.md` layout; author with `bench tasks init` / `check` / `migrate` / `export`
|
|
21
|
-
- **Hosted environments** — run external PrimeIntellect / Verifiers environments through `--source-env`, without converting them to BenchFlow tasks
|
|
22
|
-
- **Sandboxes** — Docker locally, Apple Container on Apple Silicon Macs, Daytona for parallel cloud runs (orphaned sandboxes auto-reaped at eval start), Modal for serverless/GPU-backed task environments, and AgentCore for AWS-hosted runtimes
|
|
23
|
-
- **Hardened verifier** — defaults block BenchJack/Meerkat-style reward-hacking; tasks opt out per-feature
|
|
24
|
-
- **Training-ready output** — scored rollouts emit a Verifiers/ORS reward record and best-effort ATIF (`trainer/atif.json`) / ADP (`trainer/adp.jsonl`) conversions; ATIF is omitted when the trajectory is empty, and conversion errors are reported in the rollout result
|
|
16
|
+
## Qucik start: 1. Upload a trajectory
|
|
25
17
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
No BenchFlow account, Azure credentials, or API key is required:
|
|
18
|
+
For local Claude Code or Codex jsonl formatted trajectory files that you are proud of (contain challenging tasks you dealed with via chatting to agents), you can upload that file to BenchFlow to join the competition for winning $2,000 cash reward. No BenchFlow account, credentials, or API key is required:
|
|
29
19
|
|
|
30
20
|
```bash
|
|
31
21
|
# Install or upgrade BenchFlow
|
|
32
22
|
uv tool install --python 3.12 --upgrade benchflow
|
|
33
23
|
|
|
34
|
-
#
|
|
24
|
+
# Interactive upload (prompts for path, GitHub ID, then email)
|
|
25
|
+
bench traj upload
|
|
26
|
+
|
|
27
|
+
# Or provide every input up front
|
|
35
28
|
bench traj upload /absolute/path/to/trial \
|
|
36
29
|
--github-id YOUR_GITHUB_ID \
|
|
37
30
|
--email YOU@example.com
|
|
38
31
|
```
|
|
39
32
|
|
|
40
33
|
The path may be a trial directory, a directory of JSONL files, or one JSONL
|
|
41
|
-
file.
|
|
34
|
+
file. Path and contributor details are required inputs; any that are omitted are
|
|
35
|
+
prompted for interactively. Detected secret values are replaced locally with
|
|
36
|
+
`<XXX-benchflow-key-values-XXX>` before upload. Contributor details are stored
|
|
37
|
+
in `manifest.json`. After the path is entered, the CLI shows a redacted preview
|
|
38
|
+
and a trajectory report with partitioned human, thinking, and tool-call counts,
|
|
39
|
+
creation time, file size, and the number of masked key values. Interactive users
|
|
40
|
+
confirm the report before a byte-progress display starts the upload. The full
|
|
41
|
+
redacted report is retained in the uploaded `manifest.json`.
|
|
42
42
|
See the concise [upload skill](./.agents/skills/benchflow-traj-upload/SKILL.md)
|
|
43
43
|
or the [trajectory upload guide](./docs/traj-upload.md).
|
|
44
44
|
|
|
45
|
-
## 2. Run with a ChatGPT or Claude subscription
|
|
45
|
+
## Qucik start: 2. Run with a ChatGPT or Claude subscription
|
|
46
46
|
|
|
47
47
|
No OpenAI or Anthropic API key is required. Start Docker, install BenchFlow,
|
|
48
48
|
then run **one** of these options. BenchFlow detects the saved host login and
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "benchflow"
|
|
3
|
-
version = "0.6.10.
|
|
3
|
+
version = "0.6.10.dev1961"
|
|
4
4
|
description = "Multi-turn agent benchmarking with ACP — run any agent, any model, any provider."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -160,10 +160,17 @@ markers = [
|
|
|
160
160
|
target-version = "py312"
|
|
161
161
|
# Vendored third-party service packages baked into task images (e.g. the
|
|
162
162
|
# smolclaws claw-* sources copied under a ClawsBench task's environment/) are
|
|
163
|
-
# not BenchFlow code — do not lint them.
|
|
163
|
+
# not BenchFlow code — do not lint them. The skill-creator, task-creator, and
|
|
164
|
+
# task-review skills are verbatim upstream copies; keeping them byte-identical
|
|
165
|
+
# matters more than local style, so they are excluded too. Skills authored here
|
|
166
|
+
# (e.g. benchflow-experiment-review) stay linted.
|
|
164
167
|
extend-exclude = [
|
|
165
168
|
".agents/skills/skill-creator",
|
|
169
|
+
".agents/skills/task-creator",
|
|
170
|
+
".agents/skills/task-review",
|
|
166
171
|
".claude/skills/skill-creator",
|
|
172
|
+
".claude/skills/task-creator",
|
|
173
|
+
".claude/skills/task-review",
|
|
167
174
|
"benchmarks/**/tasks/**/environment/claw-*",
|
|
168
175
|
"tests/fixtures/skillsbench_slice",
|
|
169
176
|
]
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"""Rich terminal rendering for trajectory inspection and upload progress."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Callable, Iterator
|
|
6
|
+
from contextlib import contextmanager
|
|
7
|
+
from dataclasses import dataclass
|
|
8
|
+
|
|
9
|
+
from rich.console import Console
|
|
10
|
+
from rich.panel import Panel
|
|
11
|
+
from rich.progress import (
|
|
12
|
+
BarColumn,
|
|
13
|
+
DownloadColumn,
|
|
14
|
+
Progress,
|
|
15
|
+
SpinnerColumn,
|
|
16
|
+
TaskProgressColumn,
|
|
17
|
+
TextColumn,
|
|
18
|
+
TimeElapsedColumn,
|
|
19
|
+
)
|
|
20
|
+
from rich.table import Table
|
|
21
|
+
from rich.text import Text
|
|
22
|
+
|
|
23
|
+
from benchflow.publish.redact import REDACTED
|
|
24
|
+
from benchflow.publish.traj_capture import StagedFile
|
|
25
|
+
from benchflow.publish.traj_report import PREVIEW_WORD_LIMIT, TrajectoryReport
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def render_trajectory_report(report: TrajectoryReport, *, console: Console) -> None:
|
|
29
|
+
"""Render upload facts and a bounded, already-redacted trajectory preview."""
|
|
30
|
+
facts = Table.grid(padding=(0, 2))
|
|
31
|
+
facts.add_column(style="bold cyan", no_wrap=True)
|
|
32
|
+
facts.add_column()
|
|
33
|
+
facts.add_row("Primary trajectory", Text(report.primary_file))
|
|
34
|
+
facts.add_row("Format", report.format.value)
|
|
35
|
+
facts.add_row("Created", _format_created_at(report))
|
|
36
|
+
facts.add_row("JSONL files", str(report.file_count))
|
|
37
|
+
facts.add_row("Trajectory size", format_bytes(report.size_bytes))
|
|
38
|
+
facts.add_row("Total steps", str(report.total_steps))
|
|
39
|
+
facts.add_row("Thinking steps", str(report.thinking_steps))
|
|
40
|
+
facts.add_row("Tool-call steps", str(report.tool_call_steps))
|
|
41
|
+
facts.add_row("Human steps", str(report.human_steps))
|
|
42
|
+
facts.add_row(
|
|
43
|
+
"API keys / secrets masked",
|
|
44
|
+
Text(str(report.masked_values), style="bold green"),
|
|
45
|
+
)
|
|
46
|
+
facts.add_row("Safe replacement", Text(REDACTED))
|
|
47
|
+
console.print(Panel(facts, title="Trajectory report", border_style="cyan"))
|
|
48
|
+
|
|
49
|
+
if not report.preview:
|
|
50
|
+
return
|
|
51
|
+
preview = Table(
|
|
52
|
+
title=(
|
|
53
|
+
f"First {len(report.preview)} trajectory steps "
|
|
54
|
+
f"(up to {PREVIEW_WORD_LIMIT} words each)"
|
|
55
|
+
),
|
|
56
|
+
show_lines=True,
|
|
57
|
+
header_style="bold cyan",
|
|
58
|
+
)
|
|
59
|
+
preview.add_column("#", justify="right", style="dim", no_wrap=True)
|
|
60
|
+
preview.add_column("Kind", no_wrap=True)
|
|
61
|
+
preview.add_column("Preview", overflow="fold")
|
|
62
|
+
for step in report.preview:
|
|
63
|
+
preview.add_row(str(step.number), step.kind, Text(step.summary))
|
|
64
|
+
console.print(preview)
|
|
65
|
+
if len(report.preview) < report.total_steps:
|
|
66
|
+
console.print(
|
|
67
|
+
f"[dim]Showing {len(report.preview)} of {report.total_steps} steps. "
|
|
68
|
+
"Use --preview-steps to change the preview.[/dim]"
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
@dataclass(frozen=True)
|
|
73
|
+
class UploadProgressHooks:
|
|
74
|
+
"""Transport callbacks that feed one shared progress bar."""
|
|
75
|
+
|
|
76
|
+
on_bytes: Callable[[int], None]
|
|
77
|
+
on_file_complete: Callable[[StagedFile], None]
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
@contextmanager
|
|
81
|
+
def upload_progress(
|
|
82
|
+
files: tuple[StagedFile, ...],
|
|
83
|
+
*,
|
|
84
|
+
console: Console,
|
|
85
|
+
) -> Iterator[UploadProgressHooks]:
|
|
86
|
+
"""Display streamed byte progress and yield the transport callbacks."""
|
|
87
|
+
total_bytes = sum(item.size_bytes for item in files)
|
|
88
|
+
streamed_bytes = 0
|
|
89
|
+
boundary_bytes = 0
|
|
90
|
+
progress = Progress(
|
|
91
|
+
SpinnerColumn(style="cyan"),
|
|
92
|
+
TextColumn("[bold cyan]{task.description}"),
|
|
93
|
+
BarColumn(),
|
|
94
|
+
TaskProgressColumn(),
|
|
95
|
+
DownloadColumn(binary_units=True),
|
|
96
|
+
TimeElapsedColumn(),
|
|
97
|
+
console=console,
|
|
98
|
+
)
|
|
99
|
+
with progress:
|
|
100
|
+
task_id = progress.add_task("Uploading trajectory", total=total_bytes)
|
|
101
|
+
|
|
102
|
+
def on_bytes(count: int) -> None:
|
|
103
|
+
nonlocal streamed_bytes
|
|
104
|
+
streamed_bytes = min(streamed_bytes + count, total_bytes)
|
|
105
|
+
progress.update(task_id, completed=streamed_bytes)
|
|
106
|
+
|
|
107
|
+
def on_file_complete(staged_file: StagedFile) -> None:
|
|
108
|
+
# Resync at each file boundary: a transport retry may re-read
|
|
109
|
+
# bytes, so the boundary is authoritative for completed work.
|
|
110
|
+
nonlocal boundary_bytes, streamed_bytes
|
|
111
|
+
boundary_bytes = min(boundary_bytes + staged_file.size_bytes, total_bytes)
|
|
112
|
+
streamed_bytes = boundary_bytes
|
|
113
|
+
progress.update(
|
|
114
|
+
task_id,
|
|
115
|
+
completed=boundary_bytes,
|
|
116
|
+
description=f"Uploaded {staged_file.relname}",
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
yield UploadProgressHooks(on_bytes=on_bytes, on_file_complete=on_file_complete)
|
|
120
|
+
progress.update(
|
|
121
|
+
task_id,
|
|
122
|
+
completed=total_bytes,
|
|
123
|
+
description="Upload complete",
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def _format_created_at(report: TrajectoryReport) -> str:
|
|
128
|
+
local = report.created_at.astimezone()
|
|
129
|
+
return f"{local:%Y-%m-%d %H:%M:%S %Z} ({report.created_at_source})"
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def format_bytes(size: int) -> str:
|
|
133
|
+
value = float(size)
|
|
134
|
+
for unit in ("B", "KB", "MB", "GB"):
|
|
135
|
+
if value < 1024 or unit == "GB":
|
|
136
|
+
return f"{value:.1f} {unit}"
|
|
137
|
+
value /= 1024
|
|
138
|
+
raise AssertionError("unreachable")
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
"""``bench traj upload`` — contribute validated trajectory captures."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import os
|
|
6
|
+
from collections.abc import Callable
|
|
7
|
+
from dataclasses import dataclass
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
from typing import Annotated, Protocol
|
|
10
|
+
|
|
11
|
+
import typer
|
|
12
|
+
from rich.markup import escape
|
|
13
|
+
|
|
14
|
+
from benchflow.cli._shared import console, print_error
|
|
15
|
+
from benchflow.cli._traj_upload_ui import (
|
|
16
|
+
UploadProgressHooks,
|
|
17
|
+
format_bytes,
|
|
18
|
+
render_trajectory_report,
|
|
19
|
+
upload_progress,
|
|
20
|
+
)
|
|
21
|
+
from benchflow.publish.traj_capture import (
|
|
22
|
+
StagedCapture,
|
|
23
|
+
default_source_id,
|
|
24
|
+
finalize_trajectory_capture,
|
|
25
|
+
stage_trajectory_artifacts,
|
|
26
|
+
validate_email,
|
|
27
|
+
validate_github_id,
|
|
28
|
+
)
|
|
29
|
+
from benchflow.publish.traj_report import (
|
|
30
|
+
DEFAULT_PREVIEW_STEPS,
|
|
31
|
+
MAX_PREVIEW_STEPS,
|
|
32
|
+
build_trajectory_report,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
# The environment variable remains an override for development and disaster
|
|
36
|
+
# recovery.
|
|
37
|
+
DEFAULT_TRAJ_BROKER_URL: str | None = (
|
|
38
|
+
"https://tasksminer-traj-broker.nicewave-c3abaecf.westus2.azurecontainerapps.io"
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
@dataclass(frozen=True)
|
|
43
|
+
class _UploadOptions:
|
|
44
|
+
path: Path | None
|
|
45
|
+
github_id: str | None
|
|
46
|
+
email: str | None
|
|
47
|
+
source_id: str | None
|
|
48
|
+
direct: bool
|
|
49
|
+
container_url: str | None
|
|
50
|
+
dry_run: bool
|
|
51
|
+
preview_steps: int
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@dataclass(frozen=True)
|
|
55
|
+
class _UploadDestination:
|
|
56
|
+
url: str
|
|
57
|
+
direct: bool
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class _PublishResult(Protocol):
|
|
61
|
+
@property
|
|
62
|
+
def url(self) -> str: ...
|
|
63
|
+
|
|
64
|
+
@property
|
|
65
|
+
def uploaded(self) -> tuple[str, ...]: ...
|
|
66
|
+
|
|
67
|
+
@property
|
|
68
|
+
def skipped(self) -> tuple[str, ...]: ...
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def register_traj(app: typer.Typer) -> None:
|
|
72
|
+
"""Attach the trajectory contribution group to the top-level app."""
|
|
73
|
+
traj_app = typer.Typer(help="Trajectory commands.")
|
|
74
|
+
app.add_typer(traj_app, name="traj", rich_help_panel="Core")
|
|
75
|
+
|
|
76
|
+
@traj_app.command("upload")
|
|
77
|
+
def upload(
|
|
78
|
+
path: Annotated[
|
|
79
|
+
Path | None,
|
|
80
|
+
typer.Argument(help="Trajectory JSONL file, directory, or trial directory"),
|
|
81
|
+
] = None,
|
|
82
|
+
github_id: Annotated[
|
|
83
|
+
str | None,
|
|
84
|
+
typer.Option("--github-id", help="Contributor GitHub username"),
|
|
85
|
+
] = None,
|
|
86
|
+
email: Annotated[
|
|
87
|
+
str | None,
|
|
88
|
+
typer.Option("--email", help="Contributor email stored in the manifest"),
|
|
89
|
+
] = None,
|
|
90
|
+
source_id: Annotated[
|
|
91
|
+
str | None,
|
|
92
|
+
typer.Option("--source-id", help="Stable contributor source identifier"),
|
|
93
|
+
] = None,
|
|
94
|
+
direct: Annotated[
|
|
95
|
+
bool,
|
|
96
|
+
typer.Option("--direct", help="Upload with local Azure credentials"),
|
|
97
|
+
] = False,
|
|
98
|
+
container_url: Annotated[
|
|
99
|
+
str | None,
|
|
100
|
+
typer.Option("--container-url", help="Azure container URL for --direct"),
|
|
101
|
+
] = None,
|
|
102
|
+
dry_run: Annotated[
|
|
103
|
+
bool,
|
|
104
|
+
typer.Option("--dry-run", help="Validate and stage without uploading"),
|
|
105
|
+
] = False,
|
|
106
|
+
preview_steps: Annotated[
|
|
107
|
+
int,
|
|
108
|
+
typer.Option(
|
|
109
|
+
"--preview-steps",
|
|
110
|
+
min=0,
|
|
111
|
+
max=MAX_PREVIEW_STEPS,
|
|
112
|
+
help="Number of redacted trajectory steps to preview",
|
|
113
|
+
),
|
|
114
|
+
] = DEFAULT_PREVIEW_STEPS,
|
|
115
|
+
) -> None:
|
|
116
|
+
"""Inspect, redact, confirm, and upload trajectory JSONL."""
|
|
117
|
+
try:
|
|
118
|
+
_run_upload(
|
|
119
|
+
_UploadOptions(
|
|
120
|
+
path=path,
|
|
121
|
+
github_id=github_id,
|
|
122
|
+
email=email,
|
|
123
|
+
source_id=source_id,
|
|
124
|
+
direct=direct,
|
|
125
|
+
container_url=container_url,
|
|
126
|
+
dry_run=dry_run,
|
|
127
|
+
preview_steps=preview_steps,
|
|
128
|
+
)
|
|
129
|
+
)
|
|
130
|
+
except ValueError as exc:
|
|
131
|
+
print_error(str(exc))
|
|
132
|
+
raise typer.Exit(1) from None
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def _run_upload(options: _UploadOptions) -> None:
|
|
136
|
+
interactive = any(
|
|
137
|
+
value is None for value in (options.path, options.github_id, options.email)
|
|
138
|
+
)
|
|
139
|
+
path = options.path or _prompt_for_path()
|
|
140
|
+
source_id = options.source_id or default_source_id(path)
|
|
141
|
+
destination = _resolve_destination(options)
|
|
142
|
+
|
|
143
|
+
with (
|
|
144
|
+
console.status(
|
|
145
|
+
"[bold cyan]Inspecting trajectory and masking key values…"
|
|
146
|
+
) as status,
|
|
147
|
+
stage_trajectory_artifacts(path, source_id=source_id) as artifacts,
|
|
148
|
+
):
|
|
149
|
+
report = build_trajectory_report(
|
|
150
|
+
artifacts.files,
|
|
151
|
+
masked_values=artifacts.redaction_replacements,
|
|
152
|
+
preview_steps=options.preview_steps,
|
|
153
|
+
)
|
|
154
|
+
status.stop()
|
|
155
|
+
render_trajectory_report(report, console=console)
|
|
156
|
+
|
|
157
|
+
github_id, email = _resolve_contributor(options.github_id, options.email)
|
|
158
|
+
staged = finalize_trajectory_capture(
|
|
159
|
+
artifacts,
|
|
160
|
+
uploaded_by=os.environ.get("BENCHFLOW_TRAJ_UPLOADED_BY"),
|
|
161
|
+
github_id=github_id,
|
|
162
|
+
email=email,
|
|
163
|
+
trajectory_report=report.as_manifest_metadata(),
|
|
164
|
+
)
|
|
165
|
+
if options.dry_run:
|
|
166
|
+
_print_dry_run(staged)
|
|
167
|
+
return
|
|
168
|
+
if interactive and not typer.confirm(
|
|
169
|
+
"Upload this trajectory?",
|
|
170
|
+
default=False,
|
|
171
|
+
):
|
|
172
|
+
console.print("[yellow]Upload cancelled.[/yellow]")
|
|
173
|
+
return
|
|
174
|
+
with upload_progress(staged.files, console=console) as hooks:
|
|
175
|
+
result = _publish(staged, destination=destination, hooks=hooks)
|
|
176
|
+
_print_upload_result(staged, result)
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def _resolve_contributor(
|
|
180
|
+
github_id: str | None,
|
|
181
|
+
email: str | None,
|
|
182
|
+
) -> tuple[str, str]:
|
|
183
|
+
return (
|
|
184
|
+
github_id or _prompt_valid("GitHub ID", validate_github_id),
|
|
185
|
+
email or _prompt_valid("Email", validate_email),
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def _prompt_for_path() -> Path:
|
|
190
|
+
while True:
|
|
191
|
+
raw = typer.prompt("Trajectory JSONL file or trial directory").strip()
|
|
192
|
+
# Shells wrap dragged-in paths in quotes; accept them as typed.
|
|
193
|
+
if len(raw) >= 2 and raw[0] == raw[-1] and raw[0] in {"'", '"'}:
|
|
194
|
+
raw = raw[1:-1]
|
|
195
|
+
path = Path(raw).expanduser()
|
|
196
|
+
if path.exists():
|
|
197
|
+
return path
|
|
198
|
+
print_error(f"path not found: {path}")
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def _prompt_valid(label: str, validate: Callable[[str], str]) -> str:
|
|
202
|
+
while True:
|
|
203
|
+
try:
|
|
204
|
+
return validate(typer.prompt(label))
|
|
205
|
+
except ValueError as exc:
|
|
206
|
+
print_error(str(exc))
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
def _resolve_destination(options: _UploadOptions) -> _UploadDestination:
|
|
210
|
+
if options.direct:
|
|
211
|
+
destination = options.container_url or os.environ.get(
|
|
212
|
+
"BENCHFLOW_AZURE_CONTAINER_URL"
|
|
213
|
+
)
|
|
214
|
+
if not destination:
|
|
215
|
+
raise ValueError(
|
|
216
|
+
"--direct requires --container-url or BENCHFLOW_AZURE_CONTAINER_URL"
|
|
217
|
+
)
|
|
218
|
+
return _UploadDestination(url=destination, direct=True)
|
|
219
|
+
if options.container_url:
|
|
220
|
+
raise ValueError("--container-url is only valid with --direct")
|
|
221
|
+
destination = os.environ.get("BENCHFLOW_TRAJ_BROKER_URL") or DEFAULT_TRAJ_BROKER_URL
|
|
222
|
+
if not destination:
|
|
223
|
+
raise ValueError(
|
|
224
|
+
"no trajectory broker is configured; set BENCHFLOW_TRAJ_BROKER_URL, "
|
|
225
|
+
"or use --direct with --container-url/BENCHFLOW_AZURE_CONTAINER_URL "
|
|
226
|
+
"if you have Azure credentials"
|
|
227
|
+
)
|
|
228
|
+
return _UploadDestination(url=destination, direct=False)
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
def _publish(
|
|
232
|
+
staged: StagedCapture,
|
|
233
|
+
*,
|
|
234
|
+
destination: _UploadDestination,
|
|
235
|
+
hooks: UploadProgressHooks,
|
|
236
|
+
) -> _PublishResult:
|
|
237
|
+
if destination.direct:
|
|
238
|
+
from benchflow.publish.azure_blob import upload_capture_direct
|
|
239
|
+
|
|
240
|
+
return upload_capture_direct(
|
|
241
|
+
staged,
|
|
242
|
+
container_url=destination.url,
|
|
243
|
+
on_file_complete=hooks.on_file_complete,
|
|
244
|
+
on_bytes=hooks.on_bytes,
|
|
245
|
+
)
|
|
246
|
+
from benchflow.publish.broker import upload_capture_via_broker
|
|
247
|
+
|
|
248
|
+
return upload_capture_via_broker(
|
|
249
|
+
staged,
|
|
250
|
+
broker_url=destination.url,
|
|
251
|
+
on_file_complete=hooks.on_file_complete,
|
|
252
|
+
on_bytes=hooks.on_bytes,
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
def _print_upload_result(staged: StagedCapture, result: _PublishResult) -> None:
|
|
257
|
+
if not result.uploaded:
|
|
258
|
+
console.print(f"[green]Already uploaded:[/green] {escape(result.url)} (no-op)")
|
|
259
|
+
return
|
|
260
|
+
size = sum(item.size_bytes for item in staged.files)
|
|
261
|
+
console.print(
|
|
262
|
+
"[green]Uploaded trajectory:[/green] "
|
|
263
|
+
f"{escape(result.url)} "
|
|
264
|
+
f"({len(result.uploaded)} uploaded, {len(result.skipped)} skipped, "
|
|
265
|
+
f"{format_bytes(size)}, {staged.redaction_replacements} redactions)"
|
|
266
|
+
)
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def _print_dry_run(staged: StagedCapture) -> None:
|
|
270
|
+
console.print("[bold]Dry run[/bold] — no files uploaded")
|
|
271
|
+
console.print(f"Digest: sha256:{staged.traj_digest}")
|
|
272
|
+
for staged_file in staged.files:
|
|
273
|
+
console.print(
|
|
274
|
+
f" {escape(staged_file.relname)} ({format_bytes(staged_file.size_bytes)})"
|
|
275
|
+
)
|
|
276
|
+
if staged.ignored:
|
|
277
|
+
console.print(f"Ignored: {escape(', '.join(staged.ignored))}")
|
|
278
|
+
console.print(f"Redactions: {staged.redaction_replacements}")
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""Byte-count reporting for streamed uploads."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from collections.abc import Callable, Iterator
|
|
6
|
+
from typing import BinaryIO
|
|
7
|
+
|
|
8
|
+
_CHUNK_BYTES = 64 * 1024
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ProgressReader:
|
|
12
|
+
"""File-like proxy that reports bytes consumed to a callback.
|
|
13
|
+
|
|
14
|
+
Supports both transport styles: httpx drains iterables, the Azure SDK
|
|
15
|
+
drains ``read``. ``seek``/``tell`` are delegated so either consumer can
|
|
16
|
+
still derive an exact Content-Length without emitting progress.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
def __init__(self, stream: BinaryIO, on_bytes: Callable[[int], None]) -> None:
|
|
20
|
+
self._stream = stream
|
|
21
|
+
self._on_bytes = on_bytes
|
|
22
|
+
|
|
23
|
+
def read(self, size: int = -1) -> bytes:
|
|
24
|
+
chunk = self._stream.read(size)
|
|
25
|
+
if chunk:
|
|
26
|
+
self._on_bytes(len(chunk))
|
|
27
|
+
return chunk
|
|
28
|
+
|
|
29
|
+
def __iter__(self) -> Iterator[bytes]:
|
|
30
|
+
while chunk := self._stream.read(_CHUNK_BYTES):
|
|
31
|
+
self._on_bytes(len(chunk))
|
|
32
|
+
yield chunk
|
|
33
|
+
|
|
34
|
+
def seek(self, offset: int, whence: int = 0) -> int:
|
|
35
|
+
return self._stream.seek(offset, whence)
|
|
36
|
+
|
|
37
|
+
def tell(self) -> int:
|
|
38
|
+
return self._stream.tell()
|
|
@@ -3,13 +3,15 @@
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
5
|
import logging
|
|
6
|
+
from collections.abc import Callable
|
|
6
7
|
from contextlib import contextmanager
|
|
7
8
|
from dataclasses import dataclass
|
|
8
9
|
from typing import Any
|
|
9
10
|
from urllib.parse import urlparse
|
|
10
11
|
|
|
11
12
|
from benchflow import __version__
|
|
12
|
-
from benchflow.publish.
|
|
13
|
+
from benchflow.publish._progress import ProgressReader
|
|
14
|
+
from benchflow.publish.traj_capture import StagedCapture, StagedFile
|
|
13
15
|
|
|
14
16
|
|
|
15
17
|
@dataclass(frozen=True)
|
|
@@ -33,6 +35,8 @@ def upload_capture_direct(
|
|
|
33
35
|
*,
|
|
34
36
|
container_url: str,
|
|
35
37
|
credential: Any = None,
|
|
38
|
+
on_file_complete: Callable[[StagedFile], None] | None = None,
|
|
39
|
+
on_bytes: Callable[[int], None] | None = None,
|
|
36
40
|
) -> BlobPublishResult:
|
|
37
41
|
"""Create staged files in an Azure container without overwriting blobs."""
|
|
38
42
|
try:
|
|
@@ -68,9 +72,12 @@ def upload_capture_direct(
|
|
|
68
72
|
blob_name = prefix + staged_file.relname
|
|
69
73
|
try:
|
|
70
74
|
with staged_file.local_path.open("rb") as stream:
|
|
75
|
+
data = (
|
|
76
|
+
stream if on_bytes is None else ProgressReader(stream, on_bytes)
|
|
77
|
+
)
|
|
71
78
|
client.upload_blob(
|
|
72
79
|
name=blob_name,
|
|
73
|
-
data=
|
|
80
|
+
data=data,
|
|
74
81
|
overwrite=False,
|
|
75
82
|
content_settings=ContentSettings(
|
|
76
83
|
content_type=staged_file.content_type
|
|
@@ -100,6 +107,8 @@ def upload_capture_direct(
|
|
|
100
107
|
) from exc
|
|
101
108
|
else:
|
|
102
109
|
uploaded.append(blob_name)
|
|
110
|
+
if on_file_complete is not None:
|
|
111
|
+
on_file_complete(staged_file)
|
|
103
112
|
return BlobPublishResult(
|
|
104
113
|
account=account,
|
|
105
114
|
container=container,
|