DeepSeek Harness Web GUI 的 Codex 风格附件格式:PDF 文本层提取、Office 文本提取、扫描版 PDF OCR、长文档溢出 + 索引卡、图片转 PNG。
32.9/100
综合分
4
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/1 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查有告警:未发布到 npm registry,仅可从源码安装。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add linkingoscar/dsh-attachment-formats该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · market
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 34 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意未发布到 npm registry,仅可从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包dsh-attachment-formats(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/17 12:41:30
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 69 处,展示前 42 条)
- 写入本地文件lib/index.js:420
await writeFile( - 发起网络请求lib/client.js:732
const response = await fetch(`/api/attach-formats/resolve?${params.toString()}`, { signal: signal === void 0 ? AbortSignal.timeout(4e3) : AbortSignal. - 发起网络请求lib/client.js:1019
const p = await (await fetch(`/api/attach-formats/progress?jobId=${encodeURIComponent(jobId)}`, { signal })).json(); - 发起网络请求lib/client.js:1190
const manifest = await (await fetch(fileUrl(preview.id, "manifest.json", sessionId), { signal: controller.signal })).json(); - 发起网络请求lib/client.js:1481
const payload = await (await fetch(url)).json(); - 发起网络请求lib/client.js:1519
const p = await (await fetch(url)).json(); - 发起网络请求lib/client.js:1536
const payload = await (await fetch(path, { - 读取本地文件lib/convert/provider.js:27
if (!existsSync(VENV_PYTHON) || !existsSync(PY_SCRIPT)) return false; - 读取密钥环境变量lib/convert/provider.js:51
apiKey: (process.env.BAIDU_OCR_API_KEY ?? "").trim(), - 读取密钥环境变量lib/convert/provider.js:52
secretKey: (process.env.BAIDU_OCR_SECRET ?? "").trim(), - 读取密钥环境变量lib/convert/provider.js:57
key: (process.env.DSH_ATTACH_VLM_KEY ?? "").trim(), - 读取本地文件lib/convert/provider.js:238
return existsSync(path) ? { path, args: ["--version"] } : null; - 读取本地文件lib/convert/ocr.js:34
if (existsSync(target) && statSync(target).size > 100_000) return true; - 读取本地文件lib/convert/ocr.js:34
if (existsSync(target) && statSync(target).size > 100_000) return true; - 写入本地文件lib/convert/ocr.js:35
mkdirSync(TESSDATA_DIR, { recursive: true }); - 发起网络请求lib/convert/ocr.js:39
const response = await fetch(url, { signal: AbortSignal.timeout(DOWNLOAD_TIMEOUT_MS) }); - 写入本地文件lib/convert/ocr.js:42
await pipeline(Readable.fromWeb(response.body), createWriteStream(temp)); - 读取本地文件lib/convert/ocr.js:43
const info = statSync(temp); - 写入本地文件lib/cache.js:41
await writeFile(tmp, content); - 写入本地文件lib/cache.js:42
await rename(tmp, path); - 读取本地文件lib/cache.js:93
const entries = await readdir(oldRoot, { withFileTypes: true }).catch(() => null); - 写入本地文件lib/cache.js:99
await mkdir(newRoot, { recursive: true }); - 读取本地文件lib/cache.js:106
await stat(dst); - 写入本地文件lib/cache.js:110
await rename(src, dst); - 删除本地文件递归lib/cache.js:115
await rm(src, { recursive: true, force: true }); - 读取本地文件lib/cache.js:124
const rest = await readdir(oldRoot); - 删除本地文件lib/cache.js:126
await rm(join(oldRoot, "INDEX.md"), { force: true }); - 删除本地文件递归lib/cache.js:127
await rm(oldRoot, { recursive: true, force: true }); - 写入本地文件lib/cache.js:143
await mkdir(join(dir, "pages"), { recursive: true }); - 写入本地文件lib/cache.js:152
await writeFile(target, file.data); - 读取本地文件lib/cache.js:176
const manifest = JSON.parse(await readFile(path, "utf8")); - 读取本地文件lib/cache.js:188
const manifest = JSON.parse(await readFile(path, "utf8")); - 读取本地文件lib/cache.js:207
const manifest = JSON.parse(await readFile(join(dir, "manifest.json"), "utf8")); - 删除本地文件递归lib/cache.js:311
await rm(join(root, entry.name), { recursive: true, force: true }); - 删除本地文件递归lib/cache.js:342
await rm(dir, { recursive: true, force: true }); - 删除本地文件递归lib/cache.js:440
await rm(join(root, id), { recursive: true, force: true }); - 读取密钥环境变量lib/convert/ocr-deepseek.js:52
const env = (process.env.DEEPSEEK_API_KEY ?? process.env.DSH_ATTACH_VLM_KEY ?? "").trim(); - 读取本地文件lib/settings.js:97
const raw = await readFile(path, "utf8"); - 写入本地文件lib/settings.js:239
await mkdir(join(path, ".."), { recursive: true }); - 写入本地文件lib/settings.js:241
await writeFile(tmp, JSON.stringify({ revision: nextRevision, ...next }, null, 2) + "\n", "utf8"); - 写入本地文件lib/settings.js:245
await writeFile(path, JSON.stringify({ revision: nextRevision, ...next }, null, 2) + "\n", "utf8"); - 写入本地文件lib/settings.js:248
await chmod(path, 0o600);
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
1 张 · 点击查看大图功能亮点
- PDF文本层提取
- Office文本提取
- 扫描版PDFOCR
README
由 DeepSeek 最新模型翻译生成dsh-attachment-formats — DeepSeek Harness 附件扩展(dsh-plugin,Codex 风格)
license
version
harness
dsh-plugin
GitHub
DeepSeek Harness 插件(dsh-plugin)· Web GUI 一键安装 dsh plugin add。 让输入框支持 PDF、Office(docx/xlsx/pptx)、TIFF、epub/odt/rtf、长文档与扫描件 OCR(tesseract/百度/DeepSeek Vision 等 8 家),Codex 式。检索词:dsh deepseek-harness cordis pdf office ocr tesseract。
让 DeepSeek Harness Web 的输入框像 Codex 一样接收更多文件格式。不改动任何核心包:纯插件实现,沿用 Harness 原生的图片草稿栏、上传限额校验、历史渲染与模型请求管道。
展开完整文档(README 剩余 1 节)
dsh-attachment-formats — DeepSeek Harness 附件扩展(dsh-plugin,Codex 风格)
license
version
harness
dsh-plugin
GitHub
DeepSeek Harness 插件(dsh-plugin)· Web GUI 一键安装 dsh plugin add。 让输入框支持 PDF、Office(docx/xlsx/pptx)、TIFF、epub/odt/rtf、长文档与扫描件 OCR(tesseract/百度/DeepSeek Vision 等 8 家),Codex 式。检索词:dsh deepseek-harness cordis pdf office ocr tesseract。
让 DeepSeek Harness Web 的输入框像 Codex 一样接收更多文件格式。不改动任何核心包:纯插件实现,沿用 Harness 原生的图片草稿栏、上传限额校验、历史渲染与模型请求管道。
dsh plugin --profile web add github:linkingoscar/dsh-attachment-formats
dsh-attachment-formats — 回形针·文档芯片·索引卡(Playwright 本地 mock,dsh 0.1.1-rc.2)
回形针按钮 · 拖放/粘贴 · 官方按会话注入 · 索引卡永不静默截断——Playwright 对本地 composer 模拟页截取。
支持的格式
| 文件 | 处理方式 | 去向 |
| PNG / JPEG / WebP / GIF | 原生管线,本插件不介入 | 图片草稿栏(原生) |
| PDF(有文本层) | 文字层提取(≤40 页用 pymupdf4llm 高保真引擎,更大/不可用时 pdfjs 兜底) | 全文挂文档卡片(发送时并入消息);超限转存工作区 + 索引卡片 |
| PDF(扫描件/无文本层) | tesseract.js OCR(置信度 ≥45 才采用),失败回退页面图 | OCR 成功走文本通道;失败 → 图片草稿栏(仅视觉模型) |
| Word (.docx) / Excel (.xlsx) / PPT (.pptx) | 提取文本——docx 经 mammoth HTML → turndown,表格保留为 Markdown 管道表 | 文档卡片(发送时并入);超限转存 + 索引卡片 |
| 旧 .doc / .xls / .ppt | LibreOffice headless → docx/xlsx/pptx → 标准 Office 管线(需 soffice,缺失时明确报错) | 文档卡片(发送时并入) |
| epub / odt / rtf | pandoc → Markdown(PATH 探测);无 pandoc 时 epub/odt 走 jszip+turndown 兜底;rtf 需 pandoc | 文档卡片(发送时并入) |
| TIFF (.tiff/.tif) | sharp(libvips)→ PNG 页(多页支持,≤20 页) | 原生图片草稿栏 |
| txt / md / json / 代码等 | 浏览器本地读取(UTF-8,回退 GB18030) | 文档卡片(发送时并入);超限转存 + 索引卡片 |
| BMP / ICO / AVIF / SVG 等 | 浏览器解码后画布转 PNG | 原生图片草稿栏 |
| iWork / 音视频 / 压缩包 | 不转换,交给原生上传 | 原生文件附件(dsh 0.1.3+) |
文档卡片(Codex 式挂载,输入框保持干净)
拖入/选择的文本类附件不会塞进输入框:内容挂成输入框上方的一枚文档卡片(文件名 + 字符数 + 全文/索引标签,可单独移除),图片照旧进原生图片草稿栏。
你正常在输入框打字提问,发送瞬间插件把卡片内容并入消息(带 [附件: 文件名] 出处标记)再走原生提交——提问位置永远在最上面,内容也
一字不丢:
- 卡片条自带发送按钮:只挂文档不输入文字也能一键发出;
- 按 Enter / 点原生发送按钮:卡片自动并入后再提交;
- 模型忙于回复时不会合并(卡片保留,稍后再发)。
长文档(索引卡模式,永不静默截断)
超过 8 万字符的文本、多页长 PDF:不塞进消息,而是
1. 主机端转存到会话工作区 .dsh-attachments//(内容寻址,重复拖入复用;约 7 天未访问自动清理):
- doc.md —— PDF 文字层按页组装(页首 页码标记)、 Office 提取文本、长文本原样(长 JSON 自动格式化落盘为 doc.json);
- pages/pNN.png —— 页面渲染图(≤100 页,视觉模型用 read_image 补充查看版式/图表;惰性生成,只有走索引卡路径才渲染);
- manifest.json —— 来源、页数、行数、字符数、引擎、完整源文件 SHA-256 与转换策略指纹(换引擎/OCR/doc-server 自动让旧缓存失效);
- INDEX.md(缓存根)—— 本工作区全部已转存文档的聚合清单。
2. 消息里只挂一张几百 token 的索引卡片:页/行/字符数、大纲(PDF 标题粗检、 md 标题、JSON 第一层键树)、以及读取指引。
3. 模型用 DSH 现成 read 工具分页读取(offset/limit,行号即出处坐标)——总结全文就逐段读完(不丢尾部),查细节就按大纲跳读;缺内容时是显式的工具失败,不会静默丢失。
设计取舍与业界取证见 docs/design-longdoc.md;同类作品比对见 docs/alternatives.md。
引擎与 OCR(v3)
- PDF 文本引擎:auto(默认)→ ≤40 页用 venv 内 pymupdf4llm(表格/标题高保真),更大文档或 venv 缺失时 pdfjs(秒级)。env:DSH_ATTACH_ENGINE= auto|python|builtin。
- 扫描件 OCR:百度云 API(见下)→ python(PyMuPDF,需系统 tesseract)→ tesseract.js(纯 JS,首次使用下载 eng/chi_sim 语言包 ~24MB 缓存到 vendor/tessdata/)。置信度 指向解析服务(PP-StructureV3 paddleocr serve、MinerU 或任意包装网关)。契约:
POST {base}/convert multipart 字段 file → { "ok": true, "markdown": "..." }。
配置后 PDF 优先走服务,任何失败自动回落本地引擎链。
- 附件缓存设置页:设置 → 附件缓存,列出全部已转存文档(规模/引擎/时间),支持逐条删除与全部清空;数据源 GET /api/attach-formats/cache、 POST .../cache/delete、POST .../cache/clear。
- 工作区零拷贝:512KB~16MB 的文本文件先做工作区同源解析——浏览器本地读完整文件算出 SHA-256,再经 GET /api/attach-formats/resolve 让主机按「文件名 + 字节数 + 完整 SHA-256」确认同源文件(~2.5s 限时、跳过依赖目录)。
命中则挂 📎 引用卡片——不上传内容(只传文件名、大小与哈希,为算哈希本地会读一遍文件),模型用 read 工具直接读该路径;未命中回落常规上传转存。
超过 16MB 直接拒绝,不再尝试零拷贝。
上下文自适应与全文命令(v2b)
- 自适应并入上限:客户端读 token-meter 的 contextPressure 投影(模型上下文窗口 × 当前占用),全文卡片并入上限 = min(8 万字符, 余量×1.5)——余量不足时自动转索引卡并在状态条说明,从源头杜绝"并入顶爆上下文被 API 静默截尾";投影缺失时回退固定 8 万阈值。
- /attach 命令(输入框斜杠菜单,主机端注册):
- /attach list —— 列出本工作区已转存文档(id/名称/规模/引擎);
- /attach full —— 把全文作为 next-step 消息并入模型上下文(下一条消息生效,不打断当前对话);上限 30 万字符,超限显式截断说明,绝不静默丢内容。之后仍可用 read 工具按行精读定位。
交互入口
- 回形针按钮:输入栏工具行(conversation.input.left),打开文件选择器,支持多选;accept 列表覆盖上表全部格式。
- 拖放:把 PDF / Office / 文本文件直接拖到页面任意位置。
- 粘贴:复制文件后 Ctrl+V 到输入框(或整页粘贴)。
原生图片和不支持转换的文件(如 ZIP)拖放/粘贴整批交给 Harness 内建管线。
混入 PDF / Office / 文本等转换格式时,插件接收整个批次,转换后把图片和其余原始文件定向挂入原会话,文档保留为卡片;不再使用全局合成 drop。
架构
projects/dsh-attachment-formats/
├── lib/
│ ├── index.js # 主机半区:POST /api/attach-formats/convert + 引擎路由 │ ├── client.js # 浏览器半区:按钮/拖放拦截/定向附件/文档卡片/状态条 │ ├── cache.js # 工作区 .dsh-attachments 落盘/manifest/INDEX.md/清理 │ ├── py/pymupdf4llm_convert.py # venv 高保真引擎(子进程调用) │ └── convert/ │ ├── util.js # 魔数嗅探(pdf/tiff/OLE/rtf/zip)、base64、文本截断 │ ├── provider.js # 引擎/二进制探测(venv python、pandoc、LibreOffice)+ 子进程桥 │ ├── pdftext.js # pdfjs 文字层提取:行组装/页眉页脚去重/书签目录 │ ├── outline.js # md 标题大纲、JSON 第一层键树 │ ├── ocr.js # tesseract.js OCR(traineddata 下载缓存/置信度) │ ├── pdf.js # pdfjs-dist + @napi-rs/canvas → PNG/JPEG 页 │ ├── docx.js # mammoth HTML → turndown+GFM → Markdown(表格保留) │ ├── xlsx.js # exceljs → 制表符文本 │ ├── pptx.js # jszip + a:t 文本运行 → 每页文本 │ ├── tiff.js # sharp(libvips)→ PNG 页 │ ├── pandoc.js # pandoc → Markdown + epub/odt zip 兜底 │ └── libreoffice.js # 旧 .doc/.xls/.ppt → 现代 OOXML ├── .venv/ # (可选)pymupdf4llm 高保真引擎(setup 生成,不入库) ├── vendor/tessdata/ # OCR 语言包缓存(首次使用下载,不入库) ├── docs/ # design-longdoc.md / alternatives.md / upgrade-v6.md ├── scripts/smoke-*.mjs # 五套离线冒烟(转换器/路由/客户端/OCR/P0) └── cordis.patch.yml
- 主机路由重新嗅探魔数,不信任客户端声明的 kind;请求体 160MB 上限、单文件 64MB 上限;cwd 由客户端从会话状态读取后随请求上报(决定缓存落盘位置)。
- dsh v0.1.2+ 下所有插件精确路由复用宿主 connection 的 launch-token 与 Host/Origin 校验;v0.1.1 继续沿用旧版 localhost 信任边界。
- 分级阈值:全文卡片并入上限 8 万字符(v2b 按上下文余量自适应压低);缓存页图 ≤100 页(1100px 宽,PNG 超单图字节预算回退 JPEG);扫描件页图上限沿用部署限额;OCR 单次 ≤20 页(2000px 宽),置信度 / (工作区模式改为 opt-in;旧 cwd/.dsh-attachments 每工作区自动一次性迁移); DeepSeek Vision 探测到 Key 即进入 auto OCR 链(可关,首次转录明示按 token 计费);凭据优先走官方 ctx.credentials seam(文件解析仅回退);设置增加 revision 乐观锁(expectedRevision,冲突 409)与缓存位置选择器;smoke 套件全面隔离 DSH_HOME。
- v0.8.0
—— 外部 API 全部进设置页(不再必须 env):8 家 OCR(百度/阿里云 AppCode/腾讯云 TC3/ Azure Document Intelligence/火山/通用 VLM/本地 tesseract.js/关闭)+ 6 家文档解析预设(PaddleOCR/MinerU/Marker/Docling/自定义/关闭),配置持久化 DSH_HOME、脱敏回显;零配置 DeepSeek Vision OCR(复用宿主 DeepSeek Key,表格转 GFM);芯片视觉来源徽标; sharp/@napi-rs/canvas 迁 optionalDependencies + 三态探测;.gitignore marker 注入
+ /api/attach-formats/doctor 自检。
- v0.7.0
—— 适配 dsh v0.1.x 附件管线:图像限额同步规范化时代新默认(20MiB/200MiB/64MP/8192px + 新增 maxImageDimension),页面图渲染改以宿主 normalizationPolicy.maxBytes 预算为目标;转换图片改走官方按会话注入面(createDraftImages + addImages,v0.1.1+ 不再出现跨对话串扰);文档卡片改经官方 setDraft 写路径合并(命令认领态绝不污染);附件缓存页迁移到 rc.7 规范的 settings.plugins.tab;/attach 显式声明 images: false, /attach full 改用 agent.inject() 别名;DOM 桥接与合成 drop 保留为旧版宿主回退。
- v0.6.4
—— 会话归属正确与零拷贝校验:附件按 shell 当前会话归属(不再出现卡片/图片跑到别的对话框);转换图片等当前会话空闲再投喂;工作区零拷贝改「文件名 + 字节数 + 完整 SHA-256」同源确认(杜绝同名同大小静默替换), 16MB 直接拒绝;INDEX 单元格转义、重建按工作区串行化;缓存命中保留
source 口径字段;旧版 Office manifest 标注 libreoffice+builtin 引擎。
- v0.6.3
—— 缓存生命周期加固:v0.6.1 的 8-hex 遗留缓存目录在清理/清空时一并扫除(不再有不可见孤儿);JSON 转存区分源文本与落盘产物尺寸(分流按产物口径);缓存命中降级为索引卡时惰性补齐页面图;INDEX.md 改由合法 manifest 全量重建(无 ghost 行、转存时间列修复);旧版 .doc/.xls/.ppt 缓存键改用原始 OLE 字节,命中直接跳过 LibreOffice;manifest/INDEX 原子写。
- v0.6.2
—— 缓存正确性与快路径:缓存目录 16 hex + manifest 存完整 SHA-256;转换策略指纹(换引擎/OCR/doc-server 自动让旧缓存失效);索引卡命中时按结构化 metadata 用当前文件名重建(不再串名);TTL 纳入模型直接 read 的文件访问时间;页面图惰性生成(干净小 PDF 不再被整本光栅化拖慢); 2–16MB 文本可走主机转存不再被拒;消除 React key 警告;Node >=20;CI actions 升级 v7。
- v0.6.1
—— 正确性与工程化修复:附件条崩溃修复(useCallback 引用缺失)、转换器不再预截断(端到端恢复「永不静默截断」)、路由统一以会话派生的工作区为准、XLSX 空列坐标修复、按源文件哈希命中的真转换缓存、TTL 以最后访问时间为准、合并进草稿时回读校验;新增 ESLint、CI(Node 20/22)与组件级冒烟测试。
- v0.6.0
—— 保真度与格式覆盖(DOCX 表格、TIFF、epub/odt/rtf、旧版 Office、 PDF 书签大纲)、百度 OCR + 远程 VLM OCR + 外部文档解析服务、内容自适应引擎、附件缓存设置页、工作区零拷贝引用。
- v0.5.0
—— 文档卡片、索引卡转存、/attach list|full、自适应并入上限、 pymupdf4llm/pdfjs 引擎、tesseract.js OCR。
模型体验
提取文本与 OCR 转录仅在用户发送合并消息(文档卡片)或模型用 read 读取落盘 doc.md 时进入模型上下文——插件自身不提交任何内容。视觉 OCR (deepseek-flash 或已配置的云供应商)由该供应商按 token 计费;每批首次转录会在卡片说明中明示。索引卡在默认缓存目录(home)下写绝对路径、工作区模式下写相对路径,read/read_image 两种模式均可解析。
KV Cache 效果
转换结果内容寻址、跨发送原样复用(缓存命中除索引卡本身外零新增 token)。
切换引擎/OCR 供应商会改变转换策略指纹并使旧缓存失效:换供应商后下一次拖入重新转录,绝不供应旧文本。
常见问题(检索友好)
问:如何在 DeepSeek Harness Web 中支持 PDF? dsh plugin --profile web add github:linkingoscar/dsh-attachment-formats 即可,PDF 文字层经 pymupdf4llm/pdfjs 提取,扫描件走 OCR,长文档落盘索引卡。
问:Office/TIFF/epub 支持吗? 支持,docx 表格→Markdown 管道表,xlsx/pptx/tiff/epub 同理。
问:和 dsh-at-file / dsh-file-uploads 区别? 本插件做内容转换(文本模型可读),而 file-upload/at-file 仅传路径;本插件对工作区文件做 SHA-256 零拷贝,不走重复上传。
问:OCR 有哪些? auto 按 百度 → VLM → 阿里/腾讯/Azure/火山 → DeepSeek Vision 选择首个已配置云端,失败即回退本地 tesseract.js;跨云重试为显式选项。
问:缓存位置? 默认 DSH_HOME/storages/attachment-docs//,可选工作区 .dsh-attachments/,7 天 TTL。
相关收录
- 按 DeepSeek 官方建议为仓库打上 dsh-plugin topic 以被检索。
- 精选目录:awesome-dsh-plugin、dshplugin.world、deepseekharness.io/plugins、dsh.pub——本插件声明 dsh.bundle,符合 manifest-verified 收录条件。
已知限制
- DeepSeek Key 的文件回退用极简正则解析 .credentials.yaml;宿主凭证格式变化时插件回退本地 tesseract 并告警(官方 ctx.credentials seam 优先尝试)。
- auto 视觉需要探测到 DeepSeek Key;无 Key 时静默跳到本地 OCR (显式 deepseek 模式会说明原因)。
- 旧 .doc/.xls/.ppt 需要 LibreOffice;rtf 需要 pandoc;重型解析器(MinerU/Marker/PaddleOCR)仅作外部服务——绝不捆绑。
- iWork 与压缩包暂不转换。
License
Apache-2.0 © 2026 linkingoscar
2026-09-30 未发布修复与验证
已按官方 Harness 0.2.0-rc.2 开发预发布版(639ed015397290b3745d163aafe02ffee4aa3f84)验证源码契约、既有输入框/多会话行为测试及真实宿主的认证上传转换、未认证拒绝。兼容矩阵保留旧版本并加入新版本;不等同于完整浏览器视觉验收。
PPTX 改按 presentation.xml 的关系顺序读页,排除孤立页并明确报告断链;ODT 兜底保持标题/正文交错顺序及标题层级;EPUB 兜底按 OPF spine 顺序读取,排除导航及非线性附属内容,缺失元数据/断链/不支持的正文类型明确报错。包内 XML 使用命名空间解析,禁止 DTD/实体定义及外部取资源。npm run test:document-order 可单独复验。Pandoc EPUB 测试夹具已补齐正确 OPF 包结构。
Python 引擎、OCR 语言文件缺失时相关可选测试会跳过,不把离线测试通过当作可选后端已验证。
小升级:PDF 文本覆盖提示混合文字/无文字页 PDF 现在会说明文字覆盖页数和待核对页码;直插、索引卡及缓存命中保持一致,文档芯片显示“待核对”。无文字可能是空白、扫描件或图表;每页都有文字也不代表图表、公式和版式完整保留。沿用已有缓存和预览,无新增解析服务。见精简规划。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
linkingoscar/dsh-attachment-formats
DeepSeek Harness Web GUI 的 Codex 风格附件格式:PDF 文本层提取、Office 文本提取、扫描版 PDF OCR、长文档溢出 + 索引卡、图片转 PNG。
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,225未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,370已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13941 个插件含 PR 收录与…
★ 355已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目