@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.
- package/CHANGELOG.md +25 -0
- package/README.md +10 -2
- package/dist/auth/cimd-client-resolver.js +1 -1
- package/dist/domain/requirement-context.d.ts +1 -1
- package/dist/domain/requirement-context.d.ts.map +1 -1
- package/dist/mcp/create-server.d.ts.map +1 -1
- package/dist/mcp/create-server.js +5 -1
- package/dist/mcp/create-server.js.map +1 -1
- package/dist/mcp/tool-registry.d.ts +1 -1
- package/dist/mcp/tool-registry.d.ts.map +1 -1
- package/dist/mcp/tool-registry.js +7 -0
- package/dist/mcp/tool-registry.js.map +1 -1
- package/dist/mcp/tools/wiki-space-members.d.ts +7 -0
- package/dist/mcp/tools/wiki-space-members.d.ts.map +1 -0
- package/dist/mcp/tools/wiki-space-members.js +303 -0
- package/dist/mcp/tools/wiki-space-members.js.map +1 -0
- package/dist/mcp/tools/wiki-write.d.ts +8 -0
- package/dist/mcp/tools/wiki-write.d.ts.map +1 -0
- package/dist/mcp/tools/wiki-write.js +535 -0
- package/dist/mcp/tools/wiki-write.js.map +1 -0
- package/dist/mcp/tools/wiki.d.ts.map +1 -1
- package/dist/mcp/tools/wiki.js +12 -1
- package/dist/mcp/tools/wiki.js.map +1 -1
- package/dist/pingcode/client.d.ts +2 -0
- package/dist/pingcode/client.d.ts.map +1 -1
- package/dist/pingcode/client.js +12 -2
- package/dist/pingcode/client.js.map +1 -1
- package/dist/pingcode/schemas.d.ts +32 -0
- package/dist/pingcode/schemas.d.ts.map +1 -1
- package/dist/pingcode/schemas.js +30 -0
- package/dist/pingcode/schemas.js.map +1 -1
- package/dist/services.d.ts +3 -0
- package/dist/services.d.ts.map +1 -1
- package/dist/services.js +8 -0
- package/dist/services.js.map +1 -1
- package/dist/sources/metadata-source.js +1 -1
- package/dist/sources/wiki-source.js +1 -1
- package/dist/sources/wiki-source.js.map +1 -1
- package/dist/sources/wiki-write-source.d.ts +243 -0
- package/dist/sources/wiki-write-source.d.ts.map +1 -0
- package/dist/sources/wiki-write-source.js +96 -0
- package/dist/sources/wiki-write-source.js.map +1 -0
- package/dist/write/approval.d.ts +3 -1
- package/dist/write/approval.d.ts.map +1 -1
- package/dist/write/approval.js +2 -0
- package/dist/write/approval.js.map +1 -1
- 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,
|
|
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"}
|