Skip to content

fix(console): 设置/关于本机不再随 3s 轮询重建(修复下拉弹回、配置改不动) - #79

Open
Windsander wants to merge 1 commit into
mainfrom
fix/console-settings-rerender
Open

Windsander wants to merge 1 commit into
mainfrom
fix/console-settings-rerender

Conversation

@Windsander

Copy link
Copy Markdown
Owner

问题

packages/console/console.jsrender() 每 3s 轮询一次;设置弹窗打开时调用 renderSettings()、关于本机打开时调用 renderAbout(),每次都整体重建 #settings-body / #about-body 的 DOM(innerHTML)。

后果:

  • 「Agent 怎么连我」卡片里的原生 <select>mcp.http.auth 鉴权模式)展开后一两秒被销毁弹回,选择丢失,用户感觉“配置无法生效”。
  • 「关于本机」每次轮询重建会冲掉滚动位置与文本选择。

修复点

  • renderSettings / renderAbout 增加内容签名跳过:签名覆盖各自渲染依赖(activeTab/settingsTabstate.settingsstate.rawConfigstate.features.writesstate.healthz、本机 deviceId);签名未变且容器已有内容时不重建 DOM。
  • 撤销(reset)与保存(save)后显式失效签名lastSettingsSignature = null)再 renderSettings(),避免签名未变被跳过导致“撤销无效”。
  • 保留既有 state.cfgDraft 草稿与焦点/光标恢复行为不变。

验证证据

  • npm test:119 suites / 845 tests 全通过。
  • npm run lint:0 错误。
  • npm run check:cleanliness:0 错误 / 0 警告(孤儿 0)。
  • node packages/console/scripts/verify-console-ui.mjs19/19 通过(新增 6 项回归)。
    • 跨 3s 轮询设置容器与 auth 下拉节点引用不变(DOM 未重建)。
    • 修改 mcp.http.auth 下拉后跨轮询值保持;点「撤销」后回到原值;全程不保存。
    • 反证:临时回退 console.js 修复后,上述 DOM 引用断言 2 项失败,确认回归可捕获该缺陷。

影响面

  • 仅前端渲染路径:设置/关于本机弹窗不再周期性重建 DOM;当内容依赖变化(设置/健康检查/配置更新、切换 Tab、撤销/保存)时仍会正常重建。
  • 未改动 packages/fleet、CI workflow、根 package.json,无新增脚本/依赖。
  • 真实 ~/.mebular 节点配置未触碰,全部验证使用临时 MEBULAR_HOME

问题:设置弹窗打开时 render() 每 3s 全量重建 #settings-body DOM,原生
<select> 弹层被销毁 → 下拉一两秒就弹回、选择丢失(像是配置无法生效);
「关于本机」同样每次重建会冲掉滚动位置与文本选择。

修复:
- renderSettings / renderAbout 增加内容签名跳过(activeTab + settings +
  rawConfig + writes + healthz + deviceId);签名未变且容器已有内容时不重建
- 撤销/保存后显式失效签名(lastSettingsSignature=null),确保强制刷新到最新值
- 保留既有 cfgDraft 草稿与焦点/光标恢复逻辑

回归(packages/console/scripts/verify-console-ui.mjs):
- 跨 3s 轮询设置容器与 auth 下拉节点引用不变(DOM 未重建)
- 修改 mcp.http.auth 后跨轮询保持;撤销复位;全程不保存

验证:npm test 845/845、npm run lint、npm run check:cleanliness 0-0、
UI 冒烟 19/19(修复前该回归 2 项失败)。

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant