void2anything / dsh-qingagent

Listed

在 DeepSeek Harness 里使用青简 — 一行命令安装的 DSH 插件:对话里起草改稿,右侧长出与青简桌面端同源的宣纸面板,逐条审阅后落稿

mainModel View source

Installation

npx @deepseek-ai/dsh web

This command is generated from the GitHub repository address. Inspect the upstream README and source before running it; pin a release or commit when reproducibility matters.

README

Maintainer-authored documentation snapshot.

View on GitHub ↗
Commit b29a9f0Synced Aug 18, 2026
青简 QingAgent

dsh-qingagent

在 DeepSeek Harness 里使用青简

基于 DSH 规范开发的插件,一行命令即可完成安装 / 卸载,让你在 DSH 里使用青简撰写文档并校对审阅。

npm License: Apache-2.0

青简主仓 · 官网 qingagent.com · English

在 DSH 里一句话起草,右侧宣纸面板同步成文

这是什么

DeepSeek Harness(DSH)是 DeepSeek 开源的「一切皆插件」Agent 框架。装上 dsh-qingagent 之后,DSH 就多了一支笔:

你在对话里说清楚要写什么,Agent 调用青简引擎起草、局部修改、提交审阅;浏览器右侧同步长出一块宣纸面板——与青简桌面端同源的纸面渲染,宋体、暖纸、直角,公式、Mermaid、draw.io、表格、脚注、印章落款一应俱全。

聊天只留摘要,文稿才是真身。

它能做什么

  • 一句话起稿:Agent 把成稿写进右侧纸面,空稿生成时显示青简同款「青字扩散」加载动画;
  • 逐条裁决:AI 的每处改动都是候选,纸面上一处 / 下一处翻看,采纳或驳回,确认后才落稿;改动比例高时自动切到新旧版对照;
  • 批注轮播:审查产生的批注在纸上原位展示,逐条翻阅;
  • 选段成 chip:纸上选中文字即可作为「选段」插入输入框,支持多条、悬停看全文,发送后气泡里同样以 chip 呈现;
  • 审查与导出长在纸面原位:导出 PDF / Word / HTML / Markdown / TXT,直接下载;
  • 一个会话多篇稿qing_list_docs / qing_focus_doc 切换右侧预览;
  • 「在青简中打开」:深链拉起桌面客户端,接着改——同一本机库。

实拍:在 DSH 里写一篇带图表、表格和公式的稿子

DSH 对话与宣纸面板里的 Mermaid 流程图表格与行内、块级公式
左边聊,右边成稿——一句话交代要求,Agent 调用青简工具落库,右侧宣纸面板同步长出正文;Mermaid 流程图带「可视化编辑 / 编辑 Mermaid」按钮,drawio 工程图双击即开完整排版能力——表格、行内公式与块级公式(KaTeX)、任务清单、代码块,与青简桌面端同一套渲染
审阅态逐条裁决未连接青简时的引导卡
审阅态逐条裁决——顶栏显示「审阅中 · N 处」,正文标出增删,底部工具条上一处 / 下一处 / 提交 / 放弃全部三态引导卡——未装、已装未启动、握手失败各给对应指引;青简起来后自动恢复,不用重启 DSH

与青简主仓的关系

本插件是 青简 qingagent 的 DSH 前端,不是独立产品。

因为插件本身的复杂度——纸面渲染与文稿引擎深度耦合、文档与版本存在本机数据库——目前必须先安装青简桌面客户端,插件才能工作。 客户端承载文稿引擎与本机库;插件负责把它接进 DSH 的对话与界面。

这也带来一个好处:DSH 里写的稿子,回到青简客户端还能继续改,反过来也一样——同一本机库,不是两份拷贝。


安装(三步)

① 启动 DeepSeek Harness(需 Node.js 20+)

npx @deepseek-ai/dsh web

② 安装青简插件

npx @deepseek-ai/dsh plugin --profile web add dsh-qingagent@latest

装完重启 dsh web 即生效。

③ 下载并启动一次青简客户端

qingagent.com青简 Releases 下载安装,启动一次——引擎随之常驻,凭证写入 ~/.qingagent/instance.json,插件即自动连接。

青简未安装或未启动时,面板会显示引导卡:未安装给下载指引;已安装未启动给一键「启动青简」;握手失败直接说明原因(比如 instance.json 损坏)。青简起来后插件自动恢复,不用重启 DSH。

要求:DSH 以 0.1.0-rc.6 为基线(peer 依赖 ^0.1.0-rc.6),profile 需已组合 storage hub、storage-domain 及一个 KV 后端(通常是 @deepseek-ai/dsh-storage-json)。


支持范围

官方支持的组合:Windows 上运行 dsh + Windows 青简桌面客户端,同机同用户。

插件实现里也包含 macOS 的客户端检测(mdfind 与 Applications 目录回退),但未做完整验证,遇到问题欢迎提 issue。

WSL / 跨系统组合不受支持:插件从当前系统的用户目录读取 ~/.qingagent/instance.json,dsh 跑在 WSL、客户端装在 Windows 时读不到该文件,也就连不上引擎。


