fix: sidebar menu not updating after engine switch + dashboard loading skeleton

1. engine-manager: activateEngine 切换时调用 engine.boot() 检测状态
2. main.js: onEngineChange 监听器重绑 state/ready 回调,确保新引擎
   状态变化时侧边栏自动刷新
3. Hermes 仪表盘: loading 期间显示骨架屏动画,消除空白等待
4. components.css: 新增 .skeleton-line 通用骨架行样式
This commit is contained in:
晴天
2026-04-13 11:08:55 +08:00
parent c02cb8e659
commit 549801e007
4 changed files with 63 additions and 6 deletions

View File

@@ -370,6 +370,28 @@ async function boot() {
}).catch(() => {})
: Promise.resolve()
// --- 引擎状态监听管理 ---
let _engineStateUnsub = null
let _engineReadyUnsub = null
function bindEngineListeners(engine) {
// 清理旧监听
if (_engineStateUnsub) { _engineStateUnsub(); _engineStateUnsub = null }
if (_engineReadyUnsub) { _engineReadyUnsub(); _engineReadyUnsub = null }
// 注册新监听
if (engine.onStateChange) {
_engineStateUnsub = engine.onStateChange(() => renderSidebar(sidebar))
}
if (engine.onReadyChange) {
_engineReadyUnsub = engine.onReadyChange(() => renderSidebar(sidebar))
}
}
// 引擎切换时:重新绑定状态监听 + 刷新侧边栏
onEngineChange((engine) => {
bindEngineListeners(engine)
renderSidebar(sidebar)
})
ensureWebSession.then(() => getActiveEngineId() === 'openclaw' ? loadActiveInstance() : Promise.resolve()).then(async () => {
const engine = getActiveEngine()
if (!engine) return
@@ -381,12 +403,7 @@ async function boot() {
renderSidebar(sidebar)
// 监听引擎状态变化(如 setup 完成后 ready 变为 true自动刷新侧边栏
if (engine.onStateChange) {
engine.onStateChange(() => renderSidebar(sidebar))
}
if (engine.onReadyChange) {
engine.onReadyChange(() => renderSidebar(sidebar))
}
bindEngineListeners(engine)
if (!engine.isReady()) {
setDefaultRoute(engine.getSetupRoute())