44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
"""CLI: python -m deep_research --backend {codex|antigravity} "<질문>" [--json]"""
|
|
import argparse
|
|
import asyncio
|
|
import shutil
|
|
import sys
|
|
from deep_research.config import DEFAULT
|
|
from deep_research.pipeline import run_research
|
|
from deep_research.report import to_markdown, to_json
|
|
|
|
|
|
def _make_backend(name: str):
|
|
if name == "codex":
|
|
if shutil.which("codex") is None:
|
|
sys.exit("error: `codex` CLI not found on PATH. Install + login (subscription).")
|
|
from deep_research.backends.codex import CodexBackend
|
|
return CodexBackend()
|
|
if name == "antigravity":
|
|
if shutil.which("agy") is None:
|
|
sys.exit("error: `agy` CLI not found on PATH. Install + login (subscription).")
|
|
from deep_research.backends.antigravity import AntigravityBackend
|
|
return AntigravityBackend(retries=DEFAULT.ANTIGRAVITY_RETRIES)
|
|
sys.exit(f"error: unknown backend '{name}'")
|
|
|
|
|
|
def main(argv=None):
|
|
ap = argparse.ArgumentParser(prog="deep-research")
|
|
ap.add_argument("question")
|
|
ap.add_argument("--backend", required=True, choices=["codex", "antigravity"])
|
|
ap.add_argument("--json", action="store_true", help="emit raw JSON instead of markdown")
|
|
ap.add_argument("--concurrency", type=int, default=DEFAULT.CONCURRENCY)
|
|
args = ap.parse_args(argv)
|
|
|
|
if args.concurrency < 1:
|
|
sys.exit("error: --concurrency must be >= 1")
|
|
|
|
backend = _make_backend(args.backend)
|
|
cfg = DEFAULT.__class__(CONCURRENCY=args.concurrency)
|
|
result = asyncio.run(run_research(args.question, backend, config=cfg))
|
|
print(to_json(result) if args.json else to_markdown(result))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|