yuque-ai-mcp 2.7.4

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 (316) hide show
  1. package/dist/board/create-board.d.ts +7 -0
  2. package/dist/board/create-board.js +50 -0
  3. package/dist/board/create-board.js.map +1 -0
  4. package/dist/board/get-board.d.ts +7 -0
  5. package/dist/board/get-board.js +44 -0
  6. package/dist/board/get-board.js.map +1 -0
  7. package/dist/board/index.d.ts +5 -0
  8. package/dist/board/index.js +8 -0
  9. package/dist/board/index.js.map +1 -0
  10. package/dist/board/update-board.d.ts +7 -0
  11. package/dist/board/update-board.js +65 -0
  12. package/dist/board/update-board.js.map +1 -0
  13. package/dist/cli-http.d.ts +2 -0
  14. package/dist/cli-http.js +16 -0
  15. package/dist/cli-http.js.map +1 -0
  16. package/dist/cli.d.ts +2 -0
  17. package/dist/cli.js +15 -0
  18. package/dist/cli.js.map +1 -0
  19. package/dist/common/api-client.d.ts +27 -0
  20. package/dist/common/api-client.js +198 -0
  21. package/dist/common/api-client.js.map +1 -0
  22. package/dist/common/config.d.ts +46 -0
  23. package/dist/common/config.js +86 -0
  24. package/dist/common/config.js.map +1 -0
  25. package/dist/common/copy-common.d.ts +8 -0
  26. package/dist/common/copy-common.js +13 -0
  27. package/dist/common/copy-common.js.map +1 -0
  28. package/dist/common/errors.d.ts +44 -0
  29. package/dist/common/errors.js +164 -0
  30. package/dist/common/errors.js.map +1 -0
  31. package/dist/common/export-common.d.ts +32 -0
  32. package/dist/common/export-common.js +125 -0
  33. package/dist/common/export-common.js.map +1 -0
  34. package/dist/common/format.d.ts +247 -0
  35. package/dist/common/format.js +199 -0
  36. package/dist/common/format.js.map +1 -0
  37. package/dist/common/register-tools.d.ts +29 -0
  38. package/dist/common/register-tools.js +89 -0
  39. package/dist/common/register-tools.js.map +1 -0
  40. package/dist/common/repo-capacity.d.ts +26 -0
  41. package/dist/common/repo-capacity.js +105 -0
  42. package/dist/common/repo-capacity.js.map +1 -0
  43. package/dist/common/schedule-common.d.ts +38 -0
  44. package/dist/common/schedule-common.js +111 -0
  45. package/dist/common/schedule-common.js.map +1 -0
  46. package/dist/common/text-utils.d.ts +11 -0
  47. package/dist/common/text-utils.js +29 -0
  48. package/dist/common/text-utils.js.map +1 -0
  49. package/dist/common/toc-cache.d.ts +30 -0
  50. package/dist/common/toc-cache.js +109 -0
  51. package/dist/common/toc-cache.js.map +1 -0
  52. package/dist/common/types.d.ts +17 -0
  53. package/dist/common/types.js +3 -0
  54. package/dist/common/types.js.map +1 -0
  55. package/dist/common/validate.d.ts +27 -0
  56. package/dist/common/validate.js +70 -0
  57. package/dist/common/validate.js.map +1 -0
  58. package/dist/common/web-request.d.ts +13 -0
  59. package/dist/common/web-request.js +53 -0
  60. package/dist/common/web-request.js.map +1 -0
  61. package/dist/crawler/extract.d.ts +19 -0
  62. package/dist/crawler/extract.js +220 -0
  63. package/dist/crawler/extract.js.map +1 -0
  64. package/dist/crawler/fetch.d.ts +8 -0
  65. package/dist/crawler/fetch.js +89 -0
  66. package/dist/crawler/fetch.js.map +1 -0
  67. package/dist/crawler/index.d.ts +6 -0
  68. package/dist/crawler/index.js +10 -0
  69. package/dist/crawler/index.js.map +1 -0
  70. package/dist/crawler/save.d.ts +11 -0
  71. package/dist/crawler/save.js +160 -0
  72. package/dist/crawler/save.js.map +1 -0
  73. package/dist/crawler/schedule.d.ts +12 -0
  74. package/dist/crawler/schedule.js +132 -0
  75. package/dist/crawler/schedule.js.map +1 -0
  76. package/dist/doc/batch-get-docs.d.ts +8 -0
  77. package/dist/doc/batch-get-docs.js +100 -0
  78. package/dist/doc/batch-get-docs.js.map +1 -0
  79. package/dist/doc/copy-doc.d.ts +10 -0
  80. package/dist/doc/copy-doc.js +238 -0
  81. package/dist/doc/copy-doc.js.map +1 -0
  82. package/dist/doc/create-doc.d.ts +11 -0
  83. package/dist/doc/create-doc.js +82 -0
  84. package/dist/doc/create-doc.js.map +1 -0
  85. package/dist/doc/delete-doc.d.ts +8 -0
  86. package/dist/doc/delete-doc.js +39 -0
  87. package/dist/doc/delete-doc.js.map +1 -0
  88. package/dist/doc/diff-doc.d.ts +8 -0
  89. package/dist/doc/diff-doc.js +190 -0
  90. package/dist/doc/diff-doc.js.map +1 -0
  91. package/dist/doc/embed-url.d.ts +10 -0
  92. package/dist/doc/embed-url.js +137 -0
  93. package/dist/doc/embed-url.js.map +1 -0
  94. package/dist/doc/export-doc.d.ts +10 -0
  95. package/dist/doc/export-doc.js +135 -0
  96. package/dist/doc/export-doc.js.map +1 -0
  97. package/dist/doc/get-doc.d.ts +8 -0
  98. package/dist/doc/get-doc.js +40 -0
  99. package/dist/doc/get-doc.js.map +1 -0
  100. package/dist/doc/import-file-utils.d.ts +37 -0
  101. package/dist/doc/import-file-utils.js +256 -0
  102. package/dist/doc/import-file-utils.js.map +1 -0
  103. package/dist/doc/import-file.d.ts +13 -0
  104. package/dist/doc/import-file.js +333 -0
  105. package/dist/doc/import-file.js.map +1 -0
  106. package/dist/doc/import-url.d.ts +7 -0
  107. package/dist/doc/import-url.js +245 -0
  108. package/dist/doc/import-url.js.map +1 -0
  109. package/dist/doc/index.d.ts +16 -0
  110. package/dist/doc/index.js +30 -0
  111. package/dist/doc/index.js.map +1 -0
  112. package/dist/doc/list-docs.d.ts +8 -0
  113. package/dist/doc/list-docs.js +44 -0
  114. package/dist/doc/list-docs.js.map +1 -0
  115. package/dist/doc/update-doc.d.ts +8 -0
  116. package/dist/doc/update-doc.js +50 -0
  117. package/dist/doc/update-doc.js.map +1 -0
  118. package/dist/doc/version-detail.d.ts +8 -0
  119. package/dist/doc/version-detail.js +34 -0
  120. package/dist/doc/version-detail.js.map +1 -0
  121. package/dist/doc/versions.d.ts +8 -0
  122. package/dist/doc/versions.js +34 -0
  123. package/dist/doc/versions.js.map +1 -0
  124. package/dist/group/delete-user.d.ts +8 -0
  125. package/dist/group/delete-user.js +39 -0
  126. package/dist/group/delete-user.js.map +1 -0
  127. package/dist/group/index.d.ts +5 -0
  128. package/dist/group/index.js +8 -0
  129. package/dist/group/index.js.map +1 -0
  130. package/dist/group/list-users.d.ts +8 -0
  131. package/dist/group/list-users.js +40 -0
  132. package/dist/group/list-users.js.map +1 -0
  133. package/dist/group/update-user.d.ts +8 -0
  134. package/dist/group/update-user.js +37 -0
  135. package/dist/group/update-user.js.map +1 -0
  136. package/dist/http.d.ts +1 -0
  137. package/dist/http.js +114 -0
  138. package/dist/http.js.map +1 -0
  139. package/dist/index.d.ts +1 -0
  140. package/dist/index.js +27 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/kv/common.d.ts +34 -0
  143. package/dist/kv/common.js +191 -0
  144. package/dist/kv/common.js.map +1 -0
  145. package/dist/kv/delete.d.ts +7 -0
  146. package/dist/kv/delete.js +52 -0
  147. package/dist/kv/delete.js.map +1 -0
  148. package/dist/kv/get.d.ts +7 -0
  149. package/dist/kv/get.js +52 -0
  150. package/dist/kv/get.js.map +1 -0
  151. package/dist/kv/index.d.ts +6 -0
  152. package/dist/kv/index.js +10 -0
  153. package/dist/kv/index.js.map +1 -0
  154. package/dist/kv/list.d.ts +5 -0
  155. package/dist/kv/list.js +42 -0
  156. package/dist/kv/list.js.map +1 -0
  157. package/dist/kv/set.d.ts +7 -0
  158. package/dist/kv/set.js +54 -0
  159. package/dist/kv/set.js.map +1 -0
  160. package/dist/mine/common.d.ts +4 -0
  161. package/dist/mine/common.js +5 -0
  162. package/dist/mine/common.js.map +1 -0
  163. package/dist/mine/editor-center.d.ts +9 -0
  164. package/dist/mine/editor-center.js +57 -0
  165. package/dist/mine/editor-center.js.map +1 -0
  166. package/dist/mine/get-book-stacks.d.ts +8 -0
  167. package/dist/mine/get-book-stacks.js +41 -0
  168. package/dist/mine/get-book-stacks.js.map +1 -0
  169. package/dist/mine/index.d.ts +4 -0
  170. package/dist/mine/index.js +6 -0
  171. package/dist/mine/index.js.map +1 -0
  172. package/dist/note/create-note.d.ts +8 -0
  173. package/dist/note/create-note.js +32 -0
  174. package/dist/note/create-note.js.map +1 -0
  175. package/dist/note/get-note.d.ts +8 -0
  176. package/dist/note/get-note.js +27 -0
  177. package/dist/note/get-note.js.map +1 -0
  178. package/dist/note/index.d.ts +6 -0
  179. package/dist/note/index.js +10 -0
  180. package/dist/note/index.js.map +1 -0
  181. package/dist/note/list-notes.d.ts +8 -0
  182. package/dist/note/list-notes.js +40 -0
  183. package/dist/note/list-notes.js.map +1 -0
  184. package/dist/note/update-note.d.ts +8 -0
  185. package/dist/note/update-note.js +53 -0
  186. package/dist/note/update-note.js.map +1 -0
  187. package/dist/recycle/common.d.ts +4 -0
  188. package/dist/recycle/common.js +5 -0
  189. package/dist/recycle/common.js.map +1 -0
  190. package/dist/recycle/destroy-recycle.d.ts +8 -0
  191. package/dist/recycle/destroy-recycle.js +38 -0
  192. package/dist/recycle/destroy-recycle.js.map +1 -0
  193. package/dist/recycle/index.d.ts +5 -0
  194. package/dist/recycle/index.js +8 -0
  195. package/dist/recycle/index.js.map +1 -0
  196. package/dist/recycle/list-recycles.d.ts +8 -0
  197. package/dist/recycle/list-recycles.js +57 -0
  198. package/dist/recycle/list-recycles.js.map +1 -0
  199. package/dist/recycle/restore-recycle.d.ts +7 -0
  200. package/dist/recycle/restore-recycle.js +32 -0
  201. package/dist/recycle/restore-recycle.js.map +1 -0
  202. package/dist/repo/batch-get-repos.d.ts +8 -0
  203. package/dist/repo/batch-get-repos.js +83 -0
  204. package/dist/repo/batch-get-repos.js.map +1 -0
  205. package/dist/repo/copy-repo.d.ts +7 -0
  206. package/dist/repo/copy-repo.js +137 -0
  207. package/dist/repo/copy-repo.js.map +1 -0
  208. package/dist/repo/create-repo.d.ts +8 -0
  209. package/dist/repo/create-repo.js +49 -0
  210. package/dist/repo/create-repo.js.map +1 -0
  211. package/dist/repo/delete-repo.d.ts +8 -0
  212. package/dist/repo/delete-repo.js +37 -0
  213. package/dist/repo/delete-repo.js.map +1 -0
  214. package/dist/repo/export-graph.d.ts +21 -0
  215. package/dist/repo/export-graph.js +73 -0
  216. package/dist/repo/export-graph.js.map +1 -0
  217. package/dist/repo/export-index.d.ts +26 -0
  218. package/dist/repo/export-index.js +72 -0
  219. package/dist/repo/export-index.js.map +1 -0
  220. package/dist/repo/export-repo.d.ts +14 -0
  221. package/dist/repo/export-repo.js +243 -0
  222. package/dist/repo/export-repo.js.map +1 -0
  223. package/dist/repo/export-toc.d.ts +17 -0
  224. package/dist/repo/export-toc.js +33 -0
  225. package/dist/repo/export-toc.js.map +1 -0
  226. package/dist/repo/get-repo.d.ts +8 -0
  227. package/dist/repo/get-repo.js +32 -0
  228. package/dist/repo/get-repo.js.map +1 -0
  229. package/dist/repo/index.d.ts +10 -0
  230. package/dist/repo/index.js +18 -0
  231. package/dist/repo/index.js.map +1 -0
  232. package/dist/repo/list-repos.d.ts +8 -0
  233. package/dist/repo/list-repos.js +48 -0
  234. package/dist/repo/list-repos.js.map +1 -0
  235. package/dist/repo/update-repo.d.ts +8 -0
  236. package/dist/repo/update-repo.js +48 -0
  237. package/dist/repo/update-repo.js.map +1 -0
  238. package/dist/rss/dedup.d.ts +9 -0
  239. package/dist/rss/dedup.js +21 -0
  240. package/dist/rss/dedup.js.map +1 -0
  241. package/dist/rss/fetch-feed.d.ts +8 -0
  242. package/dist/rss/fetch-feed.js +290 -0
  243. package/dist/rss/fetch-feed.js.map +1 -0
  244. package/dist/rss/index.d.ts +5 -0
  245. package/dist/rss/index.js +8 -0
  246. package/dist/rss/index.js.map +1 -0
  247. package/dist/rss/list-sources.d.ts +8 -0
  248. package/dist/rss/list-sources.js +39 -0
  249. package/dist/rss/list-sources.js.map +1 -0
  250. package/dist/rss/parser.d.ts +27 -0
  251. package/dist/rss/parser.js +87 -0
  252. package/dist/rss/parser.js.map +1 -0
  253. package/dist/rss/schedule.d.ts +14 -0
  254. package/dist/rss/schedule.js +171 -0
  255. package/dist/rss/schedule.js.map +1 -0
  256. package/dist/rss/sources.d.ts +26 -0
  257. package/dist/rss/sources.js +54 -0
  258. package/dist/rss/sources.js.map +1 -0
  259. package/dist/search/index.d.ts +4 -0
  260. package/dist/search/index.js +6 -0
  261. package/dist/search/index.js.map +1 -0
  262. package/dist/search/rag-search-utils.d.ts +28 -0
  263. package/dist/search/rag-search-utils.js +74 -0
  264. package/dist/search/rag-search-utils.js.map +1 -0
  265. package/dist/search/rag-search.d.ts +16 -0
  266. package/dist/search/rag-search.js +103 -0
  267. package/dist/search/rag-search.js.map +1 -0
  268. package/dist/search/search.d.ts +8 -0
  269. package/dist/search/search.js +43 -0
  270. package/dist/search/search.js.map +1 -0
  271. package/dist/statistic/book-statistics.d.ts +7 -0
  272. package/dist/statistic/book-statistics.js +49 -0
  273. package/dist/statistic/book-statistics.js.map +1 -0
  274. package/dist/statistic/doc-statistics.d.ts +7 -0
  275. package/dist/statistic/doc-statistics.js +53 -0
  276. package/dist/statistic/doc-statistics.js.map +1 -0
  277. package/dist/statistic/group-statistics.d.ts +8 -0
  278. package/dist/statistic/group-statistics.js +30 -0
  279. package/dist/statistic/group-statistics.js.map +1 -0
  280. package/dist/statistic/index.d.ts +6 -0
  281. package/dist/statistic/index.js +10 -0
  282. package/dist/statistic/index.js.map +1 -0
  283. package/dist/statistic/member-statistics.d.ts +7 -0
  284. package/dist/statistic/member-statistics.js +49 -0
  285. package/dist/statistic/member-statistics.js.map +1 -0
  286. package/dist/toc/batch-update.d.ts +11 -0
  287. package/dist/toc/batch-update.js +274 -0
  288. package/dist/toc/batch-update.js.map +1 -0
  289. package/dist/toc/get-toc.d.ts +8 -0
  290. package/dist/toc/get-toc.js +33 -0
  291. package/dist/toc/get-toc.js.map +1 -0
  292. package/dist/toc/index.d.ts +5 -0
  293. package/dist/toc/index.js +8 -0
  294. package/dist/toc/index.js.map +1 -0
  295. package/dist/toc/update-toc.d.ts +8 -0
  296. package/dist/toc/update-toc.js +74 -0
  297. package/dist/toc/update-toc.js.map +1 -0
  298. package/dist/upload/index.d.ts +3 -0
  299. package/dist/upload/index.js +4 -0
  300. package/dist/upload/index.js.map +1 -0
  301. package/dist/upload/upload-attachment.d.ts +11 -0
  302. package/dist/upload/upload-attachment.js +162 -0
  303. package/dist/upload/upload-attachment.js.map +1 -0
  304. package/dist/user/get-groups.d.ts +8 -0
  305. package/dist/user/get-groups.js +41 -0
  306. package/dist/user/get-groups.js.map +1 -0
  307. package/dist/user/get-user.d.ts +8 -0
  308. package/dist/user/get-user.js +24 -0
  309. package/dist/user/get-user.js.map +1 -0
  310. package/dist/user/hello.d.ts +8 -0
  311. package/dist/user/hello.js +17 -0
  312. package/dist/user/hello.js.map +1 -0
  313. package/dist/user/index.d.ts +5 -0
  314. package/dist/user/index.js +8 -0
  315. package/dist/user/index.js.map +1 -0
  316. package/package.json +49 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/common/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * common/copy-common — 跨知识库文档复制公共逻辑
