yuque-ai-mcp 2.7.5 → 2.7.8

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 (152) hide show
  1. package/README.md +20 -11
  2. package/README_CN.md +20 -11
  3. package/SKILL.md +3 -2
  4. package/dist/board/create-board.js +2 -2
  5. package/dist/board/create-board.js.map +1 -1
  6. package/dist/common/api-client.js +8 -1
  7. package/dist/common/api-client.js.map +1 -1
  8. package/dist/common/config.d.ts +27 -1
  9. package/dist/common/config.js +10 -7
  10. package/dist/common/config.js.map +1 -1
  11. package/dist/common/diff.d.ts +12 -0
  12. package/dist/common/diff.js +46 -0
  13. package/dist/common/diff.js.map +1 -0
  14. package/dist/common/export-common.d.ts +2 -2
  15. package/dist/common/export-common.js +4 -4
  16. package/dist/common/export-common.js.map +1 -1
  17. package/dist/common/format.d.ts +45 -0
  18. package/dist/common/format.js +22 -0
  19. package/dist/common/format.js.map +1 -1
  20. package/dist/common/html-cleaner.d.ts +18 -0
  21. package/dist/common/html-cleaner.js +95 -0
  22. package/dist/common/html-cleaner.js.map +1 -0
  23. package/dist/common/toc-cache.d.ts +8 -24
  24. package/dist/common/toc-cache.js +15 -75
  25. package/dist/common/toc-cache.js.map +1 -1
  26. package/dist/common/toc-ops.d.ts +108 -0
  27. package/dist/common/toc-ops.js +387 -0
  28. package/dist/common/toc-ops.js.map +1 -0
  29. package/dist/common/validate.d.ts +2 -0
  30. package/dist/common/validate.js +8 -0
  31. package/dist/common/validate.js.map +1 -1
  32. package/dist/crawler/save.js +1 -1
  33. package/dist/crawler/save.js.map +1 -1
  34. package/dist/crawler/schedule.js +1 -1
  35. package/dist/crawler/schedule.js.map +1 -1
  36. package/dist/doc/batch-get-docs.js +13 -10
  37. package/dist/doc/batch-get-docs.js.map +1 -1
  38. package/dist/doc/copy-doc.d.ts +3 -4
  39. package/dist/doc/copy-doc.js +26 -135
  40. package/dist/doc/copy-doc.js.map +1 -1
  41. package/dist/doc/create-doc.js +9 -30
  42. package/dist/doc/create-doc.js.map +1 -1
  43. package/dist/doc/delete-doc.js +2 -2
  44. package/dist/doc/delete-doc.js.map +1 -1
  45. package/dist/doc/diff-doc.js +5 -45
  46. package/dist/doc/diff-doc.js.map +1 -1
  47. package/dist/doc/embed-url.js +5 -0
  48. package/dist/doc/embed-url.js.map +1 -1
  49. package/dist/doc/export-doc.d.ts +5 -5
  50. package/dist/doc/export-doc.js +18 -53
  51. package/dist/doc/export-doc.js.map +1 -1
  52. package/dist/doc/export-resources.d.ts +15 -0
  53. package/dist/doc/export-resources.js +114 -0
  54. package/dist/doc/export-resources.js.map +1 -0
  55. package/dist/doc/get-doc.js +6 -2
  56. package/dist/doc/get-doc.js.map +1 -1
  57. package/dist/doc/import-file-utils.d.ts +19 -0
  58. package/dist/doc/import-file-utils.js +136 -1
  59. package/dist/doc/import-file-utils.js.map +1 -1
  60. package/dist/doc/import-file.d.ts +2 -6
  61. package/dist/doc/import-file.js +30 -166
  62. package/dist/doc/import-file.js.map +1 -1
  63. package/dist/doc/import-url.d.ts +3 -1
  64. package/dist/doc/import-url.js +21 -106
  65. package/dist/doc/import-url.js.map +1 -1
  66. package/dist/doc/index.d.ts +1 -0
  67. package/dist/doc/index.js +3 -1
  68. package/dist/doc/index.js.map +1 -1
  69. package/dist/doc/list-docs.js +5 -2
  70. package/dist/doc/list-docs.js.map +1 -1
  71. package/dist/doc/update-doc.js +2 -2
  72. package/dist/doc/update-doc.js.map +1 -1
  73. package/dist/doc/version-detail.js +4 -6
  74. package/dist/doc/version-detail.js.map +1 -1
  75. package/dist/doc/versions.js +4 -6
  76. package/dist/doc/versions.js.map +1 -1
  77. package/dist/group/delete-user.js +2 -2
  78. package/dist/group/delete-user.js.map +1 -1
  79. package/dist/group/list-users.js +7 -4
  80. package/dist/group/list-users.js.map +1 -1
  81. package/dist/group/update-user.js +3 -4
  82. package/dist/group/update-user.js.map +1 -1
  83. package/dist/kv/common.d.ts +1 -1
  84. package/dist/kv/common.js +1 -1
  85. package/dist/kv/delete.js +1 -1
  86. package/dist/kv/delete.js.map +1 -1
  87. package/dist/kv/get.js +1 -1
  88. package/dist/kv/get.js.map +1 -1
  89. package/dist/kv/set.js +1 -1
  90. package/dist/kv/set.js.map +1 -1
  91. package/dist/note/create-note.js +3 -2
  92. package/dist/note/create-note.js.map +1 -1
  93. package/dist/note/get-note.js +6 -0
  94. package/dist/note/get-note.js.map +1 -1
  95. package/dist/note/list-notes.js +1 -2
  96. package/dist/note/list-notes.js.map +1 -1
  97. package/dist/note/update-note.js +6 -0
  98. package/dist/note/update-note.js.map +1 -1
  99. package/dist/recycle/destroy-recycle.js +5 -0
  100. package/dist/recycle/destroy-recycle.js.map +1 -1
  101. package/dist/recycle/restore-recycle.js +5 -0
  102. package/dist/recycle/restore-recycle.js.map +1 -1
  103. package/dist/repo/batch-get-repos.js +14 -6
  104. package/dist/repo/batch-get-repos.js.map +1 -1
  105. package/dist/repo/copy-repo.js +8 -14
  106. package/dist/repo/copy-repo.js.map +1 -1
  107. package/dist/repo/create-repo.js +2 -2
  108. package/dist/repo/create-repo.js.map +1 -1
  109. package/dist/repo/delete-repo.js +3 -2
  110. package/dist/repo/delete-repo.js.map +1 -1
  111. package/dist/repo/export-repo.js +1 -1
  112. package/dist/repo/export-repo.js.map +1 -1
  113. package/dist/repo/get-repo.js +3 -2
  114. package/dist/repo/get-repo.js.map +1 -1
  115. package/dist/repo/list-repos.js +3 -2
  116. package/dist/repo/list-repos.js.map +1 -1
  117. package/dist/repo/update-repo.js +3 -2
  118. package/dist/repo/update-repo.js.map +1 -1
  119. package/dist/rss/dedup.d.ts +1 -1
  120. package/dist/rss/dedup.js +11 -8
  121. package/dist/rss/dedup.js.map +1 -1
  122. package/dist/rss/fetch-feed.js +6 -6
  123. package/dist/rss/fetch-feed.js.map +1 -1
  124. package/dist/rss/list-sources.js +2 -2
  125. package/dist/rss/list-sources.js.map +1 -1
  126. package/dist/rss/schedule.js +3 -3
  127. package/dist/rss/schedule.js.map +1 -1
  128. package/dist/rss/sources.d.ts +9 -17
  129. package/dist/rss/sources.js +8 -50
  130. package/dist/rss/sources.js.map +1 -1
  131. package/dist/search/rag-search-utils.d.ts +12 -4
  132. package/dist/search/rag-search-utils.js +33 -25
  133. package/dist/search/rag-search-utils.js.map +1 -1
  134. package/dist/search/rag-search.d.ts +1 -1
  135. package/dist/search/rag-search.js +28 -12
  136. package/dist/search/rag-search.js.map +1 -1
  137. package/dist/search/search.js +5 -4
  138. package/dist/search/search.js.map +1 -1
  139. package/dist/toc/batch-update.d.ts +1 -1
  140. package/dist/toc/batch-update.js +2 -184
  141. package/dist/toc/batch-update.js.map +1 -1
  142. package/dist/toc/get-toc.js +3 -2
  143. package/dist/toc/get-toc.js.map +1 -1
  144. package/dist/upload/upload-attachment.js +5 -0
  145. package/dist/upload/upload-attachment.js.map +1 -1
  146. package/dist/user/get-groups.js +5 -5
  147. package/dist/user/get-groups.js.map +1 -1
  148. package/dist/user/get-user.js +5 -0
  149. package/dist/user/get-user.js.map +1 -1
  150. package/dist/user/hello.js +2 -2
  151. package/dist/user/hello.js.map +1 -1
  152. package/package.json +2 -2
