dsh-at-file
FSMargoo/dsh-at-fileCodex 风格的 `@file` 文件引用,输入框里直接搜索并引用工作区文件。
面向手机的 DeepSeek Harness 界面,提供可安装 PWA、响应式导航,以及 Agent 成功完成时的 Web Push 通知。
中文 | English
Turn DeepSeek Harness into a workspace you can actually keep using from your phone: one-handed navigation, a composer that stays usable around the keyboard, an installable app surface, and a notification when an agent finishes successfully.
dsh-ui-mobile is a mobile experience plugin for the DeepSeek Harness Web shell. It keeps the existing conversation UI intact, then adapts the assembled three-column shell for touch, PWA installation, and completed-task notifications below the phone breakpoint. Desktop and tablet layouts remain unchanged.
If you check or start Harness tasks from a phone, this plugin removes recurring workflow friction rather than merely changing the visual theme:
It is well suited to Harness users who monitor long-running work from a phone, start work while away from their desk, want a lightweight workspace from a Home Screen icon, or want the operating system to surface completed-task updates.
You need a running DeepSeek Harness Web shell. This is a client plugin, not a standalone web application.
# Install from npm into a DSH profile
dsh plugin --profile <profile> add dsh-ui-mobile
# Or install from this repository / GitHub
dsh plugin --profile <profile> add github:jasondu/dsh-ui-mobile
The package ships its own cordis.patch.yml. It disables the host's built-in ui-mobile entry and mounts this replacement, preventing two PWA route sets and two mobile style layers from running together. You normally do not need to edit the host patch manually.
@deepseek-ai/dsh-client-*packages are runtime peer dependencies. Install this plugin in a DSH Web environment that provides the corresponding Harness dependencies.
| Task | How it works |
|---|---|
| Open the sidebar | Tap the top-left menu, or swipe right from the leftmost 24px of the screen. |
| Close the sidebar | Tap the menu again or the dark area outside the drawer. |
| Start a conversation | The menu remains available while the new conversation is blank. |
| Send a message | The virtual keyboard advertises Send; Enter follows Harness's normal send path. |
| Return to desktop | At 768px and above, the original Harness three-column layout is used. |
The phone sidebar uses a compact min(78vw, 300px) width: session rows remain readable while a deliberate scrim area remains available for dismissal.
The node half of the plugin injects the manifest and iOS PWA metadata while serving the document, and serves icons, the manifest, and the service worker from /pwa/.
The plugin sends a notification only for a successful agent completion (turn/end with reason.kind: completed). Set VAPID credentials and a durable subscription store for the Web service; never commit private keys or subscriptions.
# Set all three together; the first launch persists them at DSH_WEB_PUSH_VAPID_PATH.
DSH_WEB_PUSH_VAPID_SUBJECT=mailto:ops@example.com
DSH_WEB_PUSH_VAPID_PUBLIC_KEY=<base64url-public-key>
DSH_WEB_PUSH_VAPID_PRIVATE_KEY=<base64url-private-key>
# Later launches need only this persisted, mode-0600 file.
DSH_WEB_PUSH_VAPID_PATH=/var/lib/dsh/vapid.json
DSH_WEB_PUSH_STORE_PATH=/var/lib/dsh/push-subscriptions.json
In the installed PWA, choose Enable task completion notifications and grant the browser permission. iOS requires iOS 16.4 or later. DSH_WEB_PUSH_VAPID_SUBJECT must be a valid email address or real https:// URL; Apple rejects placeholder domains such as .invalid.
The plugin composes through Harness slots, services, and stable data-* attributes. It does not duplicate the shell or modify Harness source. Its mobile controller reads existing AppFrame state, its responsive stylesheet targets only plugin-stamped attributes, and its node half owns the PWA and Web Push routes.
Mobile layout, PWA behavior, and notifications do not change model requests, system prompts, tool schemas, or conversation content. Web Push is emitted only after the host has already recorded a successful agent completion.
None. This plugin does not participate in request assembly.
pnpm install
pnpm bundle
pnpm test
Pushing a v* tag starts GitHub Actions: dependencies are installed, the package is built, publint runs, and npm publishing follows. Stable versions use latest; prereleases use next.
MIT — see LICENSE.