67 lines
2.7 KiB
Python
67 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
||
"""dispatch-agent-task CLI:装配见 muse.flow.dispatch,执行见 runtime。"""
|
||
|
||
from __future__ import annotations
|
||
|
||
import argparse
|
||
import json
|
||
import sys
|
||
from pathlib import Path
|
||
|
||
PROJECT_ROOT = next(
|
||
parent
|
||
for parent in (Path(__file__).resolve().parent, *Path(__file__).resolve().parents)
|
||
if (parent / "AGENTS.md").is_file() and (parent / ".git").exists()
|
||
)
|
||
if str(PROJECT_ROOT) not in sys.path:
|
||
sys.path.insert(0, str(PROJECT_ROOT))
|
||
|
||
from framework.adapters.pi.runner import DEFAULT_PI_BIN, ExecutionPolicy # noqa: E402
|
||
from muse.flow.dispatch import ( # noqa: E402
|
||
DEFAULT_RUN_DIR_ROOT,
|
||
EXIT_EVIDENCE_FAILED,
|
||
EXIT_FRAMEWORK_FAILED,
|
||
EXIT_OK,
|
||
EXIT_OUTPUT_INVALID,
|
||
EXIT_SPEC_INVALID,
|
||
run_dispatch,
|
||
)
|
||
|
||
|
||
def main(argv: list[str] | None = None) -> int:
|
||
parser = argparse.ArgumentParser(description="把冻结任务包派发给 Agent 框架子代理并自动留痕")
|
||
parser.add_argument("--spec", required=True, help="AgentTaskSpec JSON 文件路径")
|
||
parser.add_argument("--provider", required=True, help="显式框架 provider")
|
||
parser.add_argument("--model", required=True, help="显式框架模型")
|
||
parser.add_argument("--thinking", default=None, help="思考等级 off/low/medium/high")
|
||
parser.add_argument("--pi-bin", default=DEFAULT_PI_BIN, help="框架二进制(默认 pi)")
|
||
parser.add_argument("--repo-root", default=".", help="仓库根(解析 .agent/agents 角色文件)")
|
||
parser.add_argument("--run-id", default=None, help="指定 run_id(默认自动生成)")
|
||
parser.add_argument("--run-dir", default=None, help="运行目录(默认 /tmp/muse-agent-runs/<run_id>)")
|
||
parser.add_argument("--trigger-source", default="user", choices=["user", "replay_eval", "diagnostic"])
|
||
parser.add_argument("--session-id", default=None, help="框架会话 ID(复用=继续原会话,缺省=一次性会话)")
|
||
parser.add_argument("--session-dir", default=None, help="框架会话目录(与 --session-id 同给)")
|
||
parser.add_argument("--enable-read-tools", action="store_true", help="启用只读探索工具 server")
|
||
args = parser.parse_args(argv)
|
||
|
||
policy = ExecutionPolicy(
|
||
provider=args.provider, model=args.model, thinking=args.thinking, pi_bin=args.pi_bin
|
||
)
|
||
receipt, code = run_dispatch(
|
||
args.spec,
|
||
repo_root=args.repo_root,
|
||
policy=policy,
|
||
run_id=args.run_id,
|
||
run_dir=args.run_dir,
|
||
trigger_source=args.trigger_source,
|
||
session_id=args.session_id,
|
||
session_dir=args.session_dir,
|
||
enable_read_tools=args.enable_read_tools,
|
||
)
|
||
print(json.dumps(receipt, ensure_ascii=False, indent=2))
|
||
return code
|
||
|
||
|
||
if __name__ == "__main__":
|
||
raise SystemExit(main())
|