feat: P1 补齐(自动评审队列、自动化+分诊、并发 caps、运行时审批队列)
This commit is contained in:
1 parent
29efc6c61f
commit
e0cecd70aa
18 files changed
+3474
-27
No files matched your search
@@ -511,6 +511,18 @@ class Server:
|
||||
raise RuntimeError(f"thread/resume 失败: {resp}")
|
||||
return resp["result"]
|
||||
|
||||
def start_review(self, thread_id, target, timeout=600):
|
||||
# 协议 review/start:params 必填 threadId 与 target,
|
||||
# target 四种见 protocol v2 的 ReviewTarget(uncommitted
|
||||
# Changes / baseBranch / commit / custom);delivery 缺
|
||||
# 省即 inline,不发 detached(已废弃)。失败直接抛错,
|
||||
# 调用方不得把 error 响应当成功打印。
|
||||
params = {"threadId": thread_id, "target": target}
|
||||
resp = self.request("review/start", params, timeout=timeout)
|
||||
if not resp or "error" in resp:
|
||||
raise RuntimeError(f"review/start 失败: {resp}")
|
||||
return resp["result"]
|
||||
|
||||
def fork_thread(self, thread_id, cwd=None, sandbox=None):
|
||||
params = {"threadId": thread_id}
|
||||
if cwd:
|
||||
@@ -2012,6 +2024,13 @@ def main():
|
||||
p = sub.add_parser("archive"); p.add_argument("--task", required=True)
|
||||
p = sub.add_parser("fork"); p.add_argument("--task", required=True); p.add_argument("--name", required=True); p.add_argument("--sandbox", default=None)
|
||||
p = sub.add_parser("compact"); p.add_argument("--task", required=True)
|
||||
p = sub.add_parser("code-review"); p.add_argument("--task", required=True)
|
||||
p.add_argument("--base-branch", default=None,
|
||||
help="评审目标:与该分支的差异(baseBranch)")
|
||||
p.add_argument("--commit", default=None,
|
||||
help="评审目标:指定提交 sha(commit)")
|
||||
p.add_argument("--instructions", default=None,
|
||||
help="评审目标:自定义评审指令(custom)")
|
||||
p = sub.add_parser("run"); p.add_argument("--task", required=True); p.add_argument("--prompt", required=True)
|
||||
p = sub.add_parser("interrupt"); p.add_argument("--task", required=True)
|
||||
p = sub.add_parser("delegate")
|
||||
@@ -2460,6 +2479,34 @@ def main():
|
||||
resp = srv.request("thread/compact/start",
|
||||
{"threadId": t["thread_id"]}, timeout=120)
|
||||
print(f"compact {args.task}: {resp}")
|
||||
elif args.cmd == "code-review":
|
||||
# 注意命名:host.py 已有另一条线的 review 子命令
|
||||
# (PR 评审评论),本命令换名 code-review,不覆盖它。
|
||||
# 目标优先级:commit > instructions > base-branch >
|
||||
# 缺省 uncommittedChanges;与 cloud/review.py 的
|
||||
# build_review_target 同款组合,非法组合直接报错。
|
||||
# compact 同款原因先 resume 再 review(未加载的旧
|
||||
# thread 直接 review 会报 thread not found)。
|
||||
# app-server 返回 error 时只打印失败并以非零退出,
|
||||
# 绝不把失败结果当成评审结论。
|
||||
t = state["tasks"][args.task]
|
||||
if args.commit:
|
||||
target = {"type": "commit", "sha": args.commit}
|
||||
elif args.instructions:
|
||||
target = {"type": "custom",
|
||||
"instructions": args.instructions}
|
||||
elif args.base_branch:
|
||||
target = {"type": "baseBranch",
|
||||
"branch": args.base_branch}
|
||||
else:
|
||||
target = {"type": "uncommittedChanges"}
|
||||
try:
|
||||
srv.resume_thread(t["thread_id"])
|
||||
result = srv.start_review(t["thread_id"], target)
|
||||
except Exception as exc:
|
||||
print(f"code-review failed: {exc}")
|
||||
raise SystemExit(1)
|
||||
print(f"code-review {args.task}: {result}")
|
||||
elif args.cmd == "archive":
|
||||
t = state["tasks"][args.task]
|
||||
srv.archive_thread(t["thread_id"])
|
||||
|
||||
Reference in new issue
Block a user