logo
mdocs
首页
特性
开始
文档
GitHub
首页
特性
开始
文档
GitHub
logo
mdocs

快速开始

安装
第一个知识库

AI 与 Agent

智能助手(AI)
Agent 开发闭环
CLI Token

核心概念

所见皆文件
域隔离
文档级邀请
无账户身份识别

使用指南

设置页面概览
Markdown 编辑
流程图生成
草稿与同步
我的文章与邀请
文档收藏
文档评论
受限域成员与模板
恢复码(兼容)

部署与配置

环境要求
配置文件
反向代理示例
FAQ
更新日志
Previous PageFAQ
mdocs

Write freely. Never lose a word.

MIT License
产品
功能特性Agent 开发闭环竞品对比更新日志
资源
文档安装指南
社区
GitHub问题反馈
© 2026 mdocs · Made with ♥ by xuhuafeifei

#更新日志

#v0.8.25

  • mdocs update 抗缓存:查最新版本与 npm pack 使用临时空 --cache,不再被本机 ~/.npm 里旧的 packument 钉死(--prefer-online 仍可能读到缓存)

#v0.8.24

  • 手机正文顶满:窄屏文档左右留白改为约 5px(PC 仍为 50px)
  • 手机助手全屏:窄屏 Agent 面板铺满、FAB 不可拖;PC 浮层拖动不变
  • Ask 挂载上下文:每轮对话把当前 domainId / 打开中的 documentId 写入 system(不预拉全文;读正文仍走 tool)
  • 合并内联 UI:冲突改为单栏红(我的)/ 绿(别人的);接收=用别人的、拒绝=用我的;全部用我的 / 全部用别人的;未决议完只读,决议完再编辑发布

#v0.8.23

  • 手机阅读壳:窄屏侧栏改为抽屉(默认不占宽);文档顶栏浮条/可吸附,隐藏域选择与帮写;设置页同样可收起左侧 Tab
  • 窄屏发布/删除:浮条上提供紧凑发布、删除入口
  • mdocs update:查最新版本时加 --prefer-online,避免本机 npm 缓存把 latest 钉在旧版
  • Markdown 文字颜色往返:编辑器内设置的文字色 / 背景色可写入 Markdown(<span style="color: …"> / background-color),再导入时还原;段落与表格单元格均支持,代码块内忽略(依赖 @fgbg/lobe-editor@1.0.0-fork.20)
  • 编辑器依赖:升级 @fgbg/lobe-editor@1.0.0-fork.20

#v0.8.22

  • 帮写 inline diff:有未接受提案时强制进入 inline diff(不可切回源码);相同行 / 绿增可改提案,红删只读;写回仍以已接受的 currentMd 为准
  • AI 设置滚动:设置页「AI 配置」上下卡片可完整滚动,不再被截断
  • mdocs version:CLI 输出当前安装包版本(亦支持 -v / --version)
  • 目录子树 API:GET /api/documents/folder/:folderId/tree 返回精简树(目录/文章 + id/标题)
  • 停止生成:智能助手与帮写支持中途停止(断开 SSE)

#v0.8.21

  • 思考流可见:智能助手与帮写均展示 DeepSeek thinking(可折叠「思考中」),长时间等待不再像掉线
  • 帮写编辑:接收中与默认均可直接改「我的稿」;有提案时点「查看 diff」进入只读审阅
  • 取消等待:选择卡 / Skill 表单支持取消;有倒计时卡时关闭助手会确认是否强制退出

#v0.8.20

  • 私人 Agent Skills:设置 → AI 可 CRUD 私人提示词宏(名称对本账号唯一,仅英文数字下划线);智能助手 / 帮写可按名称引用,落盘只存引用,请求时再展开进上下文
  • 助手可管理 Skill:list_user_skills / create_user_skill / update_user_skill / delete_user_skill;新建与修改弹出带倒计时的表单卡
  • mdocs update:全局安装后从淘宝 npmmirror 原地升级,保留已有 node_modules,依赖走 --prefer-offline(已缓存的不再重复下载)