能力清单

Host 工具(Agent 可调用)

工具参数作用
qing_write_draftbrief 必填;title? outline? style? docRef?按简报和可选的显式提纲生成整篇 QingML。省略 docRef 为新建;给了本会话 docRef 即整篇重构(须用户明确授权)
qing_edit_draftdocRef?ops[] 必填对已有文稿原子提交一组结构化局部编辑;审阅进行中拒绝再次编辑
qing_read_draftdocRef?mode 默认 outline分级读取:outline 概要 / full 全文 / base 已提交基线 / lines 带行号 Markdown / blocks 块 ID 清单
qing_review_commitdocRef?action: accept_all | reject_all全量接受或拒绝待审稿;代码硬性限制每回合最多一次
qing_list_docsscope: session | library列本会话绑定稿;library 列青简全库最近文稿(最多 50 篇)
qing_focus_docdocRef 必填切换右侧纸面;未绑定时可按引擎 ID 或唯一精确标题从文库收养

qing_edit_draft 的八种操作:

kind语义
strReplaceoldnew,可指定第 nth 个命中
markText给命中文本加 / 去行内标记:bold italic strike underline code highlight(color) textColor(color) link(href,title?);支持 allisRegexwithinRef
insertAfterLine在已提交 Markdown 的第 N 行后插入
insertAfterBlock在顶层块后插块;清单项后插同深度兄弟项
appendSection追加章节
deleteBlock删除整个顶层块
deleteListItem删除清单 / 任务项,末项删除后引擎清理父清单
setTitle改元数据标题,不动正文

请求级 opId 幂等只施加于 deleteBlockdeleteListIteminsertAfterBlock 三类结构性操作;所有 proposal 另带随机 clientMutationId

纸面板(client)

青简 web 编辑器源码直接编译进插件(vendor/qingagent submodule),观感与桌面端同源:

  • 逐条裁决DocumentSnapshotView 接补丁集合,底部 PatchNav 支持前后跳转、全部拒绝与结算;结算后仅在有拒绝项时回流一条结构化【审核结果】消息;
  • 全文审阅:改动比例高时切换到新旧版导航,可「应用新版 / 退回旧版」;
  • 批注轮播:外部批注转成产品 AnnotationGroup,装饰进 PM 并用青简原生轮播渲染;正文补丁审阅期间批注自动隐藏;
  • 选段 chip:选区文本与块坐标写入桥,转成输入框引用,支持多条、去重、悬浮全文;
  • 图与导出:draw.io 图块双击开离线编辑器并回写;导出菜单支持 PDF / DOCX / HTML / Markdown / TXT;
  • 深链qingjian://open?engineSessionId=<id> 拉起桌面客户端。

来源归属:本插件的所有外部写入固定标注 x-qa-client: deepseek,在青简客户端里显示为「DeepSeek Harness」来源。


连接与自愈

  1. 实例发现:读取当前用户的 ~/.qingagent/instance.json,要求 schemaVersion=2,校验 port / pid / version / attachProtocolVersion / token / startedAt
  2. 端口权威:实例存在时忽略配置里的 engineUrl 端口,直连 http://127.0.0.1:<instance.port>(青简桌面端口默认 21823,被占则随机);
  3. 握手:校验 attach 协议与进程存活,再带 Bearer 请求 health;遇 401 会重读一次实例文件与 token;
  4. 四种状态online / offline / starting / handshake-failed,各带细分原因;
  5. 退避重连:失败间隔 5s → 10s → 20s → 30s,之后维持 30s;恢复 online 后回到 5s 健康检查节奏;
  6. 客户端检测:Windows 查 HKCU 协议注册与 HKCU/HKLM 卸载项(含 /reg:64 视图);macOS 用 mdfind 查 bundle id,回退 /Applications/青简.app 与用户 Applications 目录;探测结果缓存 30 秒。启动端点只接受检测器解析并 stat 过的路径,不接受浏览器提交的可执行文件路径。

autoLaunch 配合 engineCommand 时,等待引擎就绪的预算是 20 秒。


配置

字段默认值说明
engineUrlhttp://127.0.0.1:8080仅作回退:读不到 instance.json 时使用;实例存在时以其端口为权威
engineCommand / engineCwd未设置可选启动命令与工作目录,仅 autoLaunch 时执行
autoLaunchfalse离线时 detached 拉起引擎;卸载插件不会杀掉用户的引擎
sideModel.provider / .model未设置当前 Agent 未公开 provider/model 时的回退;整段可省略,写则两项必填
workspaceProjectiontrue保留字段,当前无运行时效果

