dsh-at-file
FSMargoo/dsh-at-fileCodex 风格的 `@file` 文件引用,输入框里直接搜索并引用工作区文件。
在会话输入框添加 📎 选图按钮,通过系统文件选择器选取参考图并注入官方附件管线(缩略图、数量与大小校验、随消息上传),绕开拖拽环境问题。
DeepSeek Harness Web GUI 插件:在会话输入框左侧添加一个 📎 按钮,通过系统文件选择器添加附件。
.txt / .md / .markdown / .docx)→ 浏览器读出内容后 POST 到本地服务端暂存,消息里只插入一段极短的"回执"(保存路径 + 字符数 + 预览),正文不进会话上下文,agent 用普通读取工具按需取用于是:脚本把选中文件的内容暂存为 ~/.dsh/picker-attachments/ 下的本地文件,消息里给出绝对路径 + 短预览。浏览器端无法偷懒绕过,但服务端 shell(host 插件)可以——它运行在 dsh web 进程里,有完整文件系统访问权。
.docx 在浏览器内用迷你 ZIP 解析 + DecompressionStream("deflate-raw") 提取正文后再暂存。
| 护栏 | 说明 |
|---|---|
| 单文件暂存上限 | 25 MB(超出返回 413) |
| 文件名 | 自动清洗非法字符并加时间戳前缀,防路径遍历 |
| 暂存目录 | ~/.dsh/picker-attachments/ |
| 降级 | 若暂存接口不可用,自动回退为全文内联(单文件 3 万字符截断) |
点击 📎 → <input type="file" multiple>
├─ image/* → DataTransfer + 合成 drop → 官方 ComposerAttachments 接收
└─ 文本/docx → 浏览器读出 → POST /dsh-image-picker/store
→ 落盘 ~/.dsh/picker-attachments/<time>-<name>
→ 插入"回执"(路径+字符数+120字预览)到输入框
投递通道:host 壳(lib/index.js)激活时注册
GET /dsh-image-picker/client.js —— client 脚本,每次请求现读磁盘(改完刷新页面即生效)POST /dsh-image-picker/store —— 文本类附件落盘webServer.tapIndex 注入 <script defer> 标签(whale-widget 同款模式)client 端是免模块系统的自执行 IIFE,不对 window.__ModuleLoader__ 有任何依赖。
dsh plugin --profile web add github:liujia-io/dsh-image-picker
# 重启 dsh web 生效
要求:仓库已声明 dsh.bundle;正在申请收录 awesome-dsh-plugin(PR #3278)。
/store 落盘路由;文档类支持lib/index.js host 入口 + "." 导出;client 改经 webServer 路由投递