pending_approval, cuộc gọi tool của
agent được giữ thay vì dispatch — nó giờ đang chờ một con người. Trang này
dành cho người duyệt: cách phê duyệt cuộc gọi tool agent được giữ (hoặc từ
chối chúng) từ console, hàng đợi cho bạn thấy gì, và cách OrcaRouter ngăn hai
người duyệt va chạm trên cùng một quyết định.
Đây là nửa phân giải của con-người-trong-vòng-lặp. Để biết tại sao một cuộc
gọi được giữ và cách agent được giữ gửi lại sau đó, xem
verdict và
tham chiếu phê duyệt sâu hơn. Để phân giải
từ hệ thống của riêng bạn thay vì console, xem
webhook phê duyệt.
1. Vòng đời cuộc-gọi-được-giữ, từ chỗ ngồi của một người duyệt
Một cuộc gọi được giữ là một vòng lặp ngắn ngoài luồng. Việc của bạn là bước giữa:Cuộc gọi được giữ
Một quy tắc phân giải về
pending_approval. Relay trả về HTTP 400 với
mã firewall_approval_pending và một approval id; cuộc gọi không bao giờ
đến được tool. Agent bắt đầu poll trên id đó.Bạn phân giải nó
Bạn mở hàng đợi Approvals, đọc tại sao cuộc gọi được giữ, và phê
duyệt hoặc từ chối nó — trọng tâm của trang này.
Phân giải một lần giữ được giới hạn ở Developer+ — cùng cổng với feed
Events của firewall. Các vai trò thấp hơn có thể đọc chính sách firewall, cài
đặt, và discovered tools, nhưng chỉ các vai trò Developer-trở-lên mới có thể
liệt kê hàng đợi phê duyệt hoặc phê duyệt/từ chối một cuộc gọi tool được giữ.
Xem vai trò và phạm vi.
2. Liệt kê hàng đợi pending
Tab Approvals đọcGET /api/workspace/firewall/approvals. Không có filter nó
trả về hàng đợi pending, cũ nhất trước — nên cuộc gọi chờ-lâu-nhất nằm
trên đỉnh và bạn xử lý backlog theo thứ tự.
state là filter duy nhất quan trọng. Các giá trị ánh xạ tới vòng đời của phê
duyệt:
state | Phê duyệt trả về |
|---|---|
pending (mặc định) | Được giữ, chờ một quyết định — hàng đợi công việc của bạn. |
approved | Đã được cho qua. |
rejected | Đã bị block. |
3. Đọc tại sao cuộc gọi được giữ
Mỗi dòng mang các đầu vào quyết định mà một người duyệt cần — tên tool (tool_name), một dấu vân tay đối số (args_hash, SHA-256 của các đối số
cuộc gọi đã chuẩn hóa — các giá trị đối số thô không được lưu trong phê duyệt),
request id, và một dòng xuất xứ tiếng-Anh-thuần nêu tên chính sách, quy
tắc, và mệnh đề đã kích hoạt:
policy_name — chính sách nào giữ nó
policy_name — chính sách nào giữ nó
Chính sách có tên mà quy tắc đã khớp thuộc về, được phân giải theo phạm vi
workspace nên một id cũ không bao giờ có thể làm hiện tên chính sách của
một tenant khác.
rule_label + matched_clause — lý do của con người
rule_label + matched_clause — lý do của con người
Nhãn của quy tắc và một mô tả “tại sao” một dòng — vd:
command contains rm -rf, hoặc tool matches "http_fetch" cho một quy tắc
chỉ-glob. Cái này render dòng “Held because…” trong hàng đợi.rule_changed — xuất xứ bạn có thể tin
rule_changed — xuất xứ bạn có thể tin
true khi quy tắc đã khớp được chỉnh sửa tại hoặc sau khi phê duyệt
này được tạo. Nhãn và mệnh đề live khi đó bị nén lại (chúng có thể không
còn phản ánh cái thực sự giữ cuộc gọi), và hàng đợi hiển thị một ghi chú
“rule since changed” thay vì xuất xứ cũ. Tên tool và đối số — các đầu vào
quyết định thật — luôn được hiển thị.4. Phê duyệt hoặc từ chối
Phân giải gửiPATCH /api/workspace/firewall/approvals/:id với một decision
là approved hoặc rejected và một reason tùy chọn. Console làm điều này
cho bạn khi bạn nhấp nút; hình dạng là:
approved→ cuộc gọi được giữ có thể tiến hành. Lần gửi lại kế tiếp của agent, mang approval header dùng-một-lần, được cho qua một lần.rejected→ cuộc gọi vẫn bị block. Agent thấy sự từ chối và có thể chọn một đường khác, hỏi người dùng, hoặc dừng.
decision được kiểm tra với tập đóng {approved, rejected} — bất cứ thứ gì
khác bị từ chối. reason được ghi lại cùng quyết định và viết vào audit log
firewall bên cạnh actor, tên tool, và request id.
Mỗi lần phân giải ghi một dòng audit workspace nêu tên ai đã quyết định,
quyết định, và lý do. Các lần phân giải console ghi lại actor con người; các
lần phân giải webhook ghi lại một
actor hệ thống. Xuất xứ phân giải không bao giờ bị âm thầm bỏ.
5. First-writer-wins: không phân giải kép
Một phê duyệt pending có thể bị race — hai người duyệt trong console, hoặc một cú nhấp console và một webhook callback đến cùng lúc. OrcaRouter giải quyết điều này với một quy tắc first-writer-wins duy nhất:- Quyết định là một cập nhật có điều kiện atomic chỉ kích hoạt trong khi
phê duyệt vẫn là
pending. Người viết đầu tiên thắng và áp dụng quyết định. - Mọi người viết sau quan sát “đã phân giải” và được xử lý như một no-op idempotent — nó nhận HTTP 200 với tài liệu đã-phân-giải, không phải một lỗi.
resolved: true nghĩa là cuộc gọi của bạn đã áp dụng quyết định;
already_resolved: true nghĩa là ai đó (hoặc một webhook nào đó) đã đến trước
và bạn đang thấy kết cục của họ. Dù cách nào hàng đợi đối chiếu về một trạng
thái nhất quán.
6. Một lượt cụ thể qua hàng đợi
Một workspace balanced-autonomy giữ một cuộc gọishell.exec của agent vì một
quy tắc khớp command contains rm -rf. Là người duyệt bạn:
- Mở Approvals —
shell.execđược giữ nằm trên đỉnh của danh sáchpendingcũ-nhất-trước. - Đọc dòng: tool
shell.exec, dấu vân tayargs_hash, request id, và dòng “Held because…command contains rm -rf” (render từ mệnh đề của quy tắc đã khớp). Không có cờrule_changed, nên xuất xứ là hiện hành. - Đích là một thư mục scratch, nên bạn phê duyệt với một lý do.
PATCHcủa bạn trả vềresolved: true; lần poll kế tiếp của agent thấyapproved, gửi lại với header dùng-một-lần của nó, và lệnh chạy đúng một lần.
already_resolved: true với quyết định của họ — không hại, không chạy-kép.
Đi đâu tiếp theo
Tham chiếu phê duyệt
Toàn bộ vòng lặp HITL: giữ, poll, gửi lại, và header dùng-một-lần.
Webhook phê duyệt
Phân giải các lần giữ từ hệ thống của riêng bạn với một callback ký HMAC.
Verdict
Nơi pending_approval nằm giữa sáu verdict firewall.
Events log
Xác nhận kết cục hạ nguồn của một cuộc gọi đã phân giải trong feed.
