yuque-ai-mcp 2.10.0 → 2.11.1

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.
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  <h1 align="center">yuque-ai-mcp</h1>
6
6
  <p align="center">
7
- <b>68 fine-grained MCP tools for the full Yuque OpenAPI</b>
7
+ <b>69 fine-grained MCP tools for the full Yuque OpenAPI</b>
8
8
  </p>
9
9
 
10
10
  <p align="center">
@@ -19,11 +19,11 @@
19
19
 
20
20
  ---
21
21
 
22
- A full-featured Yuque (语雀) MCP Server built on the [Model Context Protocol](https://modelcontextprotocol.io/). Provides 68 fine-grained tools across 16 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 69 fine-grained tools across 16 domains — every Yuque OpenAPI endpoint as a dedicated tool.
23
23
 
24
24
  ## Why
25
25
 
26
- - **19 → 68 tools** — 3x more coverage than the official [yuque-mcp-server](https://github.com/yuque/yuque-mcp-server)
26
+ - **19 → 69 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
@@ -72,13 +72,13 @@ npm run dev:http # HTTP SSE mode (http://localhost:3099)
72
72
  | **recycle** | 3 | List, restore, destroy (Cookie auth) |
73
73
  | **upload** | 1 | File upload to Yuque CDN (Cookie auth) |
74
74
  | **board** | 3 | Mindmap, flowchart, architecture diagram |
75
- | **mine** | 2 | Book stacks, editor center (Cookie auth) |
75
+ | **mine** | 3 | Book stacks, editor center, update book stack (Cookie auth) |
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** | **68** | |
79
+ | **Total** | **69** | |
80
80
 
81
- ### All 68 Tools
81
+ ### All 69 Tools
82
82
 
83
83
  | Tool | Domain | Description |
84
84
  |------|--------|-------------|
@@ -142,6 +142,7 @@ npm run dev:http # HTTP SSE mode (http://localhost:3099)
142
142
  | `yuque_crawl_schedule` | crawler | 分析爬虫抓取频率,生成推荐抓取时间 |
143
143
  | `yuque_get_book_stacks` | mine | 获取知识库分组(书架)列表 |
144
144
  | `yuque_get_editor_center` | mine | 获取个人编辑中心全景数据 |
145
+ | `yuque_update_book_stack` | mine | 移动知识库到指定分组(书架) |
145
146
  | `yuque_kv_get` | kv | 读取 KV 命名空间的完整 JSON map(分片合并) |
146
147
  | `yuque_kv_set` | kv | 增量设置 key-value,超 250KB 自动分片 |
147
148
  | `yuque_kv_delete` | kv | 遍历分片查找并删除 key |
@@ -153,7 +154,7 @@ See [SKILL.md](SKILL.md) or [yuque-ai-skills](https://github.com/yehuoshun/yuque
153
154
 
154
155
  | Feature | Official yuque-mcp-server | yuque-ai-mcp |
155
156
  |---------|--------------------------|--------------|
156
- | Tools | 19 | **68** |
157
+ | Tools | 19 | **69** |
157
158
  | Granularity | Coarse | **Fine-grained** (1 tool / endpoint) |
158
159
  | Group, Recycle, Upload, Statistics | ❌ | ✅ |
159
160
  | Versions, Diff, Cross-book Copy | ❌ | ✅ |
@@ -71,6 +71,12 @@ export function registerAllTools(server) {
71
71
  case "boolean":
72
72
  zodType = z.boolean();
73
73
  break;
74
+ case "array": {
75
+ const itemType = p.items?.type ?? "string";
76
+ const itemZod = itemType === "number" ? z.number() : itemType === "boolean" ? z.boolean() : z.string();
77
+ zodType = z.array(itemZod);
78
+ break;
79
+ }
74
80
  default: zodType = z.string();
75
81
  }
76
82
  if (p.description)
@@ -1 +1 @@
1
- {"version":3,"file":"register-tools.js","sourceRoot":"","sources":["../../src/common/register-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"register-tools.js","sourceRoot":"","sources":["../../src/common/register-tools.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,wBAAwB;AACxB,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,GAAG,SAAS;IACZ,GAAG,WAAW;IACd,GAAG,UAAU;IACb,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,SAAS;IACZ,GAAG,cAAc;IACjB,GAAG,SAAS;IACZ,GAAG,YAAY;IACf,GAAG,WAAW;IACd,GAAG,UAAU;IACb,GAAG,QAAQ;IACX,GAAG,YAAY;IACf,GAAG,SAAS;IACZ,GAAG,OAAO;IACV,GAAG,WAAW;CACf,CAAC;AAEF,cAAc;AACd,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,SAAS,CAAC,MAAM;IACtB,MAAM,EAAE,WAAW,CAAC,MAAM;IAC1B,KAAK,EAAE,UAAU,CAAC,MAAM;IACxB,GAAG,EAAE,QAAQ,CAAC,MAAM;IACpB,GAAG,EAAE,QAAQ,CAAC,MAAM;IACpB,IAAI,EAAE,SAAS,CAAC,MAAM;IACtB,SAAS,EAAE,cAAc,CAAC,MAAM;IAChC,IAAI,EAAE,SAAS,CAAC,MAAM;IACtB,OAAO,EAAE,YAAY,CAAC,MAAM;IAC5B,MAAM,EAAE,WAAW,CAAC,MAAM;IAC1B,KAAK,EAAE,UAAU,CAAC,MAAM;IACxB,GAAG,EAAE,QAAQ,CAAC,MAAM;IACpB,OAAO,EAAE,YAAY,CAAC,MAAM;IAC5B,IAAI,EAAE,SAAS,CAAC,MAAM;IACtB,EAAE,EAAE,OAAO,CAAC,MAAM;IAClB,OAAO,EAAE,WAAW,CAAC,MAAM;CAC5B,CAAC;AAEF,oDAAoD;AACpD,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,KAAK,GAAiC,EAAE,CAAC;YAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;gBACtE,MAAM,CAAC,GAAG,IAAwE,CAAC;gBACnF,IAAI,OAAqB,CAAC;gBAC1B,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;oBACf,KAAK,QAAQ;wBAAE,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;wBAAC,MAAM;oBAC3C,KAAK,QAAQ;wBAAE,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;wBAAC,MAAM;oBAC3C,KAAK,SAAS;wBAAE,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;wBAAC,MAAM;oBAC7C,KAAK,OAAO,CAAC,CAAC,CAAC;wBACb,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI,QAAQ,CAAC;wBAC3C,MAAM,OAAO,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;wBACvG,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;wBAC3B,MAAM;oBACR,CAAC;oBACD,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;gBAChC,CAAC;gBACD,IAAI,CAAC,CAAC,WAAW;oBAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;gBAC7D,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC;oBAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;gBAC5E,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;YACvB,CAAC;YACD,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE;gBAC7B,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,WAAW,EAAE,KAAK;aACnB,EAAE,IAAI,CAAC,OAAc,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,OAAc,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -7,7 +7,7 @@
7
7
  * 统一 mine 和 recycle 域共用的请求层,消除重复代码。
8
8
  */
9
9
  export declare function webRequest(url: string, opts?: {
10
- method?: "GET" | "POST" | "PUT" | "DELETE";
10
+ method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
11
11
  body?: unknown;
12
12
  referer?: string;
13
13
  }): Promise<unknown>;
@@ -1 +1 @@
1
- {"version":3,"file":"web-request.js","sourceRoot":"","sources":["../../src/common/web-request.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAC/C,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAW,EACX,OAAyF,EAAE;IAE3F,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;IAEhC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,QAAQ,CACb,mEAAmE;YACnE,0FAA0F,CAC3F,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAA2B;QACtC,QAAQ,EAAE,kBAAkB;QAC5B,cAAc,EAAE,kBAAkB;QAClC,QAAQ,EAAE,MAAM;QAChB,cAAc,EAAE,MAAM;QACtB,SAAS,EAAE,IAAI,CAAC,OAAO,IAAI,uCAAuC;QAClE,YAAY,EAAE,aAAa;KAC5B,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;IAE3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;YAC5B,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;YACvD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,GAAG,GAAG,kBAAkB,GAAG,CAAC,MAAM,GAAG,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,GAAG,IAAI,KAAK,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,GAAG,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YACnC,CAAC;YACD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,QAAQ,CACb,WAAW,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YAC7D,2BAA2B,CAC5B,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"web-request.js","sourceRoot":"","sources":["../../src/common/web-request.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,SAAS,QAAQ,CAAC,GAAW;IAC3B,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAC/C,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAW,EACX,OAAmG,EAAE;IAErG,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;IAEhC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,QAAQ,CACb,mEAAmE;YACnE,0FAA0F,CAC3F,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAA2B;QACtC,QAAQ,EAAE,kBAAkB;QAC5B,cAAc,EAAE,kBAAkB;QAClC,QAAQ,EAAE,MAAM;QAChB,cAAc,EAAE,MAAM;QACtB,SAAS,EAAE,IAAI,CAAC,OAAO,IAAI,uCAAuC;QAClE,YAAY,EAAE,aAAa;KAC5B,CAAC;IAEF,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,CAAC;IAE3D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,KAAK;YAC5B,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;YACvD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,GAAG,GAAG,kBAAkB,GAAG,CAAC,MAAM,GAAG,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,GAAG,IAAI,KAAK,GAAG,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YAClD,CAAC;YAAC,MAAM,CAAC;gBACP,GAAG,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;YACnC,CAAC;YACD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,QAAQ,CACb,WAAW,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YAC7D,2BAA2B,CAC5B,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
@@ -1,4 +1,6 @@
1
1
  export { mineBookStacks } from "./get-book-stacks.js";
2
2
  export { mineEditorCenter } from "./editor-center.js";
3
+ export { mineUpdateBookStack } from "./update-book-stack.js";
4
+ export { mineSortBookStack } from "./sort-book-stack.js";
3
5
  import type { McpTool } from "../common/types.js";
4
6
  export declare const mineTools: McpTool[];
@@ -1,6 +1,10 @@
1
1
  export { mineBookStacks } from "./get-book-stacks.js";
2
2
  export { mineEditorCenter } from "./editor-center.js";
3
+ export { mineUpdateBookStack } from "./update-book-stack.js";
4
+ export { mineSortBookStack } from "./sort-book-stack.js";
3
5
  import { mineBookStacks } from "./get-book-stacks.js";
4
6
  import { mineEditorCenter } from "./editor-center.js";
5
- export const mineTools = [mineBookStacks, mineEditorCenter];
7
+ import { mineUpdateBookStack } from "./update-book-stack.js";
8
+ import { mineSortBookStack } from "./sort-book-stack.js";
9
+ export const mineTools = [mineBookStacks, mineEditorCenter, mineUpdateBookStack, mineSortBookStack];
6
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,CAAC,MAAM,SAAS,GAAc,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,MAAM,CAAC,MAAM,SAAS,GAAc,CAAC,cAAc,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * mine/sort-book-stack — 排序分组(书架)内知识库
3
+ *
4
+ * 端点:PUT /api/mine/book_stack/move(Web API,Cookie 认证)
5
+ * 职责:按传入的有序 targetBookIds 重新排列分组内的知识库。
6
+ * 语雀无独立排序接口,实测 move 接口传有序 book_ids 列表时,
7
+ * 顺序即最终 rank(2026-08-31 验证)。
8
+ */
9
+ import type { McpTool } from "../common/types.js";
10
+ export declare const mineSortBookStack: McpTool;
@@ -0,0 +1,64 @@
1
+ /**
2
+ * mine/sort-book-stack — 排序分组(书架)内知识库
3
+ *
4
+ * 端点:PUT /api/mine/book_stack/move(Web API,Cookie 认证)
5
+ * 职责:按传入的有序 targetBookIds 重新排列分组内的知识库。
6
+ * 语雀无独立排序接口,实测 move 接口传有序 book_ids 列表时,
7
+ * 顺序即最终 rank(2026-08-31 验证)。
8
+ */
9
+ import { isErrorResult } from "../common/api-client.js";
10
+ import { webRequest } from "../common/web-request.js";
11
+ import { MINE_BASE } from "./common.js";
12
+ export const mineSortBookStack = {
13
+ name: "yuque_sort_book_stack",
14
+ description: "排序分组(书架)内知识库顺序。需要 cookie+ctoken 认证。PUT /api/mine/book_stack/move,传有序 targetBookIds(数组顺序即最终排序)。常用于把分组内知识库按期望顺序重排。",
15
+ inputSchema: {
16
+ type: "object",
17
+ properties: {
18
+ stack_id: {
19
+ type: "number",
20
+ description: "目标分组 ID(书架 ID,必填)",
21
+ },
22
+ book_ids: {
23
+ type: "array",
24
+ items: { type: "number" },
25
+ description: "排序后的知识库 ID 数组(按期望顺序排列,必填)",
26
+ },
27
+ },
28
+ required: ["stack_id", "book_ids"],
29
+ },
30
+ async handler(args) {
31
+ const stackId = args?.stack_id;
32
+ const bookIds = args?.book_ids;
33
+ if (!stackId) {
34
+ return {
35
+ content: [{ type: "text", text: "错误:stack_id 是必填参数" }],
36
+ isError: true,
37
+ };
38
+ }
39
+ if (!Array.isArray(bookIds) || bookIds.length === 0) {
40
+ return {
41
+ content: [{ type: "text", text: "错误:book_ids 是必填参数,且不能为空数组" }],
42
+ isError: true,
43
+ };
44
+ }
45
+ const result = await webRequest(`${MINE_BASE}/book_stack/move`, {
46
+ method: "PUT",
47
+ body: { targetStackId: stackId, targetBookIds: bookIds },
48
+ });
49
+ if (isErrorResult(result))
50
+ return result;
51
+ return {
52
+ content: [
53
+ {
54
+ type: "text",
55
+ text: JSON.stringify({
56
+ success: true,
57
+ message: `分组 ${stackId} 内 ${bookIds.length} 个知识库已按传入顺序排序`,
58
+ }, null, 2),
59
+ },
60
+ ],
61
+ };
62
+ },
63
+ };
64
+ //# sourceMappingURL=sort-book-stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sort-book-stack.js","sourceRoot":"","sources":["../../src/mine/sort-book-stack.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,MAAM,iBAAiB,GAAY;IACxC,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACT,kHAAkH;IAEpH,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mBAAmB;aACjC;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,2BAA2B;aACzC;SACF;QACD,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;KACnC;IAED,KAAK,CAAC,OAAO,CAAC,IAA8B;QAC1C,MAAM,OAAO,GAAG,IAAI,EAAE,QAA8B,CAAC;QACrD,MAAM,OAAO,GAAG,IAAI,EAAE,QAAgC,CAAC;QAEvD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;gBAC/D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,2BAA2B,EAAE,CAAC;gBACvE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,SAAS,kBAAkB,EAAE;YAC9D,MAAM,EAAE,KAAc;YACtB,IAAI,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE;SACzD,CAAC,CAAC;QAEH,IAAI,aAAa,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QAEzC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,MAAM,OAAO,MAAM,OAAO,CAAC,MAAM,eAAe;qBAC1D,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * mine/update-book-stack — 移动知识库到指定分组(书架)
3
+ *
4
+ * 端点:PUT /api/mine/book_stack/move(Web API,Cookie 认证)
5
+ * 职责:将指定知识库移动到目标分组(书架)下
6
+ *
7
+ * ⚠️ 2026-08-31 修复:旧实现用 PATCH /api/books/:book_id {stack_id},
8
+ * 返回成功但实际不生效。实测正确接口为 PUT /api/mine/book_stack/move,
9
+ * body { targetStackId, targetBookIds: [bookId] }。
10
+ */
11
+ import type { McpTool } from "../common/types.js";
12
+ export declare const mineUpdateBookStack: McpTool;
@@ -0,0 +1,65 @@
1
+ /**
2
+ * mine/update-book-stack — 移动知识库到指定分组(书架)
3
+ *
4
+ * 端点:PUT /api/mine/book_stack/move(Web API,Cookie 认证)
5
+ * 职责:将指定知识库移动到目标分组(书架)下
6
+ *
7
+ * ⚠️ 2026-08-31 修复:旧实现用 PATCH /api/books/:book_id {stack_id},
8
+ * 返回成功但实际不生效。实测正确接口为 PUT /api/mine/book_stack/move,
9
+ * body { targetStackId, targetBookIds: [bookId] }。
10
+ */
11
+ import { isErrorResult } from "../common/api-client.js";
12
+ import { webRequest } from "../common/web-request.js";
13
+ import { MINE_BASE } from "./common.js";
14
+ export const mineUpdateBookStack = {
15
+ name: "yuque_update_book_stack",
16
+ description: "移动知识库到指定分组(书架)。需要 cookie+ctoken 认证。PUT /api/mine/book_stack/move。常用于将知识库从一个分组(如预废弃)移到另一个分组(如废弃)。",
17
+ inputSchema: {
18
+ type: "object",
19
+ properties: {
20
+ book_id: {
21
+ type: "number",
22
+ description: "知识库 ID(数字,必填)",
23
+ },
24
+ stack_id: {
25
+ type: "number",
26
+ description: "目标分组 ID(书架 ID,必填)",
27
+ },
28
+ },
29
+ required: ["book_id", "stack_id"],
30
+ },
31
+ async handler(args) {
32
+ const bookId = args?.book_id;
33
+ const stackId = args?.stack_id;
34
+ if (!bookId) {
35
+ return {
36
+ content: [{ type: "text", text: "错误:book_id 是必填参数" }],
37
+ isError: true,
38
+ };
39
+ }
40
+ if (!stackId) {
41
+ return {
42
+ content: [{ type: "text", text: "错误:stack_id 是必填参数" }],
43
+ isError: true,
44
+ };
45
+ }
46
+ const result = await webRequest(`${MINE_BASE}/book_stack/move`, {
47
+ method: "PUT",
48
+ body: { targetStackId: stackId, targetBookIds: [bookId] },
49
+ });
50
+ if (isErrorResult(result))
51
+ return result;
52
+ return {
53
+ content: [
54
+ {
55
+ type: "text",
56
+ text: JSON.stringify({
57
+ success: true,
58
+ message: `知识库 ${bookId} 已移动到分组 ${stackId}`,
59
+ }, null, 2),
60
+ },
61
+ ],
62
+ };
63
+ },
64
+ };
65
+ //# sourceMappingURL=update-book-stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-book-stack.js","sourceRoot":"","sources":["../../src/mine/update-book-stack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,CAAC,MAAM,mBAAmB,GAAY;IAC1C,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EACT,kGAAkG;IAEpG,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,eAAe;aAC7B;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,mBAAmB;aACjC;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,CAAC;KAClC;IAED,KAAK,CAAC,OAAO,CAAC,IAA8B;QAC1C,MAAM,MAAM,GAAG,IAAI,EAAE,OAA6B,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,EAAE,QAA8B,CAAC;QAErD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;gBAC9D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC;gBAC/D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,SAAS,kBAAkB,EAAE;YAC9D,MAAM,EAAE,KAAc;YACtB,IAAI,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,MAAM,CAAC,EAAE;SAC1D,CAAC,CAAC;QAEH,IAAI,aAAa,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QAEzC,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;wBACE,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,OAAO,MAAM,WAAW,OAAO,EAAE;qBAC3C,EACD,IAAI,EACJ,CAAC,CACF;iBACF;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * web-doc/batch-move-catalog-nodes — Cookie 态批量移动目录节点
3
+ *
4
+ * 端点:PUT /api/catalog_nodes/batch(Web API,Cookie 认证)
5
+ * 职责:将指定文档节点批量移动到目标目录分组下
6
+ *
7
+ * 相比 v2 的优势:
8
+ * - 不走 Token,不受会员过期限流
9
+ * - 与 web get/list 同一认证体系
10
+ */
11
+ import type { McpTool } from "../common/types.js";
12
+ export declare const webBatchMoveCatalogNodes: McpTool;
@@ -0,0 +1,101 @@
1
+ /**
2
+ * web-doc/batch-move-catalog-nodes — Cookie 态批量移动目录节点
3
+ *
4
+ * 端点:PUT /api/catalog_nodes/batch(Web API,Cookie 认证)
5
+ * 职责:将指定文档节点批量移动到目标目录分组下
6
+ *
7
+ * 相比 v2 的优势:
8
+ * - 不走 Token,不受会员过期限流
9
+ * - 与 web get/list 同一认证体系
10
+ */
11
+ import { isErrorResult } from "../common/api-client.js";
12
+ import { webRequest } from "../common/web-request.js";
13
+ import { check, requiredString } from "../common/validate.js";
14
+ const CATALOG_REFERER = "https://www.yuque.com/";
15
+ export const webBatchMoveCatalogNodes = {
16
+ name: "yuque_web_batch_move_catalog_nodes",
17
+ description: "Cookie-based: Batch move document nodes to a target catalog node. " +
18
+ "PUT /api/catalog_nodes/batch. " +
19
+ "No membership required. " +
20
+ "Moves the specified node_uuids under the target_uuid directory as children. " +
21
+ "详见 references/api/catalog_api.md",
22
+ inputSchema: {
23
+ type: "object",
24
+ properties: {
25
+ node_uuids: {
26
+ type: "string",
27
+ description: "JSON array string of node UUIDs to move, e.g. '[\"uuid1\",\"uuid2\"]' (required)",
28
+ },
29
+ target_uuid: {
30
+ type: "string",
31
+ description: "Target catalog node UUID to move into (required)",
32
+ },
33
+ book_id: {
34
+ type: "string",
35
+ description: "Repository ID (numeric, required)",
36
+ },
37
+ },
38
+ required: ["node_uuids", "target_uuid", "book_id"],
39
+ },
40
+ async handler(args) {
41
+ // @validate
42
+ const __v = check(requiredString(args?.node_uuids, "node_uuids"), requiredString(args?.target_uuid, "target_uuid"), requiredString(args?.book_id, "book_id"));
43
+ if (__v)
44
+ return __v;
45
+ const bookId = Number(args?.book_id);
46
+ if (!bookId) {
47
+ return {
48
+ content: [{ type: "text", text: JSON.stringify({ error: "book_id 必须为有效数字 / book_id must be a valid number" }, null, 2) }],
49
+ isError: true,
50
+ };
51
+ }
52
+ // Parse node_uuids JSON array
53
+ let nodeUuids;
54
+ try {
55
+ const parsed = JSON.parse(args.node_uuids);
56
+ if (!Array.isArray(parsed) || !parsed.every((u) => typeof u === "string")) {
57
+ throw new Error("not a string array");
58
+ }
59
+ nodeUuids = parsed;
60
+ }
61
+ catch {
62
+ return {
63
+ content: [{ type: "text", text: JSON.stringify({ error: "node_uuids 必须是有效的 JSON 字符串数组 / node_uuids must be a valid JSON string array" }, null, 2) }],
64
+ isError: true,
65
+ };
66
+ }
67
+ if (nodeUuids.length === 0) {
68
+ return {
69
+ content: [{ type: "text", text: JSON.stringify({ error: "node_uuids 不能为空数组 / node_uuids cannot be empty" }, null, 2) }],
70
+ isError: true,
71
+ };
72
+ }
73
+ const url = "https://www.yuque.com/api/catalog_nodes/batch";
74
+ const body = {
75
+ batch_action: "batchMove",
76
+ node_uuids: nodeUuids,
77
+ target_uuid: args.target_uuid,
78
+ book_id: bookId,
79
+ target_book_id: bookId,
80
+ transfer_action: "prependChild",
81
+ insert_to_catalog: true,
82
+ };
83
+ const result = await webRequest(url, {
84
+ method: "PUT",
85
+ body,
86
+ referer: CATALOG_REFERER,
87
+ });
88
+ if (isErrorResult(result))
89
+ return result;
90
+ return {
91
+ content: [{ type: "text", text: JSON.stringify({
92
+ success: true,
93
+ moved_count: nodeUuids.length,
94
+ node_uuids: nodeUuids,
95
+ target_uuid: args.target_uuid,
96
+ message: `成功将 ${nodeUuids.length} 个文档节点移动到目标目录下 / Successfully moved ${nodeUuids.length} document nodes to target catalog`,
97
+ }, null, 2) }],
98
+ };
99
+ },
100
+ };
101
+ //# sourceMappingURL=batch-move-catalog-nodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-move-catalog-nodes.js","sourceRoot":"","sources":["../../src/web-doc/batch-move-catalog-nodes.ts"],"names":[],"mappings":"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"}
@@ -3,5 +3,6 @@ export { webDocList } from "./list-docs.js";
3
3
  export { webRepoList } from "./list-repos.js";
4
4
  export { webTocGet } from "./get-toc.js";
5
5
  export { webDocDelete } from "./delete-doc.js";
6
+ export { webBatchMoveCatalogNodes } from "./batch-move-catalog-nodes.js";
6
7
  import type { McpTool } from "../common/types.js";
7
8
  export declare const webDocTools: McpTool[];
@@ -3,10 +3,12 @@ export { webDocList } from "./list-docs.js";
3
3
  export { webRepoList } from "./list-repos.js";
4
4
  export { webTocGet } from "./get-toc.js";
5
5
  export { webDocDelete } from "./delete-doc.js";
6
+ export { webBatchMoveCatalogNodes } from "./batch-move-catalog-nodes.js";
6
7
  import { webDocGet } from "./get-doc.js";
7
8
  import { webDocList } from "./list-docs.js";
8
9
  import { webRepoList } from "./list-repos.js";
9
10
  import { webTocGet } from "./get-toc.js";
10
11
  import { webDocDelete } from "./delete-doc.js";
11
- export const webDocTools = [webDocGet, webDocList, webRepoList, webTocGet, webDocDelete];
12
+ import { webBatchMoveCatalogNodes } from "./batch-move-catalog-nodes.js";
13
+ export const webDocTools = [webDocGet, webDocList, webRepoList, webTocGet, webDocDelete, webBatchMoveCatalogNodes];
12
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web-doc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,CAAC,MAAM,WAAW,GAAc,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web-doc/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAEzE,MAAM,CAAC,MAAM,WAAW,GAAc,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,wBAAwB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "yuque-ai-mcp",
3
- "version": "2.10.0",
4
- "description": "Full-featured Yuque MCP Server — 62 fine-grained tools covering the entire Yuque OpenAPI",
3
+ "version": "2.11.1",
4
+ "description": "Full-featured Yuque MCP Server \u2014 62 fine-grained tools covering the entire Yuque OpenAPI",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {
@@ -23,7 +23,7 @@
23
23
  "ai",
24
24
  "llm",
25
25
  "claude",
26
- "语雀"
26
+ "\u8bed\u96c0"
27
27
  ],
28
28
  "scripts": {
29
29
  "build": "tsc",
@@ -46,4 +46,4 @@
46
46
  "tsx": "^4.22.4",
47
47
  "typescript": "^5.4.0"
48
48
  }
49
- }
49
+ }