From 9ebd5fefd694780ff3d1b7298a35658a93df71ce Mon Sep 17 00:00:00 2001 From: Alec Date: Mon, 9 Mar 2026 14:36:48 +0800 Subject: [PATCH 1/3] feat(feishu): add delete_record tool for bitable --- extensions/feishu/src/bitable.ts | 40 ++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/extensions/feishu/src/bitable.ts b/extensions/feishu/src/bitable.ts index e7d027694d1..0e286e6776a 100644 --- a/extensions/feishu/src/bitable.ts +++ b/extensions/feishu/src/bitable.ts @@ -438,6 +438,18 @@ async function updateRecord( }; } +async function deleteRecord(client: Lark.Client, appToken: string, tableId: string, recordId: string) { + const res = await client.bitable.appTableRecord.delete({ + path: { app_token: appToken, table_id: tableId, record_id: recordId }, + }); + ensureLarkSuccess(res, "bitable.appTableRecord.delete", { appToken, tableId, recordId }); + + return { + deleted: true, + record_id: recordId, + }; +} + // ============ Schemas ============ const GetMetaSchema = Type.Object({ @@ -530,6 +542,14 @@ const UpdateRecordSchema = Type.Object({ }), }); +const DeleteRecordSchema = Type.Object({ + app_token: Type.String({ + description: "Bitable app token (use feishu_bitable_get_meta to get from URL)", + }), + table_id: Type.String({ description: "Table ID (from URL: ?table=YYY)" }), + record_id: Type.String({ description: "Record ID to delete" }), +}); + // ============ Tool Registration ============ export function registerFeishuBitableTools(api: OpenClawPluginApi) { @@ -684,6 +704,26 @@ export function registerFeishuBitableTools(api: OpenClawPluginApi) { }, }); + registerBitableTool<{ + app_token: string; + table_id: string; + record_id: string; + accountId?: string; + }>({ + name: "feishu_bitable_delete_record", + label: "Feishu Bitable Delete Record", + description: "Delete a record (row) from a Bitable table", + parameters: DeleteRecordSchema, + async execute({ params, defaultAccountId }) { + return deleteRecord( + getClient(params, defaultAccountId), + params.app_token, + params.table_id, + params.record_id, + ); + }, + }); + registerBitableTool<{ name: string; folder_token?: string; accountId?: string }>({ name: "feishu_bitable_create_app", label: "Feishu Bitable Create App", From f9e18adcace5d723f98c96505df7a27998899880 Mon Sep 17 00:00:00 2001 From: Alec Date: Mon, 9 Mar 2026 14:48:43 +0800 Subject: [PATCH 2/3] feat(feishu): add irreversibility warning to delete_record description --- extensions/feishu/src/bitable.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extensions/feishu/src/bitable.ts b/extensions/feishu/src/bitable.ts index 0e286e6776a..31d052a659a 100644 --- a/extensions/feishu/src/bitable.ts +++ b/extensions/feishu/src/bitable.ts @@ -712,7 +712,7 @@ export function registerFeishuBitableTools(api: OpenClawPluginApi) { }>({ name: "feishu_bitable_delete_record", label: "Feishu Bitable Delete Record", - description: "Delete a record (row) from a Bitable table", + description: "Permanently delete a record (row) from a Bitable table. This action is irreversible.", parameters: DeleteRecordSchema, async execute({ params, defaultAccountId }) { return deleteRecord( From fef5b0622cca488255bd287d9b78e7e7767eabcf Mon Sep 17 00:00:00 2001 From: Alec Date: Mon, 9 Mar 2026 16:20:37 +0800 Subject: [PATCH 3/3] style: format code --- extensions/feishu/src/bitable.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/extensions/feishu/src/bitable.ts b/extensions/feishu/src/bitable.ts index 31d052a659a..c4680684618 100644 --- a/extensions/feishu/src/bitable.ts +++ b/extensions/feishu/src/bitable.ts @@ -438,7 +438,12 @@ async function updateRecord( }; } -async function deleteRecord(client: Lark.Client, appToken: string, tableId: string, recordId: string) { +async function deleteRecord( + client: Lark.Client, + appToken: string, + tableId: string, + recordId: string, +) { const res = await client.bitable.appTableRecord.delete({ path: { app_token: appToken, table_id: tableId, record_id: recordId }, }); @@ -712,7 +717,8 @@ export function registerFeishuBitableTools(api: OpenClawPluginApi) { }>({ name: "feishu_bitable_delete_record", label: "Feishu Bitable Delete Record", - description: "Permanently delete a record (row) from a Bitable table. This action is irreversible.", + description: + "Permanently delete a record (row) from a Bitable table. This action is irreversible.", parameters: DeleteRecordSchema, async execute({ params, defaultAccountId }) { return deleteRecord(