package/README.md CHANGED
@@ -4,13 +4,13 @@
4
4
 
5
5
  <h1 align="center">yuque-ai-mcp</h1>
6
6
  <p align="center">
7
- <b>61 fine-grained MCP tools for the full Yuque OpenAPI</b>
7
+ <b>62 fine-grained MCP tools for the full Yuque OpenAPI</b>
8
8
  </p>
9
9
 
10
10
  <p align="center">
11
- <a href="https://github.com/yehuoshun/yuque-ai-mcp"><img src="https://img.shields.io/badge/version-2.7.4-blue" alt="version" /></a>
11
+ <a href="https://github.com/yehuoshun/yuque-ai-mcp"><img src="https://img.shields.io/badge/version-2.7.8-blue" alt="version" /></a>
12
12
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="license" /></a>
13
- <a href="https://github.com/yehuoshun/yuque-ai-skills"><img src="https://img.shields.io/badge/skills-61%20guides-orange" alt="skills" /></a>
13
+ <a href="https://github.com/yehuoshun/yuque-ai-skills"><img src="https://img.shields.io/badge/skills-62%20guides-orange" alt="skills" /></a>
14
14
  </p>
15
15
 
16
16
  <p align="center">
@@ -19,15 +19,15 @@
19
19
 
20
20
  ---
