如昨天消息预告的一样等待tldraw放大招了,tldraw没让大家多等待,把全套可以基于AI的解决方案放出来了。
在官网上,tldraw称之为Starter kits,包括workflow, chat, agent, branching chat, multiplayer。
对应github上五个项目,我把它们集中到了一起,统称为flow。目的是为了整合进自己目前的各项目中。
自从与gemini-2.0共同发布的tldraw compute发布以来,已经过去了九个月时间,昨天“预告”里也说了:9个月等于恍若隔世了。
Gemini 2.0加持下的最佳AI应用已经出现,还完全免费
我一直认为这套解决方案藏着AI超级助手在脱离“显示交互”前的终极形态,如今tldraw终于更新了,还进行了更细的分类和交互优化。当然,如何整合,就是用户的工作了。
我让codex进行了完整的项目分析,分析报告留在最后。
先只做一个案例的展示,一段录屏可能可以非常好的解释,为什么我认为这里藏着终极钥匙。
以下是使用codex一键生成的项目分析:从内容到所有架构图,最终输出一篇docx文档(上面那张模版全景图也属于它)。就是一句提示词而已。Claude Code正式下岗。

Flow 模板全景
1. 项目集总体概览
定位:flow 根目录下收录了 5 套以 tldraw 生态为核心的前端/全栈模板,覆盖 AI 白板代理、可视化对话、同步服务、白板增强聊天与工作流编排等场景。
共同特性:均采用 React 生态,强调 tldraw 的自定义 shape、工具链与 Cloudflare Workers、Vercel AI SDK 等第三方集成功能。
差异化:从轻量前端模版(workflow-template)到含 Durable Object 与 R2 持久化的重型实时系统(tldraw-sync-cloudflare),复杂度层次分明,便于按需选型。
目录结构:各模板独立维护依赖与构建配置,可单独运行。docs/diagrams 下为本文生成的架构配图,scripts/generate_diagrams.py 可复现。
2. agent-template —— AI 代理驱动的画布自动化

