@m1heng-clawd/feishu 0.1.11 → 0.1.12

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 (46) hide show
  1. package/README.md +123 -4
  2. package/index.ts +6 -6
  3. package/package.json +13 -3
  4. package/skills/feishu-doc/SKILL.md +40 -2
  5. package/skills/feishu-task/SKILL.md +210 -0
  6. package/src/bitable-tools/index.ts +1 -0
  7. package/src/bot.ts +181 -70
  8. package/src/channel.ts +2 -0
  9. package/src/config-schema.ts +4 -0
  10. package/src/doc-tools/actions.ts +341 -0
  11. package/src/doc-tools/common.ts +33 -0
  12. package/src/doc-tools/index.ts +2 -0
  13. package/src/doc-tools/register.ts +90 -0
  14. package/src/{doc-schema.ts → doc-tools/schemas.ts} +31 -1
  15. package/src/drive-tools/actions.ts +182 -0
  16. package/src/drive-tools/common.ts +18 -0
  17. package/src/drive-tools/index.ts +2 -0
  18. package/src/drive-tools/register.ts +71 -0
  19. package/src/{drive-schema.ts → drive-tools/schemas.ts} +2 -1
  20. package/src/media.ts +5 -3
  21. package/src/perm-tools/actions.ts +111 -0
  22. package/src/perm-tools/common.ts +18 -0
  23. package/src/perm-tools/index.ts +2 -0
  24. package/src/perm-tools/register.ts +65 -0
  25. package/src/policy.ts +13 -0
  26. package/src/reply-dispatcher.ts +6 -4
  27. package/src/send.ts +33 -2
  28. package/src/task-tools/actions.ts +466 -13
  29. package/src/task-tools/constants.ts +13 -0
  30. package/src/task-tools/index.ts +1 -0
  31. package/src/task-tools/register.ts +175 -13
  32. package/src/task-tools/schemas.ts +433 -4
  33. package/src/text/markdown-links.ts +104 -0
  34. package/src/types.ts +1 -0
  35. package/src/wiki-tools/actions.ts +166 -0
  36. package/src/wiki-tools/common.ts +18 -0
  37. package/src/wiki-tools/index.ts +2 -0
  38. package/src/wiki-tools/register.ts +66 -0
  39. package/src/bitable.ts +0 -1
  40. package/src/docx.ts +0 -276
  41. package/src/drive.ts +0 -237
  42. package/src/perm.ts +0 -165
  43. package/src/task.ts +0 -1
  44. package/src/wiki.ts +0 -223
  45. /package/src/{perm-schema.ts → perm-tools/schemas.ts} +0 -0
  46. /package/src/{wiki-schema.ts → wiki-tools/schemas.ts} +0 -0
@@ -1,31 +1,77 @@
1
1
  import type { TSchema } from "@sinclair/typebox";
2
2
  import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
3
+ import type { ResolvedFeishuAccount } from "../types.js";
3
4
  import { hasFeishuToolEnabledForAnyAccount, withFeishuToolClient } from "../tools-common/tool-exec.js";
4
- import { createTask, deleteTask, getTask, updateTask } from "./actions.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";
5
25
  import { errorResult, json, type TaskClient } from "./common.js";
6
26
  import {
27
+ AddTaskToTasklistSchema,
28
+ type AddTaskToTasklistParams,
29
+ AddTasklistMembersSchema,
30
+ type AddTasklistMembersParams,
31
+ CreateSubtaskSchema,
32
+ type CreateSubtaskParams,
7
33
  CreateTaskSchema,
8
34
  type CreateTaskParams,
35
+ CreateTasklistSchema,
36
+ type CreateTasklistParams,
37
+ DeleteTaskAttachmentSchema,
38
+ type DeleteTaskAttachmentParams,
9
39
  DeleteTaskSchema,
10
40
  type DeleteTaskParams,
41
+ DeleteTasklistSchema,
42
+ type DeleteTasklistParams,
43
+ GetTaskAttachmentSchema,
44
+ type GetTaskAttachmentParams,
11
45
  GetTaskSchema,
12
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,
13
59
  UpdateTaskSchema,
60
+ UpdateTasklistSchema,
14
61
  type UpdateTaskParams,
62
+ type UpdateTasklistParams,
15
63
  } from "./schemas.js";
