Skip to content

dsh-pdf-mineru

Verified

dsh-pdf-mineru · v0.0.4 · MIT · Web UI

Provider-independent DSH document parsing powered by MinerU, with native background jobs, immutable results, and safe request coalescing.

Install

dsh plugin add dsh-pdf-mineru

Confirm the layer applied with dsh --profile default --dump-config — see the install guide.

Source

Creators

Readme

dsh-pdf-mineru

让 DeepSeek Harness 以统一方式使用 MinerU 解析文档

自托管 MinerU v2 与官方云 v4,共用同一套模型工具、原生后台任务和不可变结果缓存。

npm version Node.js 18 or newer DSH native jobs MinerU v2 and v4 MIT License

快速开始 · 核心能力 · 模型工具 · Provider · 配置 · 安全与存储 · 开发

dsh-pdf-mineru 在 DSH Settings 中的 Provider 与解析默认值界面

Provider 与解析默认值的可视化配置;同一页面还提供缓存、重试、安全限制和存储运维。


一个插件,两个 Provider,三项模型工具。模型不需要理解上游的 task ID、batch ID、预签名上传地址、状态 URL 或 ZIP 结构,只需要选择同步直返或 DSH 原生后台任务。

[!NOTE] 本项目是独立维护的 DSH 社区插件。Provider 只负责适配 MinerU 上游协议,DSH Job、缓存、安全边界和工具输出由插件统一管理。

快速开始

1. 安装

DeepSeek Harness 的 Web profile 可以直接安装 npm 包:

dsh plugin --profile web add dsh-pdf-mineru

本地开发或测试 checkout:

dsh plugin --profile web add link:/absolute/path/to/dsh-pdf-mineru

[!TIP] 使用 pnpm 10+ 从源码安装时,需要在 profile 的 pnpm-workspace.yaml 中显式允许所需构建脚本。

2. 连接 MinerU

打开 Settings → MinerU,选择活动 Provider:

  • Self-hosted v2:默认连接 http://localhost:18000,本地 HTTP 需要显式启用 Allow Insecure HTTP
  • Official v4:默认连接 https://mineru.net/api/v4,并通过 DSH Credential 或环境变量提供 Token。

官方云最小凭据配置:

export MINERU_API_KEY="your-token"

在 Settings 中将 API Key Env Var 保持为 MINERU_API_KEY,点击 Test Active Provider 验证连通性与鉴权。

3. 交给 Agent

直接描述需要解析的本地文档和期望产物,例如:

请用 MinerU 解析 /absolute/path/to/paper.pdf,保留 Markdown、图片和 content list。

长文档或不希望阻塞当前回合时:

把 /absolute/path/to/report.pdf 作为 MinerU 后台任务解析,完成后读取结果。

Agent 会根据任务选择 mineru_parse_documentmineru_submit_parse_job。异步任务由 DSH 通用的 job_outputjob_listjob_kill 管理。

核心能力

DSH 原生后台任务

异步解析注册为 `mineru-N` Job。DSH 负责 owner 隔离、完成通知、结果读取和取消,插件不维护第二套会话 Job。
同步直接返回结果

`mineru_parse_document` 直接返回 Markdown preview、immutable manifest 和产物路径,不创建插件 Job。
双 Provider 统一接口

同一套 `pipeline` / `vlm` 语义适配自托管 FastAPI v2 和 MinerU 官方云 v4,协议字段不会进入模型上下文。
不可变内容寻址缓存

源文件 SHA-256、解析语义、产物集合、Provider compatibility key 和 schema 版本共同决定 CacheKey。
并发请求合并

同一进程内,相同 CacheKey 只产生一个上游解析。单个等待者超时或取消不会破坏其他调用共享的 producer。
受控发布与运维

产物经过 staging 校验和同文件系统原子 rename 后发布;Settings 提供统计、完整性扫描、GC preview、缓存清理和 quarantine 管理。

模型工具

插件只暴露三项 MinerU 工具:

工具 行为 返回值
mineru_health 探测活动 Provider 的连通性、鉴权、协议版本和可用队列信息 结构化健康状态
mineru_parse_document 同步等待解析;超时只结束当前等待,不终止共享 producer immutable result、Markdown preview、manifest 与产物路径
mineru_submit_parse_job 注册原生 DSH 后台任务并立即返回 mineru-N,最终输出由通用 Job 工具读取

解析参数