agent-template 架构
2.1 项目概述
目标:构建能够理解画布上下文、规划操作并执行的 AI Agent,用户通过右侧对话面板驱动代理操作 tldraw 画布。
技术栈:Vite + React + tldraw 前端,Cloudflare Worker + Durable Object 后端,AI 侧接入 OpenAI / Anthropic / Google(三方可选)。
核心思想:前端只负责交互与状态同步,将能力拆分成「能看到什么」与「能做什么」两大列表,通过 shared 目录统一配置,可扩展、可裁剪。
2.2 关键代码结构
- client/App.tsx:装配
、初始化代理、注册工具、自定义 UI。 - client/agent/TldrawAgent.ts:封装代理生命周期、消息循环,提供 prompt/cancel/reset 等接口。
- shared/AgentUtils.ts:汇总 PROMPT_PART_UTILS 与 AGENT_ACTION_UTILS,是扩展视野/动作的核心入口。
- shared/parts/*:面向模型的上下文拼装,如 ScreenshotPartUtil、TodoListPartUtil 等。
- shared/actions/*:具体动作实现,例如 PenActionUtil 绘制笔迹、StackActionUtil 处理批量排布。
- worker/worker.ts:使用 itty-router 暴露 /stream SSE 接口,负责跨域与预检。
- worker/do/AgentDurableObject.ts:Durable Object 负责与模型交互,保证同一用户会话状态一致。
- worker/do/AgentService.ts:封装 Vercel AI SDK 的 streamText,统一抽象多模型配置、事件流拆解。
2.3 运行流程
- 用户在前端触发对话或操作,TldrawAgent 根据当前画布状态构造 AgentPrompt。
- Prompt 通过 /stream POST 到 Cloudflare Worker,Worker 将请求转发至 Durable Object。
- Durable Object 调用 AgentService.stream,利用 buildSystemPrompt 与 buildMessages 拼装上下文。
- streamText 返回逐步构造的 JSON 片段,closeAndParseJson 尝试补全,构成流式 AgentAction。
- 动作事件通过 SSE 回到前端,TldrawAgent 根据类型执行(创建/移动/批量操作/外部查询等)。
2.4 开发与扩展建议
- 新增感知能力:在 shared/parts 新建 util 并注册到 PROMPT_PART_UTILS。
- 新增动作:定义 Zod schema、实现 AgentActionUtil 子类,放入 AGENT_ACTION_UTILS。
- 调整模型:在 worker/models.ts 声明新模型 id,更新 wrangler.toml 注入 API Key。
- 外部 API:参考 CountryInfoActionUtil、RandomWikipediaArticleActionUtil 定义业务集成。
- 避免 JSON 崩溃:动作返回需满足 { actions: [{ _type: string, ...}] } 规范,可借助 UnknownActionUtil 容错。
2.5 运维要点
- SSE 长连接需配置 Cache-Control: no-transform,防止代理缓存。
- Durable Object 以名称 anonymous 进行聚合,可根据用户身份拆分房间。
- 大模型调用应限制返回 token(模板默认 8192),并针对 Gemini 配置 thinkingBudget。
3. branching-chat-template —— 可视化分支对话工作台

branching-chat-template 数据流
3.1 项目概述
定位:在无限画布上构建「对话节点」和「连接线」,形成可视化的分支会话树,适合聊天机器人设计、互动小说等场景。
技术栈:前端使用 tldraw 自定义 shape、binding、toolbar;后端为 Cloudflare Worker + Durable Object;AI 服务通过 Vercel AI SDK(默认 Google Gemini)。
亮点:
- 自定义节点渲染 MessageNode,支持流式响应填充。
- 连接系统 ConnectionShapeUtil + ConnectionBindingUtil 保证线条层级与绑定寿命。
- PointingPort 扩展 select tool,实现端口拖拽建连。
3.2 核心模块
- client/App.tsx:注入自定义 toolbar、注册 shape/binding,并在 onMount 钩子里添加工具状态。
- client/nodes/types/MessageNode.tsx:定义消息节点结构、AI 回调逻辑、动态高度计算。
- client/connection/keepConnectionsAtBottom.tsx:监听事件把连接保持在底层,避免遮挡。
- client/ports/PointingPort.tsx:把端口交互注册到 tldraw 状态机,支持「拖出连线」「点击新增节点」。
- worker/routes/stream.ts:Worker 将请求转发到 Durable Object,并升级为 SSE。
- worker/do.ts:Durable Object 管理分支上下文、调用 AI 并流式回传。
3.3 对话构建与推理流程
- 用户在画布添加/连接节点,每个节点保留消息文本与 AI 回复区。
- 发送消息时,前端根据连接关系回溯路径,合成完整对话历史,打包发送给 Worker。
- Durable Object 接管会话状态,调用 Vercel AI SDK,按片段推送至前端。
- 前端流式补全节点内容,节点完成后可以继续演化为多个分支。
3.4 开发注意事项
- 自定义节点需在 nodeTypes.tsx 注册,包含 Component、getPorts、getDefaultProps 等。
- 连接线为独立 shape,需要正确设置 parentId 和 meta 保持画布层次。
- Durable Object 可通过 room id 划分多会话;当前模板使用默认 DO 实例,可扩展持久化。
- 流式错误处理:SSE 返回 error 字段时需在前端妥善提示。
3.5 可扩展方向
- 增加节点类型:例如条件分支、变量节点、插图节点。
- 存储导出:将节点与连线序列化为 JSON,支持下载/导入。
- 协作增强:结合 tldraw-sync-cloudflare 的同步能力,实现多人同时编辑对话树。
4. chat-template —— 聊天 + 白板协同体验

chat-template 交互流程
4.1 项目概述
定位:Next.js 模板,提供常规聊天界面与嵌入式白板模态框,用户可随时进入 tldraw 绘制草图并回填到聊天流。
技术栈:Next.js(App Router)+ Vercel AI SDK + tldraw;默认调用 @ai-sdk/google 的 Gemini 2.5 Flash 模型。
核心交互:
- useChat Hook 管理消息队列,实现输入、流式响应、加载态。
- WhiteboardModal 调用 editor.toImageDataUrl 将白板快照插入聊天。
- API Route src/app/api/chat/route.ts 负责服务端推理与 SSE 响应。
4.2 关键文件说明
- src/app/page.tsx:初始化聊天界面,组合 Chat 组件。
- src/components/Chat.tsx:整合消息列表、输入框、白板开关。
- src/components/WhiteboardModal.tsx:处理白板编辑、文件注入、toast 提示。
- src/app/api/chat/route.ts:调用 streamText,并限制响应时长 60 秒。
4.3 请求流程
- 用户发送文本或提交白板生成的 PNG;前端将 UIMessage[] 传给 API。
- API route 将历史消息转换为模型格式,附加系统提示词,调用 Gemini。
- streamText 返回流式内容,通过 Next.js Response 直接推到客户端。
- 前端 useChat Hook 接收流式片段,更新消息列表,保持光标与滚动状态。
4.4 修改与扩展
- 替换模型:调整 google('gemini-2.5-flash') 为其他 provider,例如 openai('gpt-4o-mini')。
- 白板再编辑:WhiteboardModal 保存 TLEditorSnapshot,可在历史消息中再次打开并修改。
- 多模态增强:利用 notifyIfFileNotAllowed 控制图片上传类型,支持截图、拍照等输入渠道。
5. tldraw-sync-cloudflare —— 生产级实时同步后端

tldraw-sync-cloudflare 同步架构
5.1 项目概述
定位:官方给出的生产级 tldraw Sync 服务端实现,基于 Cloudflare Workers、Durable Objects、R2 打造多房间实时协作。
主要能力:
- 每个白板房间对应一个 Durable Object,处理 WebSocket 消息广播。
- 定时持久化到 R2 存储,支持自动恢复。
- 附带资源上传、书签预览 API,使图像/视频和链接可无缝使用。
5.2 核心模块
- worker/worker.ts:定义 HTTP/WebSocket 路由,入口托管。
- worker/TldrawDurableObject.ts:实现 TLSocketRoom 接入、心跳、持久化逻辑。
- worker/assetUploads.ts:提供资源上传/下载,结合 Cloudflare 缓存策略。
- worker/bookmarkUnfurling.ts:抓取 URL 元数据,供书签形状展示。
- wrangler.toml:声明 Worker 名称、Durable Object 绑定、R2 桶配置。
5.3 数据流详解
- 用户进入房间,前端通过 wrangler 暴露的 /socket 建立 WebSocket。
- Worker 将连接分配到对应 Durable Object(按房间 id 哈希),保证单房间单实例。
- 客户端操作通过 WebSocket 发送 patch,Durable Object 更新内存文档并广播给所有连线。
- DO 周期性(或按变更阈值)将房间状态写入 R2,掉线后可恢复。
5.4 运维与扩展
- 扩容:Durable Object 自带水平扩展能力;需监测房间并发(约 50 并发/房间经验值)。
- 安全:assetUploads.ts 需增加鉴权;示例实现偏 Demo,可引入 JWT/签名校验。
- 监控:结合 Cloudflare Analytics 观察 WebSocket 连接、存储读写费用。
6. workflow-template —— 可执行工作流编辑器

workflow-template 核心组件
6.1 项目概述
定位:纯前端模板,演示如何在 tldraw 上实现可执行的「节点-连接-端口」工作流编辑器。
特性亮点:
- 端口驱动交互:端口点击/拖拽自动创建节点或连接。
- 数值流动:通过 ExecutionGraph 演示节点值实时计算与异步执行。
- 自定义 UI:替换默认工具栏,加入画布内节点选择器、工作区包围框等。
6.2 代码结构
- src/App.tsx:注册自定义 shape、binding、工具栏等,是应用入口。
- src/nodes/NodeShapeUtil.tsx:定义节点渲染与几何信息,处理端口布局、尺寸计算。
- src/nodes/types/*:具体节点类型(加减乘除、Slider、条件判断等)。
- src/execution/ExecutionGraph.tsx:维护工作流拓扑排序、执行状态。
6.3 交互流程
- 用户在画布上拖拽创建节点,通过端口连线形成 DAG。
- NodeShapeUtil 根据节点配置绘制端口,并响应 hover/click 事件。
- 值变化后触发 ExecutionGraph 计算,实时刷新节点显示;点击 play 演示异步执行序列。
6.4 扩展建议
- 新增节点类型:在 src/nodes/types 创建文件并注册到 nodeTypes、WorkflowToolbar。
- 增加数据类型:目前以数字为主,可扩展为字符串、对象或 API 调用节点。
7. 文档与图表生成说明
本文档 docs/flow_documentation.md 由手工撰写(中文),引用的所有配图位于 docs/diagrams。
使用 scripts/generate_diagrams.py 可以重新生成 PNG 图表,脚本依赖 Pillow 并采用系统字体 STHeiti 以保证中文显示。
8. 建议的后续工作
- 统一依赖管理:可引入 pnpm workspace 管理多项目依赖。
- 自动化部署示例:为 Cloudflare / Vercel 配置 CI 脚本。
- 多语言国际化:在前端引入 i18n 模块。
本白皮书内容和图表均为离线生成,可直接使用 pandoc 转换为 PDF/Docx。示例命令:
pandoc docs/flow_documentation.md \ --from markdown \ --to docx \ --output docs/flow_documentation.docx \ --resource-path=docs