DeepSeek Harness Hub
← 返回列表

附件选择面板navid-kianfar/dsh-add-assets

DeepSeek Harnessspec-screenedui在 GitHub 查看 ↗
⚠ 装前注意

扩展加号按钮,选文件文件夹并预览附件

基本兼容但装前注意:未发布到 npm registry,仅可从源码安装 · 最近上游提交 2026/8/26 · 已提供中文文档

DeepSeek Harness 编辑器 + 按钮上的选项面板——从项目或机器上任意位置选择文件和文件夹,从你的设备上传,或运行斜杠命令——带有内联路径标签和 Claude Code 风格的附件预览。

综合分
29.9
GitHub 分
29.9
用户评分
★ Stars
0
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add navid-kianfar/dsh-add-assets
未发布到 npm registry,仅可从源码安装,改用 GitHub 源安装
数据截至 2026/8/27(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查⚠ 装前注意

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

npm 包@achasoft/dsh-add-assets(未发布到 npm,仅可源码安装)
Node 引擎要求 ^22.19 || >=24 · 基线 Node 22.19 满足
dsh CLI 依赖未声明 dsh 版本约束
入口文件main/exports/bin 已声明

未发布到 npm registry,仅可从源码安装

验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/8/30 10:54:55

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-api-remotes@deepseek-ai/dsh-attachment@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-input-trigger@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-settings@deepseek-ai/dsh-client-ui-settings-plugins@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-file-reference
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

@achasoft/dsh-add-assets

为 DeepSeek Harness Web 客户端的 composer 的 + 添加一个选项面板,并提供类似 Claude Code 风格的已附加内容预览。

harness 自带的 + 只做一件事:打开斜杠命令菜单。此插件将这一个入口扩展为多个选项——添加文件、添加文件夹、从此设备上传、斜杠命令——每个选项都有键盘快捷键,且每个都接入 composer 已在使用的同一套机制。

为什么这个选择器值得打开,而不是直接输入 @: 它会在不同目录、搜索和范围之间保留你的选择,因此来自三个文件夹的三个文件只需一次操作即可加入。文件夹是一等目标,而不是通往文件的中间步骤。而且它可以触及项目之外——harness 自带的 @ 补全在设计上无法做到这一点。

选中的路径会以行内 chip 的形式落入草稿——📄 background.ts,而不是 @src/background/background.ts——而完整路径则隐藏地随行,并作为实际传递给模型的内容。待处理的图片以卡片形式显示在其上方,包含格式、尺寸和大小,并支持通过全尺寸预览翻页查看和移除。

要求

- 安装了带有 Web 客户端的 dsh(@deepseek-ai/dsh-web-app)。
- 对于 Project 范围:需要一个 Host 文件引用提供程序(标准配置中的 @deepseek-ai/dsh-file-reference-local)。没有它时,选择器仅以 This machine 范围打开。
- 对于 This machine 范围:无需额外内容——此插件自己的 Host 端点即可提供支持。可通过 outsideWorkspace: false 将其关闭。
- 对于斜杠命令行:需要触发管线(@deepseek-ai/dsh-client-ui-input-trigger),常驻的 + 也使用它。没有它时,该行会如此说明。

安装

dsh plugin 会转发给 pnpm,因此任何 pnpm 来源都可以使用:

dsh plugin --profile default add @achasoft/dsh-add-assets

其他安装来源

dsh plugin --profile default add ./achasoft-dsh-add-assets-0.1.0.tgz   # 来自 pnpm pack
dsh plugin --profile default add ./dsh-add-assets                       # 本地检出
dsh plugin --profile default add github:navid-kianfar/dsh-add-assets#   # 来自 git

git 安装获取的是源代码,而不是构建产物。此包附带一个 prepare 脚本用于构建它们,但 pnpm ≥10 在你允许之前不会运行它——请将 pnpm 指定的键添加到你的配置文件的 pnpm-workspace.yaml 中:

allowBuilds:
'@achasoft/dsh-add-assets': true

这是允许在安装时执行此包代码的权限。请优先使用 npm 或 tarball 形式,它们不需要此类许可。

该 bundle 会自动将其自身追加到你的配置文件中。可使用 dsh --profile default --dump-config 验证,它应显示一个 # == @achasoft/dsh-add-assets 层。

面板的功能

| 行 | 添加的内容 | 默认快捷键 |
| --- | --- | --- |
| 添加文件 | 浏览文件并将所选路径作为 @path 提及插入草稿——与编辑器的 @ 补全写入的文本相同,因此工具会以相同方式解析它们。 | ⌘U / Ctrl+U |
| 添加文件夹 | 同一个选择器,仅列出目录并选择它们,而不是进入其中。插入 @path/。 | ⇧⌘U / Ctrl+Shift+U |
| 从此设备上传 | 浏览器的文件选择器。图像会成为草稿附件,与粘贴和拖放产生的效果完全相同。 | — |
| 斜杠命令 | 在光标处打开编辑器自带的斜杠命令菜单。这就是常驻 + 按钮原本的功能。 | ⌘/ / Ctrl+/ |

两种范围

选择器顶部的开关会说明当前由哪种能力响应,因为它们的覆盖范围并不相同:

- 项目 — 会话的工作目录,由 Host 的 @file 索引提供。输入时会模糊搜索整个工作区;输入路径时会浏览某一层级。路径会以工作区相对路径写入草稿。
- 此机器 — Host 文件系统,由此插件的端点提供。从 Home 开始一次浏览一层,按名称过滤,面包屑中显示完整路径。路径会以绝对路径写入草稿。

选择内容会跨开关保留,因此你可以在一次 添加 中从项目取两个文件,再从 ~/Downloads 取一个。

按键:↑/↓ 移动,Enter 选择或进入,→ 打开文件夹,← 返回上一级,⌘Enter 添加所有已选内容,Esc 关闭。面板高度固定,因此过滤时它绝不会在你的指针下方移动。

选中的路径是芯片,而不是路径

一次选择会变成一次内联引用出现:草稿携带一个短标签,编辑器会将其渲染为字形芯片,而完整的 @path 是该出现的隐藏序列化形式——与 harness 自带的 @ 补全使用的机制相同。因此,一个深层嵌套的文件在编辑器中显示为 📄 background.ts,而模型仍然会收到 @src/background/background.ts。

退格会像删除任何其他原子引用一样,将芯片整体删除。如果没有组合触发管线,就没有编解码器来序列化一次出现,因此选择器会退回到写入人们本可以手动输入的纯 @path 文本——读起来更长,但效果相同。

附件预览

每个待处理图像都是一张卡片:裁剪后的方形缩略图、文件名,以及一行详情(PNG · 1024×768 · 240KB)。悬停会显示移除控件;点击会在变暗的页面上打开完整图像,此时 ←/→ 可在草稿的其余附件之间翻页,垃圾桶控件会移除你正在查看的那个附件。

在页面任意位置拖动文件仍会显示拖放邀请,并且仍会在放下时附加——此插件从随附的附件栏手中接管了那个位置,因此它也拥有拖放目标。

想要更安静一些?设置 previewDensity: compact,即可获得仅带名称的小圆形缩略图。

设置
以下所有内容均可在 Settings → Plugins → Add assets 中编辑,并且可以通过你配置文件自身的 cordis.patch.yml($DSH_HOME/profiles//cordis.patch.yml)进行部署来修复。补丁会替换某一行的整个 config,因此需要重新声明每一个键。

- patch:
- id: add-assets
config:
replaceCommandButton: true
deviceUpload: true
outsideWorkspace: true
browseMaxEntries: 500
filesShortcut: mod+u
foldersShortcut: mod+shift+u
commandShortcut: mod+/
pickerResultLimit: 20
previewDensity: card
previewDetails: true

| 字段 | 含义 |
| --- | --- |
| replaceCommandButton | 隐藏编辑器自带的 +,使此插件的面板成为唯一入口。请参阅下方说明。 |
| deviceUpload | 在文件入口下提供设备文件选择器。粘贴和拖放两种方式均可使用。 |
| outsideWorkspace | 允许选择器离开项目。请参阅下方说明。 |
| browseMaxEntries | Host 在每个浏览层级报告的条目数,1–5000。主目录远超此数;选择器会提示已截断,而搜索字段是你突破该限制的方式。 |
| filesShortcut、foldersShortcut、commandShortcut | 形如 mod+u、mod+shift+u、mod+/ 的组合键。mod 在 macOS 上是 Command,在其他平台上是 Ctrl。留空则禁用该项。浏览器无法匹配的组合键会在加载时被拒绝,并指明该字段。 |
| pickerResultLimit | 选择器每次查询渲染的行数,1–200。Host 会应用其自身更低的上限(默认 20),因此仅提高此值并不会扩大结果范围——请同时提高文件引用提供程序的 maxResults。 |
| previewDensity | card(缩略图、名称、详情)或 compact(小圆形缩略图和名称)。 |
| previewDetails | 详情行是否显示格式、尺寸和大小。 |

快捷键有意采用修饰键组合:编辑器的文本区域拥有所有裸键,而普通按键快捷键会吞掉你的输入。

关于 outsideWorkspace

harness 的文件引用提供程序会拒绝会话工作目录之外的每一个路径——resolveDisplayDirectory 会直接拒绝 .. 和符号链接——而 Workspace 目录浏览器只返回目录。因此,要访问项目之外的文件,需要此插件自己的端点,而这正是 addAssets/browse Remote 的作用。

它会报告 Host 账户可读取的任何目录的条目名称、类型和绝对路径。它从不打开文件,也从不返回内容。它相比 harness 已暴露的能力所增加的,是能够从浏览器会话中枚举机器的目录树,包括文件名。如果这种枚举本身就是需要保留的内容,请将其设为 false;此时选择器只会在 Project 范围内打开,范围切换也会消失,而不是只显示一个选项。

关于 replaceCommandButton
harness 把它的 + 画在自己的 InputBar 里,并且没有为它声明任何插槽,所以没有任何插件能就地替换它。因此,在工具行里只保留一个 +,就意味着要隐藏那个常驻的按钮,而本插件正是通过标记那单个元素来做到这一点的——它会在 composer 卡片(也就是它自己所在的位置)中搜索该按钮在整个客户端中独有的无障碍特征(aria-haspopup="listbox")来找到它。不涉及整个文档,不使用类名,并且当插件卸载时会移除该标记。

如果你希望没有任何插件触及 harness 自身的界面元素,就把它设为 false。这样两个按钮都会显示:常驻的那个仍然打开斜杠命令菜单,而本插件的面板就位于它旁边。

模型体验

间接地,且仅通过人类可见可编辑的文本。选中的路径会成为草稿中普通的 @path 提示文本——模型对它们的感知,就是 @deepseek-ai/dsh-file-reference-local 已经为手动输入的提及所提供的那些——而上传的图片会成为与粘贴和拖放所产生的相同的草稿附件。本插件不添加自己的提示、工具或会话事件。

KV 缓存影响

无;此包既不组装也不发送提供方请求。

已知限制与待办工作

- 常驻的 + 是被隐藏,而非被替换。 在 harness 为那个位置声明插槽之前,这种接管依赖于无障碍特征,而不是契约。它会以可见的方式失败(出现两个按钮),绝不会静默失败。
- 机器范围不会跨目录搜索。 该过滤器只缩小你当前所在层级的范围;项目索引是唯一会搜索目录树的东西,而它会在工作区根目录处停止。
- 选中的路径总是追加。 引用会加到草稿末尾,而不是插入符处,因为选择器在打开时会获取焦点。
- 选择器的插入符是 composer 的,但它的选区是折叠的。 从面板中选中的斜杠命令会插入到插入符处,且不会替换任何内容,即使有文本被选中。
- 图片仅出现在预览中。 composer 只接受图片附件,所以卡片始终是图片卡片;非图片文件卡片要等到 composer 接受非图片附件之后才会出现。
- 全尺寸预览中没有缩放或下载。 它以适配视口的大小渲染原图,支持翻页,并支持移除。
- 预览不会捕获焦点。 它设置了 aria-modal,并在关闭时恢复焦点,但 Tab 仍可到达其后面的页面——这与已发布的 lightbox 具有相同的限制。

开发

pnpm run typecheck
pnpm run test       # the Typert freshness check, then vitest
pnpm run build      # tsc emit → tsdown's two halves (lib/host.js, lib/client.js)

link: 开发依赖指向一个同级的 deepseek-harness 检出目录,它提供了本包编译所依赖的类型和构建好的 lib/。构建会复现 harness 自己的(未发布的)客户端预设所生成的两种产物格式;tsdown.config.ts 记录了每一种为何被塑造成现在这样。
generated/ 保存着 addAssets 端点的 Typert RPC 契约。只有测试框架的生成器才能生成它,因此它作为已提交的源代码随附,并且当它与 src/host/ 不一致时,pnpm test 会失败。在更改该端点或它所引用的任何类型之后:

node scripts/regen-typert.mjs ../deepseek-harness

它拒绝在脏的测试框架检出上运行,需要几分钟时间,并在 finally 中恢复它在那边触碰过的一切。两次重新生成绝不能重叠。

许可证

MIT

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群