参数 类型 默认值 说明
file_paths string[] 必填 本地文档路径。支持批量数组,默认安全上限为 1,可通过 limits.maxFilesPerRequest 调整
model pipeline / vlm Settings 默认值 统一解析模型
ocr boolean false 对全部页面强制 OCR
language string ch MinerU 语言提示代码
formula boolean true 识别数学公式
table boolean true 识别表格结构
pages string 全部页面 1-based 页码范围,例如 1-10,15
artifacts string[] ["markdown"] markdownlayoutmodel-outputcontent-listimages
poll_timeout_ms integer 600000 仅同步工具使用;限制本次等待时间

Markdown 始终包含在规范化产物集合中。大段 preview 会按配置截断,完整产物仍保存在 result manifest 指向的路径中。

工作方式

flowchart LR
    Agent[DSH Agent] --> Health[mineru_health]
    Agent --> Sync[mineru_parse_document]
    Agent --> Async[mineru_submit_parse_job]

    Async --> Jobs[DSH JobRegistry]
    Jobs --> Service[MinerUService]
    Sync --> Service
    Health --> Providers[ProviderRegistry]

    Service --> Cache{Result cache}
    Cache -->|hit| Result[Immutable result]
    Cache -->|miss| Shared[SharedOperationRegistry]
    Shared --> Providers
    Providers --> V2[Self-hosted v2]
    Providers --> V4[Official v4]
    V2 --> Staging[Validated staging]
    V4 --> Staging
    Staging --> Publish[Atomic publish]
    Publish --> Result
  • RequestNormalizer 规范参数、页码范围和产物集合,并流式计算源文件 SHA-256。
  • ResultRepository 校验并读取不可变结果;源文件绝对路径不会写入规范请求或 manifest。
  • SharedOperationRegistry 只在当前进程内合并相同请求,不提供跨进程协调。
  • ProviderRegistry 在一次操作生命周期内固定 Provider 配置,避免任务中途切换后端。

Provider 对照

Self-hosted MinerU v2 Official MinerU v4
Provider ID self-hosted-v2 official-v4
提交方式 流式 multipart POST /tasks 申请预签名地址后执行裸 PUT
状态与结果 轮询任务并收集 JSON 轮询 batch,下载并安全解包 ZIP
模型 通过 modelMap 显式映射 pipeline / vlm 原生 pipeline / vlm
parse method autoocrtxt autoocrtxt 会明确失败
HTTP 本地部署可显式允许 HTTP 强制 HTTPS
上游限制 取决于服务端配置与插件安全限制 单文件不超过 200 MB、200 页

Provider 不注册工具、不访问 DSH Session、不决定存储路径,也不生成模型文案。它只负责上游协议转换、轮询与产物收集。

配置

推荐通过 Settings → MinerU 编辑配置。Provider、解析默认值、轮询、重试和输出限制对新任务实时生效;storageRoot 变更需要重启插件进程。

Self-hosted v2 最小配置
schemaVersion: 1
activeProvider: mp_self_hosted
providers:
  - id: mp_self_hosted
    type: self-hosted-v2
    baseURL: http://localhost:18000
    apiKeyEnv: MINERU_API_KEY
    allowInsecureHttp: true
    modelMap:
      pipeline: pipeline
      vlm: vlm-engine
defaults:
  model: pipeline
  ocr: false
  parseMethod: auto
  language: ch
  formula: true
  table: true
  artifacts: [markdown]
retry:
  maxAttempts: 3
  baseDelayMs: 500
  maxDelayMs: 10000

modelMap 不会猜测或静默降级。可将统一的 vlm 显式映射到 hybrid-enginevlm-engine 或服务端实际提供的后端名称。

Official v4 最小配置
schemaVersion: 1
activeProvider: mp_official
providers:
  - id: mp_official
    type: official-v4
    baseURL: https://mineru.net/api/v4
    apiKeyEnv: MINERU_API_KEY
    models: [pipeline, vlm]
    configuredVersion: v4
defaults:
  model: vlm
  ocr: false
  parseMethod: auto
  language: ch
  formula: true
  table: true
  artifacts: [markdown]

Official v4 无法表达自托管专用的 parseMethod: txt。插件会返回明确错误,不会将其等同于 ocr: false

完整运行限制与存储配置
storage:
  storageRoot: /absolute/path/to/dsh/cache/pdf-mineru
  cacheEnabled: true
  retainSources: false
  stagingTtlMs: 86400000

polling:
  pollIntervalMs: 2000
  pollTimeoutMs: 600000
  requestTimeoutMs: 60000
  operationTimeoutMs: 3600000

retry:
  maxAttempts: 3
  baseDelayMs: 500
  maxDelayMs: 10000

output:
  maxInlineChars: 200000

