news 2026/10/4 14:07:20

Whiteboard JSON Review API完整参考:从create到edit命令的开发者手册

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Whiteboard JSON Review API完整参考:从create到edit命令的开发者手册

Whiteboard JSON Review API完整参考:从create到edit命令的开发者手册

【免费下载链接】whiteboardopen-source canvas for thoughtful software design项目地址: https://gitcode.com/gh_mirrors/whiteboard36/whiteboard

Whiteboard 是一个面向深思熟虑的软件设计的开源画布(canvas),它的核心是一套JSON Review API:用一条create命令就能建好 Review 文档,再用五种edit编辑操作(insert / update / move / remove / replace)持续改写。这套 API 同时服务于桌面端画布、whiteboard api命令行与 MCP 适配器,是 AI Agent 自动写作评审文档的关键入口。本文带你从 0 到 1 走通它。

🧭 30 秒认识 Whiteboard Review API

整套 API 挂在/reviews-api路由下,桌面应用与无头模式(whiteboard server start)共享同一个本地 JSON 存储review-api.db,并统一使用 token 认证 + 有界 JSON 请求读取器。核心机制可以概括为三点:

  • 一条命令一个版本:所有写操作都走POST /commands,每个被接受的编辑立即保存为一个带标题和时间戳的版本;
  • 幂等重试:请求携带commandId(可省略,由服务端分配),丢失响应后用相同commandId重试只会拿回第一次的结果,绝不会写两遍;
  • 租约式编辑:通过review_activity_begin获取 3 分钟有效期的编辑租约(lease),避免多个 Agent 互相覆盖。

完整路由表见官方参考:packages/review/src/review-api/README.md

🚀 两种调用方式:whiteboard api与whiteboard mcp

所有工具都是薄 HTTP 客户端,工具目录直接来自服务端,因此永远不会与服务端"漂移"。常用形态:

  • whiteboard api tools—— 列出服务端当前发布的全部工具名与输入 Schema;
  • whiteboard api <tool-name> '<json>'—— 直接调用一个工具,例如whiteboard api review_get '{"reviewId":"…","full":true}';
  • whiteboard api <tool-name> -—— 从 stdin 读入 JSON;
  • whiteboard mcp—— 以 stdio 方式暴露 MCP 适配器(需要桌面端或whiteboard server start正在运行)。

解析与委托逻辑位于 packages/review/src/review-api/agent-cli.ts。

📦 create 命令详解:三种方式建好第一个 Review

create是 JSON Review API 的起点,它支持三种目标(target),可按需选择:

方式参数适用场景
worktree 目标{kind:"worktree", repositoryId, base?}评审已保存的工作文件(含未提交、未跟踪文件),base缺省为仓库默认分支
commits 目标{kind:"commits", repositoryId, head, base?}固定到不可变 commit,适合归档式评审;给父 commit 可评审单个提交的改动
GitHub PRpullRequestUrl(可单独使用)服务端自动拉取 PR 到已注册的 checkout,钉住 PR head 与 diff base,标题默认取 PR 标题

最小示例:

{ "commandId": "8575b264-9ef4-46c9-af3c-8185545aeebd", "operation": { "type": "create", "title": "My change", "target": { "kind": "worktree", "repositoryId": "repo-1" } } }

几个高频要点:

  1. 返回值自带上下文:结果携带review字段(含已解析 commit 的 target、origin 的 PR、仓库名与路径),diff 前无需再读一次;
  2. PR 复用:对同一 PR 重复create会返回已存在的评审并报告headMoved,可用reuseExisting:false强制新建;
  3. 后台写作:设open:false可不在桌面端弹出新评审,实现纯后台创作;
  4. scratchpad:kind:"scratchpad"指向唯一的草稿板,插入的内容置顶(最新在上)。

工具描述原文:packages/review/src/review-api/authoring-tools.ts

✏️ edit 命令详解:五种编辑操作一览

edit接收{reviewId, edit},其中edit是五选一的操作:

操作参数行为
insertcontent, parentId?, afterId?插入新块;缺省追加到文档根
updatetargetId, changes字段级补丁,保留未给出的字段,null删除可选字段
movetargetId, parentId?, afterId?移动块到新位置
removetargetId删除块(删除流程图节点会连带删除其边)
replacetargetId, content保留外层 ID、子节点换新 ID 的整体替换

典型 insert 请求:

{ "operation": { "type": "edit", "reviewId": "<create 返回的 ID>", "edit": { "type": "insert", "content": { "type": "markdown", "markdown": "# Summary\n\nWhat changed." } } } }

必须知道的规则:

  • 位置缺省即追加(scratchpad 上则是置顶);
  • 图元有边界:序列图的step、流程图的flow_node/flow_edge必须以所属图为父级,不能跨图移动;新flow_node可携带link:{from|to}一次性带上边;
  • 写小写勤:有读者在看时,一次只写一个段落,画布会"边写边画";整图则一次插入,画布一次性快速描画;
  • 结果即地址:insert / replace 的返回会给出目标块 ID 及其一级子节点,新组件无需再读就能继续编辑;
  • 无版本号参数:后到的同字段编辑获胜,冲突而非合并。

每个被接受的编辑还会在版本上留下lastEdit元数据(类型、落点、所属块),用于画布的落笔动画。

🧱 块内容参考:14 种 building block

文档是一棵由 Markdown 和自包含组件构成的树,服务端会直接给对象分配 ID。全部 14 种块类型注册在 packages/review/src/review-api/blocks/index.ts:

类型用途一句话说明
markdown正文安全 Markdown;仓库文件链接须用review-source:head/path#L10-L24形式
code代码片段language+text,可选caption
section分节必须有children(不是blocks),标题自动生成锚点
callout提示框醒目的说明性容器
tutorial教程带步骤的教学结构
flow_diagram流程图nodes+edges数组,节点 key 唯一
sequence时序图actors映射 +steps消息数组
call_stack_diff调用栈对比base与head两个帧数组,各自可为空
database_lens数据库视角actors/stores/collections/fields+ 用例操作
code_peek源码窥视钉住文件与 1 基行号区间
software_map软件地图引用已上传的 map 资源
trace_quote追踪引用引用已上传的 trace 资源
image图片引用已上传的图片资源
divider分隔线视觉分隔

Markdown 中的源码链接是 JSON Review API 的特色:label(base侧同理),路径相对仓库且需 URL 编码,无效路径或行号会在保存前被拒绝。

🔄 配套命令与工具速查

写文档之外,API 还提供一整套辅助命令(均为POST /commands的 operation 或独立 GET 路由):

  • 生命周期:rename改标题、set_target换目标(保留内容)、repin换源钉、restore恢复历史版本、attention标记已读/可逆弃置、delete永久删除;
  • 读取:review_list列表、review_get可读文本大纲(targetId精确读一个组件、full:true读全文、format:"json"拿原始数据)、review_history版本列表、review_diff变更文件摘要或纯文本 patch(每行带 base/head 行号,正好用于生成review-source链接);
  • 源文件访问:review_source(精确行区间)、review_file(整文件)、review_tree(目录)、review_commits(提交列表);
  • 资源:review_upload上传图片 / trace / map(内容不可变,复用 ID 要求内容一致);
  • 租约:review_activity_begin/review_activity_update/review_activity_end三段式管理写作会话,lenses与document两种 scope 可被不同会话同时持有。

🗺️ 一条典型的自动化写作流水线

把上面的能力串起来,一个 Agent 的完整工作流是:

  1. review_register_repository—— 注册本地 Git 仓库;
  2. review_resolve_pins—— 把分支/标签解析为不可变 commit ID(worktree 目标可跳过);
  3. review_create—— 建评审,拿到reviewId;
  4. review_activity_begin—— 获取编辑租约,记下leaseId;
  5. review_edit× N —— 小步插入内容,长停顿用review_activity_update续期;
  6. review_activity_end—— 结束会话,读者即可视为"完成"。

💡 记忆口诀:create 定目标,lease 保安全,edit 写小步,commandId 保幂等。

⚠️ 新手最容易踩的 5 个坑

  1. 字段名写错:section 要children不是blocks;markdown 块要markdown不是text;
  2. 忘了租约:另一会话持有租约时你的写入会得到 HTTP 409,先begin再写;
  3. 重试方式不对:响应丢失后必须用相同的commandId和输入重试,而不是重新生成;
  4. 图元跨图移动:flow_node/step不能脱离所属图,删除节点会连带删边;
  5. 源码链接不校验:review-source:链接的行号必须是真实存在的范围,写错会被保存前拒绝。

📚 延伸阅读

  • API 路由与存储全解:packages/review/src/review-api/README.md
  • 工具定义与 Schema:packages/review/src/review-api/authoring-tools.ts
  • 块类型注册表:packages/review/src/review-api/blocks/index.ts
  • CLI 适配层:packages/review/src/review-api/agent-cli.ts
  • 创作指导文档:packages/review/instructions/authoring.md
  • 仓库说明:README.md

掌握 create 与 edit 这两个核心命令后,你就拥有了用 JSON Review API 驱动 Whiteboard 画布的完整能力——从注册仓库到逐段落笔,整个流程都可脚本化、可重试、可协作。

【免费下载链接】whiteboardopen-source canvas for thoughtful software design项目地址: https://gitcode.com/gh_mirrors/whiteboard36/whiteboard

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/4 14:07:13

AI工程从零到一:数据、模型、部署与迭代的完整实践

1. "AI工程"到底在工程什么&#xff1a;先搞清楚这四件事很多人第一次看到 "ai-engineering-from-scratch" 这个标题&#xff0c;第一反应是"又要从线性代数开始啃了"&#xff0c;或者"是不是要手写一个神经网络才算数"。我最初也这么…

作者头像 李华
网站建设 2026/10/4 14:05:07

K8s中Java OOM定位:PID获取、堆转储与MAT分析实战

1. 为什么在K8s里定位Java OOM比本地开发难十倍&#xff1f;“怎么定位K8s容器中运行的JAVA程序OOM异常&#xff08;一&#xff09;”——这个标题背后藏着无数Java后端工程师深夜盯着Prometheus告警面板、反复exec进Pod却一无所获的挫败感。我带过的三个中型微服务团队&#x…

作者头像 李华
网站建设 2026/10/4 14:04:38

AI推理框架与编译栈:从计算图到硬件的高效映射

同一个 PyTorch 模型&#xff0c;在训练机上跑得飞快&#xff0c;一旦部署到边缘设备或者换了 GPU 型号&#xff0c;速度能掉一个数量级甚至直接崩掉。绝大多数刚接触部署的工程师&#xff0c;第一反应是“代码没写对”&#xff0c;但真正的原因往往是推理框架和 AI 编译栈在“…

作者头像 李华
网站建设 2026/10/4 14:03:50

别只看能不能调通:TaoToken 统一 Key 通道选型要先验证这五件事

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/4 14:01:46

Python读取MATLAB v7.3 .mat文件:HDF5原理与hdf5storage实战

1. 为什么.mat文件在Python里读起来像“拆盲盒”——v7.3版本的特殊性与真实痛点你有没有过这样的经历&#xff1a;用MATLAB保存了一个变量&#xff0c;明明只存了几个数组&#xff0c;结果生成的.mat文件却有几百MB&#xff1b;或者把文件发给同事&#xff0c;对方用scipy.io.…

作者头像 李华