知行札记
DocFlow 实现与复用调查

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 + TypeScriptapps/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 装而未用(见 基础设施调查)
样式/UITailwind 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、juicedocx 导出为 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.yml

packages/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。


最后更新于

本页目录