diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5f54c67a9..58c42b151 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -79,10 +79,10 @@ jobs: max-parallel: 3 matrix: model_entry: - - kimi-k2.6 - - mimo-v2.5 - - kimi-k2.6-camera-raw - - mimo-v2.5-camera-raw + - claude-code-mimo-v2.5 + - claude-code-kimi-k2.6 + - agents-sdk-mimo-v2.5 + - agents-sdk-kimi-k2.7-code steps: - uses: actions/checkout@v4 @@ -211,33 +211,33 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Download Molmo live Kimi artifact + - name: Download Molmo live Claude Code MiMo artifact continue-on-error: true uses: actions/download-artifact@v4 with: - name: report-molmo-live-kimi-k2.6 - path: molmo-live-src/kimi-k2.6 + name: report-molmo-live-claude-code-mimo-v2.5 + path: molmo-live-src/claude-code-mimo-v2.5 - - name: Download Molmo live MiMo v2.5 artifact + - name: Download Molmo live Claude Code Kimi artifact continue-on-error: true uses: actions/download-artifact@v4 with: - name: report-molmo-live-mimo-v2.5 - path: molmo-live-src/mimo-v2.5 + name: report-molmo-live-claude-code-kimi-k2.6 + path: molmo-live-src/claude-code-kimi-k2.6 - - name: Download Molmo live Kimi RAW_FPV artifact + - name: Download Molmo live Agents SDK MiMo artifact continue-on-error: true uses: actions/download-artifact@v4 with: - name: report-molmo-live-kimi-k2.6-camera-raw - path: molmo-live-src/kimi-k2.6-camera-raw + name: report-molmo-live-agents-sdk-mimo-v2.5 + path: molmo-live-src/agents-sdk-mimo-v2.5 - - name: Download Molmo live MiMo v2.5 RAW_FPV artifact + - name: Download Molmo live Agents SDK Kimi artifact continue-on-error: true uses: actions/download-artifact@v4 with: - name: report-molmo-live-mimo-v2.5-camera-raw - path: molmo-live-src/mimo-v2.5-camera-raw + name: report-molmo-live-agents-sdk-kimi-k2.7-code + path: molmo-live-src/agents-sdk-kimi-k2.7-code - name: Assemble Pages site run: | diff --git a/just/molmo.just b/just/molmo.just index ce1024df0..d5af56229 100644 --- a/just/molmo.just +++ b/just/molmo.just @@ -584,8 +584,8 @@ household-world-impl driver="mcp-smoke" profile="smoke" seeds="7" output_dir="ou roboclaws_codex_provider_args codex_model_args elif [[ "$driver" == "openai-agents-live" ]]; then openai_agents_profile="$(roboclaws_code_agent_provider ROBOCLAWS_PROVIDER_PROFILE codex-router-responses)" - openai_agents_model="$(roboclaws_code_agent_model ROBOCLAWS_CODEX_MODEL ROBOCLAWS_PROVIDER_PROFILE codex-router-responses)" - openai_agents_profile_summary="$(roboclaws_code_agent_profile_summary ROBOCLAWS_PROVIDER_PROFILE ROBOCLAWS_CODEX_MODEL codex-router-responses)" + openai_agents_model="$(roboclaws_code_agent_model ROBOCLAWS_OPENAI_AGENTS_MODEL ROBOCLAWS_PROVIDER_PROFILE codex-router-responses)" + openai_agents_profile_summary="$(roboclaws_code_agent_profile_summary ROBOCLAWS_PROVIDER_PROFILE ROBOCLAWS_OPENAI_AGENTS_MODEL codex-router-responses)" elif [[ "$driver" == "claude-live" ]]; then claude_profile_summary="$(roboclaws_code_agent_profile_summary ROBOCLAWS_PROVIDER_PROFILE ROBOCLAWS_CLAUDE_MODEL auto-claude)" roboclaws_claude_provider_args claude_model_args claude_env_args @@ -759,7 +759,7 @@ household-world-impl driver="mcp-smoke" profile="smoke" seeds="7" output_dir="ou HTTP_PROXY HTTPS_PROXY ALL_PROXY NO_PROXY \ http_proxy https_proxy all_proxy no_proxy \ DISPLAY XAUTHORITY MUJOCO_GL PYOPENGL_PLATFORM LIBGL_ALWAYS_SOFTWARE \ - ROBOCLAWS_PROVIDER_PROFILE ROBOCLAWS_CODEX_MODEL \ + ROBOCLAWS_PROVIDER_PROFILE ROBOCLAWS_CODEX_MODEL ROBOCLAWS_OPENAI_AGENTS_MODEL \ ROBOCLAWS_CODEX_DISABLE_RESPONSES_WEBSOCKETS \ ROBOCLAWS_PROVIDER_TIMING_PROXY \ ROBOCLAWS_TIMING_PROXY_UPSTREAM_BASE_URL \ diff --git a/roboclaws/household/ci_live_reports.py b/roboclaws/household/ci_live_reports.py index 081de15b7..335989c2c 100644 --- a/roboclaws/household/ci_live_reports.py +++ b/roboclaws/household/ci_live_reports.py @@ -18,6 +18,12 @@ "claude-version.txt", "claude-events.jsonl", "claude.stderr.log", + "driver.log", + "openai-agents-events.jsonl", + "openai-agents-trace.json", + "openai-agents-spans.jsonl", + "openai-agents-server.log", + "openai-agents-skill-context.json", "checker.log", "server.pid", "trace.jsonl", @@ -34,6 +40,7 @@ class MolmoLiveModelEntry: name: str label: str + agent_engine: str provider_profile: str model: str secret_env: str @@ -42,36 +49,40 @@ class MolmoLiveModelEntry: MODEL_ENTRIES: tuple[MolmoLiveModelEntry, ...] = ( MolmoLiveModelEntry( - name="kimi-k2.6", - label="Kimi K2.6", - provider_profile="kimi-anthropic", - model="kimi-k2.6", - secret_env="KIMI_API_KEY", - profile="world-public-labels", - ), - MolmoLiveModelEntry( - name="mimo-v2.5", - label="MiMo v2.5", + name="claude-code-mimo-v2.5", + label="Claude Code + MiMo v2.5", + agent_engine="claude-code", provider_profile="mimo-tp-anthropic", model="mimo-v2.5", secret_env="MIMO_TP_KEY", profile="world-public-labels", ), MolmoLiveModelEntry( - name="kimi-k2.6-camera-raw-fpv", - label="Kimi K2.6 RAW_FPV", + name="claude-code-kimi-k2.6", + label="Claude Code + Kimi K2.6", + agent_engine="claude-code", provider_profile="kimi-anthropic", model="kimi-k2.6", secret_env="KIMI_API_KEY", - profile="camera-raw-fpv", + profile="world-public-labels", ), MolmoLiveModelEntry( - name="mimo-v2.5-camera-raw-fpv", - label="MiMo v2.5 RAW_FPV", - provider_profile="mimo-tp-anthropic", + name="agents-sdk-mimo-v2.5", + label="OpenAI Agents SDK + MiMo v2.5", + agent_engine="openai-agents-sdk", + provider_profile="mimo-tp-openai-chat", model="mimo-v2.5", secret_env="MIMO_TP_KEY", - profile="camera-raw-fpv", + profile="world-public-labels", + ), + MolmoLiveModelEntry( + name="agents-sdk-kimi-k2.7-code", + label="OpenAI Agents SDK + Kimi K2.7 Code", + agent_engine="openai-agents-sdk", + provider_profile="kimi-openai-chat", + model="kimi-k2.7-code", + secret_env="KIMI_API_KEY", + profile="world-public-labels", ), ) @@ -104,10 +115,11 @@ def base_status( "schema": STATUS_SCHEMA, "entry": entry.name, "label": entry.label, + "agent_engine": entry.agent_engine, "provider_profile": entry.provider_profile, "model": entry.model, "secret_env": entry.secret_env, - "driver": "claude", + "driver": entry.agent_engine, "profile": profile, "seed": seed, "generated_mess_count": generated_mess_count, @@ -294,7 +306,7 @@ def write_live_index(root: Path, statuses: list[dict[str, Any]] | None = None) - "

MolmoSpaces Live Cleanup Reports

", '

Published by GitHub Actions for main-only / opt-in ' "MolmoSpaces cleanup runs. Each row links to the report or diagnostics " - "for one provider-backed Claude Code run.

", + "for one provider-backed live-agent run.

", "", "" "", @@ -313,6 +325,7 @@ def _live_index_row(status: dict[str, Any]) -> str: label = html.escape(str(status.get("label") or status.get("entry") or "Molmo live run")) state = html.escape(str(status.get("status") or "unknown")) provider = html.escape(str(status.get("provider_profile") or "unknown provider")) + agent_engine = html.escape(str(status.get("agent_engine") or status.get("driver") or "unknown")) model = html.escape(str(status.get("model") or "unknown model")) profile = html.escape(str(status.get("profile") or "unknown profile")) reason = html.escape(str(status.get("reason") or "")) @@ -335,7 +348,7 @@ def _live_index_row(status: dict[str, Any]) -> str: f"" f"" f"" - f"" + f"" f"" f"" "" diff --git a/scripts/molmo_cleanup/run_ci_live_cleanup_matrix.py b/scripts/molmo_cleanup/run_ci_live_cleanup_matrix.py index 9bad66eaa..aa82746af 100644 --- a/scripts/molmo_cleanup/run_ci_live_cleanup_matrix.py +++ b/scripts/molmo_cleanup/run_ci_live_cleanup_matrix.py @@ -51,11 +51,7 @@ def parse_args(argv: list[str] | None = None) -> argparse.Namespace: "--generated-mess-count", type=int, default=None, - help=( - "Generated mess count override. Defaults to 5 for world-public-labels entries " - "and 10 for camera-raw-fpv entries so the RAW_FPV success gate can require " - "7 accepted placements." - ), + help="Generated mess count override. Defaults to 5 for world-public-labels entries.", ) parser.add_argument( "--profile", @@ -108,7 +104,7 @@ def _run_preflight_or_statuses( return None try: if not args.skip_version_check: - _version_checks(args) + _version_checks(args, entries) if not args.skip_uv_sync: _run_checked([args.uv_bin, "sync", "--extra", "dev", "--extra", "molmospaces"]) if not args.skip_prewarm: @@ -181,7 +177,7 @@ def _run_entry( "rerun_command": rerun_command, "env": { "ROBOCLAWS_PROVIDER_PROFILE": entry.provider_profile, - "ROBOCLAWS_CLAUDE_MODEL": entry.model, + _model_env_key(entry): entry.model, PROVIDER_TIMING_PROXY_ENV: _default_provider_timing_proxy_value(), }, "cache_roots": [ @@ -205,7 +201,7 @@ def _run_entry( env = os.environ.copy() env["ROBOCLAWS_PROVIDER_PROFILE"] = entry.provider_profile - env["ROBOCLAWS_CLAUDE_MODEL"] = entry.model + env[_model_env_key(entry)] = entry.model env.setdefault(PROVIDER_TIMING_PROXY_ENV, "1") env["ROBOCLAWS_REPORT_RERUN_COMMAND"] = rerun_command try: @@ -258,8 +254,6 @@ def _entry_profile(entry: MolmoLiveModelEntry, args: argparse.Namespace) -> str: def _entry_generated_mess_count(entry: MolmoLiveModelEntry, args: argparse.Namespace) -> int: if args.generated_mess_count is not None: return int(args.generated_mess_count) - if _entry_profile(entry, args) == "camera-raw-fpv": - return 10 return 5 @@ -284,7 +278,7 @@ def _live_command( "world=molmospaces/val_0", "backend=mujoco", "intent=cleanup", - "agent_engine=claude-code", + f"agent_engine={entry.agent_engine}", f"provider_profile={entry.provider_profile}", f"evidence_lane={profile}", f"seed={args.seed}", @@ -307,7 +301,7 @@ def _live_report_rerun_command(entry: MolmoLiveModelEntry, args: argparse.Namesp "world=molmospaces/val_0", "backend=mujoco", "intent=cleanup", - "agent_engine=claude-code", + f"agent_engine={entry.agent_engine}", f"provider_profile={entry.provider_profile}", f"evidence_lane={profile}", f"seed={args.seed}", @@ -317,12 +311,20 @@ def _live_report_rerun_command(entry: MolmoLiveModelEntry, args: argparse.Namesp ] return ( f"ROBOCLAWS_PROVIDER_PROFILE={entry.provider_profile} " - f"ROBOCLAWS_CLAUDE_MODEL={entry.model} " + f"{_model_env_key(entry)}={entry.model} " f"{PROVIDER_TIMING_PROXY_ENV}={_default_provider_timing_proxy_value()} " f"{shell_join(command)}" ) +def _model_env_key(entry: MolmoLiveModelEntry) -> str: + if entry.agent_engine == "claude-code": + return "ROBOCLAWS_CLAUDE_MODEL" + if entry.agent_engine == "openai-agents-sdk": + return "ROBOCLAWS_OPENAI_AGENTS_MODEL" + raise ValueError(f"unsupported Molmo live agent engine: {entry.agent_engine}") + + def _default_provider_timing_proxy_value() -> str: return os.environ.get(PROVIDER_TIMING_PROXY_ENV, "1") @@ -344,8 +346,14 @@ def _prewarm(args: argparse.Namespace, *, generated_mess_count: int) -> None: ) -def _version_checks(args: argparse.Namespace) -> None: - for binary in ("codex", "claude"): +def _version_checks( + args: argparse.Namespace, + entries: tuple[MolmoLiveModelEntry, ...], +) -> None: + required_binaries = ( + {"claude"} if any(entry.agent_engine == "claude-code" for entry in entries) else set() + ) + for binary in sorted(required_binaries): resolved = shutil.which(binary) if not resolved: raise RuntimeError(f"{binary} command not found") diff --git a/scripts/reports/write_pages_index.py b/scripts/reports/write_pages_index.py index 81e8cfde2..7abf70e5b 100644 --- a/scripts/reports/write_pages_index.py +++ b/scripts/reports/write_pages_index.py @@ -100,6 +100,9 @@ def _molmo_live_section(site_dir: Path) -> str: items = [] for entry in entries: label = html.escape(str(entry.get("label") or entry.get("entry") or "Molmo live run")) + agent_engine = html.escape( + str(entry.get("agent_engine") or entry.get("driver") or "unknown") + ) model = html.escape(str(entry.get("model") or "unknown model")) provider = html.escape(str(entry.get("provider_profile") or "unknown provider")) status = html.escape(str(entry.get("status") or "unknown")) @@ -116,7 +119,7 @@ def _molmo_live_section(site_dir: Path) -> str: else: title = f"{label}" desc = ( - f'
Claude Code live cleanup via ' + f'
Live cleanup via {agent_engine} and ' f"{provider} / {model} using " f"{profile}. Status: " f"{status}" diff --git a/tests/contract/dev_tools/test_task_agent_just_recipes.py b/tests/contract/dev_tools/test_task_agent_just_recipes.py index 337649091..d7901aa6c 100644 --- a/tests/contract/dev_tools/test_task_agent_just_recipes.py +++ b/tests/contract/dev_tools/test_task_agent_just_recipes.py @@ -37,9 +37,7 @@ CODING_AGENT_DOCKER = REPO_ROOT / "scripts" / "dev" / "coding_agent_docker.sh" LIVE_CODEX_RUNNER = REPO_ROOT / "scripts" / "molmo_cleanup" / "run_live_codex_cleanup.py" LIVE_CLAUDE_RUNNER = REPO_ROOT / "scripts" / "molmo_cleanup" / "run_live_claude_cleanup.py" -LIVE_OPENAI_AGENTS_RUNNER = ( - REPO_ROOT / "scripts" / "molmo_cleanup" / "run_live_openai_agents_cleanup.py" -) +LIVE_OPENAI_AGENTS_RUNNER = REPO_ROOT / "scripts/molmo_cleanup/run_live_openai_agents_cleanup.py" AGIBOT_MAP_BUILD_CODEX_RUNNER = ( REPO_ROOT / "scripts" / "molmo_cleanup" / "run_live_codex_agibot_map_build.py" ) @@ -848,6 +846,8 @@ def test_openai_agents_sdk_cleanup_route_stays_private_non_default() -> None: assert "--model-thinking-mode" in molmo_text assert "ROBOCLAWS_OPENAI_AGENTS_THINKING_MODE" in molmo_text assert "--context-soft-limit-tokens" in molmo_text + assert "ROBOCLAWS_OPENAI_AGENTS_MODEL ROBOCLAWS_PROVIDER_PROFILE" in molmo_text + assert "ROBOCLAWS_PROVIDER_PROFILE ROBOCLAWS_OPENAI_AGENTS_MODEL" in molmo_text assert "openai-agents-live" not in trace_household_cleanup_run("codex") plan = resolve_surface_launch( diff --git a/tests/unit/molmo_cleanup/test_ci_live_reports.py b/tests/unit/molmo_cleanup/test_ci_live_reports.py index 0af344fc1..a2832d5b7 100644 --- a/tests/unit/molmo_cleanup/test_ci_live_reports.py +++ b/tests/unit/molmo_cleanup/test_ci_live_reports.py @@ -43,35 +43,66 @@ def _load_module(path: Path, name: str): return module +def _ci_live_dry_run_args(tmp_path: Path, entry: str, *extra: str) -> list[str]: + return [ + "--entry", + entry, + *extra, + "--dry-run", + "--skip-uv-sync", + "--skip-prewarm", + "--skip-version-check", + "--output-dir", + str(tmp_path / "runs"), + "--published-dir", + str(tmp_path / "site" / "molmo" / "live"), + ] + + def test_ci_live_model_entries_match_provider_profiles() -> None: assert [entry.name for entry in MODEL_ENTRIES] == [ - "kimi-k2.6", - "mimo-v2.5", - "kimi-k2.6-camera-raw-fpv", - "mimo-v2.5-camera-raw-fpv", + "claude-code-mimo-v2.5", + "claude-code-kimi-k2.6", + "agents-sdk-mimo-v2.5", + "agents-sdk-kimi-k2.7-code", ] assert { - entry.name: (entry.provider_profile, entry.model, entry.secret_env, entry.profile) + entry.name: ( + entry.agent_engine, + entry.provider_profile, + entry.model, + entry.secret_env, + entry.profile, + ) for entry in MODEL_ENTRIES } == { - "kimi-k2.6": ("kimi-anthropic", "kimi-k2.6", "KIMI_API_KEY", "world-public-labels"), - "mimo-v2.5": ( + "claude-code-mimo-v2.5": ( + "claude-code", "mimo-tp-anthropic", "mimo-v2.5", "MIMO_TP_KEY", "world-public-labels", ), - "kimi-k2.6-camera-raw-fpv": ( + "claude-code-kimi-k2.6": ( + "claude-code", "kimi-anthropic", "kimi-k2.6", "KIMI_API_KEY", - "camera-raw-fpv", + "world-public-labels", ), - "mimo-v2.5-camera-raw-fpv": ( - "mimo-tp-anthropic", + "agents-sdk-mimo-v2.5": ( + "openai-agents-sdk", + "mimo-tp-openai-chat", "mimo-v2.5", "MIMO_TP_KEY", - "camera-raw-fpv", + "world-public-labels", + ), + "agents-sdk-kimi-k2.7-code": ( + "openai-agents-sdk", + "kimi-openai-chat", + "kimi-k2.7-code", + "KIMI_API_KEY", + "world-public-labels", ), } @@ -109,25 +140,13 @@ def test_ci_live_status_reader_rejects_non_object_source(tmp_path: Path) -> None def test_dry_run_matrix_writes_status_and_manifest(tmp_path: Path) -> None: run_matrix = _load_module(RUN_MATRIX_PATH, "run_ci_live_cleanup_matrix") - status = run_matrix.main( - [ - "--entry", - "kimi-k2.6", - "--dry-run", - "--skip-uv-sync", - "--skip-prewarm", - "--skip-version-check", - "--output-dir", - str(tmp_path / "runs"), - "--published-dir", - str(tmp_path / "site" / "molmo" / "live"), - ] - ) + status = run_matrix.main(_ci_live_dry_run_args(tmp_path, "claude-code-kimi-k2.6")) assert status == 0 - status_path = tmp_path / "site" / "molmo" / "live" / "kimi-k2.6" / "status.json" + status_path = tmp_path / "site" / "molmo" / "live" / "claude-code-kimi-k2.6" / "status.json" payload = json.loads(status_path.read_text(encoding="utf-8")) assert payload["status"] == "dry_run" + assert payload["agent_engine"] == "claude-code" assert payload["env"] == { "ROBOCLAWS_CLAUDE_MODEL": "kimi-k2.6", "ROBOCLAWS_PROVIDER_PROFILE": "kimi-anthropic", @@ -160,35 +179,28 @@ def test_dry_run_matrix_writes_status_and_manifest(tmp_path: Path) -> None: ) ) assert manifest["schema"] == "molmo_live_ci_report_manifest_v1" - assert manifest["entries"][0]["entry"] == "kimi-k2.6" + assert manifest["entries"][0]["entry"] == "claude-code-kimi-k2.6" -def test_dry_run_camera_raw_entry_uses_entry_profile(tmp_path: Path) -> None: +def test_dry_run_agents_sdk_entry_uses_entry_engine_and_model_env(tmp_path: Path) -> None: run_matrix = _load_module(RUN_MATRIX_PATH, "run_ci_live_cleanup_matrix") - status = run_matrix.main( - [ - "--entry", - "kimi-k2.6-camera-raw-fpv", - "--dry-run", - "--skip-uv-sync", - "--skip-prewarm", - "--skip-version-check", - "--output-dir", - str(tmp_path / "runs"), - "--published-dir", - str(tmp_path / "site" / "molmo" / "live"), - ] - ) + status = run_matrix.main(_ci_live_dry_run_args(tmp_path, "agents-sdk-kimi-k2.7-code")) assert status == 0 - status_path = tmp_path / "site" / "molmo" / "live" / "kimi-k2.6-camera-raw-fpv" / "status.json" + status_path = tmp_path / "site" / "molmo" / "live" / "agents-sdk-kimi-k2.7-code" / "status.json" payload = json.loads(status_path.read_text(encoding="utf-8")) - assert payload["entry"] == "kimi-k2.6-camera-raw-fpv" - assert payload["label"] == "Kimi K2.6 RAW_FPV" - assert payload["model"] == "kimi-k2.6" - assert payload["profile"] == "camera-raw-fpv" - assert payload["generated_mess_count"] == 10 + assert payload["entry"] == "agents-sdk-kimi-k2.7-code" + assert payload["label"] == "OpenAI Agents SDK + Kimi K2.7 Code" + assert payload["agent_engine"] == "openai-agents-sdk" + assert payload["model"] == "kimi-k2.7-code" + assert payload["profile"] == "world-public-labels" + assert payload["generated_mess_count"] == 5 + assert payload["env"] == { + "ROBOCLAWS_OPENAI_AGENTS_MODEL": "kimi-k2.7-code", + "ROBOCLAWS_PROVIDER_PROFILE": "kimi-openai-chat", + "ROBOCLAWS_PROVIDER_TIMING_PROXY": "1", + } assert payload["command"][:9] == [ "just", "run::surface", @@ -196,37 +208,29 @@ def test_dry_run_camera_raw_entry_uses_entry_profile(tmp_path: Path) -> None: "world=molmospaces/val_0", "backend=mujoco", "intent=cleanup", - "agent_engine=claude-code", - "provider_profile=kimi-anthropic", - "evidence_lane=camera-raw-fpv", + "agent_engine=openai-agents-sdk", + "provider_profile=kimi-openai-chat", + "evidence_lane=world-public-labels", ] - assert "relocation_count=10" in payload["command"] - assert "relocation_count=10" in payload["rerun_command"] - assert "just run::surface surface=household-world" in payload["rerun_command"] + assert "relocation_count=5" in payload["command"] + assert "ROBOCLAWS_OPENAI_AGENTS_MODEL=kimi-k2.7-code" in payload["rerun_command"] + assert "agent_engine=openai-agents-sdk" in payload["rerun_command"] -def test_dry_run_camera_raw_generated_mess_count_override(tmp_path: Path) -> None: +def test_dry_run_generated_mess_count_override(tmp_path: Path) -> None: run_matrix = _load_module(RUN_MATRIX_PATH, "run_ci_live_cleanup_matrix") status = run_matrix.main( - [ - "--entry", - "mimo-v2.5-camera-raw-fpv", + _ci_live_dry_run_args( + tmp_path, + "agents-sdk-mimo-v2.5", "--generated-mess-count", "12", - "--dry-run", - "--skip-uv-sync", - "--skip-prewarm", - "--skip-version-check", - "--output-dir", - str(tmp_path / "runs"), - "--published-dir", - str(tmp_path / "site" / "molmo" / "live"), - ] + ) ) assert status == 0 - status_path = tmp_path / "site" / "molmo" / "live" / "mimo-v2.5-camera-raw-fpv" / "status.json" + status_path = tmp_path / "site" / "molmo" / "live" / "agents-sdk-mimo-v2.5" / "status.json" payload = json.loads(status_path.read_text(encoding="utf-8")) assert payload["generated_mess_count"] == 12 assert "relocation_count=12" in payload["command"] @@ -239,24 +243,11 @@ def test_ci_live_matrix_preserves_provider_timing_proxy_escape_hatch( run_matrix = _load_module(RUN_MATRIX_PATH, "run_ci_live_cleanup_matrix") monkeypatch.setenv("ROBOCLAWS_PROVIDER_TIMING_PROXY", "0") - status = run_matrix.main( - [ - "--entry", - "kimi-k2.6", - "--dry-run", - "--skip-uv-sync", - "--skip-prewarm", - "--skip-version-check", - "--output-dir", - str(tmp_path / "runs"), - "--published-dir", - str(tmp_path / "site" / "molmo" / "live"), - ] - ) + status = run_matrix.main(_ci_live_dry_run_args(tmp_path, "claude-code-kimi-k2.6")) assert status == 0 payload = json.loads( - (tmp_path / "site" / "molmo" / "live" / "kimi-k2.6" / "status.json").read_text( + (tmp_path / "site" / "molmo" / "live" / "claude-code-kimi-k2.6" / "status.json").read_text( encoding="utf-8" ) ) @@ -270,7 +261,7 @@ def test_ci_live_matrix_preserves_provider_timing_proxy_escape_hatch( def test_failed_live_entry_publishes_partial_seed_diagnostics(tmp_path: Path, monkeypatch) -> None: run_matrix = _load_module(RUN_MATRIX_PATH, "run_ci_live_cleanup_matrix") - entry = entry_by_name("kimi-k2.6") + entry = entry_by_name("claude-code-kimi-k2.6") output_dir = tmp_path / "runs" publish_root = tmp_path / "site" / "molmo" / "live" args = SimpleNamespace( @@ -319,7 +310,7 @@ def fake_run_checked(_command, **_kwargs): def test_latest_seed_artifact_dir_ignores_seed_dirs_without_diagnostic_evidence( tmp_path: Path, ) -> None: - entry_output_dir = tmp_path / "runs" / "kimi-k2.6" + entry_output_dir = tmp_path / "runs" / "claude-code-kimi-k2.6" (entry_output_dir / "0513_2217" / "seed-7").mkdir(parents=True) (entry_output_dir / "0513_2300" / "seed-7").mkdir(parents=True) @@ -1610,20 +1601,20 @@ def test_publish_seed_run_and_pages_index_render_molmo_live_tiles(tmp_path: Path published = publish_seed_run( source_seed_dir=source_seed, publish_root=live_root, - entry_name="kimi-k2.6", + entry_name="claude-code-kimi-k2.6", seed=7, ) assert (published / "report.html").is_file() - camera_raw_published = publish_seed_run( + agents_published = publish_seed_run( source_seed_dir=source_seed, publish_root=live_root, - entry_name="kimi-k2.6-camera-raw-fpv", + entry_name="agents-sdk-mimo-v2.5", seed=7, ) - assert (camera_raw_published / "report.html").is_file() + assert (agents_published / "report.html").is_file() success = base_status( - entry_by_name("kimi-k2.6"), + entry_by_name("claude-code-kimi-k2.6"), seed=7, generated_mess_count=5, profile="world-public-labels", @@ -1632,51 +1623,51 @@ def test_publish_seed_run_and_pages_index_render_molmo_live_tiles(tmp_path: Path success.update( { "status": "success", - "report_path": report_path_for_entry("kimi-k2.6", seed=7), + "report_path": report_path_for_entry("claude-code-kimi-k2.6", seed=7), } ) skipped = base_status( - entry_by_name("mimo-v2.5"), + entry_by_name("claude-code-mimo-v2.5"), seed=7, generated_mess_count=5, profile="world-public-labels", task="帮我收拾这个房间", ) skipped.update({"status": "skipped", "reason": "missing required secret/env MIMO_TP_KEY"}) - camera_raw = base_status( - entry_by_name("kimi-k2.6-camera-raw-fpv"), + agents_success = base_status( + entry_by_name("agents-sdk-mimo-v2.5"), seed=7, generated_mess_count=5, - profile="camera-raw-fpv", + profile="world-public-labels", task="帮我收拾这个房间", ) - camera_raw.update( + agents_success.update( { "status": "success", - "report_path": report_path_for_entry("kimi-k2.6-camera-raw-fpv", seed=7), + "report_path": report_path_for_entry("agents-sdk-mimo-v2.5", seed=7), } ) - write_status(status_path_for_entry(live_root, "kimi-k2.6"), success) - write_status(status_path_for_entry(live_root, "mimo-v2.5"), skipped) - write_status(status_path_for_entry(live_root, "kimi-k2.6-camera-raw-fpv"), camera_raw) + write_status(status_path_for_entry(live_root, "claude-code-kimi-k2.6"), success) + write_status(status_path_for_entry(live_root, "claude-code-mimo-v2.5"), skipped) + write_status(status_path_for_entry(live_root, "agents-sdk-mimo-v2.5"), agents_success) write_manifest(live_root) live_index = write_live_index(live_root) live_html = live_index.read_text(encoding="utf-8") assert "MolmoSpaces Live Cleanup Reports" in live_html - assert "kimi-k2.6/seed-7/report.html" in live_html - assert "kimi-k2.6-camera-raw-fpv/seed-7/report.html" in live_html - assert "Kimi K2.6 RAW_FPV" in live_html - assert "camera-raw-fpv" in live_html + assert "claude-code-kimi-k2.6/seed-7/report.html" in live_html + assert "agents-sdk-mimo-v2.5/seed-7/report.html" in live_html + assert "OpenAI Agents SDK + MiMo v2.5" in live_html + assert "openai-agents-sdk" in live_html assert "Rerun locally" in live_html out = write_pages_index.write_index(tmp_path / "site", include_molmo_live=True) html = out.read_text(encoding="utf-8") assert "MolmoSpaces Live Cleanup (main-only / opt-in CI)" in html assert "molmo/live/" in html - assert "molmo/live/kimi-k2.6/seed-7/report.html" in html - assert "molmo/live/kimi-k2.6-camera-raw-fpv/seed-7/report.html" in html - assert "Kimi K2.6 RAW_FPV" in html - assert "camera-raw-fpv" in html + assert "molmo/live/claude-code-kimi-k2.6/seed-7/report.html" in html + assert "molmo/live/agents-sdk-mimo-v2.5/seed-7/report.html" in html + assert "OpenAI Agents SDK + MiMo v2.5" in html + assert "openai-agents-sdk" in html assert "MiMo v2.5" in html assert "missing required secret/env MIMO_TP_KEY" in html @@ -1693,13 +1684,13 @@ def test_publish_diagnostic_seed_run_and_pages_index_link_failed_tile(tmp_path: published = publish_diagnostic_seed_run( source_seed_dir=source_seed, publish_root=live_root, - entry_name="kimi-k2.6", + entry_name="claude-code-kimi-k2.6", seed=7, ) assert (published / "diagnostics.html").is_file() failed = base_status( - entry_by_name("kimi-k2.6"), + entry_by_name("claude-code-kimi-k2.6"), seed=7, generated_mess_count=5, profile="world-public-labels", @@ -1709,19 +1700,19 @@ def test_publish_diagnostic_seed_run_and_pages_index_link_failed_tile(tmp_path: { "status": "failed", "reason": "provider failed", - "diagnostic_path": diagnostic_path_for_entry("kimi-k2.6", seed=7), + "diagnostic_path": diagnostic_path_for_entry("claude-code-kimi-k2.6", seed=7), } ) - write_status(status_path_for_entry(live_root, "kimi-k2.6"), failed) + write_status(status_path_for_entry(live_root, "claude-code-kimi-k2.6"), failed) write_manifest(live_root) live_index = write_live_index(live_root) live_html = live_index.read_text(encoding="utf-8") - assert "kimi-k2.6/diagnostics/seed-7/diagnostics.html" in live_html + assert "claude-code-kimi-k2.6/diagnostics/seed-7/diagnostics.html" in live_html out = write_pages_index.write_index(tmp_path / "site", include_molmo_live=True) html = out.read_text(encoding="utf-8") - assert "molmo/live/kimi-k2.6/diagnostics/seed-7/diagnostics.html" in html - assert "Kimi K2.6 diagnostics" in html + assert "molmo/live/claude-code-kimi-k2.6/diagnostics/seed-7/diagnostics.html" in html + assert "Claude Code + Kimi K2.6 diagnostics" in html def test_pages_index_without_live_manifest_renders_household_placeholder(tmp_path: Path) -> None: @@ -1740,14 +1731,14 @@ def test_assemble_ci_live_pages_runs_without_site_packages(tmp_path: Path) -> No source_root = tmp_path / "molmo-live-src" live_root = tmp_path / "site" / "molmo" / "live" status = base_status( - entry_by_name("kimi-k2.6"), + entry_by_name("claude-code-kimi-k2.6"), seed=7, generated_mess_count=5, profile="world-public-labels", task="帮我收拾这个房间", ) status.update({"status": "skipped", "reason": "fixture"}) - write_status(status_path_for_entry(source_root, "kimi-k2.6"), status) + write_status(status_path_for_entry(source_root, "claude-code-kimi-k2.6"), status) result = subprocess.run( [
ModelStatusProfileReportProviderRerun locallyReason
{state}{profile}{report}{provider}{agent_engine}
{provider}
{rerun_command}{reason}