#!/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())