安全边界

  • token 永不进浏览器instance.json 与其中的 token 只由 Node host 读取,健康检查、external API、导出请求的 Bearer 由 host 添加;下发给浏览器的桥载荷只含引擎状态、绑定、文稿与选段,不含 token。
  • 桥仅回环可达/qingagent-bridge/*/drawio 在进入业务逻辑前拒绝非回环地址(认可 IPv4 / IPv6 / IPv4-mapped loopback)。
  • 会话隔离:文稿读写、资产、导出、审阅都按 dshSessionId + engineSessionId 绑定校验;focusadopt:true 是显式收养例外,会先探测引擎文稿再加入本会话。
  • 样式隔离:动态引入的 vendor CSS 包进 @scope,机械提取的 qingdoc.css[data-qingagent-doc-panel] 选择器前缀重写——两条路都不泄漏到宿主界面。
  • QingML 渲染:生产渲染走青简的 qingmlParse,标签白名单显式枚举,链接与图片各有白名单校验,最终还要通过 Zod schema 才能进入 ProseMirror;script / style 直接丢弃。
  • draw.io 资产:只支持 GET/HEAD,拦截目录逃逸,HTML 下发 CSP 与 SAMEORIGIN;iframe 消息校验 event.source 与同源 origin。

绑定数据存于 @deepseek-ai/dsh-storage-domaindsh_qingagent v1 domain。

匿名使用统计

插件默认开启匿名使用统计,事件由 DSH 的 Node 进程发送到自托管 Umami:https://t.qingagent.com/api/send。服务端会像普通网站服务一样看到请求 IP;插件不发送正文、标题、字数原值、写作简报、用户消息、会话 ID、文稿引用、文件路径、工作区 / profile 名或错误堆栈。

每条事件的公共属性仅有:随机生成并存于独立 dsh_qingagent_telemetry 存储域的匿名 device_idpluginVersion、可取得时的 dshVersionplatformarchnodeVersionlocale。事件属性如下,所有计数只发分桶、不发原值:

事件属性
plugin_activated首次运行、装机龄分桶、引擎状态、是否写过 / 编辑过 / 审阅过
panel_opened打开来源(工具卡 / 手动 / 自动)
draft_created字数分桶、块数分桶、是否触发空壳重试
draft_edited操作数分桶、去重后的操作类型、结果(已提交 / 待审)
edit_rejected拒绝原因枚举
review_settled提交 / 放弃、补丁数分桶、是否发生 409 重试
engine_unreachable连接状态原因枚举;仅状态翻转时发送
update_clicked / feedback_clicked前后版本号 / 反馈目标枚举
doc_missing_shown无额外属性

当前采集项以本节为准,变更时会同步更新。

设置以下任一环境变量即可完全关闭,不会创建匿名 ID,也不会发送事件:

DSH_QINGAGENT_TELEMETRY_DISABLED=1
# 或尊重青简全局开关
QINGAGENT_TELEMETRY_DISABLED=1

从源码开发

git clone --recursive https://github.com/void2anything/dsh-qingagent.git
cd dsh-qingagent
npm install
npm run check   # CSS 钉扎校验 + 类型 + 测试 + 构建

# POSIX shell
npx @deepseek-ai/dsh plugin --profile web add link:$(pwd)
# Windows PowerShell
npx @deepseek-ai/dsh plugin --profile web add link:${PWD}

忘了 --recursive 就补 git submodule update --init。构建脚本使用 POSIX 工具(rm -rf 等),Windows 上建议在 Git Bash / WSL 里执行开发构建。

package.json 中的 dsh.bundle.patch 会合并仓内 cordis.patch.yml;不要同时保留手写挂载与 bundle 挂载,以免双重注册。

构建期依赖:vendor/qingagent submodule

纸面渲染直接复用青简 apps/web 的源码与 CSS,构建期从 QING_ROOT 读取:

  • 默认 vendor/qingagent(submodule,钉在校验过的 commit);
  • QING_ROOT=/path/to/qingagent 可覆盖(本地开发指向自己的青简工作树);
  • drawio 离线运行时也从该处发布,QINGAGENT_DRAWIO_ROOT 可单独覆盖。

CSS 按「文件 + 行段」机械提取(scripts/extract-qingdoc-css.mjs),npm run check:qingdoc-css 做字节级比对,并被 checkprepack 依赖:升级 submodule 后必须先跑它——行号漂移会导致提取切坏、构建残缺。校验红灯 = 禁止发布;修好钉扎(对齐新行号)后再走全检。

测试

npm run check   # 全检:CSS 钉扎 + typecheck + vitest + build
npm test        # 仅单测

契约测试锁住:纸面 800px 版心、宋体、直角与暖纸色板只作用于面板根;CSS 提取与钉扎行段一致;bridge 回环与会话隔离;QingML XSS 白名单;审阅态拦截与 401 token 重读等。


用户交流群

扫码加入用户微信群,反馈问题、提需求、看更新:


联系作者


License

Apache-2.0(本仓)。vendor/qingagent submodule 为 青简,MIT。

Project files and signals

Shown items are public repository signals detected in the directory snapshot.

TestsDetected
DocumentationDetected

Repository information

Language
TypeScript
License
NOASSERTION
Latest release
v0.1.23
Last updated
Aug 18, 2026, 4:11 PM

Install deliberately

Review source code, permissions, lifecycle hooks, dependencies and network access. Test untrusted plugins in an isolated environment.