jiazekang/dsh-office--packages-dsh-office ↗★ 0
dsh-office
Office document tools for DSH: read .xlsx cell grids, precisely edit cells via exceljs, and drag & drop / paste office files (xlsx/docx/pptx/csv) into the chat — shown as removable attachment chips above the composer, paths injected on send.
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:jiazekang/dsh-office#790fb8b40123db5297bfba03431854c394c0552d&path:packages/dsh-office说明文档
阅读完整 README ↗dsh-office
DSH Office 文档插件:Excel 读取 + 精准修改 + 拖入/粘贴办公文件到聊天框(附件卡片式)。
功能(v0.3.0)
| 能力 | 说明 |
|---|---|
office_read_xlsx | 读取 .xlsx 单元格网格,以 Markdown 表格返回(可按 sheet 名/索引、maxRows 截断) |
office_edit_xlsx | 按单元格引用(如 A2/B4)精准修改后保存,返回 before/after 磁盘回读验证;默认覆盖原文件,可 saveAs 另存 |
| 拖入/粘贴 | 把 .xlsx/.docx/.pptx/.csv 拖到窗口任意位置(或 Ctrl+V)→ 上传到宿主 /api/dsh-office/upload → 以附件卡片(📎文件名 + ×)显示在输入框上方(像图片附件);× 移除并删除上传副本(DELETE /api/dsh-office/file,带路径越界防护);发送时(Enter 或发送按钮)才把路径注入消息,agent 用 office_read_xlsx 读取 |
核心逻辑全部走 exceljs —— 共享字符串、样式、公式、合并单元格由库托管,不手拼 OOXML。
架构
src/index.ts— Cordis 插件入口(name=office,inject: tools/systemPrompt/webServer)src/tools.ts— 两个 agent 工具(defineTool)src/xlsx.ts— exceljs 操作层(读取/单元格解析/精准修改+磁盘回读)src/upload.ts— 宿主上传路由(扩展名校验、重名自动加时间戳、50MB 上限)src/client.ts— 浏览器半边(拖放/粘贴监听 → 上传 → React 原生 setter 注入输入框)scripts/smoke.mjs— 无框架冒烟测试(工具链路 + 上传路由 + client 模块)
exports "./client" + dsh.client: { inject: [], platform: "web" } 声明浏览器半边,宿主在 /plugins/office/client.js 提供。
开发流程
# 1. 安装依赖(workspace 根目录)
pnpm install
# 2. 构建(tsc 类型检查 + tsdown 双产物 lib/index.js + lib/client.js)
pnpm --filter dsh-office build
# 3. 冒烟测试(真实生成 xlsx → 读取 → 精准修改 → 回读 → 上传路由 mock)
pnpm --filter dsh-office smoke
# 4. 挂载到 web profile(exceljs 是外部依赖,link: 开发模式需单独装)
dsh plugin --profile web add link:D:\Porject\DSH\dsh-office\packages\dsh-office
dsh plugin --profile web add exceljs
# 5. 重启 dsh web(宿主加载新代码 + 浏览器硬刷新 Ctrl+Shift+R)
exceljs 不打包的原因:其依赖链(unzipper → fstream)含 rolldown 无法解析的废弃八进制转义。 npm 发布后用户
dsh plugin add dsh-office会自动带上 exceljs,无需手动装。