ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

把 DeepSeek Harness 搬进鸿蒙的 8 个坑

2026/10/2 20:55:36 拓冰建站 浏览量
把 DeepSeek Harness 搬进鸿蒙的 8 个坑 直接说结论把 DeepSeek Harness 搬进鸿蒙坑不在 Electron在鸿蒙的沙箱和网络模型。桌面 Linux 上理所当然的事——symlink、硬链接、访问 127.0.0.1、HOME 目录——到了鸿蒙上全被改了规矩。我数了数能靠补丁 插件绕过去的有 8 个坑但有少数几个是真·绕不过去的坎比如「随包自带 Node、npm、pnpm、Python、pip、uv 等运行时和工具」。这个坎我第一篇文章就埋过伏笔当时叫它「第二层难点」根因是二进制证书个人开发者不可得后面 ACL 篇我会单独讲透。这篇先把 8 个能绕过去的坑一个个拆开。一、先把背景对齐为什么是这 8 个坑我的目标是复用 desktop 那套架构进程内 Host webserver 同源数据面把 dsh 原样搬进鸿蒙。唯一本质差异是把「官方 Electron 运行时」换成「Electron-on-鸿蒙运行时」。结果这「换一个运行时」引出一串连锁反应沙箱禁了 symlink、回环地址被隔离、打包阶段被 5 万个小文件卡死、原生模块全是 win32 二进制……下面按「现象 → 原因 → 解决」逐个拆。二、8 个坑逐个拆坑 1loopback 网络隔离现象渲染进程加载127.0.0.1:端口直接白屏Web UI 加载失败。原因鸿蒙对渲染进程访问本机回环地址做了进程间网络隔离桌面版「同源加载 localhost」的老路子走不通了。解决webserver 绑0.0.0.0渲染进程改走局域网 IP出栈前再把Host/Origin改写回127.0.0.1:端口以通过 dsh 的 loopback-only 特权方法围栏。安全语义不变——局域网其他设备依然 403。坑 2沙箱禁 symlink现象symlinkSync直接抛EACCESdsh 初始化阶段就失败。原因鸿蒙应用沙箱禁止创建符号链接这也解释了后面坑 4 里 hardlink 相关的问题。解决加 patchsymlink 失败时回退cpSync递归拷贝。牺牲一点磁盘空间换来初始化不再崩。坑 3HAP 打包超限5 万个小文件现象dsh 构建产物有5 万多个小文件hvigor 打包阶段直接卡死、内存爆掉。原因鸿蒙的 HAP 打包流程对海量小文件不友好node_modules 那种「文件多、单个体积小」的结构是它的天敌。解决先把整个dsh-dist压成单个dsh-dist.tar.gz约 143MB--formatustar运行时再流式解压。把「5 万次小文件搬运」变成「一次大文件搬运 一次流式解压」。坑 4原生模块 ABI 不匹配卡了我一整天现象sharp / node-pty / koffi 这些原生模块在 Windows 上收集产物时是win32-x64 二进制到了鸿蒙 aarch64 上根本加载不了直接报错。原因dsh-dist 是在 Windows 上收集的原生模块的二进制平台被锁死在 win32-x64。解决三条路这个坑我最久才爬出来sharp→ 换成纯 JS stub不做事像素解码只解析图片容器头干净的 8-bit sRGB PNG/JPEG/WebP 直接按字节直通。node-pty / koffi→ 直接禁用对应能力终端、进程沙箱。better-sqlite3→ 换用 Electron 37 / Node ABI v138 的 aarch64 成品会话持久化保住了。这个坑最折磨人的地方在于它不是「装错了东西」而是「你装的东西从根上就是错的平台」得一层层溯源到「产物是在哪台机器上收集的」。坑 5HOME 指向沙箱外现象一打开「选择工作区」就报cannot list /storage/Users/currentUser: EPERM。原因鸿蒙沙箱里os.homedir()返回的是沙箱外的系统用户目录应用无权访问一点进去就 EPERM。解决dsh Host 启动前把HOME显式指向沙箱可写目录userData让「工作区选择」落在应用自己能读写的范围内。坑 6特权方法 403现象设置对话框多处报transport failure for /api/settings.describe: HTTP 403。原因dsh 把settings.*、credentials.*等特权方法锁定为 loopback-only而鸿蒙为了绕坑 1 的 loopback 隔离改走了局域网 IPHost头不是 loopback → 直接被 403。解决在内嵌渲染进程请求出栈前把Host/Origin改写为127.0.0.1:端口。坑 1 和坑 6 其实是同一枚硬币的两面一个要「绕开 loopback」一个要「装成 loopback」。坑 7agent preset 工具行无限等待现象加完工作区点不了session.create抛agent-preset-invalid。原因standard preset 里tool-bash、tool-fs-search依赖被禁用的 shell/subprocessnode-pty坑 4 已禁于是无限等待 → preset 挂载失败。解决禁用依赖 shell / subprocess / pty 的工具行。禁用要「整行摘掉」别只摘工具名否则 preset 解析还会卡。坑 8corepack pnpm 不可用现象desktop 构建用的是corepack pnpm到了鸿蒙构建环境 corepack 直接不可用。原因corepack 依赖下载/切换 pnpm 版本的机制在鸿蒙构建环境里走不通。解决构建脚本直接调pnpm跳过 corepack 这一层。别在鸿蒙环境里跟 corepack 死磕能省一天。三、8 个坑速查表坑现象根因解决1 loopback 隔离渲染进程白屏回环地址进程间隔离绑0.0.0.0 局域网 IP2 禁 symlinksymlinkSync报 EACCES沙箱禁符号链接回退cpSync拷贝3 打包超限5 万小文件卡死HAP 对海量小文件不友好打 tar.gz 流式解压4 ABI 不匹配原生模块加载失败产物是 win32-x64stub / 禁用 / 换 aarch645 HOME 越界选工作区 EPERMhomedir 指向沙箱外HOME 指向 userData6 特权 403settings 报 403特权方法 loopback-only出栈改写 Host/Origin7 preset 卡死agent-preset-invalid依赖被禁的 shell/subprocess禁用依赖 pty 的工具行8 corepack 不可用pnpm 拉不起来corepack 机制走不通直接调 pnpm一句话记住鸿蒙化难的不是 Electron是沙箱和网络模型逼着你换一套心智模型。四、还有几个绕不过去的坎上面 8 个坑都能绕。但有 3 个坎绕过去得另辟蹊径二进制证书个人不可得——随包分发 ELFNode / pnpm / Python 运行时需要二进制证书个人开发者拿不到。这条是真·绕不过去「随包自带完整工具链」只能放弃下一篇 ACL 篇讲透。应用域 node 子进程被 SIGSYS 杀——沙箱 seccomp 策略禁止 fork 出的子进程分配 JIT 可执行内存node 一创建 V8 isolate 就被内核打死所以「在应用里 spawn 一个 node/pnpm 子进程」走不通。用户数据分区禁 exec ELF——就算弄来 linux-arm64 原生 pnpm也塞不进用户目录。这三个坎叠一起把「插件市场一键安装」逼到了墙角。其中第 2、3 个我正在尝试解决思路是把「spawn 子进程」改成「在主进程内进程式调用 pnpm」——这个坑够单独写一篇专题这里先点到为止。五、写在最后以上就是把 DeepSeek Harness 搬进鸿蒙的 8 个坑外加几个还没完全啃完的坎。如果你也在做鸿蒙 / Electron-on-鸿蒙的适配这份清单照着查一遍能少踩不少。代码已开源https://github.com/fellow99/dsh-desktop-hos欢迎star支持。下一篇我写ACL 权限申请踩坑哪些权限才需要申请、我差点白交一批、以及最后 3 项一次通过的全过程。关注公众号并设为星标别错过。相关开源工程DeepSeek Harness上游项目https://github.com/deepseek-ai/deepseek-harnessdsh-market插件市场https://github.com/dsh-market/dsh-marketharmonypc-electronElectron-on-鸿蒙运行时https://atomgit.com/jianguoxu/harmonypc-electrondeepseek-harness-workspace工作区总览https://github.com/fellow99/deepseek-harness-workspacedsh-desktop桌面端https://github.com/fellow99/dsh-desktopdsh-desktop-hos鸿蒙端https://github.com/fellow99/dsh-desktop-hos感谢各位关注欢迎访问我的 GitHub 主页https://fellow99.github.io/