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

快速开始

安装
第一个知识库

AI 与 Agent

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

核心概念

所见皆文件
工作空间
文档级邀请
无账户身份识别

使用指南

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

部署与配置

环境要求
配置文件
反向代理示例
客户端壳(Android / 桌面)
FAQ
更新日志
Previous PageFAQ
mdocs

Write freely. Never lose a word.

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

#更新日志

现行文档里,产品概念「域」已改称 工作空间。下面各版本仍按当时的叫法记录。

#v1.3.22

#语义索引

  • 构建过程打进度日志(batch / 文档 / chunk 耗时),方便在 console 观察
  • MDOCS_DISABLE_EMBEDDING=1:小内存机器可整路关闭语义(仅关键词 FTS)
  • 缺 node-llama-cpp 时日志给出重装指引;mdocs update 同步新依赖并补装该包

#v1.3.21

同 v1.3.20(npm 上 1.3.20 卡在 processing,改发此版本)。

#v1.3.20

#文档搜索

  • 检索模式:自动 / 仅关键词 / 仅语义;⌘K 浮层与设置页「我的文章」搜索框可选
  • 默认范围:搜索浮层默认「全部」可见工作空间,可用下拉限定某一工作空间
  • 命中高亮:结果标题/片段对命中词做 <mark> 高亮;可区分标题 / 正文 / 语义来源
  • 本地语义索引:nomic GGUF(node-llama-cpp)异步下载加载;失败不挡关键词 FTS
  • 设置 → 语义索引:表格勾选重建;可按工作空间 / 是否已建筛选、列排序、分页;显示文章更新时间与上次语义构建时间

#智能助手

  • search_documents 增加 mode(auto / keyword / semantic)
  • 新增 list_semantic_index、rebuild_semantic_index(可读文档即可)

#v1.3.19

同 v1.3.18(npm 上 1.3.18 卡在 staged,改发此版本)。

#v1.3.18

#文档搜索

  • 侧栏搜索 + ⌘K / Ctrl+K:当前工作空间悬浮搜索浮层,点结果直接打开文章
  • 标题独立索引:标题与正文分两路 FTS;标题命中权重更高,排序更靠前
  • 搜索结果展示作者与最后修改时间
  • 查询侧同步 jieba 分词,修复中文多字词难以命中的问题

#知识图谱

  • 单击文档(doc)节点时直接打开来源文章

#侧栏

  • 操作栏收紧间距并略增宽度,避免新建/搜索/图谱图标换行

#v1.3.17

#侧栏与目录

  • 右键可新建目录:文档树右键除「新建文档」外,恢复「新建目录」
  • 侧栏工作入口:左侧保留「新建文章」「新建目录」;欢迎页主按钮仍是「开始写作」

#删除按钮

  • 删除按钮改为红描边 + 红字,悬停再加深浅红底,默认状态下文字更清楚

#知识图谱权限

  • 读图 / 生成图谱须具备工作空间协作身份(full);仅靠单篇邀请进入的成员不能访问图谱
  • private 工作空间仅主人可访问图谱;接口返回明确错误文案

#图谱构建

  • 目录归纳进度文案改用目录显示名,不再误用 document id

#v1.3.16

#顶栏状态

  • 「编辑中 / 已发布」只跟未发布的本地草稿:没有草稿就是已发布;草稿写入或删除后,顶栏同一轮改字。打开已有草稿时不再先闪一下「已发布」
  • 打字后仍等约 1 秒落盘,才变成「编辑中」

#AI 帮写

  • 桌面端「完成并写回」「取消」改用应用内确认框。系统确认框在桌面壳里不会弹出,所以之前点了没反应
  • 完成时只问「是否回写」:确认写入本地草稿,不自动发布;返回留在帮写界面

#手机端

  • 窄屏阅读顶栏增加拉取更新按钮

#v1.3.15

#升级

  • mdocs update 后命令可执行:覆盖安装时给 package.json 里的 bin 加上可执行位,避免升级后 /usr/bin/mdocs Permission denied

