@xwang152/claw-lark 0.1.20 → 0.1.22
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/dist/index.d.ts +1 -0
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/src/monitor.js +70 -23
- package/dist/src/monitor.js.map +1 -1
- package/dist/src/provider.d.ts +107 -0
- package/dist/src/provider.js +350 -0
- package/dist/src/provider.js.map +1 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
|
|
9
9
|
export { larkPlugin } from "./src/channel.js";
|
|
10
|
+
export { larkProviderPlugin } from "./src/provider.js";
|
|
10
11
|
export { createLarkClient, createLarkWSClient } from "./src/client.js";
|
|
11
12
|
export { monitorLarkProvider, stopMonitor } from "./src/monitor.js";
|
|
12
13
|
export { startWebhookServer } from "./src/webhook.js";
|
package/dist/index.js
CHANGED
|
@@ -7,9 +7,11 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import { emptyPluginConfigSchema } from "openclaw/plugin-sdk";
|
|
9
9
|
import { larkPlugin } from "./src/channel.js";
|
|
10
|
+
import { larkProviderPlugin } from "./src/provider.js";
|
|
10
11
|
import { setLarkRuntime } from "./src/runtime.js";
|
|
11
12
|
// Re-export for programmatic usage
|
|
12
13
|
export { larkPlugin } from "./src/channel.js";
|
|
14
|
+
export { larkProviderPlugin } from "./src/provider.js";
|
|
13
15
|
export { createLarkClient, createLarkWSClient } from "./src/client.js";
|
|
14
16
|
export { monitorLarkProvider, stopMonitor } from "./src/monitor.js";
|
|
15
17
|
export { startWebhookServer } from "./src/webhook.js";
|
|
@@ -18,13 +20,15 @@ export { downloadImageLark, downloadFileLark } from "./src/media.js";
|
|
|
18
20
|
export { addReactionLark, removeReactionLark, listReactionsLark } from "./src/reactions.js";
|
|
19
21
|
export { extractMentionTargets, extractMessageBody, isMentionForwardRequest, formatMentionForText, formatMentionForCard, formatMentionAllForText, formatMentionAllForCard, } from "./src/mention.js";
|
|
20
22
|
const plugin = {
|
|
21
|
-
id: "lark",
|
|
23
|
+
id: "claw-lark",
|
|
22
24
|
name: "Lark",
|
|
23
|
-
description: "Lark / Feishu
|
|
25
|
+
description: "Lark / Feishu provider plugin for OpenClaw",
|
|
24
26
|
configSchema: emptyPluginConfigSchema(),
|
|
25
27
|
register(api) {
|
|
26
28
|
setLarkRuntime(api);
|
|
29
|
+
// Register as both channel and provider
|
|
27
30
|
api.registerChannel({ plugin: larkPlugin });
|
|
31
|
+
api.registerProvider(larkProviderPlugin);
|
|
28
32
|
},
|
|
29
33
|
};
|
|
30
34
|
export default plugin;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,mCAAmC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAY1B,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,mCAAmC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAY1B,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,WAAW;IACf,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,4CAA4C;IACzD,YAAY,EAAE,uBAAuB,EAAE;IACvC,QAAQ,CAAC,GAAsB;QAC7B,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,wCAAwC;QACxC,GAAG,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5C,GAAG,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IAC3C,CAAC;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
package/dist/src/monitor.js
CHANGED
|
@@ -105,41 +105,88 @@ export async function routeMessage(event, account) {
|
|
|
105
105
|
return;
|
|
106
106
|
}
|
|
107
107
|
api.logger.info(`[feishu] Received message from ${parsed.senderId} in ${parsed.chatType} ${parsed.chatId}`);
|
|
108
|
-
//
|
|
108
|
+
// Route message to OpenClaw's message dispatcher
|
|
109
|
+
// Use the runtime's channel.reply API if available
|
|
110
|
+
const runtime = api.runtime;
|
|
111
|
+
if (runtime?.channel?.reply?.dispatchReplyWithBufferedBlockDispatcher) {
|
|
112
|
+
try {
|
|
113
|
+
// Build the inbound context
|
|
114
|
+
const isDirect = parsed.chatType === "p2p";
|
|
115
|
+
const isGroup = parsed.chatType === "group";
|
|
116
|
+
// Use OpenClaw's routing system
|
|
117
|
+
const resolveAgentRoute = runtime.channel.routing.resolveAgentRoute;
|
|
118
|
+
if (resolveAgentRoute) {
|
|
119
|
+
const route = resolveAgentRoute({
|
|
120
|
+
cfg: api.config,
|
|
121
|
+
channel: "lark",
|
|
122
|
+
accountId: account.accountId,
|
|
123
|
+
peer: {
|
|
124
|
+
kind: isDirect ? "dm" : "group",
|
|
125
|
+
id: parsed.chatId,
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
// Build the inbound context
|
|
129
|
+
const ctx = {
|
|
130
|
+
From: parsed.senderId,
|
|
131
|
+
To: `lark:${parsed.chatId}`,
|
|
132
|
+
Body: parsed.text,
|
|
133
|
+
ChatType: isDirect ? "dm" : "group",
|
|
134
|
+
MessageSid: parsed.messageId,
|
|
135
|
+
ReplyToId: parsed.threadId,
|
|
136
|
+
MediaUrls: parsed.media?.map(m => m.id),
|
|
137
|
+
Timestamp: new Date(parsed.timestamp * 1000).toISOString(),
|
|
138
|
+
// Lark-specific fields
|
|
139
|
+
Provider: "lark",
|
|
140
|
+
AccountId: account.accountId,
|
|
141
|
+
MessageId: parsed.messageId,
|
|
142
|
+
ChatId: parsed.chatId,
|
|
143
|
+
SenderId: parsed.senderId,
|
|
144
|
+
ThreadId: parsed.threadId,
|
|
145
|
+
Mentions: parsed.mentions,
|
|
146
|
+
};
|
|
147
|
+
// Dispatch the message
|
|
148
|
+
await runtime.channel.reply.dispatchReplyWithBufferedBlockDispatcher({
|
|
149
|
+
ctx,
|
|
150
|
+
cfg: api.config,
|
|
151
|
+
dispatcherOptions: {
|
|
152
|
+
deliver: async (payload) => {
|
|
153
|
+
// This is where replies would be sent
|
|
154
|
+
// For now, just log
|
|
155
|
+
api.logger.info(`[feishu] Reply payload: ${JSON.stringify(payload)}`);
|
|
156
|
+
},
|
|
157
|
+
onError: (err) => {
|
|
158
|
+
api.logger.error(`[feishu] Reply error: ${err}`);
|
|
159
|
+
},
|
|
160
|
+
},
|
|
161
|
+
replyOptions: {},
|
|
162
|
+
});
|
|
163
|
+
api.logger.info(`[feishu] Message routed to agent ${route.agentId}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
api.logger.error(`[feishu] Failed to route message: ${error}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
api.logger.warn("[feishu] Runtime dispatcher not available, message not routed");
|
|
172
|
+
}
|
|
173
|
+
// Optional: Add a "received" reaction to indicate message was processed
|
|
174
|
+
// Using valid Lark emoji type: "THUMBSUP" (confirmed to work)
|
|
109
175
|
const client = createLarkClient(account);
|
|
110
176
|
try {
|
|
111
177
|
await client.im.messageReaction.create({
|
|
112
178
|
path: { message_id: parsed.messageId },
|
|
113
179
|
data: {
|
|
114
180
|
reaction_type: {
|
|
115
|
-
emoji_type: "
|
|
181
|
+
emoji_type: "THUMBSUP",
|
|
116
182
|
},
|
|
117
183
|
},
|
|
118
184
|
});
|
|
119
185
|
}
|
|
120
186
|
catch (e) {
|
|
121
|
-
// Ignore reaction errors
|
|
122
|
-
|
|
123
|
-
// Use the top-level handleMessage or fallback to inbound.handleMessage
|
|
124
|
-
const handleMessage = api.handleMessage || api.inbound?.handleMessage;
|
|
125
|
-
if (typeof handleMessage !== "function") {
|
|
126
|
-
api.logger.error("[feishu] No handleMessage function found in OpenClaw API");
|
|
127
|
-
return;
|
|
187
|
+
// Ignore reaction errors (e.g., message already deleted)
|
|
188
|
+
api.logger.debug(`[feishu] Reaction add failed: ${e}`);
|
|
128
189
|
}
|
|
129
|
-
await handleMessage({
|
|
130
|
-
channel: "lark",
|
|
131
|
-
accountId: account.accountId,
|
|
132
|
-
messageId: parsed.messageId,
|
|
133
|
-
chatId: parsed.chatId,
|
|
134
|
-
chatType: parsed.chatType === "p2p" ? "direct" : "group",
|
|
135
|
-
senderId: parsed.senderId,
|
|
136
|
-
text: parsed.text,
|
|
137
|
-
threadId: parsed.threadId,
|
|
138
|
-
timestamp: parsed.timestamp,
|
|
139
|
-
mentions: parsed.mentions,
|
|
140
|
-
media: parsed.media,
|
|
141
|
-
raw: event,
|
|
142
|
-
});
|
|
143
190
|
}
|
|
144
191
|
/**
|
|
145
192
|
* Start WebSocket connection and listen for messages.
|
package/dist/src/monitor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/monitor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../src/monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lark Provider Plugin
|
|
3
|
+
*
|
|
4
|
+
* Implements the ProviderPlugin interface for Lark/Feishu integration.
|
|
5
|
+
* Provides message monitoring, processing, and sending capabilities.
|
|
6
|
+
*/
|
|
7
|
+
import type { OpenClawConfig } from "openclaw/plugin-sdk";
|
|
8
|
+
import type { ResolvedLarkAccount, SendResult } from "./types.js";
|
|
9
|
+
/**
|
|
10
|
+
* List available users
|
|
11
|
+
*/
|
|
12
|
+
declare function listPeers(account: ResolvedLarkAccount): Promise<Array<{
|
|
13
|
+
id: string;
|
|
14
|
+
name: string;
|
|
15
|
+
}>>;
|
|
16
|
+
/**
|
|
17
|
+
* List available chat groups
|
|
18
|
+
*/
|
|
19
|
+
declare function listGroups(account: ResolvedLarkAccount): Promise<Array<{
|
|
20
|
+
id: string;
|
|
21
|
+
name: string;
|
|
22
|
+
}>>;
|
|
23
|
+
/**
|
|
24
|
+
* Lark/Feishu provider plugin implementation
|
|
25
|
+
*/
|
|
26
|
+
export declare const larkProviderPlugin: {
|
|
27
|
+
id: string;
|
|
28
|
+
meta: {
|
|
29
|
+
label: string;
|
|
30
|
+
selectionLabel: string;
|
|
31
|
+
docsPath: string;
|
|
32
|
+
blurb: string;
|
|
33
|
+
order: number;
|
|
34
|
+
};
|
|
35
|
+
capabilities: {
|
|
36
|
+
chatTypes: string[];
|
|
37
|
+
reactions: boolean;
|
|
38
|
+
threads: boolean;
|
|
39
|
+
media: boolean;
|
|
40
|
+
nativeCommands: boolean;
|
|
41
|
+
blockStreaming: boolean;
|
|
42
|
+
};
|
|
43
|
+
config: {
|
|
44
|
+
listAccountIds(cfg: OpenClawConfig): string[];
|
|
45
|
+
resolveAccount(cfg: OpenClawConfig, accountId?: string): ResolvedLarkAccount | null;
|
|
46
|
+
isConfigured(account: ResolvedLarkAccount): boolean;
|
|
47
|
+
setAccountEnabled(cfg: OpenClawConfig, accountId: string, enabled: boolean): OpenClawConfig;
|
|
48
|
+
};
|
|
49
|
+
outbound: {
|
|
50
|
+
deliveryMode: string;
|
|
51
|
+
textChunkLimit: number;
|
|
52
|
+
chunkerMode: string;
|
|
53
|
+
sendText(args: {
|
|
54
|
+
account: ResolvedLarkAccount;
|
|
55
|
+
recipientId: string;
|
|
56
|
+
text: string;
|
|
57
|
+
threadId?: string;
|
|
58
|
+
}): Promise<SendResult>;
|
|
59
|
+
sendMedia(args: {
|
|
60
|
+
account: ResolvedLarkAccount;
|
|
61
|
+
recipientId: string;
|
|
62
|
+
mediaId: string;
|
|
63
|
+
mediaType: "image" | "file";
|
|
64
|
+
fileName?: string;
|
|
65
|
+
threadId?: string;
|
|
66
|
+
}): Promise<SendResult>;
|
|
67
|
+
downloadMedia(args: {
|
|
68
|
+
account: ResolvedLarkAccount;
|
|
69
|
+
mediaId: string;
|
|
70
|
+
mediaType: "image" | "file";
|
|
71
|
+
messageId?: string;
|
|
72
|
+
}): Promise<Buffer | null>;
|
|
73
|
+
addReaction(args: {
|
|
74
|
+
account: ResolvedLarkAccount;
|
|
75
|
+
messageId: string;
|
|
76
|
+
emoji: string;
|
|
77
|
+
}): Promise<void>;
|
|
78
|
+
removeReaction(args: {
|
|
79
|
+
account: ResolvedLarkAccount;
|
|
80
|
+
messageId: string;
|
|
81
|
+
emoji: string;
|
|
82
|
+
reactionId?: string;
|
|
83
|
+
}): Promise<void>;
|
|
84
|
+
listReactions(args: {
|
|
85
|
+
account: ResolvedLarkAccount;
|
|
86
|
+
messageId: string;
|
|
87
|
+
}): Promise<Array<{
|
|
88
|
+
emoji: string;
|
|
89
|
+
reactionId: string;
|
|
90
|
+
}>>;
|
|
91
|
+
};
|
|
92
|
+
directory: {
|
|
93
|
+
listPeers: typeof listPeers;
|
|
94
|
+
listGroups: typeof listGroups;
|
|
95
|
+
};
|
|
96
|
+
gateway: {
|
|
97
|
+
startAccount: (ctx: {
|
|
98
|
+
account: ResolvedLarkAccount;
|
|
99
|
+
cfg: OpenClawConfig;
|
|
100
|
+
runtime: any;
|
|
101
|
+
abortSignal?: AbortSignal;
|
|
102
|
+
log?: any;
|
|
103
|
+
}) => Promise<void>;
|
|
104
|
+
stopAccount: () => Promise<void>;
|
|
105
|
+
};
|
|
106
|
+
};
|
|
107
|
+
export {};
|
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lark Provider Plugin
|
|
3
|
+
*
|
|
4
|
+
* Implements the ProviderPlugin interface for Lark/Feishu integration.
|
|
5
|
+
* Provides message monitoring, processing, and sending capabilities.
|
|
6
|
+
*/
|
|
7
|
+
import { createLarkClient } from "./client.js";
|
|
8
|
+
import { monitorLarkProvider, stopMonitor } from "./monitor.js";
|
|
9
|
+
import { listLarkDirectoryPeers, listLarkDirectoryGroups } from "./directory.js";
|
|
10
|
+
import { addReactionLark, removeReactionLark, listReactionsLark } from "./reactions.js";
|
|
11
|
+
import { downloadImageLark, downloadFileLark } from "./media.js";
|
|
12
|
+
// Default values for account configuration
|
|
13
|
+
const DEFAULTS = {
|
|
14
|
+
domain: "feishu",
|
|
15
|
+
connectionMode: "websocket",
|
|
16
|
+
webhookPort: 3000,
|
|
17
|
+
dmPolicy: "pairing",
|
|
18
|
+
groupPolicy: "open",
|
|
19
|
+
requireMention: true,
|
|
20
|
+
mediaMaxMb: 30,
|
|
21
|
+
renderMode: "auto",
|
|
22
|
+
historyLimit: 10,
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Extract Feishu channel config from OpenClaw config
|
|
26
|
+
*/
|
|
27
|
+
function getChannelConfig(cfg) {
|
|
28
|
+
return cfg.channels?.lark ?? {};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get account config from channel config, with empty object fallback
|
|
32
|
+
*/
|
|
33
|
+
function getAccountConfig(channelConfig, accountId) {
|
|
34
|
+
return channelConfig.accounts?.[accountId] ?? {};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Check if default account has env var credentials configured
|
|
38
|
+
*/
|
|
39
|
+
function hasEnvCredentials() {
|
|
40
|
+
return Boolean(process.env.LARK_APP_ID && process.env.LARK_APP_SECRET);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Resolve account configuration with defaults and env fallbacks.
|
|
44
|
+
* For "default" account, environment variables take precedence.
|
|
45
|
+
*/
|
|
46
|
+
function resolveAccount(cfg, accountId) {
|
|
47
|
+
const channelConfig = getChannelConfig(cfg);
|
|
48
|
+
const accountConfig = getAccountConfig(channelConfig, accountId);
|
|
49
|
+
// Resolve credentials - env vars as fallback for default account
|
|
50
|
+
const isDefault = accountId === "default";
|
|
51
|
+
const appId = accountConfig.appId ?? (isDefault ? process.env.LARK_APP_ID : undefined);
|
|
52
|
+
const appSecret = accountConfig.appSecret ?? (isDefault ? process.env.LARK_APP_SECRET : undefined);
|
|
53
|
+
const encryptKey = accountConfig.encryptKey ?? (isDefault ? process.env.LARK_ENCRYPT_KEY : undefined);
|
|
54
|
+
const verificationToken = accountConfig.verificationToken ?? (isDefault ? process.env.LARK_VERIFICATION_TOKEN : undefined);
|
|
55
|
+
const configured = Boolean(appId?.trim() && appSecret?.trim());
|
|
56
|
+
return {
|
|
57
|
+
accountId,
|
|
58
|
+
enabled: accountConfig.enabled ?? true,
|
|
59
|
+
configured,
|
|
60
|
+
appId: appId ?? "",
|
|
61
|
+
appSecret: appSecret ?? "",
|
|
62
|
+
encryptKey,
|
|
63
|
+
verificationToken,
|
|
64
|
+
domain: accountConfig.domain ?? DEFAULTS.domain,
|
|
65
|
+
connectionMode: accountConfig.connectionMode ?? DEFAULTS.connectionMode,
|
|
66
|
+
webhookPort: accountConfig.webhookPort ?? DEFAULTS.webhookPort,
|
|
67
|
+
dmPolicy: accountConfig.dmPolicy ?? DEFAULTS.dmPolicy,
|
|
68
|
+
dmAllowlist: accountConfig.dmAllowlist ?? [],
|
|
69
|
+
groupPolicy: accountConfig.groupPolicy ?? DEFAULTS.groupPolicy,
|
|
70
|
+
requireMention: accountConfig.requireMention ?? DEFAULTS.requireMention,
|
|
71
|
+
groupAllowlist: accountConfig.groupAllowlist ?? [],
|
|
72
|
+
mediaMaxMb: accountConfig.mediaMaxMb ?? DEFAULTS.mediaMaxMb,
|
|
73
|
+
renderMode: accountConfig.renderMode ?? DEFAULTS.renderMode,
|
|
74
|
+
historyLimit: accountConfig.historyLimit ?? DEFAULTS.historyLimit,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Determine receive_id_type from recipient ID format.
|
|
79
|
+
* IDs starting with "oc_" are chat IDs,
|
|
80
|
+
* IDs starting with "ou_" are open IDs (user),
|
|
81
|
+
* IDs starting with "on_" are union IDs (user).
|
|
82
|
+
*/
|
|
83
|
+
function inferReceiveIdType(recipientId) {
|
|
84
|
+
if (recipientId.startsWith("oc_")) {
|
|
85
|
+
return "chat_id";
|
|
86
|
+
}
|
|
87
|
+
if (recipientId.startsWith("ou_")) {
|
|
88
|
+
return "open_id";
|
|
89
|
+
}
|
|
90
|
+
if (recipientId.startsWith("on_")) {
|
|
91
|
+
return "union_id";
|
|
92
|
+
}
|
|
93
|
+
// Default to open_id for other formats
|
|
94
|
+
return "open_id";
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Send a message via Lark API, supporting text and interactive cards.
|
|
98
|
+
*/
|
|
99
|
+
async function sendTextMessage(account, recipientId, text, threadId) {
|
|
100
|
+
try {
|
|
101
|
+
const client = createLarkClient(account);
|
|
102
|
+
const renderMode = account.renderMode;
|
|
103
|
+
// Determine if we should use a card
|
|
104
|
+
const useCard = renderMode === "card" ||
|
|
105
|
+
(renderMode === "auto" && (text.includes("```") || text.includes("| --- |") || text.includes("\n- ")));
|
|
106
|
+
let msgType;
|
|
107
|
+
let content;
|
|
108
|
+
if (useCard) {
|
|
109
|
+
msgType = "interactive";
|
|
110
|
+
// Simple Markdown card
|
|
111
|
+
content = JSON.stringify({
|
|
112
|
+
config: { wide_screen_mode: true },
|
|
113
|
+
header: {
|
|
114
|
+
template: "orange",
|
|
115
|
+
title: {
|
|
116
|
+
content: "OpenClaw Message",
|
|
117
|
+
tag: "plain_text",
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
elements: [
|
|
121
|
+
{
|
|
122
|
+
tag: "div",
|
|
123
|
+
text: {
|
|
124
|
+
tag: "lark_md",
|
|
125
|
+
content: text,
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
msgType = "text";
|
|
133
|
+
content = JSON.stringify({ text });
|
|
134
|
+
}
|
|
135
|
+
const response = await client.im.message.create({
|
|
136
|
+
params: {
|
|
137
|
+
receive_id_type: inferReceiveIdType(recipientId),
|
|
138
|
+
},
|
|
139
|
+
data: {
|
|
140
|
+
receive_id: recipientId,
|
|
141
|
+
msg_type: msgType,
|
|
142
|
+
content,
|
|
143
|
+
...(threadId && { root_id: threadId }),
|
|
144
|
+
},
|
|
145
|
+
});
|
|
146
|
+
if (response.code === 0 && response.data) {
|
|
147
|
+
return { ok: true, messageId: response.data.message_id };
|
|
148
|
+
}
|
|
149
|
+
return { ok: false, error: response.msg ?? "Unknown error" };
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
return {
|
|
153
|
+
ok: false,
|
|
154
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* List available users
|
|
160
|
+
*/
|
|
161
|
+
async function listPeers(account) {
|
|
162
|
+
const peers = await listLarkDirectoryPeers({ account });
|
|
163
|
+
return peers.map(p => ({
|
|
164
|
+
id: p.id,
|
|
165
|
+
name: p.name ?? "",
|
|
166
|
+
}));
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* List available chat groups
|
|
170
|
+
*/
|
|
171
|
+
async function listGroups(account) {
|
|
172
|
+
const groups = await listLarkDirectoryGroups({ account });
|
|
173
|
+
return groups.map(g => ({
|
|
174
|
+
id: g.id,
|
|
175
|
+
name: g.name ?? "",
|
|
176
|
+
}));
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Lark/Feishu provider plugin implementation
|
|
180
|
+
*/
|
|
181
|
+
export const larkProviderPlugin = {
|
|
182
|
+
id: "lark",
|
|
183
|
+
meta: {
|
|
184
|
+
label: "Lark",
|
|
185
|
+
selectionLabel: "Feishu / Lark",
|
|
186
|
+
docsPath: "/providers/feishu",
|
|
187
|
+
blurb: "Chat with your OpenClaw bot on Feishu or Lark",
|
|
188
|
+
order: 75,
|
|
189
|
+
},
|
|
190
|
+
capabilities: {
|
|
191
|
+
chatTypes: ["direct", "group"],
|
|
192
|
+
reactions: true,
|
|
193
|
+
threads: true,
|
|
194
|
+
media: true,
|
|
195
|
+
nativeCommands: false,
|
|
196
|
+
blockStreaming: false,
|
|
197
|
+
},
|
|
198
|
+
config: {
|
|
199
|
+
listAccountIds(cfg) {
|
|
200
|
+
const channelConfig = getChannelConfig(cfg);
|
|
201
|
+
const accountIds = Object.keys(channelConfig.accounts ?? {});
|
|
202
|
+
// Include default account if env vars are configured
|
|
203
|
+
if (!accountIds.includes("default") && hasEnvCredentials()) {
|
|
204
|
+
accountIds.push("default");
|
|
205
|
+
}
|
|
206
|
+
return accountIds;
|
|
207
|
+
},
|
|
208
|
+
resolveAccount(cfg, accountId) {
|
|
209
|
+
return resolveAccount(cfg, accountId ?? "default");
|
|
210
|
+
},
|
|
211
|
+
isConfigured(account) {
|
|
212
|
+
return account.configured;
|
|
213
|
+
},
|
|
214
|
+
setAccountEnabled(cfg, accountId, enabled) {
|
|
215
|
+
const channelConfig = getChannelConfig(cfg);
|
|
216
|
+
return {
|
|
217
|
+
...cfg,
|
|
218
|
+
channels: {
|
|
219
|
+
...cfg.channels,
|
|
220
|
+
lark: {
|
|
221
|
+
...channelConfig,
|
|
222
|
+
accounts: {
|
|
223
|
+
...channelConfig.accounts,
|
|
224
|
+
[accountId]: {
|
|
225
|
+
...channelConfig.accounts?.[accountId],
|
|
226
|
+
enabled,
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
};
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
outbound: {
|
|
235
|
+
deliveryMode: "direct",
|
|
236
|
+
textChunkLimit: 4000,
|
|
237
|
+
chunkerMode: "markdown",
|
|
238
|
+
async sendText(args) {
|
|
239
|
+
const { account, recipientId, text, threadId } = args;
|
|
240
|
+
return sendTextMessage(account, recipientId, text, threadId);
|
|
241
|
+
},
|
|
242
|
+
async sendMedia(args) {
|
|
243
|
+
const { account, recipientId, mediaId, mediaType, fileName, threadId } = args;
|
|
244
|
+
try {
|
|
245
|
+
const client = createLarkClient(account);
|
|
246
|
+
const response = await client.im.message.create({
|
|
247
|
+
params: {
|
|
248
|
+
receive_id_type: inferReceiveIdType(recipientId),
|
|
249
|
+
},
|
|
250
|
+
data: {
|
|
251
|
+
receive_id: recipientId,
|
|
252
|
+
msg_type: mediaType === "image" ? "image" : "file",
|
|
253
|
+
content: JSON.stringify(mediaType === "image" ? { image_key: mediaId } : { file_key: mediaId, file_name: fileName }),
|
|
254
|
+
...(threadId && { root_id: threadId }),
|
|
255
|
+
},
|
|
256
|
+
});
|
|
257
|
+
if (response.code === 0 && response.data) {
|
|
258
|
+
return { ok: true, messageId: response.data.message_id };
|
|
259
|
+
}
|
|
260
|
+
return { ok: false, error: response.msg ?? "Unknown error" };
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
return {
|
|
264
|
+
ok: false,
|
|
265
|
+
error: error instanceof Error ? error.message : "Unknown error",
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
},
|
|
269
|
+
async downloadMedia(args) {
|
|
270
|
+
const { account, mediaId, messageId, mediaType } = args;
|
|
271
|
+
try {
|
|
272
|
+
if (mediaType === "image") {
|
|
273
|
+
const result = await downloadImageLark({ account, imageKey: mediaId });
|
|
274
|
+
return result.buffer;
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
// For files, we need messageId
|
|
278
|
+
if (!messageId)
|
|
279
|
+
return null;
|
|
280
|
+
const result = await downloadFileLark({
|
|
281
|
+
account,
|
|
282
|
+
messageId,
|
|
283
|
+
fileKey: mediaId,
|
|
284
|
+
type: mediaType
|
|
285
|
+
});
|
|
286
|
+
return result.buffer;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
console.error("[lark] Download media failed:", error);
|
|
291
|
+
return null;
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
async addReaction(args) {
|
|
295
|
+
await addReactionLark({
|
|
296
|
+
account: args.account,
|
|
297
|
+
messageId: args.messageId,
|
|
298
|
+
emojiType: args.emoji,
|
|
299
|
+
});
|
|
300
|
+
},
|
|
301
|
+
async removeReaction(args) {
|
|
302
|
+
// If reactionId is not provided, we need to find it first
|
|
303
|
+
let reactionId = args.reactionId;
|
|
304
|
+
if (!reactionId) {
|
|
305
|
+
const reactions = await listReactionsLark({
|
|
306
|
+
account: args.account,
|
|
307
|
+
messageId: args.messageId,
|
|
308
|
+
emojiType: args.emoji,
|
|
309
|
+
});
|
|
310
|
+
// Find reaction by this app (bot)
|
|
311
|
+
// We need to filter by operator_id being the app itself
|
|
312
|
+
// For now, just take the first match
|
|
313
|
+
const match = reactions.find(r => r.emojiType === args.emoji);
|
|
314
|
+
reactionId = match?.reactionId;
|
|
315
|
+
}
|
|
316
|
+
if (reactionId) {
|
|
317
|
+
await removeReactionLark({
|
|
318
|
+
account: args.account,
|
|
319
|
+
messageId: args.messageId,
|
|
320
|
+
reactionId,
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
async listReactions(args) {
|
|
325
|
+
const reactions = await listReactionsLark({
|
|
326
|
+
account: args.account,
|
|
327
|
+
messageId: args.messageId,
|
|
328
|
+
});
|
|
329
|
+
return reactions.map(r => ({
|
|
330
|
+
emoji: r.emojiType,
|
|
331
|
+
reactionId: r.reactionId,
|
|
332
|
+
}));
|
|
333
|
+
},
|
|
334
|
+
},
|
|
335
|
+
directory: {
|
|
336
|
+
listPeers,
|
|
337
|
+
listGroups,
|
|
338
|
+
},
|
|
339
|
+
gateway: {
|
|
340
|
+
startAccount: async (ctx) => {
|
|
341
|
+
const { account, cfg, runtime, abortSignal, log } = ctx;
|
|
342
|
+
log?.info?.(`[${account.accountId}] starting Lark provider`);
|
|
343
|
+
return monitorLarkProvider({ account, abortSignal });
|
|
344
|
+
},
|
|
345
|
+
stopAccount: async () => {
|
|
346
|
+
stopMonitor();
|
|
347
|
+
},
|
|
348
|
+
},
|
|
349
|
+
};
|
|
350
|
+
//# sourceMappingURL=provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxF,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AASjE,2CAA2C;AAC3C,MAAM,QAAQ,GAAG;IACf,MAAM,EAAE,QAAiB;IACzB,cAAc,EAAE,WAAoB;IACpC,WAAW,EAAE,IAAI;IACjB,QAAQ,EAAE,SAAkB;IAC5B,WAAW,EAAE,MAAe;IAC5B,cAAc,EAAE,IAAI;IACpB,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,MAAe;IAC3B,YAAY,EAAE,EAAE;CACR,CAAC;AAEX;;GAEG;AACH,SAAS,gBAAgB,CAAC,GAAmB;IAC3C,OAAQ,GAAG,CAAC,QAAQ,EAAE,IAA0B,IAAI,EAAE,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,aAAgC,EAChC,SAAiB;IAEjB,OAAO,aAAa,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AACnD,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB;IACxB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AACzE,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc,CACrB,GAAmB,EACnB,SAAiB;IAEjB,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,gBAAgB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAEjE,iEAAiE;IACjE,MAAM,SAAS,GAAG,SAAS,KAAK,SAAS,CAAC;IAC1C,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACvF,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACnG,MAAM,UAAU,GAAG,aAAa,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACtG,MAAM,iBAAiB,GAAG,aAAa,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAE3H,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,OAAO;QACL,SAAS;QACT,OAAO,EAAE,aAAa,CAAC,OAAO,IAAI,IAAI;QACtC,UAAU;QACV,KAAK,EAAE,KAAK,IAAI,EAAE;QAClB,SAAS,EAAE,SAAS,IAAI,EAAE;QAC1B,UAAU;QACV,iBAAiB;QACjB,MAAM,EAAE,aAAa,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM;QAC/C,cAAc,EAAE,aAAa,CAAC,cAAc,IAAI,QAAQ,CAAC,cAAc;QACvE,WAAW,EAAE,aAAa,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW;QAC9D,QAAQ,EAAE,aAAa,CAAC,QAAQ,IAAI,QAAQ,CAAC,QAAQ;QACrD,WAAW,EAAE,aAAa,CAAC,WAAW,IAAI,EAAE;QAC5C,WAAW,EAAE,aAAa,CAAC,WAAW,IAAI,QAAQ,CAAC,WAAW;QAC9D,cAAc,EAAE,aAAa,CAAC,cAAc,IAAI,QAAQ,CAAC,cAAc;QACvE,cAAc,EAAE,aAAa,CAAC,cAAc,IAAI,EAAE;QAClD,UAAU,EAAE,aAAa,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU;QAC3D,UAAU,EAAE,aAAa,CAAC,UAAU,IAAI,QAAQ,CAAC,UAAU;QAC3D,YAAY,EAAE,aAAa,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY;KAClE,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,WAAmB;IAC7C,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,uCAAuC;IACvC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAC5B,OAA4B,EAC5B,WAAmB,EACnB,IAAY,EACZ,QAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QAEtC,oCAAoC;QACpC,MAAM,OAAO,GACX,UAAU,KAAK,MAAM;YACrB,CAAC,UAAU,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEzG,IAAI,OAAe,CAAC;QACpB,IAAI,OAAe,CAAC;QAEpB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,GAAG,aAAa,CAAC;YACxB,uBAAuB;YACvB,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;gBACvB,MAAM,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE;gBAClC,MAAM,EAAE;oBACN,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE;wBACL,OAAO,EAAE,kBAAkB;wBAC3B,GAAG,EAAE,YAAY;qBAClB;iBACF;gBACD,QAAQ,EAAE;oBACR;wBACE,GAAG,EAAE,KAAK;wBACV,IAAI,EAAE;4BACJ,GAAG,EAAE,SAAS;4BACd,OAAO,EAAE,IAAI;yBACd;qBACF;iBACF;aACF,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,OAAO,GAAG,MAAM,CAAC;YACjB,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;YAC9C,MAAM,EAAE;gBACN,eAAe,EAAE,kBAAkB,CAAC,WAAW,CAAC;aACjD;YACD,IAAI,EAAE;gBACJ,UAAU,EAAE,WAAW;gBACvB,QAAQ,EAAE,OAAO;gBACjB,OAAO;gBACP,GAAG,CAAC,QAAQ,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;aACvC;SACF,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;YACzC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;QAC3D,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;IAC/D,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,SAAS,CACtB,OAA4B;IAE5B,MAAM,KAAK,GAAG,MAAM,sBAAsB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACxD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrB,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;KACnB,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,UAAU,CACvB,OAA4B;IAE5B,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC1D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACtB,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE;KACnB,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,EAAE,EAAE,MAAM;IAEV,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM;QACb,cAAc,EAAE,eAAe;QAC/B,QAAQ,EAAE,mBAAmB;QAC7B,KAAK,EAAE,+CAA+C;QACtD,KAAK,EAAE,EAAE;KACV;IAED,YAAY,EAAE;QACZ,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;QAC9B,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,IAAI;QACX,cAAc,EAAE,KAAK;QACrB,cAAc,EAAE,KAAK;KACtB;IAED,MAAM,EAAE;QACN,cAAc,CAAC,GAAmB;YAChC,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;YAE7D,qDAAqD;YACrD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,iBAAiB,EAAE,EAAE,CAAC;gBAC3D,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;YAED,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,cAAc,CAAC,GAAmB,EAAE,SAAkB;YACpD,OAAO,cAAc,CAAC,GAAG,EAAE,SAAS,IAAI,SAAS,CAAC,CAAC;QACrD,CAAC;QAED,YAAY,CAAC,OAA4B;YACvC,OAAO,OAAO,CAAC,UAAU,CAAC;QAC5B,CAAC;QAED,iBAAiB,CACf,GAAmB,EACnB,SAAiB,EACjB,OAAgB;YAEhB,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAE5C,OAAO;gBACL,GAAG,GAAG;gBACN,QAAQ,EAAE;oBACR,GAAG,GAAG,CAAC,QAAQ;oBACf,IAAI,EAAE;wBACJ,GAAG,aAAa;wBAChB,QAAQ,EAAE;4BACR,GAAG,aAAa,CAAC,QAAQ;4BACzB,CAAC,SAAS,CAAC,EAAE;gCACX,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC;gCACtC,OAAO;6BACR;yBACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;KACF;IAED,QAAQ,EAAE;QACR,YAAY,EAAE,QAAQ;QACtB,cAAc,EAAE,IAAI;QACpB,WAAW,EAAE,UAAU;QAEvB,KAAK,CAAC,QAAQ,CAAC,IAKd;YACC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;YACtD,OAAO,eAAe,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC/D,CAAC;QAED,KAAK,CAAC,SAAS,CAAC,IAOf;YACC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;YAC9E,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAEzC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;oBAC9C,MAAM,EAAE;wBACN,eAAe,EAAE,kBAAkB,CAAC,WAAW,CAAC;qBACjD;oBACD,IAAI,EAAE;wBACJ,UAAU,EAAE,WAAW;wBACvB,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;wBAClD,OAAO,EAAE,IAAI,CAAC,SAAS,CACrB,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAC5F;wBACD,GAAG,CAAC,QAAQ,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;qBACvC;iBACF,CAAC,CAAC;gBAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACzC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC3D,CAAC;gBAED,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAI,eAAe,EAAE,CAAC;YAC/D,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;iBAChE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,IAKnB;YACC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;YACxD,IAAI,CAAC;gBACH,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;oBAC1B,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;oBACvE,OAAO,MAAM,CAAC,MAAM,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,+BAA+B;oBAC/B,IAAI,CAAC,SAAS;wBAAE,OAAO,IAAI,CAAC;oBAC5B,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;wBACpC,OAAO;wBACP,SAAS;wBACT,OAAO,EAAE,OAAO;wBAChB,IAAI,EAAE,SAAS;qBAChB,CAAC,CAAC;oBACH,OAAO,MAAM,CAAC,MAAM,CAAC;gBACvB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;gBACtD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,KAAK,CAAC,WAAW,CAAC,IAIjB;YACC,MAAM,eAAe,CAAC;gBACpB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,KAAK;aACtB,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,cAAc,CAAC,IAKpB;YACC,0DAA0D;YAC1D,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;YACjC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC;oBACxC,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,SAAS,EAAE,IAAI,CAAC,KAAK;iBACtB,CAAC,CAAC;gBACH,kCAAkC;gBAClC,wDAAwD;gBACxD,qCAAqC;gBACrC,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC9D,UAAU,GAAG,KAAK,EAAE,UAAU,CAAC;YACjC,CAAC;YAED,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,kBAAkB,CAAC;oBACvB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,UAAU;iBACX,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,KAAK,CAAC,aAAa,CAAC,IAGnB;YACC,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC;gBACxC,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;YACH,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACzB,KAAK,EAAE,CAAC,CAAC,SAAS;gBAClB,UAAU,EAAE,CAAC,CAAC,UAAU;aACzB,CAAC,CAAC,CAAC;QACN,CAAC;KACF;IAED,SAAS,EAAE;QACT,SAAS;QACT,UAAU;KACX;IAED,OAAO,EAAE;QACP,YAAY,EAAE,KAAK,EAAE,GAMpB,EAAE,EAAE;YACH,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC;YACxD,GAAG,EAAE,IAAI,EAAE,CAAC,IAAI,OAAO,CAAC,SAAS,0BAA0B,CAAC,CAAC;YAC7D,OAAO,mBAAmB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;QACvD,CAAC;QAED,WAAW,EAAE,KAAK,IAAI,EAAE;YACtB,WAAW,EAAE,CAAC;QAChB,CAAC;KACF;CACF,CAAC"}
|
package/openclaw.plugin.json
CHANGED