@xurenxiang1219/pingcode-mcp 0.3.1 → 0.4.0

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 (47) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +10 -2
  3. package/dist/auth/cimd-client-resolver.js +1 -1
  4. package/dist/domain/requirement-context.d.ts +1 -1
  5. package/dist/domain/requirement-context.d.ts.map +1 -1
  6. package/dist/mcp/create-server.d.ts.map +1 -1
  7. package/dist/mcp/create-server.js +5 -1
  8. package/dist/mcp/create-server.js.map +1 -1
  9. package/dist/mcp/tool-registry.d.ts +1 -1
  10. package/dist/mcp/tool-registry.d.ts.map +1 -1
  11. package/dist/mcp/tool-registry.js +7 -0
  12. package/dist/mcp/tool-registry.js.map +1 -1
  13. package/dist/mcp/tools/wiki-space-members.d.ts +7 -0
  14. package/dist/mcp/tools/wiki-space-members.d.ts.map +1 -0
  15. package/dist/mcp/tools/wiki-space-members.js +303 -0
  16. package/dist/mcp/tools/wiki-space-members.js.map +1 -0
  17. package/dist/mcp/tools/wiki-write.d.ts +8 -0
  18. package/dist/mcp/tools/wiki-write.d.ts.map +1 -0
  19. package/dist/mcp/tools/wiki-write.js +535 -0
  20. package/dist/mcp/tools/wiki-write.js.map +1 -0
  21. package/dist/mcp/tools/wiki.d.ts.map +1 -1
  22. package/dist/mcp/tools/wiki.js +12 -1
  23. package/dist/mcp/tools/wiki.js.map +1 -1
  24. package/dist/pingcode/client.d.ts +2 -0
  25. package/dist/pingcode/client.d.ts.map +1 -1
  26. package/dist/pingcode/client.js +12 -2
  27. package/dist/pingcode/client.js.map +1 -1
  28. package/dist/pingcode/schemas.d.ts +32 -0
  29. package/dist/pingcode/schemas.d.ts.map +1 -1
  30. package/dist/pingcode/schemas.js +30 -0
  31. package/dist/pingcode/schemas.js.map +1 -1
  32. package/dist/services.d.ts +3 -0
  33. package/dist/services.d.ts.map +1 -1
  34. package/dist/services.js +8 -0
  35. package/dist/services.js.map +1 -1
  36. package/dist/sources/metadata-source.js +1 -1
  37. package/dist/sources/wiki-source.js +1 -1
  38. package/dist/sources/wiki-source.js.map +1 -1
  39. package/dist/sources/wiki-write-source.d.ts +243 -0
  40. package/dist/sources/wiki-write-source.d.ts.map +1 -0
  41. package/dist/sources/wiki-write-source.js +96 -0
  42. package/dist/sources/wiki-write-source.js.map +1 -0
  43. package/dist/write/approval.d.ts +3 -1
  44. package/dist/write/approval.d.ts.map +1 -1
  45. package/dist/write/approval.js +2 -0
  46. package/dist/write/approval.js.map +1 -1
  47. package/package.json +19 -18
package/CHANGELOG.md ADDED
@@ -0,0 +1,25 @@
1
+ # Changelog
2
+
3
+ ## 0.4.0
4
+
5
+ ### 新增
6
+
7
+ - 新增 Wiki 空间创建与更新的 `Preview -> Approval -> Commit` 流程。
8
+ - 新增 Wiki 页面创建与更新的 `Preview -> Approval -> Commit` 流程。
9
+ - 新增 Wiki 空间成员列表查询。
10
+ - 新增 Wiki 空间成员新增流程,支持 user、user_group 和角色名称解析。
11
+ - Wiki 空间、页面、父页面和成员引用支持使用已确认的名称、identifier 或候选 ID。
12
+
13
+ ### 修复
14
+
15
+ - Wiki 页面列表和上下文区分 API 未返回父页面与明确的根页面。
16
+ - 角色目录改用 `/v2/directory/roles`,支持 Wiki 成员角色名称解析。
17
+ - 写入请求成功但响应无法解析时,标记为结果不确定并引导通过唯读 Tool 回读,避免重复写入。
18
+
19
+ ### 安全与限制
20
+
21
+ - 更新 MCP TypeScript SDK 至 `1.32.2`、Zod 至 `4.6.7`,并刷新 lockfile 修复已知依赖安全公告。
22
+ - Wiki 写入继续要求独立权限、Preview、Approval、request hash、幂等键和 Audit Log。
23
+ - Wiki 写入不支持空间或页面删除、移除成员、既有成员角色更新和版本恢复。
24
+ - Wiki 角色名称解析需要 `pcp:read:global:team`;Wiki 写入需要独立的
25
+ `pcp:write:wiki:space` 和 `pcp:write:wiki:page` 权限。
package/README.md CHANGED
@@ -2,11 +2,15 @@
2
2
 
3
3
  讓 VS Code、Cursor、Qoder、ZCode 等 Coding Agent 安全連接 PingCode:讀取 Wiki、工作項目、Test Case 與測試庫上下文,並以 Preview → Approval → Commit 流程控管寫入與同步。適合 UAT 規劃、需求追蹤和測試資料維護,不提供任意 REST API 代理。
4
4
 
5
+ 版本更新記錄見 [CHANGELOG.md](CHANGELOG.md)。
6
+
5
7
  ## 支援範圍
6
8
 
