#!/usr/bin/env python3 from __future__ import annotations import argparse import json import subprocess import sys def main() -> int: parser = argparse.ArgumentParser(description="Run opencode once via Python subprocess") parser.add_argument("--model", required=True) parser.add_argument("--agent", required=True) parser.add_argument("--cwd", required=False) parser.add_argument("--timeout-sec", type=int, default=600) parser.add_argument("--prompt", required=True) args = parser.parse_args() command = [ "opencode", "run", args.prompt, "--model", args.model, "--agent", args.agent, ] try: completed = subprocess.run( command, cwd=args.cwd or None, capture_output=True, text=True, timeout=max(1, int(args.timeout_sec)), check=False, ) payload = { "ok": completed.returncode == 0, "returncode": completed.returncode, "stdout": completed.stdout, "stderr": completed.stderr, "timeout": False, } except subprocess.TimeoutExpired as exc: payload = { "ok": False, "returncode": 124, "stdout": ( exc.stdout.decode() if isinstance(exc.stdout, bytes) else (exc.stdout or "") ), "stderr": ( exc.stderr.decode() if isinstance(exc.stderr, bytes) else (exc.stderr or "") ), "timeout": True, } sys.stdout.write(json.dumps(payload)) return 0 if __name__ == "__main__": raise SystemExit(main())