#v0.8.19

  • Meta2d 按需加载:文档没有流程图时不下载 @meta2d;有图 / 插入图 / 打开编辑时再加载
  • 流程图属性「Text」输入:防抖写回画布,不再每敲一字全量重绘(依赖 @fgbg/lobe-editor@1.0.0-fork.19)
  • 构建:Vite 将 @meta2d / canvas2svg 单独拆成 meta2d chunk

#v0.8.18

  • 首屏加速:编辑器 / 设置 / 助手 / 帮写按需懒加载;Vite 拆分重型 vendor chunk,入口 JS 从约 6MB 降到约 134KB
  • 更快看到侧栏树:启动时延后全文索引重建(默认约 15s,可用 MDOCS_INDEX_INITIAL_DELAY_MS 调整),减轻 HTML TTFB 被 CPU 拖慢
  • 加载壳:index.html 增加「mdocs 加载中…」占位,减少白屏感

#v0.8.17

  • AI 双模式定位明确:智能助手(Ask)偏低交互——可答疑、搜文、结构操作,也能直接全文覆写;帮写(Coding)偏高交互——左聊右 Diff、按段接受、你拍板后才写回
  • 智能助手:覆写选择卡:有正文时请求写作,弹出三选一:直接覆写 / 打开帮写审阅 / 取消
  • 智能助手:写后同步:覆写成功后若当前打开该文档,自动触发拉取更新逻辑,刷新 headCommitId
  • 帮写欢迎文案:明确「精细改稿请用帮写」,不再说「不协助写作」
  • 官网文档:补充双模式 8 维度对比表,更新首页卖点

#v0.8.16

  • 帮写(coding):编辑器顶栏 / 欢迎页入口进入全屏工作台;左 AI、右纯 Markdown;按段接受/拒绝提案后再写回(已有文进草稿,空白帮写可新建)
  • 帮写上下文:每轮请求携带进场快照与当前工作稿;助手可「读取帮写工作稿」后再「设置帮写正文」,避免盲改
  • 帮写会话:独立于上手助手;按文档隔离(A 文 / B 文各自历史);空白帮写写回成文后会话绑到新文档
  • 附件上传:支持 zip 与常见音频;单文件上限 55MB
  • 编辑器依赖:@fgbg/lobe-editor@1.0.0-fork.17

#v0.8.15

  • 智能助手读文:新增 get_document 工具,按当前访客读权限读取文档正文(与 HTTP 鉴权一致,无额外特权)
  • 助手时间线 UI:对话中按顺序插入工具结果(搜文/域树表格、读文预览卡等),默认折叠;历史重开不回放工具 UI
  • 代码块复制:助手回复里的 Markdown 代码块支持一键复制

#v0.8.14

  • 发布包修复:prepack 现会执行完整 pnpm build,避免只升版本号却打出旧 dist(此前 0.8.12/0.8.13 缺文档拖拽移动、可拖动助手入口等)
  • 手册:补充小服务器安装(Swap、ENOTEMPTY、低内存 npm install -g)

#v0.8.13

  • 修复空文档白屏:空 markdown / Lexical children: [] 打开时补空段落,避免 editor 全局崩溃
  • 手册:补充小服务器安装(Swap、ENOTEMPTY、低内存 npm install -g)

#v0.8.12

  • 文档移动:侧栏可拖拽 Markdown 文档到文件夹 / 同目录文章旁 / 域根;仅创建者后端成功;POST /api/documents/:id/move
  • 上手助手入口:悬浮按钮可按住拖动定位,位置写入本地;支持重置;面板随入口侧移
  • 空文档白屏:AI/空 markdown 创建的 Lexical children: [] 会在打开时补空段落,避免编辑器整页崩溃
  • Agent:建文/建文件夹/移动后刷新侧栏树;新增 move_document 工具

#v0.8.11

  • 上手助手会话:浮层支持「+」新建会话、历史列表切换并回放;标题取自首条用户消息
  • 手册:上手助手(AI) 同步会话管理说明

