@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
@@ -0,0 +1,535 @@
1
+ import { createHash } from "node:crypto";
2
+ import * as z from "zod/v4";
3
+ import { PingCodeError } from "../../pingcode/errors.js";
4
+ import { wikiPageSchema, wikiSpaceSchema, paginatedSchema } from "../../pingcode/schemas.js";
5
+ import { resolveTeamReference, resolveUserReference } from "../reference-resolution.js";
6
+ import { executeTool, requestIdForLog } from "../tool-runtime.js";
7
+ import { requestHash } from "../../write/plan.js";
8
+ import { approvalTokenSchema, commitWithApproval, formatWriteToolResult, requestClientWriteConfirmation, resolveCommitVerification } from "../write-approval.js";
9
+ const ref = z.string().trim().min(1).max(200).describe("PingCode 資源 ID 或目錄中的唯一名稱引用;不可猜測 ID");
10
+ const sourceRefs = z.array(z.object({ type: z.enum(["wiki", "task", "test_case", "spec", "plan", "code"]), id: ref, url: z.url().optional(), content_hash: z.string().optional() }).strict()).min(1).max(20);
11
+ const member = z.object({ id: ref.optional(), name: ref.optional(), type: z.enum(["user", "user_group"]) }).strict().refine((value) => (value.id === undefined) !== (value.name === undefined), "成員必須且只能提供 id 或 name");
12
+ const spaceCreate = z.object({ scope_type: z.enum(["organization", "user_group", "user"]), scope_id: ref.optional(), scope_name: ref.optional(), name: z.string().trim().min(1).max(32), identifier: z.string().trim().min(1).max(15).regex(/^[A-Z0-9_-]+$/), visibility: z.enum(["public", "private"]).optional(), description: z.string().max(50000).optional(), members: z.array(member).max(100).optional().describe("初始 user/user_group 成員。建立空間時必須明確提供此欄位;不新增成員時傳空陣列 []") }).strict().superRefine((value, context) => {
13
+ if (value.scope_type === "user_group" && (value.scope_id === undefined) === (value.scope_name === undefined))
14
+ context.addIssue({ code: "custom", path: ["scope_id"], message: "scope_type=user_group 時必須且只能提供 scope_id 或 scope_name" });
15
+ if (value.scope_type === "user_group" && value.scope_id !== undefined && value.scope_name !== undefined)
16
+ context.addIssue({ code: "custom", path: ["scope_name"], message: "scope_id 與 scope_name 不得同時提供" });
17
+ if (value.scope_type !== "user_group" && (value.scope_id !== undefined || value.scope_name !== undefined))
18
+ context.addIssue({ code: "custom", path: ["scope_id"], message: "scope_id/scope_name 僅適用於 user_group" });
19
+ });
20
+ const spaceUpdate = z.object({ name: z.string().trim().min(1).max(32).optional(), identifier: z.string().trim().min(1).max(15).regex(/^[A-Z0-9_-]+$/).optional(), description: z.string().max(50000).optional() }).strict().refine((x) => Object.values(x).some((v) => v !== undefined));
21
+ const pageCreate = z.object({ space_id: ref.optional().describe("目標 Wiki 空間 ID;未提供時 Preview 會列出候選並要求選擇"), space_name: ref.optional().describe("目標 Wiki 空間名稱或 identifier;未提供時 Preview 會列出候選並要求選擇"), name: z.string().trim().min(1).max(200), parent_id: ref.optional(), parent_name: ref.optional(), content: z.string().max(200000).optional().describe("新頁面正文"), format_type: z.enum(["text", "markdown", "html"]).optional() }).strict().superRefine((x, c) => {
22
+ if (x.space_id !== undefined && x.space_name !== undefined)
23
+ c.addIssue({ code: "custom", path: ["space_id"], message: "space_id 與 space_name 不得同時提供" });
24
+ if (x.parent_id !== undefined && x.parent_name !== undefined)
25
+ c.addIssue({ code: "custom", path: ["parent_id"], message: "parent_id 與 parent_name 不得同時提供" });
26
+ if ((x.content === undefined) !== (x.format_type === undefined))
27
+ c.addIssue({ code: "custom", path: ["content"], message: "content 與 format_type 必須同時提供" });
28
+ });
29
+ const pageUpdate = z.object({ page_id: ref.optional(), page_name: ref.optional(), space_id: ref.optional(), space_name: ref.optional(), name: z.string().trim().min(1).max(200).optional(), parent_id: ref.optional(), parent_name: ref.optional(), is_locked: z.union([z.literal(0), z.literal(1)]).optional(), content: z.string().max(200000).optional().describe("完整替換頁面正文,不會附加至原文"), format_type: z.enum(["text", "markdown", "html"]).optional() }).strict().superRefine((x, c) => {
30
+ if ((x.space_id === undefined) === (x.space_name === undefined))
31
+ c.addIssue({ code: "custom", path: ["space_id"], message: "必須且只能提供 space_id 或 space_name" });
32
+ if ((x.page_id === undefined) === (x.page_name === undefined))
33
+ c.addIssue({ code: "custom", path: ["page_id"], message: "必須且只能提供 page_id 或 page_name" });
34
+ if (x.parent_id !== undefined && x.parent_name !== undefined)
35
+ c.addIssue({ code: "custom", path: ["parent_id"], message: "parent_id 與 parent_name 不得同時提供" });
36
+ if ((x.content === undefined) !== (x.format_type === undefined))
37
+ c.addIssue({ code: "custom", path: ["content"], message: "content 與 format_type 必須同時提供" });
38
+ const meta = x.name !== undefined || x.parent_id !== undefined || x.is_locked !== undefined;
39
+ if (meta === (x.content !== undefined))
40
+ c.addIssue({ code: "custom", path: ["content"], message: "metadata 與正文必須分開更新" });
41
+ });
42
+ const makePlan = (fields) => z.object({ plan_id: ref, operations: z.array(z.discriminatedUnion("action", [
43
+ z.object({ operation_id: ref, action: z.literal("create"), fields, source_references: sourceRefs }).strict(),
44
+ z.object({ operation_id: ref, action: z.literal("update"), target_id: ref.optional(), target_name: ref.optional(), fields: spaceUpdate, source_references: sourceRefs }).strict().refine((x) => (x.target_id === undefined) !== (x.target_name === undefined), "更新空間必須且只能提供 target_id 或 target_name"),
45
+ ])).length(1) });
46
+ const spacePlan = makePlan(spaceCreate);
47
+ const pagePlan = z.object({ plan_id: ref, operations: z.array(z.discriminatedUnion("action", [
48
+ z.object({ operation_id: ref, action: z.literal("create"), fields: pageCreate, source_references: sourceRefs }).strict(),
49
+ z.object({ operation_id: ref, action: z.literal("update"), fields: pageUpdate, source_references: sourceRefs }).strict(),
50
+ ])).length(1) });
51
+ const previewAnnotations = { readOnlyHint: true, destructiveHint: false, idempotentHint: false, openWorldHint: true };
52
+ const commitAnnotations = { readOnlyHint: false, destructiveHint: true, idempotentHint: true, openWorldHint: true };
53
+ export function registerWikiWriteTools(server, services, logger, runtime, mode) {
54
+ registerPair("space", server, services, logger, runtime, mode);
55
+ registerPair("page", server, services, logger, runtime, mode);
56
+ }
57
+ function registerPair(kind, server, services, logger, runtime, mode) {
58
+ const schema = kind === "space" ? spacePlan : pagePlan;
59
+ const resource = kind === "space" ? "wiki_space" : "wiki_page";
60
+ const label = kind === "space" ? "Wiki 空間" : "Wiki 頁面";
61
+ const previewName = "pingcode_wiki_" + kind + "_sync_preview";
62
+ const commitName = "pingcode_wiki_" + kind + "_sync_commit";
63
+ const sessionSchema = z.string().trim().min(8).max(200).optional();
64
+ const source = () => {
65
+ if (!services.getWikiWriteSource)
66
+ throw new PingCodeError("Wiki 寫入 Adapter 未配置", "NOT_CONFIGURED");
67
+ return services.getWikiWriteSource();
68
+ };
69
+ server.registerTool(previewName, { title: "預覽" + label + "同步", description: "預覽一項 Wiki " + kind + "建立或更新計畫,不會寫入 PingCode。支援使用目錄返回的 ID 或唯一名稱引用。建立 Wiki 頁面時若未指定空間,Preview 會列出空間候選並要求使用者選擇;不得自動挑選。建立不會更新既有頁面;更新 content 會完整替換原正文,不是附加。頁面 metadata 和正文更新須分開操作。建立 Wiki 空間時若省略 members,Preview 會列出使用者/用戶組候選並要求明確選擇要加入的成員,或選擇不加入並傳 members: [];private 空間不加成員時會警告其他使用者可能無法訪問。Commit 必須原樣重送本次 Preview 的 plan_id 和 operations,包括 members 中原始提供的 name 或 id;不可根據 Preview 回傳的 camelCase operations/changes 將已解析 ID 回填到原計畫。requestHash、approvalContextId、sessionBinding、evidenceHash、agent_session_id 和 idempotency_key 僅供 Agent 內部傳遞,不得在正常用户回复中展示,也不得要求手動輸入。", inputSchema: { ...schema.shape, plan_id: schema.shape.plan_id.optional().describe("業務上必填;省略僅用於返回缺參引導"), operations: schema.shape.operations.optional().describe("業務上必填且只允許一項操作;省略僅用於返回缺參引導"), agent_session_id: sessionSchema }, annotations: previewAnnotations }, async (input, extra) => executeTool(logger, previewName, requestIdForLog(extra.requestInfo?.headers["x-request-id"], extra.requestId), { planId: input.plan_id }, async () => {
70
+ if (input.plan_id === undefined || input.operations === undefined || !Array.isArray(input.operations) || input.operations.length === 0) {
71
+ throw new PingCodeError("缺少 plan_id 或 operations;請補充 Wiki 同步計畫後重試 Preview", "BAD_REQUEST");
72
+ }
73
+ const plan = schema.parse({ plan_id: input.plan_id, operations: input.operations });
74
+ const requestHashValue = requestHash(plan);
75
+ const state = await inspect(kind, plan, source(), services);
76
+ const operation = plan.operations[0];
77
+ const warnings = kind === "space" && operation.action === "create"
78
+ && operation.fields.visibility === "private"
79
+ && (operation.fields.members?.length ?? 0) === 0
80
+ ? ["此私有 Wiki 空間未加入初始成員,建立後可能無法由其他使用者訪問。"]
81
+ : kind === "page" && operation.action === "update" && operation.fields.content !== undefined
82
+ ? ["頁面正文更新會完整替換現有正文,不會附加;Commit 前請確認提供的是完整的新正文。"]
83
+ : [];
84
+ const evidenceHash = requestHash({ planId: plan.plan_id, requestHash: requestHashValue, state: state.evidence });
85
+ const context = await runtime.createApprovalContext({ resourceType: resource, requestHash: requestHashValue, evidenceHash, ...(typeof input.agent_session_id === "string" ? { agentSessionId: input.agent_session_id } : {}), ...(extra.authInfo ? { authInfo: extra.authInfo } : {}) });
86
+ return { planId: plan.plan_id, requestHash: requestHashValue, approvalContextId: context.approvalContextId, sessionBinding: context.sessionBinding, evidenceHash, approvalExpiresAt: context.expiresAt, counts: { creates: operation.action === "create" ? 1 : 0, updates: operation.action === "update" ? 1 : 0, relations: 0 }, warnings, operations: [{ operationId: operation.operation_id, action: operation.action, targetId: state.id ?? null, changes: state.previewChanges, sourceReferences: operation.source_references }] };
87
+ }, { formatResult: (result) => previewText(result) }));
88
+ server.registerTool(commitName, { title: "提交" + label + "同步", description: "Commit 必須原樣重送 Preview 的 plan_id 和 operations,包括 members 中原始提供的 name 或 id;不可複製 Preview 回傳的 camelCase operations/changes 作為 Commit 計畫。即使提供 preview_id,Server 仍會驗證原始 request hash。Commit 重新檢查目標狀態並在寫入後回讀驗證。", inputSchema: { ...schema.shape, agent_session_id: sessionSchema, preview_id: z.string().uuid().optional(), approval_context_id: z.string().uuid().optional(), approval_token: approvalTokenSchema(mode), idempotency_key: ref.min(16).max(200).optional() }, annotations: commitAnnotations }, async (input, extra) => executeTool(logger, commitName, requestIdForLog(extra.requestInfo?.headers["x-request-id"], extra.requestId), { planId: input.plan_id }, async () => {
89
+ runtime.assertMcpWriteScope(extra.authInfo?.scopes);
90
+ const plan = schema.parse({ plan_id: input.plan_id, operations: input.operations });
91
+ const planRequestHash = requestHash(plan);
92
+ const verification = await resolveCommitVerification(runtime, {
93
+ ...(typeof input.preview_id === "string" ? { previewId: input.preview_id } : {}),
94
+ ...(typeof input.approval_context_id === "string" ? { approvalContextId: input.approval_context_id } : {}),
95
+ ...(typeof input.idempotency_key === "string" ? { idempotencyKey: input.idempotency_key } : {}),
96
+ ...(typeof input.agent_session_id === "string" ? { agentSessionId: input.agent_session_id } : {}),
97
+ requestHash: planRequestHash, authInfo: extra.authInfo,
98
+ }, resource);
99
+ if (planRequestHash !== verification.requestHash) {
100
+ throw new PingCodeError("Commit 計畫與 Wiki Preview request hash 不一致;請原樣重送 Preview 的 plan_id 和 operations", "CONFLICT");
101
+ }
102
+ const state = await inspect(kind, plan, source(), services);
103
+ const evidenceHash = requestHash({ planId: plan.plan_id, requestHash: verification.requestHash, state: state.evidence });
104
+ if (evidenceHash !== verification.evidenceHash)
105
+ throw new PingCodeError("Wiki 目標在 Preview 後已變更,請重新 Preview", "CONFLICT");
106
+ const approvalToken = typeof input.approval_token === "string" ? input.approval_token : undefined;
107
+ await requestClientWriteConfirmation(server, logger, mode, approvalToken, "確認後將立即寫入 PingCode " + label, runtime.requiresConfirmation([plan.operations[0].action]));
108
+ const result = await commitWithApproval(runtime, mode, { resourceType: resource, requestHash: verification.requestHash, evidenceHash, approvalContextId: verification.approvalContextId, sessionBinding: verification.sessionBinding, ...(typeof input.agent_session_id === "string" ? { agentSessionId: input.agent_session_id } : {}), ...(approvalToken ? { approvalToken } : {}), idempotencyKey: verification.idempotencyKey, ...(extra.authInfo ? { authInfo: extra.authInfo } : {}), actions: [plan.operations[0].action], action: () => apply(kind, state, source()) });
109
+ return { planId: plan.plan_id, resources: result.result, replayed: result.replayed, approvedBy: result.approval.approvedBy, auditId: result.auditId };
110
+ }, { formatResult: formatWriteToolResult }));
111
+ }
112
+ async function inspect(kind, plan, source, services) {
113
+ const operation = plan.operations[0];
114
+ const fields = { ...operation.fields };
115
+ let id;
116
+ let before = null;
117
+ if (kind === "space") {
118
+ if (operation.action === "create") {
119
+ const create = operation.fields;
120
+ if (create.members === undefined) {
121
+ const choices = await listInitialMemberChoices(services);
122
+ throw new PingCodeError(`建立 Wiki 空間前,請先讓使用者選擇要加入的使用者/用戶組,或明確選擇不新增成員(members: [])。${choices}`, "BAD_REQUEST");
123
+ }
124
+ if (create.scope_type === "user" && services.getPingCodeAuthMode?.() === "enterprise")
125
+ throw new PingCodeError("enterprise 憑據不能建立個人 Wiki 空間", "PERMISSION_DENIED");
126
+ if (create.scope_type === "user_group")
127
+ create.scope_id = await resolveTeamReference("Wiki 空間團隊", create.scope_id, create.scope_name, services);
128
+ delete create.scope_name;
129
+ if (create.members)
130
+ create.members = await Promise.all(create.members.map(async (item) => {
131
+ const id = item.type === "user" ? await resolveUserReference("Wiki 初始成員", item.id, item.name, services) : await resolveTeamReference("Wiki 初始團隊成員", item.id, item.name, services);
132
+ if (!id)
133
+ throw new PingCodeError("無法解析 Wiki 初始成員", "BAD_REQUEST");
134
+ return { id, type: item.type };
135
+ }));
136
+ Object.assign(fields, create);
137
+ }
138
+ else {
139
+ const update = operation;
140
+ id = await resolveSpaceReference(source, update.target_id, update.target_name);
141
+ const space = wikiSpaceSchema.parse(await source.getSpace(id));
142
+ before = space;
143
+ if (space.scope_type === "user" && services.getPingCodeAuthMode?.() === "enterprise")
144
+ throw new PingCodeError("enterprise 憑據不能更新個人 Wiki 空間", "PERMISSION_DENIED");
145
+ }
146
+ }
147
+ else if (operation.action === "create") {
148
+ const create = operation.fields;
149
+ if (create.space_id === undefined && create.space_name === undefined) {
150
+ const candidates = await listAllSpaces(source);
151
+ throw new PingCodeError(`建立 Wiki 頁面前,請先選擇目標空間;以 space_name 傳入空間名稱或 identifier,MCP 會唯一解析,不需要手動輸入 ID。以下是 Wiki 寫入 API 返回的候選,可能與唯讀空間列表不同:${formatCandidates(candidates.map((space) => `${space.name}/${space.identifier}`), candidates.length)}。${candidates.length > 20 ? "也可先使用 pingcode_wiki_list_spaces 縮小範圍。" : ""}`, "BAD_REQUEST");
152
+ }
153
+ const spaceId = await resolveSpaceReference(source, create.space_id, create.space_name);
154
+ const space = await source.getSpace(spaceId);
155
+ create.space_id = space.id;
156
+ delete create.space_name;
157
+ if (create.parent_id !== undefined || create.parent_name !== undefined)
158
+ create.parent_id = await resolvePageReference(source, space.id, create.parent_id, create.parent_name);
159
+ delete create.parent_name;
160
+ if (create.parent_id)
161
+ await assertPageBelongsToSpace(source, create.parent_id, space.id);
162
+ before = { spaceId: space.id, parentId: create.parent_id ?? null };
163
+ Object.assign(fields, create);
164
+ }
165
+ else {
166
+ const update = operation.fields;
167
+ const spaceId = await resolveSpaceReference(source, update.space_id, update.space_name);
168
+ id = await resolvePageReference(source, spaceId, update.page_id, update.page_name);
169
+ const page = await source.getPage(id);
170
+ if (page.space.id !== spaceId)
171
+ throw new PingCodeError("目標 Wiki 頁面不屬於指定空間", "BAD_REQUEST");
172
+ if (update.content !== undefined && Boolean(page.is_locked))
173
+ throw new PingCodeError("頁面已鎖定,不能更新正文;不會自動解鎖", "BAD_REQUEST");
174
+ const content = await source.getPageContent(id, update.format_type ?? "markdown");
175
+ before = { page: pageUpdateEvidence(page), contentHash: wikiContentHash(content.content) };
176
+ delete fields.page_id;
177
+ delete fields.page_name;
178
+ delete fields.space_id;
179
+ delete fields.space_name;
180
+ if (update.parent_id !== undefined || update.parent_name !== undefined) {
181
+ update.parent_id = await resolvePageReference(source, spaceId, update.parent_id, update.parent_name);
182
+ delete fields.parent_name;
183
+ await assertNoPageCycle(source, id, update.parent_id);
184
+ await assertPageBelongsToSpace(source, update.parent_id, spaceId);
185
+ fields.parent_id = update.parent_id;
186
+ }
187
+ }
188
+ const previewChanges = kind === "space" && operation.action === "update"
189
+ ? Object.fromEntries(Object.entries(fields).map(([key, value]) => [key, {
190
+ before: before[key] ?? null,
191
+ after: value,
192
+ }]))
193
+ : fields;
194
+ // The raw request hash binds the proposed body; beforeHash separately binds the current body.
195
+ const evidenceFields = kind === "page" ? Object.fromEntries(Object.entries(fields).filter(([key]) => key !== "content")) : fields;
196
+ return { operation, fields, id, before, previewChanges, evidence: { id: id ?? null, beforeHash: before === null ? null : requestHash(before), fieldsHash: requestHash(evidenceFields) } };
197
+ }
198
+ async function apply(kind, state, source) {
199
+ if (kind === "space") {
200
+ const input = state.operation.fields;
201
+ const createInput = state.operation.action === "create" ? input : undefined;
202
+ const payload = createInput
203
+ ? { scopeType: createInput.scope_type, scopeId: createInput.scope_id, name: createInput.name, identifier: createInput.identifier, visibility: createInput.visibility, description: createInput.description, members: createInput.members?.map((item) => ({ id: item.id, type: item.type })) }
204
+ : { name: input.name, identifier: input.identifier, description: input.description };
205
+ const value = state.operation.action === "create"
206
+ ? await source.createSpace(payload)
207
+ : await source.updateSpace(state.id, payload);
208
+ const verified = await verifyReadback("Wiki 空間", () => source.getSpace(value.id));
209
+ if (state.fields.name !== undefined && verified.name !== state.fields.name)
210
+ throw new PingCodeError("Wiki 空間寫入後回讀不符", "WRITE_OUTCOME_UNKNOWN");
211
+ if (state.fields.identifier !== undefined && verified.identifier !== state.fields.identifier)
212
+ throw new PingCodeError("Wiki 空間寫入後回讀不符", "WRITE_OUTCOME_UNKNOWN");
213
+ return [{ action: state.operation.action, id: verified.id, name: verified.name, identifier: verified.identifier, verified: true }];
214
+ }
215
+ if (state.operation.action === "create") {
216
+ const input = state.operation.fields;
217
+ const value = await source.createPage({ spaceId: input.space_id, name: input.name, parentId: input.parent_id, content: input.content, formatType: input.format_type });
218
+ const page = await verifyReadback("Wiki 頁面", () => source.getPage(value.id));
219
+ const createFields = input;
220
+ if (page.name !== createFields.name || page.space.id !== createFields.space_id || page.parent?.id !== createFields.parent_id) {
221
+ throw new PingCodeError("Wiki 頁面已建立但 metadata 回讀不一致;請勿重送建立請求", "WRITE_OUTCOME_UNKNOWN");
222
+ }
223
+ if (createFields.content !== undefined) {
224
+ await verifyPageContent(source, value.id, createFields.content, createFields.format_type, "Wiki 頁面已建立但正文無法驗證;請勿重送建立請求");
225
+ }
226
+ return [{ action: "create", id: page.id, title: page.name, name: page.name, verified: true }];
227
+ }
228
+ const update = state.operation.fields;
229
+ if (update.content !== undefined)
230
+ await source.updatePageContent(state.id, update.content, update.format_type);
231
+ else
232
+ await source.updatePage(state.id, { name: update.name, parentId: update.parent_id, isLocked: update.is_locked });
233
+ const page = await verifyReadback("Wiki 頁面", () => source.getPage(state.id));
234
+ if (update.content !== undefined) {
235
+ await verifyPageContent(source, state.id, update.content, update.format_type, "Wiki 正文已更新但回讀不符;請勿重送");
236
+ }
237
+ if (update.name !== undefined && page.name !== update.name)
238
+ throw new PingCodeError("Wiki 頁面 metadata 寫入後回讀不符", "WRITE_OUTCOME_UNKNOWN");
239
+ if (update.parent_id !== undefined && page.parent?.id !== update.parent_id)
240
+ throw new PingCodeError("Wiki 頁面父級寫入後回讀不符", "WRITE_OUTCOME_UNKNOWN");
241
+ if (update.is_locked !== undefined && Number(Boolean(page.is_locked)) !== update.is_locked)
242
+ throw new PingCodeError("Wiki 頁面鎖定狀態寫入後回讀不符", "WRITE_OUTCOME_UNKNOWN");
243
+ return [{ action: "update", id: page.id, title: page.name, name: page.name, verified: true }];
244
+ }
245
+ async function verifyReadback(label, read) {
246
+ try {
247
+ return await read();
248
+ }
249
+ catch (error) {
250
+ if (error instanceof PingCodeError && error.code === "WRITE_OUTCOME_UNKNOWN")
251
+ throw error;
252
+ throw new PingCodeError(`${label}寫入後回讀失敗,結果尚未確認;請先使用唯讀 Tool 回讀,不要重送寫入`, "WRITE_OUTCOME_UNKNOWN", { cause: error });
253
+ }
254
+ }
255
+ async function verifyPageContent(source, pageId, expected, formatType, failureMessage) {
256
+ let lastError;
257
+ for (let attempt = 0; attempt < 3; attempt++) {
258
+ try {
259
+ const actual = (await source.getPageContent(pageId, formatType)).content;
260
+ if (formatType === "html" || (formatType === "markdown"
261
+ ? matchesMarkdownReadback(expected, actual)
262
+ : actual === expected))
263
+ return;
264
+ }
265
+ catch (error) {
266
+ lastError = error;
267
+ }
268
+ if (attempt < 2)
269
+ await new Promise((resolve) => setTimeout(resolve, 200 * (attempt + 1)));
270
+ }
271
+ throw new PingCodeError(failureMessage, "WRITE_OUTCOME_UNKNOWN", lastError === undefined ? {} : { cause: lastError });
272
+ }
273
+ function matchesMarkdownReadback(expected, actual) {
274
+ const expectedLines = normalizeMarkdownReadback(expected);
275
+ const actualLines = normalizeMarkdownReadback(actual);
276
+ if (expectedLines.length !== actualLines.length)
277
+ return false;
278
+ let fence;
279
+ for (let index = 0; index < expectedLines.length; index++) {
280
+ const expectedLine = expectedLines[index];
281
+ const actualLine = actualLines[index];
282
+ if (fence !== undefined) {
283
+ const closingFence = new RegExp(`^ {0,3}${fence.marker === "`" ? "`" : "~"}{${fence.length},}[ \\t]*$`).test(expectedLine);
284
+ if (actualLine !== expectedLine)
285
+ return false;
286
+ if (closingFence)
287
+ fence = undefined;
288
+ continue;
289
+ }
290
+ const fenceMatch = /^ {0,3}(`{3,}|~{3,})/.exec(expectedLine);
291
+ if (fenceMatch) {
292
+ const marker = fenceMatch[1][0];
293
+ if (actualLine !== expectedLine)
294
+ return false;
295
+ fence = { marker, length: fenceMatch[1].length };
296
+ continue;
297
+ }
298
+ if (actualLine === expectedLine)
299
+ continue;
300
+ if (expectedLine.trim() === "" || actualLine.trim() === "")
301
+ return false;
302
+ const expectedParts = splitMarkdownBoundarySpaces(expectedLine);
303
+ const actualParts = splitMarkdownBoundarySpaces(actualLine);
304
+ const isKnownParagraphContinuation = isKnownParagraphContinuationIndentation(expectedLines, index, expectedParts.leading, actualParts.leading);
305
+ if (expectedParts.text !== actualParts.text || (hasMarkdownStructure(expectedLine, expectedLines, index) && !isKnownParagraphContinuation))
306
+ return false;
307
+ if ((expectedParts.leading >= 4 || actualParts.leading >= 4) && !isKnownParagraphContinuation)
308
+ return false;
309
+ if (![0, 2].includes(actualParts.leading - expectedParts.leading))
310
+ return false;
311
+ if (![0, 2].includes(actualParts.trailing - expectedParts.trailing))
312
+ return false;
313
+ const addsMarkdownHardBreak = expectedParts.trailing < 2 && actualParts.trailing >= 2;
314
+ const isKnownNewlinePadding = expectedParts.trailing === 0
315
+ && actualParts.trailing === 2
316
+ && index < expectedLines.length - 1
317
+ && expectedLines[index + 1].trim() !== ""
318
+ && !hasMarkdownStructure(expectedLines[index + 1], expectedLines, index + 1);
319
+ if (addsMarkdownHardBreak && !isKnownNewlinePadding)
320
+ return false;
321
+ }
322
+ return true;
323
+ }
324
+ function isKnownParagraphContinuationIndentation(lines, index, expectedLeading, actualLeading) {
325
+ if (expectedLeading !== 2 || actualLeading !== 4)
326
+ return false;
327
+ const currentText = splitMarkdownBoundarySpaces(lines[index]).text;
328
+ if (/^(?:#{1,6}(?:\s|$)|>|[-+*]\s|\d+[.)]\s|\||(?:={3,}|-{3,}|_{3,}|\*{3,})\s*$)/.test(currentText))
329
+ return false;
330
+ const previousLine = lines[index - 1];
331
+ if (previousLine === undefined || previousLine.trim() === "")
332
+ return false;
333
+ const previous = splitMarkdownBoundarySpaces(previousLine);
334
+ return previous.trailing >= 2 && !hasMarkdownStructure(previousLine, lines, index - 1);
335
+ }
336
+ function normalizeMarkdownReadback(content) {
337
+ const lines = content.replace(/\r\n?/g, "\n").split("\n");
338
+ let fence;
339
+ for (let index = 0; index < lines.length; index++) {
340
+ const line = lines[index];
341
+ if (fence !== undefined) {
342
+ const closingFence = new RegExp(`^ {0,3}${fence.marker === "`" ? "`" : "~"}{${fence.length},}[ \\t]*$`).test(line);
343
+ if (closingFence)
344
+ fence = undefined;
345
+ continue;
346
+ }
347
+ const fenceMatch = /^ {0,3}(`{3,}|~{3,})/.exec(line);
348
+ if (fenceMatch) {
349
+ fence = { marker: fenceMatch[1][0], length: fenceMatch[1].length };
350
+ continue;
351
+ }
352
+ lines[index] = line.replace(/(\S)[\t ]+(\*\*|__)(.+?)\2[\t ]+(\S)/g, "$1$2$3$2$4");
353
+ }
354
+ return fence === undefined
355
+ ? lines.join("\n").replace(/[\t \n]+$/, "").split("\n")
356
+ : lines;
357
+ }
358
+ function splitMarkdownBoundarySpaces(line) {
359
+ const leading = /^ */.exec(line)[0].length;
360
+ const trailing = / *$/.exec(line)[0].length;
361
+ return { leading, trailing, text: line.slice(leading, line.length - trailing) };
362
+ }
363
+ function hasMarkdownStructure(line, lines, index) {
364
+ const { leading, text } = splitMarkdownBoundarySpaces(line);
365
+ if (leading >= 4 || /^(?:#{1,6}(?:\s|$)|>|[-+*]\s|\d+[.)]\s|\|)/.test(text))
366
+ return true;
367
+ for (let previous = index - 1; previous >= 0 && lines[previous].trim() !== ""; previous--) {
368
+ if (/^ {0,3}(?:[-+*]|\d+[.)])\s/.test(lines[previous]))
369
+ return true;
370
+ }
371
+ return false;
372
+ }
373
+ function pageUpdateEvidence(page) {
374
+ return {
375
+ id: page.id,
376
+ name: page.name,
377
+ type: page.type,
378
+ space: { id: page.space.id, name: page.space.name },
379
+ parent: page.parent === undefined
380
+ ? undefined
381
+ : page.parent === null
382
+ ? null
383
+ : { id: page.parent.id, name: page.parent.name },
384
+ updatedAt: page.updated_at ?? null,
385
+ isLocked: page.is_locked ?? null,
386
+ isArchived: page.is_archived ?? null,
387
+ isDeleted: page.is_deleted ?? null,
388
+ };
389
+ }
390
+ function wikiContentHash(content) {
391
+ return `sha256:${createHash("sha256").update(content, "utf8").digest("hex")}`;
392
+ }
393
+ async function assertNoPageCycle(source, pageId, parentId) {
394
+ let current = parentId;
395
+ for (let depth = 0; current && depth < 100; depth++) {
396
+ if (current === pageId)
397
+ throw new PingCodeError("頁面不能移到自身或其後代之下", "BAD_REQUEST");
398
+ current = (await source.getPage(current)).parent?.id;
399
+ }
400
+ if (current)
401
+ throw new PingCodeError("父頁面層級超過安全檢查上限", "BAD_REQUEST");
402
+ }
403
+ export async function resolveSpaceReference(source, id, name) {
404
+ if ((id === undefined) === (name === undefined))
405
+ throw new PingCodeError("必須且只能提供 Wiki 空間 ID 或名稱", "BAD_REQUEST");
406
+ if (id !== undefined)
407
+ return (await source.getSpace(id)).id;
408
+ const normalized = name.trim().toLocaleLowerCase();
409
+ const matches = await findByName(source.listSpaces.bind(source), wikiSpaceSchema, (space) => space.name.trim().toLocaleLowerCase() === normalized || space.identifier.trim().toLocaleLowerCase() === normalized);
410
+ if (matches.length === 1)
411
+ return matches[0].id;
412
+ if (matches.length > 1)
413
+ throw new PingCodeError("Wiki 空間名稱不唯一,請從候選中選擇:" + formatCandidates(matches.map((item) => `${item.name}/${item.identifier} (${item.id})`), matches.length), "CONFLICT");
414
+ const candidates = await listAllSpaces(source);
415
+ throw new PingCodeError("找不到 Wiki 空間:" + name + "。可用候選:" + formatCandidates(candidates.map((item) => `${item.name}/${item.identifier} (${item.id})`), candidates.length), "NOT_FOUND");
416
+ }
417
+ async function resolvePageReference(source, spaceId, id, name) {
418
+ if ((id === undefined) === (name === undefined))
419
+ throw new PingCodeError("必須且只能提供 Wiki 頁面 ID、短 ID 或名稱", "BAD_REQUEST");
420
+ if (id !== undefined) {
421
+ if (id.includes("://")) {
422
+ try {
423
+ id = decodeURIComponent(new URL(id).pathname.split("/").filter(Boolean).at(-1) ?? id);
424
+ }
425
+ catch {
426
+ throw new PingCodeError("Wiki 頁面 URL 無效", "BAD_REQUEST");
427
+ }
428
+ }
429
+ try {
430
+ const page = await source.getPage(id);
431
+ if (page.space.id !== spaceId)
432
+ throw new PingCodeError("Wiki 頁面不屬於指定空間", "BAD_REQUEST");
433
+ return page.id;
434
+ }
435
+ catch (error) {
436
+ if (!(error instanceof PingCodeError) || error.code !== "NOT_FOUND")
437
+ throw error;
438
+ }
439
+ }
440
+ const pages = await listAllPages(source, spaceId);
441
+ const normalizedName = name?.trim().toLocaleLowerCase();
442
+ const matches = pages.filter((page) => page.space.id === spaceId && (id === undefined
443
+ ? page.name.trim().toLocaleLowerCase() === normalizedName
444
+ : page.id === id || page.short_id === id));
445
+ if (matches.length === 1)
446
+ return matches[0].id;
447
+ if (matches.length > 1)
448
+ throw new PingCodeError("Wiki 頁面引用不唯一,請選擇候選:" + formatCandidates(matches.map((item) => `${item.name} (${item.id})`), matches.length), "CONFLICT");
449
+ throw new PingCodeError("找不到此空間中的 Wiki 頁面引用。可用候選:" + formatCandidates(pages.filter((page) => page.space.id === spaceId).map((item) => `${item.name} (${item.id})`), pages.length), "NOT_FOUND");
450
+ }
451
+ async function assertPageBelongsToSpace(source, pageId, spaceId) {
452
+ const page = await source.getPage(pageId);
453
+ if (page.space.id !== spaceId)
454
+ throw new PingCodeError("父頁面不屬於目標 Wiki 空間", "BAD_REQUEST");
455
+ }
456
+ async function listAllPages(source, spaceId) {
457
+ const pages = [];
458
+ for (let pageIndex = 0; pageIndex < 20; pageIndex++) {
459
+ const result = paginatedSchema(wikiPageSchema).parse(await source.listPages({ space_id: spaceId, page_index: pageIndex, page_size: 100 }));
460
+ pages.push(...result.values);
461
+ if (pages.length >= result.total || result.values.length === 0)
462
+ return pages;
463
+ }
464
+ throw new PingCodeError("Wiki 頁面目錄超過 2000 項掃描上限,請縮小空間範圍或使用頁面 ID", "BAD_REQUEST");
465
+ }
466
+ async function listAllSpaces(source) {
467
+ const spaces = [];
468
+ for (let pageIndex = 0; pageIndex < 20; pageIndex++) {
469
+ const result = paginatedSchema(wikiSpaceSchema).parse(await source.listSpaces({ page_index: pageIndex, page_size: 100 }));
470
+ spaces.push(...result.values);
471
+ if (spaces.length >= result.total || result.values.length === 0)
472
+ return spaces;
473
+ }
474
+ throw new PingCodeError("Wiki 空間目錄超過 2000 項掃描上限,請使用 ID 或縮小搜尋範圍", "BAD_REQUEST");
475
+ }
476
+ function formatCandidates(values, total) {
477
+ const visible = values.slice(0, 20).join("、") || "目前沒有候選";
478
+ return total > 20 ? `${visible};尚有 ${total - 20} 項,請先使用 Wiki 列表工具縮小範圍` : visible;
479
+ }
480
+ async function listInitialMemberChoices(services) {
481
+ const metadata = services.getMetadataSource();
482
+ const [users, teams] = await Promise.all([
483
+ metadata.searchUsers({ pageIndex: 0, pageSize: 100 }),
484
+ metadata.listTeams({ pageIndex: 0, pageSize: 100 }),
485
+ ]);
486
+ const format = (values, total) => {
487
+ const visible = values.slice(0, 20).join("、") || "目錄沒有返回候選";
488
+ return total > 20 ? `${visible};共 ${total} 項,請縮小選擇範圍` : visible;
489
+ };
490
+ const userChoices = users.values.map((user) => `${user.name ?? user.display_name ?? "未命名使用者"} [user] (${user.id})`);
491
+ const teamChoices = teams.values.map((team) => `${team.name} [user_group] (${team.id})`);
492
+ return `可選使用者:${format(userChoices, users.total)}。可選用戶組:${format(teamChoices, teams.total)}。請展示候選並等待使用者確認;未列出的使用者可用 pingcode_user_search 搜尋,未列出的用戶組可由使用者提供名稱供系統解析;若不加入,明確傳 members: []。`;
493
+ }
494
+ async function findByName(list, schema, matches) {
495
+ const values = [];
496
+ for (let pageIndex = 0; pageIndex < 20; pageIndex++) {
497
+ const result = paginatedSchema(schema).parse(await list({ page_index: pageIndex, page_size: 100 }));
498
+ values.push(...result.values);
499
+ if (values.length >= result.total || result.values.length === 0)
500
+ return values.filter(matches);
501
+ }
502
+ throw new PingCodeError("Wiki 空間目錄超過 2000 項掃描上限,請使用 ID 或縮小搜尋範圍", "BAD_REQUEST");
503
+ }
504
+ function previewText(result) {
505
+ const value = result;
506
+ const lines = [`Wiki 預覽:建立 ${value.counts.creates} 項,更新 ${value.counts.updates} 項`];
507
+ for (const operation of value.operations) {
508
+ lines.push(`操作:${operation.action === "create" ? "建立" : "更新"}${operation.targetId ? `(${operation.targetId})` : ""}`);
509
+ for (const [key, field] of Object.entries(operation.changes)) {
510
+ if (isBeforeAfterChange(field)) {
511
+ lines.push(`${key}(目前):${formatPreviewChangeValue(field.before)}`);
512
+ lines.push(`${key}(預計):${formatPreviewChangeValue(field.after)}`);
513
+ }
514
+ else if (key === "content")
515
+ lines.push(`正文(${Buffer.byteLength(String(field), "utf8")} bytes):\n${String(field)}`);
516
+ else
517
+ lines.push(`${key}:${JSON.stringify(field)}`);
518
+ }
519
+ }
520
+ for (const warning of value.warnings ?? [])
521
+ lines.push(`警告:${warning}`);
522
+ lines.push("核對以上差異後,由 Agent 呼叫 Commit。內部 Approval 資料不需手動輸入。");
523
+ return lines.join("\n");
524
+ }
525
+ function isBeforeAfterChange(value) {
526
+ return typeof value === "object" && value !== null
527
+ && Object.prototype.hasOwnProperty.call(value, "before")
528
+ && Object.prototype.hasOwnProperty.call(value, "after");
529
+ }
530
+ function formatPreviewChangeValue(value) {
531
+ if (value === null || value === undefined)
532
+ return "未設定";
533
+ return typeof value === "string" ? value : JSON.stringify(value);
534
+ }
535
+ //# sourceMappingURL=wiki-write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wiki-write.js","sourceRoot":"","sources":["../../../src/mcp/tools/wiki-write.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"wiki.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/wiki.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAalD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA8K7F"}
1
+ {"version":3,"file":"wiki.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/wiki.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAalD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CA+K7F"}