3
+ *
4
+ * 职责:源链接追尾。
5
+ * TOC 缓存与目录创建已迁移到 common/toc-cache.ts。
6
+ */
7
+ /** 在 body 末尾追加源文档链接(markdown 格式) */
8
+ export declare function appendSourceLink(body: string, sourceUrl: string, sourceTitle: string): string;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * common/copy-common — 跨知识库文档复制公共逻辑
3
+ *
4
+ * 职责:源链接追尾。
5
+ * TOC 缓存与目录创建已迁移到 common/toc-cache.ts。
6
+ */
7
+ // ─── 源链接追尾 ──────────────────────────────────────────
8
+ /** 在 body 末尾追加源文档链接(markdown 格式) */
9
+ export function appendSourceLink(body, sourceUrl, sourceTitle) {
10
+ const footer = `\n\n---\n> 📋 源文档:[${sourceTitle}](${sourceUrl})`;
11
+ return body + footer;
12
+ }
13
+ //# sourceMappingURL=copy-common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copy-common.js","sourceRoot":"","sources":["../../src/common/copy-common.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,uDAAuD;AAEvD,oCAAoC;AACpC,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,SAAiB,EACjB,WAAmB;IAEnB,MAAM,MAAM,GAAG,sBAAsB,WAAW,KAAK,SAAS,GAAG,CAAC;IAClE,OAAO,IAAI,GAAG,MAAM,CAAC;AACvB,CAAC"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * errors — 语雀 API 错误码处理
3
+ *
4
+ * 职责:统一映射 HTTP 状态码 + 语雀业务 code → 错误描述,提供 handleApiError 工具函数
5
+ */
6
+ /**
7
+ * 解析语雀 API 响应错误,返回结构化错误信息
8
+ *
9
+ * @param res - fetch Response 对象
10
+ * @param context - 操作上下文(如「获取用户信息」),用于拼错误前缀
11
+ * @returns 格式化的错误对象,可直接作为 MCP tool 返回值
12
+ */
13
+ export declare function handleApiError(res: Response, context: string): Promise<{
14
+ content: Array<{
15
+ type: "text";
16
+ text: string;
17
+ }>;
18
+ isError: true;
19
+ }>;
20
+ /**
21
+ * 删除操作二次确认参数 schema
22
+ *
23
+ * 用法:在需要确认的删除工具 inputSchema 中展开此对象
24
+ */
25
+ export declare const confirmationParam: {
26
+ readonly confirm: {
27
+ readonly type: "string";
28
+ readonly description: "Confirmation token. Must be set to the exact string 'DELETE' to proceed. This is a safety guard against accidental deletion.";
29
+ };
30
+ };
31
+ /**
32
+ * 检查确认参数,未确认则返回错误
33
+ *
34
+ * @returns null 表示确认通过,否则返回错误对象
35
+ */
36
+ export declare function checkConfirmation(args: Record<string, unknown> | undefined): {
37
+ content: Array<{
38
+ type: "text";
39
+ text: string;
40
+ }>;
41
+ isError: true;
42
+ } | null;
43
+ /** 检测是否为语雀"知识库已满"的错误(超过 5000 文档) */
44
+ export declare function isBookFullError(err: unknown): boolean;
@@ -0,0 +1,164 @@
1
+ /**
2
+ * errors — 语雀 API 错误码处理
3
+ *
4
+ * 职责:统一映射 HTTP 状态码 + 语雀业务 code → 错误描述,提供 handleApiError 工具函数
5
+ */
6
+ /** HTTP 状态码 → 错误描述 */
7
+ const STATUS_MAP = {
8
+ 400: "Bad request — invalid parameters",
9
+ 401: "Unauthorized — token missing or invalid",
10
+ 403: "Forbidden — insufficient permissions",
11
+ 404: "Not found — entity does not exist",
12
+ 422: "Unprocessable — parameter validation failed",
13
+ 429: "Rate limited — too many requests",
14
+ 500: "Internal server error",
15
+ };
16
+ /** 语雀业务 code → 错误描述 */
17
+ const YUQUE_CODE_MAP = {
18
+ invalid_params: "参数无效,请检查必填字段和格式 / Invalid parameters — check required fields and formats",
19
+ not_found: "Entity not found — check the ID or slug",
20
+ permission_denied: "Permission denied — check token scope or team membership",
21
+ user_not_found: "User not found — check login or ID",
22
+ book_not_found: "Repository not found — check book_id or namespace",
23
+ doc_not_found: "Document not found — check doc ID or slug",
24
+ note_not_found: "Note not found — check note ID",
25
+ group_not_found: "Group not found — check group login or ID",
26
+ recycle_not_found: "Recycle bin item not found — check recycle_id",
27
+ version_not_found: "Version not found — check version ID",
28
+ toc_not_found: "TOC not found — check book_id",
29
+ slug_conflict: "Slug conflict — a document with this slug already exists",
30
+ book_slug_conflict: "Repository slug conflict — a repo with this slug already exists",
31
+ token_expired: "Token expired — regenerate your API token",
32
+ token_invalid: "Token invalid — check your API token",
33
+ scope_insufficient: "Scope insufficient — token lacks required API scope",
34
+ rate_limit: "Rate limit exceeded — slow down and retry",
35
+ upload_failed: "Upload failed — check file size, type, and cookie/ctoken",
36
+ cookie_required: "Cookie required — this operation needs cookie + ctoken in config.json",
37
+ membership_required: "Membership required — upgrade to access this feature",
38
+ body_parse_failed: "Request body parse failed — check JSON format",
39
+ too_many_requests: "Too many requests — back off and retry",
40
+ book_full: "cannot create more than 5000 documents in a book from api",
41
+ };
42
+ /** 解析语雀业务 code */
43
+ function parseYuqueCode(body) {
44
+ try {
45
+ const parsed = JSON.parse(body);
46
+ if (parsed?.code && typeof parsed.code === "string") {
47
+ return parsed.code;
48
+ }
49
+ if (parsed?.message && typeof parsed.message === "string") {
50
+ // 有些端点不返回 code,只返回 message
51
+ return undefined;
52
+ }
53
+ }
54
+ catch {
55
+ // body 不是 JSON
56
+ }
57
+ return undefined;
58
+ }
59
+ /**
60
+ * 解析语雀 API 响应错误,返回结构化错误信息
61
+ *
62
+ * @param res - fetch Response 对象
63
+ * @param context - 操作上下文(如「获取用户信息」),用于拼错误前缀
64
+ * @returns 格式化的错误对象,可直接作为 MCP tool 返回值
65
+ */
66
+ export async function handleApiError(res, context) {
67
+ const status = res.status;
68
+ const statusLabel = STATUS_MAP[status] ?? `Unknown error (HTTP ${status})`;
69
+ let detail = "";
70
+ let body = "";
71
+ // 读取响应 body
72
+ try {
73
+ body = await res.text();
74
+ }
75
+ catch {
76
+ // 读 body 失败,忽略
77
+ }
78
+ // 先尝试解析语雀业务 code
79
+ const yuqueCode = body ? parseYuqueCode(body) : undefined;
80
+ const yuqueLabel = yuqueCode ? YUQUE_CODE_MAP[yuqueCode] : undefined;
81
+ // 构建详情
82
+ if (yuqueLabel) {
83
+ detail += `\nYuque code: ${yuqueCode} — ${yuqueLabel}`;
84
+ }
85
+ else if (body) {
86
+ // 尝试提取 message 字段
87
+ try {
88
+ const parsed = JSON.parse(body);
89
+ if (parsed?.message && typeof parsed.message === "string") {
90
+ detail += `\nMessage: ${parsed.message}`;
91
+ }
92
+ else if (body.length < 500) {
93
+ detail += `\nResponse: ${body}`;
94
+ }
95
+ }
96
+ catch {
97
+ if (body.length < 500)
98
+ detail += `\nResponse: ${body}`;
99
+ }
100
+ }
101
+ // 429 限流:提取 X-RateLimit-* 头
102
+ if (status === 429) {
103
+ const limit = res.headers.get("X-RateLimit-Limit");
104
+ const remaining = res.headers.get("X-RateLimit-Remaining");
105
+ const retryAfter = res.headers.get("Retry-After");
106
+ const parts = [];
107
+ if (limit)
108
+ parts.push(`Limit: ${limit}/hour`);
109
+ if (remaining !== null)
110
+ parts.push(`Remaining: ${remaining}`);
111
+ if (retryAfter)
112
+ parts.push(`Retry-After: ${retryAfter}s`);
113
+ if (parts.length)
114
+ detail += `\nRate info: ${parts.join(", ")}`;
115
+ }
116
+ return {
117
+ content: [
118
+ {
119
+ type: "text",
120
+ text: `${context} failed — ${statusLabel}${detail}`,
121
+ },
122
+ ],
123
+ isError: true,
124
+ };
125
+ }
126
+ /**
127
+ * 删除操作二次确认参数 schema
128
+ *
129
+ * 用法:在需要确认的删除工具 inputSchema 中展开此对象
130
+ */
131
+ export const confirmationParam = {
132
+ confirm: {
133
+ type: "string",
134
+ description: "Confirmation token. Must be set to the exact string 'DELETE' to proceed. This is a safety guard against accidental deletion.",
135
+ },
136
+ };
137
+ /**
138
+ * 检查确认参数,未确认则返回错误
139
+ *
140
+ * @returns null 表示确认通过,否则返回错误对象
141
+ */
142
+ export function checkConfirmation(args) {
143
+ if (args?.confirm !== "DELETE") {
144
+ return {
145
+ content: [
146
+ {
147
+ type: "text",
148
+ text: "⚠️ 危险操作需二次确认,请将参数 `confirm` 设为 'DELETE' 后重试 / Destructive operation requires confirmation. Set parameter `confirm` to the exact string 'DELETE' to proceed.",
149
+ },
150
+ ],
151
+ isError: true,
152
+ };
153
+ }
154
+ return null;
155
+ }
156
+ /** 检测是否为语雀"知识库已满"的错误(超过 5000 文档) */
157
+ export function isBookFullError(err) {
158
+ const e = err;
159
+ if (!e?.isError || !e?.content?.[0]?.text)
160
+ return false;
161
+ const msg = e.content[0].text.toLowerCase();
162
+ return msg.includes(YUQUE_CODE_MAP.book_full);
163
+ }
164
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/common/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * common/export-common — 导出工具公共函数
3
+ *
4
+ * 被 export-repo.ts(批量导出)和 export-doc.ts(单篇导出)共享。
5
+ */
6
+ export interface ResourceRef {
7
+ url: string;
8
+ localPath: string;
9
+ type: "image" | "attachment";
10
+ }
11
+ /** 从 body_html 中提取所有资源引用 */
12
+ export declare function extractResources(bodyHtml: string, imagesDir: string, attachmentsDir: string): ResourceRef[];
13
+ export interface DownloadResult {
14
+ url: string;
15
+ localPath: string;
16
+ success: boolean;
17
+ error?: string;
18
+ }
19
+ export declare function downloadFile(url: string, destPath: string, token: string): Promise<DownloadResult>;
20
+ export declare function formatFrontMatter(doc: {
21
+ title: string;
22
+ slug: string;
23
+ created_at: string;
24
+ updated_at: string;
25
+ word_count: number;
26
+ description?: string;
27
+ }): string;
28
+ /** 安全文件名:去除非法字符 */
29
+ export declare function sanitizeFilename(name: string): string;
30
+ /** 简单 HTML → Markdown 转换 */
31
+ export declare function htmlToMarkdown(html: string): string;
32
+ export { unescapeHtml } from "./text-utils.js";
@@ -0,0 +1,125 @@
1
+ /**
2
+ * common/export-common — 导出工具公共函数
3
+ *
4
+ * 被 export-repo.ts(批量导出)和 export-doc.ts(单篇导出)共享。
5
+ */
6
+ import { writeFile } from "node:fs/promises";
7
+ import { join } from "node:path";
8
+ import { unescapeHtml } from "./text-utils.js";
9
+ /** 从 body_html 中提取所有资源引用 */
10
+ export function extractResources(bodyHtml, imagesDir, attachmentsDir) {
11
+ const resources = [];
12
+ const seen = new Set();
13
+ // 提取 <img src="...">
14
+ const imgRegex = /<img[^>]+src="([^"]+)"/gi;
15
+ let match;
16
+ while ((match = imgRegex.exec(bodyHtml)) !== null) {
17
+ const url = match[1];
18
+ if (seen.has(url))
19
+ continue;
20
+ seen.add(url);
21
+ const name = urlToFilename(url);
22
+ resources.push({ url, localPath: join(imagesDir, name), type: "image" });
23
+ }
24
+ // 提取 Markdown 图片 ![](url)
25
+ const mdImgRegex = /!\[.*?\]\(([^)]+)\)/g;
26
+ while ((match = mdImgRegex.exec(bodyHtml)) !== null) {
27
+ const url = match[1];
28
+ if (seen.has(url))
29
+ continue;
30
+ seen.add(url);
31
+ const name = urlToFilename(url);
32
+ resources.push({ url, localPath: join(imagesDir, name), type: "image" });
33
+ }
34
+ return resources;
35
+ }
36
+ /** URL → 安全文件名 */
37
+ function urlToFilename(url) {
38
+ try {
39
+ const parsed = new URL(url);
40
+ const pathname = parsed.pathname;
41
+ const base = pathname.split("/").pop() || "file";
42
+ const clean = base.split("?")[0];
43
+ return clean || `file_${Date.now()}`;
44
+ }
45
+ catch {
46
+ return `file_${Date.now()}`;
47
+ }
48
+ }
49
+ export async function downloadFile(url, destPath, token) {
50
+ try {
51
+ const controller = new AbortController();
52
+ const timer = setTimeout(() => controller.abort(), 15_000);
53
+ const res = await fetch(url, {
54
+ headers: {
55
+ "X-Auth-Token": token,
56
+ "User-Agent": "yuque-ai-mcp/2.1.0",
57
+ },
58
+ signal: controller.signal,
59
+ });
60
+ clearTimeout(timer);
61
+ if (!res.ok) {
62
+ return { url, localPath: destPath, success: false, error: `HTTP ${res.status}` };
63
+ }
64
+ const buffer = Buffer.from(await res.arrayBuffer());
65
+ await writeFile(destPath, buffer);
66
+ return { url, localPath: destPath, success: true };
67
+ }
68
+ catch (err) {
69
+ return {
70
+ url,
71
+ localPath: destPath,
72
+ success: false,
73
+ error: err instanceof Error ? err.message : String(err),
74
+ };
75
+ }
76
+ }
77
+ // ─── Markdown 生成 ────────────────────────────────────
78
+ export function formatFrontMatter(doc) {
79
+ return [
80
+ "---",
81
+ `title: "${doc.title.replace(/"/g, '\\"')}"`,
82
+ `slug: ${doc.slug}`,
83
+ `created: ${doc.created_at}`,
84
+ `updated: ${doc.updated_at}`,
85
+ `word_count: ${doc.word_count}`,
86
+ ...(doc.description ? [`description: "${doc.description.replace(/"/g, '\\"')}"`] : []),
87
+ "---",
88
+ "",
89
+ ].join("\n");
90
+ }
91
+ // ─── 辅助函数 ─────────────────────────────────────────
92
+ /** 安全文件名:去除非法字符 */
93
+ export function sanitizeFilename(name) {
94
+ return name.replace(/[<>:"/\\|?*]/g, "_").substring(0, 200);
95
+ }
96
+ /** 简单 HTML → Markdown 转换 */
97
+ export function htmlToMarkdown(html) {
98
+ let md = html;
99
+ md = md.replace(/<h1[^>]*>(.*?)<\/h1>/gi, (_, c) => `\n# ${stripHtml(c)}\n`);
100
+ md = md.replace(/<h2[^>]*>(.*?)<\/h2>/gi, (_, c) => `\n## ${stripHtml(c)}\n`);
101
+ md = md.replace(/<h3[^>]*>(.*?)<\/h3>/gi, (_, c) => `\n### ${stripHtml(c)}\n`);
102
+ md = md.replace(/<h4[^>]*>(.*?)<\/h4>/gi, (_, c) => `\n#### ${stripHtml(c)}\n`);
103
+ md = md.replace(/<h5[^>]*>(.*?)<\/h5>/gi, (_, c) => `\n##### ${stripHtml(c)}\n`);
104
+ md = md.replace(/<h6[^>]*>(.*?)<\/h6>/gi, (_, c) => `\n###### ${stripHtml(c)}\n`);
105
+ md = md.replace(/<(strong|b)[^>]*>(.*?)<\/(strong|b)>/gi, "**$2**");
106
+ md = md.replace(/<(em|i)[^>]*>(.*?)<\/(em|i)>/gi, "*$2*");
107
+ md = md.replace(/<a[^>]+href="([^"]*)"[^>]*>(.*?)<\/a>/gi, "[$2]($1)");
108
+ md = md.replace(/<img[^>]+src="([^"]*)"[^>]*\/?>/gi, "![]($1)");
109
+ md = md.replace(/<p[^>]*>(.*?)<\/p>/gi, (_, c) => `\n${stripHtml(c)}\n`);
110
+ md = md.replace(/<br\s*\/?>/gi, "\n");
111
+ md = md.replace(/<li[^>]*>(.*?)<\/li>/gi, (_, c) => `- ${stripHtml(c)}`);
112
+ md = md.replace(/<pre[^>]*><code[^>]*>(.*?)<\/code><\/pre>/gi, (_, c) => `\n\`\`\`\n${unescapeHtml(c)}\n\`\`\`\n`);
113
+ md = md.replace(/<code[^>]*>(.*?)<\/code>/gi, "`$1`");
114
+ md = md.replace(/<(del|s|strike)[^>]*>(.*?)<\/(del|s|strike)>/gi, "~~$2~~");
115
+ md = md.replace(/<hr\s*\/?>/gi, "\n---\n");
116
+ md = md.replace(/<[^>]+>/g, "");
117
+ md = unescapeHtml(md);
118
+ md = md.replace(/\n{3,}/g, "\n\n");
119
+ return md.trim();
120
+ }
121
+ function stripHtml(html) {
122
+ return html.replace(/<[^>]+>/g, "");
123
+ }
124
+ export { unescapeHtml } from "./text-utils.js";
125
+ //# sourceMappingURL=export-common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"export-common.js","sourceRoot":"","sources":["../../src/common/export-common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,247 @@
1
+ /**
2
+ * 公共格式化函数 — 对 API 原始响应做字段裁剪,减少 AI token 消耗
3
+ *
4
+ * 默认精简输出,传 raw=true 可获取全量原始 JSON
5
+ */
6
+ /** 语雀用户原始数据 */
7
+ interface YuqueUserRaw {
8
+ id: number;
9
+ login: string;
10
+ name: string;
11
+ description?: string;
12
+ avatar_url?: string;
13
+ books_count?: number;
14
+ followers_count?: number;
15
+ }
16
+ /** 语雀团队原始数据 */
17
+ interface YuqueGroupRaw {
18
+ id: number;
19
+ login: string;
20
+ name: string;
21
+ description?: string;
22
+ avatar_url?: string;
23
+ }
24
+ /** 语雀文档原始数据 */
25
+ interface YuqueDocRaw {
26
+ id: number;
27
+ slug: string;
28
+ title: string;
29
+ format?: string;
30
+ public?: number;
31
+ word_count?: number;
32
+ body?: string;
33
+ body_html?: string;
34
+ description?: string;
35
+ book_id?: number;
36
+ user_id?: number;
37
+ created_at?: string;
38
+ updated_at?: string;
39
+ }
40
+ /** 语雀文档版本原始数据 */
41
+ interface YuqueDocVersionRaw {
42
+ id: number;
43
+ doc_id: number;
44
+ title: string;
45
+ version: number;
46
+ created_at?: string;
47
+ content_changed?: boolean;
48
+ }
49
+ /** 语雀知识库原始数据 */
50
+ interface YuqueRepoRaw {
51
+ id: number;
52
+ slug: string;
53
+ name: string;
54
+ namespace?: string;
55
+ description?: string;
56
+ public?: number;
57
+ items_count?: number;
58
+ likes_count?: number;
59
+ user_id?: number;
60
+ created_at?: string;
61
+ updated_at?: string;
62
+ }
63
+ /** 语雀团队成员原始数据 */
64
+ interface YuqueGroupUserRaw {
65
+ id: number;
66
+ login: string;
67
+ name: string;
68
+ role?: number;
69
+ avatar_url?: string;
70
+ created_at?: string;
71
+ user?: YuqueUserRaw;
72
+ }
73
+ /** 语雀小记原始数据 */
74
+ interface YuqueNoteRaw {
75
+ id: number;
76
+ slug: string;
77
+ title?: string;
78
+ content?: string | {
79
+ abstract?: string;
80
+ };
81
+ word_count?: number;
82
+ public?: number;
83
+ book_id?: number;
84
+ created_at?: string;
85
+ updated_at?: string;
86
+ note_url?: string;
87
+ }
88
+ /** 语雀 TOC 节点原始数据 */
89
+ interface YuqueTocNodeRaw {
90
+ title: string;
91
+ uuid: string;
92
+ type?: string;
93
+ doc_id?: number;
94
+ level?: number;
95
+ visible?: boolean;
96
+ url?: string;
97
+ child_uuid?: string;
98
+ parent_uuid?: string;
99
+ }
100
+ /** 语雀回收站项目原始数据 */
101
+ interface YuqueRecycleRaw {
102
+ id: number;
103
+ title: string;
104
+ type?: string;
105
+ slug?: string;
106
+ deleted_at?: string;
107
+ user_id?: number;
108
+ book_id?: number;
109
+ }
110
+ /** 带 data 包装的 API 响应 */
111
+ interface ApiResponse<T> {
112
+ data?: T;
113
+ meta?: unknown;
114
+ }
115
+ export declare function formatUser(data: ApiResponse<YuqueUserRaw> | YuqueUserRaw): {
116
+ id: number;
117
+ login: string;
118
+ name: string;
119
+ description: string | undefined;
120
+ avatar_url: string | undefined;
121
+ books_count: number | undefined;
122
+ followers_count: number | undefined;
123
+ };
124
+ export declare function formatUserGroup(data: YuqueGroupRaw): {
125
+ id: number;
126
+ login: string;
127
+ name: string;
128
+ description: string | undefined;
129
+ avatar_url: string | undefined;
130
+ };
131
+ export declare function formatDoc(data: ApiResponse<YuqueDocRaw> | YuqueDocRaw): {
132
+ id: number;
133
+ slug: string;
134
+ title: string;
135
+ format: string | undefined;
136
+ public: number | undefined;
137
+ word_count: number | undefined;
138
+ body: string | undefined;
139
+ body_html: string | undefined;
140
+ description: string | undefined;
141
+ book_id: number | undefined;
142
+ user_id: number | undefined;
143
+ created_at: string | undefined;
144
+ updated_at: string | undefined;
145
+ };
146
+ export declare function formatDocSummary(data: ApiResponse<YuqueDocRaw> | YuqueDocRaw): {
147
+ id: number;
148
+ slug: string;
149
+ title: string;
150
+ format: string | undefined;
151
+ public: number | undefined;
152
+ word_count: number | undefined;
153
+ updated_at: string | undefined;
154
+ };
155
+ export declare function formatDocVersion(data: YuqueDocVersionRaw): {
156
+ id: number;
157
+ doc_id: number;
158
+ title: string;
159
+ version: number;
160
+ created_at: string | undefined;
161
+ content_changed: boolean | undefined;
162
+ };
163
+ export declare function formatRepo(data: ApiResponse<YuqueRepoRaw> | YuqueRepoRaw): {
164
+ id: number;
165
+ slug: string;
166
+ name: string;
167
+ namespace: string | undefined;
168
+ description: string | undefined;
169
+ public: number | undefined;
170
+ items_count: number | undefined;
171
+ likes_count: number | undefined;
172
+ user_id: number | undefined;
173
+ created_at: string | undefined;
174
+ updated_at: string | undefined;
175
+ };
176
+ export declare function formatGroupUser(data: YuqueGroupUserRaw): {
177
+ id: number;
178
+ login: string;
179
+ name: string;
180
+ role: number | undefined;
181
+ avatar_url: string | undefined;
182
+ created_at: string | undefined;
183
+ };
184
+ export declare function formatNote(data: ApiResponse<YuqueNoteRaw> | YuqueNoteRaw): {
185
+ id: number;
186
+ slug: string;
187
+ title: string | undefined;
188
+ content: string | {
189
+ abstract?: string;
190
+ } | undefined;
191
+ word_count: number | undefined;
192
+ public: number | undefined;
193
+ book_id: number | undefined;
194
+ created_at: string | undefined;
195
+ updated_at: string | undefined;
196
+ note_url: string | undefined;
197
+ };
198
+ export declare function formatNoteSummary(data: ApiResponse<YuqueNoteRaw> | YuqueNoteRaw): {
199
+ id: number;
200
+ slug: string;
201
+ word_count: number | undefined;
202
+ updated_at: string | undefined;
203
+ abstract: string;
204
+ };
205
+ export declare function formatToc(data: YuqueTocNodeRaw[]): {
206
+ title: string;
207
+ uuid: string;
208
+ type: string | undefined;
209
+ doc_id: number | undefined;
210
+ level: number | undefined;
211
+ visible: boolean | undefined;
212
+ url: string | undefined;
213
+ child_uuid: string | undefined;
214
+ parent_uuid: string | undefined;
215
+ }[];
216
+ export declare function formatRecycle(data: YuqueRecycleRaw): {
217
+ id: number;
218
+ title: string;
219
+ type: string | undefined;
220
+ slug: string | undefined;
221
+ deleted_at: string | undefined;
222
+ user_id: number | undefined;
223
+ book_id: number | undefined;
224
+ };
225
+ /**
226
+ * 对工具返回做格式化包装:
227
+ * - 默认调 formatFn 裁剪
228
+ * - 如果用户传了 raw=true,透传原始 JSON
229
+ */
230
+ export declare function wrapResult(data: unknown, formatFn?: (item: any) => unknown, raw?: boolean): string;
231
+ /**
232
+ * 统一处理 API 调用结果:检查错误 → 格式化 → 包装 content 返回
233
+ * 消除 32 处 handler 末尾重复的 isErrorResult + wrapResult 模式。
234
+ */
235
+ export declare function handleApiCall(data: unknown, formatFn: (item: any) => unknown, raw?: boolean): {
236
+ content: Array<{
237
+ type: "text";
238
+ text: string;
239
+ }>;
240
+ } | {
241
+ content: Array<{
242
+ type: "text";
243
+ text: string;
244
+ }>;
245
+ isError: true;
246
+ };
247
+ export {};