64
+ import { BYTES_PER_MEGABYTE, DEFAULT_TASK_MEDIA_MAX_MB } from "./constants.js";
16
65
 
17
- type ToolSpec<P> = {
66
+ type TaskToolSpec<P> = {
18
67
  name: string;
19
68
  label: string;
20
69
  description: string;
21
70
  parameters: TSchema;
22
- run: (client: TaskClient, params: P) => Promise<unknown>;
71
+ run: (args: { client: TaskClient; account: ResolvedFeishuAccount }, params: P) => Promise<unknown>;
23
72
  };
24
73
 
25
- function registerTaskTool<P>(
26
- api: OpenClawPluginApi,
27
- spec: ToolSpec<P>,
28
- ) {
74
+ function registerTaskTool<P>(api: OpenClawPluginApi, spec: TaskToolSpec<P>) {
29
75
  api.registerTool(
30
76
  {
31
77
  name: spec.name,
@@ -38,7 +84,8 @@ function registerTaskTool<P>(
38
84
  api,
39
85
  toolName: spec.name,
40
86
  requiredTool: "task",
41
- run: async ({ client }) => json(await spec.run(client as TaskClient, params as P)),
87
+ run: async ({ client, account }) =>
88
+ json(await spec.run({ client: client as TaskClient, account }, params as P)),
42
89
  });
43
90
  } catch (err) {
44
91
  return errorResult(err);
@@ -70,7 +117,122 @@ export function registerFeishuTaskTools(api: OpenClawPluginApi) {
70
117
  label: "Feishu Task Create",
71
118
  description: "Create a Feishu task (task v2)",
72
119
  parameters: CreateTaskSchema,
73
- run: (client, params) => createTask(client, params),
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),
74
236
  });
75
237
 
76
238
  registerTaskTool<DeleteTaskParams>(api, {
@@ -78,7 +240,7 @@ export function registerFeishuTaskTools(api: OpenClawPluginApi) {
78
240
  label: "Feishu Task Delete",
79
241
  description: "Delete a Feishu task by task_guid (task v2)",
80
242
  parameters: DeleteTaskSchema,
81
- run: (client, { task_guid }) => deleteTask(client, task_guid),
243
+ run: async ({ client }, { task_guid }) => deleteTask(client, task_guid),
82
244
  });
83
245
 
84
246
  registerTaskTool<GetTaskParams>(api, {
@@ -86,7 +248,7 @@ export function registerFeishuTaskTools(api: OpenClawPluginApi) {
86
248
  label: "Feishu Task Get",
87
249
  description: "Get Feishu task details by task_guid (task v2)",
88
250
  parameters: GetTaskSchema,
89
- run: (client, params) => getTask(client, params),
251
+ run: async ({ client }, params) => getTask(client, params),
90
252
  });
91
253
 
92
254
  registerTaskTool<UpdateTaskParams>(api, {
@@ -94,8 +256,8 @@ export function registerFeishuTaskTools(api: OpenClawPluginApi) {
94
256
  label: "Feishu Task Update",
95
257
  description: "Update a Feishu task by task_guid (task v2 patch)",
96
258
  parameters: UpdateTaskSchema,
97
- run: (client, params) => updateTask(client, params),
259
+ run: async ({ client }, params) => updateTask(client, params),
98
260
  });
99
261
 
100
- api.logger.debug?.("feishu_task: Registered 4 task tools");
262
+ api.logger.debug?.("feishu_task: Registered task, tasklist, subtask, and attachment tools");
101
263
  }