chinahhy/DSH-plugins--packages-dsh-tether-ios ↗★ 0
dsh-tether-ios
iOS remote companion for DSH Desktop 0.2.0-rc.2 on macOS Apple Silicon 适合使用Apple Silicon Mac并希望在iOS设备上远程连接使用DSH的用户。
インストール
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:chinahhy/DSH-plugins#71f84addab8bab34de83ead863ea86df0269dec9&path:packages/dsh-tether-iosドキュメント
README 全文を読む ↗dsh-tether-ios
macOS Apple Silicon companion for the iOS arm64 app at chinahhy/dsh-tether ios-only. Verified with DSH Desktop 0.2.0-rc.2 only, Mac mini M4 and an iOS arm64 iPhone. On 2026-10-05 the maintainer confirmed normal physical-device use and an outdoor cellular connection to the home DSH. The actual direct/relay path and sleep/wake recovery were not separately established. See validation scope.
Architecture
Desktop's existing desktop profile → owned tether-host → iroh → iOS app.
No additional DSH runtime or CLI daemon. ALPN dsh-tether/0, Pair/Hello,
Proxy, Approval/ApprovalCancel and field spellings remain compatible.
Approvals are notifications only; decisions stay in DSH's normal web UI.
The sidebar “连接 iPhone” button generates an expiring pairing string on demand. Only the local authenticated Mac window can manage pairing/revocation. There is no automatic startup code, console credential output or settings-file export. A paired phone has full DSH operator access. Keep the phone and Mac trusted. Pairing: 6 digits, 10 minutes, at most 3 wrong attempts per window. Revocation closes active connections. The phone app's existing localhost-proxy limitation still applies; the plugin does not create an iOS background push service.
Installation
The published main package includes the verified bin/darwin-arm64/tether-host.
No Rust compiler, installation hooks or separate download are needed. Install the
GitHub subpackage through DSH's plugin manager:
github:chinahhy/DSH-plugins#path:/packages/dsh-tether-ios
For manual/offline installation, use the versioned .tgz and SHA256SUMS from
GitHub Releases.
Use the existing Desktop desktop profile. Do not create an extra web profile.
Development branches intentionally omit native binaries; use published main
or a complete CI archive. Existing local link/file installs do not automatically
follow GitHub updates and require an explicitly authorized source migration.
The official Desktop profile/package manager owns dependency and bundle changes. The bundle adds the host plus in-app directory browsing, and disables the exact 0.2.0-rc.2 automatic picker. While enabled, folder selection on the Mac also uses in-app browsing. Removing the bundle restores the base picker unless overridden by another user patch. No persistent user patch is directly written by this plugin.
Files and removal
`` below means the application's ctx.dshHomePath() result, normally
~/.dsh; no HOME fallback is guessed by this plugin.
| Location | Owner / behavior |
|---|---|
/profiles/desktop/node_modules/dsh-tether-ios/ | Installed package and bin/darwin-arm64/tether-host; package-manager symlinks/store may affect physical location |
/profiles/desktop/package.json, lockfile, bundle inventory | Existing DSH package manager updates these when installing/removing |
/data/dsh-tether-ios/identity.key | Host identity, 0600 |
/data/dsh-tether-ios/paired.json | Device allowlist, 0600; containing plugin directory 0700 |
/data/dsh-tether-ios/.identity.key.tmp, .paired.json.tmp | Atomic-write crash remnants, normally absent |
| DSH-owned package cache/store | Package-manager controlled; may retain archive/package after uninstall |
| iOS application's own sandbox | Existing iOS identity and host list; unaffected by Mac uninstall |
Disable/remove the plugin using DSH's plugin manager. The disposer closes routes, stops renewal, ends sidecar stdin, sends SIGTERM and escalates to SIGKILL after 2 seconds if needed. Parent-pipe EOF also stops the sidecar after a parent crash. There is no LaunchAgent or login item. Confirm the sidecar has exited.
Uninstall removes the package/bundle through DSH. Pairing data is deliberately
preserved for reinstall; for a full reset, after stopping the plugin, explicitly
delete only /data/dsh-tether-ios/ and remove the saved computer from
iOS. This destroys that host identity and requires re-pairing. Do not delete the
whole DSH home or shared package cache. No automatic deletion hook runs.
No /usr/local/bin, npm global installation, Homebrew, new ~/.xxx, external
runtime, permanent background service, or real account credentials are needed.
The browser session cookie stays in parent/child memory and is never logged.
Development / artifacts
node scripts/build.mjs; node --test test/*.test.mjs require only Node 24.
Rust build/test and official DSH API integration run on the macOS arm64 Actions
runner. scripts/build-sidecar.mjs uses Cargo.lock and targets aarch64-apple-darwin.
Actions builds and tests the locked macOS arm64 host, verifies the native checksum
and licenses, then promotes only this package to main and creates a versioned
Release. Source installs and tgz installs both include the binary. It has an
ad-hoc linker signature; it is not a notarized distribution. No npm publication
or global installation is involved.
Remaining validation boundaries
- Full uninstall/reset and all reload paths; normal Desktop quit/restart was verified.
- Exhaustive iPhone UI, reconnect/revocation and folder browsing scenarios.
- Identify direct versus relay transport, force relay fallback, and test sleep/wake and app foreground return. Outdoor cellular use was confirmed by the maintainer.
- Approval notification while connected and approval decision in the real web UI.
- Gatekeeper/quarantine behavior with the actual downloaded binary and signed iOS IPA.
- Narrow-screen usability; this candidate does not copy upstream's fragile CSS selectors.
See API evidence and upstream changes.