fix: 实现 Agent 修复验证闭环
This commit is contained in:
+40
-10
@@ -712,21 +712,51 @@ async function resolveApproval(event, approved) {
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ approval_id: event.approval_id, approved }),
|
||||
})
|
||||
const result = await resp.json()
|
||||
if (!resp.ok) throw new Error(result.detail || `HTTP ${resp.status}`)
|
||||
event.resolved = true
|
||||
event.approvalSuccess = approved && result.returncode === 0
|
||||
if (!approved) {
|
||||
event.approvalResult = '已拒绝执行该命令'
|
||||
} else {
|
||||
event.approvalResult = result.returncode === 0 ? '命令执行成功' : `命令执行失败:${result.stderr || result.returncode}`
|
||||
agentEvents.value.push({ type: 'result', ...result })
|
||||
if (!resp.ok) {
|
||||
const error = await resp.json()
|
||||
throw new Error(error.detail || `HTTP ${resp.status}`)
|
||||
}
|
||||
ElMessage[approved && result.returncode === 0 ? 'success' : 'info'](event.approvalResult)
|
||||
|
||||
if (!approved) {
|
||||
const result = await resp.json()
|
||||
event.resolved = true
|
||||
event.approvalSuccess = false
|
||||
event.approvalResult = '已拒绝执行该命令'
|
||||
ElMessage.info(event.approvalResult)
|
||||
return
|
||||
}
|
||||
|
||||
if (!resp.body) throw new Error('审批接口未返回流式响应')
|
||||
event.resolved = true
|
||||
agentRunning.value = true
|
||||
const reader = resp.body.getReader()
|
||||
const decoder = new TextDecoder()
|
||||
let buffer = ''
|
||||
while (true) {
|
||||
const { done, value } = await reader.read()
|
||||
if (done) break
|
||||
buffer += decoder.decode(value, { stream: true })
|
||||
const lines = buffer.split('\n')
|
||||
buffer = lines.pop() || ''
|
||||
for (const line of lines) {
|
||||
if (!line.startsWith('data: ')) continue
|
||||
const nextEvent = JSON.parse(line.slice(6))
|
||||
if (nextEvent.type === 'approved_result') {
|
||||
event.approvalSuccess = nextEvent.returncode === 0
|
||||
event.approvalResult = nextEvent.returncode === 0 ? '命令执行成功,Agent 继续诊断中' : `命令执行失败:${nextEvent.stderr || nextEvent.returncode}`
|
||||
agentEvents.value.push({ type: 'result', ...nextEvent })
|
||||
} else if (!['start', 'done'].includes(nextEvent.type)) {
|
||||
agentEvents.value.push(nextEvent)
|
||||
if (nextEvent.type === 'error') ElMessage.error(nextEvent.message)
|
||||
}
|
||||
}
|
||||
}
|
||||
ElMessage.success('审批命令已执行,Agent 已继续诊断')
|
||||
} catch (e) {
|
||||
ElMessage.error('审批处理失败: ' + e.message)
|
||||
} finally {
|
||||
event.executing = false
|
||||
agentRunning.value = false
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user