| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #!/usr/bin/env python
- """
- 薄 CLI 脚本:透传命令行参数到 cyber-agent 的 invoke_agent() SDK。
- 远端 / 本地由 agent_type 前缀决定,同步返回 JSON 到 stdout。
- """
- import argparse
- import asyncio
- import json
- import sys
- from pathlib import Path
- from agent import invoke_agent
- # skill 目录本身包含共享 config.py,作为未显式传 --project_root 时的默认锚点。
- _SKILL_DIR = str(Path(__file__).resolve().parent)
- def main() -> int:
- parser = argparse.ArgumentParser(description="调用 Agent(远端或本地)")
- parser.add_argument("--agent_type", required=True,
- help="Agent 类型。'remote_' 前缀走 KnowHub 服务器;否则本地执行")
- parser.add_argument("--task", required=True, help="任务描述")
- parser.add_argument("--skills", default=None,
- help="逗号分隔的 skill 列表(如 ask_strategy,upload_strategy)")
- parser.add_argument("--continue_from", default=None,
- help="已有 sub_trace_id,传入则续跑")
- parser.add_argument("--messages", default=None,
- help="预置消息(JSON 数组字符串,OpenAI 格式)")
- parser.add_argument("--project_root", default=None,
- help="本地 agent 可选——项目目录(含 config.py)。"
- "不传则使用 skill 目录自带的共享 config.py")
- args = parser.parse_args()
- skills = [s.strip() for s in args.skills.split(",") if s.strip()] if args.skills else None
- messages = json.loads(args.messages) if args.messages else None
- # 本地 agent 且未显式指定项目 → 回落到 skill 自带的 config.py。
- # 远端 agent(remote_ 前缀)无视 project_root,不影响。
- project_root = args.project_root or _SKILL_DIR
- result = asyncio.run(invoke_agent(
- agent_type=args.agent_type,
- task=args.task,
- skills=skills,
- continue_from=args.continue_from,
- messages=messages,
- project_root=project_root,
- ))
- print(json.dumps(result, ensure_ascii=False, indent=2))
- return 0 if result.get("status") == "completed" else 1
- if __name__ == "__main__":
- sys.exit(main())
|