






















@@ -39,27 +39,6 @@ function optionalWikiSpaceId(value: unknown, fieldName: string): string | undefi
3939return requireWikiSpaceId(value, fieldName);
4040}
414142-function validateWikiSpaceIds(params: { action?: unknown } & Record<string, unknown>): {
43-spaceId?: string;
44-targetSpaceId?: string;
45-} {
46-switch (params.action) {
47-case "nodes":
48-case "create":
49-case "rename":
50-return { spaceId: requireWikiSpaceId(params.space_id, "space_id") };
51-case "move":
52-return {
53-spaceId: requireWikiSpaceId(params.space_id, "space_id"),
54-targetSpaceId: optionalWikiSpaceId(params.target_space_id, "target_space_id"),
55-};
56-case "search":
57-return { spaceId: optionalWikiSpaceId(params.space_id, "space_id") };
58-default:
59-return {};
60-}
61-}
62-6342async function listSpaces(client: Lark.Client) {
6443const res = await client.wiki.space.list({});
6544if (res.code !== 0) {
@@ -223,42 +202,60 @@ export function registerFeishuWikiTools(api: OpenClawPluginApi) {
223202async execute(_toolCallId, params) {
224203const p = params as FeishuWikiExecuteParams;
225204try {
226-const { spaceId, targetSpaceId } = validateWikiSpaceIds(
227-p as { action?: unknown } & Record<string, unknown>,
228-);
229-const client = createFeishuToolClient({
230- api,
231-executeParams: p,
232- defaultAccountId,
233-});
205+const createClient = () =>
206+createFeishuToolClient({
207+ api,
208+executeParams: p,
209+ defaultAccountId,
210+});
234211switch (p.action) {
235212case "spaces":
236-return jsonToolResult(await listSpaces(client));
237-case "nodes":
238-return jsonToolResult(await listNodes(client, spaceId!, p.parent_node_token));
213+return jsonToolResult(await listSpaces(createClient()));
214+case "nodes": {
215+const spaceId = requireWikiSpaceId(p.space_id, "space_id");
216+return jsonToolResult(
217+await listNodes(createClient(), spaceId, p.parent_node_token),
218+);
219+}
239220case "get":
240-return jsonToolResult(await getNode(client, p.token));
221+return jsonToolResult(await getNode(createClient(), p.token));
241222case "search":
223+optionalWikiSpaceId(p.space_id, "space_id");
224+createClient();
242225return jsonToolResult({
243226error:
244227"Search is not available. Use feishu_wiki with action: 'nodes' to browse or action: 'get' to lookup by token.",
245228});
246-case "create":
229+case "create": {
230+const spaceId = requireWikiSpaceId(p.space_id, "space_id");
247231return jsonToolResult(
248-await createNode(client, spaceId!, p.title, p.obj_type, p.parent_node_token),
232+await createNode(
233+createClient(),
234+spaceId,
235+p.title,
236+p.obj_type,
237+p.parent_node_token,
238+),
249239);
250-case "move":
240+}
241+case "move": {
242+const spaceId = requireWikiSpaceId(p.space_id, "space_id");
251243return jsonToolResult(
252244await moveNode(
253-client,
254-spaceId!,
245+createClient(),
246+spaceId,
255247p.node_token,
256-targetSpaceId,
248+optionalWikiSpaceId(p.target_space_id, "target_space_id"),
257249p.target_parent_token,
258250),
259251);
260-case "rename":
261-return jsonToolResult(await renameNode(client, spaceId!, p.node_token, p.title));
252+}
253+case "rename": {
254+const spaceId = requireWikiSpaceId(p.space_id, "space_id");
255+return jsonToolResult(
256+await renameNode(createClient(), spaceId, p.node_token, p.title),
257+);
258+}
262259default:
263260return unknownToolActionResult((p as { action?: unknown }).action);
264261}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。