@openclaw-cn/feishu 0.1.8
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/README.md +86 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/src/accounts.d.ts +33 -0
- package/dist/src/accounts.d.ts.map +1 -0
- package/dist/src/accounts.js +110 -0
- package/dist/src/accounts.js.map +1 -0
- package/dist/src/bitable.d.ts +211 -0
- package/dist/src/bitable.d.ts.map +1 -0
- package/dist/src/bitable.js +721 -0
- package/dist/src/bitable.js.map +1 -0
- package/dist/src/bot.d.ts +53 -0
- package/dist/src/bot.d.ts.map +1 -0
- package/dist/src/bot.js +853 -0
- package/dist/src/bot.js.map +1 -0
- package/dist/src/calendar-schema.d.ts +18 -0
- package/dist/src/calendar-schema.d.ts.map +1 -0
- package/dist/src/calendar-schema.js +52 -0
- package/dist/src/calendar-schema.js.map +1 -0
- package/dist/src/calendar.d.ts +441 -0
- package/dist/src/calendar.d.ts.map +1 -0
- package/dist/src/calendar.js +257 -0
- package/dist/src/calendar.js.map +1 -0
- package/dist/src/channel.d.ts +4 -0
- package/dist/src/channel.d.ts.map +1 -0
- package/dist/src/channel.js +331 -0
- package/dist/src/channel.js.map +1 -0
- package/dist/src/client.d.ts +35 -0
- package/dist/src/client.d.ts.map +1 -0
- package/dist/src/client.js +86 -0
- package/dist/src/client.js.map +1 -0
- package/dist/src/config-schema.d.ts +176 -0
- package/dist/src/config-schema.d.ts.map +1 -0
- package/dist/src/config-schema.js +56 -0
- package/dist/src/config-schema.js.map +1 -0
- package/dist/src/directory.d.ts +36 -0
- package/dist/src/directory.d.ts.map +1 -0
- package/dist/src/directory.js +129 -0
- package/dist/src/directory.js.map +1 -0
- package/dist/src/doc-schema.d.ts +37 -0
- package/dist/src/doc-schema.d.ts.map +1 -0
- package/dist/src/doc-schema.js +51 -0
- package/dist/src/doc-schema.js.map +1 -0
- package/dist/src/docx.d.ts +3 -0
- package/dist/src/docx.d.ts.map +1 -0
- package/dist/src/docx.js +608 -0
- package/dist/src/docx.js.map +1 -0
- package/dist/src/drive-schema.d.ts +24 -0
- package/dist/src/drive-schema.d.ts.map +1 -0
- package/dist/src/drive-schema.js +39 -0
- package/dist/src/drive-schema.js.map +1 -0
- package/dist/src/drive.d.ts +3 -0
- package/dist/src/drive.d.ts.map +1 -0
- package/dist/src/drive.js +181 -0
- package/dist/src/drive.js.map +1 -0
- package/dist/src/dynamic-agent.d.ts +19 -0
- package/dist/src/dynamic-agent.d.ts.map +1 -0
- package/dist/src/dynamic-agent.js +91 -0
- package/dist/src/dynamic-agent.js.map +1 -0
- package/dist/src/im-schema.d.ts +38 -0
- package/dist/src/im-schema.d.ts.map +1 -0
- package/dist/src/im-schema.js +73 -0
- package/dist/src/im-schema.js.map +1 -0
- package/dist/src/im.d.ts +70 -0
- package/dist/src/im.d.ts.map +1 -0
- package/dist/src/im.js +328 -0
- package/dist/src/im.js.map +1 -0
- package/dist/src/media.d.ts +99 -0
- package/dist/src/media.d.ts.map +1 -0
- package/dist/src/media.js +454 -0
- package/dist/src/media.js.map +1 -0
- package/dist/src/mention.d.ts +49 -0
- package/dist/src/mention.d.ts.map +1 -0
- package/dist/src/mention.js +99 -0
- package/dist/src/mention.js.map +1 -0
- package/dist/src/monitor.d.ts +16 -0
- package/dist/src/monitor.d.ts.map +1 -0
- package/dist/src/monitor.js +288 -0
- package/dist/src/monitor.js.map +1 -0
- package/dist/src/onboarding.d.ts +3 -0
- package/dist/src/onboarding.d.ts.map +1 -0
- package/dist/src/onboarding.js +119 -0
- package/dist/src/onboarding.js.map +1 -0
- package/dist/src/outbound.d.ts +3 -0
- package/dist/src/outbound.d.ts.map +1 -0
- package/dist/src/outbound.js +53 -0
- package/dist/src/outbound.js.map +1 -0
- package/dist/src/perm-schema.d.ts +21 -0
- package/dist/src/perm-schema.d.ts.map +1 -0
- package/dist/src/perm-schema.js +47 -0
- package/dist/src/perm-schema.js.map +1 -0
- package/dist/src/perm.d.ts +14 -0
- package/dist/src/perm.d.ts.map +1 -0
- package/dist/src/perm.js +106 -0
- package/dist/src/perm.js.map +1 -0
- package/dist/src/policy.d.ts +28 -0
- package/dist/src/policy.d.ts.map +1 -0
- package/dist/src/policy.js +61 -0
- package/dist/src/policy.js.map +1 -0
- package/dist/src/probe.d.ts +4 -0
- package/dist/src/probe.d.ts.map +1 -0
- package/dist/src/probe.js +41 -0
- package/dist/src/probe.js.map +1 -0
- package/dist/src/reactions.d.ts +66 -0
- package/dist/src/reactions.d.ts.map +1 -0
- package/dist/src/reactions.js +104 -0
- package/dist/src/reactions.js.map +1 -0
- package/dist/src/reply-dispatcher.d.ts +41 -0
- package/dist/src/reply-dispatcher.d.ts.map +1 -0
- package/dist/src/reply-dispatcher.js +249 -0
- package/dist/src/reply-dispatcher.js.map +1 -0
- package/dist/src/runtime.d.ts +4 -0
- package/dist/src/runtime.d.ts.map +1 -0
- package/dist/src/runtime.js +11 -0
- package/dist/src/runtime.js.map +1 -0
- package/dist/src/send.d.ts +76 -0
- package/dist/src/send.d.ts.map +1 -0
- package/dist/src/send.js +250 -0
- package/dist/src/send.js.map +1 -0
- package/dist/src/sheets-schema.d.ts +12 -0
- package/dist/src/sheets-schema.d.ts.map +1 -0
- package/dist/src/sheets-schema.js +35 -0
- package/dist/src/sheets-schema.js.map +1 -0
- package/dist/src/sheets.d.ts +45 -0
- package/dist/src/sheets.d.ts.map +1 -0
- package/dist/src/sheets.js +197 -0
- package/dist/src/sheets.js.map +1 -0
- package/dist/src/streaming-card.d.ts +29 -0
- package/dist/src/streaming-card.d.ts.map +1 -0
- package/dist/src/streaming-card.js +192 -0
- package/dist/src/streaming-card.js.map +1 -0
- package/dist/src/targets.d.ts +7 -0
- package/dist/src/targets.d.ts.map +1 -0
- package/dist/src/targets.js +70 -0
- package/dist/src/targets.js.map +1 -0
- package/dist/src/task-schema.d.ts +19 -0
- package/dist/src/task-schema.d.ts.map +1 -0
- package/dist/src/task-schema.js +54 -0
- package/dist/src/task-schema.js.map +1 -0
- package/dist/src/task.d.ts +1193 -0
- package/dist/src/task.d.ts.map +1 -0
- package/dist/src/task.js +274 -0
- package/dist/src/task.js.map +1 -0
- package/dist/src/tools-config.d.ts +12 -0
- package/dist/src/tools-config.d.ts.map +1 -0
- package/dist/src/tools-config.js +24 -0
- package/dist/src/tools-config.js.map +1 -0
- package/dist/src/types.d.ts +74 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/typing.d.ts +22 -0
- package/dist/src/typing.d.ts.map +1 -0
- package/dist/src/typing.js +60 -0
- package/dist/src/typing.js.map +1 -0
- package/dist/src/wiki-schema.d.ts +34 -0
- package/dist/src/wiki-schema.d.ts.map +1 -0
- package/dist/src/wiki-schema.js +43 -0
- package/dist/src/wiki-schema.js.map +1 -0
- package/dist/src/wiki.d.ts +3 -0
- package/dist/src/wiki.d.ts.map +1 -0
- package/dist/src/wiki.js +176 -0
- package/dist/src/wiki.js.map +1 -0
- package/openclaw.plugin.json +9 -0
- package/package.json +79 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type Static } from "@sinclair/typebox";
|
|
2
|
+
export declare const FeishuDriveSchema: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TObject<{
|
|
3
|
+
action: import("@sinclair/typebox").TLiteral<"list">;
|
|
4
|
+
folder_token: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
5
|
+
}>, import("@sinclair/typebox").TObject<{
|
|
6
|
+
action: import("@sinclair/typebox").TLiteral<"info">;
|
|
7
|
+
file_token: import("@sinclair/typebox").TString;
|
|
8
|
+
type: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"doc">, import("@sinclair/typebox").TLiteral<"docx">, import("@sinclair/typebox").TLiteral<"sheet">, import("@sinclair/typebox").TLiteral<"bitable">, import("@sinclair/typebox").TLiteral<"folder">, import("@sinclair/typebox").TLiteral<"file">, import("@sinclair/typebox").TLiteral<"mindnote">, import("@sinclair/typebox").TLiteral<"shortcut">]>;
|
|
9
|
+
}>, import("@sinclair/typebox").TObject<{
|
|
10
|
+
action: import("@sinclair/typebox").TLiteral<"create_folder">;
|
|
11
|
+
name: import("@sinclair/typebox").TString;
|
|
12
|
+
folder_token: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
13
|
+
}>, import("@sinclair/typebox").TObject<{
|
|
14
|
+
action: import("@sinclair/typebox").TLiteral<"move">;
|
|
15
|
+
file_token: import("@sinclair/typebox").TString;
|
|
16
|
+
type: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"doc">, import("@sinclair/typebox").TLiteral<"docx">, import("@sinclair/typebox").TLiteral<"sheet">, import("@sinclair/typebox").TLiteral<"bitable">, import("@sinclair/typebox").TLiteral<"folder">, import("@sinclair/typebox").TLiteral<"file">, import("@sinclair/typebox").TLiteral<"mindnote">, import("@sinclair/typebox").TLiteral<"shortcut">]>;
|
|
17
|
+
folder_token: import("@sinclair/typebox").TString;
|
|
18
|
+
}>, import("@sinclair/typebox").TObject<{
|
|
19
|
+
action: import("@sinclair/typebox").TLiteral<"delete">;
|
|
20
|
+
file_token: import("@sinclair/typebox").TString;
|
|
21
|
+
type: import("@sinclair/typebox").TUnion<[import("@sinclair/typebox").TLiteral<"doc">, import("@sinclair/typebox").TLiteral<"docx">, import("@sinclair/typebox").TLiteral<"sheet">, import("@sinclair/typebox").TLiteral<"bitable">, import("@sinclair/typebox").TLiteral<"folder">, import("@sinclair/typebox").TLiteral<"file">, import("@sinclair/typebox").TLiteral<"mindnote">, import("@sinclair/typebox").TLiteral<"shortcut">]>;
|
|
22
|
+
}>]>;
|
|
23
|
+
export type FeishuDriveParams = Static<typeof FeishuDriveSchema>;
|
|
24
|
+
//# sourceMappingURL=drive-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drive-schema.d.ts","sourceRoot":"","sources":["../../src/drive-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAatD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;IA8B5B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Type } from "@sinclair/typebox";
|
|
2
|
+
const FileType = Type.Union([
|
|
3
|
+
Type.Literal("doc"),
|
|
4
|
+
Type.Literal("docx"),
|
|
5
|
+
Type.Literal("sheet"),
|
|
6
|
+
Type.Literal("bitable"),
|
|
7
|
+
Type.Literal("folder"),
|
|
8
|
+
Type.Literal("file"),
|
|
9
|
+
Type.Literal("mindnote"),
|
|
10
|
+
Type.Literal("shortcut"),
|
|
11
|
+
]);
|
|
12
|
+
export const FeishuDriveSchema = Type.Union([
|
|
13
|
+
Type.Object({
|
|
14
|
+
action: Type.Literal("list"),
|
|
15
|
+
folder_token: Type.Optional(Type.String({ description: "Folder token (optional, omit for root directory)" })),
|
|
16
|
+
}),
|
|
17
|
+
Type.Object({
|
|
18
|
+
action: Type.Literal("info"),
|
|
19
|
+
file_token: Type.String({ description: "File or folder token" }),
|
|
20
|
+
type: FileType,
|
|
21
|
+
}),
|
|
22
|
+
Type.Object({
|
|
23
|
+
action: Type.Literal("create_folder"),
|
|
24
|
+
name: Type.String({ description: "Folder name" }),
|
|
25
|
+
folder_token: Type.Optional(Type.String({ description: "Parent folder token (optional, omit for root)" })),
|
|
26
|
+
}),
|
|
27
|
+
Type.Object({
|
|
28
|
+
action: Type.Literal("move"),
|
|
29
|
+
file_token: Type.String({ description: "File token to move" }),
|
|
30
|
+
type: FileType,
|
|
31
|
+
folder_token: Type.String({ description: "Target folder token" }),
|
|
32
|
+
}),
|
|
33
|
+
Type.Object({
|
|
34
|
+
action: Type.Literal("delete"),
|
|
35
|
+
file_token: Type.String({ description: "File token to delete" }),
|
|
36
|
+
type: FileType,
|
|
37
|
+
}),
|
|
38
|
+
]);
|
|
39
|
+
//# sourceMappingURL=drive-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drive-schema.js","sourceRoot":"","sources":["../../src/drive-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,MAAM,mBAAmB,CAAC;AAEtD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;IACnB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACpB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;IACrB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IACtB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IACpB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;IACxB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC;QACV,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAC5B,YAAY,EAAE,IAAI,CAAC,QAAQ,CACzB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,kDAAkD,EAAE,CAAC,CACjF;KACF,CAAC;IACF,IAAI,CAAC,MAAM,CAAC;QACV,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAC5B,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,sBAAsB,EAAE,CAAC;QAChE,IAAI,EAAE,QAAQ;KACf,CAAC;IACF,IAAI,CAAC,MAAM,CAAC;QACV,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;QACrC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;QACjD,YAAY,EAAE,IAAI,CAAC,QAAQ,CACzB,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,+CAA+C,EAAE,CAAC,CAC9E;KACF,CAAC;IACF,IAAI,CAAC,MAAM,CAAC;QACV,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAC5B,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC;QAC9D,IAAI,EAAE,QAAQ;QACd,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC;KAClE,CAAC;IACF,IAAI,CAAC,MAAM,CAAC;QACV,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC9B,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,sBAAsB,EAAE,CAAC;QAChE,IAAI,EAAE,QAAQ;KACf,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drive.d.ts","sourceRoot":"","sources":["../../src/drive.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAyK7D,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,iBAAiB,QAwD9D"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { listEnabledFeishuAccounts } from "./accounts.js";
|
|
2
|
+
import { createFeishuClient } from "./client.js";
|
|
3
|
+
import { FeishuDriveSchema } from "./drive-schema.js";
|
|
4
|
+
import { resolveToolsConfig } from "./tools-config.js";
|
|
5
|
+
// ============ Helpers ============
|
|
6
|
+
function json(data) {
|
|
7
|
+
return {
|
|
8
|
+
content: [{ type: "text", text: JSON.stringify(data, null, 2) }],
|
|
9
|
+
details: data,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
// ============ Actions ============
|
|
13
|
+
async function getRootFolderToken(client) {
|
|
14
|
+
// Use generic HTTP client to call the root folder meta API
|
|
15
|
+
// as it's not directly exposed in the SDK
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- accessing internal SDK property
|
|
17
|
+
const domain = client.domain ?? "https://open.feishu.cn";
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- accessing internal SDK property
|
|
19
|
+
const res = (await client.httpInstance.get(`${domain}/open-apis/drive/explorer/v2/root_folder/meta`));
|
|
20
|
+
if (res.code !== 0) {
|
|
21
|
+
throw new Error(res.msg ?? "Failed to get root folder");
|
|
22
|
+
}
|
|
23
|
+
const token = res.data?.token;
|
|
24
|
+
if (!token) {
|
|
25
|
+
throw new Error("Root folder token not found");
|
|
26
|
+
}
|
|
27
|
+
return token;
|
|
28
|
+
}
|
|
29
|
+
async function listFolder(client, folderToken) {
|
|
30
|
+
// Filter out invalid folder_token values (empty, "0", etc.)
|
|
31
|
+
const validFolderToken = folderToken && folderToken !== "0" ? folderToken : undefined;
|
|
32
|
+
const res = await client.drive.file.list({
|
|
33
|
+
params: validFolderToken ? { folder_token: validFolderToken } : {},
|
|
34
|
+
});
|
|
35
|
+
if (res.code !== 0) {
|
|
36
|
+
throw new Error(res.msg);
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
files: res.data?.files?.map((f) => ({
|
|
40
|
+
token: f.token,
|
|
41
|
+
name: f.name,
|
|
42
|
+
type: f.type,
|
|
43
|
+
url: f.url,
|
|
44
|
+
created_time: f.created_time,
|
|
45
|
+
modified_time: f.modified_time,
|
|
46
|
+
owner_id: f.owner_id,
|
|
47
|
+
})) ?? [],
|
|
48
|
+
next_page_token: res.data?.next_page_token,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
async function getFileInfo(client, fileToken, folderToken) {
|
|
52
|
+
// Use list with folder_token to find file info
|
|
53
|
+
const res = await client.drive.file.list({
|
|
54
|
+
params: folderToken ? { folder_token: folderToken } : {},
|
|
55
|
+
});
|
|
56
|
+
if (res.code !== 0) {
|
|
57
|
+
throw new Error(res.msg);
|
|
58
|
+
}
|
|
59
|
+
const file = res.data?.files?.find((f) => f.token === fileToken);
|
|
60
|
+
if (!file) {
|
|
61
|
+
throw new Error(`File not found: ${fileToken}`);
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
token: file.token,
|
|
65
|
+
name: file.name,
|
|
66
|
+
type: file.type,
|
|
67
|
+
url: file.url,
|
|
68
|
+
created_time: file.created_time,
|
|
69
|
+
modified_time: file.modified_time,
|
|
70
|
+
owner_id: file.owner_id,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
async function createFolder(client, name, folderToken) {
|
|
74
|
+
// Feishu supports using folder_token="0" as the root folder.
|
|
75
|
+
// We *try* to resolve the real root token (explorer API), but fall back to "0"
|
|
76
|
+
// because some tenants/apps return 400 for that explorer endpoint.
|
|
77
|
+
let effectiveToken = folderToken && folderToken !== "0" ? folderToken : "0";
|
|
78
|
+
if (effectiveToken === "0") {
|
|
79
|
+
try {
|
|
80
|
+
effectiveToken = await getRootFolderToken(client);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// ignore and keep "0"
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
const res = await client.drive.file.createFolder({
|
|
87
|
+
data: {
|
|
88
|
+
name,
|
|
89
|
+
folder_token: effectiveToken,
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
if (res.code !== 0) {
|
|
93
|
+
throw new Error(res.msg);
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
token: res.data?.token,
|
|
97
|
+
url: res.data?.url,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
async function moveFile(client, fileToken, type, folderToken) {
|
|
101
|
+
const res = await client.drive.file.move({
|
|
102
|
+
path: { file_token: fileToken },
|
|
103
|
+
data: {
|
|
104
|
+
type: type,
|
|
105
|
+
folder_token: folderToken,
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
if (res.code !== 0) {
|
|
109
|
+
throw new Error(res.msg);
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
success: true,
|
|
113
|
+
task_id: res.data?.task_id,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
async function deleteFile(client, fileToken, type) {
|
|
117
|
+
const res = await client.drive.file.delete({
|
|
118
|
+
path: { file_token: fileToken },
|
|
119
|
+
params: {
|
|
120
|
+
type: type,
|
|
121
|
+
},
|
|
122
|
+
});
|
|
123
|
+
if (res.code !== 0) {
|
|
124
|
+
throw new Error(res.msg);
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
success: true,
|
|
128
|
+
task_id: res.data?.task_id,
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// ============ Tool Registration ============
|
|
132
|
+
export function registerFeishuDriveTools(api) {
|
|
133
|
+
if (!api.config) {
|
|
134
|
+
api.logger.debug?.("feishu_drive: No config available, skipping drive tools");
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const accounts = listEnabledFeishuAccounts(api.config);
|
|
138
|
+
if (accounts.length === 0) {
|
|
139
|
+
api.logger.debug?.("feishu_drive: No Feishu accounts configured, skipping drive tools");
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const firstAccount = accounts[0];
|
|
143
|
+
const toolsCfg = resolveToolsConfig(firstAccount.config.tools);
|
|
144
|
+
if (!toolsCfg.drive) {
|
|
145
|
+
api.logger.debug?.("feishu_drive: drive tool disabled in config");
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const getClient = () => createFeishuClient(firstAccount);
|
|
149
|
+
api.registerTool({
|
|
150
|
+
name: "feishu_drive",
|
|
151
|
+
label: "Feishu Drive",
|
|
152
|
+
description: "Feishu cloud storage operations. Actions: list, info, create_folder, move, delete",
|
|
153
|
+
parameters: FeishuDriveSchema,
|
|
154
|
+
async execute(_toolCallId, params) {
|
|
155
|
+
const p = params;
|
|
156
|
+
try {
|
|
157
|
+
const client = getClient();
|
|
158
|
+
switch (p.action) {
|
|
159
|
+
case "list":
|
|
160
|
+
return json(await listFolder(client, p.folder_token));
|
|
161
|
+
case "info":
|
|
162
|
+
return json(await getFileInfo(client, p.file_token));
|
|
163
|
+
case "create_folder":
|
|
164
|
+
return json(await createFolder(client, p.name, p.folder_token));
|
|
165
|
+
case "move":
|
|
166
|
+
return json(await moveFile(client, p.file_token, p.type, p.folder_token));
|
|
167
|
+
case "delete":
|
|
168
|
+
return json(await deleteFile(client, p.file_token, p.type));
|
|
169
|
+
default:
|
|
170
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- exhaustive check fallback
|
|
171
|
+
return json({ error: `Unknown action: ${p.action}` });
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
catch (err) {
|
|
175
|
+
return json({ error: err instanceof Error ? err.message : String(err) });
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
}, { name: "feishu_drive" });
|
|
179
|
+
api.logger.info?.(`feishu_drive: Registered feishu_drive tool`);
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=drive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drive.js","sourceRoot":"","sources":["../../src/drive.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAA0B,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,oCAAoC;AAEpC,SAAS,IAAI,CAAC,IAAa;IACzB,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QACzE,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,oCAAoC;AAEpC,KAAK,UAAU,kBAAkB,CAAC,MAAmB;IACnD,2DAA2D;IAC3D,0CAA0C;IAC1C,iGAAiG;IACjG,MAAM,MAAM,GAAI,MAAc,CAAC,MAAM,IAAI,wBAAwB,CAAC;IAClE,iGAAiG;IACjG,MAAM,GAAG,GAAG,CAAC,MAAO,MAAc,CAAC,YAAY,CAAC,GAAG,CACjD,GAAG,MAAM,+CAA+C,CACzD,CAA8D,CAAC;IAChE,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,2BAA2B,CAAC,CAAC;IAC1D,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;IAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAAmB,EAAE,WAAoB;IACjE,4DAA4D;IAC5D,MAAM,gBAAgB,GAAG,WAAW,IAAI,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IACtF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QACvC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE;KACnE,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,KAAK,EACH,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3B,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,GAAG,EAAE,CAAC,CAAC,GAAG;YACV,YAAY,EAAE,CAAC,CAAC,YAAY;YAC5B,aAAa,EAAE,CAAC,CAAC,aAAa;YAC9B,QAAQ,EAAE,CAAC,CAAC,QAAQ;SACrB,CAAC,CAAC,IAAI,EAAE;QACX,eAAe,EAAE,GAAG,CAAC,IAAI,EAAE,eAAe;KAC3C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,MAAmB,EAAE,SAAiB,EAAE,WAAoB;IACrF,+CAA+C;IAC/C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QACvC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;KACzD,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IACjE,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mBAAmB,SAAS,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,MAAmB,EAAE,IAAY,EAAE,WAAoB;IACjF,6DAA6D;IAC7D,+EAA+E;IAC/E,mEAAmE;IACnE,IAAI,cAAc,GAAG,WAAW,IAAI,WAAW,KAAK,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;IAC5E,IAAI,cAAc,KAAK,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,cAAc,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;IACH,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;QAC/C,IAAI,EAAE;YACJ,IAAI;YACJ,YAAY,EAAE,cAAc;SAC7B;KACF,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK;QACtB,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG;KACnB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,MAAmB,EAAE,SAAiB,EAAE,IAAY,EAAE,WAAmB;IAC/F,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QACvC,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;QAC/B,IAAI,EAAE;YACJ,IAAI,EAAE,IAQM;YACZ,YAAY,EAAE,WAAW;SAC1B;KACF,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO;KAC3B,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAAmB,EAAE,SAAiB,EAAE,IAAY;IAC5E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;QACzC,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;QAC/B,MAAM,EAAE;YACN,IAAI,EAAE,IASQ;SACf;KACF,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO;KAC3B,CAAC;AACJ,CAAC;AAED,8CAA8C;AAE9C,MAAM,UAAU,wBAAwB,CAAC,GAAsB;IAC7D,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAChB,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,yDAAyD,CAAC,CAAC;QAC9E,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,yBAAyB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACvD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,mEAAmE,CAAC,CAAC;QACxF,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/D,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpB,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,6CAA6C,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAEzD,GAAG,CAAC,YAAY,CACd;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,cAAc;QACrB,WAAW,EACT,mFAAmF;QACrF,UAAU,EAAE,iBAAiB;QAC7B,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM;YAC/B,MAAM,CAAC,GAAG,MAA2B,CAAC;YACtC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;gBAC3B,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;oBACjB,KAAK,MAAM;wBACT,OAAO,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;oBACxD,KAAK,MAAM;wBACT,OAAO,IAAI,CAAC,MAAM,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;oBACvD,KAAK,eAAe;wBAClB,OAAO,IAAI,CAAC,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;oBAClE,KAAK,MAAM;wBACT,OAAO,IAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;oBAC5E,KAAK,QAAQ;wBACX,OAAO,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC9D;wBACE,2FAA2F;wBAC3F,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAoB,CAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACnE,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3E,CAAC;QACH,CAAC;KACF,EACD,EAAE,IAAI,EAAE,cAAc,EAAE,CACzB,CAAC;IAEF,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,4CAA4C,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { OpenClawConfig, PluginRuntime } from "openclaw/plugin-sdk";
|
|
2
|
+
import type { DynamicAgentCreationConfig } from "./types.js";
|
|
3
|
+
export type MaybeCreateDynamicAgentResult = {
|
|
4
|
+
created: boolean;
|
|
5
|
+
updatedCfg: OpenClawConfig;
|
|
6
|
+
agentId?: string;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Check if a dynamic agent should be created for a DM user and create it if needed.
|
|
10
|
+
* This creates a unique agent instance with its own workspace for each DM user.
|
|
11
|
+
*/
|
|
12
|
+
export declare function maybeCreateDynamicAgent(params: {
|
|
13
|
+
cfg: OpenClawConfig;
|
|
14
|
+
runtime: PluginRuntime;
|
|
15
|
+
senderOpenId: string;
|
|
16
|
+
dynamicCfg: DynamicAgentCreationConfig;
|
|
17
|
+
log: (msg: string) => void;
|
|
18
|
+
}): Promise<MaybeCreateDynamicAgentResult>;
|
|
19
|
+
//# sourceMappingURL=dynamic-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-agent.d.ts","sourceRoot":"","sources":["../../src/dynamic-agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,MAAM,6BAA6B,GAAG;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,0BAA0B,CAAC;IACvC,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5B,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAkGzC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import os from "node:os";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
/**
|
|
5
|
+
* Check if a dynamic agent should be created for a DM user and create it if needed.
|
|
6
|
+
* This creates a unique agent instance with its own workspace for each DM user.
|
|
7
|
+
*/
|
|
8
|
+
export async function maybeCreateDynamicAgent(params) {
|
|
9
|
+
const { cfg, runtime, senderOpenId, dynamicCfg, log } = params;
|
|
10
|
+
// Check if there's already a binding for this user
|
|
11
|
+
const existingBindings = cfg.bindings ?? [];
|
|
12
|
+
const hasBinding = existingBindings.some((b) => b.match?.channel === "feishu" &&
|
|
13
|
+
b.match?.peer?.kind === "dm" &&
|
|
14
|
+
b.match?.peer?.id === senderOpenId);
|
|
15
|
+
if (hasBinding) {
|
|
16
|
+
return { created: false, updatedCfg: cfg };
|
|
17
|
+
}
|
|
18
|
+
// Check maxAgents limit if configured
|
|
19
|
+
if (dynamicCfg.maxAgents !== undefined) {
|
|
20
|
+
const feishuAgentCount = (cfg.agents?.list ?? []).filter((a) => a.id.startsWith("feishu-")).length;
|
|
21
|
+
if (feishuAgentCount >= dynamicCfg.maxAgents) {
|
|
22
|
+
log(`feishu: maxAgents limit (${dynamicCfg.maxAgents}) reached, not creating agent for ${senderOpenId}`);
|
|
23
|
+
return { created: false, updatedCfg: cfg };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
// Use full OpenID as agent ID suffix (OpenID format: ou_xxx is already filesystem-safe)
|
|
27
|
+
const agentId = `feishu-${senderOpenId}`;
|
|
28
|
+
// Check if agent already exists (but binding was missing)
|
|
29
|
+
const existingAgent = (cfg.agents?.list ?? []).find((a) => a.id === agentId);
|
|
30
|
+
if (existingAgent) {
|
|
31
|
+
// Agent exists but binding doesn't - just add the binding
|
|
32
|
+
log(`feishu: agent "${agentId}" exists, adding missing binding for ${senderOpenId}`);
|
|
33
|
+
const updatedCfg = {
|
|
34
|
+
...cfg,
|
|
35
|
+
bindings: [
|
|
36
|
+
...existingBindings,
|
|
37
|
+
{
|
|
38
|
+
agentId,
|
|
39
|
+
match: {
|
|
40
|
+
channel: "feishu",
|
|
41
|
+
peer: { kind: "dm", id: senderOpenId },
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
};
|
|
46
|
+
await runtime.config.writeConfigFile(updatedCfg);
|
|
47
|
+
return { created: true, updatedCfg, agentId };
|
|
48
|
+
}
|
|
49
|
+
// Resolve path templates with substitutions
|
|
50
|
+
const workspaceTemplate = dynamicCfg.workspaceTemplate ?? "~/.openclaw/workspace-{agentId}";
|
|
51
|
+
const agentDirTemplate = dynamicCfg.agentDirTemplate ?? "~/.openclaw/agents/{agentId}/agent";
|
|
52
|
+
const workspace = resolveUserPath(workspaceTemplate.replace("{userId}", senderOpenId).replace("{agentId}", agentId));
|
|
53
|
+
const agentDir = resolveUserPath(agentDirTemplate.replace("{userId}", senderOpenId).replace("{agentId}", agentId));
|
|
54
|
+
log(`feishu: creating dynamic agent "${agentId}" for user ${senderOpenId}`);
|
|
55
|
+
log(` workspace: ${workspace}`);
|
|
56
|
+
log(` agentDir: ${agentDir}`);
|
|
57
|
+
// Create directories
|
|
58
|
+
await fs.promises.mkdir(workspace, { recursive: true });
|
|
59
|
+
await fs.promises.mkdir(agentDir, { recursive: true });
|
|
60
|
+
// Update configuration with new agent and binding
|
|
61
|
+
const updatedCfg = {
|
|
62
|
+
...cfg,
|
|
63
|
+
agents: {
|
|
64
|
+
...cfg.agents,
|
|
65
|
+
list: [...(cfg.agents?.list ?? []), { id: agentId, workspace, agentDir }],
|
|
66
|
+
},
|
|
67
|
+
bindings: [
|
|
68
|
+
...existingBindings,
|
|
69
|
+
{
|
|
70
|
+
agentId,
|
|
71
|
+
match: {
|
|
72
|
+
channel: "feishu",
|
|
73
|
+
peer: { kind: "dm", id: senderOpenId },
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
};
|
|
78
|
+
// Write updated config using PluginRuntime API
|
|
79
|
+
await runtime.config.writeConfigFile(updatedCfg);
|
|
80
|
+
return { created: true, updatedCfg, agentId };
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Resolve a path that may start with ~ to the user's home directory.
|
|
84
|
+
*/
|
|
85
|
+
function resolveUserPath(p) {
|
|
86
|
+
if (p.startsWith("~/")) {
|
|
87
|
+
return path.join(os.homedir(), p.slice(2));
|
|
88
|
+
}
|
|
89
|
+
return p;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=dynamic-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamic-agent.js","sourceRoot":"","sources":["../../src/dynamic-agent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAS7B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAM7C;IACC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;IAE/D,mDAAmD;IACnD,MAAM,gBAAgB,GAAG,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC5C,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,QAAQ;QAC7B,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI;QAC5B,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,YAAY,CACrC,CAAC;IAEF,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;IAC7C,CAAC;IAED,sCAAsC;IACtC,IAAI,UAAU,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACvC,MAAM,gBAAgB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC7D,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAC3B,CAAC,MAAM,CAAC;QACT,IAAI,gBAAgB,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YAC7C,GAAG,CACD,4BAA4B,UAAU,CAAC,SAAS,qCAAqC,YAAY,EAAE,CACpG,CAAC;YACF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,wFAAwF;IACxF,MAAM,OAAO,GAAG,UAAU,YAAY,EAAE,CAAC;IAEzC,0DAA0D;IAC1D,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAC;IAC7E,IAAI,aAAa,EAAE,CAAC;QAClB,0DAA0D;QAC1D,GAAG,CAAC,kBAAkB,OAAO,wCAAwC,YAAY,EAAE,CAAC,CAAC;QAErF,MAAM,UAAU,GAAmB;YACjC,GAAG,GAAG;YACN,QAAQ,EAAE;gBACR,GAAG,gBAAgB;gBACnB;oBACE,OAAO;oBACP,KAAK,EAAE;wBACL,OAAO,EAAE,QAAQ;wBACjB,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE;qBACvC;iBACF;aACF;SACF,CAAC;QAEF,MAAM,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IAChD,CAAC;IAED,4CAA4C;IAC5C,MAAM,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,IAAI,iCAAiC,CAAC;IAC5F,MAAM,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,IAAI,oCAAoC,CAAC;IAE7F,MAAM,SAAS,GAAG,eAAe,CAC/B,iBAAiB,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAClF,CAAC;IACF,MAAM,QAAQ,GAAG,eAAe,CAC9B,gBAAgB,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CACjF,CAAC;IAEF,GAAG,CAAC,mCAAmC,OAAO,cAAc,YAAY,EAAE,CAAC,CAAC;IAC5E,GAAG,CAAC,gBAAgB,SAAS,EAAE,CAAC,CAAC;IACjC,GAAG,CAAC,eAAe,QAAQ,EAAE,CAAC,CAAC;IAE/B,qBAAqB;IACrB,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvD,kDAAkD;IAClD,MAAM,UAAU,GAAmB;QACjC,GAAG,GAAG;QACN,MAAM,EAAE;YACN,GAAG,GAAG,CAAC,MAAM;YACb,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;SAC1E;QACD,QAAQ,EAAE;YACR,GAAG,gBAAgB;YACnB;gBACE,OAAO;gBACP,KAAK,EAAE;oBACL,OAAO,EAAE,QAAQ;oBACjB,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,YAAY,EAAE;iBACvC;aACF;SACF;KACF,CAAC;IAEF,+CAA+C;IAC/C,MAAM,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;IAEjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,CAAS;IAChC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export declare const ListChatsSchema: import("@sinclair/typebox").TObject<{
|
|
2
|
+
page_size: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
3
|
+
page_token: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
4
|
+
}>;
|
|
5
|
+
export declare const GetChatSchema: import("@sinclair/typebox").TObject<{
|
|
6
|
+
chat_id: import("@sinclair/typebox").TString;
|
|
7
|
+
}>;
|
|
8
|
+
export declare const ListMembersSchema: import("@sinclair/typebox").TObject<{
|
|
9
|
+
chat_id: import("@sinclair/typebox").TString;
|
|
10
|
+
page_size: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
11
|
+
page_token: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
12
|
+
}>;
|
|
13
|
+
export declare const SendMessageSchema: import("@sinclair/typebox").TObject<{
|
|
14
|
+
receive_id: import("@sinclair/typebox").TString;
|
|
15
|
+
receive_id_type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnsafe<"open_id" | "user_id" | "union_id" | "chat_id" | "email">>;
|
|
16
|
+
msg_type: import("@sinclair/typebox").TUnsafe<"text" | "post" | "interactive">;
|
|
17
|
+
content: import("@sinclair/typebox").TString;
|
|
18
|
+
}>;
|
|
19
|
+
export declare const ReplyMessageSchema: import("@sinclair/typebox").TObject<{
|
|
20
|
+
message_id: import("@sinclair/typebox").TString;
|
|
21
|
+
msg_type: import("@sinclair/typebox").TUnsafe<"text" | "post" | "interactive">;
|
|
22
|
+
content: import("@sinclair/typebox").TString;
|
|
23
|
+
}>;
|
|
24
|
+
export declare const GetMessagesSchema: import("@sinclair/typebox").TObject<{
|
|
25
|
+
container_id: import("@sinclair/typebox").TString;
|
|
26
|
+
start_time: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
27
|
+
end_time: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
28
|
+
page_size: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TNumber>;
|
|
29
|
+
page_token: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
30
|
+
sort_type: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnsafe<"ByCreateTimeAsc" | "ByCreateTimeDesc">>;
|
|
31
|
+
}>;
|
|
32
|
+
export declare const CreateChatSchema: import("@sinclair/typebox").TObject<{
|
|
33
|
+
name: import("@sinclair/typebox").TString;
|
|
34
|
+
description: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
|
|
35
|
+
user_ids: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TArray<import("@sinclair/typebox").TString>>;
|
|
36
|
+
chat_mode: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TUnsafe<"group" | "topic">>;
|
|
37
|
+
}>;
|
|
38
|
+
//# sourceMappingURL=im-schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"im-schema.d.ts","sourceRoot":"","sources":["../../src/im-schema.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,eAAe;;;EAS1B,CAAC;AAEH,eAAO,MAAM,aAAa;;EAExB,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;EAU5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;EAc5B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;EAM7B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;EAe5B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;EAW3B,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Type } from "@sinclair/typebox";
|
|
2
|
+
import { optionalStringEnum, stringEnum } from "openclaw/plugin-sdk";
|
|
3
|
+
// ============ IM Tool Schemas ============
|
|
4
|
+
const RECEIVE_ID_TYPES = ["chat_id", "open_id", "user_id", "union_id", "email"];
|
|
5
|
+
const MSG_TYPES = ["text", "post", "interactive"];
|
|
6
|
+
const SORT_TYPES = ["ByCreateTimeAsc", "ByCreateTimeDesc"];
|
|
7
|
+
const CHAT_MODES = ["group", "topic"];
|
|
8
|
+
export const ListChatsSchema = Type.Object({
|
|
9
|
+
page_size: Type.Optional(Type.Number({
|
|
10
|
+
description: "每页数量 (1-100, 默认 20)",
|
|
11
|
+
minimum: 1,
|
|
12
|
+
maximum: 100,
|
|
13
|
+
})),
|
|
14
|
+
page_token: Type.Optional(Type.String({ description: "分页标记,首次请求不填" })),
|
|
15
|
+
});
|
|
16
|
+
export const GetChatSchema = Type.Object({
|
|
17
|
+
chat_id: Type.String({ description: "群聊 ID (oc_xxxx)" }),
|
|
18
|
+
});
|
|
19
|
+
export const ListMembersSchema = Type.Object({
|
|
20
|
+
chat_id: Type.String({ description: "群聊 ID (oc_xxxx)" }),
|
|
21
|
+
page_size: Type.Optional(Type.Number({
|
|
22
|
+
description: "每页数量 (1-100, 默认 20)",
|
|
23
|
+
minimum: 1,
|
|
24
|
+
maximum: 100,
|
|
25
|
+
})),
|
|
26
|
+
page_token: Type.Optional(Type.String({ description: "分页标记,首次请求不填" })),
|
|
27
|
+
});
|
|
28
|
+
export const SendMessageSchema = Type.Object({
|
|
29
|
+
receive_id: Type.String({
|
|
30
|
+
description: "接收方 ID,可以是 chat_id (oc_xxx)、open_id (ou_xxx) 或 user_id",
|
|
31
|
+
}),
|
|
32
|
+
receive_id_type: optionalStringEnum(RECEIVE_ID_TYPES, {
|
|
33
|
+
description: "接收方 ID 类型,默认自动识别 (oc_ 开头为 chat_id,ou_ 开头为 open_id)",
|
|
34
|
+
}),
|
|
35
|
+
msg_type: stringEnum(MSG_TYPES, {
|
|
36
|
+
description: "消息类型: text(纯文本), post(富文本), interactive(卡片)",
|
|
37
|
+
}),
|
|
38
|
+
content: Type.String({
|
|
39
|
+
description: '消息内容。text 类型: JSON 字符串 {"text":"hello"}; post 类型: 富文本 JSON; interactive 类型: 卡片 JSON。发送 @mention 请使用 <at user_id="ou_xxx">名字</at> 语法。',
|
|
40
|
+
}),
|
|
41
|
+
});
|
|
42
|
+
export const ReplyMessageSchema = Type.Object({
|
|
43
|
+
message_id: Type.String({ description: "要回复的消息 ID (om_xxx)" }),
|
|
44
|
+
msg_type: stringEnum(MSG_TYPES, {
|
|
45
|
+
description: "消息类型: text(纯文本), post(富文本), interactive(卡片)",
|
|
46
|
+
}),
|
|
47
|
+
content: Type.String({ description: "消息内容 (格式同 send_message)" }),
|
|
48
|
+
});
|
|
49
|
+
export const GetMessagesSchema = Type.Object({
|
|
50
|
+
container_id: Type.String({ description: "群聊 ID (oc_xxxx)" }),
|
|
51
|
+
start_time: Type.Optional(Type.String({ description: "起始时间 (Unix 秒级时间戳)" })),
|
|
52
|
+
end_time: Type.Optional(Type.String({ description: "结束时间 (Unix 秒级时间戳)" })),
|
|
53
|
+
page_size: Type.Optional(Type.Number({
|
|
54
|
+
description: "每页数量 (1-50, 默认 20)",
|
|
55
|
+
minimum: 1,
|
|
56
|
+
maximum: 50,
|
|
57
|
+
})),
|
|
58
|
+
page_token: Type.Optional(Type.String({ description: "分页标记,首次请求不填" })),
|
|
59
|
+
sort_type: optionalStringEnum(SORT_TYPES, {
|
|
60
|
+
description: "排序方式,默认 ByCreateTimeAsc",
|
|
61
|
+
}),
|
|
62
|
+
});
|
|
63
|
+
export const CreateChatSchema = Type.Object({
|
|
64
|
+
name: Type.String({ description: "群聊名称" }),
|
|
65
|
+
description: Type.Optional(Type.String({ description: "群聊描述" })),
|
|
66
|
+
user_ids: Type.Optional(Type.Array(Type.String(), {
|
|
67
|
+
description: "初始成员 open_id 列表",
|
|
68
|
+
})),
|
|
69
|
+
chat_mode: optionalStringEnum(CHAT_MODES, {
|
|
70
|
+
description: "群模式: group(普通群), topic(话题群),默认 group",
|
|
71
|
+
}),
|
|
72
|
+
});
|
|
73
|
+
//# sourceMappingURL=im-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"im-schema.js","sourceRoot":"","sources":["../../src/im-schema.ts"],"names":[],"mappings":"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"}
|
package/dist/src/im.d.ts
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
|
|
2
|
+
import { createFeishuClient } from "./client.js";
|
|
3
|
+
/** List all chats the bot has joined */
|
|
4
|
+
export declare function listChats(client: ReturnType<typeof createFeishuClient>, pageSize?: number, pageToken?: string): Promise<{
|
|
5
|
+
chats: {
|
|
6
|
+
chat_id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
description: string;
|
|
9
|
+
owner_id: string;
|
|
10
|
+
chat_mode: any;
|
|
11
|
+
chat_type: any;
|
|
12
|
+
member_count: any;
|
|
13
|
+
}[];
|
|
14
|
+
has_more: boolean;
|
|
15
|
+
page_token: string;
|
|
16
|
+
}>;
|
|
17
|
+
/** Get detailed info about a specific chat */
|
|
18
|
+
export declare function getChatInfo(client: ReturnType<typeof createFeishuClient>, chatId: string): Promise<{
|
|
19
|
+
chat_id: any;
|
|
20
|
+
name: string;
|
|
21
|
+
description: string;
|
|
22
|
+
owner_id: string;
|
|
23
|
+
chat_mode: any;
|
|
24
|
+
chat_type: any;
|
|
25
|
+
member_count: any;
|
|
26
|
+
bot_name: any;
|
|
27
|
+
}>;
|
|
28
|
+
/** List members of a chat */
|
|
29
|
+
export declare function listChatMembers(client: ReturnType<typeof createFeishuClient>, chatId: string, pageSize?: number, pageToken?: string): Promise<{
|
|
30
|
+
members: {
|
|
31
|
+
member_id: string;
|
|
32
|
+
member_id_type: string;
|
|
33
|
+
name: string;
|
|
34
|
+
tenant_key: string;
|
|
35
|
+
}[];
|
|
36
|
+
has_more: boolean;
|
|
37
|
+
page_token: string;
|
|
38
|
+
member_total: number;
|
|
39
|
+
}>;
|
|
40
|
+
/** Send a message to a chat or user */
|
|
41
|
+
export declare function sendMessage(client: ReturnType<typeof createFeishuClient>, receiveId: string, msgType: string, content: string, receiveIdType?: "chat_id" | "open_id" | "user_id" | "union_id" | "email"): Promise<{
|
|
42
|
+
message_id: string;
|
|
43
|
+
chat_id: string;
|
|
44
|
+
}>;
|
|
45
|
+
/** Reply to a specific message */
|
|
46
|
+
export declare function replyMessage(client: ReturnType<typeof createFeishuClient>, messageId: string, msgType: string, content: string): Promise<{
|
|
47
|
+
message_id: string;
|
|
48
|
+
chat_id: string;
|
|
49
|
+
}>;
|
|
50
|
+
/** List messages in a chat */
|
|
51
|
+
export declare function listMessages(client: ReturnType<typeof createFeishuClient>, containerId: string, startTime?: string, endTime?: string, pageSize?: number, pageToken?: string, sortType?: string): Promise<{
|
|
52
|
+
messages: {
|
|
53
|
+
message_id: string;
|
|
54
|
+
msg_type: string;
|
|
55
|
+
content: string;
|
|
56
|
+
sender_id: string;
|
|
57
|
+
sender_type: string;
|
|
58
|
+
create_time: string;
|
|
59
|
+
chat_id: string;
|
|
60
|
+
}[];
|
|
61
|
+
has_more: boolean;
|
|
62
|
+
page_token: string;
|
|
63
|
+
}>;
|
|
64
|
+
/** Create a new chat group */
|
|
65
|
+
export declare function createChat(client: ReturnType<typeof createFeishuClient>, name: string, description?: string, userIds?: string[], chatMode?: string): Promise<{
|
|
66
|
+
chat_id: string;
|
|
67
|
+
name: string;
|
|
68
|
+
}>;
|
|
69
|
+
export declare function registerFeishuImTools(api: OpenClawPluginApi): void;
|
|
70
|
+
//# sourceMappingURL=im.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"im.d.ts","sourceRoot":"","sources":["../../src/im.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAkCjD,wCAAwC;AACxC,wBAAsB,SAAS,CAC7B,MAAM,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,EAC7C,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM;;;;;;;;;;;;GAyBnB;AAED,8CAA8C;AAC9C,wBAAsB,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,EAAE,MAAM,EAAE,MAAM;;;;;;;;;GAkB9F;AAED,6BAA6B;AAC7B,wBAAsB,eAAe,CACnC,MAAM,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,EAC7C,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM;;;;;;;;;;GAwBnB;AAED,uCAAuC;AACvC,wBAAsB,WAAW,CAC/B,MAAM,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,EAC7C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO;;;GAsBzE;AAED,kCAAkC;AAClC,wBAAsB,YAAY,CAChC,MAAM,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,EAC7C,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM;;;GAiBhB;AAED,8BAA8B;AAC9B,wBAAsB,YAAY,CAChC,MAAM,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,EAC7C,WAAW,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE,MAAM;;;;;;;;;;;;GA8BlB;AAED,8BAA8B;AAC9B,wBAAsB,UAAU,CAC9B,MAAM,EAAE,UAAU,CAAC,OAAO,kBAAkB,CAAC,EAC7C,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,MAAM,EAAE,EAClB,QAAQ,CAAC,EAAE,MAAM;;;GAyBlB;AAID,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,iBAAiB,QAgN3D"}
|