# /// script # requires-python = ">=3.14" # dependencies = [ # "pydantic-ai-slim[openai,openrouter,bedrock,logfire,web]>=1.98.0", # "openai>=2.29.0", # "pydantic-ai-harness[code-mode]>=0.2.0", # "pydantic-ai-backend>=0.2.6", # "pydantic-ai-skills>=0.10.0", # "pyyaml>=6.0", # "uvicorn>=0.34.0", # ] # /// """ main.py — autopilot entry point Usage: uv run main.py # run the diagnose agent on a GitHub issue uv run main.py # start the chat agent web UI at http://127.0.0.1:7932 The diagnose agent reads the diagnosis issue created by auto-diagnose.yml, investigates the failed workflow, and posts a diagnosis report comment. The chat agent provides an interactive web interface for developing and debugging autopilot skills and capabilities. """ from __future__ import annotations import argparse import asyncio import logfire import uvicorn from pydantic_ai_backends import LocalBackend from agent import chat_agent, diagnose_agent from capabilities.fs import AgentDeps def _run_web() -> None: logfire.configure(send_to_logfire="if-token-present") logfire.instrument_pydantic_ai() app = chat_agent.to_web(deps=AgentDeps(backend=LocalBackend("/"))) print("Starting chat agent at http://127.0.0.1:7932") uvicorn.run(app, host="127.0.0.1", port=7932) async def _run_diagnose(issue_number: int) -> None: logfire.configure(send_to_logfire="if-token-present") logfire.instrument_pydantic_ai() result = await diagnose_agent.run( f"issue_number={issue_number}\n\nDiagnose the workflow failure recorded in this issue.", deps=AgentDeps(backend=LocalBackend("/"), issue_number=issue_number), ) print(result.output) if __name__ == "__main__": parser = argparse.ArgumentParser(description="Autopilot: diagnose agent or chat UI") parser.add_argument( "issue_number", nargs="?", type=int, help="GitHub issue number (omit to start the chat web UI)", ) args = parser.parse_args() if args.issue_number is not None: asyncio.run(_run_diagnose(args.issue_number)) else: _run_web()