dsh-tool-notion:Notion 区块与 Markdown 的双向转换

前言

在 DeepSeek Harness(DSH)里做笔记、文档或 Runbook 类内容时,常见路径是:从 Notion 导出或通过 API 拿到区块数组,再在本地用 Markdown 编辑、进测试或交给智能体处理;写完后又要变回 Notion 能 append 的区块形状。手写「数组 ↔ 字符串」往往低估富文本 run、注解边界和 callout 映射带来的不对称。下面介绍社区插件 dsh-tool-notion(维护者 yuehancn),它在 DSH 进程内提供离线转换工具,不发起 Notion 网络请求。

这是什么

dsh-tool-notion 是面向 DeepSeek Harness 的工具插件:把 Notion 区块数组转成 Notion 风格 Markdown,再把 Markdown 转回可回写的区块数组,并附带结构校验与能力查询。README 明确说明没有 Notion API 客户端;转换过程不做外部网络请求,适合离线跑和自动化测试。

在 SkillHub 插件目录 中该条目分类为「模型推理」,与目录简介「DeepSeek Harness plugin」一致;具体能力以仓库 README 为准。当前 GitHub 星标为 0;package.json 版本为 1.0.0,许可证 MIT。DSH 社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

核心功能

插件通过四个工具暴露能力(名称来自 README):

工具 作用
notion_status 转换前查询:支持转 Markdown / 转区块的块类型、五种注解键、callout 标签与 emoji 对应、workDir / outputDir 绝对路径
notion_to_md 区块数组 → Notion 风格 Markdown;无法表示的结构会显式报告
notion_to_blocks Markdown → 区块数组,产出可直接对接 Notion append 类接口的数据形状
notion_validate 不转换,检查区块结构、未知块类型、空 run、callout 回读风险等「往返是否会丢信息」的问题

参数入口(摘录自 README):

notion_to_md 三选一:

{ blocks:        [ … ] }
{ blocksJson:    "[…]" }        // 字符串形式的 API 响应,内部 JSON.parse
{ results: { … } }              // 带 results 的 API 包装对象

README 说明:因 defineTool 会在 execute 前校验类型,blocks 只能收数组;原始 API 对象需走 blocksJson 或带 results 的包装,避免 "blocks" must be an array 被框架提前拒绝。

notion_to_blocks:

{ markdown: "# Title\n\nSome **bold** text." }
{ path: "notes/export.md" }        // 相对 workDir 解析

notion_validate 收 blocks / blocksJson,聚焦会静默丢信息的结构问题,而非 Notion 侧「是否合法」的完整判定。

实现上,Notion 段落是多段富文本 run(各自带 bold / italic / strikethrough / underline / code 与链接),Markdown 段落是单字符串;切分 run 与合并 run 不是互逆的简单反转,这是插件逻辑与测试的主要关注点。行内标记顺序、反斜杠奇偶性、围栏加宽、callout 语义标签与 emoji 的双射映射等细节在 README 中有说明,并配有 403 条测试断言(三个套件)。

安装与启用

1、在 DSH 插件配置中声明工作目录与输出目录(来自 README 的 cordis.patch.yml 示例):

# cordis.patch.yml
plugins:
  dsh-tool-notion:
    workDir: "."
    outputDir: "notion-output"

2、安装插件(命令须与资料一致):

dsh plugin add dsh-tool-notion

package.json 要求 dsh 引擎 >=0.2.0-rc.2,并声明 @deepseek-ai/cordis、@deepseek-ai/dsh-tools 等 peer 依赖;安装后按你的 Harness 项目方式加载 cordis.patch.yml 即可。

典型用法

先看能力边界

在批量转换前调用 notion_status,对照 toMarkdown、toBlocks、annotations、callouts 与 directories,把「不支持的块类型」列为已知边界,避免转换中途才发现内容丢失。

导出 → Markdown

将从 Notion 导出或 API 拿到的区块数组(或 blocksJson / results 包装)传给 notion_to_md,得到可在仓库或编辑器中维护的 Markdown。需要确认结构时,可先 notion_validate 再转换。

Markdown → 回写区块

本地改完 Markdown 后,用 notion_to_blocks 传入字符串,或通过 path 读取相对 workDir 的文件(README 注明:path 按 workDir 解析,绝对路径会被拼到 workDir 之后,用于限制读配置根目录之外)。产出的数组再交给你们自有的 Notion API 调用层 append。

本地验证

维护者提供的测试入口:

node _test/run-all.mjs

README 记录当前三套合计 403 passed(logic / integration / e2e),用于回归行内扫描、工具 schema、workDir 路径规则与端到端往返文档。

适用场景与注意

适合谁

  • 已在 DSH 或 Cordis 生态中编排工具,需要把 Notion 区块与 Markdown 在无 API 客户端、无网络前提下做往返转换的团队或个人。
  • 希望转换失败或信息损失有报告,而不是静默吞掉 run、callout 或未知块类型的场景。
  • 需要把笔记导出进 Git、CI 测试或智能体可读文本,再生成 Notion 区块 payload 的工作流(网络与鉴权仍由你们自己的 Notion 集成负责)。

注意

  • 插件在当前 DSH 进程权限下运行;notion_to_blocks 的 path 受 workDir 约束。安装前应阅读 源码仓库 与 MIT 许可证,确认符合内网与合规要求。
  • 不支持或未映射的块类型不会 magically 变成 Notion 全功能等价物;务必结合 notion_status 与 notion_validate 评估损失面。
  • SkillHub 分类「模型推理」描述的是目录归类,不等同于插件内置大模型推理;本质是格式转换工具。

结尾

dsh-tool-notion 把 Notion 区块数组与 Notion 风味 Markdown 之间的双向转换、校验和能力查询收进 DSH 四个工具,强调注解边界、callout 双射与显式报错,便于离线测试与文档流水线。进一步了解可访问 SkillHub 目录页 与 GitHub 仓库。

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

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

小夜