7
- 支援 Wiki、Task/工作項目、Test Case、測試庫、Project、Ship、Relation、使用者與成員角色的讀取,以及受控的 Task/Test Case、Project、Test Library、Ship、Relation、成員角色與需求模組寫入流程。寫入固定要求獨立權限、Preview、有效 Approval、幂等與稽核。
9
+ 支援 Wiki、Task/工作項目、Test Case、測試庫、Project、Ship、Relation、使用者與成員角色的讀取,以及受控的 Wiki 空間/頁面、Task/Test Case、Project、Test Library、Ship、Relation、成員角色與需求模組寫入流程。寫入固定要求獨立權限、Preview、有效 Approval、幂等與稽核。
10
+
11
+ 不支援 Wiki 刪除、移除 Wiki 空間成員、既有 Wiki 成員角色更新、版本恢復、Task/Project/Test Library/Idea 刪除或任意 PingCode REST API 代理;也不會主動刪除關係另一端資源。
8
12
 
9
- 不支援 Wiki 寫入、Task/Project/Test Library/Idea 刪除或任意 PingCode REST API 代理;也不會主動刪除關係另一端資源。
13
+ Wiki 讀取需要 `pcp:read:wiki:space`、`pcp:read:wiki:page`。Wiki 空間/頁面寫入還需以獨立 PingCode 應用授予 `pcp:write:wiki:space`、`pcp:write:wiki:page`,並只可透過 Preview/Commit 工具執行;不要擴大唯讀 Production 憑據。建立 Wiki 空間時若省略 `members`,Preview 會列出使用者與用戶組候選,供使用者選擇要加入的成員;也可明確傳 `members: []` 選擇不加入。private 空間不加成員時會提示其他使用者可能無法訪問。新增成員時可用 `role_name`(例如「管理员」)解析角色,角色名稱解析需要 `pcp:read:global:team`;未指定角色時使用 PingCode 預設角色。
10
14
 
11
15
  ## 快速安裝(推薦)
12
16
 
@@ -164,6 +168,7 @@ npx -y @xurenxiang1219/pingcode-mcp --stdio --env-file /absolute/private/path/pi
164
168
  - `pingcode_wiki_list_spaces`
165
169
  - `pingcode_wiki_list_pages`
166
170
  - `pingcode_wiki_get_requirement_context`
171
+ - `pingcode_wiki_space_members_list`
167
172
  - `pingcode_task_list`
168
173
  - `pingcode_task_get`
169
174
  - `pingcode_test_case_list`
@@ -191,6 +196,9 @@ npx -y @xurenxiang1219/pingcode-mcp --stdio --env-file /absolute/private/path/pi
191
196
 
192
197
  ### Preview、Commit 與受控寫入
193
198
 
199
+ - `pingcode_wiki_space_sync_preview` / `pingcode_wiki_space_sync_commit`
200
+ - `pingcode_wiki_page_sync_preview` / `pingcode_wiki_page_sync_commit`
201
+ - `pingcode_wiki_space_member_add_preview` / `pingcode_wiki_space_member_add_commit`
194
202
  - `pingcode_test_case_delete_preview` / `pingcode_test_case_delete_commit`
195
203
  - `pingcode_test_case_bulk_create_preview` / `pingcode_test_case_bulk_create_commit`
196
204
  - `pingcode_ship_product_sync_preview` / `pingcode_ship_product_sync_commit`
