60 lines
1.6 KiB
Python
60 lines
1.6 KiB
Python
"""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()
|