前言¶
在 DeepSeek Harness(DSH)里和 agent 协作时,图片和文件会进内容寻址存储,原名只留在会话日志里;用 @ 引过的本机路径也散在消息文本中,过几天很难再找。若你还用 Tailscale Taildrop 在设备间传文件,macOS 上官方几乎没有图形界面,发完也没有统一记录,接收侧文件还可能混在 ~/Downloads 里。下面介绍社区插件 dsh-attachment-panel(维护者 ysqp6-lang,分类:客户端):把发给 DSH 的附件、@ 引用路径、Taildrop 投送与接收按设备与时间列在一起,并可在面板内直接选设备发文件。
这是什么¶
dsh-attachment-panel 是一个 DSH Web 插件(npm 包名 dsh-attachment-panel,当前版本 0.6.0,MIT 许可证)。它在 DSH 宿主 webServer 上注册同源路由 /dsh-ap,不新起服务、不占新端口,零第三方依赖。侧栏「新会话」下方会出现「投送记录」入口;也可在 loopback 打开 http://127.0.0.1:19387/dsh-ap,用 ?scope=file|send|recv 等参数直达某个标签。README 写明 macOS 优先(补 macOS Tailscale 缺少 Taildrop 图形界面的缺口);Linux / Windows 上部分能力会降级,见下文平台支持。
它补的四个洞¶
- macOS 没有 Taildrop 图形界面,终端
tailscale file cp发完无面板级记录。 - DSH 附件实体以 sha256 存盘,原名需回会话翻找。
@引用路径只存在于当时那条消息里。- 其他设备 Taildrop 投来的文件落在下载目录,来源不易区分。
核心功能¶
面板共五个标签,搜索对全部标签生效(文件名、会话名、目录、扩展名、类型词等)。
| 标签 | 内容 | 常见操作 |
|---|---|---|
| 图片 | 发给 DSH 的图片附件(按天、时间倒序) | 大图、翻页、文件管理器定位、复制路径 |
| 文件 | @ 引用过的本机路径 |
定位、复制、默认程序打开 |
| 投送 | Taildrop 发出记录(按目标设备分组) | 设备筛选、+ 投送文件 |
| 接收 | Taildrop 收件相关 | inbox 收下、定位、打开 |
| 工具图片 | DSH 产出或读到的图(截图、预览等) | 同「图片」 |
投送:点 + 投送文件 → 选设备(读 tailscale debug localapi file-targets,离线置灰)→ 多选文件 → 带进度上传 → 宿主临时目录 → tailscale file cp → 清理临时文件。成功记录写入 ~/.dsh/attachments/v1/panel-sends.jsonl 并进入索引。单文件软上限 2 GB(SEND_MAX_BYTES,非 Tailscale 官方限制)。
接收:macOS 上区分「待接收」(/Library/Tailscale/incoming-files/,可执行等价于 tailscale file get ~/Downloads 的收下)与「疑似收到」(~/Downloads 近 14 天内无浏览器/App xattr 标记的文件,启发式,README 说明无法 100% 确认)。Linux / Windows 跳过疑似过滤,主要列待接收。
索引数据来自会话 session.v4.jsonl.zstd、附件目录 ~/.dsh/attachments/v1/objects/、投送相关的 tool/call 与 panel-sends.jsonl;缓存 panel-index.json、缩略图目录可删后重建。
安装与启用¶
官方 CLI 安装(会挂 bundle 进 profile):
dsh plugin --profile desktop add dsh-attachment-panel
也可手动把包 link 进 profile 的 dependencies,并在 dsh.profile.bundles 中加入 dsh-attachment-panel(插件自带 cordis.patch.yml 可自动 insert)。装完重启 DSH 后侧栏出现「投送记录」。
卸载:从 profile 的 dependencies 与 dsh.profile.bundles 移除,或执行 dsh plugin remove。
开发注意:改 lib/client.js 或 lib/panel.html 刷新页面即可;改 lib/index.js(宿主)需重启 DSH。
典型用法¶
- 日常在 DSH 里发图、用
@/path引用文件,打开「投送记录」按天或搜索找回,不必滚会话。 - 在「投送」标签用 + 投送文件 向在线 Tailscale 设备传文件,历史与 agent 执行过的
tailscale file cp一并索引(终端手动 cp 不进 DSH 历史)。 - macOS 在「接收」处理 inbox 与疑似 Taildrop 文件;需要更准时 README 建议调整 Taildrop 落点/流程走 inbox。
- 深链:
http://127.0.0.1:19387/dsh-ap?scope=send等直达标签。
宿主提供 REST API(前缀 /dsh-ap/api/),包括 index、thumb、raw、targets、send、received、receive-pull、reveal、reveal-path、open-path、health 等,详见仓库 README「路由」一节。
平台支持与限制¶
| 能力 | macOS | Linux | Windows |
|---|---|---|---|
| 附件/文件/投送历史/UI | 支持 | 支持 | 支持 |
| 缩略图 | sips |
回落原图 | 回落原图 |
| Taildrop 发收 | 支持 | 支持(inbox 路径不同) | 支持 |
环境变量 DSH_TAILDROP_TAILSCALE 可指定 tailscale 可执行文件路径。
务必了解:Taildrop 仍为 alpha;协议无回执,面板无法确认对方是否收到;tagged 节点限制等以 Tailscale Taildrop 文档 为准。插件路由仅 loopback,文件 reveal/open 走白名单;投送目标仅限 file-targets 返回的设备名。插件以当前 DSH 进程权限运行,安装前请自行查看源码与 MIT 许可证。
Node 引擎要求 >=22.19,peer 依赖 @deepseek-ai/cordis ^4.0.4。仓库提供 npm test(test/smoke.mjs)做本地冒烟。
结尾¶
dsh-attachment-panel 把 DSH 附件、@ 路径与 Taildrop 投送收拢到同一面板,适合经常在 Harness 里传文件、跨设备 Taildrop、又需要可追溯列表的开发者。DSH 生态强调「一切皆插件」;社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
- 目录页:https://www.skillhub.cn/plugins/ysqp6-lang/dsh-attachment-panel
- GitHub:https://github.com/ysqp6-lang/dsh-attachment-panel