dsh-doc-review — DeepSeek Harness Web 文档审阅弹窗插件

DeepSeek Harness Web 内置的问题编辑器(QuestionComposer)设计为通用提问,采用紧凑卡片布局。当内容是完整的 Markdown 设计文档(含标题、表格、代码块、公式)时,卡片内的 60vh / 520px 滚动区域显得局促,审阅体验不佳。dsh-doc-review 将文档类提问替换为全屏弹窗,以渲染后的 Markdown 全幅展示,并保留完整的交互能力。

该插件由 yaodongH 维护,旨在解决设计文档与方案审阅的展示问题,将原本局促的卡片升级为支持行内评论、自动弹出、关闭不取消的全幅渲染弹窗。

核心功能

文档渲染

  • 支持 GFM Markdown 全量渲染:标题层级、列表、表格、代码块(含语法高亮)、KaTeX 数学公式。
  • 弹窗内宽表格支持横向滚动,避免布局错乱。

交互能力

  • 选项按钮:单选即提交,与内置流程答案编码一致。
  • 自定义意见:单行输入框,用于补充修改意见。
  • 取消操作:以 ASK_CANCELLED 拒绝请求,编辑器恢复为普通聊天状态。
  • 一次性锁:点击后禁用所有操作,直到宿主响应落定;失败自动重试并显示错误。

弹窗行为

  • 自动弹出:文档类提问到达时弹窗立即打开。
  • 关闭不取消:点击 X / Esc / 遮罩层关闭弹窗,请求保持待审状态。
  • 重新展开:控制条上的「展开完整文档」按钮可重新打开弹窗。
  • 重连恢复:页面刷新或断连重连后,待审弹窗随组件重开。

行内评论

  • 评论管理:支持添加、编辑、删除行内评论。评论持久化存储于 localStorage(key 格式:dsh-doc-review:v1:comments:<wait.key>)。
  • 提交反馈:存在评论时,弹窗页脚与收起控制条切换为「提交评论 / 取消」,选项按钮与自定义输入隐藏。提交时按行号升序聚合,格式为 对于第N行{原文内容},我认为应{评论内容}。
  • 编辑与删除:评论提供编辑(✎)和删除(🗑)按钮,编辑态预填原文。

国际化

  • 插件自身文案支持中英文双语切换。
  • plan-review 意图的选项按钮标签(如 Approve)根据语义本地化显示(如「确认执行」),但发送的答案值保持原标签。

安装与部署

环境要求

  • DeepSeek Harness >= 0.0.1
  • pnpm >= 11
  • Node >= 22

构建

在插件源码目录下执行:

pnpm install
pnpm run typecheck
pnpm run test
pnpm run build        # 构建 ESM 与 Client Bundle
pnpm run pack         # 打包为 tarball

部署到 profile

  1. 编辑 ~/.dsh/profiles/web/package.json,将打包产物(如 dsh-doc-review-0.1.0.tgz)添加到 bundles 列表。
  2. 在 dependencies 中添加该产物路径。
  3. 进入 ~/.dsh/profiles/web 目录执行 pnpm install。
  4. 重启 DeepSeek Harness Web 服务。

快速迭代

开发期间可跳过打包步骤,直接同步构建产物:

pnpm run build
rsync -a lib/ cordis.patch.yml dsh.plugin.json \
  ~/.dsh/profiles/web/node_modules/dsh-doc-review/

使用示例

触发方式

在自适应模式下跑一个任务进入设计阶段,或在标准模式下输入 /plan,弹窗会自动弹出并渲染设计文档。

评论与反馈

  1. 在弹窗中选中文本或点击行号槽,添加评论。
  2. 审阅完毕后,点击「提交评论」。
  3. 若需拒绝,点击「去聊天里说」。

标准端到端验证

提交评论(有评论时)按行号升序聚合为一条意见,每条逐字 对于第N行{原文内容},我认为应{评论内容},经 { selected: [], custom } 信封发送;成功后清空评论与持久化。

适用场景

本插件接管以下文档审阅路径:

  1. 标准 plan-mode:输入 /plan 后 exit_plan_mode 提交方案审阅。
  2. 自适应流水线:任务进入设计阶段。

未被认领的提问(短问题、无标题 detail、多选、>3 选项、未知意图等)原样落回内置问题编辑器。

认领条件

满足以下全部条件时接管:
- 单个 question(非多题批量)。
- multiSelect 非真。
- intent 为 undefined 或 { kind: 'plan-review' }。
- detail 为含 Markdown ATX 标题行(/^#{1,6}\s+\S/m)的字符串。
- 选项数 ≤ 3。

已知限制

  • 弹窗内宽表格保持横向滚动。
  • 依赖项包括 @deepseek-ai/cordis、react、@deepseek-ai/dsh-client-runtime 等。
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