🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

拖放附件增强 aa2246740/dsh-dragndrop-attachments

DeepSeek Harnessv1.3.2
aa22467404 天前有提交已提供中文文档扫描:含敏感能力

DeepSeek Harness 支持 Codex 式拖放,可拖入文件、文件夹、ZIP 和 Office 附件

36.5/100
综合分
2
GitHub 星标
301
npm 周下载
—/5
用户评分

数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-dragndrop-attachments
npm 源 · dsh-dragndrop-attachments 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:待复验
是什么[目录]—
dsh 原生插件 · security
暂无时间戳·判据 →
装得上吗[实装验证]—
曾在 dsh 0.2.1-rc.2 下真实安装成功,但当前 dsh 已更新至 0.2.2-rc.1,本站尚未在新版下复验
L4 · 真实安装等级说明 →
数据截至 2026/10/25·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/06·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 4 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

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

✓npm 包dsh-dragndrop-attachments @ 1.3.2
✓Node 引擎要求 ^22.19.0 || >=24.0.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/3 15:16:57

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 100 处,展示前 85 条)
  • 写入本地文件
    lib/dsh-dragndrop-attachments.js:355
    await mkdir(this.root, {
  • 写入本地文件
    lib/dsh-dragndrop-attachments.js:366
    await mkdir(directory, {
  • 删除本地文件
    lib/dsh-dragndrop-attachments.js:388
    await unlink(temporary).catch(() => {});
  • 读取本地文件
    lib/dsh-dragndrop-attachments.js:403
    data = new Uint8Array(await readFile(join(this.root, ref.relativePath), { signal }));
  • 写入本地文件
    lib/dsh-dragndrop-attachments.js:847
    await mkdir(target, {
  • 写入本地文件
    lib/dsh-dragndrop-attachments.js:851
    await chmod(target, 448);
  • 读取本地文件
    lib/dsh-dragndrop-attachments.js:901
    if (digest(new Uint8Array(await readFile(target))) !== sha256) throw new AttachmentError("Stored attachment failed integrity verification.", "ATTACHME
  • 删除本地文件
    lib/dsh-dragndrop-attachments.js:905
    await unlink(temporary);
  • 删除本地文件
    lib/dsh-dragndrop-attachments.js:912
    await unlink(temporary).catch(
  • 读取本地文件
    lib/dsh-dragndrop-attachments.js:936
    data = new Uint8Array(await readFile(objectPath(root, sha256), { signal }));
  • 读取本地文件
    lib/dsh-dragndrop-attachments.js:1423
    await access(executable, constants.X_OK);
  • 读取本地文件
    lib/dsh-dragndrop-attachments.js:1424
    const bytes = new Uint8Array(await readFile(executable));
  • 读取本地文件
    lib/dsh-dragndrop-attachments.js:2758
    return cacheEnvelope(JSON.parse(await readFile(path, "utf8")), sha256, parserVersion);
  • 写入本地文件
    lib/dsh-dragndrop-attachments.js:2779
    await rename(temporary, path);
  • 删除本地文件
    lib/dsh-dragndrop-attachments.js:2783
    await rm(temporary, { force: true }).catch(() => {});
  • 写入本地文件
    lib/dsh-dragndrop-attachments.js:2893
    await chmod(task, 448);
  • 删除本地文件
    lib/dsh-dragndrop-attachments.js:2915
    if (resolved.startsWith(`${resolve(base)}${sep}`)) await rm(resolved, {
  • 删除本地文件
    lib/dsh-dragndrop-attachments.js:4749
    await Promise.all(stale.filter((name) => /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\.part$/iu.test(name)).map((name) =>
  • 发起网络请求
    lib/client.js:1446
    const response = await fetch(chunkRequestUrl(sessionId, uploadId, index), {
  • 写入本地文件
    lib/types/archive.js:162
    await mkdir(this.root, { recursive: true, mode: 0o700 });
  • 写入本地文件
    lib/types/archive.js:170
    await mkdir(directory, { recursive: true, mode: 0o700 });
  • 删除本地文件
    lib/types/archive.js:194
    await unlink(temporary).catch(() => { });
  • 读取本地文件
    lib/types/archive.js:202
    data = new Uint8Array(await readFile(join(this.root, ref.relativePath), { signal }));
  • 写入本地文件
    lib/types/catalog.js:126
    await mkdir(catalog.sessionsRoot, { recursive: true, mode: 0o700 });
  • 写入本地文件
    lib/types/catalog.js:127
    await mkdir(join(catalog.root, 'tmp'), { recursive: true, mode: 0o700 });
  • 写入本地文件
    lib/types/catalog.js:128
    await chmod(catalog.root, 0o700);
  • 写入本地文件
    lib/types/catalog.js:129
    await chmod(catalog.sessionsRoot, 0o700);
  • 读取本地文件
    lib/types/catalog.js:138
    return parseEnvelope(JSON.parse(await readFile(this.path(sessionId), 'utf8')), sessionId);
  • 写入本地文件
    lib/types/catalog.js:159
    await rename(temporary, target);
  • 读取本地文件
    lib/types/dsh-dragndrop-attachments.js:29
    : existsSync(defaultRoot) || !existsSync(legacyRoot)
  • 写入本地文件
    lib/types/engine.js:346
    await mkdir(target, {
  • 写入本地文件
    lib/types/engine.js:350
    await chmod(target, 448);
  • 读取本地文件
    lib/types/engine.js:400
    if (digest(new Uint8Array(await readFile(target))) !== sha256) throw new AttachmentError("Stored attachment failed integrity verification.", "ATTACHME
  • 删除本地文件
    lib/types/engine.js:404
    await unlink(temporary);
  • 删除本地文件
    lib/types/engine.js:411
    await unlink(temporary).catch(
  • 读取本地文件
    lib/types/engine.js:435
    data = new Uint8Array(await readFile(objectPath(root, sha256), { signal }));
  • 读取本地文件
    lib/types/engine.js:926
    await access(executable, constants.X_OK);
  • 读取本地文件
    lib/types/engine.js:927
    const bytes = new Uint8Array(await readFile(executable));
  • 读取本地文件
    lib/types/engine.js:2269
    return cacheEnvelope(JSON.parse(await readFile(path, "utf8")), sha256, parserVersion);
  • 写入本地文件
    lib/types/engine.js:2290
    await rename(temporary, path);
  • 删除本地文件
    lib/types/engine.js:2294
    await rm(temporary, { force: true }).catch(() => {});
  • 写入本地文件
    lib/types/engine.js:2404
    await chmod(task, 448);
  • 删除本地文件
    lib/types/engine.js:2426
    if (resolved.startsWith(`${resolve(base)}${sep}`)) await rm(resolved, {
  • 写入本地文件
    lib/types/uploads.js:42
    await mkdir(root, { recursive: true, mode: 0o700 });
  • 读取本地文件
    lib/types/uploads.js:43
    const stale = await readdir(root);
  • 删除本地文件
    lib/types/uploads.js:44
    await Promise.all(stale.filter(name => /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\.part$/iu.test(name)).map(name => unl
  • 删除本地文件
    lib/types/uploads.js:95
    await unlink(path).catch(() => { });
  • 写入本地文件
    lib/types/uploads.js:115
    await appendFile(state.path, bytes);
  • 删除本地文件
    lib/types/uploads.js:124
    await unlink(state.path).catch(() => { });
  • 读取本地文件
    lib/types/uploads.js:135
    const data = new Uint8Array(await readFile(state.path, { signal }));
  • 删除本地文件
    lib/types/uploads.js:142
    await unlink(state.path).catch(() => { });
  • 删除本地文件
    lib/types/uploads.js:183
    await unlink(state.path).catch(() => { });
  • 写入本地文件
    src/archive.ts:180
    await mkdir(this.root, { recursive: true, mode: 0o700 })
  • 写入本地文件
    src/archive.ts:189
    await mkdir(directory, { recursive: true, mode: 0o700 })
  • 删除本地文件
    src/archive.ts:206
    await unlink(temporary).catch(() => {})
  • 读取本地文件
    src/archive.ts:215
    data = new Uint8Array(await readFile(join(this.root, ref.relativePath), { signal }))
  • 写入本地文件
    src/catalog.ts:165
    await mkdir(catalog.sessionsRoot, { recursive: true, mode: 0o700 })
  • 写入本地文件
    src/catalog.ts:166
    await mkdir(join(catalog.root, 'tmp'), { recursive: true, mode: 0o700 })
  • 写入本地文件
    src/catalog.ts:167
    await chmod(catalog.root, 0o700)
  • 写入本地文件
    src/catalog.ts:168
    await chmod(catalog.sessionsRoot, 0o700)
  • 读取本地文件
    src/catalog.ts:179
    return parseEnvelope(JSON.parse(await readFile(this.path(sessionId), 'utf8')), sessionId)
  • 写入本地文件
    src/catalog.ts:199
    await rename(temporary, target)
  • 读取本地文件
    src/dsh-dragndrop-attachments.ts:46
    : existsSync(defaultRoot) || !existsSync(legacyRoot)
  • 写入本地文件
    src/engine.js:346
    await mkdir(target, {
  • 写入本地文件
    src/engine.js:350
    await chmod(target, 448);
  • 读取本地文件
    src/engine.js:400
    if (digest(new Uint8Array(await readFile(target))) !== sha256) throw new AttachmentError("Stored attachment failed integrity verification.", "ATTACHME
  • 删除本地文件
    src/engine.js:404
    await unlink(temporary);
  • 删除本地文件
    src/engine.js:411
    await unlink(temporary).catch(
  • 读取本地文件
    src/engine.js:435
    data = new Uint8Array(await readFile(objectPath(root, sha256), { signal }));
  • 读取本地文件
    src/engine.js:926
    await access(executable, constants.X_OK);
  • 读取本地文件
    src/engine.js:927
    const bytes = new Uint8Array(await readFile(executable));
  • 读取本地文件
    src/engine.js:2269
    return cacheEnvelope(JSON.parse(await readFile(path, "utf8")), sha256, parserVersion);
  • 写入本地文件
    src/engine.js:2290
    await rename(temporary, path);
  • 删除本地文件
    src/engine.js:2294
    await rm(temporary, { force: true }).catch(() => {});
  • 写入本地文件
    src/engine.js:2404
    await chmod(task, 448);
  • 删除本地文件
    src/engine.js:2426
    if (resolved.startsWith(`${resolve(base)}${sep}`)) await rm(resolved, {
  • 写入本地文件
    src/uploads.ts:90
    await mkdir(root, { recursive: true, mode: 0o700 })
  • 读取本地文件
    src/uploads.ts:91
    const stale = await readdir(root)
  • 删除本地文件
    src/uploads.ts:92
    await Promise.all(stale.filter(name => /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\.part$/iu.test(name)).map(name => unl
  • 删除本地文件
    src/uploads.ts:140
    if (created && !this.uploads.has(uploadId)) await unlink(path).catch(() => {})
  • 写入本地文件
    src/uploads.ts:158
    await appendFile(state.path, bytes)
  • 删除本地文件
    src/uploads.ts:165
    if (state.cleanupAfterBusy) await unlink(state.path).catch(() => {})
  • 读取本地文件
    src/uploads.ts:175
    const data = new Uint8Array(await readFile(state.path, { signal }))
  • 删除本地文件
    src/uploads.ts:181
    await unlink(state.path).catch(() => {})
  • 删除本地文件
    src/uploads.ts:224
    await unlink(state.path).catch(() => {})
扫描于 2026/11/6(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-attachment@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-store@deepseek-ai/dsh-client-ui-chat@deepseek-ai/dsh-client-ui-commands@deepseek-ai/dsh-client-ui-conversation@deepseek-ai/dsh-client-ui-renderer@deepseek-ai/dsh-client-ui-session@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-home-paths
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 拖入文件与文件夹
  • 支持ZIP附件
  • 支持Office附件
v1.3.22026-11-03
Release v1.3.2 for DeepSeek Harness 0.2.1-rc.5 (>=0.2.0-rc.2 <0.3.0).
原文(未汉化)
v1.3.12026-09-29
· dsh-dragndrop-attachments 1.3.1 · DeepSeek Harness 兼容性 基于 DeepSeek Harness 0.2.0-rc.2(639ed015397290b3745d163aafe02ffee4aa3f84)构建并测试。用官方插件安装器安装预构建的发布包,或使用本仓库编译好的产物。 更新了开发 SDK 和 DSH RC2 的兼容性检查。声明的 peer 范围仍支持现有的 RC1 兼容公开插件接口。 验证在 macOS arm64 上完成。本版本不声明新增 Windows 或 Linux 运行时验收。
v1.3.02026-09-27
正式支持 DeepSeek Harness 0.1.7-rc.2。 普通文件拖放、粘贴和桌面目录沿用官方原生流程。DOCX、XLSX、PPTX、CSV 和 ZIP 通过官方 tools/execute 接口自动接入本地文档解析,不修改 DSH 源码,不重复上传,也不先制造一次预期的读取错误。新增 read_document_file,按原生文件路径继续查询表格、幻灯片、段落和 ZIP 条目。 Web 文件夹保留快照入口;1.2.x 的历史附件继续可读。图片、文本和 PDF 沿用官方处理。 · 安装或更新 Web UI: dsh plugin --profile web add github:aa2246740/dsh-dragndrop-attachments 桌面端:设置 → 插件 → 添加插件,填入 github:aa2246740/dsh-dragndrop-attachments,或下载本页 .tgz 并填入其绝对路径。安装后等任务完成,退出并重新打开对应 Host / 应用。仓库 main 和发布包均包含预构建产物,无需额外开发工具。 · 验证和范围 · 57 条回归测试、类型检查和构建通过。 · 使用官方原生事件处理器验证混合文件拖放、图片粘贴、Web 文件夹补充处理、桌面目录委托及卸载恢复,无重复导入。 · 发布包通过官方安装与独立 Host 冷启动;主会话和子代理均能读取官方附件存储中的 XLSX,并查询具体单元格。验证未调用模型。 · 权限拒绝、取消、损坏文档和同名文件隔离均有回归覆盖。 完整 Office 解析当前支持 macOS Apple Silicon,随包固定 OfficeCLI 1.0.144。旧版 DOC/XLS/PPT、OCR 和公式重算不在支持范围。文件增强读取上限为 50 MiB,ZIP 展开上限为 256 MiB;较大结果需按定位符分段读取。 附件提供 .tgz 安装包及 SHA256SUMS。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
DSH 拖放附件 为官方 DeepSeek Harness 0.2.1-rc.5 增强文档读取。照常拖文件、粘贴或使用原生附件按钮;图片、文本和 PDF 沿用原生处理,DOCX、XLSX、PPTX、CSV 和 ZIP 自动接入本地解析。无需选择「增强导入」,不修改官方源码。 安装 Web UI dsh plugin --profile web add github:aa2246740/dsh-dragndrop-attachments 需要官方 dsh(也可用 npx @deepseek-ai/dsh@0.2.1-rc.5)和 PATH 中的 pnpm。等当前任务完成后重启这个 Host,再刷新页面。仓库 main 已包含构建好的 lib/,安装不需要编译插件或额外开发工具。 官方桌面端 / DSH Studio 打开 设置 → 插件 → 添加插件,在「包名或地址」中填入: github:aa2246740/dsh-dragndrop-attachments 也可以从 最新 Release 下载 .tgz,填入该文件的绝对路径。安装后按官方界面提示,等任务完成再退出并重开应用。桌面端使用 desktop profile,Web UI 使用 web profile;请安装到实际使用的那一端。 怎么用 - 文件:照常拖放、粘贴或用原生附件按钮。
展开完整文档(README 剩余 1 节)
DSH 拖放附件

为官方 DeepSeek Harness 0.2.1-rc.5 增强文档读取。照常拖文件、粘贴或使用原生附件按钮;图片、文本和 PDF 沿用原生处理,DOCX、XLSX、PPTX、CSV 和 ZIP 自动接入本地解析。无需选择「增强导入」,不修改官方源码。

安装

Web UI

dsh plugin --profile web add github:aa2246740/dsh-dragndrop-attachments

需要官方 dsh(也可用 npx @deepseek-ai/dsh@0.2.1-rc.5)和 PATH 中的 pnpm。等当前任务完成后重启这个 Host,再刷新页面。仓库 main 已包含构建好的 lib/,安装不需要编译插件或额外开发工具。

官方桌面端 / DSH Studio

打开 设置 → 插件 → 添加插件,在「包名或地址」中填入:

github:aa2246740/dsh-dragndrop-attachments

也可以从 最新 Release 下载 .tgz,填入该文件的绝对路径。安装后按官方界面提示,等任务完成再退出并重开应用。桌面端使用 desktop profile,Web UI 使用 web profile;请安装到实际使用的那一端。

怎么用

- 文件:照常拖放、粘贴或用原生附件按钮。桌面端保留原生本地路径引用;Web UI 保留原生上传和会话附件。
- Word / Excel / PowerPoint / CSV:智能体调用 read 时自动得到结构目录、预览和定位信息,再按需读表格、公式、幻灯片、备注或文档段落。
- ZIP:先列目录,再按条目路径读取文本或代码;不在工作区解压,不自动展开嵌套压缩包。
- 桌面文件夹:沿用官方目录引用,里面的 Office 文件按路径读取时自动增强。
- 浏览器文件夹:拖入时自动保存文件夹快照;也可用 + 菜单里的「添加文件夹快照」。混合拖入的普通文件仍进入原生附件。文件夹卡片会说明快照内容。
- 历史附件:1.2.x 上传的附件和文件夹快照继续可读,无需迁移。

已有原生拖放和粘贴不会被插件整体拦截,也不会同时上传两份。插件用官方 tools/execute 接口在支持的文档读取前分流,不依靠先触发一次工具错误。损坏、加密、超限或确实不支持的内容仍会返回真实错误,不伪装成功。

支持范围

Office 随包固定 OfficeCLI 1.0.144(macOS Apple Silicon)。当前完整 Office 解析仅承诺该平台。DOC/XLS/PPT 旧格式、OCR、公式重算和复杂图表视觉理解不在承诺范围;PDF 和图片能力由官方 DSH 提供。

单个增强读取文件最大 50 MiB;展开 ZIP 最大 256 MiB。读取窗口和查询输出有上限,大文件需要分段查询。结果会保留覆盖范围、警告及原始定位符;输出行号是解析结果行号,不能当作 Office 文件的编辑行号。

插件通过当前会话的文件系统读取,保留权限和取消检查。文件内容始终作为不可信用户数据。解析缓存位于 $DSH_HOME/dragndrop-attachments/v1/native-cache;原生附件及会话仍由 DSH 管理。旧插件快照保留在同一数据目录,早期 codex-attachments/v1 数据仍兼容。

更新和卸载

在原来的安装入口再次安装最新包,然后按官方提示重新打开应用。安装成功和运行中加载新版是两步。

Web 卸载:

dsh plugin --profile web remove dsh-dragndrop-attachments

桌面端在设置的插件页面禁用或卸载。禁用后普通拖放仍由原生处理;解析增强、Web 文件夹快照入口和旧附件读取工具停用。卸载不主动删除历史数据。

使用指南 · 更新记录 · 第三方许可

开发

Node.js 22.19+ / 24+,pnpm。pnpm install --ignore-workspace --frozen-lockfile 安装依赖;pnpm test 和 pnpm typecheck 验证源码。发布包已经构建,普通安装无需执行开发命令。
预览分享卡片长什么样 ↓aa2246740/dsh-dragndrop-attachments
分享 · DeepSeek Harness Hub
aa2246740/dsh-dragndrop-attachments

DeepSeek Harness 支持 Codex 式拖放,可拖入文件、文件夹、ZIP 和 Office 附件

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部