feat(v3): T28 操作审批流(dsh 式 allow-once/deny,fail-closed)
- ToolLoop 增 approval_hook:工具执行前挂起等待用户裁决,拒绝/异常折叠为
失败结果回喂模型(可改道),fail-closed
- 策略 agent.approval_policy:off | dangerous(写/编辑/命令询问,只读放行,默认)| all;
approval_timeout_s 超时自动拒绝(轮询实现,规避 portal 循环下 wait_for 定时器不可靠)
- POST /agent/{id}/approve 裁决端点;approval_request/decided 事件对进 SSE 与审计
- 前端:运行中审批卡(工具名+参数预览+拒绝/允许一次),composer 审批策略 chip
- 测试 +8(策略矩阵/拒绝回喂/允许执行/fail-closed/超时/端点分支),全量 289 passed
This commit is contained in:
@@ -312,6 +312,7 @@ export async function listPoolModels(id: string) {
|
||||
|
||||
export interface AgentEvent {
|
||||
type: 'round' | 'tool_call' | 'tool_result' | 'usage' | 'final' | 'phase' | 'message'
|
||||
| 'approval_request' | 'approval_decided' | 'delta'
|
||||
ts?: number
|
||||
round?: number
|
||||
name?: string
|
||||
@@ -328,6 +329,19 @@ export interface AgentEvent {
|
||||
model?: string
|
||||
role?: 'planner' | 'executor'
|
||||
content?: string
|
||||
// 审批(D9)/ 流式(D10)
|
||||
id?: string
|
||||
policy?: string
|
||||
allowed?: boolean
|
||||
note?: string
|
||||
text?: string
|
||||
}
|
||||
|
||||
/** POST /agent/{id}/approve:裁决待审批操作(dsh 式 allow-once / deny) */
|
||||
export async function approveAgent(requestId: string, approvalId: string, allowed: boolean) {
|
||||
const { data } = await http.post<{ ok: boolean }>(`/agent/${requestId}/approve`,
|
||||
{ approval_id: approvalId, allowed })
|
||||
return data
|
||||
}
|
||||
|
||||
export interface AgentStatus {
|
||||
|
||||
Reference in New Issue
Block a user