dsh-quarto-book:在 DSH 里写 Quarto Book 章节、查结构、维护主题

前言

用 Quarto Book 写长文档时,章节骨架、_quarto.yml 结构、中文行文和主题 CSS 往往分散在多轮对话里,改完正文又动到 palette 或导航,容易互相踩线。手工跑 quarto render 再肉眼翻 _book/ 里的 HTML,也很难形成固定收尾。

DeepSeek Harness(DSH)把能力拆成可安装的插件;社区目录在 skillhub.cn 上维护,与 DeepSeek / 幻方无官方从属关系。下面介绍维护者 chengzhao-dev 发布的 dsh-quarto-book:只在 type: book 的仓库里生效,把「写 .qmd」「改主题」「渲染后检查」「一轮结束回执」分成可调用技能与工具,而不是常驻进程或会话开始时自动跑全流程。

这是什么

dsh-quarto-book(npm 包名 @chengzhao-dev/dsh-quarto-book)面向 Quarto Book 项目:写章节、检查结构并维护主题。插件分类为工作流;GitHub 仓库 当前星标为 0。许可为 MIT;主题内 LXGW Bright 系列字体按 SIL Open Font License 1.1 使用。

装上之后还要过工作区门禁:按会话 cwd 判断当前目录是否为一本书,通过后技能名才会出现在会话里。门禁的六类情形见仓库内 docs/plugin-boundaries.md。

核心功能

插件提供两个按需发现的技能,以及两个收尾与发布检查用的工具。技能里的相对路径以各自技能目录为基准解析。

名称 用途 不做什么
writing-quarto 新建或修改 content/**/*.qmd、index.qmd、_quarto.yml;章节骨架、中文行文、代码与图表、内容检查 不改 CSS、字体和颜色
designing-theme 调整主题的 CSS、SCSS、字体、palette、导航与 Callout 样式 不改章节正文
quarto_render_check 先判断 output-dir 是否安全,再按需渲染一次,检查 _book/ 里的 HTML 是否可发布 不改 .qmd,不自动修配置,不重复渲染
quarto_pass_report 收尾时把执行结论压成一张固定行数的回执卡片:技能、模式、改过的文件与步骤、未改项、检查结论 不保存到磁盘,不贴章节原文,不据回执改文章
  • 写章节:writing-quarto 使用包内 steps/、examples/、quarto/、scripts/。
  • 改主题:designing-theme 使用 references/、knowledge/、assets/、scripts/;权威主题在 skills/designing-theme/assets/theme/,书内 theme/ 是渲染副本。已有副本时只改副本;仅当用户明确要求「把插件主题装进这本书」且目标目录不存在时,才从包复制并写入过滤器 filters/answering-disclosure.lua。_quarto.yml 只引用书内副本,不指向 npm 包或插件检出目录。
  • 渲染与 HTML 检查:quarto_render_check 调包内脚本处理 Callout、HTML 产物与 DOM 契约;designing-theme 的 scripts/checking-layout.py 在渲染后的 HTML 上检查溢出、对比度和页面结构。apply() 不在加载时跑这些脚本,也不跑 quarto render。

项目可放一份自己的约定技能:<book>/.agents/skills/quarto-book-project/(模板在包内 templates/quarto-book-project/)。存在时,两个通用技能会先读它的 SKILL.md,再按它指向的 writing/ 文件读章节表。不要把同名技能嵌进书仓库:DSH 在同一技能层按 rank 取一个,.agents/skills(rank 200)优先于插件(rank 550);书里再放 writing-quarto 或 designing-theme 会让插件正文失效。

从安装到回执的五层结构、文件分流与渲染顺序见 docs/plugin-flow.md(给人回看的流程说明,不是技能执行时的规则来源)。

安装与启用

要求 DSH 0.2.x、Node.js 22 及以上。发布包已带编译后的 lib/,安装后不需要构建。内容与链接检查需要 Python 3;quarto_render_check 真正渲染时需要 Quarto CLI,渲染后的 HTML 检查同样用 Python 3。环境分工见 docs/plugin-layout.md。