#v0.8.10

  • 上手助手(AI):左下角浮动入口;设置页「AI」配置个人 DeepSeek Key;按访客落盘会话(tenant/<id>/agent/session),多轮续聊;回答引用手册页面链接;思考中三点动画;跟随滚动仅在贴底时生效
  • 手册:新增 上手助手(AI)

#v0.8.9

  • 编辑器依赖:升级 @fgbg/lobe-editor@1.0.0-fork.16——导出 INSERT_MARKMAP_COMMAND,斜杠 Markmap 使用正式 command API
  • 编辑器顶栏:撤销/重做后新增「文档顶部插入空行」「文档末尾插入空行」
  • 斜杠菜单:增加 Meta2d、Markmap 快捷插入
  • 发布后视口:服务端正文与刚发布内容一致时不再整棵 setDocument 重挂,减轻 Mermaid 等块导致的跳动

#v0.8.8

  • 编辑器依赖:升级 @fgbg/lobe-editor@1.0.0-fork.15——仅当反引号之间有内容时才转为行内代码,避免空 `` 抢占导致无法输入 fenced 代码块;并补充 Meta2d 斜杠插入后自动打开编辑器

#v0.8.7

  • 发布后视口跳动:发布成功后仍会拉取最新 meta / head 并清除本地草稿,但当服务端正文与刚发布内容一致时,不再对编辑器执行整棵 setDocument 重挂,避免 Mermaid 等块因 DOM 重建导致视觉窗口跳动
  • 编辑器依赖:升级 @fgbg/lobe-editor@1.0.0-fork.14(Mermaid 渲染结果缓存与加载占位,减轻重挂场景下的高度塌陷)

#v0.8.5

  • 目录描述版本链:新建文件夹时自动创建的 ___desc___.md 现在与普通文档一样写入首版 commit 和 headCommitId;升级后启动时会为历史上缺少 head 的目录描述从磁盘补迁移,修复「无法发布:缺少版本基准」
  • 自动发布失败打标:任意自动发布失败(缺版本基准、404、API 错误等)都会在 IndexedDB 草稿上写入 publishError,自动扫描会跳过重试;可在设置页「未发布草稿」查看失败原因并手动重试或另存
  • 合并页懒加载:MergeView 改为按需加载,减小首屏主包体积

#v0.8.4

  • 前端体积:升级 @fgbg/lobe-editor@fork.13,Shiki 语法高亮仅保留约 40 种常用语言(见下方列表),dist/web 资源文件减少;冷门语言代码块以纯文本显示,内容不丢失

