dsh-phonephoto-ezinput: Scan QR code to Send Photos to Specific DSH Conversations

前言

在 DeepSeek Harness(DSH)里做软件开发时,对话里经常要贴现场照片:白板、硬件标签、报错界面。用手机拍最顺手,但传统做法多是微信/邮件传到电脑再拖进窗口,步骤多,还容易传错会话。下面介绍的插件在电脑端 DSH 进程里起一个局域网 HTTP 小服务,手机浏览器扫码即可选对话、拍照或选相册,图片以「待发送」消息挂到该对话底部,你在 PC 上补一句话再发,不会自动触发模型。

这是什么

dsh-phonephoto-ezinput(维护者 IceyVanci,分类:客户端)面向「主要用 PC 写代码、手边有现役或淘汰手机」的场景:在 DSH 里开局域网服务,手机零安装 App、不需要 HTTPS,用浏览器原生能力完成拍照与上传,并投递到你指定的对话。

项目地址:SkillHub 目录页、GitHub 仓库。社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。插件以当前 DSH 进程权限运行,安装前应自行查看源码与 MIT 许可证。

核心功能

手机端流程

扫码 → 在手机上选择目标对话 → 拍照或从相册选图 → 预览确认后发送。最多 4 张、单张不超过 10 MB、合计不超过 25 MB;发送前可预览、删除、重拍。

电脑端表现

图片到达后,以一条类似「发送自 192.168.1.23」的待发送消息挂在对话底部,旁侧有缩略图;你补一句话发出后,图片才随这一轮进入上下文。默认不会自动跑模型。

压缩与安全

客户端压缩:长边 2048、JPEG 质量 0.85、自动修正 EXIF 方向,单张约 300~400 KB。默认仅接受私网来源;CSP nonce、magic bytes 校验、上传限速、IP 级授权;已配对 IP 在有效期内可免重复输 token。

设置面板

装好后在 更多 → 设置 → 手机照片便捷输入 可查看:二维码、局域网链接、6 位备用配对码、已配对设备列表(可逐条删除或全部撤销)、配对有效期(1 / 3 / 7 / 30 天)、监听端口与 UI 心跳等。面板数据优先走同源路由 /phone-shoot/*;设备与设置落在 ~/.dsh/phone-shoot/(目录名沿用早期版本,改名会导致已配对手机全部失效)。

投递模式

配置文件 inject.mode 可调行为:默认 inbox(待发送);另有 display(只写入、不唤醒)、followup(写入并立刻回复)、steer(插入当前回合)、draft(输入框草稿,当前版本不渲染)。

环境要求

  • DeepSeek Harness 桌面端 0.2.1-rc.5(或相近版本)
  • Node.js 20+(插件运行在 DSH 进程内,无需单独安装 Node)
  • 手机与电脑在同一局域网

安装与启用

官方 README 给出的安装方式为本地路径包,而非命令行 plugin add:

  1. 在 DSH 应用内打开 设置 → 插件 → 安装本地路径包,选择插件所在目录。
  2. 装完或更新代码后,完整重启应用才生效:host 半边(服务、投递)开关插件可重载;client 半边(设置面板)在启动时构建进 Web UI,只开关插件不会刷新界面。README 建议装成真实目录、避免 link: 联接与实体目录并存,以减少重复 bundle 等问题。
  3. 配对设备与设置存在 ~/.dsh/phone-shoot/,重启不丢,手机上不必重新扫码。

当前 package 版本为 0.1.0(以仓库 package.json 为准)。

典型用法

工作方式可概括为:

电脑:插件起 HTTP 服务(默认 8788)→ 生成二维码
手机:扫码 → 选对话 → 拍照/选图 → 预览 → 发送
电脑:图片按 inject.mode 进入对话

先做配对:在设置面板扫二维码或打开局域网链接,必要时用 6 位短码配对。再在手机上选要对讲的 session,拍完确认发送。回到 PC,在对应对话底部看到待发送项,编辑说明文字后发送。

若需改默认说明行,可在配置里调整 inject.noteTemplate(例如 '发送自 {ip}');设为空串则只发图、不插入该行。

默认服务片段(完整项见仓库 README):

server:   { host: 0.0.0.0, port: 8788, portRetries: 10, privateOnly: true }
inject:   { mode: inbox, noteTemplate: '发送自 {ip}', sourceKind: user, pendingTtlMs: 600000 }
upload:   { maxFiles: 4, maxBytes: 10485760, maxTotalBytes: 26214400, targetMaxEdge: 2048, quality: 0.85, ratePerMinute: 12 }

健康检查示例:GET http://127.0.0.1:8788/api/health 返回 { ok, version, port, mode }(排障时 README 建议先测此项)。

适用场景与注意

适合:长期在 PC 上使用 DSH,需要快速把物理世界里的画面(设备、纸质资料、屏幕外物)放进指定对话,且希望上传前在手机上预览、在 PC 上控制是否触发模型。

注意:

  • 设备以 IP 为键:同一 NAT 后多台手机可能被合并为一条配对记录。
  • 草稿队列在内存中,应用重启即丢;draft 模式因上游 API 限制当前不可用。
  • 端口 8788 被占用时会在原端口重试,仍失败则递增,最多试 10 次(portRetries: 10)。
  • 若出现 web boot: 1 entry did not activate 或设置面板 Failed to fetch,README 排障节说明常见原因为重复安装、旧 client bundle 等,需清理 node_modules 中同名插件副本并重启。

结尾

dsh-phonephoto-ezinput 把「手机拍照 → 指定 DSH 对话」收成扫码与预览确认几步,默认以待发送消息等待你在 PC 侧决定是否提交,并带设置面板与私网安全默认值。进一步了解实现与路由表,见 GitHub README 与 SkillHub 插件页。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye