Conversation
|
@1186258278 大佬,瞅一眼呗,提升下使用体验 |
|
@friendfish 感谢贡献 🙏 核心改动( 合并前有 1 个小问题需要清理: 需要修改
Review 重点(我会在合并前验证)
清理完 顺便我会在仓库 |
|
@1186258278 更新:已完成所有 Review 要求的改动,请查阅:
此 PR 目前已准备就绪,期待合入。感谢! |
本项目使用 npm / package-lock.json,防止贡献者用 pnpm 或 yarn 安装依赖时误提交 lock 文件(见 PR #232 的 review)。
1186258278
left a comment
There was a problem hiding this comment.
@friendfish 感谢第二轮响应 👍 pnpm-lock 已清理、en.json 也补了两个词条。不过我在 review src/pages/models.js 的时候发现还有几个比较重要的问题需要处理,按优先级列出来:
🔴 P0 - 必须修
1. 新 UI 里大量硬编码中文,非中文用户会看到一屏中文
PR body 里提到"补全了 en.json 缺失的词条",但 diff 里只加了 1 个 key(configure)。而新增的瀑布流编辑器里有 15+ 处硬编码中文。对比一下原代码(已正确 i18n 化)和新代码:
// ❌ 原代码(被替换掉了)——已 i18n
<div class="config-section-title">${t('models.currentConfig')}</div>
<span>${t('models.primaryModelLabel')}</span>
<span>${primary || t('models.notConfigured')}</span>
<span>${t('models.fallbackModels')}</span>
// ❌ 新代码(renderDefaultBar + renderFallbackWaterfall + bindWaterfallActions)
<span>系统主/备模型</span>
<span>${primary || '未配置'}</span>
<span>${fallbacks.length} 个备选</span>
<strong>💡 最佳实践:</strong> 建议备选模型保持在 <strong>2-3 款</strong> 并分布在不同服务商,以平衡可用性与延迟。
<div>当前生效链 (支持拖拽排序)</div>
<button>设为主用</button>
<button title="移除">
<div>尚未选择备选模型</div>
<div>可用候选池 (按服务商分组)</div>
<div>无可用候选模型</div>
<button>加入</button>
<button>取消</button>
<button>保存并应用</button>
toast(`已将 ${full} 设为主模型`, 'success')而且新加的 configure key 在整个 diff 里找不到使用位置,像是孤儿。
修改建议:把这些字符串都抽成 t('models.xxx'),并在 zh-CN.json / en.json 两个文件里都补齐翻译(其他 9 种语言我们后续会批量补)。项目 AGENTS.md 明确要求「新增翻译键时至少补充 zh-CN 和 en」。
大致需要新增的 key(仅供参考):
"systemPrimaryFallback": "系统主/备模型",
"fallbackCount": "{count} 个备选",
"bestPracticeHint": "建议备选模型保持在 2-3 款并分布在不同服务商,以平衡可用性与延迟。",
"activeChainTitle": "当前生效链(支持拖拽排序)",
"candidatePoolTitle": "可用候选池(按服务商分组)",
"setAsPrimary": "设为主用",
"removeFallback": "移除",
"addFallback": "加入",
"noFallbackSelected": "尚未选择备选模型",
"noCandidate": "无可用候选模型",
"promotedPrimary": "已将 {model} 设为主模型",
"saveAndApply": "保存并应用",
"cancelEditor": "取消"2. URL 正则被误改,中文错误提示的链接会抓错
做全角→半角标点批量替换时,误伤了一行正则:
- const detailHtml = detail.replace(/</g, '<').replace(/(https?:\/\/[^\s,,。;))'"&]+)/g, ...)
+ const detailHtml = detail.replace(/</g, '<').replace(/(https?:\/\/[^\s,,。;))'"&]+)/g, ...)这个正则是用来从中文错误消息里提取 URL 的。全角 ,。;) 是合法的 URL 终结符(中文错误后面经常直接跟全角标点,没空格分隔)。改成半角后,像 获取失败,详见 https://docs.example.com/。点此查看... 这样的消息里,URL 会把 。点此查看 也一起抓成链接。
修改建议:这一行完全回退,保留全角 ,。;)。
🟡 P1 - 强烈建议修
3. 大量无关 diff 噪声(全角→半角标点批量替换)
整个文件里有 150+ 行 diff 其实是注释/日志里的全角→半角标点替换,跟瀑布流功能改动完全无关:
- // 非阻塞:先返回 DOM,后台加载数据
+ // 非阻塞:先返回 DOM,后台加载数据
- console.log('[models] 自动修复了服务商 baseUrl,正在保存...')
+ console.log('[models] 自动修复了服务商 baseUrl,正在保存...')
- // 渲染服务商列表(渲染完后直接绑定事件)
+ // 渲染服务商列表(渲染完后直接绑定事件)这种纯格式化变更让 reviewer 很难聚焦真正的逻辑改动,并且是上面第 2 个 bug 的来源。应该是 IDE 的中文标点规范化功能自动干的。
修改建议:把这些不涉及功能的标点变更都回退。功能本身的净代码量大约 300 行左右,其他全是噪声。
4. src-tauri/gen/schemas/linux-schema.json 是生成文件,不应 commit
这个文件(+2606 行)是 tauri build 时在 Linux 平台上自动生成的 schema。仓库 main 分支从未 commit 过它:
$ git log main --oneline -- src-tauri/gen/schemas/linux-schema.json
(无输出)应该是你本地 build 时自动生成、然后连带提交的。
修改建议:
git rm src-tauri/gen/schemas/linux-schema.json
git commit --amend --no-edit
git push -f我这边会在 main 的 .gitignore 里加上 src-tauri/gen/schemas/linux-schema.json 防止以后再误提(其他平台的 schema 历史原因已经 track 了,暂不动)。
5. 保存策略和 PR 描述不一致,改动容易静默丢失
你在 PR 评论里提到:
确认拖拽排序后,通过
doAutoSave逻辑可将数据实时写入openclaw.json
确认"主备互换"功能会触发api.restartGateway()
但我看代码,实际行为并非如此:
// bindWaterfallActions -- 所有操作按钮都只改 state,不保存:
// "设为主用"
btn.onclick = () => {
pushUndo(state)
setPrimary(state, full)
state.config.agents.defaults.model.fallbacks = newFallbacks
renderDefaultBar(page, state)
toast(`已将 ${full} 设为主模型`, 'success')
// ← 没调 autoSave,也没调 restartGateway
}
// "加入 / 移除 / 拖拽" 都是同样的模式,都只改 state只有点"保存并应用"按钮才真正持久化:
container.querySelector('#btn-save-fallback').onclick = async () => {
state.showFallbackEditor = false
await doAutoSave(state) // ← 只有这里调
renderDefaultBar(page, state)
}所以实际行为是:用户必须点"保存并应用"才生效。这跟你描述的"实时写入"不符。风险场景:
- 用户忘点保存直接跳页面 → 改动静默丢失
- 用户点"取消"按钮走
loadConfig()重载 → 改动丢失 - 原 models.js 其他地方都是
autoSave(state)自动保存的,这里的"显式保存"模式是个风格裂痕
修改建议(二选一):
- A. 改成 autoSave 模式(推荐,和原设计一致):每个改动(加入/移除/设为主用/拖拽)之后直接
autoSave(state),去掉"保存并应用"和"取消"按钮(编辑即生效) - B. 保持显式保存:在 state 修改后加"脏标记",在标题栏显示「未保存的改动」,跳页/关页时拦截确认。并把 PR 描述改成"保存按钮写入生效",避免误导后续 reviewer
🟢 P2 - 小事
6. en.json 末尾换行被删掉
-}
+}
\ No newline at end of file修改建议:en.json 末尾加个 \n。
✅ Action Items
- P0: 抽硬编码中文为 i18n key,zh-CN + en 都补齐
- P0: 恢复 URL 正则的全角标点(只改这一行)
- P1: 回退无关的中文标点 diff 噪声(
models.js里只留瀑布流相关的真实代码变更) - P1:
git rm src-tauri/gen/schemas/linux-schema.json - P1: 选择一种保存策略(推荐 autoSave),和描述保持一致
- P2: 补 en.json 末尾换行
希望这些反馈不会让你受挫 🙏 瀑布流折叠 + 候选池分组 + 拖拽排序的方向是真的好,UX 比原版强。但非中文用户是 ClawPanel 用户的重要部分,硬编码中文属于明确的回归,这块必须处理。期待下一轮修改!
上下文: PR #232 的作者本地在 Linux 上 tauri build 后,src-tauri/gen/schemas/ linux-schema.json 被自动生成并带进了 PR(+2606 行)。main 分支从未 commit 过这个文件(git log 无记录)。 问题: - 这个 schema 是 Linux 平台构建时自动生成的,不同 Linux 机器产出可能 不一致,容易引起 PR diff 噪声和合并冲突。 - 历史原因 desktop-schema.json / macOS-schema.json / windows-schema.json 已经被 track 了,暂不动以免其他 maintainer 的工作流受影响。 - 但 Linux schema 在本仓库从未入库,纯属贡献者本地构建副产物,应当忽略。 防护: - 在 main 的 .gitignore 加入 src-tauri/gen/schemas/linux-schema.json - 配合 review 里已经要求 PR #232 作者 git rm 该文件的 action item Refs: PR #232 review comment
|
@1186258278 修改已完成,包括 i18n 补全和代码清理,请重新查阅。 |
变更说明
openclaw.json配置文件不同步的问题。此更改已在 Linux 环境下验证通过并生成 .deb 包测试。