@fgbg/mdocs 0.8.16 → 0.8.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/README.md +114 -76
  2. package/agent-skills/changelog/SKILL.md +15 -1
  3. package/agent-skills/index/SKILL.md +1 -1
  4. package/agent-skills/index.json +4 -4
  5. package/agent-skills/usage-agent-dev-loop/SKILL.md +7 -7
  6. package/agent-skills/usage-onboarding-ai/SKILL.md +98 -29
  7. package/agent-skills/usage-settings/SKILL.md +4 -4
  8. package/dist/server/agent/Agent/almost-empty.js +15 -0
  9. package/dist/server/agent/Agent/almost-empty.js.map +1 -0
  10. package/dist/server/agent/Agent/almost-empty.test.js +20 -0
  11. package/dist/server/agent/Agent/almost-empty.test.js.map +1 -0
  12. package/dist/server/agent/Agent/choice-pending.js +71 -0
  13. package/dist/server/agent/Agent/choice-pending.js.map +1 -0
  14. package/dist/server/agent/Agent/choice-pending.test.js +58 -0
  15. package/dist/server/agent/Agent/choice-pending.test.js.map +1 -0
  16. package/dist/server/agent/Agent/run.js +49 -3
  17. package/dist/server/agent/Agent/run.js.map +1 -1
  18. package/dist/server/agent/Agent/system-prompt.js +6 -5
  19. package/dist/server/agent/Agent/system-prompt.js.map +1 -1
  20. package/dist/server/agent/Agent/tools-account.js +16 -3
  21. package/dist/server/agent/Agent/tools-account.js.map +1 -1
  22. package/dist/server/agent/Agent/tools-choice.js +70 -0
  23. package/dist/server/agent/Agent/tools-choice.js.map +1 -0
  24. package/dist/server/agent/Agent/tools-coding.js +6 -3
  25. package/dist/server/agent/Agent/tools-coding.js.map +1 -1
  26. package/dist/server/agent/Agent/tools-overwrite.js +158 -0
  27. package/dist/server/agent/Agent/tools-overwrite.js.map +1 -0
  28. package/dist/server/routes/agent.routes.js +54 -0
  29. package/dist/server/routes/agent.routes.js.map +1 -1
  30. package/dist/server/search/document-index-manager.js +11 -8
  31. package/dist/server/search/document-index-manager.js.map +1 -1
  32. package/dist/web/assets/AgentChatPanel-DHy3KgSW.js +1 -0
  33. package/dist/web/assets/AiWriteWorkbench-Ce_OaED4.js +6 -0
  34. package/dist/web/assets/DocumentEditor-B2H3rHSg.js +21 -0
  35. package/dist/web/assets/{MergeView-BqQuuHxp.js → MergeView-Cy4Pi3Je.js} +2 -2
  36. package/dist/web/assets/PlaygroundPage-hHfIzPO5.js +8 -0
  37. package/dist/web/assets/SettingsPage-BRAPdqW9.js +1 -0
  38. package/dist/web/assets/Toolbar-DPkTtGNL.js +126 -0
  39. package/dist/web/assets/VisitorPickerModal-CJ0K2gj8.js +1 -0
  40. package/dist/web/assets/copy-DCKasK29.js +11 -0
  41. package/dist/web/assets/diagram-BJFhx-27.js +3016 -0
  42. package/dist/web/assets/editor-BBXgdU3Q.js +16 -0
  43. package/dist/web/assets/history-BQkmetJ0.js +6 -0
  44. package/dist/web/assets/index-BksNm27A.css +1 -0
  45. package/dist/web/assets/index-CA7lpALZ.js +185 -0
  46. package/dist/web/assets/motion-D-I76zAi.js +8 -0
  47. package/dist/web/assets/plus-B2rZTPWV.js +6 -0
  48. package/dist/web/assets/react-CQByW0Rg.js +2236 -0
  49. package/dist/web/assets/react-vendor-BNpqFP9B.js +242 -0
  50. package/dist/web/assets/ui-C3xtW1w8.js +3126 -0
  51. package/dist/web/index.html +28 -3
  52. package/package.json +1 -1
  53. package/dist/web/assets/_baseUniq-CTLDRefi.js +0 -1
  54. package/dist/web/assets/arc-C6HVu_cL.js +0 -1
  55. package/dist/web/assets/architectureDiagram-Q4EWVU46-BGZyIwfI.js +0 -36
  56. package/dist/web/assets/blockDiagram-DXYQGD6D-BnmQmYk5.js +0 -132
  57. package/dist/web/assets/c4Diagram-AHTNJAMY-D5ZSFyGW.js +0 -10
  58. package/dist/web/assets/channel-ComR_5wI.js +0 -1
  59. package/dist/web/assets/chunk-4BX2VUAB-bB7dqglW.js +0 -1
  60. package/dist/web/assets/chunk-4TB4RGXK-DLOuFWAV.js +0 -206
  61. package/dist/web/assets/chunk-55IACEB6-F-vn8P_5.js +0 -1
  62. package/dist/web/assets/chunk-EDXVE4YY-DJggdpTr.js +0 -1
  63. package/dist/web/assets/chunk-FMBD7UC4-CGFWLCLP.js +0 -15
  64. package/dist/web/assets/chunk-OYMX7WX6-nDiR5vU7.js +0 -231
  65. package/dist/web/assets/chunk-QZHKN3VN-D29FhQRL.js +0 -1
  66. package/dist/web/assets/chunk-YZCP3GAM-BmFALtIq.js +0 -1
  67. package/dist/web/assets/classDiagram-6PBFFD2Q-CxGT_r56.js +0 -1
  68. package/dist/web/assets/classDiagram-v2-HSJHXN6E-CxGT_r56.js +0 -1
  69. package/dist/web/assets/clone-J85LHgdR.js +0 -1
  70. package/dist/web/assets/cose-bilkent-S5V4N54A-J4Iar7P4.js +0 -1
  71. package/dist/web/assets/cytoscape.esm-BiciSPf8.js +0 -331
  72. package/dist/web/assets/dagre-KV5264BT-Cg07vwKD.js +0 -4
  73. package/dist/web/assets/defaultLocale-DX6XiGOO.js +0 -1
  74. package/dist/web/assets/diagram-5BDNPKRD-D0FP-ifV.js +0 -10
  75. package/dist/web/assets/diagram-G4DWMVQ6-CNejTsu2.js +0 -24
  76. package/dist/web/assets/diagram-MMDJMWI5-DEQjM6f7.js +0 -43
  77. package/dist/web/assets/diagram-TYMM5635-CRGZl6sR.js +0 -24
  78. package/dist/web/assets/erDiagram-SMLLAGMA-BGOATwuq.js +0 -85
  79. package/dist/web/assets/flowDiagram-DWJPFMVM-DVHizH8q.js +0 -162
  80. package/dist/web/assets/ganttDiagram-T4ZO3ILL-dLF_Rbaw.js +0 -292
  81. package/dist/web/assets/gitGraphDiagram-UUTBAWPF-BNMxCpkL.js +0 -106
  82. package/dist/web/assets/graph-p7_cO2pv.js +0 -1
  83. package/dist/web/assets/index-5eJ_7IuO.css +0 -1
  84. package/dist/web/assets/index-DoJ58x_f.js +0 -6291
  85. package/dist/web/assets/infoDiagram-42DDH7IO-BDffsV8g.js +0 -2
  86. package/dist/web/assets/ishikawaDiagram-UXIWVN3A-C7fw-Hwt.js +0 -70
  87. package/dist/web/assets/journeyDiagram-VCZTEJTY-CuEYHG93.js +0 -139
  88. package/dist/web/assets/kanban-definition-6JOO6SKY-iodYb2rc.js +0 -89
  89. package/dist/web/assets/layout-Dblo7Nv4.js +0 -1
  90. package/dist/web/assets/linear-Dj7ICVZv.js +0 -1
  91. package/dist/web/assets/min-BC0MiAVU.js +0 -1
  92. package/dist/web/assets/mindmap-definition-QFDTVHPH-Bi8kR-nH.js +0 -96
  93. package/dist/web/assets/pieDiagram-DEJITSTG-DFXNJaaz.js +0 -30
  94. package/dist/web/assets/quadrantDiagram-34T5L4WZ-eG750Sg7.js +0 -7
  95. package/dist/web/assets/requirementDiagram-MS252O5E-BOS23lbk.js +0 -84
  96. package/dist/web/assets/sankeyDiagram-XADWPNL6-iuLPdF16.js +0 -10
  97. package/dist/web/assets/sequenceDiagram-FGHM5R23-9dOhL1F_.js +0 -157
  98. package/dist/web/assets/stateDiagram-FHFEXIEX-DiYubp3u.js +0 -1
  99. package/dist/web/assets/stateDiagram-v2-QKLJ7IA2-C0u2afgY.js +0 -1
  100. package/dist/web/assets/timeline-definition-GMOUNBTQ-B7K2SCHF.js +0 -120
  101. package/dist/web/assets/vennDiagram-DHZGUBPP-DwsDXISO.js +0 -34
  102. package/dist/web/assets/wardley-RL74JXVD-DOtyNPcb.js +0 -162
  103. package/dist/web/assets/wardleyDiagram-NUSXRM2D-IO3BUkVB.js +0 -20
  104. package/dist/web/assets/xychartDiagram-5P7HB3ND-B_eC9Ig0.js +0 -7
