🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

手机端启动器 IPF-Sinon/DSH-Folk

DeepSeek Harness
IPF-Sinon4 天前有提交已提供中文文档扫描:含敏感能力

DSH-Folk —— 基于 FolkPatch 设计风格的 DeepSeek Harness 移动端启动器。

51/100
综合分
45
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/30 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:仓库根目录及浅层子目录均无 dsh 插件清单,无法用 dsh 插件安装命令安装。以下命令仍可尝试,但可能失败。
无法用 dsh 插件命令安装(仓库内无 dsh 插件清单)
git clone https://github.com/IPF-Sinon/DSH-Folk.git
按该仓库 README 的原生方式安装;若作者另行发布了 DSH 插件包,请以其文档为准

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · other
装得上吗
作者未把包发布到 npm,只能用源码安装
插件本身没问题,是分发方式不同
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 4 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

仓库根目录及浅层子目录均无 dsh 插件清单,无法用 dsh 插件安装命令安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包DSH-Folk(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 04:34:01

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 7 处,展示前 7 条)
  • 读取本地文件
    runtime-builder/check-elf-closure.js:55
    b = fs.readFileSync(file);
  • 读取本地文件
    runtime-builder/check-elf-closure.js:117
    ents = fs.readdirSync(abs, { withFileTypes: true });
  • 读取本地文件
    runtime-builder/check-elf-closure.js:154
    if (!root || !fs.existsSync(root)) {
  • 读取本地文件
    runtime-builder/check-elf-closure.js:190
    ents = fs.readdirSync(path.join(root, d), { withFileTypes: true });
  • 读取本地文件
    runtime-builder/check-trim-safety.js:106
    ents = fs.readdirSync(dir, { withFileTypes: true });
  • 读取本地文件
    runtime-builder/check-trim-safety.js:118
    pkg = JSON.parse(fs.readFileSync(p, 'utf8'));
  • 读取本地文件
    runtime-builder/check-trim-safety.js:132
    if (!root || !fs.existsSync(root)) {
扫描于 2026/11/2(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

4 张 · 点击查看大图

功能亮点

  • 移动端启动器

README

由 DeepSeek 最新模型翻译生成
DSH-Folk 在 Android 上跑 DeepSeek Harness 的启动器 DSH-Folk 把 DeepSeek Harness(一个 Node.js 的编码 Agent CLI)装进手机:应用下载一份 Linux 容器运行时(arm64 或 x86_64,按设备架构),用 proot / proroot 在容器里启动 dsh web,然后你在手机上直接打开它的 Web UI。 不需要 root,也不需要 Termux。有 root / Shizuku / 无线 ADB 时会自动利用,用于放宽某些受限操作。 目录 - 预览 - 现在能做什么 - 环境要求 - 安装 - 运行时管理 - 深入了解 - 项目结构 - 致谢 · 许可证 · 友情链接 · 交流 深入的实现说明拆到了 docs/ 下,按主题分文件(见 深入了解)。
展开完整文档(README 剩余 1 节)
DSH-Folk

在 Android 上跑 DeepSeek Harness 的启动器

DSH-Folk 把 DeepSeek Harness(一个 Node.js 的编码 Agent CLI)装进手机:应用下载一份 Linux 容器运行时(arm64 或 x86_64,按设备架构),用 proot / proroot 在容器里启动 dsh web,然后你在手机上直接打开它的 Web UI。

不需要 root,也不需要 Termux。有 root / Shizuku / 无线 ADB 时会自动利用,用于放宽某些受限操作。

目录

- 预览
- 现在能做什么
- 环境要求
- 安装
- 运行时管理
- 深入了解
- 项目结构
- 致谢 · 许可证 · 友情链接 · 交流

深入的实现说明拆到了 docs/ 下,按主题分文件(见 深入了解)。

预览

| 主页 | 终端 |
| 插件 | 设置 |

现在能做什么

| 页面 | 说明 |
| 主页 | 一键启动 / 停止 / 重启 DSH,显示运行阶段、Web UI 地址、当前运行方式与权限通道,带可复制的启动日志 |
| 终端 | 容器内的真 PTY 终端(基于 Termux 的 terminal-view),直接 bash 进容器 |
| 插件 | 管理容器里 DSH 的插件,展示 npm 周下载量、GitHub star 与 dsh-market 点赞;内置插件商店(下载完整目录后本地搜索,4000+ 条),显示上游扫描出的能力与安全红线,支持本地 .tgz 安装。装完会用临时端口验证一次插件树能否加载,不通过自动卸载 |
| 设置 | 常规 / 外观 / 行为 / 功能 / 安全 / 备份 / 插件 / 多媒体,界面主题体系沿用 FolkPatch(theme.json 完全兼容) |

主题商店的入口在 设置 → 外观 页右上角;主题存档(.fpt)的导出与导入在商店页顶栏。

界面语言在 设置 → 常规 → 语言 里选,与系统语言无关(还有几套「风味」皮:魔法大厅 / 圣光之殿 / 后厨操作台 / 主世界 / 仙府主殿,只能从这里进)。启动日志、通知栏、Toast 与两个桥的报错都跟着这一项走,不是跟着系统语言。

虚拟屏(设置 → 功能 → 权限管理 → 屏幕与外部界面 → 虚拟屏)是另一条路。DSH 可以在自己的一块虚拟显示上启动目标 App,容器里的 agent 直接对它截屏、点击、滑动、按键,也能在那块屏上启动指定包名 —— 全程不碰你自己的屏幕,所以不会把你正在看的东西顶掉。同一项里可以打开预览:实时画面 + 用手直接操作(点按/滑动、返回/桌面/最近任务)。预览和 agent 跑的是完全同一个服务,所以出问题时能一眼分清是画面侧还是输入侧。需要 root / Shizuku / 无线 ADB 之一 —— 通道没就绪时,点「预览」会先弹一个引导,说明还差的是哪一步(没选通道 / root 未验证 / Shizuku 未授权 / 无线 ADB 未配对),并可直达权限通道页。

移植自 Operit 的 shower 子系统(LGPL-3.0,其自身源自 scrcpy),署名见致谢与 displayserver/ 的 package-info.java。

配置备份与 DSH 桌面端的 dsh-config-manager 插件使用同一套导出格式,手机上导出的 zip 能直接在电脑上导入,反之亦然;凭据值默认不导出,可选整包 AES-256-GCM 加密。为什么中间那一段要由软件侧做,见 备份为什么要由软件侧加密。

环境要求

- Android 8.0 (API 26) 或更高
- arm64-v8a 或 x86_64 设备(不支持 32 位)
- 首次启动需要联网下载运行时(约 150 MB 压缩包,解压后约 600 MB;可在设置里选镜像或自动测速)
- 存储空间建议预留 2 GB 以上

首次启动下载完运行时后会自动预装四个插件:dsh-web-mobile(移动端适配)、dshmarket(WebUI 内的插件市场)、 dsh-config-manager(配置备份功能的依赖)、dsh-file-upload(拖拽上传 / 文档转 Markdown / 图片 OCR / 语音输入)。
安装失败不影响启动,之后可以在插件商店里手动装;预装清单按包名逐个记账,从旧版本升级上来会自动补装新增的那几个。

WebUI 里有几处由 DSH-Folk 自己注入的补丁(不依赖上面这些插件,因此不会被插件升级覆盖):旧内核的 JS API 兼容垫片、系统栏内边距避让,以及手机回车换行 —— 上游把 Enter/Shift+Enter 注册成只读快捷键(发送 / 换行),而软键盘没有 Shift,所以触屏设备上由我们注入一段脚本把裸回车改成换行(发送用发送按钮);开关在 设置 → 功能 → WebUI 兼容。

root / Shizuku / 无线 ADB 都是可选的,并且默认不启用。DSH-Folk 只探测并复用设备上已有的 su(Magisk / KernelSU / APatch)与已授权的 Shizuku / Sui,自身不打任何内核补丁、不安装 su、不内置 Shizuku Server。要用就去 设置 → 安全 → 权限通道 → 首选通道 选一条(或选「自动」按 root > Shizuku > 无线 ADB 挑)。

选了通道后,App 自己(硬件监控、bugreport 的 dmesg/tombstones、重启菜单)与容器里的 AI(经 dsh-native shell 由 App 代跑)都能用它;容器本身不需要 root。严格程度决定「用之前要不要问你」,默认严格(每次特权调用都弹窗)。
完整的权限模型、无线 ADB 的两把锁、AI 能通过桥调到宿主的哪些能力,见 容器里能调宿主的什么。

安装

到 Releases 下载对应架构的 APK,同目录的 .sha256 可用于校验:

- DSH-Folk-<版本>-arm64-v8a.apk —— 绝大多数手机、平板
- DSH-Folk-<版本>-x86_64.apk —— Android 模拟器、Android-x86、ChromeOS

两个包功能相同,区别只在打包的原生二进制与下载的容器 rootfs。装错架构会在启动时提示「Unsupported architecture」并退出。不确定的话:手机选 arm64-v8a。

也可以到 Actions 取开发构建:选一次成功的运行,下载 dsh-folk-debug- 或 dsh-folk-release- 工件。

测试版通道:应用测试版在 设置 → 常规 → 接受测试版更新 打开后才会连预发布版一起看(默认关闭);容器运行时的测试版是独立开关(设置 → 功能 → 运行时 → 接受测试版运行时更新),两者互不影响。
测试版 / 正式版怎么发布、为什么这么发(release 变体、versionCode 约定、不用 Actions artifact 等),见构建与发布内幕。

应用自身的更新在 设置 → 常规 → 检查更新 里完成:它会对下载渠道(GitHub 直连 / gh-proxy 镜像)测延迟与吞吐,下载支持断点续传,装之前必须通过 release 附带的 .sha256 校验 —— 校验不过一律不装。

运行时管理

设置 → 功能 → 运行时 那张开关卡片:

- 点一下卡片:立即检查更新。查到确有能装的版本才弹确认框(说明目标版本与保留的数据),确认后才开始下载;没有更新、或者那份包要求的 App 版本比当前高(那种包装上连容器都起不来)时只给一句结果,不打扰你。
- 长按卡片:打开版本菜单。顶上两个滑块各两档 —— 完整版 / 精简版、正式 / 测试,改一下就重拉列表;列表只显示所选组合,当前已装那一版固定在最上面:点它 = 重装,点别的版本 = 切换过去(降级也行)。
菜单左下角是导入:安装本地 tar.gz(可信来源),会先显示文件名与体积供确认。
- 重装(就是点最上面那一行):重新下载当前通道的最新运行时,可选保留或清空会话、插件、配置与依赖数据。
- 右侧开关:自动检查更新,默认开。开启后应用启动即自动检查运行时更新,发现新版本才提示;下载仍需手动确认。
它只管自动检查,手动检查是点卡片。它与「应用更新」检测并行,但弹窗排队,避免两个「有更新」的弹窗叠在一起。

日志里 dsh web: http://127.0.0.1:3080/?token=… 那行是打开 WebUI 用的令牌,等同于这个实例的密码(局域网访问默认关闭,只在本机可达)—— 贴日志求助前记得把它删掉。

预装插件时 pnpm 会刷一屏 missing peer … 警告,这是预期的(@deepseek-ai/dsh-、react 这些 peer 由 dsh 自己解析);判断预装成没成看每个插件末尾的「预装完成 <包名>」与 [DSH-Folk-exit] 0,不是看这些警告。
运行时构建、rootfs 工作流、minAppVersion 门槛等内幕见 构建与发布内幕。

深入了解

按主题拆到 docs/ 下:

- 容器里能调宿主的什么(dsh-fs / dsh-native) —— 两个回环桥、24 项原生能力、特权命令(shell)、无障碍(a11y)与自助提权流程
- 备份为什么要由软件侧加密 —— 导出/导入格式、DCA1 容器、快照回退软件设置、WebDAV 云备份插件、五档档位
- 开机自启 —— 开机广播 / 无障碍 / 开机脚本三条路径的取舍,以及两个无障碍开关分别是什么
- 日志采集与脱敏 —— bugreport 的文件归属、脱敏、时间窗口裁剪与 session.lock 处理
- 它是怎么跑起来的 —— proot/proroot、rootfs、link2symlink、pnpm、ELF 闭包等运行链细节
- 构建与发布内幕 —— 应用/运行时的发布工作流、测试版通道机制、更新说明为什么是本地资源
- 自动化工作流:踩坑指南 —— 四层跨进程契约、审批 TTL、分支跳过、Compose 画布手势与坐标的七次返工、Kotlin 运行期陷阱(CC BY 4.0)

项目结构

app/src/main/java/me/bmax/apatch/
dsh/ 运行时层:下载安装、proot 启动、权限探测、无线 ADB、PTY、配置备份 ui/screen/HomeDsh.kt 主页 ui/screen/Dsh.kt 终端 / 插件 / 插件商店 ui/screen/settings/ 设置各分页 runtime-builder/ 容器 rootfs 构建脚本(在 CI 上跑)+ 动态库闭包检查 .github/workflows/ build.yml(APK) + runtime.yml(rootfs) docs/ 分主题的深入实现说明

内部包名保留 me.bmax.apatch(applicationId 是 top.funcun.dshfolk):这样 FolkPatch 的整套主题子系统与用户已有的 theme.json 不需要改一行就能继续用。

致谢

DSH-Folk 的 UI 直接复用 FolkPatch,容器与运行时交付思路来自 DSHA / DSHM:

- FolkPatch —— 本项目的 UI 基础(GPL-3.0)
- APatch —— FolkPatch 的上游
- DSHA —— 无线 ADB 配对方案、容器运行逻辑参考
- DSHM —— 运行时在线交付与镜像测速方案
- DeepSeek Harness —— 被启动的本体
- proot / proroot / Termux —— 容器执行与 PTY 终端
- Shizuku —— 免 root 特权通道
- KernelSU / SukiSU-Ultra —— 界面设计参考
- Genymobile/scrcpy —— 虚拟显示屏的创建手法(伪造 ActivityThread/系统 Context、SurfaceControl/DisplayManager 反射、injectInputEvent 注入),Apache-2.0
- Operit —— 虚拟屏幕服务端的实现参考,displayserver/ 移植自其 tools/shower;悬浮小窗的形态(折叠把手 / 展开 / 贴边 / 控制条)参照其 VirtualDisplayOverlay,LGPL-3.0

displayserver/ 是 Operit(LGPL-3.0)的移植产物,其手法又源自 scrcpy(Apache-2.0)。LGPLv3 与本站的 GPLv3 兼容,因此可以整体以 GPL-3.0 分发;移植时按 GPLv3 要求保留了完整源码(本仓库)与该署名。原始的 com.ai.assistance.shower 包名已改为 me.bmax.apatch.display,并去掉了移植源里与本功能无关的 Compose 界面。

虚拟屏悬浮小窗(DisplayMirror)的形态也参照了 Operit 的 VirtualDisplayOverlay:默认折叠成边缘把手、点开才展开、点一下出控制条、300ms 位移/尺寸动画。实现是按本仓库的会话模型重写的(只挂 agent 那块屏、与预览页交接唯一的视频 sink、只做旁观不做触摸注入),没有照搬其自动化进度条、彩虹边框与全屏触摸转发。

许可证

GNU General Public License v3.0。本项目派生自 GPL-3.0 的 FolkPatch,因此整体沿用 GPL-3.0:分发(含二次修改)必须同样以 GPLv3 开源并提供完整源码。

友情链接

LINUX DO 开源社区 | linux.do

交流

- QQ 群:1109060326
- Issues:https://github.com/IPF-Sinon/DSH-Folk/issues
预览分享卡片长什么样 ↓IPF-Sinon/DSH-Folk
分享 · DeepSeek Harness Hub
IPF-Sinon/DSH-Folk

DSH-Folk —— 基于 FolkPatch 设计风格的 DeepSeek Harness 移动端启动器。

回到顶部