21
21
 
22
- A full-featured Yuque (语雀) MCP Server built on the [Model Context Protocol](https://modelcontextprotocol.io/). Provides 61 fine-grained tools across 15 domains — every Yuque OpenAPI endpoint as a dedicated tool.
22
+ A full-featured Yuque (语雀) MCP Server built on the [Model Context Protocol](https://modelcontextprotocol.io/). Provides 62 fine-grained tools across 15 domains — every Yuque OpenAPI endpoint as a dedicated tool.
23
23
 
24
24
  ## Why
25
25
 
26
- - **19 → 61 tools** — 3x more coverage than the official [yuque-mcp-server](https://github.com/yuque/yuque-mcp-server)
26
+ - **19 → 62 tools** — 3x more coverage than the official [yuque-mcp-server](https://github.com/yuque/yuque-mcp-server)
27
27
  - **Dual transport** — stdio + HTTP SSE, shared registry, zero downtime on reload
28
28
  - **Modular architecture** — 15 domains, barrel exports, single source of truth registry
29
29
  - **Full API coverage** — group, recycle, upload, statistics, versions, boards — all the missing pieces
30
- - **[Skill layer](https://github.com/yehuoshun/yuque-ai-skills)** — 61 usage guides for AI agents
30
+ - **[Skill layer](https://github.com/yehuoshun/yuque-ai-skills)** — 62 usage guides for AI agents
31
31
 
32
32
  ## Table of Contents
33
33
 
@@ -61,7 +61,7 @@ npm run dev:http # HTTP SSE mode (http://localhost:3099)
61
61
 
62
62
  | Domain | Tools | Highlights |
63
63
  |--------|-------|------------|
64
- | **doc** | 14 | CRUD, versions, diff, batch get, import URL/file, cross-book copy, export |
64
+ | **doc** | 15 | CRUD, versions, diff, batch get, import URL/file, cross-book copy, export, resource download |
65
65
  | **repo** | 8 | CRUD, batch get, cross-book copy, full export (TOC-structure + INDEX/GRAPH) |
66
66
  | **toc** | 3 | Get, update, batch update (createTitle/appendNode/removeNode/moveNode) |
67
67
  | **search** | 2 | General search + RAG-enhanced search |
@@ -76,7 +76,7 @@ npm run dev:http # HTTP SSE mode (http://localhost:3099)
76
76
  | **rss** | 3 | Source list, fetch + dedup + save, schedule analysis |
77
77
  | **crawler** | 4 | Fetch, CSS extract, dedup save, schedule analysis |
78
78
  | **kv** | 4 | Get, set, delete, list — incremental sharding, 250KB/doc limit |
79
- | **Total** | **61** | |
79
+ | **Total** | **62** | |
80
80
 
81
81
  See [SKILL.md](SKILL.md) or [yuque-ai-skills](https://github.com/yehuoshun/yuque-ai-skills) for full tool documentation.
82
82
 
@@ -84,13 +84,13 @@ See [SKILL.md](SKILL.md) or [yuque-ai-skills](https://github.com/yehuoshun/yuque
84
84
 
85
85
  | Feature | Official yuque-mcp-server | yuque-ai-mcp |
86
86
  |---------|--------------------------|--------------|
87
- | Tools | 19 | **61** |
87
+ | Tools | 19 | **62** |
88
88
  | Granularity | Coarse | **Fine-grained** (1 tool / endpoint) |
89
89
  | Group, Recycle, Upload, Statistics | ❌ | ✅ |
90
90
  | Versions, Diff, Cross-book Copy | ❌ | ✅ |
91
91
  | Transport | stdio only | **stdio + HTTP SSE** |
92
92
  | Config | Env var | **config.json** (token + cookie) |
93
- | Skill Layer | ❌ | ✅ 61 guides |
93
+ | Skill Layer | ❌ | ✅ 62 guides |
94
94
 
95
95
  ## Architecture
96
96
 
@@ -116,6 +116,15 @@ server/src/
116
116
  "kv": { "enabled": true },
117
117
  "rss": {
118
118
  "enabled": true,
119
+ "sources": {
120
+ "cnblogs": {
121
+ "name": "博客园",
122
+ "slug_pattern": "/p/(\\d+)",
123
+ "feeds": {
124
+ "sitehome": { "label": "首页", "url": "https://feed.cnblogs.com/blog/sitehome/rss" }
125
+ }
126
+ }
127
+ },
119
128
  "namespaces": {
120
129
  "cnblogs": {
121
130
  "book_id": [80197497],
@@ -127,7 +136,7 @@ server/src/
127
136
  "crawler": {
128
137
  "enabled": true,
129
138
  "namespaces": {
130
- "cnblogs": {
139
+ "my-source": {
131
140
  "book_id": [80197497],
132
141
  "kv_slugs": ["80197550/274164064"],
133
142
  "schedule_slugs": []
package/README_CN.md CHANGED
@@ -1,14 +1,14 @@
1
1
  <p align="center">
2
2
  <h1 align="center">yuque-ai-mcp</h1>
3
3
  <p align="center">
4
- <b>61 个细粒度 MCP 工具,覆盖语雀 OpenAPI 全部能力</b>
4
+ <b>62 个细粒度 MCP 工具,覆盖语雀 OpenAPI 全部能力</b>
5
5
  </p>
6
6
  </p>
7
7
 
8
8
  <p align="center">
9
- <a href="https://github.com/yehuoshun/yuque-ai-mcp"><img src="https://img.shields.io/badge/版本-2.7.4-blue" alt="version" /></a>
9
+ <a href="https://github.com/yehuoshun/yuque-ai-mcp"><img src="https://img.shields.io/badge/版本-2.7.8-blue" alt="version" /></a>
10
10
  <a href="LICENSE"><img src="https://img.shields.io/badge/许可-MIT-green" alt="license" /></a>
11
- <a href="https://github.com/yehuoshun/yuque-ai-skills"><img src="https://img.shields.io/badge/skills-61%20指导-orange" alt="skills" /></a>
11
+ <a href="https://github.com/yehuoshun/yuque-ai-skills"><img src="https://img.shields.io/badge/skills-62%20指导-orange" alt="skills" /></a>
12
12
  </p>
13
13
 
14
14
  <p align="center">
@@ -17,15 +17,15 @@
17
17
 
18
18
  ---
19
19
 
20
- 基于 [Model Context Protocol](https://modelcontextprotocol.io/) 的语雀全功能 MCP Server。61 个工具,15 个域——每个语雀 OpenAPI 端点一个专用工具。
20
+ 基于 [Model Context Protocol](https://modelcontextprotocol.io/) 的语雀全功能 MCP Server。62 个工具,15 个域——每个语雀 OpenAPI 端点一个专用工具。
21
21
 
22
22
  ## 为什么选这个
23
23
 
24
- - **19 → 61 工具** — 比官方 [yuque-mcp-server](https://github.com/yuque/yuque-mcp-server) 多 3 倍覆盖
24
+ - **19 → 62 工具** — 比官方 [yuque-mcp-server](https://github.com/yuque/yuque-mcp-server) 多 3 倍覆盖
25
25
  - **双传输模式** — stdio + HTTP SSE,共享注册中心,修改无需重启
26
26
  - **模块化架构** — 15 个域,barrel export,唯一注册中心
27
27
  - **完整 API 覆盖** — 团队、回收站、上传、统计、版本、画板——补全官方缺失
28
- - **[Skill 层](https://github.com/yehuoshun/yuque-ai-skills)** — 61 个 AI Agent 使用指导
28
+ - **[Skill 层](https://github.com/yehuoshun/yuque-ai-skills)** — 62 个 AI Agent 使用指导
29
29
 
30
30
  ## 目录
31
31
 
@@ -60,7 +60,7 @@ npm run dev:http # HTTP SSE 模式 (http://localhost:3099)
60
60
 
61
61
  | 域 | 工具数 | 亮点 |
62
62
  |--------|-------|------------|
63
- | **doc** | 14 | CRUD、版本管理、Diff、批量获取、URL/文件导入、跨库复制、导出 |
63
+ | **doc** | 15 | CRUD、版本管理、Diff、批量获取、URL/文件导入、跨库复制、导出、资源下载 |
64
64
  | **repo** | 8 | CRUD、批量获取、跨库复制、全量导出(TOC 结构 + INDEX/GRAPH) |
65
65
  | **toc** | 3 | 获取、更新、批量更新(createTitle/appendNode/removeNode/moveNode) |
66
66
  | **search** | 2 | 通用搜索 + RAG 增强搜索 |
@@ -75,7 +75,7 @@ npm run dev:http # HTTP SSE 模式 (http://localhost:3099)
75
75
  | **rss** | 3 | 数据源列表、抓取+去重+写入、定时策略分析 |
76
76
  | **crawler** | 4 | 抓取、CSS 提取、去重写入、定时策略分析 |
77
77
  | **kv** | 4 | 增删查列——增量分片,单文档 250KB 上限 |
78
- | **合计** | **61** | |
78
+ | **合计** | **62** | |
79
79
 
80
80
  完整工具文档见 [SKILL.md](SKILL.md) 或 [yuque-ai-skills](https://github.com/yehuoshun/yuque-ai-skills)。
81
81
 
@@ -83,13 +83,13 @@ npm run dev:http # HTTP SSE 模式 (http://localhost:3099)
83
83
 
84
84
  | 功能 | 官方 yuque-mcp-server | yuque-ai-mcp |
85
85
  |---------|--------------------------|--------------|
86
- | 工具数 | 19 | **61** |
86
+ | 工具数 | 19 | **62** |
87
87
  | 粒度 | 粗粒度 | **细粒度**(1 端点 = 1 工具) |
88
88
  | 团队、回收站、上传、统计 | ❌ | ✅ |
89
89
  | 版本、Diff、跨库复制 | ❌ | ✅ |
90
90
  | 传输模式 | 仅 stdio | **stdio + HTTP SSE** |
91
91
  | 配置 | 环境变量 | **config.json**(token + cookie) |
92
- | Skill 层 | ❌ | ✅ 61 指导 |
92
+ | Skill 层 | ❌ | ✅ 62 指导 |
93
93
 
94
94
  ## 架构
95
95
 
@@ -115,6 +115,15 @@ server/src/
115
115
  "kv": { "enabled": true },
116
116
  "rss": {
117
117
  "enabled": true,
118
+ "sources": {
119
+ "cnblogs": {
120
+ "name": "博客园",
121
+ "slug_pattern": "/p/(\\d+)",
122
+ "feeds": {
123
+ "sitehome": { "label": "首页", "url": "https://feed.cnblogs.com/blog/sitehome/rss" }
124
+ }
125
+ }
126
+ },
118
127
  "namespaces": {
119
128
  "cnblogs": {
120
129
  "book_id": [80197497],
@@ -126,7 +135,7 @@ server/src/
126
135
  "crawler": {
127
136
  "enabled": true,
128
137
  "namespaces": {
129
- "cnblogs": {
138
+ "my-source": {
130
139
  "book_id": [80197497],
131
140
  "kv_slugs": ["80197550/274164064"],
132
141
  "schedule_slugs": []
package/SKILL.md CHANGED
@@ -38,7 +38,7 @@
38
38
  | `yuque_update_group_user` | 变更团队成员角色 |
39
39
  | `yuque_delete_group_user` | 删除团队成员 |
40
40
 
41
- ### doc(14 工具)
41
+ ### doc(15 工具)
42
42
  | 工具 | 说明 |
43
43
  |------|------|
44
44
  | `yuque_list_docs` | 获取知识库文档列表 |
@@ -51,7 +51,8 @@
51
51
  | `yuque_get_doc_version_detail` | 获取文档历史版本详情 |
52
52
  | `yuque_diff_doc_versions` | 对比两个版本的行级差异 |
53
53
  | `yuque_copy_doc` | 单文档跨库复制 |
54
- | `yuque_export_doc` | 导出单篇文档为 Markdown(含图片下载) |
54
+ | `yuque_export_doc` | 导出单篇文档为 Markdown 文件(不含资源下载,需调 yuque_export_resources) |
55
+ | `yuque_export_resources` | 下载文档中的图片/附件到本地目录,返回 URL→本地路径映射 |
55
56
  | `yuque_import_url` | 从网页 URL 导入文档 |
56
57
  | `yuque_import_file` | 从本地文件导入文档(direct/upload_assets/embed_assets) |
57
58
  | `yuque_embed_url` | 生成文档嵌入阅读器 URL |
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { apiPost } from "../common/api-client.js";
7
7
  import { handleApiCall } from "../common/format.js";
8
- import { requiredString } from "../common/validate.js";
8
+ import { check, requiredString } from "../common/validate.js";
9
9
  export const boardCreate = {
10
10
  name: "yuque_create_board",
11
11
  description: "Create a board resource (mindmap/flowchart/architecture diagram) in a document. POST /yfm/boards. 详见 references/api/board_api.md",
@@ -22,7 +22,7 @@ export const boardCreate = {
22
22
  },
23
23
  async handler(args) {
24
24
  // @validate
25
- const __v = requiredString(args?.dsl, "dsl");
25
+ const __v = check(requiredString(args?.type, "type"), requiredString(args?.dsl, "dsl"));
26
26
  if (__v)
27
27
  return __v;
28
28
  const docId = args?.doc_id;
@@ -1 +1 @@
1
- {"version":3,"file":"create-board.js","sourceRoot":"","sources":["../../src/board/create-board.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,kIAAkI;IAE/I,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;YACpF,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+CAA+C,EAAE;YACrF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gEAAgE,EAAE;YACvG,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2DAA2D,EAAE;YACjG,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sEAAsE,EAAE;SAC9H;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;KAC1B;IAED,KAAK,CAAC,OAAO,CAAC,IAAI;QAChB,YAAY;QACZ,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7C,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,EAAE,MAA4B,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,EAAE,GAAyB,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,EAAE,IAAc,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,EAAE,GAAa,CAAC;QAChC,MAAM,WAAW,GAAG,IAAI,EAAE,oBAA0C,CAAC;QAErE,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;YACnB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,0CAA0C,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC1H,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAA4B,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAC/E,IAAI,KAAK;YAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;QAClC,IAAI,GAAG;YAAE,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;QAC3B,IAAI,WAAW;YAAE,OAAO,CAAC,oBAAoB,GAAG,WAAW,CAAC;QAE5D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QACnE,OAAO,aAAa,CAAC,IAAI,EAAE,SAAgB,CAAC,CAAC;IAC/C,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"create-board.js","sourceRoot":"","sources":["../../src/board/create-board.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,CAAC,MAAM,WAAW,GAAY;IAClC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,kIAAkI;IAE/I,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2CAA2C,EAAE;YACpF,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+CAA+C,EAAE;YACrF,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gEAAgE,EAAE;YACvG,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,2DAA2D,EAAE;YACjG,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sEAAsE,EAAE;SAC9H;QACD,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;KAC1B;IAED,KAAK,CAAC,OAAO,CAAC,IAAI;QAChB,YAAY;QACZ,MAAM,GAAG,GAAG,KAAK,CACf,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAClC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CACjC,CAAC;QACF,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,EAAE,MAA4B,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,EAAE,GAAyB,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,EAAE,IAAc,CAAC;QAClC,MAAM,GAAG,GAAG,IAAI,EAAE,GAAa,CAAC;QAChC,MAAM,WAAW,GAAG,IAAI,EAAE,oBAA0C,CAAC;QAErE,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;YACnB,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,0CAA0C,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC1H,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAA4B,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAC/E,IAAI,KAAK;YAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;QAClC,IAAI,GAAG;YAAE,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC;QAC3B,IAAI,WAAW;YAAE,OAAO,CAAC,oBAAoB,GAAG,WAAW,CAAC;QAE5D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,aAAa,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;QACnE,OAAO,aAAa,CAAC,IAAI,EAAE,SAAgB,CAAC,CAAC;IAC/C,CAAC;CACF,CAAC"}
@@ -12,6 +12,8 @@ const cfg = loadConfig();
12
12
  const MAX_RETRIES = 3;
13
13
  /** 基延迟(ms) */
14
14
  const BASE_DELAY = 1000;
15
+ /** 单次请求超时(ms) */
16
+ const REQUEST_TIMEOUT = 30_000;
15
17
  /** 是否应该重试:网络异常、429、5xx */
16
18
  function shouldRetry(res) {
17
19
  if (!res)
@@ -24,8 +26,10 @@ function sleep(ms) {
24
26
  }
25
27
  /** 执行 fetch 并自动重试 */
26
28
  async function fetchWithRetry(url, options, context, attempt = 1) {
29
+ const controller = new AbortController();
30
+ const timer = setTimeout(() => controller.abort(), REQUEST_TIMEOUT);
27
31
  try {
28
- const res = await fetch(url, options);
32
+ const res = await fetch(url, { ...options, signal: controller.signal });
29
33
  if (shouldRetry(res) && attempt <= MAX_RETRIES) {
30
34
  const delay = BASE_DELAY * Math.pow(2, attempt - 1);
31
35
  // 重试日志仅在 DEBUG 环境变量设置时输出
@@ -46,6 +50,9 @@ async function fetchWithRetry(url, options, context, attempt = 1) {
46
50
  }
47
51
  throw err;
48
52
  }
53
+ finally {
54
+ clearTimeout(timer);
55
+ }
49
56
  }
50
57
  /** API 调用结果的类型 guard:检查是否是 MCP error */
51
58
  export function isErrorResult(result) {
@@ -1 +1 @@
1
- {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/common/api-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/common/api-client.ts"],"names":[],"mappings":"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"}
@@ -5,14 +5,38 @@
5
5
  *
6
6
  * slug 格式:`{book_id}/{doc_id}`,用 / 分割解析。
7
7
  * kv_slugs / schedule_slugs 均为数组,支持多文档。
8
+ *
9
+ * RSS 源定义在 config.json 的 rss.sources 中,不硬编码在代码里。
8
10
  */
9
11
  interface NamespaceConfig {
10
12
  book_id: number[];
11
13
  kv_slugs?: string[];
12
14
  schedule_slugs?: string[];
13
15
  }
16
+ /** RSS Feed 定义(config.json 中配置) */
17
+ export interface RssFeedDef {
18
+ label: string;
19
+ description?: string;
20
+ url?: string;
21
+ url_template?: string;
22
+ params_schema?: Record<string, {
23
+ type: "string" | "number";
24
+ description: string;
25
+ required?: boolean;
26
+ default?: string | number;
27
+ }>;
28
+ }
29
+ /** RSS 源定义(config.json 中配置) */
30
+ export interface RssSourceDef {
31
+ name: string;
32
+ description?: string;
33
+ feeds: Record<string, RssFeedDef>;
34
+ /** 从文章链接提取站点文章 ID 的正则,capture group 1 即为 slug。不配则 fallback 到 md5 */
35
+ slug_pattern?: string;
36
+ }
14
37
  interface RssConfig {
15
38
  enabled: boolean;
39
+ sources?: Record<string, RssSourceDef>;
16
40
  namespaces?: Record<string, NamespaceConfig>;
17
41
  }
18
42
  interface KvConfig {
@@ -32,7 +56,9 @@ interface Config {
32
56
  crawler?: CrawlerConfig;
33
57
  }
34
58
  export declare function loadConfig(): Config;
35
- /** 持久化 config 到文件 */
59
+ /** config 加载 RSS 源定义 */
60
+ export declare function loadRssSources(): Record<string, RssSourceDef>;
61
+ /** 持久化 config 到文件(记住首次加载路径,避免写到不同文件) */
36
62
  export declare function saveConfig(): void;
37
63
  /** 解析 slug:`{book_id}/{doc_id}` → { bookId, docId } */
38
64
  export declare function parseSlug(slug: string): {
@@ -5,6 +5,8 @@
5
5
  *
6
6
  * slug 格式:`{book_id}/{doc_id}`,用 / 分割解析。
7
7
  * kv_slugs / schedule_slugs 均为数组,支持多文档。
8
+ *
9
+ * RSS 源定义在 config.json 的 rss.sources 中,不硬编码在代码里。
8
10
  */
9
11
  import { readFileSync, writeFileSync, existsSync } from "fs";
10
12
  import { resolve, dirname } from "path";
@@ -13,31 +15,28 @@ import { homedir } from "os";
13
15
  const __dirname = dirname(fileURLToPath(import.meta.url));
14
16
  /** 查找 config 文件:--config 参数 → cwd → ~/.yuque-mcp → 开发路径 */
15
17
  function findConfigPath() {
16
- // 1. 命令行参数 --config /path/to/config.json
17
18
  const cliArg = process.argv.findIndex(a => a === "--config" || a === "-c");
18
19
  if (cliArg !== -1 && process.argv[cliArg + 1]) {
19
20
  return process.argv[cliArg + 1];
20
21
  }
21
- // 2. 当前工作目录
22
22
  const cwdPath = resolve(process.cwd(), "yuque-config.json");
23
23
  if (existsSync(cwdPath))
24
24
  return cwdPath;
25
- // 3. 用户目录
26
25
  const homePath = resolve(homedir(), ".yuque-mcp", "config.json");
27
26
  if (existsSync(homePath))
28
27
  return homePath;
29
- // 4. 开发模式(相对 dist/ 的路径)
30
28
  const devPath = resolve(__dirname, "../../../config/config.json");
31
29
  if (existsSync(devPath))
32
30
  return devPath;
33
- // 5. 包内默认
34
31
  return resolve(homedir(), ".yuque-mcp", "config.json");
35
32
  }
36
33
  let _config = null;
34
+ let _configPath = null;
37
35
  export function loadConfig() {
38
36
  if (_config)
39
37
  return _config;
40
38
  const configPath = findConfigPath();
39
+ _configPath = configPath;
41
40
  try {
42
41
  const raw = readFileSync(configPath, "utf-8");
43
42
  _config = JSON.parse(raw);
@@ -52,11 +51,15 @@ export function loadConfig() {
52
51
  _config.api_base = _config.api_base || "https://www.yuque.com/api/v2";
53
52
  return _config;
54
53
  }
55
- /** 持久化 config 到文件 */
54
+ /** config 加载 RSS 源定义 */
55
+ export function loadRssSources() {
56
+ return loadConfig().rss?.sources ?? {};
57
+ }
58
+ /** 持久化 config 到文件(记住首次加载路径,避免写到不同文件) */
56
59
  export function saveConfig() {
57
60
  if (!_config)
58
61
  return;
59
- const configPath = findConfigPath();
62
+ const configPath = _configPath || findConfigPath();
60
63
  writeFileSync(configPath, JSON.stringify(_config, null, 2) + "\n", "utf-8");
61
64
  }
62
65
  /** 解析 slug:`{book_id}/{doc_id}` → { bookId, docId } */
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/common/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/common/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * common/diff — 纯函数 LCS diff 算法
3
+ *
4
+ * 不依赖外部库,零依赖。
5
+ * 被 diff-doc.ts 等工具共用。
6
+ */
7
+ export interface DiffLine {
8
+ type: "added" | "removed" | "unchanged";
9
+ line: string;
10
+ }
11
+ /** 对两段文本做逐行 LCS diff,返回 diff 行列表 */
12
+ export declare function diffLines(oldText: string, newText: string): DiffLine[];
@@ -0,0 +1,46 @@
1
+ /**
2
+ * common/diff — 纯函数 LCS diff 算法
3
+ *
4
+ * 不依赖外部库,零依赖。
5
+ * 被 diff-doc.ts 等工具共用。
6
+ */
7
+ /** 对两段文本做逐行 LCS diff,返回 diff 行列表 */
8
+ export function diffLines(oldText, newText) {
9
+ const oldLines = oldText.split("\n");
10
+ const newLines = newText.split("\n");
11
+ // LCS 表
12
+ const m = oldLines.length;
13
+ const n = newLines.length;
14
+ const dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
15
+ for (let i = 1; i <= m; i++) {
16
+ for (let j = 1; j <= n; j++) {
17
+ if (oldLines[i - 1] === newLines[j - 1]) {
18
+ dp[i][j] = dp[i - 1][j - 1] + 1;
19
+ }
20
+ else {
21
+ dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
22
+ }
23
+ }
24
+ }
25
+ // 回溯
26
+ const result = [];
27
+ let i = m, j = n;
28
+ const temp = [];
29
+ while (i > 0 || j > 0) {
30
+ if (i > 0 && j > 0 && oldLines[i - 1] === newLines[j - 1]) {
31
+ temp.push({ type: "unchanged", line: oldLines[i - 1] });
32
+ i--;
33
+ j--;
34
+ }
35
+ else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {
36
+ temp.push({ type: "added", line: newLines[j - 1] });
37
+ j--;
38
+ }
39
+ else {
40
+ temp.push({ type: "removed", line: oldLines[i - 1] });
41
+ i--;
42
+ }
43
+ }
44
+ return temp.reverse();
45
+ }
46
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/common/diff.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,oCAAoC;AACpC,MAAM,UAAU,SAAS,CAAC,OAAe,EAAE,OAAe;IACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAErC,QAAQ;IACR,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC1B,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC1B,MAAM,EAAE,GAAe,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAErF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,IAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACxC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK;IACL,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACjB,MAAM,IAAI,GAAe,EAAE,CAAC;IAE5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YACxD,CAAC,EAAE,CAAC;YACJ,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YACpD,CAAC,EAAE,CAAC;QACN,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YACtD,CAAC,EAAE,CAAC;QACN,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;AACxB,CAAC"}
@@ -8,8 +8,8 @@ export interface ResourceRef {
8
8
  localPath: string;
9
9
  type: "image" | "attachment";
10
10
  }
11
- /** 从 body_html 中提取所有资源引用 */
12
- export declare function extractResources(bodyHtml: string, imagesDir: string, attachmentsDir: string): ResourceRef[];
11
+ /** 从 body_html 中提取所有资源引用。localPath 为相对于 outputDir 的路径(如 images/foo.png) */
12
+ export declare function extractResources(bodyHtml: string): ResourceRef[];
13
13
  export interface DownloadResult {
14
14
  url: string;
15
15
  localPath: string;
@@ -6,8 +6,8 @@
6
6
  import { writeFile } from "node:fs/promises";
7
7
  import { join } from "node:path";
8
8
  import { unescapeHtml } from "./text-utils.js";
9
- /** 从 body_html 中提取所有资源引用 */
10
- export function extractResources(bodyHtml, imagesDir, attachmentsDir) {
9
+ /** 从 body_html 中提取所有资源引用。localPath 为相对于 outputDir 的路径(如 images/foo.png) */
10
+ export function extractResources(bodyHtml) {
11
11
  const resources = [];
12
12
  const seen = new Set();
13
13
  // 提取 <img src="...">
@@ -19,7 +19,7 @@ export function extractResources(bodyHtml, imagesDir, attachmentsDir) {
19
19
  continue;
20
20
  seen.add(url);
21
21
  const name = urlToFilename(url);
22
- resources.push({ url, localPath: join(imagesDir, name), type: "image" });
22
+ resources.push({ url, localPath: join("images", name), type: "image" });
23
23
  }
24
24
  // 提取 Markdown 图片 ![](url)
25
25
  const mdImgRegex = /!\[.*?\]\(([^)]+)\)/g;
@@ -29,7 +29,7 @@ export function extractResources(bodyHtml, imagesDir, attachmentsDir) {
29
29
  continue;
30
30
  seen.add(url);
31
31
  const name = urlToFilename(url);
32
- resources.push({ url, localPath: join(imagesDir, name), type: "image" });
32
+ resources.push({ url, localPath: join("images", name), type: "image" });
33
33
  }
34
34
  return resources;
35
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"export-common.js","sourceRoot":"","sources":["../../src/common/export-common.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"export-common.js","sourceRoot":"","sources":["../../src/common/export-common.ts"],"names":[],"mappings":"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"}
@@ -112,6 +112,51 @@ interface ApiResponse<T> {
112
112
  data?: T;
113
113
  meta?: unknown;
114
114
  }
115
+ export declare function formatHello(data: ApiResponse<{
116
+ message: string;
117
+ }> | {
118
+ message: string;
119
+ }): {
120
+ message: string;
121
+ };
122
+ interface YuqueSearchResultRaw {
123
+ id: number;
124
+ type?: string;
125
+ title: string;
126
+ summary?: string;
127
+ url?: string;
128
+ info?: string;
129
+ target?: {
130
+ id: number;
131
+ slug?: string;
132
+ title?: string;
133
+ book_id?: number;
134
+ word_count?: number;
135
+ updated_at?: string;
136
+ content_updated_at?: string;
137
+ book?: {
138
+ id?: number;
139
+ name?: string;
140
+ slug?: string;
141
+ namespace?: string;
142
+ };
143
+ };
144
+ }
145
+ export declare function formatSearchResult(data: YuqueSearchResultRaw): {
146
+ id: number;
147
+ title: string;
148
+ summary: string;
149
+ url: string;
150
+ info: string;
151
+ doc_id: number;
152
+ slug: string;
153
+ book_id: number | undefined;
154
+ book_name: string;
155
+ book_slug: string;
156
+ namespace: string;
157
+ word_count: number | undefined;
158
+ updated_at: string;
159
+ };
115
160
  export declare function formatUser(data: ApiResponse<YuqueUserRaw> | YuqueUserRaw): {
116
161
  id: number;
117
162
  login: string;