#!/usr/bin/env python3 """ Run Terminal-Bench tasks locally with Apptainer and claw-code-agent. This runner is designed for cluster setups where Docker is unavailable but Apptainer is available and the model server runs on the same node. """ from __future__ import annotations import argparse import fnmatch import json import os import re import shlex import shutil import subprocess import sys import time import tomllib from dataclasses import asdict, dataclass, field from pathlib import Path from typing import Any DEFAULT_TASKS_DIR = Path.home() / ".cache/harbor/tasks/packages/terminal-bench" DEFAULT_JOBS_DIR = Path("jobs/terminal_bench_local") @dataclass class TerminalBenchTask: task_dir: Path name: str short_name: str instruction: str docker_image: str | None agent_timeout_sec: float | None verifier_timeout_sec: float workdir: str has_docker_compose: bool raw_config: dict[str, Any] = field(default_factory=dict) @dataclass class LocalTrialResult: task_name: str short_name: str passed: bool reward: float | None duration_sec: float status: str image: str | None workdir: str trial_dir: str error: str = "" agent_return_code: int | None = None verifier_return_code: int | None = None metadata: dict[str, Any] = field(default_factory=dict) def _load_toml(path: Path) -> dict[str, Any]: return tomllib.loads(path.read_text(encoding="utf-8")) def strip_canary(text: str) -> str: lines = text.splitlines() index = 0 while index < len(lines): stripped = lines[index].strip() if stripped.startswith("