package/README.md CHANGED
@@ -1,116 +1,154 @@
1
1
  # mdocs
2
2
 
3
- Markdown knowledge base for small teams.
3
+ **开源 Markdown 知识库** 给人用,也给 Agent 用。
4
4
 
5
- - TypeScript front-end and back-end
6
- - Vite + React web, Express back-end
7
- - SQLite metadata, Markdown files as primary storage
8
- - Lightweight visitor identity, no account system
9
- - Runs locally or on a small team server
5
+ 面向个人开发者与小团队:产品内 **智能助手 + 帮写**,外部 **CLI / Skills** 接入 Cursor / Claude;SQLite + 本地文件,**无账户**即可协作。
10
6
 
11
- > 文档站点:[xuhuafeifei.github.io/mdocs-site](https://xuhuafeifei.github.io/mdocs-site/)
7
+ [文档站点](https://xuhuafeifei.github.io/mdocs-site/) · [GitHub](https://github.com/xuhuafeifei/mdocs) · [npm `@fgbg/mdocs`](https://www.npmjs.com/package/@fgbg/mdocs) · 当前版本 **0.8.18**
12
8
 
13
- 编辑界面图片:
14
- <img width="1440" height="812" alt="image" src="https://github.com/user-attachments/assets/605e7299-7485-4809-a9e1-0918c686d5fd" />
15
- **上述文章是通过mdocs-cli由agent阅读Deepseek-TUI代码后推送的**
9
+ <p align="center">
10
+ <img src="image/site主页.png" alt="mdocs 文档站点首页" width="860" />
11
+ </p>
16
12
 
17
- 后台界面
18
- <img width="1440" height="812" alt="image" src="https://github.com/user-attachments/assets/aba8ae95-40d5-49ba-a469-7665f8e3f21b" />
13
+ ## 为什么选 mdocs
19
14
 
15
+ | 能力 | 说明 |
16
+ |------|------|
17
+ | **AI 双模式** | **智能助手**:答疑、搜文、结构操作、有条件全文覆写(低交互),帮你省操作时间。**帮写**:左聊右 Diff、按段接受后再写回(高交互),精细控制每一段文字。 |
18
+ | **Agent 开发闭环** | CLI Token + [mdocs-cli](https://github.com/xuhuafeifei/mdocs-cli) Skills:在 Cursor / Claude 里搜索、读写知识库;`mdocs-dev` / `diagram` 把契约与 Mermaid 落进仓库,减少决策不落盘与知识漂移。 |
19
+ | **本地私有** | 单进程,SQLite + 磁盘文件,无外部 DB / 缓存 / 队列。 |
20
+ | **无账户协作** | 访客即身份;域隔离 + 文档级邀请,从私有到开放按需放开。 |
21
+ | **双模编辑与草稿** | Markdown + 富文本工具栏;Meta2d / Mermaid / Markmap;本地草稿自动保存,空闲可同步云端。 |
20
22
 
21
- ## Clean-room policy
23
+ <p align="center">
24
+ <img src="image/mdocs%20主页.png" alt="mdocs 编辑主界面" width="860" />
25
+ </p>
22
26
 
23
- `mdocs` is implemented from scratch. It MUST NOT reuse any code from
24
- `markdown-docs` (located at `~/ddmc/markdown-docs`). That includes, but is
25
- not limited to:
27
+ ## 快速开始
26
28
 
27
- - Source files, functions, classes, interfaces, types
28
- - SQL statements or schema definitions
29
- - React components, hooks, CSS
30
- - Utility helpers and configuration shapes
31
- - API route wiring or identity logic
29
+ ```bash
30
+ npm install -g @fgbg/mdocs
31
+ mdocs
32
+ # 浏览器打开 http://localhost:4000
33
+ ```
34
+
35
+ 临时体验:
36
+
37
+ ```bash
38
+ npx @fgbg/mdocs
39
+ ```
40
+
41
+ 需要 **Node.js 22+**。更细的安装(含低内存机器 Swap 说明)见 [文档 · 安装](https://xuhuafeifei.github.io/mdocs-site/docs/getting-started/installation.html)。
42
+
43
+ ## 功能速览
44
+
45
+ ### 智能助手
46
+
47
+ 左下角悬浮入口(可拖动):答疑、搜文、建空文档 / 文件夹、移动文档。已有正文时写作会弹出选择卡:**直接覆写 / 打开帮写审阅 / 取消**。
48
+
49
+ <p align="center">
50
+ <img src="image/Snipaste_2026-08-03_17-39-39.png" alt="智能助手入口标注" width="860" />
51
+ </p>
52
+
53
+ DeepSeek API Key 在设置页配置(按访客隔离):
54
+
55
+ <p align="center">
56
+ <img src="docs/screenshots/ai-settings.png" alt="AI 设置" width="720" />
57
+ </p>
58
+
59
+ ### 帮写
60
+
61
+ 顶栏 **帮写** 进入全屏工作台:左 AI、右 Markdown Diff,按段接受 / 拒绝后再「完成并写回」。改稿前可查手册 skill、读工作稿,避免盲改。
62
+
63
+ <p align="center">
64
+ <img src="image/mdocs帮写主页.png" alt="帮写工作台" width="860" />
65
+ </p>
32
66
 
33
- Reuse of the `agent-demo` logger design is permitted because it is the
34
- author's own demo project.
67
+ ### Agent / CLI
35
68
 
36
- The **Meta2d / Vditor flow** matches `markdown-docs`: `useFlowRenderer`,
37
- `registerPens`, fenced `` ```meta2 `` blocks with inline JSON, **wysiwyg**
38
- mode (not IR), SVG preview in the preview half of each block, and
39
- `window.vditorInstance` for `getValue` / `setValue` when editing or deleting
40
- blocks.
69
+ Agent 准备 CLI Token 后,可用 Skills 读写知识库(不必背完整命令,粘贴文章 URL 即可)。
41
70
 
42
- ## Diagrams (Meta2d in Markdown)
71
+ <p align="center">
72
+ <img src="docs/screenshots/mdocs-cli.png" alt="mdocs-cli" width="720" />
73
+ </p>
43
74
 
44
- Diagrams live in the `.md` source as fenced blocks:
75
+ 详见:[Agent 开发闭环](https://xuhuafeifei.github.io/mdocs-site/docs/usage/agent-dev-loop.html) · [CLI Token](https://xuhuafeifei.github.io/mdocs-site/docs/usage/cli-token.html)
45
76
 
46
- ````markdown
47
- ```meta2
48
- { "pens": [ ] }
77
+ ### 编辑、域与协作
78
+
79
+ 斜杠菜单插入 Meta2d / Markmap 等;域管理、评论、收藏等能力齐全。
80
+
81
+ <p align="center">
82
+ <img src="docs/screenshots/slash-menu.png" alt="斜杠菜单" width="420" />
83
+ <img src="docs/screenshots/domain-manager.png" alt="域管理" width="420" />
84
+ </p>
85
+
86
+ <p align="center">
87
+ <img src="docs/screenshots/doc-tree.png" alt="文档树" width="280" />
88
+ <img src="docs/screenshots/comments.png" alt="评论" width="560" />
89
+ </p>
90
+
91
+ ## 从源码开发
92
+
93
+ ```bash
94
+ git clone https://github.com/xuhuafeifei/mdocs.git
95
+ cd mdocs
96
+ pnpm install
97
+ pnpm dev # API :4000 + Vite :5173(代理 /api)
49
98
  ```
50
- ````
51
99
 
52
- The editor renders them as SVG (via `canvas2svg` + Meta2d, same approach as
53
- `markdown-docs`). Saving the modal rewrites that JSON in the document with
54
- `Vditor#setValue`. Use the toolbar **Insert diagram** (or double-click a
55
- diagram). Switch **edit-mode** / **both** in the Vditor toolbar for source vs
56
- wysiwyg. Large documents: API JSON body limit is 32&nbsp;MiB.
100
+ ```bash
101
+ pnpm build && pnpm start # 生产:同端口提供静态资源与 API
102
+ pnpm test
103
+ pnpm typecheck
104
+ pnpm mdocs visitor list # 管理 CLI(开发用 tsx 入口)
105
+ ```
57
106
 
58
- ## Layout
107
+ 仓库布局:
59
108
 
60
109
  ```
61
110
  src/
62
- server/ Node back-end
63
- web/ Vite React front-end
64
- shared/ Cross-cutting types and schemas
111
+ server/ Express API、Agent、文档/域服务、CLI
112
+ web/ Vite + React 前端
113
+ shared/ 两侧共用类型与路径工具
65
114
  ```
66
115
 
67
- Runtime data lives under `~/.mdocs/`:
116
+ ## 运行时数据
117
+
118
+ 默认目录 `~/.mdocs/`(可用 `MDOCS_DATA_DIR` 覆盖):
68
119
 
69
120
  ```
70
121
  ~/.mdocs/
71
- data.sqlite
72
- files/
73
- docs/
74
- assets/
122
+ sqlite/data.sqlite
123
+ files/docs/ # 文档内容
124
+ files/assets/ # 附件
75
125
  logs/
76
126
  ```
77
127
 
78
- `domain_id` is a logical grouping inside SQLite and does not appear in file
79
- paths. Moving a document between domains only updates the database.
128
+ `domain_id` 只存在于 SQLite,**不会**出现在文件路径里。
80
129
 
81
- ## Development
130
+ ## 访客身份与迁移
82
131
 
83
- ```bash
84
- pnpm install
85
- pnpm dev:server # http://localhost:4000
86
- pnpm dev:web # http://localhost:5173, proxies /api
87
- ```
132
+ 首次访问输入昵称 → 获得 `visitor_id` + 高熵 token;浏览器存明文,服务端只存 `SHA-256(token)`,请求头 `x-visitor-token`。
88
133
 
89
- ## Build and run
134
+ 清缓存后重新注册可用迁移合并身份:
90
135
 
91
136
  ```bash
92
- pnpm build
93
- pnpm start # serves web static files and /api on one port
137
+ mdocs visitor migrate --from Alice --to Bob --dry-run
138
+ mdocs visitor migrate --from Alice --to Bob --confirm
94
139
  ```
95
140
 
96
- ## Visitor identity
97
-
98
- On first visit the user enters a nickname. The server issues a
99
- `visitor_id` (UUID) and a high-entropy `visitor_token`. The browser keeps
100
- the raw token; the server only stores `SHA-256(token)`. Each request
101
- sends the raw token in an `x-visitor-token` header; the server hashes it
102
- and looks up the visitor.
141
+ ## 相关链接
103
142
 
104
- ## Visitor migration
143
+ | | |
144
+ |--|--|
145
+ | 产品文档 | https://xuhuafeifei.github.io/mdocs-site/ |
146
+ | 文档源码站 | https://github.com/xuhuafeifei/mdocs-site |
147
+ | CLI / Skills | https://github.com/xuhuafeifei/mdocs-cli |
148
+ | 问题反馈 | https://github.com/xuhuafeifei/mdocs/issues |
105
149
 
106
- If the browser cache is cleared a user will register a new visitor. An
107
- administrator can merge the old identity into the new one:
150
+ 截图:[`image/`](./image/) 为最新实拍;[`docs/screenshots/`](./docs/screenshots/) 另有站点素材补充。
108
151
 
109
- ```bash
110
- pnpm mdocs visitor migrate --from OLD_VISITOR_ID --to NEW_VISITOR_ID --dry-run
111
- pnpm mdocs visitor migrate --from OLD_VISITOR_ID --to NEW_VISITOR_ID --confirm
112
- ```
152
+ ## License
113
153
 
114
- The script backs up the SQLite file, runs inside a transaction, updates
115
- ownership, disables the old visitor, and appends an entry to
116
- `visitor_migrations` and `audit_logs`. Markdown files are never moved.
154
+ [MIT](./LICENSE)
@@ -1,13 +1,27 @@
1
1
  ---
2
2
  id: changelog
3
3
  name: "更新日志"
4
- description: "- **帮写(coding)**:编辑器顶栏 / 欢迎页入口进入全屏工作台;左 AI、右纯 Markdown;按段接受/拒绝提案后再写回(已有文进草稿,空白帮写可新建) - **帮写上下文**:每轮请求携带进场快照与当前工作稿;助手可「读取帮写工作稿」后再「设置帮写正文」,避免盲改 - **帮写会话**:独立于上手助手;按文档隔离(A / B 文各自历史);空白帮写写回成文后会话绑到新文档 -"
4
+ description: "- **首屏加速**:编辑器 / 设置 / 助手 / 帮写按需懒加载;Vite 拆分重型 vendor chunk,入口 JS 从约 6MB 降到约 134KB - **更快看到侧栏树**:启动时延后全文索引重建(默认约 15s,可用 `MDOCS_INDEX_INITIAL_DELAY_MS` 调整),减轻 HTML TTFB 被 CPU 拖慢 - **加载壳**:`index.html` 增加"
5
5
  keywords: []
6
6
  source: changelog.md
7
7
  ---
8
8
 
9
9
  # 更新日志
10
10
 
11
+ ## v0.8.18
12
+
13
+ - **首屏加速**:编辑器 / 设置 / 助手 / 帮写按需懒加载;Vite 拆分重型 vendor chunk,入口 JS 从约 6MB 降到约 134KB
14
+ - **更快看到侧栏树**:启动时延后全文索引重建(默认约 15s,可用 `MDOCS_INDEX_INITIAL_DELAY_MS` 调整),减轻 HTML TTFB 被 CPU 拖慢
15
+ - **加载壳**:`index.html` 增加「mdocs 加载中…」占位,减少白屏感
16
+
17
+ ## v0.8.17
18
+
19
+ - **AI 双模式定位明确**:智能助手(Ask)偏低交互——可答疑、搜文、结构操作,也能直接全文覆写;帮写(Coding)偏高交互——左聊右 Diff、按段接受、你拍板后才写回
20
+ - **智能助手:覆写选择卡**:有正文时请求写作,弹出三选一:直接覆写 / 打开帮写审阅 / 取消
21
+ - **智能助手:写后同步**:覆写成功后若当前打开该文档,自动触发拉取更新逻辑,刷新 headCommitId
22
+ - **帮写欢迎文案**:明确「精细改稿请用帮写」,不再说「不协助写作」
23
+ - **官网文档**:补充双模式 8 维度对比表,更新首页卖点
24
+
11
25
  ## v0.8.16
12
26
 
13
27
  - **帮写(coding)**:编辑器顶栏 / 欢迎页入口进入全屏工作台;左 AI、右纯 Markdown;按段接受/拒绝提案后再写回(已有文进草稿,空白帮写可新建)
@@ -17,7 +17,7 @@ source: index.md
17
17
 
18
18
  ## AI 与 Agent
19
19
 
20
- - [上手助手(AI)](./usage/onboarding-ai.md)——Ask 答疑 / 帮写改稿;共用 DeepSeek 配置
20
+ - [智能助手(AI)](./usage/onboarding-ai.md)——低交互覆写 vs 帮写高交互审阅
21
21
  - [Agent 开发闭环](./usage/agent-dev-loop.md)——CLI + Skills 接入 Cursor / Claude
22
22
  - [CLI Token](./usage/cli-token.md)——命令行与 Agent 身份令牌
23
23
 
@@ -2,7 +2,7 @@
2
2
  {
3
3
  "id": "changelog",
4
4
  "name": "更新日志",
5
- "description": "- **帮写(coding)**:编辑器顶栏 / 欢迎页入口进入全屏工作台;左 AI、右纯 Markdown;按段接受/拒绝提案后再写回(已有文进草稿,空白帮写可新建) - **帮写上下文**:每轮请求携带进场快照与当前工作稿;助手可「读取帮写工作稿」后再「设置帮写正文」,避免盲改 - **帮写会话**:独立于上手助手;按文档隔离(A / B 文各自历史);空白帮写写回成文后会话绑到新文档 -",
5
+ "description": "- **首屏加速**:编辑器 / 设置 / 助手 / 帮写按需懒加载;Vite 拆分重型 vendor chunk,入口 JS 从约 6MB 降到约 134KB - **更快看到侧栏树**:启动时延后全文索引重建(默认约 15s,可用 `MDOCS_INDEX_INITIAL_DELAY_MS` 调整),减轻 HTML TTFB 被 CPU 拖慢 - **加载壳**:`index.html` 增加",
6
6
  "keywords": [],
7
7
  "source": "changelog.md"
8
8
  },
@@ -155,8 +155,8 @@
155
155
  },
156
156
  {
157
157
  "id": "usage-onboarding-ai",
158
- "name": "上手助手(AI)",
159
- "description": "mdocs 内置两种 AI 能力,共用设置页里的 DeepSeek 配置:",
158
+ "name": "智能助手(AI)",
159
+ "description": "mdocs 内置 **两种 AI 能力模式**,共用设置页里的 DeepSeek 配置。",
160
160
  "keywords": [],
161
161
  "source": "usage/onboarding-ai.md"
162
162
  },
@@ -177,7 +177,7 @@
177
177
  {
178
178
  "id": "usage-settings",
179
179
  "name": "设置页面",
180
- "description": "设置页面是 mdocs 的集中配置中心:身份与密码、收藏与文章、域与成员模板、上手助手、草稿同步等都在这里。",
180
+ "description": "设置页面是 mdocs 的集中配置中心:身份与密码、收藏与文章、域与成员模板、智能助手、草稿同步等都在这里。",
181
181
  "keywords": [],
182
182
  "source": "usage/settings.md"
183
183
  },
@@ -10,13 +10,13 @@ source: usage/agent-dev-loop.md
10
10
 
11
11
  mdocs 不只给人在浏览器里写文档,也让 **外部 AI Agent**(Cursor、Claude Code、Codex 等)把知识库嵌进日常工作。
12
12
 
13
- 这和产品内的 [上手助手(AI)](./onboarding-ai.md) 是两条路:
13
+ 这和产品内的 [智能助手(AI)](./onboarding-ai.md) 是两条路:
14
14
 
15
- | | 上手助手 | Agent 开发闭环 |
15
+ | | 智能助手 | Agent 开发闭环 |
16
16
  |--|----------|----------------|
17
- | 在哪 | mdocs Web 浮层 | 你的 IDE / Agent 终端 |
18
- | 干什么 | 答「怎么用 mdocs」 | 读知识库、按契约开发、按需写回文档 |
19
- | 会不会改正文 | **不会**(不代写) | 会按你的指令经 CLI 读写文档 |
17
+ | 在哪 | mdocs Web 浮层 / 帮写 | 你的 IDE / Agent 终端 |
18
+ | 干什么 | 答疑、搜文、结构操作;精细改稿走「帮写」 | 读知识库、按契约开发、按需写回文档 |
19
+ | 会不会改正文 | 智能助手可有条件覆写;帮写需分段接受 | 会按你的指令经 CLI 读写文档 |
20
20
 
21
21
  ---
22
22
 
@@ -171,9 +171,9 @@ Agent 会按 **mdocs-dev** skill 工作:在项目根维护 **`.mdocs-docs/`
171
171
 
172
172
  ---
173
173
 
174
- ## 和上手助手的知识关系
174
+ ## 和智能助手的知识关系
175
175
 
176
176
  - **本站文档**是给人读的手册真源。
177
- - mdocs 上手 Agent 构建时会把本站手册打成包内 Skills。
177
+ - mdocs 智能助手构建时会把本站手册打成包内 Skills。
178
178
  - 因此:改好本站使用说明,既服务人类读者,也服务产品内 AI。
179
179
 
@@ -1,65 +1,134 @@
1
1
  ---
2
2
  id: usage-onboarding-ai
3
- name: "上手助手(AI)"
4
- description: "mdocs 内置两种 AI 能力,共用设置页里的 DeepSeek 配置:"
3
+ name: "智能助手(AI)"
4
+ description: "mdocs 内置 **两种 AI 能力模式**,共用设置页里的 DeepSeek 配置。"
5
5
  keywords: []
6
6
  source: usage/onboarding-ai.md
7
7
  ---
8
8
 
9
- # 上手助手(AI)
9
+ # 智能助手(AI)
10
10
 
11
- mdocs 内置两种 AI 能力,共用设置页里的 DeepSeek 配置:
11
+ mdocs 内置 **两种 AI 能力模式**,共用设置页里的 DeepSeek 配置。
12
12
 
13
- | 模式 | 入口 | 做什么 |
14
- |------|------|--------|
15
- | **上手助手(Ask)** | 左下角悬浮球 | 答疑 + 账号内结构操作(搜文、列树、读文、建空文档/文件夹等)。**不会**代写或改正文 |
16
- | **帮写(Coding)** | 编辑器顶栏「帮写」/ 欢迎页「AI 帮写」 | 全屏工作台起草或改稿;右侧是纯 Markdown,按段接受后再写回 |
13
+ **最大区别是用户交互度:**
14
+
15
+ | | 🤖 智能助手 | ✍️ 帮写(Coding) |
16
+ |--|-------------|-------------------|
17
+ | **交互度** | **低**:以结果为导向,正文侧偏 **一次覆写**(空文可直写;有正文需你点确认或改走帮写) | **高**:以过程为导向,必须和你 **交互审阅**——分段提案、接受/拒绝,你拍板后才写回 |
18
+ | **你在干什么** | 提需求 →(必要时确认)→ 看结果 | 提需求 → 看 Diff → 逐段/整批决定 → 完成并写回 |
19
+
20
+ 其他差异是为此服务的:
21
+
22
+ | 对比维度 | 智能助手(Ask / Normal) | 帮写(Coding) |
23
+ |---------|--------------------------|----------------|
24
+ | **入口** | 左下角悬浮球(可拖动) | 编辑器顶栏「帮写」/ 欢迎页「AI 帮写」 |
25
+ | **UI** | 小浮层 | 全屏工作台(左对话、右 Markdown Diff) |
26
+ | **写回时机** | 确认后直接写服务端(覆写) | 在缓冲区改到满意,点「完成并写回」才进本地草稿 |
27
+ | **能力侧重** | 答疑、搜文、建空文档/文件夹、找位置、全文一键生成/重写 | 起草、改稿、润色、续写,精细控制每一段 |
28
+ | **会话** | 全局历史(不绑文档) | 按文档隔离 |
29
+ | **存储** | `tenant/<id>/agent/session/` | `tenant/<id>/agent/coding-session/` |
30
+
31
+ **一句话:** 要快、愿意一次覆写 → 智能助手;要和 AI 来回改、段段把关 → 帮写。
17
32
 
18
33
  若你要用 Cursor / Claude 等**外部 Agent** 读写知识库、落开发契约,见 [Agent 开发闭环](./agent-dev-loop.md)。
19
34
 
20
- ## 入口(上手助手)
35
+ ---
21
36
 
22
- 左下角有圆形 **上手助手** 悬浮按钮(不占用正文区)。点击后打开浮层 **「mdocs 智能助手」**,主编辑区仍保持打开,可边问边写。可**按住拖动**入口到任意位置(本地记住);挪过之后会出现「重置位置」。
37
+ ## 智能助手(Ask / Normal)
23
38
 
24
- ![上手助手入口与聊天浮层](./onboarding-ai/entry.png)
39
+ 左下角圆形 **智能助手** 入口(可拖动)。点击打开浮层 **「mdocs 智能助手」**,主编辑区仍保持打开。按住拖动可改位置(本地记住);挪过之后会出现「重置位置」。
25
40
 
26
- 浮层内:
41
+ ![智能助手入口(可拖动)与聊天浮层](./onboarding-ai/entry.png)
27
42
 
43
+ 浮层开场会说明分工:**答疑用智能助手**(可搜文、建空文档、帮你找位置);**写 / 精细改正文请用顶栏「帮写」**。
44
+
45
+ 浮层内:
28
46
  - 顶部:**+** 新建会话、历史列表、关闭
29
- - 中间:对话与指引内容(可含步骤、表格、工具结果折叠块等);回复中的代码块可一键复制
47
+ - 中间:问候语、快捷提问(如「如何发布文档?」「草稿是什么?」「如何创建域?」)与对话内容
30
48
  - 底部输入框:占位「把你的问题告诉我…」
31
49
  - 页脚提示:内容由 AI 生成,仅供参考
32
50
 
33
- ## 帮写(Coding)
51
+ ### 可以做什么
34
52
 
35
- 需要代写、润色或改某一篇正文时,用 **帮写**,不要用上手助手浮层。
53
+ 直接问,例如:
54
+ - 如何发布文档?草稿是什么?
55
+ - 如何创建域?权限怎么设置?
56
+ - 帮我搜索 / 列出某域文档,并打开其中一篇说明要点
57
+ - 帮我创建一个空文档「XXX」
58
+ - 这篇文档几乎是空的,帮我写个大纲并直接写好
59
+
60
+ ### 覆写机制(有正文时)
61
+
62
+ 当文档已有实质内容,智能助手不会静默改写。你若要求覆写,助手会弹出**选择卡**,三选一:
63
+ 1. **直接覆写** → 同意后线性写入服务端(带版本冲突校验)
64
+ 2. **打开帮写审阅** → 跳帮写模式,先在右侧看提案再决定
65
+ 3. **取消** → 不写
66
+
67
+ ### 明确不会做
36
68
 
37
- 1. 打开一篇文档(或欢迎页点「AI 帮写」从空白开始)
38
- 2. 点顶栏 **帮写**(带 DeepSeek 标志)进入全屏层:左侧对话,右侧 Markdown
39
- 3. 描述要写/改的内容;助手会先读当前工作稿与进场快照,再提交完整 Markdown 提案
40
- 4. 右侧按变更段 **接受 / 拒绝**;也可继续手改
41
- 5. **完成并写回**:已有文档写入本地草稿(需你再发布);空白帮写则创建新文档
69
+ - 静默改写有实质正文的文档(必须经你确认或走帮写)
70
+ - 越权读取你无权查看的文档(与网页端同一套权限)
71
+ - 精细改稿 / 逐段审阅(请用顶栏 **帮写**)
72
+
73
+ ---
42
74
 
43
- 会话说明:
75
+ ## 帮写(Coding 模式)
44
76
 
45
- - 帮写会话与上手助手**分开存放**(`agent/coding-session/`)
77
+ 需要和 AI **高交互**地改正文(逐段看 Diff、接受/拒绝)时用 **帮写**。智能助手偏覆写结果;帮写偏过程协作。
78
+
79
+ ### 入口
80
+
81
+ 打开一篇文档后,在编辑器**顶栏工具条右侧**(发布 / 删除附近)点击 **帮写**(带星标图标)进入全屏工作台。欢迎页也可点「AI 帮写」从空白开始。
82
+
83
+ ![文档顶栏「帮写」入口](./onboarding-ai/ai-write-entry.png)
84
+
85
+ ### 工作流
86
+
87
+ 1. 通过顶栏 **帮写**(或欢迎页「AI 帮写」)进入全屏层:左侧对话,右侧 Markdown
88
+ 2. 描述要写/改的内容;助手会先读当前工作稿与进场快照,再提交完整 Markdown 提案
89
+ 3. 右侧按变更段 **接受 / 拒绝**;也可继续手改
90
+ 4. **完成并写回**:已有文档写入本地草稿(需你再发布);空白帮写则创建新文档
91
+
92
+ ### 工作台界面
93
+
94
+ ![帮写全屏:左对话、右 Diff 审阅](./onboarding-ai/ai-write-workbench.png)
95
+
96
+ | 区域 | 说明 |
97
+ |------|------|
98
+ | **顶栏** | 文档名;**取消**退出;**完成并写回**把已接受内容写回(已有文进本地草稿) |
99
+ | **左侧 · 对话** | 说明要写/改什么;助手可「读取帮写工作稿」再「设置帮写正文」更新提案;**+** / 历史管理会话 |
100
+ | **右侧 · 提案** | 红删绿增的分段 Diff;可 **全部接受 / 全部拒绝**,或逐段操作;也可切 **纯编辑** 手改;底部可在变更间跳转 |
101
+
102
+ ### 核心设计:高交互审阅
103
+
104
+ 帮写的核心不是「更能写」,而是 **必须和你交互**:
105
+ - AI 吐出的是**完整 Markdown 提案**,不是直接改文件
106
+ - 前端 diff 计算后**按段高亮**,每段你可独立「接受」或「拒绝」
107
+ - 接受的段落合并进「当前稿」,剩余可继续手改或再次 AI 续写
108
+ - 全程**不碰服务端**,直到你点「完成并写回」才写入本地草稿
109
+
110
+ ### 会话说明
111
+
112
+ - 帮写会话与智能助手**完全隔离**,互不干扰
46
113
  - **按文档隔离**:文章 A 的历史看不到文章 B
47
114
  - 左侧同样有 **+** / 历史;历史只回放对话文字,不恢复右侧稿
48
115
  - 从空白帮写写回成文后,当前对话会绑到新文档,下次打开该文帮写可续聊
49
116
 
117
+ ---
118
+
50
119
  ## 开始使用前:配置模型
51
120
 
52
121
  1. 打开 **设置 → AI**(侧栏底部访客信息进入设置)
53
122
  2. 选择模型:`deepseek-v4-flash` 或 `deepseek-v4-pro`
54
123
  3. 填写你的 DeepSeek API Key 并保存
55
124
 
56
- ![设置 → AI:上手助手模型配置](./onboarding-ai/ai-settings.png)
125
+ ![设置 → AI:智能助手模型配置](./onboarding-ai/ai-settings.png)
57
126
 
58
127
  未配置 Key 时,入口可用但无法发送消息,浮层 / 帮写会提示去设置页配置。
59
128
 
60
129
  每人一份配置,仅本人可用;Key 在服务端按访客隔离存储,不会出现在别的访客界面上。配置页可查看配置名称、模型、脱敏后的 Key 与配置 ID;需要改时可点 **编辑**。
61
130
 
62
- ## 怎么问(上手助手)
131
+ ## 怎么问(智能助手)
63
132
 
64
133
  可以直接问,例如:
65
134
 
@@ -71,7 +140,7 @@ mdocs 内置两种 AI 能力,共用设置页里的 DeepSeek 配置:
71
140
 
72
141
  助手会按需阅读 [mdocs 用户手册](https://xuhuafeifei.github.io/mdocs-site/) 相关章节,也可在你有权阅读的范围内读取知识库文档。工具结果(搜索表、域树、读文预览等)会出现在对话时间线中,**默认折叠**,展开可查看;历史会话重开后通常只保留文字、不再回放这些工具块。答完后通常会附带一两个可继续追问的示例。
73
142
 
74
- ## 会话(上手助手)
143
+ ## 会话(智能助手)
75
144
 
76
145
  - 同一访客的对话会保存在数据目录 `tenant/<访客ID>/agent/session/` 下,刷新或重开浮层仍可续聊。
77
146
  - 浮层标题栏 **「+」**:新建空会话并切换过去。
@@ -79,11 +148,11 @@ mdocs 内置两种 AI 能力,共用设置页里的 DeepSeek 配置:
79
148
  - 会话标题取自**第一条用户消息**(过长会截断),不是模型摘要。
80
149
  - 删除、重命名、按天数自动清理尚未提供。
81
150
 
82
- ## 明确不会做(上手助手)
151
+ ## 明确不会做(智能助手)
83
152
 
84
- - 代写、润色、按选区改文档正文(请改用 **帮写**)
153
+ - 静默改写有实质正文的文档(必须经你弹出选择卡确认)
85
154
  - 越权读取你无权查看的文档(与网页端同一套权限)
86
- - 静默替你发布或改权限档(结构操作会走工具;写作类请求会拒绝并引导去帮写)
155
+ - 静默替你发布或改权限档(结构操作会走工具;写作类请求会根据上下文决定直写或弹选择卡)
87
156
 
88
- 若你在上手助手里要求写作,助手会拒绝,并提示打开 **帮写**。
157
+ 若你在智能助手里要求写作,助手会根据文档状态决定:空文直接覆写,有正文则弹出选择卡。
89
158
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  id: usage-settings
3
3
  name: "设置页面"
4
- description: "设置页面是 mdocs 的集中配置中心:身份与密码、收藏与文章、域与成员模板、上手助手、草稿同步等都在这里。"
4
+ description: "设置页面是 mdocs 的集中配置中心:身份与密码、收藏与文章、域与成员模板、智能助手、草稿同步等都在这里。"
5
5
  keywords: []
6
6
  source: usage/settings.md
7
7
  ---
@@ -10,7 +10,7 @@ source: usage/settings.md
10
10
 
11
11
  ## 功能概述
12
12
 
13
- 设置页面是 mdocs 的集中配置中心:身份与密码、收藏与文章、域与成员模板、上手助手、草稿同步等都在这里。
13
+ 设置页面是 mdocs 的集中配置中心:身份与密码、收藏与文章、域与成员模板、智能助手、草稿同步等都在这里。
14
14
 
15
15
  ## 入口
16
16
 
@@ -33,7 +33,7 @@ source: usage/settings.md
33
33
  | [我的文章](./my-documents.md) | 自己创建的文档、邀请成员、打开 |
34
34
  | [域管理](./domain-members.md) | 创建 / 筛选 / 重命名 / 改类型 / 删除域;受限域成员 |
35
35
  | [域成员模板](./domain-members.md) | 可复用的访客名单 |
36
- | [AI](./onboarding-ai.md) | 上手助手的 DeepSeek 配置 |
36
+ | [AI](./onboarding-ai.md) | 智能助手与帮写的 DeepSeek 配置 |
37
37
  | [保存与发布](./drafts.md) | 本地快照、自动同步、未发布草稿 |
38
38
 
39
39
  ---
@@ -76,7 +76,7 @@ Token / Cookie 丢失时的自助找回;引入登录密码后已边缘化。
76
76
  | 我的收藏 | [收藏功能](./bookmarks.md) |
77
77
  | 我的文章 | [我的文章](./my-documents.md) |
78
78
  | 域管理 / 域成员模板 | [受限域成员与名单模板](./domain-members.md) |
79
- | AI | [上手助手(AI)](./onboarding-ai.md) |
79
+ | AI | [智能助手(AI)](./onboarding-ai.md) |
80
80
  | 保存与发布 | [草稿与同步](./drafts.md) |
81
81
 
82
82
  ---
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Ask 覆写判空:以纯文本判断「几乎空」。
3
+ * 约定:去空白无正文,或仅一行标题。
4
+ */
5
+ export function isAlmostEmptyDocumentText(plainText) {
6
+ const trimmed = plainText.replace(/\u00a0/g, " ").trim();
7
+ if (!trimmed)
8
+ return true;
9
+ const lines = trimmed
10
+ .split(/\r?\n/)
11
+ .map((l) => l.trim())
12
+ .filter((l) => l.length > 0);
13
+ return lines.length <= 1;
14
+ }
15
+ //# sourceMappingURL=almost-empty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"almost-empty.js","sourceRoot":"","sources":["../../../../src/server/agent/Agent/almost-empty.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,SAAiB;IACzD,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACzD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,KAAK,GAAG,OAAO;SAClB,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE/B,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { isAlmostEmptyDocumentText } from "./almost-empty.js";
3
+ describe("isAlmostEmptyDocumentText", () => {
4
+ it("empty / whitespace", () => {
5
+ expect(isAlmostEmptyDocumentText("")).toBe(true);
6
+ expect(isAlmostEmptyDocumentText(" \n\t ")).toBe(true);
7
+ });
8
+ it("single title line", () => {
9
+ expect(isAlmostEmptyDocumentText("# 周报")).toBe(true);
10
+ expect(isAlmostEmptyDocumentText("周报")).toBe(true);
11
+ });
12
+ it("title plus blank lines only", () => {
13
+ expect(isAlmostEmptyDocumentText("# 周报\n\n\n")).toBe(true);
14
+ });
15
+ it("has real body", () => {
16
+ expect(isAlmostEmptyDocumentText("# 周报\n\n今天做了三件事。")).toBe(false);
17
+ expect(isAlmostEmptyDocumentText("第一段\n第二段")).toBe(false);
18
+ });
19
+ });
20
+ //# sourceMappingURL=almost-empty.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"almost-empty.test.js","sourceRoot":"","sources":["../../../../src/server/agent/Agent/almost-empty.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC3B,MAAM,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;QACvB,MAAM,CAAC,yBAAyB,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClE,MAAM,CAAC,yBAAyB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}