WeKnora
Tencent
Open-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki.
Su2uka111/dsh-document-drop
Document drag-and-drop plugin for DeepSeek Harness: PDF/Word/Excel/text auto-parsed with dual-track context (inline + doc_read), native WinRT OCR for scans. Zero upstream changes, hot-injectable. | DeepSeek Harness 文档拖拽读取插件:PDF/Word/Excel/文本自动解析,双轨上下文(内联 + doc_read 按需检索),扫描件原生 WinRT OCR。零修改上游,运行时热注入。
PROJECT TOPICS
INSTALL REFERENCE
dsh plugin --profile web add github:Su2uka111/dsh-document-drop
该命令指向仓库当前默认分支;尚无绑定当前 commit 的完整验证结果。
PROJECT README
简体中文 | English
DeepSeek Harness 文档拖拽读取插件(hybrid:Cordis Host + Web Client UI)。 拖入 PDF / Word / Excel / 文本自动解析进对话:轻量文档内联注入,大型文档挂载工作区
doc_read 工具按需检索;扫描件自动走 Windows 11 原生 WinRT OCR(中英双语),
页面高清原图可供多模态模型 read_image 调阅。零修改 DSH 上游,运行时热注入。方式一 · 官方装配(生产态,重启后由 bundles 接管):
# 下载 Release 的 tgz 解压得到插件目录(含 lib/ 与 scripts/),然后:
dsh plugin --profile web add <解压目录>
# 或 git 仓库直装(仓库需含预构建 lib/,本仓库 Release tgz 已含):
dsh plugin --profile web add github:Su2uka111/dsh-document-drop
方式二 · 运行时热注入(开发态,免重启;需环境已常驻 dsh-super-injector):
对 DSH 里的 AI 说:dev_inject_plugin <解压后的插件目录>
环境要求:Windows 11(阶段 5 扫描件 OCR 依赖系统内置 WinRT
PdfDocument/OcrEngine与 PowerShell 5.1;非扫描件功能不受此限制)。DSH ≥ 0.1.0-rc.5。
安装后拖一个 PDF/DOCX 进聊天窗口即可看到输入框上方的文档胶囊。
由 dsh-super-injector dev_scaffold_plugin 形态规范生成,按
plan/DeepSeek-Harness-文档拖拽读取插件开发计划.md 分阶段实现。
GET /dsh-document-drop/api/hello|probe)。
Client:模块装载骨架(ModuleLoader bundle)。stopImmediatePropagation 截断原生
InputBar 图片白名单报错,图片原样放行)+ conversation.input.dock 文档胶囊栏
(PDF/DOCX/XLS/TXT 徽章、体积、[×] 移除)+ 会话隔离暂存 Store。POST /dsh-document-drop/api/doc-drop/upload:裸字节流 + 元数据头
(x-dd-session-id / x-dd-file-name),硬上限 50MB。ctx.get('sessions') → SessionHeader.cwd)优先,
落盘 <workspace>/.dsh/attachments/<sessionId>/<safe-name>,
返回相对工作区的 POSIX 路径;无会话回退 ~/.dsh/attachments/<sessionId>/;
文件名白名单化 + 同名内容哈希防覆盖 + 写入路径围栏。doc_read 自主检索工具。DraftAssembler.ts:Enter 捕获富化 + inputActions.submit 包装(双保险,取即清防重复拼接);inputActions 缺席的 hero 屏兜底走 Lexical execCommand 写路径(peek → 写 → 成功才清暂存)。doc_read 工具:PDF 按页码范围 / 表格按 Sheet+行偏移 / 文本按行窗口;路径物理定位用上传时登记的会话根表(sessionRoots);永不抛出(操作型错误以可读字符串回传)。doc_read 分节调阅挂载文档并正确概括(两轮回合验证,标记格式与计划书一致)。tests/gen-e2e-assets.mjs(轻量 docx 多级标题+表格 / 15 页 PDF /
3 Sheet 250 行 xlsx / 纯图片扫描 PDF,全部现场合成免外部依赖)。doc_read 精准引用第 5 页核心论点原文。probe.appliedAt
更新、pid 不变、API 不中断);dev_injected_list 等价通道确认 active。scripts/ocr-pdf.ps1:Windows 11 原生 WinRT 适配器(Windows.Data.Pdf.PdfDocument 按页渲染
高清 PNG + Windows.Media.Ocr.OcrEngine zh-Hans-CN/en-US 识别),零外部依赖(无 Tesseract/Python)。
必须走 powershell.exe 5.1(pwsh 7 无 WinRT 投影);脚本需 UTF-8 BOM(PS5.1 无 BOM 按 GBK 解码会炸语法)。src/host/parsers/ocr.ts:Node 侧调度器(spawn + 超时 + 结果 JSON 解析),每页结果写侧车缓存
(<image>.ocr.json),重复查询命中缓存不再拉 PowerShell(实测 84ms → 3ms)。{ track:'mounted', isScanned:true, pages, ocrEngine, markdown(前两页OCR预览), imagePages[PNG相对路径] };
OCR 失败也回 200 优雅降级(原图仍挂载,可 read_image)。扫描件强制 mounted 防撑爆输入框。doc_read:扫描件按页返回 OCR 正文 + [该页高清原图路径: @…,多模态模型可使用 read_image 工具查看原件细节]。tests/gen-e2e-assets.mjs 的 test-scan.pdf 改为 System.Drawing 渲染中英文文字 →
JPEG → DCTDecode 内嵌(真·可 OCR 扫描件;手写 PDF 注意字典括号配平与间接 Resources 引用)。doc_read 读出
关键发现(中英双语原文)正确回答。node tests/gen-e2e-assets.mjs # 生成 .tmp-e2e/ 四类资产(含真·可 OCR 扫描件 test-scan.pdf)
# 在 DSH Web 会话拖入资产目录中的文件,按 README 阶段 4/5 用例核对胶囊与回答
npm install
DSH_CHECKOUT=<dsh checkout> bash scripts/build.sh # host(tsc)+ client(tsdown)
npm pack # 产出 tgz
# 注入器环境内(DSH Agent):dev_inject_plugin <本目录>
# 等价 HTTP 通道(web 运行中):
# POST http://127.0.0.1:<port>/super-injector/api/inject {"dir": "..."}
# GET http://127.0.0.1:<port>/super-injector/api/list (dev_injected_list 等价)
scripts/build.sh 自动探测 DSH checkout($DSH_CHECKOUT → 常见路径 →
本机 D:/code/预设/upstream/deepseek-harness),junction 链接 vendor 基线包后
先以 checkout 的 tsc 编译 host,再以 tsdown 打包 client(lib/client.js)。
src/index.ts Host 入口:日志探针 + hello/probe API + POST /doc-drop/upload(扫描件走 OCR)
src/host/storage.ts 工作区存储:.dsh/attachments/<sessionId>/,安全落盘 + 相对路径
src/host/parsers/index.ts 解析调度 + 双轨研判(inline/mounted,表格按行数判轨)
src/host/parsers/pdf.ts PDF:unpdf 逐页文本 + 扫描件检测(有效字符阈值)
src/host/parsers/word.ts Word:mammoth → Markdown
src/host/parsers/sheet.ts 表格:SheetJS,Sheet 元数据 + 前 50 行预览 + 行窗口读取
src/host/parsers/ocr.ts 扫描件 OCR 调度:spawn powershell + 侧车缓存(阶段 5)
src/host/tools/doc_read.ts doc_read 工具:PDF 按页 / 表格 Sheet+行 / 文本行 / 扫描件 OCR+原图
scripts/ocr-pdf.ps1 WinRT 光栅化 + OcrEngine 适配器(阶段 5,需 powershell.exe 5.1 + UTF-8 BOM)
src/client/index.ts Client 入口:拦截器 + 组装器 + dock 插槽注册
src/client/types.ts 文档类型/白名单/分类/格式化(含 isScanned)
src/client/store.ts 会话隔离暂存 Store(useSyncExternalStore 可观察)
src/client/uploader.ts 上传器:字节流 POST + 状态流转 + OCR 字段回填
src/client/CaptureDropController.ts 捕获阶段拦截器 + 蓝色遮罩 + 原生遮罩收尾(dragend)
src/client/DocAttachmentRail.tsx 胶囊栏(空队列返回 null 不占高度)
src/client/DocChip.tsx 胶囊卡片(徽章/文件名/体积/状态/移除;扫描件专属徽章)
src/client/DraftAssembler.ts 双轨 Prompt 组装(Enter 富化 + submit 包装 + Lexical 兜底)
tests/gen-e2e-assets.mjs 端到端测试资产合成(docx/15页PDF/250行xlsx/真·可OCR扫描件)
dev_injected_list(或 /super-injector/api/list)可见本插件且 host 激活。GET /dsh-document-drop/api/hello 返回插件元信息(stage=s5-ocr);Host 日志可见探针心跳。doc_read 读出 OCR 正文与高清原图路径。CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: ocr、office-document、pdf。