benchflow 0.7.8.dev2327__tar.gz → 0.7.8.dev2329__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.7.8.dev2327 → benchflow-0.7.8.dev2329}/PKG-INFO +1 -1
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/pyproject.toml +1 -1
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/acp/session.py +26 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/_capture.py +15 -10
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/assets/detail.js +72 -1
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/assets/template.html +1 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/models.py +48 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/payload.py +127 -1
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/sources.py +9 -0
- benchflow-0.7.8.dev2329/tests/test_tool_call_raw_io.py +175 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/trajectories/test_viewer_acp_renderer.py +5 -1
- benchflow-0.7.8.dev2329/tests/trajectories/test_viewer_rubric.py +227 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/.gitignore +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/CHANGELOG.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/LICENSE +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/README.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_paths.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_run.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_types.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/evaluation_results.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/live_activity.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/scoring.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/_utils/yaml_loader.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/acp/client.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/acp/container_transport.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/acp/runtime.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/acp/timeout_cleanup.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/acp/watchdog.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agents/codex_config.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agents/credentials.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agents/install.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agents/registry.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/branch.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/_failure_evidence.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/_live_progress.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/_shared.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/_traj_tui.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/_traj_upload_ui.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/eval_artifacts.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/main.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/cli/traj.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/continue_run/orchestrator.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/contracts/planes.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/eval_artifacts.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/eval_lift.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/eval_plan.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/eval_sharding.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/eval_worker.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/evaluation.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/metrics.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/models.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/monitor.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/providers/litellm_gemini_passthrough_patch.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/providers/litellm_logging.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/providers/litellm_runtime.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/providers/runtime.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/publish/_progress.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/publish/azure_blob.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/publish/broker.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/publish/redact.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/publish/traj_capture.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/publish/traj_report.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/py.typed +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/review/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/review/config.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/review/prompts.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/review/runner.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/review/scoring.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/review/wrapper.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rollout/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rollout/_config.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rollout/_deadline.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rollout/_results.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rollout/_setup.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rollout/task_runtime.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/rollout_planes.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/runtime.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/_compose.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/_compose_files/docker-compose-net-admin.yaml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/_egress_denylist_proxy.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/agentcore.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/apple_container.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/daytona.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/daytona_dind.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/daytona_strategies.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/docker.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/egress_denylist.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/lockdown.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/process/_base.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/process/agentcore.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/process/apple.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/process/daytona.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/process/docker.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/protocol.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/providers.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/setup.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/scenes.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/sdk.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/skills.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/config.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/document.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/env.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/export.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/package.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/runtime_capabilities.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/task.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/_llm_capture.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/export_prime_sft.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/export_trl_sft.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/results.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/sessions.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/types.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/__main__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/assets/boot.js +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/assets/catalog.js +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/assets/fonts/OFL-google-sans-code.txt +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-400-latin.woff2 +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/assets/fonts/google-sans-code-600-latin.woff2 +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/assets/theme.css +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/assets/theme.js +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/assets/vendor/LICENSE.highlight.js +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/assets/vendor/highlight.min.js +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/assets/viewer.css +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/assets/viewer.js +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/catalog.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/legacy.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/render.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/server.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/agents/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/agents/test_codex_config.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/conformance/README.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/conftest.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/environment/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/_consistency.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/check_results.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/run.sh +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/run_suite.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/scenarios.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_acp.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_acp_timeout_evidence.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_adapters.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_agent_cli.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_agent_registry.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_agent_router.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_agent_setup.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_agent_spec.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_agentcore_parallel.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_agentcore_sandbox.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_branch.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_cli_edge_case_hardening.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_cli_live_progress.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_cli_misc.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_codex_review.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_config_override.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_config_redaction.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_console_progress.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_daytona_download.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_diagnostics.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_docs_examples.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_egress_denylist.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_egress_denylist_integration.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_egress_model_gateway.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_env_registry.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_env_setup.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_eval_lift.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_hosted_env.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_hosted_search_policy.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_integration_suite.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_internet_policy.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_job.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_learner_skills.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_learner_store.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_litellm_config.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_litellm_gemini_passthrough_patch.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_litellm_logging.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_litellm_reasoning_passthrough.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_litellm_runtime.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_live_llm_trajectory.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_llm_judge.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_loop_summary.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_metrics.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_network_denylist_config.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_oracle.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_paths_safe.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_process.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_providers.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_publish_azure_blob.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_publish_huggingface.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_reexport.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_registry_invariants.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_release_version.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_release_workflow_wiring.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_review_rubric.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_review_runtime.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_reward_node.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_reward_range.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_rewards.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_rollout_hard_deadline.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_rollout_planes_contract.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_rollout_upload.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_rubric_config.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_runtime.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_runtime_capabilities.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_sandbox.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_scene.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_scoring.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_skill_eval.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_skill_policy.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_skills.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_smoke.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_source_adapters.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_task_config.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_task_digest.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_task_document.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_task_download.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_task_export.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_task_output_format.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_task_package.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_task_runtime_primitive.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_tasks.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_train_cli.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_traj_report.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_traj_staging_phases.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_traj_tui.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_traj_upload_cli.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_traj_upload_skill.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_traj_workspace.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_trajectory_upload_layout.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_trajectory_upload_service.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_trial_litellm_runtime.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_trl_integration.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_usage_required.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_user.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_verifier_document.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_verifier_output.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_verifier_wedge_retry.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_verify.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_viewer_confirm.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/test_yaml_config.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/trajectories/test_redaction.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/trajectories/test_tree.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/trajectories/test_viewer_browser.py +0 -0
- {benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/trajectories/test_viewer_theme.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: benchflow
|
|
3
|
-
Version: 0.7.8.
|
|
3
|
+
Version: 0.7.8.dev2329
|
|
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
|
|
@@ -162,6 +162,10 @@ class ToolCallRecord:
|
|
|
162
162
|
self.kind = kind
|
|
163
163
|
self.status = ToolCallStatus.PENDING
|
|
164
164
|
self.content: list[dict] = []
|
|
165
|
+
# ACP ``rawInput`` / ``rawOutput``: the agent's own view of the call.
|
|
166
|
+
# codex-acp puts the command and its output here and nowhere else.
|
|
167
|
+
self.raw_input: object | None = None
|
|
168
|
+
self.raw_output: object | None = None
|
|
165
169
|
self.started_at = datetime.now()
|
|
166
170
|
self.finished_at: datetime | None = None
|
|
167
171
|
|
|
@@ -178,6 +182,13 @@ class ToolCallRecord:
|
|
|
178
182
|
):
|
|
179
183
|
self.finished_at = datetime.now()
|
|
180
184
|
|
|
185
|
+
def absorb_raw_io(self, update: dict) -> None:
|
|
186
|
+
"""Keep the latest ``rawInput`` / ``rawOutput`` an update carries."""
|
|
187
|
+
if update.get("rawInput") is not None:
|
|
188
|
+
self.raw_input = update["rawInput"]
|
|
189
|
+
if update.get("rawOutput") is not None:
|
|
190
|
+
self.raw_output = update["rawOutput"]
|
|
191
|
+
|
|
181
192
|
|
|
182
193
|
class ACPSession:
|
|
183
194
|
"""Tracks mutable state for one ACP session.
|
|
@@ -417,6 +428,20 @@ class ACPSession:
|
|
|
417
428
|
update.get("kind", "other"), update.get("title", "")
|
|
418
429
|
),
|
|
419
430
|
)
|
|
431
|
+
# The opening notification may already carry content (codex-acp
|
|
432
|
+
# sends file-change diffs this way) and raw I/O.
|
|
433
|
+
initial_content = update.get("content")
|
|
434
|
+
if isinstance(initial_content, list) and initial_content:
|
|
435
|
+
record.content.extend(initial_content)
|
|
436
|
+
record.absorb_raw_io(update)
|
|
437
|
+
# An opening call may already be terminal (codex-acp file edits
|
|
438
|
+
# arrive completed with no later update); honor its status so it
|
|
439
|
+
# never lingers in pending_tool_call_ids().
|
|
440
|
+
if update.get("status") is not None:
|
|
441
|
+
try:
|
|
442
|
+
record.update_status(ToolCallStatus(update["status"]))
|
|
443
|
+
except ValueError:
|
|
444
|
+
logger.warning(f"Unknown tool call status: {update.get('status')}")
|
|
420
445
|
self._record_tool_call(record)
|
|
421
446
|
|
|
422
447
|
elif update_type == "tool_call_update":
|
|
@@ -440,6 +465,7 @@ class ACPSession:
|
|
|
440
465
|
status = ToolCallStatus.IN_PROGRESS
|
|
441
466
|
content = update.get("content")
|
|
442
467
|
record.update_status(status, content)
|
|
468
|
+
record.absorb_raw_io(update)
|
|
443
469
|
if status in (ToolCallStatus.PENDING, ToolCallStatus.IN_PROGRESS):
|
|
444
470
|
self._pending_tool_call_update_counts[tc_id] = (
|
|
445
471
|
self._pending_tool_call_update_counts.get(tc_id, 0) + 1
|
|
@@ -70,16 +70,21 @@ def _events_to_trajectory(events: list[dict]) -> list[dict]:
|
|
|
70
70
|
for event in events:
|
|
71
71
|
if event["type"] == "tool_call":
|
|
72
72
|
tc = event["record"]
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
73
|
+
record = {
|
|
74
|
+
"type": "tool_call",
|
|
75
|
+
"tool_call_id": tc.tool_call_id,
|
|
76
|
+
"kind": tc.kind,
|
|
77
|
+
"title": tc.title,
|
|
78
|
+
"status": tc.status.value,
|
|
79
|
+
"content": tc.content,
|
|
80
|
+
}
|
|
81
|
+
# Only present when the agent sent them, so trajectories of agents
|
|
82
|
+
# without raw I/O keep their exact shape.
|
|
83
|
+
if getattr(tc, "raw_input", None) is not None:
|
|
84
|
+
record["raw_input"] = tc.raw_input
|
|
85
|
+
if getattr(tc, "raw_output", None) is not None:
|
|
86
|
+
record["raw_output"] = tc.raw_output
|
|
87
|
+
out.append(record)
|
|
83
88
|
elif event["type"] in ("user_message", "agent_message", "agent_thought"):
|
|
84
89
|
out.append({"type": event["type"], "text": event["text"]})
|
|
85
90
|
elif event["type"] == "agent_timeout":
|
|
@@ -14,6 +14,7 @@ BF.detail = (() => {
|
|
|
14
14
|
["trace", "view-trace"],
|
|
15
15
|
["verifier", "view-verifier"],
|
|
16
16
|
["metrics", "view-metrics"],
|
|
17
|
+
["rubric", "view-rubric"],
|
|
17
18
|
]);
|
|
18
19
|
const STEP_KINDS = new Set(["prompt", "message", "thought", "tool", "timeout", "unknown"]);
|
|
19
20
|
const TOOL_HUES = new Set(["read", "edit", "execute", "fetch", "search", "think", "skill", "other"]);
|
|
@@ -178,6 +179,9 @@ BF.detail = (() => {
|
|
|
178
179
|
) {
|
|
179
180
|
available.push(["metrics", "Metrics"]);
|
|
180
181
|
}
|
|
182
|
+
if (payload.rubric && typeof payload.rubric === "object") {
|
|
183
|
+
available.push(["rubric", "Rubric"]);
|
|
184
|
+
}
|
|
181
185
|
|
|
182
186
|
const tabs = document.getElementById("tabs");
|
|
183
187
|
tabs.textContent = "";
|
|
@@ -584,6 +588,72 @@ BF.detail = (() => {
|
|
|
584
588
|
if (!main.children.length) main.appendChild(el("div", "panelblock", "No verifier artifacts in this rollout."));
|
|
585
589
|
}
|
|
586
590
|
|
|
591
|
+
function renderRubric(payload) {
|
|
592
|
+
const rubric = payload.rubric && typeof payload.rubric === "object" ? payload.rubric : null;
|
|
593
|
+
const main = document.getElementById("view-rubric");
|
|
594
|
+
main.textContent = "";
|
|
595
|
+
if (!rubric) {
|
|
596
|
+
main.appendChild(el("div", "panelblock", "No review report found for this rollout."));
|
|
597
|
+
return;
|
|
598
|
+
}
|
|
599
|
+
const scoring = rubric.scoring && typeof rubric.scoring === "object" ? rubric.scoring : {};
|
|
600
|
+
const head = el("div", "panelblock");
|
|
601
|
+
head.appendChild(el("h2", null, "Review"));
|
|
602
|
+
const facts = el("table", "plain");
|
|
603
|
+
const rows = [
|
|
604
|
+
["Reviewer", rubric.reviewer_model || ""],
|
|
605
|
+
["Valid", rubric.review_valid ? "yes" : "no"],
|
|
606
|
+
["Verifier pass", scoring.deterministic_pass === undefined ? "" : (scoring.deterministic_pass ? "yes" : "no")],
|
|
607
|
+
["Blockers", scoring.all_blockers_pass === undefined ? ""
|
|
608
|
+
: (scoring.all_blockers_pass ? "all pass" : "failed: " + (scoring.failed_blockers || []).join(", "))],
|
|
609
|
+
["Raw quality", scoring.raw_quality === undefined ? "" : String(scoring.raw_quality)],
|
|
610
|
+
["Gated quality", scoring.gated_quality === undefined ? "" : String(scoring.gated_quality)],
|
|
611
|
+
["Decision", scoring.decision || ""],
|
|
612
|
+
];
|
|
613
|
+
rows.forEach(([label, value]) => {
|
|
614
|
+
const row = el("tr");
|
|
615
|
+
row.appendChild(el("th", null, label));
|
|
616
|
+
const cell = el("td", null, value);
|
|
617
|
+
if (label === "Blockers" || label === "Verifier pass") {
|
|
618
|
+
cell.style.color = /fail|^no$/.test(value) ? "var(--bad-ink)" : (value ? "var(--ok-ink)" : "");
|
|
619
|
+
}
|
|
620
|
+
row.appendChild(cell);
|
|
621
|
+
facts.appendChild(row);
|
|
622
|
+
});
|
|
623
|
+
head.appendChild(facts);
|
|
624
|
+
if (rubric.summary) collapsibleText(head, rubric.summary, "body");
|
|
625
|
+
main.appendChild(head);
|
|
626
|
+
|
|
627
|
+
const criteria = Array.isArray(rubric.criteria) ? rubric.criteria : [];
|
|
628
|
+
if (criteria.length) {
|
|
629
|
+
const block = el("div", "panelblock");
|
|
630
|
+
block.appendChild(el("h2", null, "Criteria"));
|
|
631
|
+
const table = el("table", "plain");
|
|
632
|
+
const heading = el("tr");
|
|
633
|
+
["Criterion", "Kind", "Verdict", "Reviewer note"].forEach((label) => heading.appendChild(el("th", null, label)));
|
|
634
|
+
table.appendChild(heading);
|
|
635
|
+
criteria.forEach((criterion) => {
|
|
636
|
+
const record = criterion && typeof criterion === "object" ? criterion : {};
|
|
637
|
+
const row = el("tr");
|
|
638
|
+
row.appendChild(el("td", null, record.name));
|
|
639
|
+
// blocker true: v0.2 blocker; false: v0.2 scored; null: legacy v0.1 (outcome only)
|
|
640
|
+
const scored = record.blocker === false;
|
|
641
|
+
const kind = record.blocker === true ? "blocker" : (scored ? "weight " + (record.weight ?? "?") : "criterion");
|
|
642
|
+
row.appendChild(el("td", null, kind));
|
|
643
|
+
const verdict = el("td", null, scored ? ((record.score ?? "?") + " / 2") : (record.outcome || ""));
|
|
644
|
+
if (!scored && record.outcome) {
|
|
645
|
+
verdict.style.color = record.outcome === "pass" ? "var(--ok-ink)"
|
|
646
|
+
: (record.outcome === "fail" ? "var(--bad-ink)" : "var(--muted-foreground)");
|
|
647
|
+
}
|
|
648
|
+
row.appendChild(verdict);
|
|
649
|
+
row.appendChild(el("td", null, record.explanation || ""));
|
|
650
|
+
table.appendChild(row);
|
|
651
|
+
});
|
|
652
|
+
block.appendChild(table);
|
|
653
|
+
main.appendChild(block);
|
|
654
|
+
}
|
|
655
|
+
}
|
|
656
|
+
|
|
587
657
|
function renderMetrics(payload) {
|
|
588
658
|
const meta = payload.meta || {};
|
|
589
659
|
const main = document.getElementById("view-metrics");
|
|
@@ -665,7 +735,7 @@ BF.detail = (() => {
|
|
|
665
735
|
}
|
|
666
736
|
|
|
667
737
|
function clearDetail() {
|
|
668
|
-
["hdr", "tabs", "view-trace", "view-verifier", "view-metrics"].forEach((id) => {
|
|
738
|
+
["hdr", "tabs", "view-trace", "view-verifier", "view-metrics", "view-rubric"].forEach((id) => {
|
|
669
739
|
document.getElementById(id).textContent = "";
|
|
670
740
|
});
|
|
671
741
|
document.getElementById("toolbar").textContent = "";
|
|
@@ -705,6 +775,7 @@ BF.detail = (() => {
|
|
|
705
775
|
renderTrace(payload);
|
|
706
776
|
renderVerifier(payload);
|
|
707
777
|
renderMetrics(payload);
|
|
778
|
+
renderRubric(payload);
|
|
708
779
|
document.title = (payload.meta && payload.meta.task_name) || payload.rollout_name || "benchflow trajectory";
|
|
709
780
|
if (options.focusHeading) requestAnimationFrame(() => heading.focus());
|
|
710
781
|
}
|
|
@@ -36,6 +36,7 @@
|
|
|
36
36
|
<main id="view-trace" role="tabpanel"></main>
|
|
37
37
|
<main id="view-verifier" role="tabpanel" class="hidden"></main>
|
|
38
38
|
<main id="view-metrics" role="tabpanel" class="hidden"></main>
|
|
39
|
+
<main id="view-rubric" role="tabpanel" class="hidden"></main>
|
|
39
40
|
</div>
|
|
40
41
|
</div>
|
|
41
42
|
<script id="bf-payload" type="application/json">__BENCHFLOW_PAYLOAD__</script>
|
{benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/models.py
RENAMED
|
@@ -351,12 +351,59 @@ class VerifierArtifacts:
|
|
|
351
351
|
}
|
|
352
352
|
|
|
353
353
|
|
|
354
|
+
@dataclass(frozen=True)
|
|
355
|
+
class RubricCriterion:
|
|
356
|
+
"""One rubric criterion as the reviewer judged it."""
|
|
357
|
+
|
|
358
|
+
name: str
|
|
359
|
+
# True for a v0.2 blocker, False for a v0.2 scored criterion, None for a
|
|
360
|
+
# legacy v0.1 criterion, which only carries an outcome.
|
|
361
|
+
blocker: bool | None
|
|
362
|
+
weight: int | None
|
|
363
|
+
outcome: str | None
|
|
364
|
+
score: int | None
|
|
365
|
+
explanation: str
|
|
366
|
+
|
|
367
|
+
def to_payload(self) -> dict[str, Any]:
|
|
368
|
+
return {
|
|
369
|
+
"name": self.name,
|
|
370
|
+
"blocker": self.blocker,
|
|
371
|
+
"weight": self.weight,
|
|
372
|
+
"outcome": self.outcome,
|
|
373
|
+
"score": self.score,
|
|
374
|
+
"explanation": self.explanation,
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
@dataclass(frozen=True)
|
|
379
|
+
class RubricReview:
|
|
380
|
+
"""The ``bench review`` verdict for one rollout, from ``review_report.json``."""
|
|
381
|
+
|
|
382
|
+
reviewer_model: str | None
|
|
383
|
+
review_valid: bool
|
|
384
|
+
scoring: JsonObject
|
|
385
|
+
summary: str
|
|
386
|
+
criteria: list[RubricCriterion]
|
|
387
|
+
source: str
|
|
388
|
+
|
|
389
|
+
def to_payload(self) -> dict[str, Any]:
|
|
390
|
+
return {
|
|
391
|
+
"reviewer_model": self.reviewer_model,
|
|
392
|
+
"review_valid": self.review_valid,
|
|
393
|
+
"scoring": dict(self.scoring),
|
|
394
|
+
"summary": self.summary,
|
|
395
|
+
"criteria": [criterion.to_payload() for criterion in self.criteria],
|
|
396
|
+
"source": self.source,
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
|
|
354
400
|
@dataclass(frozen=True)
|
|
355
401
|
class ViewerPayload:
|
|
356
402
|
rollout_name: str
|
|
357
403
|
meta: Meta
|
|
358
404
|
steps: list[Step]
|
|
359
405
|
verifier: VerifierArtifacts
|
|
406
|
+
rubric: RubricReview | None = None
|
|
360
407
|
schema_version: int = 1
|
|
361
408
|
|
|
362
409
|
def to_payload(self) -> dict[str, Any]:
|
|
@@ -366,6 +413,7 @@ class ViewerPayload:
|
|
|
366
413
|
"meta": self.meta.to_payload(),
|
|
367
414
|
"steps": [step.to_payload() for step in self.steps],
|
|
368
415
|
"verifier": self.verifier.to_payload(),
|
|
416
|
+
"rubric": self.rubric.to_payload() if self.rubric is not None else None,
|
|
369
417
|
}
|
|
370
418
|
|
|
371
419
|
|
{benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/payload.py
RENAMED
|
@@ -18,6 +18,8 @@ from .models import (
|
|
|
18
18
|
Meta,
|
|
19
19
|
PromptStep,
|
|
20
20
|
RolloutMetadata,
|
|
21
|
+
RubricCriterion,
|
|
22
|
+
RubricReview,
|
|
21
23
|
Step,
|
|
22
24
|
StepCounts,
|
|
23
25
|
ThoughtStep,
|
|
@@ -231,6 +233,34 @@ def _tool_content_texts(content: Any) -> list[str]:
|
|
|
231
233
|
return texts
|
|
232
234
|
|
|
233
235
|
|
|
236
|
+
def _raw_io_texts(kind: str, raw_input: Any, raw_output: Any) -> list[str]:
|
|
237
|
+
"""Render ACP ``rawInput`` / ``rawOutput`` for a call without content blocks.
|
|
238
|
+
|
|
239
|
+
codex-acp reports a command as ``rawInput.command`` and its result as
|
|
240
|
+
``rawOutput.formatted_output`` plus ``exit_code``; anything else is shown
|
|
241
|
+
as JSON so no recorded detail is hidden.
|
|
242
|
+
"""
|
|
243
|
+
texts: list[str] = []
|
|
244
|
+
if isinstance(raw_input, dict) and kind == "execute" and "command" in raw_input:
|
|
245
|
+
command = raw_input["command"]
|
|
246
|
+
texts.append(
|
|
247
|
+
" ".join(str(part) for part in command)
|
|
248
|
+
if isinstance(command, list)
|
|
249
|
+
else _display_text(command)
|
|
250
|
+
)
|
|
251
|
+
elif raw_input is not None:
|
|
252
|
+
texts.append(dumps_finite(raw_input, ensure_ascii=False, default=str))
|
|
253
|
+
if isinstance(raw_output, dict) and "formatted_output" in raw_output:
|
|
254
|
+
output = _display_text(raw_output.get("formatted_output"))
|
|
255
|
+
exit_code = raw_output.get("exit_code")
|
|
256
|
+
if exit_code not in (None, 0):
|
|
257
|
+
output = f"{output.rstrip()}\n[exit code {exit_code}]"
|
|
258
|
+
texts.append(output)
|
|
259
|
+
elif raw_output is not None:
|
|
260
|
+
texts.append(dumps_finite(raw_output, ensure_ascii=False, default=str))
|
|
261
|
+
return [text for text in texts if text]
|
|
262
|
+
|
|
263
|
+
|
|
234
264
|
def _parse_ts(value: Any) -> float | None:
|
|
235
265
|
"""Parse finite epoch or ISO-8601 timestamps into epoch seconds."""
|
|
236
266
|
numeric = _finite_float(value)
|
|
@@ -319,7 +349,10 @@ def _normalize_steps(
|
|
|
319
349
|
kind=kind,
|
|
320
350
|
title=title,
|
|
321
351
|
status=normalize_tool_status(event.get("status")),
|
|
322
|
-
content=_tool_content_texts(event.get("content"))
|
|
352
|
+
content=_tool_content_texts(event.get("content"))
|
|
353
|
+
or _raw_io_texts(
|
|
354
|
+
kind, event.get("raw_input"), event.get("raw_output")
|
|
355
|
+
),
|
|
323
356
|
hue=tool_hue(kind, title),
|
|
324
357
|
),
|
|
325
358
|
t=started,
|
|
@@ -556,6 +589,98 @@ def _load_verifier(rollout_dir: Path) -> VerifierArtifacts:
|
|
|
556
589
|
)
|
|
557
590
|
|
|
558
591
|
|
|
592
|
+
# How far above a rollout directory review reports are looked for. Covers
|
|
593
|
+
# ``jobs/<run>/<rollout>`` next to ``jobs/review-<stamp>/`` (bench review's
|
|
594
|
+
# default) and deeper per-trial layouts.
|
|
595
|
+
_REVIEW_SEARCH_DEPTH = 4
|
|
596
|
+
_REVIEW_REPORT = "review_report.json"
|
|
597
|
+
|
|
598
|
+
|
|
599
|
+
def _criteria(trial: dict[str, Any]) -> list[RubricCriterion]:
|
|
600
|
+
checks = trial.get("checks")
|
|
601
|
+
checks = checks if isinstance(checks, dict) else {}
|
|
602
|
+
metadata = trial.get("criterion_metadata")
|
|
603
|
+
rows: list[RubricCriterion] = []
|
|
604
|
+
for meta in metadata if isinstance(metadata, list) else []:
|
|
605
|
+
if not isinstance(meta, dict):
|
|
606
|
+
continue
|
|
607
|
+
name = _display_text(meta.get("name"))
|
|
608
|
+
check = checks.get(name)
|
|
609
|
+
check = check if isinstance(check, dict) else {}
|
|
610
|
+
score = check.get("score")
|
|
611
|
+
weight = meta.get("weight")
|
|
612
|
+
blocker = meta.get("blocker")
|
|
613
|
+
rows.append(
|
|
614
|
+
RubricCriterion(
|
|
615
|
+
name=name,
|
|
616
|
+
blocker=None if blocker is None else bool(blocker),
|
|
617
|
+
weight=weight
|
|
618
|
+
if isinstance(weight, int) and not isinstance(weight, bool)
|
|
619
|
+
else None,
|
|
620
|
+
outcome=_optional_text(check.get("outcome")),
|
|
621
|
+
score=score
|
|
622
|
+
if isinstance(score, int) and not isinstance(score, bool)
|
|
623
|
+
else None,
|
|
624
|
+
explanation=_display_text(check.get("explanation")),
|
|
625
|
+
)
|
|
626
|
+
)
|
|
627
|
+
return rows
|
|
628
|
+
|
|
629
|
+
|
|
630
|
+
def _rubric_from_report(path: Path, rollout_name: str) -> RubricReview | None:
|
|
631
|
+
report = _load_json(path)
|
|
632
|
+
if not isinstance(report, dict):
|
|
633
|
+
return None
|
|
634
|
+
reviewer = report.get("reviewer")
|
|
635
|
+
model = (
|
|
636
|
+
_optional_text(reviewer.get("model")) if isinstance(reviewer, dict) else None
|
|
637
|
+
)
|
|
638
|
+
found: RubricReview | None = None
|
|
639
|
+
trials = report.get("trials")
|
|
640
|
+
for trial in trials if isinstance(trials, list) else []:
|
|
641
|
+
if not isinstance(trial, dict) or trial.get("trial_name") != rollout_name:
|
|
642
|
+
continue
|
|
643
|
+
scoring = trial.get("scoring")
|
|
644
|
+
found = RubricReview(
|
|
645
|
+
reviewer_model=model,
|
|
646
|
+
review_valid=bool(trial.get("review_valid")),
|
|
647
|
+
scoring=dict(scoring) if isinstance(scoring, dict) else {},
|
|
648
|
+
summary=_display_text(trial.get("summary")),
|
|
649
|
+
criteria=_criteria(trial),
|
|
650
|
+
source=str(path),
|
|
651
|
+
)
|
|
652
|
+
return found
|
|
653
|
+
|
|
654
|
+
|
|
655
|
+
def _load_rubric(rollout_dir: Path) -> RubricReview | None:
|
|
656
|
+
"""Find the review of this rollout in the nearest ``review*`` directory.
|
|
657
|
+
|
|
658
|
+
The search walks up ``_REVIEW_SEARCH_DEPTH`` ancestors; at each level every
|
|
659
|
+
``review*/**/review_report.json`` is read and the last valid entry for
|
|
660
|
+
this rollout in sorted order wins, the rule the leaderboard consumers use.
|
|
661
|
+
An invalid review (no scoring) never shadows a valid one.
|
|
662
|
+
"""
|
|
663
|
+
name = rollout_dir.name
|
|
664
|
+
ancestor = rollout_dir
|
|
665
|
+
for _ in range(_REVIEW_SEARCH_DEPTH):
|
|
666
|
+
ancestor = ancestor.parent
|
|
667
|
+
found: RubricReview | None = None
|
|
668
|
+
for review_dir in sorted(ancestor.glob("review*")):
|
|
669
|
+
if not review_dir.is_dir():
|
|
670
|
+
continue
|
|
671
|
+
for path in sorted(review_dir.rglob(_REVIEW_REPORT)):
|
|
672
|
+
rubric = _rubric_from_report(path, name)
|
|
673
|
+
if rubric is None:
|
|
674
|
+
continue
|
|
675
|
+
if rubric.scoring or found is None:
|
|
676
|
+
found = rubric
|
|
677
|
+
if found is not None:
|
|
678
|
+
return found
|
|
679
|
+
if ancestor == ancestor.parent:
|
|
680
|
+
break
|
|
681
|
+
return None
|
|
682
|
+
|
|
683
|
+
|
|
559
684
|
def _safe_json(obj: Any) -> str:
|
|
560
685
|
"""Emit strict, finite JSON and replace lone UTF-16 surrogates."""
|
|
561
686
|
if not _within_json_depth(obj, max_depth=_MAX_JSON_OUTPUT_DEPTH):
|
|
@@ -581,6 +706,7 @@ def _build_acp_payload(rollout_dir: Path, prompts: list[str] | None) -> ViewerPa
|
|
|
581
706
|
meta=_build_meta(_load_rollout_metadata(rollout_dir), steps),
|
|
582
707
|
steps=steps,
|
|
583
708
|
verifier=_load_verifier(rollout_dir),
|
|
709
|
+
rubric=_load_rubric(rollout_dir),
|
|
584
710
|
)
|
|
585
711
|
|
|
586
712
|
|
{benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/src/benchflow/trajectories/viewer/sources.py
RENAMED
|
@@ -26,6 +26,10 @@ _HF_VIEWER_FILES = (
|
|
|
26
26
|
*(f"verifier/{name}" for name in VERIFIER_SIDECARS),
|
|
27
27
|
)
|
|
28
28
|
|
|
29
|
+
# bench review reports live beside the runs (``jobs/review-<stamp>/``), so a
|
|
30
|
+
# scoped source also fetches its parent's review directories. Small JSON only.
|
|
31
|
+
_HF_REVIEW_FILES = ("review_report.json",)
|
|
32
|
+
|
|
29
33
|
_REPO_PART_RE = re.compile(r"^[A-Za-z0-9][A-Za-z0-9._-]*$")
|
|
30
34
|
_GLOB_METACHARACTERS = frozenset("*?[]")
|
|
31
35
|
|
|
@@ -147,6 +151,11 @@ def resolve_hf_dataset(source: HfDatasetSource) -> Path:
|
|
|
147
151
|
for name in _HF_VIEWER_FILES:
|
|
148
152
|
patterns.append(f"{scope}{name}")
|
|
149
153
|
patterns.append(f"{scope}**/{name}")
|
|
154
|
+
parent = f"{'/'.join(subpath_parts[:-1])}/" if len(subpath_parts) > 1 else ""
|
|
155
|
+
for name in _HF_REVIEW_FILES:
|
|
156
|
+
patterns.append(f"{scope}**/{name}")
|
|
157
|
+
patterns.append(f"{parent}review*/{name}")
|
|
158
|
+
patterns.append(f"{parent}review*/**/{name}")
|
|
150
159
|
print(
|
|
151
160
|
f"Fetching {source.repo_id}"
|
|
152
161
|
+ (f" @ {source.revision}" if source.revision else "")
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"""Tool-call content and raw I/O capture (issue #1099).
|
|
2
|
+
|
|
3
|
+
codex-acp reports a command as ``rawInput`` on the opening ``tool_call``, its
|
|
4
|
+
output as ``rawOutput`` on the completing ``tool_call_update``, and file-change
|
|
5
|
+
diffs as ``content`` on the opening ``tool_call``. Before the fix every one of
|
|
6
|
+
those was dropped and the trajectory kept only the title.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import json
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
|
|
14
|
+
from benchflow.acp.session import ACPSession
|
|
15
|
+
from benchflow.trajectories._capture import _events_to_trajectory
|
|
16
|
+
from benchflow.trajectories.viewer.payload import _build_acp_payload, _raw_io_texts
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _codex_exec_session() -> ACPSession:
|
|
20
|
+
session = ACPSession("s")
|
|
21
|
+
session.handle_update(
|
|
22
|
+
{
|
|
23
|
+
"sessionUpdate": "tool_call",
|
|
24
|
+
"toolCallId": "call_1",
|
|
25
|
+
"title": "ls /root",
|
|
26
|
+
"kind": "execute",
|
|
27
|
+
"status": "in_progress",
|
|
28
|
+
"rawInput": {"command": "ls /root", "cwd": "/root"},
|
|
29
|
+
}
|
|
30
|
+
)
|
|
31
|
+
session.handle_update(
|
|
32
|
+
{
|
|
33
|
+
"sessionUpdate": "tool_call_update",
|
|
34
|
+
"toolCallId": "call_1",
|
|
35
|
+
"status": "completed",
|
|
36
|
+
"rawOutput": {"formatted_output": "a.py\nb.py\n", "exit_code": 0},
|
|
37
|
+
}
|
|
38
|
+
)
|
|
39
|
+
return session
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def test_session_keeps_raw_input_and_output() -> None:
|
|
43
|
+
"""Guards the fix for issue #1099: rawInput from the opening tool_call and
|
|
44
|
+
rawOutput from the completing update both survive on the record."""
|
|
45
|
+
record = _codex_exec_session().tool_calls[0]
|
|
46
|
+
assert record.raw_input == {"command": "ls /root", "cwd": "/root"}
|
|
47
|
+
assert record.raw_output == {"formatted_output": "a.py\nb.py\n", "exit_code": 0}
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def test_session_keeps_content_sent_on_the_opening_tool_call() -> None:
|
|
51
|
+
"""Guards the fix for issue #1099: codex-acp file-change diffs arrive as
|
|
52
|
+
content on the opening tool_call, not on an update."""
|
|
53
|
+
session = ACPSession("s")
|
|
54
|
+
diff = {"type": "diff", "path": "/root/a.py", "oldText": None, "newText": "x = 1\n"}
|
|
55
|
+
session.handle_update(
|
|
56
|
+
{
|
|
57
|
+
"sessionUpdate": "tool_call",
|
|
58
|
+
"toolCallId": "call_2",
|
|
59
|
+
"title": "Editing files",
|
|
60
|
+
"kind": "edit",
|
|
61
|
+
"status": "completed",
|
|
62
|
+
"content": [diff],
|
|
63
|
+
}
|
|
64
|
+
)
|
|
65
|
+
assert session.tool_calls[0].content == [diff]
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def test_opening_call_status_is_honored() -> None:
|
|
69
|
+
"""Guards the follow-up on #1099 review: a file edit that codex-acp reports
|
|
70
|
+
completed in its opening tool_call (no later update) is terminal, so it
|
|
71
|
+
never lingers in pending_tool_call_ids(); an opening call without a status
|
|
72
|
+
stays pending as before."""
|
|
73
|
+
session = ACPSession("s")
|
|
74
|
+
session.handle_update(
|
|
75
|
+
{
|
|
76
|
+
"sessionUpdate": "tool_call",
|
|
77
|
+
"toolCallId": "done",
|
|
78
|
+
"title": "Editing files",
|
|
79
|
+
"kind": "edit",
|
|
80
|
+
"status": "completed",
|
|
81
|
+
"content": [
|
|
82
|
+
{"type": "diff", "path": "/a", "oldText": None, "newText": "x"}
|
|
83
|
+
],
|
|
84
|
+
}
|
|
85
|
+
)
|
|
86
|
+
session.handle_update(
|
|
87
|
+
{
|
|
88
|
+
"sessionUpdate": "tool_call",
|
|
89
|
+
"toolCallId": "open",
|
|
90
|
+
"title": "ls",
|
|
91
|
+
"kind": "execute",
|
|
92
|
+
}
|
|
93
|
+
)
|
|
94
|
+
session.handle_update(
|
|
95
|
+
{
|
|
96
|
+
"sessionUpdate": "tool_call",
|
|
97
|
+
"toolCallId": "odd",
|
|
98
|
+
"title": "t",
|
|
99
|
+
"kind": "other",
|
|
100
|
+
"status": "not-a-status",
|
|
101
|
+
}
|
|
102
|
+
)
|
|
103
|
+
assert session.pending_tool_call_ids() == ["open", "odd"]
|
|
104
|
+
assert session.tool_calls[0].finished_at is not None
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def test_trajectory_emits_raw_fields_only_when_present() -> None:
|
|
108
|
+
"""Guards the fix for issue #1099 without changing the shape agents that
|
|
109
|
+
send no raw I/O produce: the keys appear only when set."""
|
|
110
|
+
with_raw = _events_to_trajectory(_codex_exec_session().events)[0]
|
|
111
|
+
assert with_raw["raw_input"] == {"command": "ls /root", "cwd": "/root"}
|
|
112
|
+
assert with_raw["raw_output"]["exit_code"] == 0
|
|
113
|
+
|
|
114
|
+
bare = ACPSession("s")
|
|
115
|
+
bare.handle_update(
|
|
116
|
+
{"sessionUpdate": "tool_call", "toolCallId": "t", "title": "t", "kind": "read"}
|
|
117
|
+
)
|
|
118
|
+
assert set(_events_to_trajectory(bare.events)[0]) == {
|
|
119
|
+
"type",
|
|
120
|
+
"tool_call_id",
|
|
121
|
+
"kind",
|
|
122
|
+
"title",
|
|
123
|
+
"status",
|
|
124
|
+
"content",
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def test_raw_io_texts_render_commands_outputs_and_exit_codes() -> None:
|
|
129
|
+
"""Execute calls read as command then output; a nonzero exit is stated;
|
|
130
|
+
other shapes fall back to JSON so nothing recorded is hidden."""
|
|
131
|
+
texts = _raw_io_texts(
|
|
132
|
+
"execute",
|
|
133
|
+
{"command": ["python", "-c", "print(1)"], "cwd": "/"},
|
|
134
|
+
{"formatted_output": "boom\n", "exit_code": 2},
|
|
135
|
+
)
|
|
136
|
+
assert texts == ["python -c print(1)", "boom\n[exit code 2]"]
|
|
137
|
+
assert _raw_io_texts("other", {"server": "mcp", "tool": "t"}, None) == [
|
|
138
|
+
'{"server": "mcp", "tool": "t"}'
|
|
139
|
+
]
|
|
140
|
+
assert _raw_io_texts("execute", None, None) == []
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
def test_payload_falls_back_to_raw_io_when_content_is_empty(tmp_path: Path) -> None:
|
|
144
|
+
"""Guards the viewer side of issue #1099: a codex-style tool call with no
|
|
145
|
+
content blocks still renders its command and output; content wins when
|
|
146
|
+
both exist."""
|
|
147
|
+
traj = tmp_path / "trajectory"
|
|
148
|
+
traj.mkdir()
|
|
149
|
+
events = [
|
|
150
|
+
{
|
|
151
|
+
"type": "tool_call",
|
|
152
|
+
"tool_call_id": "c1",
|
|
153
|
+
"kind": "execute",
|
|
154
|
+
"title": "ls /root",
|
|
155
|
+
"status": "completed",
|
|
156
|
+
"content": [],
|
|
157
|
+
"raw_input": {"command": "ls /root", "cwd": "/root"},
|
|
158
|
+
"raw_output": {"formatted_output": "a.py\n", "exit_code": 0},
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"type": "tool_call",
|
|
162
|
+
"tool_call_id": "c2",
|
|
163
|
+
"kind": "execute",
|
|
164
|
+
"title": "cat x",
|
|
165
|
+
"status": "completed",
|
|
166
|
+
"content": [{"type": "content", "content": {"type": "text", "text": "x"}}],
|
|
167
|
+
"raw_output": {"formatted_output": "ignored", "exit_code": 0},
|
|
168
|
+
},
|
|
169
|
+
]
|
|
170
|
+
(traj / "acp_trajectory.jsonl").write_text("\n".join(json.dumps(e) for e in events))
|
|
171
|
+
(tmp_path / "result.json").write_text("{}")
|
|
172
|
+
steps = _build_acp_payload(tmp_path, None).to_payload()["steps"]
|
|
173
|
+
tools = [s["tool"] for s in steps if s["kind"] == "tool"]
|
|
174
|
+
assert tools[0]["content"] == ["ls /root", "a.py\n"]
|
|
175
|
+
assert tools[1]["content"] == ["x"]
|
{benchflow-0.7.8.dev2327 → benchflow-0.7.8.dev2329}/tests/trajectories/test_viewer_acp_renderer.py
RENAMED
|
@@ -640,8 +640,11 @@ class TestSources:
|
|
|
640
640
|
assert root == tmp_path / "jobs" / "run-1"
|
|
641
641
|
assert calls["repo_id"] == "org/name"
|
|
642
642
|
assert calls["repo_type"] == "dataset"
|
|
643
|
-
|
|
643
|
+
rollout_patterns = [p for p in calls["allow_patterns"] if "review" not in p]
|
|
644
|
+
assert all(p.startswith("jobs/run-1/") for p in rollout_patterns)
|
|
644
645
|
assert "jobs/run-1/trajectory/acp_trajectory.jsonl" in calls["allow_patterns"]
|
|
646
|
+
# review reports sit beside the run, so the parent's review-* dirs are in scope
|
|
647
|
+
assert "jobs/review*/**/review_report.json" in calls["allow_patterns"]
|
|
645
648
|
assert not any("llm_trajectory" in p for p in calls["allow_patterns"])
|
|
646
649
|
|
|
647
650
|
def test_resolve_raises_typed_error_for_missing_subpath(
|
|
@@ -888,6 +891,7 @@ class TestTypedContract:
|
|
|
888
891
|
"meta",
|
|
889
892
|
"steps",
|
|
890
893
|
"verifier",
|
|
894
|
+
"rubric",
|
|
891
895
|
}
|
|
892
896
|
assert wire["steps"][0] == {
|
|
893
897
|
"i": 1,
|