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

DocFlow 可复用资产与实现缺口

区分库能力、本地扩展、有效接线、占位和仓库外职责。

本页整理自 2026-10-04 的 DocFlow 静态调查材料。原材料没有提供仓库 URL、分支或提交哈希;正文中的路径、行号、计数与依赖版本均指向该未锚定快照。本轮整理读取了归档报告,未取得原工作副本、启动产品或验证外部后端。下文的“复核”指原材料记载的复核,前端路径存在与运行可用性分别判断。

自研资产与库能力

作者自己写的(自研清单)

编辑器扩展层(src/extensions 29 个目录,其中 26 个自研/二次封装条目实际注册进 ExtensionKit,清点口径见 扩展注册与计数):

  • 结构类:Document(block+)、Heading、HorizontalRule、TrailingNode、Selection、ClearMarksOnEnter;
  • 代码:CodeBlock(CodeBlockLowlight 二次封装:语言别名输入规则、Mod-/ 按语言注释、Tab 缩进)、SelectOnlyCode;
  • 图片三节点:ImageUpload(占位上传块 + useDropZone 视图)、ImageBlock(官方 Image.extend + width/align/alt 属性与命令)、TableImage(表格缩略);
  • 交互:SlashCommand(suggestion 手搓菜单 + groups 配置)、DraggableBlock/DragHandler(ProseMirror 插件 + 策略工厂)、FontSize、Figcaption、Link(javascript: 协议过滤 + Markdown 链接语法)、Mention(inline 原子节点 + 好友建议)、EmojiSuggestion、Youtube(extend 官方 + 对话框命令)、AgentSuggestion(AI diff mark + accept/reject)、SearchAndReplace(decoration 高亮)、TableOfContentsNode、MathLiveExtension(MathLive 弹窗)、JsonPaste、MarkdownPaste;
  • 写好未接线:Comment(mark + Mod-Shift-m)、Figure(figcaption 父容器)。

UI/交互组件:CustomBubbleMenu(floating-ui 手搓文本工具栏定位)、ContentItemMenu(+ 块、AI 续写、块操作弹出)、SearchPanel、HistoryPanel、FloatingToc、DocumentSidebar(文件树 dnd-kit、组件库 DnD、SettingsTab)、AgentEditPanel。

Hooks 层:useCollaboration(两阶段启动、awareness、stateless 权限)、useDocumentPermission、useDocumentEdit(Agent 提案落地 + markConflicts)、useEditorHistory、useSetupE2EE(LiveKit)、useAnalysis(埋点)。

服务/请求层:自研双请求封装 client.ts/server.ts(401 刷新 + 请求队列重放、streamPost + parseOpenAIStreamLine 的 OpenAI 兼容 SSE 手动解析、Sentry 埋点);snapshotService(Yjs 快照 IndexedDB 存取);21 个业务服务模块封装。

导入导出:两套手写 MDAST→ProseMirror Markdown 转换;export-doc(tiptap-extension-export-docx 的 fork 维护版,18 个文件);PDF/公众号导出编排。

workspace 包:@syncflow/transformer(封装 y-prosemirror 双向转换 + 两个 presets)、@syncflow/bilibili(B 站 embed 节点)、@syncflow/alert(双形态 Alert 节点)——注意这三者均未接入前端编辑器,transformer 为后端准备。

直接使用的官方/三方库

  • Tiptap 官方:StarterKit(裁剪 12 项)、Highlight、Emoji(+gitHubEmojis)、Details 三件套、TaskList/TaskItem、FileHandler、UniqueID、TableOfContents、Mathematics(KaTeX + migrateMathStrings)、TableKit(@tiptap/extension-table 系)、@tiptap/extension-collaboration / collaboration-caret、@tiptap/extension-drag-handle-react(DragHandle)、@tiptap/react/menus 官方 BubbleMenu(Link/ImageBlock 用)、CodeBlockLowlight + lowlight;
  • 协同:Yjs、@hocuspocus/provider(仅客户端)、y-indexeddb、y-prosemirror(transformer 底层);
  • 定位:floating-ui(@floating-ui/dom);
  • AI:无前端 SDK——纯自研 fetch 解析;@azure/core-sse(装而未用);
  • 音视频:livekit-client 全家桶(E2EE worker、krisp、背景虚化为库能力,但对应 UI 未接线);
  • 画布:ReactFlow;排序:dnd-kit(仅文件树);
  • 导出:docx、jspdf、@zumer/snapdom、juice;Markdown 解析:micromark-extension-gfm + mdast-util-from-markdown/mdast-util-gfm;
  • 公式:KaTeX(经 Mathematics)、MathLive;
  • 监控:Sentry;其他:zod、tailwindcss、turbo、husky。

"装而未用"依赖清单(声明/安装但源码零引用)

依赖声明位置实际情况
@hocuspocus/server ^3.1.1(实装 3.4.4)package.json:52-53零 import;服务端在外部 api.codecrack.cn
y-webrtc ^10.3.0package.json零 import,传输层只有 HocuspocusProvider
mammoth ^1.10.0(实装 1.11.0)package.json:156零引用;Word 导入不存在
xlsx 0.18.5package.json:194仅 file-type.ts:19 文件图标颜色映射
tiptap-extension-export-docx 0.0.9package.json:189零 import,实际用其 fork 源码 utils/export-doc/*
livekit-server-sdk 2.14.2package.json:206零引用(属后端职责,后端不在仓库)
frappe-ganttpackage.json:145仅 styles/index.css:18 引入 CSS,无组件
@syncflow/bilibili / @syncflow/alertworkspace 包扩展未注册进 ExtensionKit(bilibili 仅 CSS 被引入)
@azure/core-sse 2.3.0package.json:44sseStream 实现(client.ts:902-1008)零调用方
vitest/@vitest/*、@playwright/testdevDependencies无测试文件、无配置、无 test script
tinykeys依赖仅注册在被注释掉的 LiveKit Debug 面板
ofetch依赖仅导出工具拉 blob,非主请求层

未实现与规划中(文档声明、依赖与源码范围)

以下逐条列出"文档或依赖宣称存在、但仓库代码没有"的项。标注来源与证据;反向情况(README 说没有但代码有)一并列出。

README 宣称、仓库无代码

#宣称来源仓库现实
1NestJS 后端框架README:19,37-39grep '@nestjs' 全仓库零命中,无任何 NestJS 代码/依赖
2Prisma ORM 数据访问层README:39无 schema.prisma、无 @prisma/client;lockfile 唯一 prisma 是 Sentry 传递依赖
3Hocuspocus 作为 Yjs WebSocket 服务端README:41-43仅 package.json 依赖声明;源码只用客户端 provider;服务端在未开源的 api.codecrack.cn
4Server Actions 前后端通信README:25全仓库无一处 'use server';AGENTS.md:15 反而明文 no API routes
5Prometheus 指标采集 + Grafana 面板README:45-51无 prom-client 依赖、无指标导出代码、无编排
6ELK 日志栈(Elasticsearch/Kibana)README:53-59全仓库仅 README 提及(logstash 一词连 README 都未出现)
7MinIO 对象存储README:61-63无 MinIO SDK/配置;上传由外部 API 承接
8RabbitMQ 消息队列README:61-63无 amqp 依赖与代码
9Monorepo 前后端代码分离README:115(自述"计划")现状只有前端,印证后端未出现在所查快照
10编辑器内 AI 头脑风暴/内容润色/文档续写(配截图重点宣传)README:15服务层接口已写好(/api/v1/chat/brainstorm|polish|autocomplete、/api/v1/ai/continuations)但前端无任何调用组件,仅遗留 ai-brainstorm.css 与注释
11RAG 检索增强("续写时从文档中检索相关段落")README:91前端无 embedding/向量库/检索代码;知识库问答 API(useKnowledgeBase/knowledgeIds)无调用方;后端不在仓库无法核实
12"通过拦截器机制实现权限控制与数据持久化"(Hocuspocus onAuthenticate/onChange)README服务端代码不在仓库,仅能从客户端 onStateless 'server:permission' 消息反推其存在

依赖暗示存在、源码无实现

#功能来源现实(证据)
13Word(.docx)导入调研材料转述"主页 FAQ 宣称支持导入 Word";材料未提供该 FAQ 的 URL/路径/行号,本报告无法定位核对,该宣称本身未经证实原材料记录的代码侧依据:mammoth 在 package.json:156 声明,全仓库源码零引用
14xlsx 导出package.json:194(xlsx 0.18.5)仅 utils/format/file-type.ts:19 用作文件图标颜色映射,无导入导出实现
15甘特图package.json:145(frappe-gantt)+ styles/index.css:18无任何 Gantt 组件/扩展(grep -ri gantt 全 src 仅命中该 CSS)
16B 站视频块packages/bilibili(实现完整的 workspace 包)ExtensionKit(extension-kit.ts:73-393)未注册;仅 styles/index.css:23 引入其样式、next.config.ts:13 transpilePackages——编辑器中不可用
17y-webrtc P2P 传输package.json 声明 ^10.3.0全仓库零 import;实际传输层只有 @hocuspocus/provider 的 WebSocket
18用户自配 API Key 参与 AI 调用设置页 UI(api-key-settings.tsx:53-58,83-98)localStorage 键 docflow_api_keys 有写入、无读取:没有任何 AI 请求读取或携带该 key(grep 仅命中设置页与 storage 定义)

代码已写好但未接线(死代码,对应图例 🚫)

#功能证据
19评论(Comment mark + Mod-Shift-m)extensions/Comment/Comment.ts:217 实现完整,未注册进 ExtensionKit,编辑器内不生效;与 HTTP 权限等级 COMMENT 的关系见 协同权限边界 注记
20图注结构(Figure + Figcaption)Figure.ts 实现含 figcaption 子节点,未注册;单注册的 Figcaption 缺父容器,图注功能未形成
21侧栏组件库的视频/日历/AI/音频/标题/引用等块类型BlocksTab.tsx:94-189 展示 14 种块;DragHandler 策略表(DragHandler.ts:258-269)只覆盖 10 种;video/calendar 走默认段落策略;audio/ai 生成的节点类型 schema 不存在;点击插入处理器仍是 TODO console.log(BlocksTab.tsx:209-212)
22setDraggableBlock 命令DraggableBlock 已注册,命令无任何调用方
23深色模式开关设置页"暗色主题"复选框(settings/page.tsx:73-82,无绑定)与 SettingsTab 主题下拉(SettingsTab.tsx:19-35,本地 state)均为装饰 UI;useDarkMode hook 零调用方
24LiveKit 聊天面板 / 设备菜单 / krisp 降噪 / 背景虚化<Chat/> 被注释(PageClientImpl.tsx:369);SettingsMenu/CameraSettings/MicrophoneSettings 未被任何页面渲染
25PreJoinScreen 组件app/rooms/[roomName]/PreJoinScreen.tsx 已写好,未被引用
26@azure/core-sse 的 sseStream 与 request.sse 通道实现/定义存在,前者零调用,后者仅被三个无调用方的 AiApi 接口使用
27AiApi 孤儿接口StreamAgent(assistant-messages)、TextToImage(images)、GeneratePodcastAsync(podcasts/async)、CorrectText 类型——仅定义无消费
28tinykeys 调试面板Debug.tsx 注册 Shift+D,但 DebugMode 在 PageClientImpl.tsx:28,371 被注释

README 滞后于代码(反向:实际已有)

  • LiveKit 音视频:README 列在"未来计划",实际 rooms 页面、livekit-client 依赖栈、/api/v1/livekit/quick-create 均已落地(services/rooms/index.ts:20 等)。
  • Agent 编辑面板:README 自述"AI 聊天后续集成到编辑器侧边栏、未来实现 Agent 模式"——AgentEditPanel 已存在(属 README 已声明的进行中规划;聊天页仍独立)。

其他"零"项

  • 测试体系为零:无 .spec/.test 文件、无 playwright.config、无 test script;vitest/@playwright/test 是空头 devDependencies。
  • 国际化为零:无 i18n 依赖,UI 文案硬编码中文。
  • 历史版本无服务端:快照纯本地 IndexedDB(每文档 50 份),换设备无法取得本机历史快照。

最后更新于

本页目录