Back to home

jiazekang

dsh-office

可以读写办公文件的插件,支持拖动办公文件到对话框

Stars
0
Language
TypeScript
Created
Aug 15, 2026
Updated
Aug 15, 2026

Introduction

dsh-office

DSH Office 文档插件:Excel 读取 + 精准修改 + 办公文件拖入附件栏。

结构

packages/
  dsh-office/   # Office 文档工具插件:Excel 读取/精准修改(exceljs)+ 拖入附件栏

常用命令(在仓库根目录执行)

pnpm install                       # 安装所有包依赖
pnpm --filter dsh-office build     # 构建单个插件(tsc 类型检查 + tsdown 打包到 lib/)
pnpm --filter dsh-office smoke     # dsh-office 冒烟测试(真实文件读写验证)
pnpm --filter dsh-office watch     # 开发热构建
pnpm -r typecheck                  # 全部包类型检查

安装 / 联调(web profile)

# 把本地开发版挂到 web profile(link: 协议,改完重新 build 即生效)
dsh plugin --profile web add link:D:\Porject\DSH\dsh-office\packages\dsh-office

# dsh-office 的 exceljs 是外部依赖,link: 开发模式下需单独装进 profile
dsh plugin --profile web add exceljs

# 不启动服务查看合并后的配置树,确认插件行已进入
dsh --profile web --dump-config

# 重启 dsh web 后生效

发布到 npm

cd packages/dsh-office
npm publish
# 用户安装:dsh plugin --profile web add dsh-office
# (npm 安装会自动带上 exceljs 依赖,无需手动装)

插件写法速记

  • 插件 = 导出 name / inject / Config / apply 的 npm 包。
  • 工具用 defineTool({ name, description, parameters, output, execute }) 定义, 参数与输出都必须是 JSON Schema,output.render 返回 ContentBlock[]
  • 所有注册都包在 ctx.effect(fn, label) 里,卸载时自动清理。
  • @deepseek-ai/* 运行时服务声明为 peerDependencies,构建时保持外部(deps.neverBundle), 运行时由宿主进程解析,避免重复实例。
  • 包内 cordis.patch.ymlinsert 把插件行加进 roster;声明 dsh.bundle.patchdsh plugin add 会自动把它加入 profile 的 bundles 层。

更完整的参考:@linxin666/dsh-ssh(服务端全流程)与 @linxin666/dsh-client-ui-task-board(客户端全流程), 源码见 https://github.com/zhu1090093659/dsh-web-ui。