#v0.8.3

  • 静态资源压缩:Express 启用 gzip(compression),JS/CSS 等响应带 Content-Encoding: gzip,首屏传输量显著下降
  • 静态资源缓存:/assets/*(带 hash 的文件)设置 Cache-Control: public, max-age=31536000, immutable,二次打开更快

#v0.8.2

  • 全局安装 Web UI:修复 npm install -g 后访问 / 显示 Cannot GET /——前端静态目录改为相对安装包路径解析,不再依赖启动时的当前工作目录

#v0.8.1

  • 服务监听地址:默认 MDOCS_HOST 从 127.0.0.1 改为 0.0.0.0,服务器部署后外网可直接访问(本地仅本机可设 MDOCS_HOST=127.0.0.1)

#v0.8.0

  • CLI 全局安装:修复 bin/mdocs.js 无执行权限导致 npm install -g 后 mdocs: Permission denied 的问题

#v0.7.9

  • 前端文档状态重构(activeDocMeta):
    • 当前打开文档的服务端元信息(权限、路径、head、标题等)与正文分离:正文由编辑器 + IndexedDB 草稿承载,不再写入混合的 activeDoc 对象
    • 打开文档:有草稿则只加载草稿正文,否则加载服务器正文;meta 始终来自 GET
    • 发布成功(手动 / 自动):删除本地草稿 → 再 GET → 刷新 meta 与编辑器,修复单用户自动发布后误报版本冲突
    • 按文档串行队列处理自动保存与自动发布,降低 publish 与 save 交错导致的 commit 滞后
    • 有未发布草稿时不做 sync「落后」轮询,减少与本地副本冲突的提示噪声
    • 发布后编辑器仅原地更新内容,避免整页 remount 闪烁
  • 合并(Merge)体验:
    • 409 / diverged 时提供三栏合并界面(本地 / 结果 / 远端),行内处理差异块
    • 服务端 GET .../merge-context 提供合并祖先(LCA)正文,用于三路对比
    • 合并发布成功后同样删草稿并拉取最新文档

#v0.7.8

  • 草稿副本模型收敛:
    • 草稿以 documentId 为主键,保存正文与开编基准 commit(baseCommitId),并在首次编辑落盘时携带文档快照信息,后续自动保存只更新内容相关字段
    • 发布冲突(409)统一进入冲突处理流程,避免普通错误提示与 merge 提示重复弹窗
  • 同步 / 拉取行为简化:
    • 有未发布草稿时,不再执行覆盖式 pull,避免本地副本被意外覆盖
    • 无未发布草稿时,点击「拉取更新」会直接拉取远端最新内容并刷新编辑区
    • 修复“拉取后数据已更新但编辑器 UI 未同步”的问题
  • 权限一致性修复:
    • 前端编辑权限判断回到服务端最新文档元信息,避免草稿旧 meta 造成“看起来可编辑但发布被拒绝”的误判
    • 后端修复 public 域下 public_read 文档 + invite(edit) 的编辑判定(被邀请编辑者现在可正常发布)
  • 错误提示机制统一:
    • API 错误由网络层统一分发,App 全局统一弹窗处理
    • 右下角提示保留为 success/info 反馈,并统一为灰框样式

#v0.7.7

  • 评论功能体验优化:
    • 评论内容保留换行显示:在 .mdocs-comment-content 增加 white-space: pre-wrap,发出的评论保留输入时的换行和空格,不再被折叠成一坨
    • 评论面板宽度可拖动:左边缘新增蓝色拖拽条,支持 280px ~ 600px 自由调整
    • 评论输入框高度可拖动:输入框顶部新增灰色拖拽条,按住向上拖让输入框变高(60px ~ 600px),适合写长评论
    • 实现说明:放弃浏览器原生 resize: vertical(只能从右下角往下拖),改用 React state + 自定义顶部 handle,textarea 高度由 state 接管
    • 详见 fgbg-docs/comments-panel-resize.md
  • 评论输入区布局优化:
    • 字符计数改为浮动显示在输入框右下角,不再独占一行,节省 ~30-40px 垂直空间,评论列表可显示更多内容
    • 输入区域上下 padding 从 16px 精简为 12px,拖拽手柄尺寸缩小为 32×3px,整体更紧凑
    • 详见 fgbg-docs/comments-layout-optimization.md
  • 评论输入框高度自动适配:
    • 输入换行自动撑高输入框,删空自动缩回默认高度(80px),无需手动拖拽
    • 高度上限 300px,超出后显示滚动条
    • 与手动拖拽逻辑不冲突,拖拽后内容变化仍可自动适配

#v0.7.6

  • Demo 模式完善:补全缺失的 Mock API,消除 501 错误
    • 新增书签 Mock API:收藏/取消收藏/收藏列表
    • 新增评论 Mock API:发表/查看/删除评论
    • 新增文档邀请 Mock API:邀请访客/移除邀请/查看邀请
    • 新增我的文档 Mock API:按所有者过滤文档
    • 新增访客目录 Mock API:返回访客列表
  • Demo 模式 UI 优化:
    • 隐藏无意义的退出登录按钮
    • 设置页新增黄色提示条,说明 Demo 模式限制
    • 优化 Demo Banner 文案:"部分功能被禁用,请勿长期存储重要数据"
  • 编辑器收藏状态可视化:在域下拉框右侧新增收藏状态按钮
    • 实心黄色星标 + "已收藏" 文字直观显示当前文档收藏状态
    • 空心灰色星标表示未收藏,点击一键切换
    • 与文档信息菜单的收藏状态双向同步
  • Bug 修复:
    • 修复设置页「我的收藏」列表显示域 ID 而非域名称的问题,现在加载域列表并通过 ID → 名称映射正确显示
    • 修复切换设置页后返回文档丢失编辑内容的问题:DocumentEditor 挂载时主动检查 IndexedDB 草稿,若内容与服务器版本不同则自动恢复草稿内容和标题
    • 修复 useAutoSave Hook 中 useCallback 依赖循环导致监听器反复注册的性能问题
  • Vite 依赖预构建优化:增加 optimizeDeps 配置,优化首次冷启动速度

#v0.7.5

  • 修复 Markdown 粘贴列表时 listItem 被错误拆分:升级 @fgbg/lobe-editor 至 1.0.0-fork.12
    • 根因:listItem markdown reader 通过 children.map() 返回数组,解析器的 .flat() 将数组展平导致单个 list item 被拆成多个独立节点
    • 症状:粘贴 1. **开关关闭时**:不查询果切任务 时,有序列表被拆成两个 listItem(value=1 和 value=2)
    • 修复:reader 改为返回单个节点,嵌套列表和 paragraph children 正确合入同一个 listItem
    • 详见 fgbg-docs/references/listitem-parsing-bugfix.md

#v0.7.4

  • 从上游根本解决编辑器内容溢出问题:升级 @fgbg/lobe-editor 至 1.0.0-fork.9
    • 表格宽度溢出修复:在 .editor_table_scrollable_wrapper 增加 min-width: 0,解决 flex 布局下宽表格撑开父容器的经典问题
    • 图片宽度溢出修复:在 .image / .blockImage 样式中增加 img { max-width: 100% !important; },防止大图片横向撑开编辑器
  • 修复 Outline 大纲被挤出视野:给 Editor + Outline 共享的外层 Block 增加 minWidth: 0,确保左侧目录树展开时,大纲不会被宽表格挤出视野
  • 保留 mdocs 侧补丁作为双重保险:待上游稳定后可移除
  • 升级 @fgbg/lobe-editor 至 1.0.0-fork.10(仍属 v0.7.4 产品线,仅上游编辑器迭代;mdocs 应用包版本号未改):
    • Markmap:---markmap--- 正确注册 IMarkdownShortCutService;嵌套 textarea 粘贴不再走主编辑器 Markdown 粘贴链路;预览区按钮可右下角;新增一键展开/折叠全部节点,节点数超过 30 个时默认全部折叠;修复左侧 markdown 编辑器无法全选问题(Cmd/Ctrl+A 事件被 Lexical 全局拦截,需 stopPropagation)
    • 链接:左键重复打开链接编辑浮层;⌘/Ctrl+单击或中键新标签打开;修复异步场景 getLatest 报错(改为 read + $getNodeByKey);EDIT_LINK_COMMAND 移至 LinkNode.ts

#v0.7.3

  • 新增 Markmap 思维导图支持:在 ```markmap 代码块中输入 Markdown 即可渲染为可交互思维导图
    • 实时预览:编辑 Markdown 时下方实时渲染思维导图
    • 全屏预览:点击图表进入全屏模式,支持缩放、拖拽
    • 错误处理:语法错误时显示友好的红色错误提示
    • 交互一致:与 Mermaid 流程图的交互行为完全相同
    • 升级 @fgbg/lobe-editor 至 1.0.0-fork.7
  • 修复编辑器图片宽度溢出问题:增加 .mdocs-editor-content-area img { max-width: 100% !important; } 样式规则,覆盖 Antd Image 组件的内联样式,防止大图片横向撑开编辑器容器

#v0.7.2

  • 修复登录接口被 auth 中间件拦截的问题:新增 /visitors/login 到豁免路径白名单,解决登录时提示 missing visitor token 的错误

#v0.7.0

  • 新增登录密码功能:解决跨浏览器/跨设备登录痛点,访客可设置密码,在任何设备使用「用户名+密码」登录
    • 注册弹窗改为 Tab 结构:左侧注册、右侧登录,无需跳转页面
    • 注册两步流:输入名称 → 可选设置密码
    • 登录支持两种方式:用户名密码 / 恢复码
    • 设置页新增「登录密码」管理卡片,可随时修改密码
  • 多设备同时在线:新增 visitor_sessions 会话表,支持多个设备同时登录同一账号,互不干扰
  • 向后兼容:未设置密码的访客仍可在原设备正常使用;所有已存在账号默认密码为 1234,登录后可自行修改

#v0.6.9

  • 升级 @lobehub/editor 至 1.0.0-fork.6,同步上游修复:
    • 修复 Meta2d 弹窗按钮暗色模式不可见:DiagramEditor 弹窗硬编码 background: '#fff' 但未重置文字颜色,暗色主题下所有按钮(撤销/重做/删除/适应/100%/关闭)白底白字。加 color: '#000' 修复
    • Meta2d 流程图 SVG 预览导出稳定:SVG 导出优先用当前编辑实例而非隐藏实例重放,修复多 pen 场景部分导出为空
    • 修复划词 ColorPicker 选色后跳回黑色:selection 为 null 时保留上次检测到的颜色值
    • Locale 深合并 + BlockImage 插入光标流:
      • registerLocale() 改为深合并,避免插件注册 {codemirror:{...}} 时覆盖已有 meta2d.editor 等嵌套 key
      • BlockImageNode 通过 ---meta2d--- 或粘贴插入后,自动创建空白段落并定位光标,不再卡在图片后无法继续输入

#v0.6.8

  • 修复划词 ColorPicker 选色后跳回黑色:修复选中文本后通过浮动工具栏的 ColorPicker 设置颜色时,颜色面板立即跳回黑色的问题。根因为 useEditorState 在 selection 为 null(如 ColorPicker popup 导致编辑器失焦)时错误清空了 textColor/bgColor,现改为保留上一次检测到的颜色值,避免无选区时误判格式状态
  • 升级 @lobehub/editor 至 1.0.0-fork.4,同步上游修复:
    • 修复编辑器销毁泄漏:ReactEditor 和 useEditor 增加 destroy() cleanup,配合 pendingDestroyRef + queueMicrotask 兼容 StrictMode remount
    • Markdown 粘贴智能检测:移除评分机制改为始终转换,代码块内粘贴防光标跳转,Mermaid 错误友好提示,空链接 Enter 自动转换
    • Meta2d 流程图预览修复:SVG 预览与下载尺寸对齐,过滤 isShowChild=false 的 pens,高大预览图自动居中并支持滚动
    • 工具栏状态即时更新:移除 500ms debounce,加粗/斜体/颜色等状态立即响应
    • 大纲工具栏切换:新增 useOutlineActionItem,工具栏可一键展开/折叠大纲面板

#v0.6.7

  • 草稿发布失败恢复机制:自动发布遇到服务端文档不存在(404)时,草稿不再静默丢失或无限循环报错,而是标记为发布失败状态并通知用户;用户可在草稿列表页点击「另存为新文档」,通过域选择器 + 目录树选择目标位置,将草稿内容作为全新文档重新发布
  • 修复 Lexical 编辑器内存泄漏:修复切换文档时内存飙升至 40GB 的致命问题。根因为 @lobehub/editor 的 ReactEditor 组件创建编辑器实例后从不调用 destroy(),且 DocumentEditor 使用 key 强制重新挂载导致每次切换都泄漏一个完整的编辑器实例(含 CodeMirror、Meta2d Canvas、图片等 DecoratorNode 资源)。上游 ReactEditor 和 useEditor() hook 已增加 destroy() cleanup,mdocs 侧移除多余的 key 并增加防御性清理
  • 兼容 React StrictMode 的编辑器生命周期:修复 StrictMode 开发环境下 editor.destroy() 后重新挂载导致 DataSource for type "json" is not registered 报错。采用 pendingDestroyRef + queueMicrotask 延迟取消模式:cleanup 中把 destroy 排队到 microtask,若紧接着是 StrictMode remount 则同步取消,真正卸载时才执行销毁
  • 批量修复异步组件卸载泄漏:为 CommentsPanel、SettingsPage、DraftListPage、RecoveryDialog、DocumentEditor 的异步请求增加卸载保护。CommentsPanel 采用 expectedDocumentIdRef 竞态保护丢弃旧请求;其余组件采用 mountedRef 模式防止卸载后 setState
  • 浏览器资源泄漏清理:修复 Playground 中 URL.createObjectURL 未 revokeObjectURL 的问题;修复 actions.ts 文件选择器在 Safari 中取消后 DOM 节点未移除的问题(增加 5s 兜底超时);修复 Playground 卸载后 window.editor 和 debounce 定时器未清理的问题

#v0.6.6

  • 设置页面大改版:重新组织设置导航,新增「我的收藏」和「我的文章」两个独立 Tab
  • 我的收藏表格视图:收藏列表改为表格布局,支持标题搜索,显示域名、作者、收藏时间四列
  • 我的文章列表:集中展示当前访客创建的所有文档,按更新时间倒序排列;支持标题/域名搜索;每篇可直接打开或邀请成员
  • 文档邀请快捷入口:我的文章列表每行新增「邀请成员」按钮,无需打开文档即可配置访问权限

#v0.6.5

  • 自动保存性能优化:修复 useAutoSave Hook 中 useCallback 依赖循环问题,使用 useRef 保存频繁变化的值,避免 Lexical 监听器反复注册注销,减少不必要的性能开销
  • 切换文档竞态修复:修复快速连续切换文档时,旧请求后返回导致编辑器内容与 URL 中 documentId 不匹配的问题,新增 expectedDocIdRef 竞态检查机制
  • 评论列表性能优化:CommentsPanel 评论列表渲染从 O(n*m) 优化为 O(n),使用 useMemo + Map 单次遍历完成根评论与回复分组,同时顺便计算未删除评论总数
  • 编辑器初始化优化:移除 DocumentEditor.handleInit 中重复的 JSON.parse 逻辑,直接复用已预计算的 contentType
  • 代码清理:删除已标记 @deprecated 的 deleteFolderApiV0 函数(已被递归删除目录的 deleteFolderApi 替代)

#v0.6.4

  • 文档邀请成员:编辑器工具栏文档信息菜单新增「邀请成员」入口,可邀请访客以只读或编辑权限协作文档
  • 邀请权限选择:邀请弹窗中右侧已选成员列表新增 MiniSelect 下拉框,可为每个被邀请人独立设置「只读」/「可编辑」权限
  • MiniSelect 组件:新增紧凑型通用下拉组件,支持点击外部关闭、Escape 键、键盘可访问
  • 邀请编辑 Bug 修复:修复了被邀请用户虽然能通过后端鉴权但前端编辑器仍以只读模式渲染的问题 — 后端 getDocument() 现在返回 invitedEdit 标记,前端 canEdit 计算补充 invite 检查
  • 后端权限修正:canEditDocument() 在 private 域各权限档位下补充 document_invites 检查,被 invite edit 的非创建者现在可正常编辑
  • 10 条新增单测:覆盖 invite read/edit 跨所有权限档位(private/domain_read/domain_write/public_read/public_write)

#v0.6.3

  • 文档信息菜单:编辑器工具栏新增三条线菜单按钮,可查看文档元信息(创建者、创建时间、大小、上次编辑),支持快速收藏/取消收藏
  • 文档权限修改入口:文档信息菜单中预留权限修改入口(后续版本开放完整功能
  • 收藏功能:侧边栏新增「我的收藏」入口,支持一键收藏/取消收藏文档,已删除文档的收藏保留显示便于手动取消
  • Lucide SVG 图标:收藏、退出登录按钮统一使用 Lucide SVG 图标替代 emoji,hover 时有缩放和颜色变化的视觉反馈
  • 收藏弹窗大改版:「我的收藏」弹窗重构为表格布局(<table>),标题/域/作者/收藏时间四列对齐;新增名称搜索框和域筛选下拉;每行新增📖快速打开按钮;操作按钮支持即时 tooltip;标题超长时自动截断并显示原生 tooltip;取消收藏有淡出动画
  • 作者与收藏时间显示:后端 LEFT JOIN visitors 表获取文档作者名,前端每行展示作者 + Intl.RelativeTimeFormat 相对时间(自动适配中英文)
  • Cookie 有效期延长:身份 Cookie 从 1 年延长到 10 年,实现"永久"登录体验
  • 登录态稳定性优化:修复因请求头占位符覆盖有效 Cookie 导致刷新后需要重新登录的问题

#v0.6.2

  • 访客名称全局唯一:visitor_name 增加数据库 UNIQUE 约束,避免同名混淆
  • migrate 支持按名称迁移:pnpm mdocs visitor migrate --from Alice --to Bob,不再需要输入 UUID
  • 个人域路径处理移到后端:前端不再需要 visitorId 判断路径,Tree API 自动根据当前访客身份返回美化后的路径
  • 登录态 BUG 修复:修复了因请求头占位符覆盖有效 Cookie 导致刷新后需要重新登录的问题

#v0.6.0

  • 访客恢复码:新增访客身份恢复机制,生成一次性恢复码,丢失浏览器本地 token 后可凭码恢复访客身份及所有文档权限

#v0.5.0

  • 全文搜索:新增 FTS5 搜索引擎,支持中文分词(jieba),在搜索框输入关键词即可按 BM25 相关性排序检索全库文档
  • 后端 Markdown 转 Lexical:编辑器和 API 支持直接传入 Markdown 文本,后端自动转换为 Lexical JSON 存储。CLI 客户端 create / update 默认使用 contentFormat: 'markdown'
  • 域切换持久化:刷新页面后域选择不丢失,自动恢复到上次浏览的域
  • mdocs-cli 命令行客户端:新增独立 CLI 工具仓库 https://github.com/xuhuafeifei/mdocs-cli,提供 search、get、create、update、domains、mkdir 六个命令,Token 在设置页创建

#v0.4.0

  • CLI Token:新增命令行身份令牌,可在设置页创建/重置,支持 x-cli-token 认证头,继承访客所有权限
  • ConfirmDialog 组件:通用确认弹窗,替代原生 window.confirm

#v0.3.0

  • 显式目录模型:引入 file_type('dir' / 'md')和 parent_id,目录不再是路径切割的产物
  • 空目录支持:可以创建没有子文档的空目录
  • 磁盘路径域隔离:每个域拥有独立的磁盘子目录(~/.mdocs/files/docs/{domain_id}/),不同域同名文件不再冲突
  • 目录描述文件改名:从 desc.md 改为 ___desc___.md,避免与用户创建的文件冲突
  • 新建目录接口:新增 POST /api/folders,创建目录时自动创建 ___desc___.md
  • 树构建优化:按 parent_id 一次查询建树,不再递归切割路径

#v0.2.0

  • 权限模型重构:从四级权限升级为五级权限(private → domain_read → domain_write → public_read → public_write),invite 从档位改为独立叠加层
  • 域约束生效:public / restricted 域类型现在限制域内文档可选档位(public 仅 3/4,restricted 仅 1/2)
  • 邀请互斥:域成员不能再被 invite,减少权限混淆
  • 鉴权收拢:所有权限判断集中在统一模块,不再分散在各服务和中间件
  • 受限域(restricted domain)支持

#v0.1.0

  • 项目初始化
  • 基于 Lexical 的富文本编辑器,支持标题、表格、代码块、数学公式
  • Meta2d 流程图拖拽编辑器
  • SQLite + 文件系统存储
  • 无账户访客身份识别(UUID token + SHA-256)
  • 域隔离(公共域 + 个人域)
  • 文档级邀请协作(只读 / 编辑)
  • IndexedDB 本地草稿自动保存
  • 中英文双语界面