limits:
  maxFilesPerRequest: 1
  maxFileBytes: 209715200
  maxApiResponseBytes: 8388608
  maxZipDownloadBytes: 536870912
  maxZipEntries: 10000
  maxZipEntryBytes: 268435456
  maxZipTotalBytes: 2147483648
  maxZipCompressionRatio: 200

storageRoot 必须使用绝对路径。默认值为 $DSH_HOME/cache/pdf-mineru;未设置 DSH_HOME 时使用 ~/.dsh/cache/pdf-mineru

配置只保存 Credential reference,例如 MINERU_API_KEY。每次 Provider 调用时,插件先从 DSH Credential Service 解析,再回退到同名环境变量;Token 值不会写入配置或缓存。

安全与存储

内容寻址结果

$DSH_HOME/cache/pdf-mineru/
├── results/sha256/<prefix>/<cache-key>/manifest.json
├── staging/<operation-id>/
├── quarantine/<timestamp_reason_id>/
└── .process.lock
  • 已发布结果按单文件保存且不可修改,批量请求按文件 fan-out。
  • staging 通过校验后只允许同文件系统原子 rename;EXDEV 不会退化为复制。
  • 一个 storageRoot 同时只能由一个 DSH 进程持有。
  • DSH JobRegistry 与 SharedOperation 是进程内状态;不可变结果在进程或 Session 结束后仍可复用。
网络与凭据边界
  • Credential 每次 Provider 调用解析,不缓存、不持久化 Token 值。
  • 携带鉴权的 API 请求使用 redirect: error
  • Official v4 预签名 PUT 使用独立请求构造器和显式空 headers,不携带 Authorization 或默认头。
  • CDN 结果下载不携带 API Token,并禁止重定向。
  • 仅幂等 GET 和可重新打开源文件流的官方 PUT 使用有界重试;批次申请 POST 和自托管 multipart POST 不自动重放。
  • 结构化诊断只保留 operation、Provider、阶段、状态、耗时、字节和重试计数等类型化字段,不记录 URL、headers、body、Credential 或本地路径。
Official v4 ZIP 边界

ZIP 中央目录会先经过元数据和资源限制检查,再逐 entry 流式写入 staging。插件拒绝:

  • 绝对路径、..、NUL、反斜杠和驱动器路径;
  • 符号链接、非普通条目和加密条目;
  • 超出 entry 数、单 entry 字节、总解压字节或压缩比限制的归档。

整个归档和大 entry 不会被一次性累积到内存中。

可视化存储运维

Settings 中的存储操作均为按需执行,不会在后台自动扫描磁盘:

  • Refresh Statistics:统计 results、staging 和 quarantine。
  • Verify Cache:默认只读检查 manifest 和声明的产物。
  • Preview GC:只生成候选预览,不删除已发布结果。
  • Clear Cache:预览后需要二次确认;存在活动 SharedOperation、存储 reader、扫描截断或不安全目录时 fail closed。
  • List Quarantine:列出隔离项;清理默认 dry-run,实际删除需要明确选择和二次确认。

维护 RPC 只注册在 loopback 连接上,不作为模型工具暴露。

[!IMPORTANT] 同步等待超时或 job_kill 只停止该调用的等待。若同一 SharedOperation 仍被其他调用依赖,上游 producer 会继续执行并发布缓存结果。

兼容性说明

  • 当前只接受 Provider-based canonical config,不兼容旧 flat config。
  • mineru_get_parse_statusmineru_get_parse_result 已移除;异步任务使用 DSH 通用 Job 工具。
  • 默认缓存根目录为 $DSH_HOME/cache/pdf-mineru,旧目录不会自动迁移。
  • 缓存不会在不同 DSH 实例之间自动共享;跨进程请求也不会合并。

开发与验证

pnpm install
pnpm run typecheck
pnpm test
pnpm run build
git diff --check

# 在已运行的 DSH Web shell 中隔离加载当前 client bundle
pnpm run verify:gui

# 显式执行 Official v4 真实链路 smoke
MINERU_API_KEY=<token> pnpm run smoke:official-v4 -- /absolute/path/sample.pdf

默认测试使用 mock HTTP 和本地 ZIP fixture,不需要真实 Token。smoke:official-v4 必须显式提供真实 Token 和 PDF,不进入默认测试。

更深入的领域模型、缓存键、并发语义和安全约束见 ARCHITECTURE.md

许可证与致谢

本项目使用 MIT License 开源。

感谢 DeepSeek Harness 提供插件运行时,感谢 MinerU 提供文档解析能力,也感谢 Huanlin/dsh-plugin-mineru 带来的早期实现灵感。