#附件下载

  • 非图片附件一律 application/octet-stream + Content-Disposition: attachment
  • 桌面壳遇到附件链接时交给系统浏览器下载,不再在窗口里打开预览

#手机端

  • 窄屏隐藏「AI 帮写」入口(欢迎页按钮、文档顶栏、助手打开帮写)

#v1.3.14

同 v1.3.13(npm 上 1.3.13 卡在 staged,改发此版本)。

#v1.3.13

#我的文章

  • 筛选区横向排布:搜索框与域/创建者/分组筛选同一行,聚焦态改为细边框,不再整块挤成竖排
  • 表格可读性:标题主次分明,日期 YYYY-MM-DD,操作列「邀请」次要、「打开」主按钮
  • 跳页:页脚支持「跳至」指定页码(回车或点跳转),超出范围自动夹到首尾页

#域管理

  • 改类型:行内分段控件(公开 / 受限 / 私有)+ 勾选确认 / 取消;不能下降的选项置灰,悬停才提示
  • 操作列层级:「成员…」主色按钮,重命名/改类型为文字按钮,删除为危险色;禁用态灰底可辨
  • 内置域:操作列改为「系统预设,不可修改」标签

#智能助手

  • query_my_documents:原 list_my_documents 改名;可按域/创建者筛选、分组,并用 offset/limit 翻页(与设置页「我的文章」对齐)
  • 全文检索仍用 search_documents

#v1.3.12

#域权限

  • 只能升级,不能下降:开放程度 private < restricted < public;更封闭返回 400
  • 有文档的域仍可升级权限;重命名/删除在有文档时继续锁定
  • Agent 工具 set_domain_permission 走同一规则

#我的文章

  • 支持按域、创建者筛选,以及按域/创建者分组(本页)
  • 列表行增加创建者信息;筛选参数均可不传

#附件下载

  • 桌面端 / 手机端点击文件链接可正常下载(Web 拦截 + 服务端强制 attachment + 壳层处理新窗口)

#智能助手

  • invite_document_user:按文档邀请访客(read / edit)
  • query_my_documents 的前身已支持筛选参数

#v1.3.6

#手机端

  • 目录树小三角:点击只展开/收起子目录,不再顺带激活文件夹。此前手机端展开目录时会把整个目录抽屉关掉
  • Markdown 文章顶栏:域选择和发布按钮恢复常驻单行;「可折叠操作栏」只对 HTML 文档生效(HTML 正文另有预览/编辑切换,顶栏更挤)

#目录树

  • 选中的文章常显图谱按钮:不再只在鼠标悬停时出现,「查看图谱」「生成图谱」对选中项保持可见

#v1.3.5

#知识图谱

  • 工具栏重构:左侧「标题 + 退出图谱」,右侧「层级控制 / 视图 / 配置 AI / 重新生成」
  • 退出图谱:红色实心按钮,桌面与手机都常显(此前只有手机端有个 ×)
  • 收纳:展开一级 / 展开到二级 / 全部收起 合并为「层级控制」下拉;「显示其它关系」「显示 doc 节点」合并为「视图」下拉
  • 标题:过长时截断显示省略号,悬停可看全名
  • 手机端:右侧操作全部收进 ⋯ 三点菜单(竖排卡片,与文档页三点菜单一致)

#手机端顶栏

  • 文档顶栏(DocChrome)操作栏改为可折叠:第一行「目录 + 标题 + 展开 + ⋯」,域选择/发布等收进第二行,默认折叠

#仓库

  • 新增 Android WebView 壳(侧载 APK)与 Tauri 2 桌面壳(macOS + Windows)源码,均不参与 pnpm build,也不进 npm 包

#v1.3.4

#登录 / 注册

  • 去 Tab:弹框不再用「注册 | 登录」双 Tab,默认显示登录
  • 登录下方「没有账号?点击注册」进入注册流程;注册流程内保留「已有账号?点击登录」可随时切回

