#!/usr/bin/env python3 """Run a customer prompt through the unified Kaiju harness router.""" from __future__ import annotations import argparse import os import sys from pathlib import Path ROOT = Path(__file__).resolve().parents[1] sys.path.insert(0, str(ROOT)) from kaiju_harness.router import result_to_json, run_task def main() -> int: parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--prompt", required=True) parser.add_argument("--out-dir", type=Path, default=Path.cwd() / "kaiju-runs") parser.add_argument("--repo", type=Path, default=None) parser.add_argument( "--kind", default="auto", choices=["auto", "website", "business_document", "business_suite", "app", "code_project", "repo_patch", "coding"], ) parser.add_argument( "--openai-base-url", default=os.environ.get("KAIJU_OPENAI_BASE_URL"), help="Optional OpenAI-compatible endpoint for compact spec planning.", ) parser.add_argument("--model", default=os.environ.get("KAIJU_MODEL"), help="Model name for OpenAI-compatible spec planning.") parser.add_argument("--api-key-env", default="KAIJU_EVAL_API_KEY") parser.add_argument("--planner-timeout", type=int, default=90) parser.add_argument("--no-planner", action="store_true", help="Skip model spec planning and use deterministic rendering.") parser.add_argument("--print-manifest", action="store_true") args = parser.parse_args() openai_base_url = None if args.no_planner else args.openai_base_url model = None if args.no_planner else args.model result = run_task( args.prompt, args.out_dir, repo=args.repo, kind=args.kind, openai_base_url=openai_base_url, model=model, api_key_env=args.api_key_env, planner_timeout=args.planner_timeout, ) if args.print_manifest: print(result_to_json(result)) if result.errors: raise SystemExit("; ".join(result.errors)) print(f"Task type: {result.task_type}") print(f"Artifact type: {result.artifact_type}") print(f"Manifest: {result.manifest_path}") if result.artifact_path: print(f"Artifact: {result.artifact_path}") if result.project_dir: print(f"Project/repo: {result.project_dir}") print(f"Changed files: {len(result.changed_files)}") return 0 if __name__ == "__main__": raise SystemExit(main())