@@ -158,7 +158,7 @@ function requestCimdDocument(url, addresses, timeoutMs, maxResponseBytes) {
158
158
  method: "GET",
159
159
  headers: {
160
160
  Accept: "application/json, application/*+json",
161
- "User-Agent": "pingcode-mcp/0.1.0",
161
+ "User-Agent": "pingcode-mcp/0.4.0",
162
162
  },
163
163
  family: selected.family,
164
164
  lookup: (_hostname, _options, callback) => {
@@ -14,7 +14,7 @@ export interface RequirementContext {
14
14
  title: string;
15
15
  contentFormat: "markdown";
16
16
  contentMarkdown: string;
17
- parent: {
17
+ parent?: {
18
18
  id: string;
19
19
  title: string;
20
20
  url: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"requirement-context.d.ts","sourceRoot":"","sources":["../../src/domain/requirement-context.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,UAAU,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;KACpB,GAAG,IAAI,CAAC;IACT,IAAI,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1C,WAAW,EAAE,EAAE,CAAC;IAChB,YAAY,EAAE,EAAE,CAAC;CAClB"}
1
+ {"version":3,"file":"requirement-context.d.ts","sourceRoot":"","sources":["../../src/domain/requirement-context.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,UAAU,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;KACpB,GAAG,IAAI,CAAC;IACT,IAAI,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1C,WAAW,EAAE,EAAE,CAAC;IAChB,YAAY,EAAE,EAAE,CAAC;CAClB"}
@@ -1 +1 @@
1
- {"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../../src/mcp/create-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAO/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AASxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,gBAAqB,GAC7B,SAAS,CAuBX"}
1
+ {"version":3,"file":"create-server.d.ts","sourceRoot":"","sources":["../../src/mcp/create-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAO/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AASxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAK7D,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,EAC1B,OAAO,GAAE,gBAAqB,GAC7B,SAAS,CAyBX"}
@@ -14,14 +14,18 @@ import { registerMemberRoleTools } from "./tools/member-role.js";
14
14
  import { registerRelationTools } from "./tools/relation.js";
15
15
  import { registerShipSuiteTools } from "./tools/ship-suite.js";
16
16
  import { registerRuntimeInfoTools } from "./tools/runtime-info.js";
17
+ import { registerWikiWriteTools } from "./tools/wiki-write.js";
18
+ import { registerWikiSpaceMemberTools } from "./tools/wiki-space-members.js";
17
19
  export function createMcpServer(services, logger, writeRuntime, options = {}) {
18
20
  const server = new McpServer({
19
21
  name: "pingcode-mcp",
20
- version: "0.2.0",
22
+ version: "0.4.0",
21
23
  });
22
24
  const writeApprovalMode = options.writeApprovalMode ?? "approval_token";
23
25
  registerRuntimeInfoTools(server, logger);
24
26
  registerWikiTools(server, services, logger);
27
+ registerWikiWriteTools(server, services, logger, writeRuntime, writeApprovalMode);
28
+ registerWikiSpaceMemberTools(server, services, logger, writeRuntime, writeApprovalMode);
25
29
  registerTaskTools(server, services, logger);
26
30
  registerTestCaseTools(server, services, logger);
27
31
  registerTestCaseDeleteTools(server, services, logger, writeRuntime, writeApprovalMode);
@@ -1 +1 @@
1
- {"version":3,"file":"create-server.js","sourceRoot":"","sources":["../../src/mcp/create-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAEpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAMnE,MAAM,UAAU,eAAe,CAC7B,QAAkB,EAClB,MAAc,EACd,YAA0B,EAC1B,UAA4B,EAAE;IAE9B,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IACH,MAAM,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,IAAI,gBAAgB,CAAC;IAExE,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5C,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5C,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChD,2BAA2B,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;IACvF,yBAAyB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;IACrF,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAChD,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;IAC7E,sBAAsB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;IAClF,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;IACjF,iBAAiB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;IAC7E,yBAAyB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;IACrF,6BAA6B,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;IACzF,uBAAuB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;IACnF,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"create-server.js","sourceRoot":"","sources":["../../src/mcp/create-server.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare const registeredPingCodeToolNames: readonly ["pingcode_uat_runtime_info", "pingcode_wiki_list_spaces", "pingcode_wiki_list_pages", "pingcode_wiki_get_requirement_context", "pingcode_task_list", "pingcode_task_get", "pingcode_test_case_list", "pingcode_test_case_get", "pingcode_test_case_delete_preview", "pingcode_test_case_delete_commit", "pingcode_test_case_bulk_create_preview", "pingcode_test_case_bulk_create_commit", "pingcode_project_list", "pingcode_work_item_metadata_get", "pingcode_test_library_list", "pingcode_test_library_get", "pingcode_test_case_metadata_get", "pingcode_user_list", "pingcode_role_list", "pingcode_user_search", "pingcode_project_context_get", "pingcode_project_context_save", "pingcode_ship_product_list", "pingcode_ship_product_get", "pingcode_ship_idea_list", "pingcode_ship_product_idea_list", "pingcode_ship_idea_get", "pingcode_ship_product_sync_preview", "pingcode_ship_product_sync_commit", "pingcode_ship_idea_sync_preview", "pingcode_ship_idea_sync_commit", "pingcode_ship_product_suite_list", "pingcode_ship_product_suite_get", "pingcode_ship_product_suite_create_preview", "pingcode_ship_product_suite_create_commit", "pingcode_ship_product_suite_remove_preview", "pingcode_ship_product_suite_remove_commit", "pingcode_relation_list", "pingcode_relation_get", "pingcode_relation_sync_preview", "pingcode_relation_sync_commit", "pingcode_task_sync_preview", "pingcode_task_sync_commit", "pingcode_test_case_sync_preview", "pingcode_test_case_sync_commit", "pingcode_project_create_preview", "pingcode_project_create_commit", "pingcode_test_library_create_preview", "pingcode_test_library_create_commit", "pingcode_member_role_get", "pingcode_member_role_update_preview", "pingcode_member_role_update_commit"];
1
+ export declare const registeredPingCodeToolNames: readonly ["pingcode_uat_runtime_info", "pingcode_wiki_list_spaces", "pingcode_wiki_list_pages", "pingcode_wiki_get_requirement_context", "pingcode_wiki_space_sync_preview", "pingcode_wiki_space_sync_commit", "pingcode_wiki_page_sync_preview", "pingcode_wiki_page_sync_commit", "pingcode_wiki_space_members_list", "pingcode_wiki_space_member_add_preview", "pingcode_wiki_space_member_add_commit", "pingcode_task_list", "pingcode_task_get", "pingcode_test_case_list", "pingcode_test_case_get", "pingcode_test_case_delete_preview", "pingcode_test_case_delete_commit", "pingcode_test_case_bulk_create_preview", "pingcode_test_case_bulk_create_commit", "pingcode_project_list", "pingcode_work_item_metadata_get", "pingcode_test_library_list", "pingcode_test_library_get", "pingcode_test_case_metadata_get", "pingcode_user_list", "pingcode_role_list", "pingcode_user_search", "pingcode_project_context_get", "pingcode_project_context_save", "pingcode_ship_product_list", "pingcode_ship_product_get", "pingcode_ship_idea_list", "pingcode_ship_product_idea_list", "pingcode_ship_idea_get", "pingcode_ship_product_sync_preview", "pingcode_ship_product_sync_commit", "pingcode_ship_idea_sync_preview", "pingcode_ship_idea_sync_commit", "pingcode_ship_product_suite_list", "pingcode_ship_product_suite_get", "pingcode_ship_product_suite_create_preview", "pingcode_ship_product_suite_create_commit", "pingcode_ship_product_suite_remove_preview", "pingcode_ship_product_suite_remove_commit", "pingcode_relation_list", "pingcode_relation_get", "pingcode_relation_sync_preview", "pingcode_relation_sync_commit", "pingcode_task_sync_preview", "pingcode_task_sync_commit", "pingcode_test_case_sync_preview", "pingcode_test_case_sync_commit", "pingcode_project_create_preview", "pingcode_project_create_commit", "pingcode_test_library_create_preview", "pingcode_test_library_create_commit", "pingcode_member_role_get", "pingcode_member_role_update_preview", "pingcode_member_role_update_commit"];
2
2
  //# sourceMappingURL=tool-registry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-registry.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,wrDAqD9B,CAAC"}
1
+ {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/mcp/tool-registry.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,2BAA2B,27DA4D9B,CAAC"}
@@ -3,6 +3,13 @@ export const registeredPingCodeToolNames = [
3
3
  "pingcode_wiki_list_spaces",
4
4
  "pingcode_wiki_list_pages",
5
5
  "pingcode_wiki_get_requirement_context",
6
+ "pingcode_wiki_space_sync_preview",
7
+ "pingcode_wiki_space_sync_commit",
8
+ "pingcode_wiki_page_sync_preview",
9
+ "pingcode_wiki_page_sync_commit",
10
+ "pingcode_wiki_space_members_list",
11
+ "pingcode_wiki_space_member_add_preview",
12
+ "pingcode_wiki_space_member_add_commit",
6
13
  "pingcode_task_list",
7
14
  "pingcode_task_get",
8
15
  "pingcode_test_case_list",
@@ -1 +1 @@
1
- {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/mcp/tool-registry.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,2BAA2B;IAC3B,2BAA2B;IAC3B,0BAA0B;IAC1B,uCAAuC;IACvC,oBAAoB;IACpB,mBAAmB;IACnB,yBAAyB;IACzB,wBAAwB;IACxB,mCAAmC;IACnC,kCAAkC;IAClC,wCAAwC;IACxC,uCAAuC;IACvC,uBAAuB;IACvB,iCAAiC;IACjC,4BAA4B;IAC5B,2BAA2B;IAC3B,iCAAiC;IACjC,oBAAoB;IACpB,oBAAoB;IACpB,sBAAsB;IACtB,8BAA8B;IAC9B,+BAA+B;IAC/B,4BAA4B;IAC5B,2BAA2B;IAC3B,yBAAyB;IACzB,iCAAiC;IACjC,wBAAwB;IACxB,oCAAoC;IACpC,mCAAmC;IACnC,iCAAiC;IACjC,gCAAgC;IAChC,kCAAkC;IAClC,iCAAiC;IACjC,4CAA4C;IAC5C,2CAA2C;IAC3C,4CAA4C;IAC5C,2CAA2C;IAC3C,wBAAwB;IACxB,uBAAuB;IACvB,gCAAgC;IAChC,+BAA+B;IAC/B,4BAA4B;IAC5B,2BAA2B;IAC3B,iCAAiC;IACjC,gCAAgC;IAChC,iCAAiC;IACjC,gCAAgC;IAChC,sCAAsC;IACtC,qCAAqC;IACrC,0BAA0B;IAC1B,qCAAqC;IACrC,oCAAoC;CAC5B,CAAC"}
1
+ {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/mcp/tool-registry.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,2BAA2B;IAC3B,2BAA2B;IAC3B,0BAA0B;IAC1B,uCAAuC;IACvC,kCAAkC;IAClC,iCAAiC;IACjC,iCAAiC;IACjC,gCAAgC;IAChC,kCAAkC;IAClC,wCAAwC;IACxC,uCAAuC;IACvC,oBAAoB;IACpB,mBAAmB;IACnB,yBAAyB;IACzB,wBAAwB;IACxB,mCAAmC;IACnC,kCAAkC;IAClC,wCAAwC;IACxC,uCAAuC;IACvC,uBAAuB;IACvB,iCAAiC;IACjC,4BAA4B;IAC5B,2BAA2B;IAC3B,iCAAiC;IACjC,oBAAoB;IACpB,oBAAoB;IACpB,sBAAsB;IACtB,8BAA8B;IAC9B,+BAA+B;IAC/B,4BAA4B;IAC5B,2BAA2B;IAC3B,yBAAyB;IACzB,iCAAiC;IACjC,wBAAwB;IACxB,oCAAoC;IACpC,mCAAmC;IACnC,iCAAiC;IACjC,gCAAgC;IAChC,kCAAkC;IAClC,iCAAiC;IACjC,4CAA4C;IAC5C,2CAA2C;IAC3C,4CAA4C;IAC5C,2CAA2C;IAC3C,wBAAwB;IACxB,uBAAuB;IACvB,gCAAgC;IAChC,+BAA+B;IAC/B,4BAA4B;IAC5B,2BAA2B;IAC3B,iCAAiC;IACjC,gCAAgC;IAChC,iCAAiC;IACjC,gCAAgC;IAChC,sCAAsC;IACtC,qCAAqC;IACrC,0BAA0B;IAC1B,qCAAqC;IACrC,oCAAoC;CAC5B,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { Logger } from "../../logger.js";
3
+ import type { Services } from "../../services.js";
4
+ import type { WriteRuntime } from "../../write/runtime.js";
5
+ import { type WriteApprovalMode } from "../write-approval.js";
6
+ export declare function registerWikiSpaceMemberTools(server: McpServer, services: Services, logger: Logger, runtime: WriteRuntime, mode: WriteApprovalMode): void;
7
+ //# sourceMappingURL=wiki-space-members.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-space-members.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/wiki-space-members.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAMlD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAML,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAsD9B,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,iBAAiB,GACtB,IAAI,CAiKN"}
@@ -0,0 +1,303 @@
1
+ import * as z from "zod/v4";
2
+ import { PingCodeError } from "../../pingcode/errors.js";
3
+ import { resolveCandidate, resolveTeamReference, resolveUserReference } from "../reference-resolution.js";
4
+ import { resolveSpaceReference } from "./wiki-write.js";
5
+ import { executeTool, requestIdForLog } from "../tool-runtime.js";
6
+ import { requestHash } from "../../write/plan.js";
7
+ import { approvalTokenSchema, commitWithApproval, formatWriteToolResult, requestClientWriteConfirmation, resolveCommitVerification, } from "../write-approval.js";
8
+ const ref = z.string().trim().min(1).max(200);
9
+ const spaceRef = z.object({
10
+ space_id: ref.optional().describe("Wiki 空間 ID;來自 pingcode_wiki_list_spaces 或已確認的空間資料"),
11
+ space_name: ref.optional().describe("Wiki 空間名稱或 identifier;MCP 會在空間目錄唯一解析"),
12
+ }).strict()
13
+ .refine((value) => (value.space_id === undefined) !== (value.space_name === undefined), "必須且只能提供 space_id 或 space_name");
14
+ const memberRef = z.object({
15
+ type: z.enum(["user", "user_group"]),
16
+ id: ref.optional().describe("成員使用者或用戶組 ID;來自對應目錄或已確認候選"),
17
+ name: ref.optional().describe("成員使用者或用戶組名稱;MCP 會依 type 從目錄唯一解析"),
18
+ }).strict().refine((value) => (value.id === undefined) !== (value.name === undefined), "成員必須且只能提供 id 或 name");
19
+ const sourceRefs = z.array(z.object({
20
+ type: z.enum(["wiki", "task", "test_case", "spec", "plan", "code"]),
21
+ id: ref,
22
+ url: z.url().optional(),
23
+ content_hash: z.string().optional(),
24
+ }).strict()).min(1).max(20);
25
+ const listInput = spaceRef.extend({
26
+ page_index: z.number().int().min(0).optional(),
27
+ page_size: z.number().int().min(1).max(100).optional(),
28
+ });
29
+ const memberPlan = z.object({
30
+ plan_id: ref,
31
+ operations: z.array(z.object({
32
+ operation_id: ref,
33
+ action: z.literal("add_member"),
34
+ target_id: ref.optional().describe("目標 Wiki 空間 ID;來自已確認的空間目錄"),
35
+ target_name: ref.optional().describe("目標 Wiki 空間名稱或 identifier;MCP 會唯一解析"),
36
+ fields: z.object({
37
+ member: memberRef,
38
+ role_id: ref.optional().describe("從 pingcode_role_list 或 Preview 候選取得的角色 ID;正常流程建議使用 role_name"),
39
+ role_name: ref.optional().describe("選填;從企業角色目錄解析。未提供時由 PingCode 套用預設角色。"),
40
+ }).strict().refine((fields) => !(fields.role_id !== undefined && fields.role_name !== undefined), "role_id 與 role_name 不得同時提供"),
41
+ source_references: sourceRefs,
42
+ }).strict().refine((operation) => (operation.target_id === undefined) !== (operation.target_name === undefined), "空間必須且只能提供 target_id 或 target_name")).length(1),
43
+ }).strict();
44
+ const approvalContextId = z.string().uuid();
45
+ const sessionSchema = z.string().trim().min(8).max(200).optional();
46
+ const readOnlyAnnotations = { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true };
47
+ const previewAnnotations = { readOnlyHint: true, destructiveHint: false, idempotentHint: false, openWorldHint: true };
48
+ const commitAnnotations = { readOnlyHint: false, destructiveHint: true, idempotentHint: true, openWorldHint: true };
49
+ export function registerWikiSpaceMemberTools(server, services, logger, runtime, mode) {
50
+ const getSource = () => {
51
+ if (!services.getWikiWriteSource)
52
+ throw new PingCodeError("Wiki 寫入 Adapter 未配置", "NOT_CONFIGURED");
53
+ return services.getWikiWriteSource();
54
+ };
55
+ server.registerTool("pingcode_wiki_space_members_list", {
56
+ title: "列出 Wiki 空間成員",
57
+ description: "分頁讀取指定 Wiki 空間的成員及目前角色。可用 space_id 或唯一 space_name;返回 page_index、page_size、total,尚有資料時需繼續分頁。唯讀,不會新增或調整成員。",
58
+ inputSchema: listInput.shape,
59
+ annotations: readOnlyAnnotations,
60
+ }, async ({ space_id, space_name, page_index, page_size }, extra) => executeTool(logger, "pingcode_wiki_space_members_list", requestIdForLog(extra.requestInfo?.headers["x-request-id"], extra.requestId), { hasSpaceId: space_id !== undefined, hasSpaceName: space_name !== undefined, pageIndex: page_index ?? 0 }, async () => {
61
+ const source = getSource();
62
+ const resolvedSpaceId = await resolveSpaceReference(source, space_id, space_name);
63
+ const space = await source.getSpace(resolvedSpaceId);
64
+ const result = await source.listSpaceMembers(space.id, page_index ?? 0, page_size ?? 100);
65
+ return {
66
+ space: { id: space.id, name: space.name, identifier: space.identifier },
67
+ pageIndex: result.page_index,
68
+ pageSize: result.page_size,
69
+ total: result.total,
70
+ members: result.values.map((item) => ({
71
+ id: memberEntityId(item),
72
+ type: item.type,
73
+ name: item.type === "user" ? item.user?.display_name ?? item.user?.name ?? null : item.user_group?.name ?? null,
74
+ roleId: item.role?.id ?? item.role_id ?? null,
75
+ roleName: item.role?.name ?? null,
76
+ })),
77
+ };
78
+ }, { formatResult: formatMemberList }));
79
+ server.registerTool("pingcode_wiki_space_member_add_preview", {
80
+ title: "預覽新增 Wiki 空間成員",
81
+ description: "只預覽新增一位 Wiki 空間成員,不會寫入。成員可用企業使用者或用戶組名稱,MCP 會唯一解析目錄 ID。可選 role_name(例如「管理员」)由企業角色目錄解析,並在新增時設定;也可使用已確認候選的 role_id;省略角色時使用 PingCode 預設角色。若成員已存在會拒絕,因官方文件沒有提供更新既有 Wiki 成員角色的 endpoint。每個 plan 僅一項操作;Commit 必須原樣重送相同 plan_id 和 operations。requestHash、approvalContextId、sessionBinding、evidenceHash、agent_session_id 和 idempotency_key 不得在正常用户回复中展示或要求手動輸入。",
82
+ inputSchema: { ...memberPlan.shape, plan_id: memberPlan.shape.plan_id.optional(), operations: memberPlan.shape.operations.optional(), agent_session_id: sessionSchema },
83
+ annotations: previewAnnotations,
84
+ }, async (input, extra) => executeTool(logger, "pingcode_wiki_space_member_add_preview", requestIdForLog(extra.requestInfo?.headers["x-request-id"], extra.requestId), { planId: input.plan_id ?? "" }, async () => {
85
+ if (input.plan_id === undefined || input.operations === undefined) {
86
+ throw new PingCodeError("缺少 plan_id 或 operations;請補充 Wiki 成員新增計畫後重試 Preview", "BAD_REQUEST");
87
+ }
88
+ const plan = memberPlan.parse({ plan_id: input.plan_id, operations: input.operations });
89
+ const rawRequestHash = requestHash(plan);
90
+ const state = await inspectMemberAdd(plan, getSource(), services);
91
+ const displayOperation = {
92
+ operationId: state.operation.operation_id,
93
+ action: state.operation.action,
94
+ targetId: state.space.id,
95
+ changes: {
96
+ space: { id: state.space.id, name: state.space.name, identifier: state.space.identifier },
97
+ member: { id: state.member.id, type: state.member.type, name: state.member.label },
98
+ role: state.role === null ? "PingCode 預設角色" : { id: state.role.id, name: state.role.name },
99
+ },
100
+ sourceReferences: state.operation.source_references,
101
+ };
102
+ const evidenceHash = requestHash({ planId: plan.plan_id, requestHash: rawRequestHash, evidence: state.evidence });
103
+ const context = await runtime.createApprovalContext({
104
+ resourceType: "wiki_space",
105
+ requestHash: rawRequestHash,
106
+ evidenceHash,
107
+ ...(typeof input.agent_session_id === "string" ? { agentSessionId: input.agent_session_id } : {}),
108
+ ...(extra.authInfo ? { authInfo: extra.authInfo } : {}),
109
+ });
110
+ return {
111
+ planId: plan.plan_id,
112
+ requestHash: rawRequestHash,
113
+ approvalContextId: context.approvalContextId,
114
+ sessionBinding: context.sessionBinding,
115
+ evidenceHash,
116
+ approvalExpiresAt: context.expiresAt,
117
+ counts: { creates: 1, updates: 0, relations: 0 },
118
+ warnings: state.role === null ? ["未指定角色,新增時由 PingCode 套用預設角色;請確認是否符合預期。"] : [],
119
+ operations: [displayOperation],
120
+ };
121
+ }, { formatResult: formatMemberPreview }));
122
+ server.registerTool("pingcode_wiki_space_member_add_commit", {
123
+ title: "提交新增 Wiki 空間成員",
124
+ description: "依有效 Preview 新增 Wiki 空間成員;如 Preview 指定 role_name,會重新解析並以官方可選 role_id 寫入。Commit 必須原樣重送 plan_id 和 operations;同一成員已存在、角色解析改變或 Preview 證據改變時拒絕寫入。寫入後讀取成員目錄驗證,結果不確定時不得重送。",
125
+ inputSchema: { ...memberPlan.shape, agent_session_id: sessionSchema, preview_id: approvalContextId.optional(), approval_context_id: approvalContextId.optional(), approval_token: approvalTokenSchema(mode), idempotency_key: ref.min(16).max(200).optional() },
126
+ annotations: commitAnnotations,
127
+ }, async (input, extra) => executeTool(logger, "pingcode_wiki_space_member_add_commit", requestIdForLog(extra.requestInfo?.headers["x-request-id"], extra.requestId), { planId: input.plan_id }, async () => {
128
+ runtime.assertMcpWriteScope(extra.authInfo?.scopes);
129
+ const plan = memberPlan.parse({ plan_id: input.plan_id, operations: input.operations });
130
+ const rawRequestHash = requestHash(plan);
131
+ const verification = await resolveCommitVerification(runtime, {
132
+ ...(typeof input.preview_id === "string" ? { previewId: input.preview_id } : {}),
133
+ ...(typeof input.approval_context_id === "string" ? { approvalContextId: input.approval_context_id } : {}),
134
+ ...(typeof input.idempotency_key === "string" ? { idempotencyKey: input.idempotency_key } : {}),
135
+ ...(typeof input.agent_session_id === "string" ? { agentSessionId: input.agent_session_id } : {}),
136
+ requestHash: rawRequestHash,
137
+ ...(extra.authInfo ? { authInfo: extra.authInfo } : {}),
138
+ }, "wiki_space");
139
+ if (verification.requestHash !== rawRequestHash)
140
+ throw new PingCodeError("Commit 計畫與 Wiki 成員 Preview request hash 不一致;請原樣重送 plan_id 和 operations", "CONFLICT");
141
+ const source = getSource();
142
+ const state = await inspectMemberAdd(plan, source, services);
143
+ const evidenceHash = requestHash({ planId: plan.plan_id, requestHash: rawRequestHash, evidence: state.evidence });
144
+ if (evidenceHash !== verification.evidenceHash)
145
+ throw new PingCodeError("Wiki 空間或成員在 Preview 後已變更,請重新 Preview", "CONFLICT");
146
+ const confirmation = [
147
+ `Wiki 空間:${state.space.name}(${state.space.identifier})`,
148
+ `新增成員:${state.member.label}(${state.member.type})`,
149
+ `角色:${state.role?.name ?? "PingCode 預設角色"}`,
150
+ "確認後將立即新增此成員;官方 API 未提供既有成員的角色更新 endpoint。",
151
+ ].join("\n");
152
+ const approvalToken = typeof input.approval_token === "string" ? input.approval_token : undefined;
153
+ await requestClientWriteConfirmation(server, logger, mode, approvalToken, confirmation, runtime.requiresConfirmation(["create"]));
154
+ const committed = await commitWithApproval(runtime, mode, {
155
+ resourceType: "wiki_space",
156
+ requestHash: verification.requestHash,
157
+ evidenceHash: verification.evidenceHash,
158
+ approvalContextId: verification.approvalContextId,
159
+ sessionBinding: verification.sessionBinding,
160
+ ...(typeof input.agent_session_id === "string" ? { agentSessionId: input.agent_session_id } : {}),
161
+ ...(approvalToken ? { approvalToken } : {}),
162
+ idempotencyKey: verification.idempotencyKey,
163
+ ...(extra.authInfo ? { authInfo: extra.authInfo } : {}),
164
+ actions: ["create"],
165
+ action: async () => {
166
+ await source.addSpaceMember(state.space.id, { id: state.member.id, type: state.member.type }, state.role?.id);
167
+ const member = await verifyAddedMember(source, state);
168
+ return {
169
+ planId: plan.plan_id,
170
+ resources: [{
171
+ operationId: state.operation.operation_id,
172
+ action: "create",
173
+ id: state.member.id,
174
+ name: state.member.label,
175
+ roleId: member.role?.id ?? member.role_id ?? null,
176
+ roleName: member.role?.name ?? null,
177
+ verified: true,
178
+ }],
179
+ };
180
+ },
181
+ });
182
+ return {
183
+ ...committed.result,
184
+ replayed: committed.replayed,
185
+ approvedBy: committed.approval.approvedBy,
186
+ auditId: committed.auditId,
187
+ };
188
+ }, { formatResult: formatMemberWrite }));
189
+ }
190
+ async function inspectMemberAdd(plan, source, services) {
191
+ const operation = plan.operations[0];
192
+ if (!operation)
193
+ throw new PingCodeError("Wiki 成員新增計畫不能為空", "BAD_REQUEST");
194
+ const spaceId = await resolveSpaceReference(source, operation.target_id, operation.target_name);
195
+ const space = await source.getSpace(spaceId);
196
+ const originalMember = operation.fields.member;
197
+ const memberId = originalMember.type === "user"
198
+ ? await resolveUserReference("Wiki 空間成員", originalMember.id, originalMember.name, services)
199
+ : await resolveTeamReference("Wiki 空間用戶組成員", originalMember.id, originalMember.name, services);
200
+ if (!memberId)
201
+ throw new PingCodeError("無法解析 Wiki 空間成員", "BAD_REQUEST");
202
+ const role = operation.fields.role_id === undefined && operation.fields.role_name === undefined
203
+ ? null
204
+ : await resolveWikiRole(operation.fields.role_id, operation.fields.role_name, services);
205
+ const members = await listAllSpaceMembers(source, space.id);
206
+ const exists = members.find((item) => item.type === originalMember.type && memberEntityId(item) === memberId);
207
+ if (exists) {
208
+ const currentRole = exists.role?.name ?? exists.role?.id ?? exists.role_id ?? "未知角色";
209
+ throw new PingCodeError(`Wiki 空間「${space.name}」已包含此成員,目前角色為 ${currentRole}。官方 Open API 沒有提供既有 Wiki 成員角色更新 endpoint,因此不會用重複新增或移除再重加來變更角色`, "CONFLICT");
210
+ }
211
+ const memberLabel = originalMember.name ?? `${memberId}(已由目錄確認)`;
212
+ return {
213
+ operation,
214
+ space: { id: space.id, name: space.name, identifier: space.identifier },
215
+ member: { id: memberId, type: originalMember.type, label: memberLabel },
216
+ role,
217
+ evidence: {
218
+ space: { id: space.id, name: space.name, identifier: space.identifier },
219
+ member: { id: memberId, type: originalMember.type, exists: false },
220
+ role: role === null ? null : { id: role.id, name: role.name },
221
+ },
222
+ };
223
+ }
224
+ async function resolveWikiRole(roleId, roleName, services) {
225
+ const roles = [];
226
+ for (let pageIndex = 0; pageIndex < 100; pageIndex += 1) {
227
+ const result = await services.getMetadataSource().listRoles({ pageIndex, pageSize: 100 });
228
+ roles.push(...result.values.map(({ id, name }) => ({ id, name })));
229
+ if (roles.length >= result.total || result.values.length === 0) {
230
+ const resolvedId = resolveCandidate("Wiki 空間成員角色", roleId, roleName, roles);
231
+ const resolved = roles.find((item) => item.id === resolvedId);
232
+ if (!resolved)
233
+ throw new PingCodeError("無法從 PingCode 角色目錄解析 Wiki 空間角色", "NOT_FOUND");
234
+ return resolved;
235
+ }
236
+ }
237
+ throw new PingCodeError("PingCode 角色目錄超過安全掃描上限,無法解析角色名稱", "RESPONSE_TOO_LARGE");
238
+ }
239
+ async function listAllSpaceMembers(source, spaceId) {
240
+ const members = [];
241
+ for (let pageIndex = 0; pageIndex < 100; pageIndex += 1) {
242
+ const result = await source.listSpaceMembers(spaceId, pageIndex, 100);
243
+ members.push(...result.values);
244
+ if (members.length >= result.total || result.values.length === 0)
245
+ return members;
246
+ }
247
+ throw new PingCodeError("Wiki 空間成員目錄超過 10000 項安全掃描上限,無法安全新增成員", "RESPONSE_TOO_LARGE");
248
+ }
249
+ async function verifyAddedMember(source, state) {
250
+ let lastError;
251
+ for (let attempt = 0; attempt < 3; attempt += 1) {
252
+ try {
253
+ const members = await listAllSpaceMembers(source, state.space.id);
254
+ const found = members.find((item) => item.type === state.member.type && memberEntityId(item) === state.member.id);
255
+ if (found && (state.role === null || (found.role?.id ?? found.role_id) === state.role.id))
256
+ return found;
257
+ lastError = new Error(found ? "回讀成員角色與 Preview 不同" : "回讀尚未包含新增成員");
258
+ }
259
+ catch (error) {
260
+ lastError = error;
261
+ }
262
+ if (attempt < 2)
263
+ await new Promise((resolve) => setTimeout(resolve, 200 * (attempt + 1)));
264
+ }
265
+ throw new PingCodeError("Wiki 成員新增請求已送出,但成員或角色回讀未能確認;請先唯讀回讀,不要重送", "WRITE_OUTCOME_UNKNOWN", lastError === undefined ? {} : { cause: lastError });
266
+ }
267
+ function memberEntityId(member) {
268
+ return member.type === "user" ? member.user?.id ?? member.id : member.user_group?.id ?? member.id;
269
+ }
270
+ function formatMemberList(result) {
271
+ const lines = [`Wiki 空間成員:${result.space.name}(${result.space.identifier})`, `空間 ID:${result.space.id}`, `成員:${result.members.length}/${result.total}`];
272
+ for (const member of result.members)
273
+ lines.push(`- ${member.name ?? member.id} [${member.type}];角色:${member.roleName ?? member.roleId ?? "未返回"}`);
274
+ if (result.members.length === 0)
275
+ lines.push("此頁沒有成員;若總數大於 0,請調整 page_index 載入其他頁。");
276
+ const first = result.total === 0 ? 0 : result.pageIndex * result.pageSize + 1;
277
+ const last = Math.min(result.pageIndex * result.pageSize + result.members.length, result.total);
278
+ lines.push(`分頁:第 ${result.pageIndex + 1} 頁,顯示 ${first}-${last}/${result.total} 條${last < result.total ? `;尚有資料,請使用 page_index=${result.pageIndex + 1}` : ";已到最後一頁"}`);
279
+ return lines.join("\n");
280
+ }
281
+ function formatMemberPreview(result) {
282
+ const value = result;
283
+ const operation = value.operations[0];
284
+ const lines = ["Wiki 空間成員新增預覽", "目前尚未寫入 PingCode。", `摘要:新增 ${value.counts.creates} 位成員`];
285
+ if (operation) {
286
+ lines.push(`空間:${operation.changes.space.name}(${operation.changes.space.identifier})`);
287
+ lines.push(`新增成員:${operation.changes.member.name} [${operation.changes.member.type}]`);
288
+ lines.push(`角色:${typeof operation.changes.role === "string" ? operation.changes.role : operation.changes.role.name}`);
289
+ }
290
+ for (const warning of value.warnings)
291
+ lines.push(`注意:${warning}`);
292
+ lines.push("核對空間、成員和角色後,才可由 Agent 提交 Commit;內部 Approval 欄位不需手動輸入。");
293
+ return lines.join("\n");
294
+ }
295
+ function formatMemberWrite(result) {
296
+ const value = result;
297
+ const text = formatWriteToolResult(result);
298
+ const resource = value.resources?.[0];
299
+ if (!resource)
300
+ return text;
301
+ return `${text}\n- Wiki 空間成員:${resource.name ?? "已確認成員"}\n- 回讀角色:${resource.roleName ?? "PingCode 已接受(角色名稱未返回)"}`;
302
+ }
303
+ //# sourceMappingURL=wiki-space-members.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-space-members.js","sourceRoot":"","sources":["../../../src/mcp/tools/wiki-space-members.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { Logger } from "../../logger.js";
3
+ import type { Services } from "../../services.js";
4
+ import type { WriteRuntime } from "../../write/runtime.js";
5
+ import { type WriteApprovalMode } from "../write-approval.js";
6
+ export declare function registerWikiWriteTools(server: McpServer, services: Services, logger: Logger, runtime: WriteRuntime, mode: WriteApprovalMode): void;
7
+ export declare function resolveSpaceReference(source: NonNullable<ReturnType<NonNullable<Services["getWikiWriteSource"]>>>, id?: string, name?: string): Promise<string>;
8
+ //# sourceMappingURL=wiki-write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-write.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/wiki-write.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAG9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIlD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAA6H,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAqCzL,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAGlJ;AA4UD,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CASrK"}