#修复

  • 弹框层级:手机端展开侧边栏后,弹框不再被侧边栏遮挡(z-index 提升)

#智能助手

  • 项目信息:助手现在能回答项目官网和源代码仓库地址

#v1.3.3

#UI 优化

  • 编辑/预览开关:改为 iOS 风格浅色分段控制器(#F2F3F5 背景 + 白色滑块)
  • 顶栏按钮:次要操作(收藏、评论等)统一灰色线性图标,hover 变深灰
  • 侧边栏选中态:去掉绿色边框,改为浅灰背景 + 左侧绿色指示条
  • 布局:侧边栏背景 #FAFAFA,主内容区 #FFFFFF,空间层次更清晰
  • 树行间距:增加行高和内边距,呼吸感提升
  • 空白状态:新增引导图标与文案

#修复

  • HTML 预览模式下右侧不再显示重复的编辑按钮(由分段控制器统一切换)

#v1.3.2

#HTML 文档

  • 手机端顶栏:Header 改为占据空间(docked),与面板贴合,不再悬浮在内容上

#上传

  • 不再限制文件类型:任何扩展名均可上传,未知类型存为 .bin

#v1.3.1

#HTML 文档

  • 手机端默认预览:打开即预览,不再先显示源码
  • 编辑 / 预览切换移入手机端三点菜单

#v1.3.0

#HTML 文档(二期:DocChrome 顶栏)

  • DocChrome:Markdown 与 HTML 共用文档顶栏(标题 / 域选择 / 同步 / 发布 / 删除 / 收藏 / 文档信息 / 评论),窄屏 reader 同壳
  • HTML 帮写开放:工作台仍是 Markdown;进场以 HTML 原文为 seed,完成后写回 HTML 草稿
  • 政策表:删除 editor 列,改为按 fileType 分派编辑器;新增 aiWrite / comments 能力列
  • 修复 HTML「文档信息」面板添加邀请失败

详见 HTML 文档。

#智能助手

  • 修复:覆写 .html 文档时误传 Markdown 格式导致失败;现在按文件类型传对应格式(HTML 传原文),助手也不再声称「不支持写 HTML」
  • 工具:get_document 返回 fileType;create_document 可直接建 HTML;list_tree 结果含 HTML
  • 聊天体验:Mermaid 图不再因输入而重新渲染、切换会话不再闪「渲染中」;长回答上滑时新增「置底」按钮

#其它

  • 域级知识图谱顶层遍历改用文件类型政策表过滤(HTML 等不参与抽取)

#v1.2.2

#HTML 文档(一期)

  • 新建 HTML:侧栏「新建」下拉可选 Markdown / HTML;树中图标为 H
  • 预览与编辑:默认预览(iframe + sandbox="",不执行脚本);可手动切编辑(textarea 源码)/ 预览
  • 草稿与发布:与 Markdown 共用 IndexedDB 草稿壳(contentKind=html 存原文);乐观锁 / 冲突 merge 走原文三路,不经 Lexical 桥
  • 政策:不进全文搜索、不进知识图谱抽取;GET ?format=text 返回 HTML 原文
  • 二期预告:与 Markdown 共用顶栏(标题 / 域选择 / 同步等);AI 帮写是否接入 HTML 另议

详见 HTML 文档。


#v1.2.1

#修复与体验

  • 左侧目录树滚动:头尾固定,仅中间树列表滚动;悬浮层移出主壳,避免整页被正文撑高
  • DeepSeek 模型:默认改为官方名 deepseek-flash(V4.1 Flash);旧 deepseek-v4-flash / deepseek-v4.1-flash 等别名保存时归一;默认上下文 1M;deepseek-v4-pro 仍可选(将路由至 Flash)

#其它

  • 图谱与路径相关小改进

#v1.2.0

#Agent

  • 聊天 Mermaid:助手回复里的 mermaid 围栏默认渲染成图,可切「图谱 / 代码」;只存源码,前端翻译,不存 SVG
  • 图悬浮预览:点击图谱进入悬浮层,可拖动平移、滚轮/按钮缩放
  • PC 全屏对话:宽屏可切换助手面板全屏
  • 图谱焦点 Ask:打开知识图谱时,Ask 引用当前图谱缓存(只读),与文档焦点互斥

#知识图谱与其它

  • 单一焦点:同一时刻只聚焦文档或图谱之一,切换时互清编辑器/图谱主区
  • 文件类型政策:按类型控制读取/覆写(禁止覆写图谱等特殊文件);预留 HTML 类型
  • 设置页表格:收藏 / 我的文档表横向滚动包裹,窄屏更稳

#v1.1.2

#修复与体验

  • 拉取更新 + 本地草稿:落后且有未发布草稿时,「拉取更新」会打开合并视图,而不再静默无反应
  • AI 帮写 diff:接受/拒绝后布局不再因失焦整段 LCS 重算而「旧上新下」错位
  • 路径式文档链接:兼容 /doc/<id>,自动转到 HashRouter 的 #/doc/<id>
  • 手机图谱详情:窄屏下节点详情全屏铺满图谱区,便于阅读关闭
  • 附件上传:放宽 PDF MIME 校验;PDF 强制下载;插入附件文件选择器补上 pdf/zip 等扩展名

#v1.1.1

  • Markdown 粘贴转换:多段落正文不再只剩一级标题;嵌套列表父项与子项可完整保留(依赖 @fgbg/lobe-editor@1.0.0-fork.21)
  • 编辑器依赖:升级 @fgbg/lobe-editor@1.0.0-fork.21

#v1.1.0

#知识图谱

  • 异步生成队列:点「生成图谱」入队后台执行,支持排队 / 进度面板 / 任务日志轮询
  • 按篇进度:目录与域构建按叶子文章上报进度(不再只有「整包 1/1」)
  • 协作式让出:长时间构建会按时间片 yield,避免占满并发槽
  • 修复任务 ID 错位:目录 file_type 为 dir 时误标成 doc,导致轮询 not_found、进度条闪退(后台其实在跑)
  • 生成默认走缓存:force: false,干净缓存可复用;脏数据才会重抽
  • 队列文案:下一位显示「即将开始」,不再出现「前面还有 0 个任务」
  • 目录树图谱入口:悬停操作改为 SVG 图标;长标题省略 + 悬停全名

#体验与其它

  • 手机阅读顶栏:常用操作保留,更多收入菜单,减轻窄屏拥挤
  • CI:GitHub Pages 部署相关 Action 升级到 v5

#v1.0.0

#知识图谱 🧠

  • 三级构建:文章 / 目录 / 域,自下而上 AI 归纳概念与关系
  • 两种节点:文档节点 + 概念节点
  • 四种关系:包含(contains)、相关(related_to)、部分(part_of)、依赖(depends_on)
  • 力导向图可视化:可拖拽、缩放、悬停高亮;右侧详情面板展示节点信息
  • 脏缓存机制:正文改动超过阈值才标脏重算,小改不触发 AI
  • 异步生命周期:删/挪/发布后后台更新图谱,不阻塞主链路
  • 入口:目录树悬停按钮、域侧栏「知识图谱」按钮

#AI 智能助手 🤖

  • 多供应商配置:DeepSeek 预设 + 自定义供应商,一人可存多条配置
  • 极简自定义:只需填 baseUrl / modelId / apiKey 三个字段
  • 协议自动识别:URL 含 anthropic 自动切换 Anthropic 协议
  • apiKey 文件存储:从数据库迁移到 ~/.mdocs/secrets/,文件权限 0600
  • 默认配置切换:多配置时可设默认,一键切换
  • 内嵌配置卡片:助手面板直接填 Key,不用跳转设置页

#其他

  • 设置页 AI 配置全面翻新:列表视图、创建/编辑/删除/设为默认
  • 帮写工作台适配多供应商配置

#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 本地草稿自动保存
  • 中英文双语界面