安装单位是 profile,不是仓库:只影响执行 add 的那个 profile。--profile 换成你实际运行的那个 profile。桌面应用固定跑 desktop profile,且该 profile 由应用独占管理,dsh --profile desktop 直接启动会被拒绝;安装或升级可用 dsh plugin --profile desktop add <包>,若应用拒绝写入,再走「设置 → 插件 → 添加插件」,地址填下面的 npm 坐标。

当前 README 给出的安装命令(版本 0.4.3):

dsh plugin --profile web add npm:@chengzhao-dev/dsh-quarto-book@0.4.3

想跟 GitHub 标签时,也可以写:

dsh plugin --profile web add github:chengzhao-dev/dsh-quarto-book#v0.4.3

从旧的无作用域包 dsh-quarto-book 升级时(该包已随 0.3.4 从 npm 删除,只影响之前装过它的 profile),先在同一 profile 里执行 dsh plugin --profile <profile> remove dsh-quarto-book,再装新包。两个包同时留着会以相同的 rank 550 各注册一遍 writing-quarto 和 designing-theme。

插件以 bundle 形式发布;入口不 import 宿主实现,在 pnpm 的严格依赖布局下也能加载。安装前应自行查看 GitHub 源码 与许可证;插件以当前 DSH 进程的权限运行,与你在本机执行 dsh 的权限一致。

典型用法

在 type: book 的仓库里加载 writing-quarto 或 designing-theme,按各技能目录下 SKILL.md 的步骤执行。插件没有常驻进程,也不会在会话开始时自动执行技能;只有调用 skill、quarto_render_check 或 quarto_pass_report 才算一次使用。同一会话再次调用会重新读技能正文;工具不会自动重试,失败后由你决定是否再调一次。

内容与链接检查在 writing-quarto 技能目录下可手动运行(日常章节检查跑前两条即可;checking-names.py 只在全仓重构时加跑):

python scripts/verifying-content.py --root <book>
python scripts/checking-links.py --root <book>
python scripts/checking-names.py --root <book>

一轮内容或主题工作结束时,调用一次 quarto_pass_report,把这次执行的结论压成卡片;卡片就是回执,回复里不必再复述。需要确认可发布性时,用 quarto_render_check 完成安全判断、按需渲染与 HTML 检查;不要手跑包内 checking-callouts.py、checking-output.py 或 checking-dom.py,由该工具统一调度。

若你在本地改插件源码,可把仓库链接进写书用的 profile(示例路径按你的机器修改):

dsh plugin --profile web add D:\Github\dsh-quarto-book

改完 SKILL.md 或 steps/ 后,下一次 skill 调用会重读,不必发 npm。包内主题改动不会自动进书的 HTML;要看页面效果,把改过的文件同步到书的 theme/,再在书根运行 quarto render。

适用场景与注意

适合已经在用 Quarto Book、希望在 DSH 会话里把「写作 / 主题 / 渲染检查 / 回执」拆开执行的人。不适合非 type: book 的仓库,也不会在未过门禁的目录里暴露上述技能名。

注意:

  1. 旧装机脚本 scripts/embedding-agents.ps1 会把两棵技能复制进目标仓库的 .agents/ 并按 rank 200 盖住插件;新书不要用,只有离线归档独立技能树时才执行,命令写在脚本头部。
  2. 不要把 _quarto.yml 指到插件检出目录,换机器后路径不存在。
  3. 社区目录页:https://www.skillhub.cn/plugins/chengzhao-dev/dsh-quarto-book。

结尾

dsh-quarto-book 把 Quarto Book 的长文档工作拆成写作技能、主题技能,以及渲染检查与 pass 回执两个工具,并限定在书本工作区与 profile 安装范围内生效。若要核对版本与文档索引,以 GitHub README 与 skillhub 目录页 为准。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye