DocFlow 实现与复用调查
DocFlow 调查依据与可复核边界
保留源码定位、原复核方法及提交和外部后端缺口。
本页整理自 2026-10-04 的 DocFlow 静态调查材料。原材料没有提供仓库 URL、分支或提交哈希;正文中的路径、行号、计数与依赖版本均指向该未锚定快照。本轮整理读取了归档报告,未取得原工作副本、启动产品或验证外部后端。下文的“复核”指原材料记载的复核,前端路径存在与运行可用性分别判断。
关键文件索引
编辑器核心
apps/DocFlow/src/app/docs/[room]/page.tsx— 编辑器组装入口(useEditor、协作条件装配、setEditable、Tab/Ctrl+F、copy text/json)apps/DocFlow/src/extensions/extension-kit.ts— ExtensionKit 注册表与 StarterKit 裁剪apps/DocFlow/src/extensions/index.ts— 官方/自研扩展 re-export 汇总apps/DocFlow/src/extensions/SlashCommand/{SlashCommand.ts, groups.ts}— slash 菜单apps/DocFlow/src/extensions/DragHandler/DragHandler.ts— 侧栏 DnD 策略工厂apps/DocFlow/src/extensions/ImageUpload/ImageUpload.ts、view/ImageUploader.tsx— 占位上传块apps/DocFlow/src/extensions/ImageBlock/ImageBlock.ts、Image/Image.ts、TableImage/TableImage.ts— 图片三节点apps/DocFlow/src/extensions/CodeBlock/{CodeBlock.ts, CodeBlockComponent.tsx, SelectOnlyCode.ts}— 代码块apps/DocFlow/src/extensions/MathLiveEditor/{MathLiveExtension.ts, MathLivePopover.tsx}— 可视化公式apps/DocFlow/src/extensions/MarkdownPaste/MarkdownPaste.ts、JsonPaste/JsonPaste.ts— 粘贴增强apps/DocFlow/src/extensions/Mention/{mention.ts, suggestion.tsx}— @提及apps/DocFlow/src/extensions/AgentSuggestion/index.ts— AI diff markapps/DocFlow/src/extensions/TableOfContentsNode/TableOfContentsNode.tsx、SearchAndReplace/SearchAndReplace.ts— TOC 节点与搜索替换apps/DocFlow/src/extensions/{Comment/Comment.ts, Figure/Figure.ts}— 未接线的评论/图注apps/DocFlow/src/extensions/{Document/Document.ts, Youtube/Youtube.ts}— 文档根节点 / YouTube 扩展apps/DocFlow/src/components/menus/TextMenu/{BubbleMenu.tsx, TextMenu.tsx}— 自研气泡菜单apps/DocFlow/src/components/menus/{ContentItemMenu/ContentItemMenu.tsx, LinkMenu/LinkMenu.tsx, ImageBlockMenu/index.tsx}— 各菜单apps/DocFlow/src/app/docs/layout.tsx、_components/DocumentSidebar/{index.tsx, BlocksTab.tsx, SettingsTab.tsx}、_components/{FloatingToc/index.tsx, SearchPanel.tsx, HistoryPanel/index.tsx, DocumentHeader/index.tsx}、DocumentHeader/components/document-actions.tsx、DocumentHeader/hooks/use-blog-publish.ts— 页面骨架与面板
实时协同
apps/DocFlow/src/hooks/useCollaboration.ts— 两阶段启动、awareness、stateless 权限apps/DocFlow/src/hooks/useDocumentPermission.ts— HTTP 权限与 Y.Doc 创建apps/DocFlow/src/hooks/useEditorHistory.ts、services/snapshot/index.ts— 本地历史快照apps/DocFlow/src/hooks/useDocumentEdit.ts— Agent 提案落地apps/DocFlow/src/utils/auth/cookie.ts— token cookieapps/DocFlow/src/app/dashboard/workflow/_components/{canvas.tsx, cursors-layer.tsx}— 画布协同(演示级)apps/DocFlow/src/proxy.ts— Next.js 16 路由守卫apps/DocFlow/.env.development/.env.production— 外部服务地址
AI 能力
apps/DocFlow/src/services/collaboration/index.ts— Agent 编辑 SSE 接口apps/DocFlow/src/app/docs/_components/AgentEditPanel/index.tsx— Agent 面板apps/DocFlow/src/services/request/{client.ts, server.ts}— 双请求封装(含 streamPost)apps/DocFlow/src/services/chat-ai/{index.ts, type.ts}、constants.ts— 聊天服务与默认配置apps/DocFlow/src/app/chat-ai/hooks/{useChat.ts, useChatModels.ts, useConversations.ts}— 聊天状态apps/DocFlow/src/app/chat-ai/_components/{ConfigFields.tsx, ModelConfigModal.tsx, ChatAIPanels.tsx, ChatInterface.tsx}— 配置与双模型对比apps/DocFlow/src/services/ai/{index.ts, type.ts}、services/knowledge/index.ts— AI/知识库服务(含孤儿接口)apps/DocFlow/src/app/dashboard/knowledge/_components/{KnowledgeDocumentList.tsx, CreateKnowledgeDialog.tsx}— 知识库 UIapps/DocFlow/src/app/dashboard/settings/_components/api-key-settings.tsx— API Key 设置(无消费方)apps/DocFlow/src/app/dashboard/podcast/_components/UploadResumeCard.tsx、services/podcast/index.ts— AI 播客
后端与部署
apps/DocFlow/package.json、pnpm-lock.yaml— 依赖(装而未用项的出处)apps/DocFlow/src/app/api/health/route.ts— 唯一 API routeapps/DocFlow/src/services/{auth/index.ts, upload/index.ts, video/index.ts, image/index.ts, rooms/index.ts}— 鉴权/上传/视频/图片/LiveKit 服务apps/DocFlow/src/{instrumentation-client.ts, instrumentation.ts}、apps/DocFlow/sentry.server.config.ts、next.config.ts— Sentry 接入apps/DocFlow/src/hooks/{useAnalysis.ts, useSetupE2EE.ts}— 埋点 / LiveKit E2EEapps/DocFlow/src/app/auth/{page.tsx, callback/page.tsx}— 登录apps/DocFlow/src/app/rooms/page.tsx、rooms/[roomName]/{PageClientImpl.tsx, PreJoinScreen.tsx}、rooms/_components/{CustomControlBar.tsx, SettingsMenu.tsx, Debug.tsx}— LiveKit 前端Dockerfile、docker-compose.yml、turbo.json、.husky/pre-commit、commitlint.config.cjs、.github/workflows/*— 构建部署README.md、AGENTS.md— 文档宣称 vs 约定
导入导出与工程化
packages/transformer/src/{Prosemirror.ts, presets/{index.ts, alert.ts, bilibili.ts}}— Yjs↔JSON 转换(backend-only)packages/bilibili/src/{Bilibili.ts, utils.ts}、packages/alert/src/{Alert.ts, AlertSchema.ts, alertBase.ts}— 扩展包(未注册)apps/DocFlow/src/utils/markdown-to-tiptap.ts— Markdown→Tiptap(其一)apps/DocFlow/src/utils/export-doc/{generator.ts, utils.ts, converters/}— docx 导出 forkapps/DocFlow/src/utils/document-export/{docx.ts, pdf.ts}— 导出入口apps/DocFlow/src/utils/format/file-type.ts— xlsx 的唯一用途处apps/DocFlow/src/app/blog/{page.tsx, [id]/page.tsx}— 博客apps/DocFlow/src/app/dashboard/contacts/_components/{ContactMemberList.tsx, ContactDetail.tsx, FriendRequestList.tsx, AddContactDialog.tsx}— 通讯录apps/DocFlow/tailwind.config.ts、src/hooks/useDarkMode.tsx、src/styles/index.css、src/styles/partials/ai-brainstorm.css— 深色模式与遗留样式
复核方法、判定标准与局限
- 复核范围与选取规则:5 个模块共 72 条调研结论,其中 40 条经逐条代码复核(编辑器 8、协同 8、AI 8、后端 8、导入导出 8)。这 40 条是上游调研材料中 verifications 数组自带复核记录的条目,清单由上游给定——由上游材料选定,未采用随机抽样,因此"32 条未复核"不代表其结论风险更高或更低,复核覆盖面不具统计代表性。复核方式为按 evidence 引用逐行核对源码并补跑 grep / find / diff 命令验证。
- confirmed 的判定标准:结论的核心论断(主张本身)经逐行核对成立,即计 confirmed;行号、计数、归属类偏差记为勘误、不改判。唯一边界案例是 LiveKit 条目(勘误 #14):核心论断"完整度较高的独立音视频模块"成立,但四个子功能由"已实现"修正为"死代码"——若按子项口径计为部分驳回,严格读法是"39 条 confirmed + 1 条部分驳回";本报告选择按核心论断计入 confirmed,并全文(导出及周边盘点、周边交付链路)以修正后口径呈现,两种读法的差异已在此显式交代。其余 32 条(如 slash 菜单细节、快捷键、代码块功能、TOC 双实现、workflow 画布、fingerprintjs 埋点、blog/contacts、工程化等)未列入逐条复核清单,报告按调研原文呈现。
- 局限 1:后端不在本仓库——LangGraph 三节点、RAG 检索、MinIO 存储、Hocuspocus 拦截器、聊天上下文是否截断等后端行为只能从前端代码/注释反推,无法从所查仓库直接核实(文中已逐处标注)。
- 局限 2:静态代码调研,未运行应用;各"未接线/零调用方"结论基于全仓库 grep(排除 node_modules/.git/lockfile),不能排除运行时动态拼装(如字符串拼接的模块名)——但材料中未发现此类模式。
- 局限 3:行号以调研时快照为准,后续提交可能漂移;引用路径均为仓库相对路径(调研命令基于 /tmp/DocFlow 工作副本执行)。
- 局限 4(版本锚点缺失,结构性缺口):上游调研材料未提供仓库 URL、分支名或 commit hash(仓库内 docker-compose.yml 的镜像名
ghcr.io/xun082/docflow:latest仅提示作者 GitHub 用户名,不能作为仓库锚点),本报告因此无法给出任何可复核的版本锚点。这意味着:① 所有行号引用无法跨版本复核;② 无法完全排除"调研的是过时版本或其他分支"的可能,文档声明与源码边界 的"README 宣称与代码不符"结论应严格理解为"针对调研时快照成立"。引用本报告结论前,建议先在当前 HEAD 上抽查关键文件(如extension-kit.ts、useCollaboration.ts、package.json)再行采信。
最后更新于