DSH 本地路径附件插件

DSH 本地路径附件

把资源管理器或 Finder 中的文件变成可移除的附件卡片,向 Agent 传递真实绝对路径,同时不上传、不复制文件内容。

快速开始 · English · 版本发布 · 反馈问题

版本 GitHub Stars 下载量 许可证 11 项测试通过 DSH Desktop

--- 一次拖入一个或多个文件,它们就会在 DSH 输入框上方变成简洁的附件卡片,显示文件名、完整路径和移除按钮。发送消息时,Agent 收到的是未经包装的原始路径: ```text C:\Users\you\Desktop\研究报告.pdf ``` 源文件始终留在原目录。插件不会读取文件、上传文件,也不会在项目工作区创建副本。 ## 为什么需要这个插件?
📎 原生风格附件卡片

文件显示为可移除卡片,而不是把冗长的绝对路径直接堆在输入框里。
📍 真实绝对路径

通过 Electron 安全获取磁盘真实路径,支持空格、中文名、UNC 路径及工作区外文件。
🛡️ 零复制设计

草稿中只保存路径引用;文件字节留在原目录,并继续受到 DSH 沙箱策略约束。
## 功能 **拖放与卡片管理** - 在 DSH Desktop 窗口任意位置拖入一个或多个文件。 - 卡片显示文件名、完整绝对路径及一键移除按钮。 - Windows 路径按不区分大小写方式去重。 - 支持空格、中文文件名、盘符路径、UNC 路径和 POSIX 路径。 - 每个草稿最多保留 50 张本地路径卡片。 **可靠的输入状态生命周期** - 每张卡片都由原生 Composer 引用节点承载。 - 自动沿用正常发送、发送失败恢复、清空草稿和会话隔离行为。 - Client UI 重载后,可将草稿中的持久标记重新恢复为卡片。 - 发送时只输出原样绝对路径,不附加说明性前缀,也不转义包装。 **与原有能力安全共存** - 以新增项注册到 `conversation.input.dock`,不会替换系统自带的图片附件 Slot。 - 只有检测到 DSH Desktop preload 桥接时才接管磁盘文件拖放。 - 普通浏览器无法安全获取绝对路径时,原有拖放逻辑完全不受影响。 ## 快速开始 ### 1. 下载 从 [v0.1.1 发布页面](https://github.com/WangZetian-IVERSON/dsh-local-path-attachments/releases/tag/v0.1.1)下载可直接安装的 [`dsh-local-path-attachments-0.1.1.tgz`](https://github.com/WangZetian-IVERSON/dsh-local-path-attachments/releases/download/v0.1.1/dsh-local-path-attachments-0.1.1.tgz)。 ### 2. 安装到 Desktop Profile ```powershell cd "$env:USERPROFILE\.dsh\profiles\desktop" pnpm add "D:\path\to\dsh-local-path-attachments-0.1.1.tgz" ``` ### 3. 启用 Bundle 在 Desktop Profile 的 `package.json` 中,把 `dsh-local-path-attachments` 追加到现有 `dsh.profile.bundles` 数组: ```json { "dsh": { "profile": { "bundles": [ "dsh-local-path-attachments" ] } } } ``` 请保留原有所有 bundle,只追加这一项。安装后重启一次 DSH Desktop。 ### 4. 使用 1. 打开一个 DSH 会话。 2. 从资源管理器或 Finder 把文件拖入 Desktop 窗口。 3. 检查或移除生成的附件卡片。 4. 发送消息,让 Agent 读取或处理对应路径的文件。 ## 工作原理 ```mermaid flowchart LR A[资源管理器 / Finder] -->|拖入 File 对象| B[Electron preload 桥接] B -->|webUtils.getPathForFile| C[真实绝对路径] C --> D[Composer 引用节点] D --> E[可见附件卡片] D -->|发送原样路径| F[Agent] A -. 文件字节留在原目录 .-> A ``` 隐藏的引用节点负责草稿和发送生命周期;可见卡片只是该引用在 Dock 中的 UI 投影。剪贴板安全标记让卡片能在 Client 重载后恢复,同时完全不保存文件内容。 ## 兼容性 | 环境 | 状态 | 行为 | | --- | --- | --- | | Windows DSH Desktop | ✅ 已验证 | 已端到端测试绝对路径、多文件拖放、移除、草稿恢复及发送。 | | macOS / Linux DSH Desktop | 🧪 路径已支持 | Codec 支持 POSIX 路径,但维护者尚未在这些平台完成真实设备验证。 | | 纯浏览器 Web GUI | ➖ 主动降级 | 浏览器 `File` 不暴露绝对路径;插件不会拦截系统原有拖放行为。 | ## 权限与隐私 - 绝对路径会成为用户消息的一部分,其中可能包含用户名或敏感目录名称。 - 文件字节不会经过本插件。 - Agent 读取工作区外文件时,仍受当前 DSH 沙箱和审批策略限制。 - 路径卡片不能绕过操作系统权限或 DSH 安全边界。 - 源文件被移动或删除后,已有卡片不会自动更新。 ## 开发与打包 ```powershell git clone https://github.com/WangZetian-IVERSON/dsh-local-path-attachments.git cd dsh-local-path-attachments pnpm install pnpm check pnpm pack ``` `pnpm check` 会构建 Host/Client Bundle、完成全部 TypeScript 类型检查、运行 11 项单元及 jsdom 集成测试,并检查 DSH 懒加载模块包装和外部依赖。 | 层级 | 技术 | | --- | --- | | 插件组合 | Cordis / `dsh.bundle.patch` | | Client UI | React 18 + DSH Slots | | 输入集成 | DSH input-trigger 引用节点 | | 桌面路径桥接 | Electron `webUtils.getPathForFile` | | 语言与构建 | TypeScript 6 + tsdown | | 测试 | Vitest + jsdom | ## 发布包校验 `v0.1.1` 安装包 SHA-256: ```text e41e542365470558a0d4fe30434727a007c70dd7cb2c967112bac44b9720c372 ``` 完整版本记录见 [`CHANGELOG.md`](CHANGELOG.md)。 ## 参与贡献 欢迎提交可复现的错误报告、聚焦的功能建议、文档改进和 Pull Request。反馈时请附上 DSH Desktop 版本、操作系统、复现步骤以及相关 Client 诊断信息。 如果这个插件对你有帮助,也欢迎为仓库点一个 Star,让更多 DSH 用户发现它。 ## 许可证 [MIT](LICENSE) © WangZetian-IVERSON