# 问题案例库 ## CASE-1:dsh-harmony(deveco)会话模型选择不可用(未解决,观察中) - **现象**:Web GUI 中该会话(session-9a1162e7,壳版任务对话)无法选择模型;刷新页面与重启服务后仍复现(2026-08-23 20:3x 用户确认) - **已排除**:服务端全链路健康——凭据(credentials.describe:BIGMODEL/MOONSHOTAI_CN/DEEPSEEK 全部 configured,file 源)、settings(agent-default-model 完好)、会话状态(16 轮全部完成、空闲)、宿主进程(DSH Desktop 托管 3080 端口正常) - **剩余怀疑**:客户端恢复态——DSH 转发事件「no replay after a reconnect」,llm 目录事件在重连前已发,模型选择组件错过后未再拉取;或该会话(bigmodel/glm-5.3)特有的目录恢复路径缺陷 - **处理**:用户判定非严重,立案保留。后续排查切入点:新会话能否选模型(区分全局/会话级);临时移除 mcp-harmonyos 二分;对 dsh-harmony 原生客户端的启示——**协议适配层必须在重连后代际主动拉取目录/设置快照,不能依赖事件重放**(已列入 P2a 设计约束) ## CASE-2:语音设置模块浅色模式文字黑底(已修复,2026-08-23) - **现象**:浅色模式下,语音模式设置模块的下拉框(识别/朗读语言、引擎、说话方式等)背景为黑色,未适配浅色主题 - **根因**:dsh-voice-client 插件 CSS 使用了不存在的主题变量名,var() 永不命中、永远走深色兜底值: - `--dsw-alias-bg-l2`(不存在)→ 正确名 `--dsw-alias-bg-layer-2` - `--dsw-alias-hover`(不存在)→ 正确名 `--dsw-alias-interactive-bg-hover` - **修复**:DSWorkSpace/dsh-voice-client/lib/client.js 两处变量名已改正(其余 9 处 label-*/border-l1 用法本就正确);深色模式视觉不变,浅色模式跟随主题 - **验证**:浏览器刷新页面(或硬刷新)后查看设置模块;若样式未更新则重启 dsh web - **通用教训**:给 DSH 写 web 插件时的官方主题 token 清单(从 index-*.css 提取):bg-base / bg-layer-1..2 / bg-mask-1 / border-l1..l4 / label-primary|secondary|tertiary|caption|dimmed|inverted / interactive-bg-hover|active / button-*-hover / state-*-primary|secondary。**变量名必须以此清单为准,拼错不报错、静默走兜底** ## CASE-3 dsh web 禁止局域网暴露(2026-08-23,实证) - 现象:`dsh web --host 192.168.x.x` 报 config 校验错(只接受 127.0.0.1|0.0.0.0);`--host 0.0.0.0` 被显式拒绝("intentionally not supported yet for safety: it would expose remote code execution") - 结论:**真机连接唯一正路是 hdc rport 隧道**(设备 127.0.0.1:3080 → 电脑);任何 LAN 直连/反代方案都违背官方安全边界,勿再尝试 - 影响:壳版引导页文案与脚本已按 rport 模型重构(setup-device.sh 一键化) ## CASE-4 hdc install 报 sign info inconsistent(2026-08-23) - 现象:换过自动签名材料后覆盖安装报 code:9568332 - 根因:设备上旧包签名与新包不一致 - 解法:先 `hdc uninstall com.dotouch.dshharmony` 再装;setup-device.sh 已内置自动卸载 ## CASE-5 hap 包无法在真机双击安装(2026-08-24,平台事实) - 现象:用户把 DSH-Harmony-1.0.0-arm64.hap 拷到真机,文件管理器双击无安装入口 - 根因:HarmonyOS NEXT 设计上关闭自由侧载,.hap 为开发态格式,系统未注册安装器(官方论坛问答确认) - 合法通道:应用市场(含 AGC 内测/开放测试,唯一点击即装体验)/ hdc 安装(开发者模式,setup-device.sh 已自动化)/ 企业 MDM 分发 - 结论:勿再尝试本地安装方案;要市场体验走 AGC 内部测试通道(前置:华为开发者账号实名认证) ## CASE-5 调试签名 Profile 的 UDID 绑定(2026-08-23,真机首装) - 现象:真机安装报 code:9568423 device unauthorized / UDID not in signing profile;模拟器正常 - 根因:自动签名的调试 Profile 只含注册过的设备;新真机需先注册 - 设备:MatePad QXS-W10P(HarmonyOS 6.1.0.135 = API 24),UDID C393FFB572691036576084FA981FBE3FA0287AF2BB05516D4B4DBFC7AE6B36A6 - 解法:DevEco > File > Project Structure > Signing Configs > Register Device 一键注册重发 Profile → 重新自动签名 → 重建安装 - 附坑:hdc install 失败也 exit 0(须 grep successfully),setup-device.sh 已修复误报 - 发布证书(Release Profile)不做 UDID 绑定,应用市场分发无此问题 ## CASE-6 DevEco 自动签名勾选失败但已注册了应用+设备(2026-08-24) - 现象:用户反复勾不上「自动生成签名/关联已注册应用」 - 事实:失败前 DevEco 已在 AGC 完成设备注册(auto_sign_device_*)和应用记录(DSHharmony),只差最后生成 Profile - 解法(已走通,勿重试 DevEco):AGC 控制台手动建调试 Profile——证书选 auto_debug_*.cer(与本地 .p12 配对!dfwy 证书不配对会签名失败)、设备选目标真机、下载 .p7b 换到 build-profile.json5 的 profile 路径重建 ## CASE-7 浏览器自动化配方(CDP,2026-08-24 实战验证) - 新版 Chrome 禁止默认配置开调试口:须 --user-data-dir=/tmp/xxx 独立配置 + 二进制直启(open --args 会丢参数;已有同配置实例会吞参数) - 驱动脚本:/tmp/cdp.mjs(Runtime.evaluate)、/tmp/cdp-click.mjs(真实 Input 鼠标点击)、/tmp/cdp-key.mjs(键盘) - AGC 控制台是 SPA+iframe(同源可穿透):外层菜单 a.base-menu,内容在 iframe 内 el-plus 组件 - 合成 click() 对 el-plus 大部分组件无效,必须 CDP Input 真实点击;iframe 内坐标要加 iframe 偏移(marker div position:fixed 在 iframe 内坐标系) - 坑:表单提交按钮对鼠标点击无响应(疑似遮挡),键盘路线生效:btn.focus() + Input.dispatchKeyEvent Enter - 登录:独立配置目录无登录态,用户在窗口内自行扫码登录(AI 不接触密码),轮询 URL 离开登录页即完成 ## CASE-8 web 品牌替换全配方(2026-08-24,已验证) - 目标:dsh web 界面 logo/标题/favicon 全部换成自有品牌,零分叉官方代码 - 机制:品牌走 dsh-client-ui-brand-official 客户端插件注册 3 个插槽(sidebar.brand.mark / sidebar.brand.name / conversation.hero.brand.mark);sidebar.brand.name 在当前布局不渲染(26 个插槽清单实证),mark 双插槽渲染 - 配方: 1. 仿 dsh-voice-client 写 dsh-brand-client(__ModuleLoader__ bundle,package.json 需 dsh.client.platform=web,exports 路径必须 ./ 开头) 2. profile 补丁停用官方品牌:同 id 重声明 `- id: ui-brand-official + name + disabled: true`(顶层 disable: 列表是无效语法!) 3. insert 自有品牌插件 4. document.title 会被 SPA 改回 → MutationObserver 守卫 - 坑:pnpm file: 依赖同版本不刷新(改插件要 bump version 或直接 cp 到 node_modules) - 验证:CDP(9222 端口 Chrome)Runtime.evaluate 断言 title/favicon/aria-label 插槽/官方文案清零,全绿 - 桌面端:icns 用 sips+iconutil;托盘 template 字母用 Pillow 圆章描边法(沿路径盖圆模拟圆头笔画) ## CASE-9 品牌替换二轮:插槽冲突/文案/locale 边界(2026-08-24,全绿) - 冲突现象:双插件同插槽同 priority 0 → single slot already has a registration 报错横幅 - 正解:ctx.slots.register({ name, priority: -1 }, Comp)——**数字小者渲染**(slots 源码实证:c = n.priority ?? 0, lowest renders);即使官方品牌因缓存页双加载也不报错、我方遮蔽 - 文案替换边界:slogan(hero.headline)/预览版(hero.preview) 是 conversation 插件的 **locale 词条**,而 LocaleRuntime.register 同 ns+locale **二次注册直接 throw**(源码实证)→ 不能走注册覆盖,改用 DOM TreeWalker 文本替换 + MutationObserver 防抖重扫(排除 SCRIPT/STYLE/INPUT/OPTION) - HARNESS 是启动屏 wordmark([data-dsh-boot] 卡片,CSS module 类名不稳,用精确文本匹配替换) - pnpm file: 依赖坑二连:同版本不刷新 + **dsh web 启动会用 store 缓存覆盖手改的 node_modules** → 正确更新姿势:bump version + rm -rf .pnpm/* + pnpm add file:… - 验证基线(CDP 全量断言):pluginError=false / slogan 新旧替换 / badge 新旧替换 / markCount=2 / title / favicon / dshText=false / harnessExact=0