benchflow 0.7.1.dev1972__tar.gz → 0.7.2__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.1.dev1972 → benchflow-0.7.2}/CHANGELOG.md +108 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/PKG-INFO +14 -11
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/README.md +13 -10
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/pyproject.toml +1 -1
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/_traj_upload_ui.py +29 -1
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/main.py +32 -2
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/traj.py +166 -17
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/publish/redact.py +138 -23
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/publish/traj_capture.py +24 -4
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/publish/traj_report.py +14 -1
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/types.py +86 -18
- benchflow-0.7.2/src/benchflow/trajectories/viewer.py +872 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_cli_edge_case_hardening.py +60 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_traj_report.py +83 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_traj_upload_cli.py +278 -5
- benchflow-0.7.2/tests/test_viewer_confirm.py +279 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_redaction.py +142 -0
- benchflow-0.7.1.dev1972/src/benchflow/trajectories/viewer.py +0 -620
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/.gitignore +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/LICENSE +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_dotenv.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_paths.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_run.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_types.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/benchmark_repos.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/build_context_stage.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/config.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/config_override.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/content_address.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/dataset_registry.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/env_registry.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/evaluation_results.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/hf_datasets.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/json_safe.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/learner_memory.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/live_activity.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/result_metadata.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/reward_events.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/scoring.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/source_provenance.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/task_authoring/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/task_authoring/_evidence_paths.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/task_authoring/acceptance_evidence.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/task_authoring/scaffolding.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/task_authoring/structural_checks.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/text.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/_utils/yaml_loader.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/acp/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/acp/client.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/acp/container_transport.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/acp/runtime.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/acp/selection.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/acp/session.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/acp/transport.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/acp/types.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/_toolathlon.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/_toolathlon_container.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/_toolathlon_fake_mail.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/_toolathlon_poste_users.tsv +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/_toolathlon_services.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/harbor.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/inbound.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/inspect_ai.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/ors.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/resources/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/resources/mcp_atlas_bridge.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/resources/mcp_atlas_judge.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/adapters/source.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agent_router.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agent_router_guide.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agent_router_parity.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agent_router_scaffold.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/codex_config.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/credentials.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/deepagents_acp_shim.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/env.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/errors.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/harvey_lab_acp_shim.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/install.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/manifest.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/openclaw_acp_shim.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/pi_acp_launcher.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/protocol.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/providers.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/registry.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/agents/remote_manifests.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/branch.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/_failure_evidence.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/_hosted_env.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/_live_progress.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/_options.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/_shared.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/adopt.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/agent.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/continue_cmd.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/environment.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/eval_artifacts.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/eval_lift.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/hub.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/monitor.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/review.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/sandbox.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/skills.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/tasks.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/trace_import.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/cli/train.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/continue_run/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/continue_run/batch.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/continue_run/orchestrator.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/continue_run/replay_proxy.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/continue_run/run_folder.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/continue_run/sandbox_proxy.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/contracts/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/contracts/planes.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/contracts/user.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/demo_task/environment/Dockerfile +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/demo_task/instruction.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/demo_task/task.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/demo_task/task.toml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/demo_task/tests/test.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/diagnostics.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/environment/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/environment/_registry/env0@outage.toml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/environment/_registry/env0@prod.toml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/environment/manifest.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/environment/manifest_env.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/environment/protocol.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/environment/readiness.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/eval_artifacts.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/eval_lift.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/eval_plan.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/eval_sharding.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/eval_worker.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/evaluation.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/experimental/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/experimental/mcp/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/experimental/mcp/hooks.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/experimental/mcp/reviewer_server.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/hosted_env.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/hub/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/hub/harbor_registry.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/integrations/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/integrations/trl/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/integrations/trl/spec.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/learner_skills.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/learner_store.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/loop_strategies.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/loop_sweep.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/metrics.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/models.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/monitor.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/providers/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/providers/litellm_bedrock_patch.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/providers/litellm_bedrock_preflight.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/providers/litellm_config.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/providers/litellm_logging.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/providers/litellm_runtime.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/providers/runtime.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/publish/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/publish/_progress.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/publish/azure_blob.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/publish/broker.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/publish/huggingface.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/py.typed +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/review/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/review/config.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/review/default-rubric.json +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/review/prompts.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/review/runner.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/review/wrapper.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/README.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/builtins.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/events.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/file_readers.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/llm.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/memory_scorer.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/node.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/protocol.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/rubric.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/rubric_config.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rewards/validation.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/_config.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/_deadline.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/_results.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/_setup.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/_skills.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/_usage.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/_user_loop.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/session_factory_runtime.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout/task_runtime.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout_branch.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/rollout_planes.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/runtime.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/_base.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/_cache_reclaim.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/_compose.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/_compose_files/docker-compose-base.yaml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/_compose_files/docker-compose-build.yaml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/_compose_files/docker-compose-no-network.yaml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/_compose_files/docker-compose-prebuilt.yaml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/_sdk_ops.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/agentcore.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/agentcore_builder.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/agentcore_image.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/agentcore_provisioning.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/agentcore_reaper.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/agentcore_sealed.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/apple_container.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/daytona.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/daytona_dind.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/daytona_pty.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/daytona_reaper.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/daytona_strategies.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/docker.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/lockdown.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/metadata.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/modal_impl.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/process/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/process/_base.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/process/agentcore.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/process/apple.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/process/daytona.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/process/docker.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/protocol.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/providers.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/services.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/setup.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/snapshot.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sandbox/user.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/scenes.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/sdk.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/self_gen.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/skill_eval/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/skill_eval/_core.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/skill_eval/gepa_export.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/skill_eval/schema.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/skill_policy.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/skills.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/_document_evidence.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/_document_normalize.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/_document_parse.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/_document_profiles.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/acceptance_live.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/acceptance_live_model.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/acceptance_live_report.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/acceptance_live_validation.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/config.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/discovery.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/document.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/env.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/export.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/imports.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/output_format.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/package.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/paths.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/prompts.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/runtime_capabilities.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/runtime_view.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/task.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier_core.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier_document.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier_errors.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier_judge_inputs.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier_ors_episode.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier_reward_kit.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier_scan.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/task/verifier_script_strategy.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/templates/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/templates/judge.py.tmpl +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/templates/test.sh.tmpl +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/traces/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/traces/huggingface.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/traces/local.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/traces/models.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/traces/parsers.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/traces/task_gen.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/training/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/training/backends/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/training/backends/prime_rl.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/training/run_manifest.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/_capture.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/_export_common.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/_llm_capture.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/call_purpose.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/export.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/export_adp.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/export_atif.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/export_prime_sft.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/export_trl_sft.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/metrics.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/results.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/sessions.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/tree.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/trajectories/trl_sft_tokenization.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/src/benchflow/usage_tracking.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/acceptance_live_harness.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/test_manifest_dirscan.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/test_manifest_loader.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/test_manifest_parity.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/test_manifest_wiring.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/test_namespace_shorthand.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/test_plugin_entry_points.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/test_protocol.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/agents/test_remote_manifest_autoload.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/README.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/acp_smoke/environment/Dockerfile +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/acp_smoke/environment/docker-compose.yaml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/acp_smoke/environment/skills/conformance-writer/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/acp_smoke/instruction.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/acp_smoke/solution/solve.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/acp_smoke/task.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/acp_smoke/task.toml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/acp_smoke/tests/test.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/conformance-results.json +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/proof_multi_agent.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/proof_snapshot.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/run_conformance.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conformance/self_gen_smoke_skills/skill-creator/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/conftest.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/continue_run/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/continue_run/_helpers.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/continue_run/test_batch.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/continue_run/test_orchestrator.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/continue_run/test_replay_proxy.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/continue_run/test_run_folder.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/environment/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/environment/test_chibench_manifest.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/environment/test_clawsbench_manifest.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/environment/test_manifest.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/environment/test_manifest_env.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/environment/test_protocol.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/environment/test_readiness.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/hello-world-task/environment/Dockerfile +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/hello-world-task/instruction.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/hello-world-task/solution/solve.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/hello-world-task/task.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/hello-world-task/task.toml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/hello-world-task/tests/test.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/test_claude.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/test_codex.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/test_codex_custom_provider.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/test_gemini.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/test_openclaw.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/traces/minimal-claude.jsonl +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/examples/traces/minimal-opentraces.jsonl +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/README.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/alpha-task/environment/Dockerfile +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/alpha-task/instruction.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/alpha-task/task.toml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/alpha-task/tests/test.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/beta-task/data/empty.bin +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/beta-task/data/unicode.txt +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/beta-task/instruction.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/beta-task/task.toml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/digest/not-a-task/notes.txt +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/mock_acp_agent.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/mock_acp_agent_interleaved.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/mock_acp_agent_multi_turn.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/mock_openai_responses_server.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/Dockerfile +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/data/michigan_stations.txt +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/flood-detection/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/nws-flood-thresholds/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/environment/skills/usgs-data-download/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/instruction.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/solution/solve.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/task.toml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/flood-risk-analysis/tests/test_outputs.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/Dockerfile +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/climate.csv +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/hydrology.csv +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/land_cover.csv +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/data/water_temperature.csv +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/contribution-analysis/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/meteorology-driver-classification/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/pca-decomposition/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/environment/skills/trend-analysis/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/instruction.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/solution/solve.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/task.toml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/lake-warming-attribution/tests/test_outputs.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/manifest.json +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/Dockerfile +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/r2r_simulator.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/finite-horizon-lqr/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/integral-action-design/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/mpc-horizon-tuning/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/skills/state-space-linearization/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/environment/system_config.json +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/instruction.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/solution/solve.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/task.toml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/r2r-mpc-control/tests/test_outputs.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/Dockerfile +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/generate_training_pcaps.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/local.rules +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/pcap-triage-tshark/scripts/summarize_http_requests.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-offline-evejson/scripts/run_suricata_offline.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/skills/suricata-rules-basics/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/environment/suricata.yaml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/instruction.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/solution/solve.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/task.toml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/suricata-custom-exfil/tests/test_outputs.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/Dockerfile +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syz-extract-constants/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzkaller-build-loop/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/environment/skills/syzlang-ioctl-basics/SKILL.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/instruction.md +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/solution/solve.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/task.toml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/fixtures/skillsbench_slice/syzkaller-ppdev-syzlang/tests/test_outputs.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/_consistency.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/agent_judge.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/check_adapter_evidence.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/check_hosted_env_evidence.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/check_results.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/check_trace_to_task_evidence.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/claude-agent-acp.yaml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/codex-acp.yaml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/gemini.yaml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/harvey-lab-harness.yaml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/mimo.yaml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/openclaw.yaml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/opencode.yaml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/openhands.yaml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/configs/pi-acp.yaml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/deepagents_harness.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/rubric_checks.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/run.sh +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/run_suite.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/scenarios.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/integration/suites/release.yaml +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acceptance_evidence.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acceptance_live.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acceptance_live_execution.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acp.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acp_capability_advertising.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acp_mcp_servers.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acp_model_config_dispatch.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acp_pinned_protocol_guard.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_acp_setup_failure_propagation.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_adapter_scripts.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_adapters.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_cli.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_env_resolution.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_gemini_defaults.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_idle_timeout_cli.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_model_decouple.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_registry.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_router.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_router_cli_e2e.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_router_scaffold.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_setup.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agent_spec.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agentcore_builder.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agentcore_parallel.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agentcore_reaper.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agentcore_sandbox.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_agentcore_transport.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_api_error_capture.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_apple_container_sandbox.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_bare_model_provider.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_base_install_imports.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_bedrock_thinking.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_benchflow_experiment_review_validator.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_benchmark_repos_resolve_repo_path.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_branch.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_build_context_stage.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_build_review_pack.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_capture_trajectory.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_check_skillsbench_harbor_parity.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_clawsbench_slice.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_cli_adopt_aliases.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_cli_arg_validation.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_cli_daytona.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_cli_docs_drift.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_cli_hub_env.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_cli_live_progress.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_cli_misc.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_codex_review.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_codex_self_write_auth.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_config_override.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_config_redaction.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_connect_as_env.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_console_error_truncation.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_console_progress.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_continuallearningbench_adapter.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_dataset_registry.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_daytona_command_polling.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_daytona_dind_compose_up.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_daytona_download.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_daytona_litellm_runtime.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_daytona_poll_deadline.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_daytona_reap.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_deepagents_agent.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_diagnostics.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_docker_prune_scoping.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_docker_uploads.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_docs_examples.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eng50_capabilities.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_env_registry.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_env_setup.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_environment_manifest_controls.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eval_artifact_cli.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eval_filters_applied.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eval_lift.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eval_sharding.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eval_single_task_summary.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eval_source_provenance.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eval_worker_retry.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_eval_zero_task_guard.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_evaluation_environment_manifest.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_exclude_tasks.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_filter_credentialed_cells.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_harvey_lab_shim.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_hilbench_adapter.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_hosted_env.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_hosted_env_rollout_contract.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_hub_harbor_registry.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_inbound_adapter_manifest.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_inbound_adapters.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_integration_agent_judge.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_integration_check_results.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_integration_consistency.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_integration_matrix.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_integration_provider_selection.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_integration_run_suite.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_integration_suite.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_internet_policy.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_job.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_job_sequential_shared.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_job_sequential_shared_resume.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_judge_robustness.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_judge_symlink_ingestion.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_learner_skills.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_learner_skills_traversal.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_learner_store.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_learner_store_persistence.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_litellm_config.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_litellm_hardening.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_litellm_logging.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_litellm_model_via_env_generic.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_litellm_reasoning_passthrough.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_litellm_runtime.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_litellm_smoke.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_live_llm_trajectory.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_llm_judge.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_llm_judge_event_tags.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_llm_judge_verifier.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_loop_strategies.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_loop_summary.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_loop_sweep.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_memory_scorer.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_metrics.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_mle_bench_adapter.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_mock_openai_responses_server.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_monitor_scaffold.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_native_acp_usage.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_no_cross_provider_fallback.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_notification_order_real.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_opencode_family_proxy_tracking.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_oracle.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_oracle_chokepoint.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_paths_safe.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_paths_symlink_helpers.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_pi_acp_launcher.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_pi_acp_proxy_routing.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_process.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_project_skills_layout.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_provider_auth_detection.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_providers.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_publish_azure_blob.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_reexport.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_registry_invariants.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_release_hardening_r5.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_release_version.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_release_workflow_wiring.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_resolve_env_helpers.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_review_boundaries.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_review_rubric.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_review_runtime.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_reward_lenient.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_reward_node.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_reward_range.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_reward_unified_contract.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rewards.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rewards_jsonl.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_architecture.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_branch.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_config_path_coercion.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_environment.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_hard_deadline.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_import_no_side_effects.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_on_ask_user_wiring.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_planes_contract.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_probe_sandbox_health.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_session_factory_dispatch.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_setup_commands.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rollout_upload.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rubric_checks.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_rubric_config.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_runtime.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_runtime_capabilities.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_runtime_config_wired.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_runtime_live_sandbox.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_exec_secret_handling.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_hardening.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_isolation_copy_traversal.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_live_process.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_multi_service.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_prebuilt_validation.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_protocol.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_provider_registry_drift.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_setup.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_snapshot_contract.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_upload_symlink.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sandbox_verifier_workspace.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_scene.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_scene_outbox_trial.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_scene_parallel_group.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_scene_result_aggregation.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_scoring.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sdk_internals.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sdk_lockdown.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sdk_run_alias.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_sealed_channel_container.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_self_gen_cli.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_self_gen_export_error_channel.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_self_gen_export_failures.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_self_gen_orchestration.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_session_factory_runtime.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_session_request_permission_dispatch.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skill_eval.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skill_eval_dryrun.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skill_eval_integration.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skill_eval_sweep.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skill_eval_traversal.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skill_invocation_artifacts.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skill_policy.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skills.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skills_dir_agent_home_link.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skillsbench_conversion_conformance.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_skillsbench_harbor_run_suite.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_smoke.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_smoke_wiring.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_source_adapters.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_subscription_auth.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_check_eval_consistency.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_config.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_digest.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_document.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_download.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_export.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_output_format.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_package.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_task_runtime_primitive.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_tasks.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_token_usage_normalization.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trace_import_cli.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trace_task_gen_traversal.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trace_to_task_evidence.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_traces_huggingface.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_traces_parsers.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_traces_task_gen.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_train_cli.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_train_mode_artifact_emission.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_train_trl_cli.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_traj_staging_phases.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_traj_upload_skill.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trajectory_integration.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trajectory_streaming.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trajectory_upload_layout.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trajectory_upload_service.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trial_agent_timeout_verify.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trial_install_agent_timeout.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trial_litellm_runtime.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_trl_integration.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_usage_litellm.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_usage_required.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_usage_tracking.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_user.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_v06_guard_ports.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_verifier_document.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_verifier_multi_container.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_verifier_output.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_verifier_output_freshness.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_verifier_strategies.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_verifier_wedge_retry.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_verify.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_workflow_action_pinning.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/test_yaml_config.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/__init__.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_export.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_export_adp.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_export_atif.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_export_common.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_export_nan_handling.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_export_prime_sft.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_step_granularity.py +0 -0
- {benchflow-0.7.1.dev1972 → benchflow-0.7.2}/tests/trajectories/test_tree.py +0 -0
|
@@ -2,6 +2,114 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## 0.7.2 — 2026-08-16
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- **The upload preview itemizes what redaction masked, by kind.** The
|
|
9
|
+
redactor now categorizes every replacement by the rule that fired — API
|
|
10
|
+
keys, bearer tokens, private key blocks, passwords, URL credentials, and
|
|
11
|
+
credential-bearing field values — and the terminal trajectory report shows
|
|
12
|
+
a `Masked for you: 2 API keys, 1 bearer token — originals never leave this
|
|
13
|
+
machine` breakdown under the masked-count row, plus a reassurance that
|
|
14
|
+
redaction ran locally and the server independently rescans staged
|
|
15
|
+
artifacts (or `No secrets or personal identifiers detected — nothing
|
|
16
|
+
needed masking.` when nothing matched). `bench traj upload --dry-run`
|
|
17
|
+
prints the same breakdown as a plain `Masked for you:` line, and
|
|
18
|
+
`bench eval view --confirm` gains a display-only `--redaction-summary`
|
|
19
|
+
flag that renders it in the confirm bar next to the Approve button; the
|
|
20
|
+
`benchflow-traj-upload` skill stages a dry run first and passes the line
|
|
21
|
+
through. The total `redaction_replacements` count and the manifest
|
|
22
|
+
`trajectory_report` contract are unchanged (the server validates the
|
|
23
|
+
report with a closed schema and exact recompute equality, so per-category
|
|
24
|
+
counts stay display-only).
|
|
25
|
+
- **The trajectory viewer can collect the eval-prize confirmation in the
|
|
26
|
+
browser.** `bench eval view PATH --confirm` renders the normal page plus a
|
|
27
|
+
sticky site-styled bottom bar ("Submit this trajectory to the BenchFlow
|
|
28
|
+
eval prize?") with **Approve & submit** / **Not this one** buttons. A click
|
|
29
|
+
POSTs to `/decision`; the server prints a machine-readable
|
|
30
|
+
`DECISION: approved` or `DECISION: rejected` line to stdout, shuts down,
|
|
31
|
+
and the CLI exits `0` on approve and `3` on reject (non-1/2 so rejection
|
|
32
|
+
never collides with error or usage exits). Without the flag, behavior is
|
|
33
|
+
unchanged (no bar, no endpoint, Ctrl+C to stop). The
|
|
34
|
+
`benchflow-traj-upload` skill now prefers the button flow and falls back
|
|
35
|
+
to chat confirmation on CLIs older than 0.7.2.
|
|
36
|
+
- **Trajectory uploads are tagged with the session's repository by
|
|
37
|
+
default.** Unless `--source-id` is given, `bench traj upload` reads the
|
|
38
|
+
session's recorded working directory (Claude `cwd` events, Codex
|
|
39
|
+
`session_meta`), resolves its git `origin` remote, and stores
|
|
40
|
+
`repo/<owner>/<name>` as the manifest source id, printing
|
|
41
|
+
`Repo: owner/name (from session cwd /path; use --no-repo to omit)` (the
|
|
42
|
+
local path is terminal output only, never uploaded). `--no-repo` opts out
|
|
43
|
+
— the `benchflow-traj-upload` skill now surfaces the detected tag during
|
|
44
|
+
the confirm step so contributors can decline it for private repos — and
|
|
45
|
+
undetectable repos fall back silently to the path-derived source id.
|
|
46
|
+
|
|
47
|
+
### Fixed
|
|
48
|
+
- **The repo tag derives only from the session's own recorded cwd.** The
|
|
49
|
+
initial repo-tagging implementation (#1015) fell back to the upload
|
|
50
|
+
invocation directory's git remote when the session cwd yielded nothing; a
|
|
51
|
+
collector-side audit showed this mis-attributes provenance — a session
|
|
52
|
+
recorded in a non-repo directory, uploaded from the benchflow checkout,
|
|
53
|
+
was tagged `repo/benchflow-ai/benchflow` (two community-dataset entries
|
|
54
|
+
carry the mis-tag). The fallback is removed: no session cwd, a missing
|
|
55
|
+
directory, or no GitHub remote now mean no repo tag, exactly like
|
|
56
|
+
`--no-repo`.
|
|
57
|
+
- **The trajectory viewer header no longer shows `?` badges on real Claude
|
|
58
|
+
Code sessions.** `bench eval view` on a `~/.claude` session JSONL rendered
|
|
59
|
+
`model: ?`, `session: ?...`, `claude code: ?`, and `total cost: $0.0000`
|
|
60
|
+
because the header only read a `type: system` event that real session
|
|
61
|
+
files don't contain. The header now derives its metadata from what the
|
|
62
|
+
file actually carries (first assistant event's `message.model`, per-event
|
|
63
|
+
`version` / `sessionId`, the filename stem as a session fallback) and
|
|
64
|
+
hides any badge whose value is unknown — including the cost badge when no
|
|
65
|
+
event carries cost data. Presentation only.
|
|
66
|
+
- **Upload progress no longer claims the broker is waking up.** A warm
|
|
67
|
+
retry printed `Uploading… the first request can take a minute while the
|
|
68
|
+
service wakes up` even when the service was already up. The line is now
|
|
69
|
+
`Uploading… this can take up to a minute; retries are safe.`
|
|
70
|
+
- **`bench traj setup --list` no longer wraps session paths mid-token.**
|
|
71
|
+
Each hit prints index/source/time, then the path on its own line, then
|
|
72
|
+
the snippet, via plain `print` so Rich does not split a long JSONL path
|
|
73
|
+
and break copy-paste.
|
|
74
|
+
|
|
75
|
+
### Changed
|
|
76
|
+
- **Trajectory viewer tool calls are color-coded and backgrounds are light.**
|
|
77
|
+
Each tool kind now gets a muted GitHub-label-style accent on its name pill
|
|
78
|
+
and a left border strip on the card: shell/exec → amber, write/edit → blue,
|
|
79
|
+
read → teal, agent/task/skill → purple, web/search/fetch → cyan, everything
|
|
80
|
+
else → neutral gray. Tool arguments and tool outputs render on light
|
|
81
|
+
surfaces (`#f5f5f5` / white with dark ink) instead of near-black blocks;
|
|
82
|
+
the dark `#141414` terminal treatment is reserved for shell-command output
|
|
83
|
+
only, and the ink-black result card stays as the deliberate bento-ink
|
|
84
|
+
accent. Presentation only (CSS classes + a tool-name→accent mapping);
|
|
85
|
+
content strings and behavior are unchanged. Applies to all three viewer
|
|
86
|
+
templates, which share one stylesheet since #1019.
|
|
87
|
+
- **The contributor prompt now tells the agent to upgrade BenchFlow first.**
|
|
88
|
+
`CONTRIBUTOR_PROMPT` (kept in sync in `README.md`, `docs/traj-upload.md`,
|
|
89
|
+
and the `benchflow-traj-upload` skill evals) is a three-line block that
|
|
90
|
+
says to run `uv tool install --python 3.12 --upgrade --force benchflow`
|
|
91
|
+
before reading the skill, so agents that skim the skill or hit a stale copy
|
|
92
|
+
still install the latest CLI. The prompt also names OpenCode and Cursor
|
|
93
|
+
sessions and the re:Agent hackathon 72-hour window; README/docs render it
|
|
94
|
+
as a blockquote (soft-wraps on GitHub) behind an explicit "send this to
|
|
95
|
+
your coding agent" framing, and `bench traj setup` prints the same framing.
|
|
96
|
+
The skill's Discover step gains best-effort Cursor
|
|
97
|
+
(`~/.cursor/projects/*/agent-transcripts/`) and OpenCode
|
|
98
|
+
(`~/.local/share/opencode/opencode.db`, `opencode db path`) locations plus
|
|
99
|
+
a prefer-recent-matching-sessions note. Follow-up to the version
|
|
100
|
+
precondition from #1013/#1014.
|
|
101
|
+
- **Trajectory viewer restyled to match www.benchflow.ai.** All three
|
|
102
|
+
`bench eval view` pages (stream-json/JSONL, ACP events, multi-turn trial)
|
|
103
|
+
now share one inline stylesheet with the site's design language: light
|
|
104
|
+
monochrome palette (`#fafafa` page, white cards, `#0a0a0a` ink, dark
|
|
105
|
+
`#141414` code blocks), Satoshi/Google Sans Code font stacks with
|
|
106
|
+
system-safe fallbacks, mono pill badges, and a small BenchFlow wordmark
|
|
107
|
+
header with the inline SVG logo. Pages remain fully offline (no external
|
|
108
|
+
font or CDN requests) and content/structure semantics are unchanged;
|
|
109
|
+
follows the contributor paste-line flow from #1013.
|
|
110
|
+
|
|
111
|
+
## 0.7.1 — 2026-08-16
|
|
112
|
+
|
|
5
113
|
### Added
|
|
6
114
|
- **`bench traj setup` / `bench traj upload` print an upgrade hint when
|
|
7
115
|
outdated.** Both commands start with a lightweight PyPI latest-version
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: benchflow
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.2
|
|
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
|
|
@@ -89,20 +89,23 @@ BenchFlow is a universal environment framework: it runs AI agents against task e
|
|
|
89
89
|
|
|
90
90
|
## Quick start: 1. Submit a trajectory
|
|
91
91
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
BenchFlow account, API key, or
|
|
92
|
+
**Send these to your coding agent.** Copy
|
|
93
|
+
the block below and paste it as a message to Claude Code, Codex, OpenCode, or
|
|
94
|
+
Cursor. That is the $2,000 eval prize path. No BenchFlow account, API key, or
|
|
95
|
+
Azure login.
|
|
95
96
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
> Submit my relevant local Claude Code, Codex, OpenCode, or Cursor session from the re:Agent e2e agentic science / ai4bio hackathon (last 72 hours, on this laptop) to the BenchFlow eval prize.
|
|
98
|
+
>
|
|
99
|
+
> 1. First make sure the latest benchflow CLI is installed: uv tool install --python 3.12 --upgrade --force benchflow
|
|
100
|
+
>
|
|
101
|
+
> 2. Then read https://raw.githubusercontent.com/benchflow-ai/benchflow/main/.agents/skills/benchflow-traj-upload/SKILL.md and follow it: find a session, open the viewer, and upload only after I (the human) review it.
|
|
99
102
|
|
|
100
103
|
The agent finds sessions on this machine, opens the viewer, and uploads after
|
|
101
104
|
you like what you see.
|
|
102
105
|
|
|
103
|
-
|
|
104
|
-
--force benchflow
|
|
105
|
-
when a newer release is available.
|
|
106
|
+
The prompt has the agent install the latest BenchFlow first (`uv tool
|
|
107
|
+
install --python 3.12 --upgrade --force benchflow`). The `bench traj` commands
|
|
108
|
+
also print a one-line upgrade hint when a newer release is available.
|
|
106
109
|
|
|
107
110
|
Prefer the terminal instead? The guided upload inspects before anything leaves
|
|
108
111
|
your machine — it renders a redacted trajectory report (step counts, masked
|
|
@@ -128,7 +131,7 @@ bench traj setup
|
|
|
128
131
|
```
|
|
129
132
|
|
|
130
133
|
`npx skills add` asks which agents to install for. `bench traj setup` copies
|
|
131
|
-
the skill into this project and prints the same
|
|
134
|
+
the skill into this project and prints the same agent prompt. See the
|
|
132
135
|
[upload skill](./.agents/skills/benchflow-traj-upload/SKILL.md).
|
|
133
136
|
|
|
134
137
|
## Quick start: 2. Run with a ChatGPT or Claude subscription
|
|
@@ -15,20 +15,23 @@ BenchFlow is a universal environment framework: it runs AI agents against task e
|
|
|
15
15
|
|
|
16
16
|
## Quick start: 1. Submit a trajectory
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
BenchFlow account, API key, or
|
|
18
|
+
**Send these to your coding agent.** Copy
|
|
19
|
+
the block below and paste it as a message to Claude Code, Codex, OpenCode, or
|
|
20
|
+
Cursor. That is the $2,000 eval prize path. No BenchFlow account, API key, or
|
|
21
|
+
Azure login.
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
> Submit my relevant local Claude Code, Codex, OpenCode, or Cursor session from the re:Agent e2e agentic science / ai4bio hackathon (last 72 hours, on this laptop) to the BenchFlow eval prize.
|
|
24
|
+
>
|
|
25
|
+
> 1. First make sure the latest benchflow CLI is installed: uv tool install --python 3.12 --upgrade --force benchflow
|
|
26
|
+
>
|
|
27
|
+
> 2. Then read https://raw.githubusercontent.com/benchflow-ai/benchflow/main/.agents/skills/benchflow-traj-upload/SKILL.md and follow it: find a session, open the viewer, and upload only after I (the human) review it.
|
|
25
28
|
|
|
26
29
|
The agent finds sessions on this machine, opens the viewer, and uploads after
|
|
27
30
|
you like what you see.
|
|
28
31
|
|
|
29
|
-
|
|
30
|
-
--force benchflow
|
|
31
|
-
when a newer release is available.
|
|
32
|
+
The prompt has the agent install the latest BenchFlow first (`uv tool
|
|
33
|
+
install --python 3.12 --upgrade --force benchflow`). The `bench traj` commands
|
|
34
|
+
also print a one-line upgrade hint when a newer release is available.
|
|
32
35
|
|
|
33
36
|
Prefer the terminal instead? The guided upload inspects before anything leaves
|
|
34
37
|
your machine — it renders a redacted trajectory report (step counts, masked
|
|
@@ -54,7 +57,7 @@ bench traj setup
|
|
|
54
57
|
```
|
|
55
58
|
|
|
56
59
|
`npx skills add` asks which agents to install for. `bench traj setup` copies
|
|
57
|
-
the skill into this project and prints the same
|
|
60
|
+
the skill into this project and prints the same agent prompt. See the
|
|
58
61
|
[upload skill](./.agents/skills/benchflow-traj-upload/SKILL.md).
|
|
59
62
|
|
|
60
63
|
## Quick start: 2. Run with a ChatGPT or Claude subscription
|
|
@@ -20,10 +20,29 @@ from rich.progress import (
|
|
|
20
20
|
from rich.table import Table
|
|
21
21
|
from rich.text import Text
|
|
22
22
|
|
|
23
|
-
from benchflow.publish.redact import REDACTED
|
|
23
|
+
from benchflow.publish.redact import REDACTED, format_redaction_breakdown
|
|
24
24
|
from benchflow.publish.traj_capture import StagedFile
|
|
25
25
|
from benchflow.publish.traj_report import PREVIEW_WORD_LIMIT, TrajectoryReport
|
|
26
26
|
|
|
27
|
+
# Redaction-transparency copy shown with the masked-value count. The wording is
|
|
28
|
+
# deliberately honest: redaction is a local structural pass (no agents, no
|
|
29
|
+
# token spend), and the server independently rescans staged artifacts.
|
|
30
|
+
NO_MASKING_NEEDED_COPY = (
|
|
31
|
+
"No secrets or personal identifiers detected — nothing needed masking."
|
|
32
|
+
)
|
|
33
|
+
REDACTION_REASSURANCE_COPY = (
|
|
34
|
+
"Redaction ran locally before anything was staged; "
|
|
35
|
+
"the server independently rescans and rejects any survivor."
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def masked_for_you_line(report: TrajectoryReport) -> str:
|
|
40
|
+
"""Itemized ``Masked for you`` copy for a report with masked values."""
|
|
41
|
+
breakdown = format_redaction_breakdown(dict(report.masked_categories))
|
|
42
|
+
if not breakdown: # category data unavailable — fall back to the total
|
|
43
|
+
breakdown = f"{report.masked_values} secret-like values"
|
|
44
|
+
return f"{breakdown} — originals never leave this machine"
|
|
45
|
+
|
|
27
46
|
|
|
28
47
|
def render_trajectory_report(report: TrajectoryReport, *, console: Console) -> None:
|
|
29
48
|
"""Render upload facts and a bounded, already-redacted trajectory preview."""
|
|
@@ -43,8 +62,17 @@ def render_trajectory_report(report: TrajectoryReport, *, console: Console) -> N
|
|
|
43
62
|
"API keys / secrets masked",
|
|
44
63
|
Text(str(report.masked_values), style="bold green"),
|
|
45
64
|
)
|
|
65
|
+
if report.masked_values:
|
|
66
|
+
facts.add_row(
|
|
67
|
+
"Masked for you",
|
|
68
|
+
Text(masked_for_you_line(report), style="green"),
|
|
69
|
+
)
|
|
70
|
+
else:
|
|
71
|
+
facts.add_row("Masked for you", Text(NO_MASKING_NEEDED_COPY, style="dim"))
|
|
46
72
|
facts.add_row("Safe replacement", Text(REDACTED))
|
|
47
73
|
console.print(Panel(facts, title="Trajectory report", border_style="cyan"))
|
|
74
|
+
if report.masked_values:
|
|
75
|
+
console.print(f"[dim]{REDACTION_REASSURANCE_COPY}[/dim]")
|
|
48
76
|
|
|
49
77
|
if not report.preview:
|
|
50
78
|
return
|
|
@@ -1228,11 +1228,41 @@ def eval_view(
|
|
|
1228
1228
|
),
|
|
1229
1229
|
],
|
|
1230
1230
|
port: Annotated[int, typer.Option(help="Server port")] = 8888,
|
|
1231
|
+
confirm: Annotated[
|
|
1232
|
+
bool,
|
|
1233
|
+
typer.Option(
|
|
1234
|
+
"--confirm",
|
|
1235
|
+
help=(
|
|
1236
|
+
"Show an Approve & submit / Not this one bar on the page; "
|
|
1237
|
+
"print DECISION: approved|rejected and exit 0 on approve, "
|
|
1238
|
+
"3 on reject."
|
|
1239
|
+
),
|
|
1240
|
+
),
|
|
1241
|
+
] = False,
|
|
1242
|
+
redaction_summary: Annotated[
|
|
1243
|
+
str | None,
|
|
1244
|
+
typer.Option(
|
|
1245
|
+
"--redaction-summary",
|
|
1246
|
+
help=(
|
|
1247
|
+
"Masked-secret breakdown shown in the --confirm bar, e.g. "
|
|
1248
|
+
"'2 API keys, 1 bearer token' (lift it from "
|
|
1249
|
+
"`bench traj upload PATH --dry-run`). Display-only; no effect "
|
|
1250
|
+
"without --confirm."
|
|
1251
|
+
),
|
|
1252
|
+
),
|
|
1253
|
+
] = None,
|
|
1231
1254
|
) -> None:
|
|
1232
1255
|
"""View a trial or session trajectory in the browser."""
|
|
1233
|
-
from benchflow.trajectories
|
|
1256
|
+
from benchflow.trajectories import viewer
|
|
1234
1257
|
|
|
1235
|
-
serve(
|
|
1258
|
+
decision = viewer.serve(
|
|
1259
|
+
str(rollout_dir), port, confirm=confirm, redaction_summary=redaction_summary
|
|
1260
|
+
)
|
|
1261
|
+
# Exit-code contract for --confirm: 0 approved, 3 rejected. 3 is chosen
|
|
1262
|
+
# so a rejection never collides with the CLI's existing error exits
|
|
1263
|
+
# (1 = errors, 2 = Typer usage errors).
|
|
1264
|
+
if decision == "rejected":
|
|
1265
|
+
raise typer.Exit(3)
|
|
1236
1266
|
|
|
1237
1267
|
|
|
1238
1268
|
# ── Command-group wiring ──────────────────────────────────────────────
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
import json
|
|
5
6
|
import os
|
|
6
7
|
import shutil
|
|
7
8
|
import subprocess
|
|
@@ -22,6 +23,7 @@ from benchflow.cli._traj_upload_ui import (
|
|
|
22
23
|
render_trajectory_report,
|
|
23
24
|
upload_progress,
|
|
24
25
|
)
|
|
26
|
+
from benchflow.publish.redact import format_redaction_breakdown
|
|
25
27
|
from benchflow.publish.traj_capture import (
|
|
26
28
|
StagedCapture,
|
|
27
29
|
default_source_id,
|
|
@@ -29,6 +31,7 @@ from benchflow.publish.traj_capture import (
|
|
|
29
31
|
stage_trajectory_artifacts,
|
|
30
32
|
validate_email,
|
|
31
33
|
validate_github_id,
|
|
34
|
+
validate_source_id,
|
|
32
35
|
)
|
|
33
36
|
from benchflow.publish.traj_report import (
|
|
34
37
|
DEFAULT_PREVIEW_STEPS,
|
|
@@ -52,14 +55,26 @@ SKILL_RAW_URL = (
|
|
|
52
55
|
"/.agents/skills/benchflow-traj-upload/SKILL.md"
|
|
53
56
|
)
|
|
54
57
|
|
|
58
|
+
UPGRADE_COMMAND = "uv tool install --python 3.12 --upgrade --force benchflow"
|
|
59
|
+
|
|
60
|
+
# Three unwrapped lines separated by blank lines: each logical unit is one
|
|
61
|
+
# full physical line (no hard wraps mid-sentence), so the URL and the upgrade
|
|
62
|
+
# command stay selectable in agents and terminals.
|
|
55
63
|
CONTRIBUTOR_PROMPT = (
|
|
56
|
-
"Submit my
|
|
57
|
-
"
|
|
58
|
-
|
|
59
|
-
"
|
|
64
|
+
"Submit my relevant local Claude Code, Codex, OpenCode, or Cursor session "
|
|
65
|
+
"from the re:Agent e2e agentic science / ai4bio hackathon (last 72 hours, "
|
|
66
|
+
"on this laptop) to the BenchFlow eval prize."
|
|
67
|
+
"\n\n"
|
|
68
|
+
f"1. First make sure the latest benchflow CLI is installed: {UPGRADE_COMMAND}"
|
|
69
|
+
"\n\n"
|
|
70
|
+
f"2. Then read {SKILL_RAW_URL} "
|
|
71
|
+
"and follow it: find a session, open the viewer, and upload only after "
|
|
72
|
+
"I (the human) review it."
|
|
60
73
|
)
|
|
61
74
|
|
|
62
|
-
|
|
75
|
+
CONTRIBUTOR_PROMPT_FRAMING = (
|
|
76
|
+
"Send this to your coding agent (it's a prompt for the agent, not steps for you):"
|
|
77
|
+
)
|
|
63
78
|
|
|
64
79
|
|
|
65
80
|
def _fetch_latest_version() -> str | None:
|
|
@@ -127,6 +142,7 @@ class _UploadOptions:
|
|
|
127
142
|
github_id: str | None
|
|
128
143
|
email: str | None
|
|
129
144
|
source_id: str | None
|
|
145
|
+
repo: bool
|
|
130
146
|
direct: bool
|
|
131
147
|
container_url: str | None
|
|
132
148
|
dry_run: bool
|
|
@@ -163,14 +179,14 @@ def register_traj(app: typer.Typer) -> None:
|
|
|
163
179
|
] = False,
|
|
164
180
|
prompt_only: Annotated[
|
|
165
181
|
bool,
|
|
166
|
-
typer.Option("--prompt", help="Print the copy-paste agent
|
|
182
|
+
typer.Option("--prompt", help="Print the copy-paste agent prompt and exit"),
|
|
167
183
|
] = False,
|
|
168
184
|
list_sessions: Annotated[
|
|
169
185
|
bool,
|
|
170
186
|
typer.Option("--list", help="List recent local sessions and exit"),
|
|
171
187
|
] = False,
|
|
172
188
|
) -> None:
|
|
173
|
-
"""Install the submit skill, or print the
|
|
189
|
+
"""Install the submit skill, or print the prompt to send to an agent."""
|
|
174
190
|
_maybe_print_update_hint()
|
|
175
191
|
if prompt_only:
|
|
176
192
|
_print_contributor_prompt()
|
|
@@ -191,7 +207,6 @@ def register_traj(app: typer.Typer) -> None:
|
|
|
191
207
|
_run_npx_skill_install()
|
|
192
208
|
else:
|
|
193
209
|
_install_project_skill(Path.cwd())
|
|
194
|
-
console.print("Paste this to your agent:")
|
|
195
210
|
_print_contributor_prompt()
|
|
196
211
|
if interactive and typer.confirm(
|
|
197
212
|
"List recent sessions and open the viewer now?", default=False
|
|
@@ -223,6 +238,14 @@ def register_traj(app: typer.Typer) -> None:
|
|
|
223
238
|
str | None,
|
|
224
239
|
typer.Option("--source-id", help="Stable contributor source identifier"),
|
|
225
240
|
] = None,
|
|
241
|
+
repo: Annotated[
|
|
242
|
+
bool,
|
|
243
|
+
typer.Option(
|
|
244
|
+
"--repo/--no-repo",
|
|
245
|
+
help="Tag the upload with the session's repository "
|
|
246
|
+
"(owner/name from its git remote) as the source id",
|
|
247
|
+
),
|
|
248
|
+
] = True,
|
|
226
249
|
direct: Annotated[
|
|
227
250
|
bool,
|
|
228
251
|
typer.Option("--direct", help="Upload with local Azure credentials"),
|
|
@@ -254,6 +277,7 @@ def register_traj(app: typer.Typer) -> None:
|
|
|
254
277
|
github_id=github_id,
|
|
255
278
|
email=email,
|
|
256
279
|
source_id=source_id,
|
|
280
|
+
repo=repo,
|
|
257
281
|
direct=direct,
|
|
258
282
|
container_url=container_url,
|
|
259
283
|
dry_run=dry_run,
|
|
@@ -268,7 +292,23 @@ def register_traj(app: typer.Typer) -> None:
|
|
|
268
292
|
def _run_upload(options: _UploadOptions) -> None:
|
|
269
293
|
prompted = options.path is None
|
|
270
294
|
path = options.path or _prompt_for_path()
|
|
271
|
-
|
|
295
|
+
detected: _DetectedRepo | None = None
|
|
296
|
+
if options.source_id is not None:
|
|
297
|
+
source_id = options.source_id
|
|
298
|
+
else:
|
|
299
|
+
if options.repo:
|
|
300
|
+
detected = _detect_repo_slug(path)
|
|
301
|
+
source_id = f"repo/{detected.slug}" if detected else default_source_id(path)
|
|
302
|
+
if detected:
|
|
303
|
+
# Contributor-visible metadata: surface the tag and where it came
|
|
304
|
+
# from so private-repo sessions can opt out before anything leaves
|
|
305
|
+
# the machine. The local path stays terminal-only; the uploaded
|
|
306
|
+
# source id is just repo/<owner>/<name>. Plain print keeps the line
|
|
307
|
+
# one physical line (no Rich wrapping) so the path stays selectable.
|
|
308
|
+
print(
|
|
309
|
+
f"Repo: {detected.slug} "
|
|
310
|
+
f"(from session cwd {detected.session_cwd}; use --no-repo to omit)"
|
|
311
|
+
)
|
|
272
312
|
destination = _resolve_destination(options)
|
|
273
313
|
|
|
274
314
|
with (
|
|
@@ -281,6 +321,7 @@ def _run_upload(options: _UploadOptions) -> None:
|
|
|
281
321
|
artifacts.files,
|
|
282
322
|
masked_values=artifacts.redaction_replacements,
|
|
283
323
|
preview_steps=options.preview_steps,
|
|
324
|
+
masked_categories=artifacts.redaction_categories,
|
|
284
325
|
)
|
|
285
326
|
status.stop()
|
|
286
327
|
render_trajectory_report(report, console=console)
|
|
@@ -310,10 +351,9 @@ def _run_upload(options: _UploadOptions) -> None:
|
|
|
310
351
|
console.print("[yellow]Upload cancelled.[/yellow]")
|
|
311
352
|
return
|
|
312
353
|
if not destination.direct:
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
)
|
|
354
|
+
# Honest on both cold and warm runs: the broker may already be
|
|
355
|
+
# up. Don't claim it's waking when a retry is just transferring.
|
|
356
|
+
console.print("Uploading… this can take up to a minute; retries are safe.")
|
|
317
357
|
with upload_progress(staged.files, console=console) as hooks:
|
|
318
358
|
result = _publish(staged, destination=destination, hooks=hooks)
|
|
319
359
|
_print_upload_result(staged, result, direct=destination.direct)
|
|
@@ -381,6 +421,102 @@ def _infer_email() -> str:
|
|
|
381
421
|
return ""
|
|
382
422
|
|
|
383
423
|
|
|
424
|
+
_SESSION_CWD_SCAN_LINES = 50
|
|
425
|
+
|
|
426
|
+
|
|
427
|
+
@dataclass(frozen=True)
|
|
428
|
+
class _DetectedRepo:
|
|
429
|
+
slug: str
|
|
430
|
+
session_cwd: Path
|
|
431
|
+
|
|
432
|
+
|
|
433
|
+
def _detect_repo_slug(path: Path) -> _DetectedRepo | None:
|
|
434
|
+
"""Best-effort ``owner/name`` for the repository the session was about.
|
|
435
|
+
|
|
436
|
+
Reads the working directory the session recorded (Claude events carry a
|
|
437
|
+
``cwd`` field; Codex ``session_meta`` payloads do too) and asks that
|
|
438
|
+
directory's git for the ``origin`` remote. The trajectory's own recorded
|
|
439
|
+
cwd is the ONLY provenance source: there is deliberately no fallback to
|
|
440
|
+
the upload invocation directory, which mis-attributed sessions recorded
|
|
441
|
+
outside a repo to whatever checkout the contributor happened to upload
|
|
442
|
+
from. No session cwd, a missing directory, or no GitHub remote all mean
|
|
443
|
+
no tag. Every failure is silent — repo tagging must never break an
|
|
444
|
+
upload — and local-path remotes never produce a tag, so no local
|
|
445
|
+
absolute path can leak into the manifest.
|
|
446
|
+
"""
|
|
447
|
+
session_cwd = _session_cwd(path)
|
|
448
|
+
if session_cwd is None or not session_cwd.is_dir():
|
|
449
|
+
return None
|
|
450
|
+
remote = _command_stdout(
|
|
451
|
+
"git", "-C", str(session_cwd), "remote", "get-url", "origin"
|
|
452
|
+
)
|
|
453
|
+
slug = _repo_slug_from_remote(remote) if remote else None
|
|
454
|
+
if slug:
|
|
455
|
+
return _DetectedRepo(slug=slug, session_cwd=session_cwd)
|
|
456
|
+
return None
|
|
457
|
+
|
|
458
|
+
|
|
459
|
+
def _session_cwd(path: Path) -> Path | None:
|
|
460
|
+
"""Working directory recorded by the first session event that has one."""
|
|
461
|
+
session = path.expanduser()
|
|
462
|
+
if not session.is_file():
|
|
463
|
+
return None
|
|
464
|
+
try:
|
|
465
|
+
with session.open(encoding="utf-8", errors="replace") as stream:
|
|
466
|
+
for line_number, line in enumerate(stream):
|
|
467
|
+
if line_number >= _SESSION_CWD_SCAN_LINES:
|
|
468
|
+
break
|
|
469
|
+
body = line.strip()
|
|
470
|
+
if not body:
|
|
471
|
+
continue
|
|
472
|
+
try:
|
|
473
|
+
event = json.loads(body)
|
|
474
|
+
except json.JSONDecodeError:
|
|
475
|
+
continue
|
|
476
|
+
if not isinstance(event, dict):
|
|
477
|
+
continue
|
|
478
|
+
cwd = event.get("cwd")
|
|
479
|
+
if isinstance(cwd, str) and cwd:
|
|
480
|
+
return Path(cwd)
|
|
481
|
+
payload = event.get("payload")
|
|
482
|
+
if (
|
|
483
|
+
event.get("type") == "session_meta"
|
|
484
|
+
and isinstance(payload, dict)
|
|
485
|
+
and isinstance(payload.get("cwd"), str)
|
|
486
|
+
and payload["cwd"]
|
|
487
|
+
):
|
|
488
|
+
return Path(payload["cwd"])
|
|
489
|
+
except OSError:
|
|
490
|
+
return None
|
|
491
|
+
return None
|
|
492
|
+
|
|
493
|
+
|
|
494
|
+
def _repo_slug_from_remote(remote: str) -> str | None:
|
|
495
|
+
"""Normalize an https/ssh git remote URL to ``owner/name``.
|
|
496
|
+
|
|
497
|
+
Only URL-shaped remotes qualify; a filesystem-path remote returns
|
|
498
|
+
``None`` so local paths never enter the uploaded source id.
|
|
499
|
+
"""
|
|
500
|
+
value = remote.strip()
|
|
501
|
+
if "://" in value:
|
|
502
|
+
_, _, rest = value.partition("://")
|
|
503
|
+
_, _, repo_path = rest.partition("/")
|
|
504
|
+
elif ":" in value and "@" in value.partition(":")[0]:
|
|
505
|
+
repo_path = value.partition(":")[2]
|
|
506
|
+
else:
|
|
507
|
+
return None
|
|
508
|
+
repo_path = repo_path.strip("/").removesuffix(".git")
|
|
509
|
+
segments = [segment for segment in repo_path.split("/") if segment]
|
|
510
|
+
if len(segments) < 2:
|
|
511
|
+
return None
|
|
512
|
+
slug = f"{segments[-2]}/{segments[-1]}"
|
|
513
|
+
try:
|
|
514
|
+
validate_source_id(f"repo/{slug}")
|
|
515
|
+
except ValueError:
|
|
516
|
+
return None
|
|
517
|
+
return slug
|
|
518
|
+
|
|
519
|
+
|
|
384
520
|
def _git_config(key: str) -> str | None:
|
|
385
521
|
return _command_stdout("git", "config", "--get", key)
|
|
386
522
|
|
|
@@ -514,10 +650,19 @@ def _print_dry_run(staged: StagedCapture) -> None:
|
|
|
514
650
|
if staged.ignored:
|
|
515
651
|
console.print(f"Ignored: {escape(', '.join(staged.ignored))}")
|
|
516
652
|
console.print(f"Redactions: {staged.redaction_replacements}")
|
|
653
|
+
# One plain, greppable line so the upload skill can lift the breakdown into
|
|
654
|
+
# the viewer's confirm bar (bench eval view --redaction-summary "...").
|
|
655
|
+
breakdown = format_redaction_breakdown(dict(staged.artifact_redaction_categories))
|
|
656
|
+
if breakdown:
|
|
657
|
+
print(f"Masked for you: {breakdown}")
|
|
658
|
+
else:
|
|
659
|
+
print("Masked for you: nothing — no secrets detected")
|
|
517
660
|
|
|
518
661
|
|
|
519
662
|
def _print_contributor_prompt() -> None:
|
|
520
|
-
#
|
|
663
|
+
# Plain print: Rich wrapping would break the unbroken URL line and make
|
|
664
|
+
# the block awkward to copy.
|
|
665
|
+
print(CONTRIBUTOR_PROMPT_FRAMING)
|
|
521
666
|
print(CONTRIBUTOR_PROMPT)
|
|
522
667
|
|
|
523
668
|
|
|
@@ -563,7 +708,7 @@ def _run_npx_skill_install() -> None:
|
|
|
563
708
|
check=False,
|
|
564
709
|
)
|
|
565
710
|
if completed.returncode != 0:
|
|
566
|
-
print_error("npx skills add failed; the copy-paste
|
|
711
|
+
print_error("npx skills add failed; the copy-paste prompt below still works.")
|
|
567
712
|
|
|
568
713
|
|
|
569
714
|
def _print_session_hits() -> None:
|
|
@@ -571,11 +716,15 @@ def _print_session_hits() -> None:
|
|
|
571
716
|
|
|
572
717
|
hits = list_recent_sessions()
|
|
573
718
|
if not hits:
|
|
574
|
-
|
|
719
|
+
print("No recent Claude Code, Codex, or trial sessions found.")
|
|
575
720
|
return
|
|
576
721
|
for index, hit in enumerate(hits, start=1):
|
|
577
722
|
snippet = hit.snippet or "(no prompt yet)"
|
|
578
|
-
|
|
723
|
+
# Plain print + path on its own line: Rich wrapping used to split
|
|
724
|
+
# long session paths mid-token and make them unselectable.
|
|
725
|
+
print(f"{index}. [{hit.source}] {hit.when}")
|
|
726
|
+
print(f" {hit.path}")
|
|
727
|
+
print(f" {snippet}")
|
|
579
728
|
|
|
580
729
|
|
|
581
730
|
def _interactive_view() -> None:
|