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

iOS 本地运行器 everettjf/dsh-ios

DeepSeek Harness
everettjf62 天前有提交已提供中文文档扫描:无法判定

DSH — 在 iPad 和 iPhone 上跑 DeepSeek Harness

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

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

自动兼容检查未通过:缺少 main/exports/bin 入口声明;要求 dsh 0.1.0-rc.7,而最新版为 0.2.1-rc.5;仓库 package.json 标记 private,未发布到 npm,需从源码安装;安装清单取自 rootfs/staging/package.json。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add everettjf/dsh-ios
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · ui
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 62 天前
档位由哪些信号合成

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

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

缺少 main/exports/bin 入口声明;要求 dsh 0.1.0-rc.7,而最新版为 0.2.1-rc.5;仓库 package.json 标记 private,未发布到 npm,需从源码安装;安装清单取自 rootfs/staging/package.json

展开查看检查明细 ↓

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

✗npm 包dsh-ios-rootfs-staging(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✗dsh CLI 依赖要求 0.1.0-rc.7 · 最新 0.2.1-rc.5 不兼容
✗入口文件缺少入口声明

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

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

安全扫描自动 · 静态分析源码
v2.7.0
⚪ 扫描:无法判定尚无人工评估
展开查看扫描说明与证据 ↓

已尝试扫描但取不到可分析的源码:仓库或包不存在、已删除,或为非 JS/TS 实现、未随包发布源码。无法判定,不代表安全。

  • · 包内无可扫 JS
  • · TS 源码(可能为非 JS 实现或未发布源码),无法判定
扫描于 2026/11/4(0 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

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

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

界面预览

4 张 · 点击查看大图

功能亮点

  • 在iOS设备运行

README

由 DeepSeek 最新模型翻译生成
DSHIOS — iPad 和 iPhone 上的 DeepSeek Harness 把 DeepSeek Harness(dsh)完整跑在你的 iPad 或 iPhone 上——不用越狱,不用服务器,也不用 Mac 参与。 项目主页 ·中文说明 · 12 秒演示 · Discord ·快速开始 ·工作原理 ·测试 ·常见问题 项目状态: DSHIOS 是个实验性项目。虽然它能通过 iSH-ARM64 在 iPhone 和 iPad 上跑起来,但性能还相当有限。项目不会提交到 App Store,也不会再发新版本。想试的话,请自己下载源码构建。 DSHIOS 是个原生 iOS 应用,内嵌 iSH-ARM64 用户态 Linux 模拟器,启动一份打包好的 Alpine Linux 镜像,里面带 Node.js 22 和 @deepseek-ai/dsh,托管 dsh web,再用 WKWebView 显示 harness 自带的 Web UI。智能体循环、会话、工具和 shell 全都跑在设备上。模型请求走 harness 里配置的标准 DeepSeek API。 ▶ 看 12 秒产品演示 —— 真机首次启动、完整工作区,以及 iPhone 界面。
展开完整文档(README 剩余 1 节)
DSHIOS — iPad 和 iPhone 上的 DeepSeek Harness

把 DeepSeek Harness(dsh)完整跑在你的 iPad 或 iPhone 上——不用越狱,不用服务器,也不用 Mac 参与。

项目主页 ·中文说明 · 12 秒演示 · Discord ·快速开始 ·工作原理 ·测试 ·常见问题

项目状态: DSHIOS 是个实验性项目。虽然它能通过 iSH-ARM64 在 iPhone 和 iPad 上跑起来,但性能还相当有限。项目不会提交到 App Store,也不会再发新版本。想试的话,请自己下载源码构建。

DSHIOS 是个原生 iOS 应用,内嵌 iSH-ARM64 用户态 Linux 模拟器,启动一份打包好的 Alpine Linux 镜像,里面带 Node.js 22 和 @deepseek-ai/dsh,托管 dsh web,再用 WKWebView 显示 harness 自带的 Web UI。智能体循环、会话、工具和 shell 全都跑在设备上。模型请求走 harness 里配置的标准 DeepSeek API。

▶ 看 12 秒产品演示 —— 真机首次启动、完整工作区,以及 iPhone 界面。

| 真机 iPad Air(M3,iPadOS 27)—— 首次启动 | 会话与工作区 |
| First launch on iPad Air | Workspace on iPad Air |

左图:guest 已启动,DeepSeek Harness 在 127.0.0.1:3080 上提供服务(DSH 栏里的绿点)。右图:带会话的工作区——模型选择器、「Guest Ask」权限预设,其余都是 dsh web 原生的 UI。

iPhone 17 Pro:启动遮罩、UI、终端、服务器日志

也能在 Apple Silicon iPad 模拟器上跑

功能特性

- 标准 DeepSeek API — Alpine 3.21、Node 22 和 dsh 都跑在 App 内部;模型推理走 DeepSeek 的 API,API key 由 harness 管理。
- 真正的 harness UI — dsh 自带的 web app 在回环地址上提供服务:会话、工作区、工具、权限预设、设置。
- 想要 shell 随时有 — DSH 栏里的 >_ 会在同一个 guest 里打开 Alpine 终端(apk add、npm i -g、查看 ~/.dsh);⋯ 菜单里有 Reload、Server Log、 Restart Harness、Open in Safari、About。
- 受监管的服务器 — 自动挑空闲端口、HTTP 就绪探测、崩溃后带退避重启、 App 回到前台时做健康检查、启动遮罩上实时滚动日志。
- 安全更新 — App 更新时带来的新 guest 镜像会作为全新 root 导入; ~/.dsh(会话、凭据、设置)和工作区自动迁移。
- 模拟环境下的真实 LLM 流式输出 — Node 以 jitless 模式运行(没有 WebAssembly),所以 DSH 自带 fetch() polyfill,提供正确的流式 Response body; SSE 往返流程有测试覆盖,对着 mock DeepSeek 服务器跑。
- 下载与文件 — 会话日志导出会落到 Files ▸ DSH ▸ Downloads。
- 键盘:⌘R 重新加载,⇧⌘T 打开终端。优先适配 iPad;iPhone 也能用,横竖屏都行。

快速开始

前置条件: Apple Silicon 上的 macOS、Xcode 27、iOS/iPadOS 16 或更高版本、brew install meson ninja lld (ld.lld 用来构建 guest VDSO;没有它 guest 跑不起来)、 Node.js ≥ 20 + npm、xcodeproj Ruby gem(gem install xcodeproj,或者 CocoaPods)、一个用于设备签名的 Apple 开发者团队。

因为 App 要读取 Apple Health,所以需要 com.apple.developer.healthkit entitlement,而团队的 wildcard 配置档不带这个权限:第一次构建到设备时,打开 Signing & Capabilities,选好你的团队,让 Xcode 为这个 bundle id 创建一个显式 App ID。(如果你不想这么做,删掉 HealthKit capability 和 app/DSH.entitlements 即可 —— 其他功能不受影响。)

git clone https://github.com/everettjf/dsh-ios.git && cd dsh-ios
make emulator # iSH-ARM64 CLI + fakefsify (used to build and test the guest image)
make rootfs # build/root.tar.gz — Alpine + Node 22 + dsh (~81 MB, ~6 min, needs network)
open DSH.xcodeproj # DSH scheme → your iPad → set the team → Run

或者用命令行:

make run TEAM=XXXXXXXXXX DEVICE=<udid> # build, sign, install, launch on the iPad

首次启动会导入 guest 镜像(约 30 秒,进度显示在遮罩上);之后的启动只要几秒。
harness 提示时配置 DeepSeek API key;它会和 harness 设置一起存在 guest 里。

工作原理

┌─ DSH.app ────────────────────────────────────────────────────────┐
│ DSHRootViewController ──► WKWebView ──► http://127.0.0.1:3080 │
│ │ ▲ │
│ DSHHarness (port pick · readiness probe · restart · health) │ │ │ ISHShellExecutor │ loopback │ │ ┌──────▼──── iSH-ARM64 emulator (Alpine 3.21 aarch64) ───────┐ │ │ │ /usr/local/bin/dsh-serve │ │ │ │ → node --expose-internals @deepseek-ai/dsh web │ │ │ │ --host 127.0.0.1 --port N ─────────────────────────┘ │ │ └────────────────────────────────────────────────────────────┘ │ └──────────────────────────────────────────────────────────────────┘

- 模拟器。 iSH-ARM64 是用户态 Linux 模拟器(Asbestos 线程化代码解释器,带 AArch64 guest 后端)。guest 的 socket 直接透传宿主 socket,所以 dsh 监听的 loopback 端口,从 app 的 web view(以及 Safari)都能访问。
- Guest 镜像。 scripts/build-rootfs.sh 在 Mac 上、同一个模拟器里构建 root.tar.gz:Alpine minirootfs → apk add nodejs npm … → 从 rootfs/staging 取固定版本的 npm 依赖树(在宿主上按 linux/arm64/musl 安装)→ 为 musl 重新编译 node-pty → overlay → 用 unfakefsify 导出。rootfs/overlay 里放着入口点 dsh-serve、guest 自检,以及 cordis.patch.yml —— 这是 dsh 的配置档层,用来关掉逐命令沙箱(整个 guest 本身就是沙箱),并定义 guest-ask 权限预设。
- Supervisor。 DSHHarness 挑一个空闲的 loopback 端口,通过 ISHShellExecutor 启动 dsh-serve,轮询直到 HTTP 有响应,崩溃时重启,并把状态发布到 UI。DSHRootUpgrader 每次启动都会比对内置镜像的 SHA-256 与导入的 root,一旦变化就迁移用户数据。

对模拟器所做的改动(ish-arm64,OpenMinis/ish-arm64 的 vendored fork)

| 改动 | 原因 |
| FCVTL/FCVTL2、FCVTN/FCVTN2、FCVTXN/FCVTXN2 以及向量定点 SCVTF/UCVTF/FCVTZS/FCVTZU #fbits gadget | libvips(sharp 用到,dsh 的图片附件插件)在这些指令上会 trap |
| FMOV (scalar, immediate) 解码器修复 | imm8 的第 6 位对 2.25、31.0 这类常量没有取反 —— 每个 guest 程序都算出了错误的值 |
| waitpid() 在 1 秒有界等待只是超时时,不再返回 EINTR | 之前会搞坏 gcc/g++(failed to get exit status)、node-gyp,以及任何等待子进程超过 1 秒的东西 |
| 流式 fetch() polyfill(app/RootfsPatch.bundle),返回真正的 Response 对象 | 通过 undici 走 LLM 流式(SSE)需要 WebAssembly,而 jitless V8 没有 |
| ISHShellExecutor 返回 shell 退出码,并在退出后排空管道;ContainerURL() 在没有 app group 时回退;deployment target 15.0 | app 集成 |

vendored 副本在上游的 commit 记录在 ish-arm64/UPSTREAM.md;这些修复都是自包含的,欢迎上游合并。

测试

make test # unattended on this Mac: emulator + rootfs + XCTest/XCUITest on the simulator
make test-device-unit # unit + guest-integration tests on the connected iPad
make test-device # + iPad 上的 UI 测试(先打开「设置 ▸ 开发者 ▸ UI Automation」)

| 测试套件 | 覆盖内容 | 运行平台 |
| tests/emu-test.sh | 新的 NEON 组件与 FMOV 修复(C 测试在 guest 内部用 gcc 编译)、waitpid 回归、fetch polyfill(宿主机 node,11 项检查) | macOS |
| tests/rootfs-test.sh | 像 app 那样导入 root.tar.gz、guest 自检(node-pty/koffi/ripgrep/sharp)、配置档补丁、通过 mock DeepSeek SSE 服务器完成无头 LLM 往返、每个 bridge 工具都经真实智能体回合打到 stub bridge、dsh-serve 可在 loopback 上访问 | macOS |
| DSHTests(XCTest,宿主为 app) | 端口分配器、日志环形缓冲、就绪探测、harness 状态机(假启动器 + 本地 HTTP 服务器);宿主 bridge 的鉴权/门控/限流;确认门(后台 → 拒绝、不叠加、始终应答);每条能力路由(关闭时拒绝、未触碰框架前拒绝、询问用户前先校验、空 Health 应答总要自解释);guest 集成:真实服务器应答、dsh-selftest、node/dsh 版本、root 镜像记账、完整智能体回合通过 bridge 调用 device_info 和 health_query,打到 app 内 mock 模型 | 模拟器 / 真机 |
| DSHUITests(XCUITest) | app 启动进入 DeepSeek Harness UI、状态栏里的端口、服务器日志面板、终端面板、横屏布局、Capabilities 屏幕的开关 | 模拟器 / 真机 |

状态:所有套件全绿(make test:3 项 emulator + 37 项 rootfs + 114 项 app + 6 项 UI 检查;同样的单元测试 + guest 集成测试也在 iPad Air 上跑,其中报告测试会打印每项能力实际返回的内容——只打印数量和形状,绝不打印值)。一切都在本地运行——构建需要一台 Apple Silicon Mac 并装有 Xcode、一套 emulator 工具链,以及(跑真机套件时)连接一台 iPhone 或 iPad,所以没有托管 CI。

项目结构

DSH.xcodeproj 生成的 Xcode 项目(target 为 DSH、DSHTests、DSHUITests;scheme 为 DSH) app/ Objective-C 源码、AppDSH.xcconfig、Info.plist、资源、启动屏、隐私清单 rootfs/ 烘焙进 guest 镜像的 overlay + 锁定版本的 npm manifest(staging/package.json) scripts/ build-rootfs.sh · gen-xcode-project.rb tests/ emu-test.sh · rootfs-test.sh · mock-deepseek.mjs · fetch-polyfill-test.mjs emu/(guest C 测试)· DSHTests/ · DSHUITests/ docs/ 截图 build/ 生成物:root.tar.gz、工作目录、xcresult 包(已 git-ignore) ish-arm64/ emulator(vendored,见其 UPSTREAM.md) site/ 项目页面(GitHub Pages → https://xnu.app/dsh-ios/)

DSH.xcodeproj 由 scripts/gen-xcode-project.rb 生成(make project);增删源文件后要重新运行。所有构建设置都在 app/AppDSH.xcconfig 里;bundle id 是 com.xnuapp.dsh (自己构建时改 DSH_BUNDLE_ID_PREFIX)。
iOS 能力(宿主桥接)

应用运行一个回环 HTTP 监听器,guest 内的 dsh 工具调用它来访问 iOS 能力。目前已上线:

| 工具 | 作用 | 门槛 |
| device_info、device_power | 机型、iOS 版本、语言区域、电量、发热 | 无额外门槛 |
| calendar_query、reminders_query | 你的日程和提醒事项 | 开关 + iOS 权限 |
| health_query | 步数/距离/能量、心率、睡眠、锻炼 | 开关 + iOS 权限 |
| location_query | 单次定位,附带精度——绝不持续追踪 | 开关 + iOS 权限 |
| contacts_search | 按姓名查找联系人(无法列出全部联系人) | 开关 + iOS 权限 |
| notify | 长任务完成时发通知,每小时 10 条 | 开关 + iOS 权限 |
| file_import | 你选一个文件,交给智能体 | 选择器本身就是授权 |
| calendar_create_event、reminders_create | 新建日程或提醒事项 | 每次都询问 |
| file_export | 把文件从 DSH 保存出去 | 每次都询问 |
| photo_import | 一张照片,由你在系统选择器里挑选 | 开关(选择器就是门槛) |
| share | 把文本交给 iOS 分享面板 | 开关 + 每次确认 |
| shortcut_run | 运行你的某个快捷指令 | 每次都询问 |

照片和分享面板用系统选择器/面板实现,走的是和其他能力一样的原生门槛。这里刻意完全没有剪贴板能力:读取来自其他应用的剪贴板内容,会让 iOS 每次都打断用户;写入也一并砍掉了,免得留下一个最坏情况是「智能体悄悄替换了你正要粘贴的内容」的工具。

任何会改动东西的操作都先询问,弹窗里写的是实际效果(「添加这条提醒事项?“买牛奶”,周五到期,在“家庭”列表」),而不是能力名称。没人应答的确认会被拒绝,而不是一直挂着;DSH 在后台时到达的调用会被拒绝,而不是排队弹出一个你看不见的对话框;一连串调用也不会把弹窗堆起来。

所有能力默认开启,任何一项都可以在 ⋯ ▸ 能力 里关掉。开关开着不代表数据会流动:读取仍要等 iOS 自己的权限弹窗,智能体第一次请求时才会弹出;写入仍然每次都询问。开关在智能体下一次调用工具时生效,包括一轮对话进行到一半时。任一门槛还没打开就发起的调用,会返回可恢复的 permission_denied,告诉模型用户需要做什么,而不是让这一轮卡在弹窗上。

Apple 健康有个坑值得知道:iOS 从不告诉应用读取权限是否被拒绝,所以空结果和被拒绝的类别看起来一模一样。因此健康类回答都会附带一条说明,工具也被要求转达这条说明,而不是下结论说你本月没走几步。

智能体做的每件事都有记录——每次能力调用,每次你回答过的确认,以及它在 guest 内运行过的每个工具,包括那些从不碰 iOS 的。⋯ ▸ Activity 显示时间线;每个开关标明上次使用时间;设备上刚有内容被读取时,状态条会亮起。参数以单行摘要显示,读取返回的内容从不记录,所以这份记录可以放心保留和分享。

DSH 还移除了 iSH 本身提供给 guest 的两个设备——/dev/clipboard 和 /dev/location——因为它们访问剪贴板和 CoreLocation 时绕过了上述所有机制。

能力由 app 把关,而不是由 guest 把关:每次启动随机生成的 bearer token 把其他 app 挡在外面,而按能力划分的开关(敏感能力还需原生确认)让智能体保持诚实——它以 root 身份在 guest 内运行,能读取我们放在那里的任何密钥。每次调用都记录到 Server Log。

协议、安全模型和能力/权限矩阵见 docs/host-bridge.md,已构建的内容和后续计划见 docs/roadmap.md。
机器可读的能力/工具清单在 docs/capabilities.json;任何一方偏离它,脚本测试就会失败。

FAQ

需要越狱、TrollStore 或特殊授权吗? 不需要。它是普通的沙盒 app:模拟器仅限用户态,node 以 jitless 方式运行。

速度有多快? 模拟环境下的 Node 比原生慢好几倍。在 M 系列 iPad 上聊天和日常使用工具没问题;在 guest 内跑大型 npm install 或编译会很慢。

我的数据在哪里? 在 app 容器内的 guest 镜像里:/root/.dsh(会话、凭据、设置)和 /root/workspace。两者都能在 app 更新后保留(见 Safe updates)。下载内容进入 Files ▸ DSH。

能安装更多工具吗? 可以——打开终端(>_),执行 apk add …、npm i -g …、pip …。它就是普通的 Alpine root。

为什么用 GPL? 因为 app 编译并静态链接了 GPLv3 的 iSH 模拟器。见 License。

Contributing

欢迎提交 issue 和 pull request。开 PR 前请先运行 make test(需要装有 Xcode 的 Apple Silicon Mac);模拟器改动应附带 tests/emu/neon_convert_test.c 或 tests/emu-test.sh 中的用例。升级捆绑的 dsh:编辑 rootfs/staging/package.json,运行 make rootfs,然后运行 make test-rootfs。

Credits

- DeepSeek Harness — 智能体 harness(MIT)。
- iSH 和 iSH-ARM64 — 本 app 构建所基于的模拟器(GPLv3)。
- libarchive、hterm、Alpine Linux。

License

GPL-3.0。 DSH 编译并静态链接了 GPLv3 的 iSH / iSH-ARM64 模拟器,所以整个 app 都是 GPLv3;iSH 附加的 App Store 条款见 ish-arm64/LICENSE.IOS 同样适用。完整文本见 LICENSE;第三方声明(libarchive、hterm、DeepSeek Harness、Alpine 软件包)见 LICENSE.md。

与 DeepSeek 及 iSH 项目均无关联。
预览分享卡片长什么样 ↓everettjf/dsh-ios
分享 · DeepSeek Harness Hub
everettjf/dsh-ios

DSH — 在 iPad 和 iPhone 上跑 DeepSeek Harness

这是你的仓库?认领条目

回到顶部