Pocket DSH
"Curiouser and curiouser!"
DeepSeek Harness 的轻量移动端伴侣插件。
本仓的包名是 dsh-pocket-glide,GitHub 仓库是 Gaudi-XIX/dsh-pocket-glide;它与 GitHub 上的 shaobeichen/dsh-pocket 是互不相干的两个项目,而 npm 上的裸名 dsh-pocket 又是别人发布的第三个包(v2.12.0,GPL-2.0)——别装错。
它的核心定位非常明确:不在手机端复刻桌面端的全套系统配置与复杂文件树,只保留移动交互的核心闭环——发送提示词、查看流式回复、审批工具权限与远程运维。
为什么做 Pocket:设计取舍
DSH 在电脑端执行重构排查、代码修改或跑单测时,任务往往需要持续十几分钟。在这些长任务运行期间,用户离开电脑后,最关键的需求只有两点:
- 随时发送指令:离开工位时,随时在手机上新建或切换会话,输入新的提示词,让电脑端在本地代码库中继续执行;
- 处理交互门禁:当 Agent 遇到敏感工具权限需要授权,或调用
ask_user_question等待人工决策时,在手机端及时点击确认放行,防止长任务一直挂起空等。
如果把桌面端全套的模型配置、深层设置项和完整文件目录全部搬到移动端,在窄屏触屏上操作繁琐且极易误触。
Pocket 的选择是做明确的减法:桌面端负责完整的代码生产与系统管理,手机端只做轻量、低干扰的随身交互。
功能与能力清单
1. Pocket 独有的特点(差异化实现)
- 透传白名单:手机端不暴露 DSH 系统级配置项,主页仅展示置顶会话与最近 24 小时活跃会话,避免在长列表和深层菜单中翻找;
- 原生轻量直出(受限环境友好):不引入 React/Vue 等前端框架,采用纯手写原生 HTML + CSS + JS 直出(资源体积约 340 KB)。内存占用仅数兆,无分片瀑布流加载,在微信内置浏览器等受限 WebView 里秒开且不闪退;
- 免固定域名的临时隧道自愈:无公网 IP 和固定域名时,支持手机端一键触发宿主优雅重启;重启后随机分配的 Cloudflare 临时隧道公网地址,会自动通过 Webhook(微信 Server酱/WxPusher 或 Bark)推送到手机通知,点击通知直接连回新宿主;
- 针对触屏动力学的细节处理:
- 会话尾包预拉取:列表后台自动预热会话末尾消息,点进会话无白屏等待;
- 流式上滑不强行拽底:AI 高速打字时,用户一旦向上滑动屏幕查看上下文,贴底逻辑自动解除,绝不抢夺视口;读完轻点向下箭头平滑回底;
- 软键盘动态高度避让:键盘唤起时输入框精准上浮,不遮挡输入区、不顶碎布局;
- 单折叠卡直播:思考链与工具调用统一收拢在单张折叠卡内平滑更新,无跳屏抖动。
2. 基础功能(大家都有,我们也完整支持)
- 连接与网络:
- 同一 Wi-Fi 下局域网扫码直连(0.0.0.0:43127,遇冲突自动让号至 43128);
- 基于 Cloudflare Quick Tunnel 的公网加密穿透(Host 出站,无需路由器端口映射);
- 会话与交互:
- 多会话管理:创建会话、切换会话、重命名、删除会话;
- 消息发送与附件:支持长文本输入、图片与通用文件上传;
- 流式输出与渲染:SSE 实时流式传输、思考过程折叠展示、Markdown 排版与代码块高亮;
- 门禁审批:敏感写操作一键放行/拒绝、
ask_user_question选项交互响应; - 任务状态感知:Subagent 并发任务运行态感知与状态标记;
- 外观与形态:
- 深色模式:支持跟随系统或手动切换夜间模式,补齐了禁用按钮等状态的暗化覆盖;
- PWA 模式:支持在 Safari / Chrome 中「添加到主屏幕」作为全屏应用运行。
3. 我们没有的功能(设计边界与路线说明)
明确不做(属于故意砍掉的非目标)
- 不提供全量桌面系统配置与插件管理:
- 原因:环境变量、profile 编排、插件安装等属于桌面端重型管理职责,在移动端窄屏上配置容易误触且增加认知负担。环境维护请留在电脑端操作。
- 不提供完整工程文件树浏览与在机代码编辑器:
- 原因:移动端定位为需求输入与门禁放行,不适合做重型代码阅读与修改。代码改动由本地 Agent 完成,最终 diff 审查建议留在电脑大屏进行。
- 不自建中心化云端服务器与账号系统:
- 原因:坚持纯本地运行与点对点出站穿透,提示词与代码数据绝不在第三方云端留存。
- 不打包独立原生 App(APK / IPA):
- 原因:避免客户端安装与发版审核成本,保持纯 Web 链接点开即用(尤其在微信内置浏览器内秒开秒关)。
规划推进中(TODO 路线图)
- 方案 C:服务端事件驱动推送:目前采用方案 B(按需对齐)维持列表与会话状态,后续将向服务端长连接事件推送演进;
- 结构化任务停止原因外带通知:目前推送通道支持完成通知与重启新地址回传,细粒度的异常中断原因推送正在补齐判定逻辑;
- 更多通知渠道接入:评估接入飞书、Telegram 等 Webhook 通道。
快速使用
1. 安装与启用
本仓是本地插件,没有发布到任何包市场,装法只有一条:在仓库根目录先跑 node tools/install-to-profile.mjs --dry-run 看它要改什么,确认后跑 node tools/install-to-profile.mjs —— 它只改 DSH profile 的 package.json 两处(依赖指向本仓、dsh.profile.bundles 加一条),改前自动备份,加 --install 会顺带跑 pnpm install;装完重启 DSH 生效。
2. 扫码配对
- 点击 DSH 桌面端侧边栏的 Pocket 图标打开配对面板;
- 手机打开相机或微信扫码即可直接访问(支持在 Safari/Chrome 中「添加到主屏幕」全屏使用,也支持在微信内直接打开)。
3. 配置外带通知(可选)
在桌面配对面板中填入推送凭据(微信 Server酱 / WxPusher / Bark):
- 任务完成或等待输入时接收手机震动提醒;
- 触发远程重启后,新生成的公网地址自动推送至手机。
运行环境
- 宿主依赖:DeepSeek Harness
v0.2.0-rc.1及以上,Node.js^22.19.0 || >=24.0.0; - 架构形态:宿主进程内加载(In-Process Cordis Plugin),不是独立进程,随 DSH 启动而起、随退出而止,无独立后台常驻守护进程;
- 改动生效:改
lib/**或新增 bundle 必须重启 DeepSeek Harness(junction 是活的,插件随宿主启动装载);手机端还要完全关闭重开页面才能拿到新壳,下拉刷新拿到的仍是旧壳; - 架构细则:形态、桥的宿主内生命周期、目录与关键常量见
docs/SPEC-ARCHITECTURE.md; - 网络端口:默认监听
0.0.0.0:43127(占用自动顺延至43128,支持通过DSH_MOBILE_PORT环境变量显式指定); - 外网访问:内置出站型 Cloudflare Quick Tunnel,无需公网 IP 与路由器端口映射。
版本与变更账:逐版的对外变化(修复 / 契约变更 / 已知边界)见
CHANGELOG.md,其最新一节对应当前package.json的version;更细的逐笔施工账在git log与 flow change 卡里。本仓从0.2.0起维护这份变更账。
"In case I don't see you, good afternoon, good evening, and good night."
开源协议
本项目采用 MIT 协议开源。
No comments yet. Be the first to write one.