@bobotu/feishu-fork 0.1.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/LICENSE +21 -0
- package/README.md +922 -0
- package/index.ts +65 -0
- package/openclaw.plugin.json +10 -0
- package/package.json +72 -0
- package/skills/feishu-doc/SKILL.md +161 -0
- package/skills/feishu-doc/references/block-types.md +102 -0
- package/skills/feishu-drive/SKILL.md +96 -0
- package/skills/feishu-perm/SKILL.md +90 -0
- package/skills/feishu-task/SKILL.md +210 -0
- package/skills/feishu-wiki/SKILL.md +96 -0
- package/src/accounts.ts +140 -0
- package/src/bitable-tools/actions.ts +199 -0
- package/src/bitable-tools/common.ts +90 -0
- package/src/bitable-tools/index.ts +1 -0
- package/src/bitable-tools/meta.ts +80 -0
- package/src/bitable-tools/register.ts +195 -0
- package/src/bitable-tools/schemas.ts +221 -0
- package/src/bot.ts +1125 -0
- package/src/channel.ts +334 -0
- package/src/client.ts +114 -0
- package/src/config-schema.ts +237 -0
- package/src/dedup.ts +54 -0
- package/src/directory.ts +165 -0
- package/src/doc-tools/actions.ts +341 -0
- package/src/doc-tools/common.ts +33 -0
- package/src/doc-tools/index.ts +2 -0
- package/src/doc-tools/register.ts +90 -0
- package/src/doc-tools/schemas.ts +85 -0
- package/src/doc-write-service.ts +711 -0
- package/src/drive-tools/actions.ts +182 -0
- package/src/drive-tools/common.ts +18 -0
- package/src/drive-tools/index.ts +2 -0
- package/src/drive-tools/register.ts +71 -0
- package/src/drive-tools/schemas.ts +67 -0
- package/src/dynamic-agent.ts +135 -0
- package/src/external-keys.ts +19 -0
- package/src/media.ts +510 -0
- package/src/mention.ts +121 -0
- package/src/monitor.ts +323 -0
- package/src/onboarding.ts +449 -0
- package/src/outbound.ts +40 -0
- package/src/perm-tools/actions.ts +111 -0
- package/src/perm-tools/common.ts +18 -0
- package/src/perm-tools/index.ts +2 -0
- package/src/perm-tools/register.ts +65 -0
- package/src/perm-tools/schemas.ts +52 -0
- package/src/policy.ts +117 -0
- package/src/probe.ts +147 -0
- package/src/reactions.ts +160 -0
- package/src/reply-dispatcher.ts +240 -0
- package/src/runtime.ts +14 -0
- package/src/send.ts +391 -0
- package/src/streaming-card.ts +211 -0
- package/src/targets.ts +58 -0
- package/src/task-tools/actions.ts +590 -0
- package/src/task-tools/common.ts +18 -0
- package/src/task-tools/constants.ts +13 -0
- package/src/task-tools/index.ts +1 -0
- package/src/task-tools/register.ts +263 -0
- package/src/task-tools/schemas.ts +567 -0
- package/src/text/markdown-links.ts +104 -0
- package/src/tools-common/feishu-api.ts +184 -0
- package/src/tools-common/tool-context.ts +23 -0
- package/src/tools-common/tool-exec.ts +73 -0
- package/src/tools-config.ts +22 -0
- package/src/types.ts +79 -0
- package/src/typing.ts +75 -0
- package/src/wiki-tools/actions.ts +166 -0
- package/src/wiki-tools/common.ts +18 -0
- package/src/wiki-tools/index.ts +2 -0
- package/src/wiki-tools/register.ts +66 -0
- package/src/wiki-tools/schemas.ts +55 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import type { TSchema } from "@sinclair/typebox";
|
|
2
|
+
import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
|
|
3
|
+
import type { ResolvedFeishuAccount } from "../types.js";
|
|
4
|
+
import { hasFeishuToolEnabledForAnyAccount, withFeishuToolClient } from "../tools-common/tool-exec.js";
|
|
5
|
+
import {
|
|
6
|
+
addTaskToTasklist,
|
|
7
|
+
addTasklistMembers,
|
|
8
|
+
createSubtask,
|
|
9
|
+
createTask,
|
|
10
|
+
createTasklist,
|
|
11
|
+
deleteTaskAttachment,
|
|
12
|
+
deleteTask,
|
|
13
|
+
deleteTasklist,
|
|
14
|
+
getTaskAttachment,
|
|
15
|
+
getTask,
|
|
16
|
+
getTasklist,
|
|
17
|
+
listTasklists,
|
|
18
|
+
removeTaskFromTasklist,
|
|
19
|
+
removeTasklistMembers,
|
|
20
|
+
listTaskAttachments,
|
|
21
|
+
uploadTaskAttachment,
|
|
22
|
+
updateTask,
|
|
23
|
+
updateTasklist,
|
|
24
|
+
} from "./actions.js";
|
|
25
|
+
import { errorResult, json, type TaskClient } from "./common.js";
|
|
26
|
+
import {
|
|
27
|
+
AddTaskToTasklistSchema,
|
|
28
|
+
type AddTaskToTasklistParams,
|
|
29
|
+
AddTasklistMembersSchema,
|
|
30
|
+
type AddTasklistMembersParams,
|
|
31
|
+
CreateSubtaskSchema,
|
|
32
|
+
type CreateSubtaskParams,
|
|
33
|
+
CreateTaskSchema,
|
|
34
|
+
type CreateTaskParams,
|
|
35
|
+
CreateTasklistSchema,
|
|
36
|
+
type CreateTasklistParams,
|
|
37
|
+
DeleteTaskAttachmentSchema,
|
|
38
|
+
type DeleteTaskAttachmentParams,
|
|
39
|
+
DeleteTaskSchema,
|
|
40
|
+
type DeleteTaskParams,
|
|
41
|
+
DeleteTasklistSchema,
|
|
42
|
+
type DeleteTasklistParams,
|
|
43
|
+
GetTaskAttachmentSchema,
|
|
44
|
+
type GetTaskAttachmentParams,
|
|
45
|
+
GetTaskSchema,
|
|
46
|
+
type GetTaskParams,
|
|
47
|
+
GetTasklistSchema,
|
|
48
|
+
type GetTasklistParams,
|
|
49
|
+
ListTaskAttachmentsSchema,
|
|
50
|
+
type ListTaskAttachmentsParams,
|
|
51
|
+
ListTasklistsSchema,
|
|
52
|
+
type ListTasklistsParams,
|
|
53
|
+
RemoveTaskFromTasklistSchema,
|
|
54
|
+
type RemoveTaskFromTasklistParams,
|
|
55
|
+
RemoveTasklistMembersSchema,
|
|
56
|
+
type RemoveTasklistMembersParams,
|
|
57
|
+
UploadTaskAttachmentSchema,
|
|
58
|
+
type UploadTaskAttachmentParams,
|
|
59
|
+
UpdateTaskSchema,
|
|
60
|
+
UpdateTasklistSchema,
|
|
61
|
+
type UpdateTaskParams,
|
|
62
|
+
type UpdateTasklistParams,
|
|
63
|
+
} from "./schemas.js";
|
|
64
|
+
import { BYTES_PER_MEGABYTE, DEFAULT_TASK_MEDIA_MAX_MB } from "./constants.js";
|
|
65
|
+
|
|
66
|
+
type TaskToolSpec<P> = {
|
|
67
|
+
name: string;
|
|
68
|
+
label: string;
|
|
69
|
+
description: string;
|
|
70
|
+
parameters: TSchema;
|
|
71
|
+
run: (args: { client: TaskClient; account: ResolvedFeishuAccount }, params: P) => Promise<unknown>;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
function registerTaskTool<P>(api: OpenClawPluginApi, spec: TaskToolSpec<P>) {
|
|
75
|
+
api.registerTool(
|
|
76
|
+
{
|
|
77
|
+
name: spec.name,
|
|
78
|
+
label: spec.label,
|
|
79
|
+
description: spec.description,
|
|
80
|
+
parameters: spec.parameters,
|
|
81
|
+
async execute(_toolCallId, params) {
|
|
82
|
+
try {
|
|
83
|
+
return await withFeishuToolClient({
|
|
84
|
+
api,
|
|
85
|
+
toolName: spec.name,
|
|
86
|
+
requiredTool: "task",
|
|
87
|
+
run: async ({ client, account }) =>
|
|
88
|
+
json(await spec.run({ client: client as TaskClient, account }, params as P)),
|
|
89
|
+
});
|
|
90
|
+
} catch (err) {
|
|
91
|
+
return errorResult(err);
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
{ name: spec.name },
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export function registerFeishuTaskTools(api: OpenClawPluginApi) {
|
|
100
|
+
if (!api.config) {
|
|
101
|
+
api.logger.debug?.("feishu_task: No config available, skipping task tools");
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (!hasFeishuToolEnabledForAnyAccount(api.config)) {
|
|
106
|
+
api.logger.debug?.("feishu_task: No Feishu accounts configured, skipping task tools");
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (!hasFeishuToolEnabledForAnyAccount(api.config, "task")) {
|
|
111
|
+
api.logger.debug?.("feishu_task: task tools disabled in config");
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
registerTaskTool<CreateTaskParams>(api, {
|
|
116
|
+
name: "feishu_task_create",
|
|
117
|
+
label: "Feishu Task Create",
|
|
118
|
+
description: "Create a Feishu task (task v2)",
|
|
119
|
+
parameters: CreateTaskSchema,
|
|
120
|
+
run: async ({ client }, params) => createTask(client, params),
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
registerTaskTool<CreateSubtaskParams>(api, {
|
|
124
|
+
name: "feishu_task_subtask_create",
|
|
125
|
+
label: "Feishu Task Subtask Create",
|
|
126
|
+
description: "Create a Feishu subtask under a parent task (task v2)",
|
|
127
|
+
parameters: CreateSubtaskSchema,
|
|
128
|
+
run: async ({ client }, params) => createSubtask(client, params),
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
registerTaskTool<AddTaskToTasklistParams>(api, {
|
|
132
|
+
name: "feishu_task_add_tasklist",
|
|
133
|
+
label: "Feishu Task Add Tasklist",
|
|
134
|
+
description: "Add a task into a tasklist (task v2)",
|
|
135
|
+
parameters: AddTaskToTasklistSchema,
|
|
136
|
+
run: async ({ client }, params) => addTaskToTasklist(client, params),
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
registerTaskTool<RemoveTaskFromTasklistParams>(api, {
|
|
140
|
+
name: "feishu_task_remove_tasklist",
|
|
141
|
+
label: "Feishu Task Remove Tasklist",
|
|
142
|
+
description: "Remove a task from a tasklist (task v2)",
|
|
143
|
+
parameters: RemoveTaskFromTasklistSchema,
|
|
144
|
+
run: async ({ client }, params) => removeTaskFromTasklist(client, params),
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
registerTaskTool<CreateTasklistParams>(api, {
|
|
148
|
+
name: "feishu_tasklist_create",
|
|
149
|
+
label: "Feishu Tasklist Create",
|
|
150
|
+
description: "Create a Feishu tasklist (task v2)",
|
|
151
|
+
parameters: CreateTasklistSchema,
|
|
152
|
+
run: async ({ client }, params) => createTasklist(client, params),
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
registerTaskTool<GetTasklistParams>(api, {
|
|
156
|
+
name: "feishu_tasklist_get",
|
|
157
|
+
label: "Feishu Tasklist Get",
|
|
158
|
+
description: "Get a Feishu tasklist by tasklist_guid (task v2)",
|
|
159
|
+
parameters: GetTasklistSchema,
|
|
160
|
+
run: async ({ client }, params) => getTasklist(client, params),
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
registerTaskTool<ListTasklistsParams>(api, {
|
|
164
|
+
name: "feishu_tasklist_list",
|
|
165
|
+
label: "Feishu Tasklist List",
|
|
166
|
+
description: "List Feishu tasklists (task v2)",
|
|
167
|
+
parameters: ListTasklistsSchema,
|
|
168
|
+
run: async ({ client }, params) => listTasklists(client, params),
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
registerTaskTool<UpdateTasklistParams>(api, {
|
|
172
|
+
name: "feishu_tasklist_update",
|
|
173
|
+
label: "Feishu Tasklist Update",
|
|
174
|
+
description: "Update a Feishu tasklist by tasklist_guid (task v2 patch)",
|
|
175
|
+
parameters: UpdateTasklistSchema,
|
|
176
|
+
run: async ({ client }, params) => updateTasklist(client, params),
|
|
177
|
+
});
|
|
178
|
+
|
|
179
|
+
registerTaskTool<DeleteTasklistParams>(api, {
|
|
180
|
+
name: "feishu_tasklist_delete",
|
|
181
|
+
label: "Feishu Tasklist Delete",
|
|
182
|
+
description: "Delete a Feishu tasklist by tasklist_guid (task v2)",
|
|
183
|
+
parameters: DeleteTasklistSchema,
|
|
184
|
+
run: async ({ client }, { tasklist_guid }) => deleteTasklist(client, tasklist_guid),
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
registerTaskTool<AddTasklistMembersParams>(api, {
|
|
188
|
+
name: "feishu_tasklist_add_members",
|
|
189
|
+
label: "Feishu Tasklist Add Members",
|
|
190
|
+
description: "Add members to a Feishu tasklist (task v2)",
|
|
191
|
+
parameters: AddTasklistMembersSchema,
|
|
192
|
+
run: async ({ client }, params) => addTasklistMembers(client, params),
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
registerTaskTool<RemoveTasklistMembersParams>(api, {
|
|
196
|
+
name: "feishu_tasklist_remove_members",
|
|
197
|
+
label: "Feishu Tasklist Remove Members",
|
|
198
|
+
description: "Remove members from a Feishu tasklist (task v2)",
|
|
199
|
+
parameters: RemoveTasklistMembersSchema,
|
|
200
|
+
run: async ({ client }, params) => removeTasklistMembers(client, params),
|
|
201
|
+
});
|
|
202
|
+
|
|
203
|
+
registerTaskTool<UploadTaskAttachmentParams>(api, {
|
|
204
|
+
name: "feishu_task_attachment_upload",
|
|
205
|
+
label: "Feishu Task Attachment Upload",
|
|
206
|
+
description: "Upload an attachment to a Feishu task (task v2)",
|
|
207
|
+
parameters: UploadTaskAttachmentSchema,
|
|
208
|
+
run: async ({ client, account }, params) => {
|
|
209
|
+
const mediaMaxBytes = (account.config?.mediaMaxMb ?? DEFAULT_TASK_MEDIA_MAX_MB) * BYTES_PER_MEGABYTE;
|
|
210
|
+
return uploadTaskAttachment(client, params, { maxBytes: mediaMaxBytes });
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
registerTaskTool<ListTaskAttachmentsParams>(api, {
|
|
215
|
+
name: "feishu_task_attachment_list",
|
|
216
|
+
label: "Feishu Task Attachment List",
|
|
217
|
+
description: "List attachments for a Feishu task (task v2)",
|
|
218
|
+
parameters: ListTaskAttachmentsSchema,
|
|
219
|
+
run: async ({ client }, params) => listTaskAttachments(client, params),
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
registerTaskTool<GetTaskAttachmentParams>(api, {
|
|
223
|
+
name: "feishu_task_attachment_get",
|
|
224
|
+
label: "Feishu Task Attachment Get",
|
|
225
|
+
description: "Get a Feishu task attachment by attachment_guid (task v2)",
|
|
226
|
+
parameters: GetTaskAttachmentSchema,
|
|
227
|
+
run: async ({ client }, params) => getTaskAttachment(client, params),
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
registerTaskTool<DeleteTaskAttachmentParams>(api, {
|
|
231
|
+
name: "feishu_task_attachment_delete",
|
|
232
|
+
label: "Feishu Task Attachment Delete",
|
|
233
|
+
description: "Delete a Feishu task attachment by attachment_guid (task v2)",
|
|
234
|
+
parameters: DeleteTaskAttachmentSchema,
|
|
235
|
+
run: async ({ client }, params) => deleteTaskAttachment(client, params),
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
registerTaskTool<DeleteTaskParams>(api, {
|
|
239
|
+
name: "feishu_task_delete",
|
|
240
|
+
label: "Feishu Task Delete",
|
|
241
|
+
description: "Delete a Feishu task by task_guid (task v2)",
|
|
242
|
+
parameters: DeleteTaskSchema,
|
|
243
|
+
run: async ({ client }, { task_guid }) => deleteTask(client, task_guid),
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
registerTaskTool<GetTaskParams>(api, {
|
|
247
|
+
name: "feishu_task_get",
|
|
248
|
+
label: "Feishu Task Get",
|
|
249
|
+
description: "Get Feishu task details by task_guid (task v2)",
|
|
250
|
+
parameters: GetTaskSchema,
|
|
251
|
+
run: async ({ client }, params) => getTask(client, params),
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
registerTaskTool<UpdateTaskParams>(api, {
|
|
255
|
+
name: "feishu_task_update",
|
|
256
|
+
label: "Feishu Task Update",
|
|
257
|
+
description: "Update a Feishu task by task_guid (task v2 patch)",
|
|
258
|
+
parameters: UpdateTaskSchema,
|
|
259
|
+
run: async ({ client }, params) => updateTask(client, params),
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
api.logger.debug?.("feishu_task: Registered task, tasklist, subtask, and attachment tools");
|
|
263
|
+
}
|