"""CLI entry for Beaver.""" try: import typer except ModuleNotFoundError: # pragma: no cover - fallback for skeleton-only environments class _FallbackTyper: def __init__(self, *_args, **_kwargs) -> None: pass def command(self): def decorator(func): return func return decorator def __call__(self) -> None: raise RuntimeError("typer is not installed") @staticmethod def echo(message: str) -> None: print(message) @staticmethod def Option(default=None, *_args, **_kwargs): return default typer = _FallbackTyper() # type: ignore[assignment] from beaver.services.agent_service import AgentService app = typer.Typer(help="Beaver backend CLI") if hasattr(typer, "Typer") else typer @app.command() def run( message: str | None = typer.Option(None, "--message", "-m", help="Run one direct Beaver request."), workspace: str | None = typer.Option(None, "--workspace", help="Workspace root for this run."), ) -> None: """Thin CLI wrapper around AgentService. CLI 现在不再自己维护执行逻辑,只负责: 1. 解析命令行参数 2. 调 AgentService 3. 打印结果 """ service = AgentService(workspace=workspace) if not message: service.create_loop() typer.echo("Beaver engine booted.") return result = service.run_direct(message, source="cli") typer.echo(result.output_text) def main() -> None: """Project script entrypoint.""" app()