fix: 实现 Agent 修复验证闭环

This commit is contained in:
cnbugs
2026-07-25 13:10:21 +08:00
parent 47abfef238
commit f2254646c1
6 changed files with 264 additions and 30 deletions
+40 -10
View File
@@ -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
}
}