diff --git a/src/main.js b/src/main.js index 248b8fc..abf9fb2 100644 --- a/src/main.js +++ b/src/main.js @@ -599,12 +599,62 @@ function showGuardianRecovery() {
${statusIcon('warn', 16)} Gateway 反复启动失败,可能配置有误 - - - 服务管理 + + 查看日志
` + banner.querySelector('#btn-gw-recover-fix')?.addEventListener('click', async (e) => { + const btn = e.target + btn.disabled = true + btn.textContent = '修复中...' + // 弹出修复弹窗 + const overlay = document.createElement('div') + overlay.className = 'modal-overlay' + overlay.innerHTML = ` + + ` + document.body.appendChild(overlay) + const logEl = overlay.querySelector('#fix-log') + const statusEl = overlay.querySelector('#fix-status') + const closeBtn = overlay.querySelector('#fix-close') + closeBtn.onclick = () => overlay.remove() + + try { + const result = await api.doctorFix() + const output = result?.stdout || result?.output || JSON.stringify(result, null, 2) + logEl.textContent = output || '✅ 修复完成(无输出)' + logEl.scrollTop = logEl.scrollHeight + if (result?.errors) { + statusEl.innerHTML = `⚠ 修复完成,但有警告:${escapeHtml(String(result.errors).slice(0, 200))}` + } else { + statusEl.innerHTML = '✅ 修复完成,正在重启 Gateway...' + resetAutoRestart() + try { + await api.startService('ai.openclaw.gateway') + statusEl.innerHTML = '✅ 修复完成,Gateway 已重启' + } catch { + statusEl.innerHTML = '✅ 修复完成,但 Gateway 启动失败,请手动检查' + } + } + } catch (err) { + logEl.textContent += '\n❌ ' + (err.message || String(err)) + statusEl.innerHTML = `❌ 修复失败:${escapeHtml(String(err.message || err).slice(0, 200))}` + } + closeBtn.style.display = '' + btn.textContent = '一键修复' + btn.disabled = false + }) banner.querySelector('#btn-gw-recover-restart')?.addEventListener('click', async (e) => { const btn = e.target btn.disabled = true @@ -618,9 +668,6 @@ function showGuardianRecovery() { btn.disabled = false } }) - banner.querySelector('#btn-gw-recover-backup')?.addEventListener('click', () => { - navigate('/services') - }) } // === 全局版本更新检测 ===