DocFlow 实现与复用调查
围绕文档产品的有效接线、编辑与协同机制、AI 提案、转换和仓库外依赖形成复用判断。
本页整理自 2026-10-04 的 DocFlow 静态调查材料。原材料没有提供仓库 URL、分支或提交哈希;正文中的路径、行号、计数与依赖版本均指向该未锚定快照。本轮整理读取了归档报告,未取得原工作副本、启动产品或验证外部后端。下文的“复核”指原材料记载的复核,前端路径存在与运行可用性分别判断。
复用判断
DocFlow 的主要研究价值集中在 Tiptap 块编辑器、协同客户端的启动编排、AI 修改提案和格式导出。依据原调查记录,编辑器扩展及菜单具备可定位的接线链路;完整产品同时依赖仓库外的文档、鉴权、协同、上传和模型服务。
复用编辑器时,需要先取得与原调查匹配的代码快照,再确定需要保留的节点 schema、扩展注册和菜单入口。复制一个节点目录还不足以取得功能:节点可能依赖上传服务、转换器、协同字段或页面状态。文档导入导出及协同端的 schema 应覆盖同一组类型,未识别节点需要拒绝、降级或显式保留原始数据。
复用 AI 编辑链路时,可以研究“提交文档与指令 → 接收结构化提案 → 落入建议标记 → 接受或拒绝”的产品边界。LangGraph 结构、模型提示、权限强制、检索过程和服务端数据保存尚缺源码依据,不能由前端注释或接口名补足。提案生成后若文档被其他人修改,原锚点和旧版本是否仍有效也是采用前必须检查的条件。
独立部署完整产品目前缺少决定性材料:业务后端、协同服务端及版本锚点。这个缺口限制了部署与可靠性判断;它不妨碍在取得相应代码后审查前端具体实现。原调查未运行产品,功能表中的接线状态不代表线上可用性、安全性或跨设备同步效果。
阅读入口
先看功能与接线盘点,再按编辑器、协同、AI、基础设施和转换链路进入实现。可复用资产与实现缺口集中说明未接线项;调查依据页保留源码位置及无法确认的范围。
项目概览
定位
DocFlow 自我定位是一个实时协作文档编辑器(类 Notion / 类飞书文档):块式编辑、多人实时协同与远程光标、AI 辅助写作、导出分发(PDF/Word/公众号/博客)、外加音视频房间、知识库、工作流画布等周边模块。README.md:15 宣传"内置 AI 助手,支持头脑风暴、内容润色、文档续写与智能问答"(注意:该组编辑器内 AI UI 实际不存在,见 实现缺口)。
所查仓库以 Next.js 前端应用和编辑器库为主体。apps/ 下只有 DocFlow 一个 Next.js 应用;packages/ 下三个包(transformer、bilibili、alert)全部是 Tiptap 生态的前端/同构库包,没有 NestJS 应用、没有 Hocuspocus 服务端、没有任何数据库访问代码(原调查记录:grep @nestjs 未命中、无 *.prisma 文件、未找到 PrismaClient/typeorm/mongoose 等引用;本轮未取得原工作副本重做搜索)。
技术栈
| 层 | 选型 | 备注 |
|---|---|---|
| 框架 | Next.js 16.1.5(App Router)+ React + TypeScript | apps/DocFlow/package.json:164;src/proxy.ts:107 注释自述 "Proxy (Next.js 16+)"(即原 middleware) |
| 编辑器 | Tiptap 3 / ProseMirror,lowlight(common 预设,约 40 种语言)、KaTeX + MathLive | 自研 29 个扩展目录,见编辑器实现 |
| 实时协同 | Yjs + @hocuspocus/provider + y-indexeddb | 仅客户端;@hocuspocus/server 装而未用(见 基础设施调查) |
| 样式/UI | Tailwind CSS(darkMode: 'class',tailwind.config.ts:6)、floating-ui | 深色模式实际未接线(实现缺口) |
| AI | 自研请求层(OpenAI 兼容 SSE 手动解析) | 后端统一代理模型,请求不含用户 API Key |
| 音视频 | LiveKit(livekit-client 全家桶) | /rooms 模块,后端 LiveKit 服务不在仓库 |
| 画布 | ReactFlow + Yjs(dashboard/workflow) | 演示级实现,见协同与画布 |
| 导出 | docx@9.5.1、jspdf、@zumer/snapdom、juice | docx 导出为 fork 源码自维护(Word 导出) |
| 工程 | pnpm + turbo、husky + commitlint(无 hook 强制)、Docker 四阶段、GitHub Actions 4 workflow | 测试为零(实现缺口) |
| 可观测 | Sentry 三端(client/server/edge) | Datadog 默认不生效,Prometheus 零接入 |
仓库结构
DocFlow/
├── apps/
│ └── DocFlow/ # 唯一应用:Next.js 16 前端
│ ├── src/app/ # 路由:/docs/[room]、/chat-ai、/dashboard/*(knowledge/podcast/
│ │ # contacts/workflow/organizations/messages…)、/rooms、/blog、/auth
│ ├── src/app/api/ # 仅 1 个 route handler:health/route.ts
│ ├── src/extensions/ # 29 个自研/二次封装 Tiptap 扩展目录 + extension-kit.ts + index.ts
│ ├── src/components/ # 编辑器菜单(TextMenu/LinkMenu/ImageBlockMenu/ContentItemMenu 等)
│ ├── src/hooks/ # useCollaboration / useDocumentPermission / useDocumentEdit /
│ │ # useEditorHistory / useSetupE2EE / useAnalysis …
│ ├── src/services/ # 22 个目录 = 21 个业务模块 + request 封装(client.ts / server.ts)
│ ├── src/utils/ # markdown-to-tiptap、export-doc(docx fork)、document-export、auth …
│ └── src/styles/ # index.css(:18 引入 frappe-gantt.css、:23 引入 bilibili 样式、
│ # :14 引入遗留 ai-brainstorm.css)
├── packages/
│ ├── transformer/ # @syncflow/transformer:Yjs ↔ ProseMirror/Tiptap JSON 互转(Dockerfile 注明 backend-only)
│ ├── bilibili/ # @syncflow/bilibili:B 站 iframe embed 节点(实现完整,编辑器未注册)
│ └── alert/ # @syncflow/alert:6 种 Alert 块(React 版 + 纯 Schema 版,编辑器未注册)
├── Dockerfile # 四阶段构建,仅产出前端;:42 注释 "transformer excluded, backend-only"
├── docker-compose.yml # 仅 1 个服务:ghcr.io/xun082/docflow:latest
├── turbo.json / .husky/ / commitlint.config.cjs
└── .github/workflows/ # build.yml / deploy.yml / lint.yml / preview.ymlpackages/transformer/package.json:4 的自我描述是 "Transformation utilities for Tiptap and ProseMirror with Yjs support";bilibili 与 alert 分别为 "Bilibili extension for Tiptap editor"、"Alert extension for Tiptap editor with multiple alert types"。
环境配置:所有真实后端都在仓库外
apps/DocFlow/.env.development 与 .env.production 仅第 11 行 NEXT_PUBLIC_SITE_URL 不同(localhost:3000 vs www.codecrack.cn),其余关键项完全一致:
NEXT_PUBLIC_SERVER_URL = https://api.codecrack.cn(REST/SSE 后端,src/services/request/client.ts:1295、server.ts:335以其为 baseURL)WEBSOCKET_URL / NEXT_PUBLIC_WEBSOCKET_URL = wss://api.codecrack.cn/collaboration(协同;另有一行被注释的wss://ws.codecrack.cn)NOTIFICATION_WEBSOCKET_URL = https://note.codecrack.cn(通知长连)- 第二处硬编码:
src/app/dashboard/workflow/_components/canvas.tsx:133的wss://flow.codecrack.cn(workflow 画布协同)
即:DocFlow 前端可以独立阅读,但不能独立运行出完整产品——鉴权、文档 CRUD、协同中继、文件存储、AI 推理全部依赖作者私有部署的 api.codecrack.cn。
DocFlow 功能与接线盘点
DocFlow 编辑器组装与扩展
DocFlow 协同、权限与本地历史
DocFlow AI 编辑与聊天链路
DocFlow 外部后端与工程交付
DocFlow 格式转换与周边链路
DocFlow 可复用资产与实现缺口
DocFlow 调查依据与可复核边界
最后更新于