Skip to content

[Bug] 0.13.0-preview 实机反馈:ADB 控制被档位卡死 / 重启掉线 / @napi-rs/canvas 缺失 / 插件市场可搞垮引擎 #96

Description

@maomao1OvO1

[Bug] 0.13.0-preview 实机反馈:ADB 控制被档位卡死 / 重启掉线 / @napi-rs/canvas 缺失 / 插件市场可搞垮引擎

项目:kelai141/dsh-mobile-apk · 版本0.13.0-previewcom.dsharnessmobile.shell
设备:OPPO K13 Turbo Pro 5G(PLE110)· Android 16(ro.build.version.release=16, SDK 36)


环境

  • DSH:0.13.0-preview(versionCode 24)
  • ADB 无线调试:开启
  • 用户通过 dsh plugin / 插件市场使用部分功能

🐛 Bug 1:android_* 工具(ADB 观察/控制)显示 [object Object] / 空数据,且无法把会话档位切到 danger-full-access

触发方式:在对话中调用 android_adb_shell_exec / android_termux_channel_exec / android_device_info / android_privilege_status 等工具。

现象

  • android_adb_shell_exec(如 getprop ro.product.model)返回字面量 [object Object][object Object]
  • android_device_info 返回 (未知)——model=? ver=? sdk=? focus=? res=?全是空),而同样的命令通过 adb shell(bash 通道)能正常取到 PLE110 / Android 16 / SDK 36。
  • android_privilege_status 显示:授权档位 T0——已授权(引擎级)——当前部署档位 workspace-write,会话内档位实时判定(/permission danger-full-access 可即时开放)

分析(已排查到根因)

  1. 这些「观察类」ADB 工具要求会话档位 = danger-full-access 才开放;但当前会话档位一直停在 workspace-write(T0),于是这些工具被 fail-closed
  2. 问题在于无法切换档位
    • 在会话里输入 /permissionPresets danger-full-access(官方 dsh-permission-presets 注册的命令)→ 被当成普通文本发给 agent,不被识别为指令
    • 「开发者选项 → 会话档位(ADB 能力开关·实时)」显示 workspace-write 的胶囊点击无反应
  3. 已确认 sandbox/mode(会话档位)在会话创建时固定dsh-permission-presets 文档:later changes never alter an existing session),所以当前会话锁死在 workspace-write。
  4. 由于档位锁死 + 命令不被识别 + UI 胶囊点不动,用户无法在已存在会话内开启 ADB 能力[object Object] 是 fail-closed / 结果渲染层的表现。

解决

  • 未解决(功能性):已存在会话无法把档位切到 danger-full-access;只能开新会话(且把 settings.yamlpermissionPresets.defaultPreset 设为 danger-full-access)才可能开放。
  • 建议:① /permissionPresets 命令应在手机/WebView 环境被正确识别为命令(而非文本);②「会话档位」胶囊应是可点的选择器;③ 或提供一个「本会话实时切到 danger-full-access」的入口(当前只有 future-session 默认值生效)。

🐛 Bug 2:设备重启后 ADB 无线调试连接自动丢失,端口变化,需手动重新配对

触发方式:手机整机重启后,再进入对话调用 ADB。

现象

  • adb devices 为空;adb connect 127.0.0.1:<旧端口> 返回 Connection refused
  • 无线调试的端口变了(实测 4060139589)。
  • 需手动重新配对:adb pair 10.10.14.1:<配对端口> <配对码> + adb connect 127.0.0.1:<新端口>,并把 connectPort 更新进壳侧 dsh-adb.xml 才能恢复。
  • 恢复后 adb shell getprop ro.product.model 正常,但每次重启都要重来一遍

分析:Android 无线调试每次重启会分配新的随机端口;壳侧 dsh-adb.xml 存的是上次的 connectPort,不会自动跟随刷新;且授权(配对)在重启后需重新建立。

解决

  • 手动重新配对 + 更新 connectPort 可恢复(但它依赖当次屏幕上的配对码/端口)。
  • 建议:① 重启后自动重扫无线调试端口 / 自动重连;② 或提供引导页让用户一键重新配对(而非靠手动改 dsh-adb.xml);③ ADB 通道在 0.13.0 正式版才「完整」,当前 preview 属预期未完成,但建议至少自动适配端口变化。

🐛 Bug 3:web 启动报 Cannot load "@napi-rs/canvas"(pdfjs PDF 渲染)

触发方式:重启 dsh web 服务。

现象

Warning: Cannot load "@napi-rs/canvas" package: "Error: Cannot find module '@napi-rs/canvas'
Require stack: .../node_modules/pdfjs-dist/legacy/build/pdf.mjs"
Warning: Cannot polyfill `DOMMatrix`, rendering may be broken.
Warning: Cannot polyfill `ImageData`, rendering may be broken.
Warning: Cannot polyfill `Path2D`, rendering may be broken.

分析@napi-rs/canvas(pdfjs 解析 PDF 的可选原生依赖)不在 package.jsondependencies(重启时 dependencies{}),因此被当作孤儿包安装/清理时移除。

解决(手动):

  • 在 web profile 的 package.json dependencies 写入 @napi-rs/canvas@^1.0.8pnpm add @napi-rs/canvas(自动装 @napi-rs/canvas-android-arm64 原生绑定),node 实测 createCanvas 绘制 OK、DOMMatrix/ImageData/Path2D 可用,pdf.mjs 加载零警告
  • ⚠️ 需要再重启一次才吃掉修复(当前运行中的服务是在加包前启动的)。

建议:把 @napi-rs/canvas 及其 arm64 原生绑定写进出厂快照的 package.json dependencies,避免每次重启又丢。


🐛 Bug 4:插件市场安装 @zseven-w/dsh-android 后引擎崩溃两次,需 Termux 手动修复

触发方式:从插件市场安装 @zseven-w/dsh-android 0.1.0-rc.4(对话内实时设备流 / 20 个 adb 工具),重启后。

现象

  • 引擎/web 环境损坏,聊天记录丢失,用户需用 Termux 手动修复两个小时
  • 该插件安装后把 cordis.patch.yml / bundles 改掉,插件卸载后仍留残留;撤到「出厂原版」才恢复。
  • (期间还叠加了「插件市场列的插件多数在手机上不兼容」——README 已说明,但一个插件就能把引擎搞垮。)

分析

  • 插件市场对手机端不兼容的插件缺乏足够防护/隔离;装一个第三方插件就可能(a)影响 cordis.yml/cordis.patch.yml 底层配置(b)拖垮引擎(c)无可靠一键回滚。
  • dsh-undo-savepoint 在该场景常报「无快照可回滚」,关键时刻兜不住。

解决

  • 手动:全部卸载相关包/配置,恢复到出厂 patch(用户用 Termux 完成)。
  • 建议:① 插件市场对手机不兼容的插件做更明显的风险标识 / 安装前二次确认;② 增强dsh-undo-savepoint在「插件装坏」场景的回滚可靠性;③ 加「一键恢复出厂」兜底。

小结

  • Bug 1(ADB 档位卡死 + [object Object]/空数据 + 无法切档)是本次最影响使用的:ADB 观察/控制不可用,只能绕走 bash adb 通道;建议优先处理「会话档位切换入口」。
  • Bug 2、3 是重启后可恢复、但体验差(掉线重配 / canvas 依赖丢失)。
  • Bug 4 是第三方插件兼容/隔离问题,风险高,建议加固插件市场 + 回滚。

以上为 0.13.0-preview 在真机上遇到的问题反馈,供开发者参考。若需要更多日志/复现步骤,我可以补充。

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions