| 640 | |
| 641 | |
| 642 | def run_review_plan(request_id: str, approve: bool, feedback: str = "") -> str: |
| 643 | state = pending_requests.get(request_id) |
| 644 | if not state: |
| 645 | return f"Request {request_id} not found" |
| 646 | if state.status != "pending": |
| 647 | return f"Request {request_id} already {state.status}" |
| 648 | state.status = "approved" if approve else "rejected" |
| 649 | BUS.send("lead", state.sender, feedback or ("Approved" if approve else "Rejected"), |
| 650 | "plan_approval_response", |
| 651 | {"request_id": request_id, "approve": approve}) |
| 652 | icon = "✓" if approve else "✗" |
| 653 | print(f" \033[32m[protocol] plan {icon} ({request_id})\033[0m") |
| 654 | return f"Plan {'approved' if approve else 'rejected'} ({request_id})" |
| 655 | |
| 656 | |
| 657 | # ── Other Lead Tool Handlers ── |