@xwang152/claw-lark 0.1.23 → 0.1.25

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 CHANGED
@@ -12,10 +12,15 @@ export { createLarkClient, createLarkWSClient } from "./src/client.js";
12
12
  export { monitorLarkProvider, stopMonitor } from "./src/monitor.js";
13
13
  export { startWebhookServer } from "./src/webhook.js";
14
14
  export { listLarkDirectoryPeers, listLarkDirectoryGroups } from "./src/directory.js";
15
- export { downloadImageLark, downloadFileLark } from "./src/media.js";
15
+ export { downloadImageLark, downloadFileLark, uploadImageLark, uploadFileLark, sendImageLark, sendFileLark, sendMediaLark, detectFileType, } from "./src/media.js";
16
16
  export { addReactionLark, removeReactionLark, listReactionsLark } from "./src/reactions.js";
17
- export { extractMentionTargets, extractMessageBody, isMentionForwardRequest, formatMentionForText, formatMentionForCard, formatMentionAllForText, formatMentionAllForCard, } from "./src/mention.js";
18
- export type { LarkDomain, LarkConnectionMode, LarkAccountConfig, ResolvedLarkAccount, LarkChannelConfig, LarkMessageEvent, ParsedMessage, SendResult, } from "./src/types.js";
17
+ export { extractMentionTargets, extractMessageBody, isMentionForwardRequest, formatMentionForText, formatMentionForCard, formatMentionAllForText, formatMentionAllForCard, buildMentionedMessage, buildMentionedCardContent, } from "./src/mention.js";
18
+ export { addTypingIndicator, removeTypingIndicator, createTypingController, } from "./src/typing.js";
19
+ export type { TypingIndicatorState } from "./src/typing.js";
20
+ export { resolveLarkSenderName, clearSenderNameCache, getSenderNameCacheStats, prefetchLarkSenderNames, } from "./src/sender-name.js";
21
+ export { getLarkMessage, formatQuotedContext, isReplyMessage, buildMessageContextWithQuote, } from "./src/message-context.js";
22
+ export type { LarkDomain, LarkConnectionMode, DmPolicy, GroupPolicy, RenderMode, LarkAccountConfig, ResolvedLarkAccount, LarkChannelConfig, LarkGroupConfig, LarkMessageEvent, LarkMention, ParsedMessage, SendResult, } from "./src/types.js";
23
+ export { resolveLarkAllowlistMatch, resolveLarkGroupConfig, resolveLarkGroupToolPolicy, isLarkGroupAllowed, resolveLarkGroupRequireMention, resolveLarkReplyToMode, } from "./src/policy.js";
19
24
  declare const plugin: {
20
25
  id: string;
21
26
  name: string;
package/dist/index.js CHANGED
@@ -16,9 +16,13 @@ export { createLarkClient, createLarkWSClient } from "./src/client.js";
16
16
  export { monitorLarkProvider, stopMonitor } from "./src/monitor.js";
17
17
  export { startWebhookServer } from "./src/webhook.js";
18
18
  export { listLarkDirectoryPeers, listLarkDirectoryGroups } from "./src/directory.js";
19
- export { downloadImageLark, downloadFileLark } from "./src/media.js";
19
+ export { downloadImageLark, downloadFileLark, uploadImageLark, uploadFileLark, sendImageLark, sendFileLark, sendMediaLark, detectFileType, } from "./src/media.js";
20
20
  export { addReactionLark, removeReactionLark, listReactionsLark } from "./src/reactions.js";
21
- export { extractMentionTargets, extractMessageBody, isMentionForwardRequest, formatMentionForText, formatMentionForCard, formatMentionAllForText, formatMentionAllForCard, } from "./src/mention.js";
21
+ export { extractMentionTargets, extractMessageBody, isMentionForwardRequest, formatMentionForText, formatMentionForCard, formatMentionAllForText, formatMentionAllForCard, buildMentionedMessage, buildMentionedCardContent, } from "./src/mention.js";
22
+ export { addTypingIndicator, removeTypingIndicator, createTypingController, } from "./src/typing.js";
23
+ export { resolveLarkSenderName, clearSenderNameCache, getSenderNameCacheStats, prefetchLarkSenderNames, } from "./src/sender-name.js";
24
+ export { getLarkMessage, formatQuotedContext, isReplyMessage, buildMessageContextWithQuote, } from "./src/message-context.js";
25
+ export { resolveLarkAllowlistMatch, resolveLarkGroupConfig, resolveLarkGroupToolPolicy, isLarkGroupAllowed, resolveLarkGroupRequireMention, resolveLarkReplyToMode, } from "./src/policy.js";
22
26
  const plugin = {
23
27
  id: "claw-lark",
24
28
  name: "Lark",
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,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"}
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,EACL,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,aAAa,EACb,YAAY,EACZ,aAAa,EACb,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,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,EACvB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,4BAA4B,GAC7B,MAAM,0BAA0B,CAAC;AAgBlC,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,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"}
@@ -19,3 +19,66 @@ export declare function downloadFileLark(params: {
19
19
  fileKey: string;
20
20
  type: "file" | "image" | "media";
21
21
  }): Promise<DownloadImageResult>;
22
+ export type UploadImageResult = {
23
+ imageKey: string;
24
+ };
25
+ export type UploadFileResult = {
26
+ fileKey: string;
27
+ };
28
+ export type SendMediaResult = {
29
+ messageId: string;
30
+ chatId: string;
31
+ };
32
+ /**
33
+ * Upload an image to Lark and get an image_key for sending.
34
+ * Supports: JPEG, PNG, WEBP, GIF, TIFF, BMP, ICO
35
+ */
36
+ export declare function uploadImageLark(params: {
37
+ account: ResolvedLarkAccount;
38
+ image: Buffer | string;
39
+ imageType?: "message" | "avatar";
40
+ }): Promise<UploadImageResult>;
41
+ /**
42
+ * Upload a file to Lark and get a file_key for sending.
43
+ * Max file size: 30MB
44
+ */
45
+ export declare function uploadFileLark(params: {
46
+ account: ResolvedLarkAccount;
47
+ file: Buffer | string;
48
+ fileName: string;
49
+ fileType: "opus" | "mp4" | "pdf" | "doc" | "xls" | "ppt" | "stream";
50
+ duration?: number;
51
+ }): Promise<UploadFileResult>;
52
+ /**
53
+ * Send an image message using an image_key
54
+ */
55
+ export declare function sendImageLark(params: {
56
+ account: ResolvedLarkAccount;
57
+ to: string;
58
+ imageKey: string;
59
+ replyToMessageId?: string;
60
+ }): Promise<SendMediaResult>;
61
+ /**
62
+ * Send a file message using a file_key
63
+ */
64
+ export declare function sendFileLark(params: {
65
+ account: ResolvedLarkAccount;
66
+ to: string;
67
+ fileKey: string;
68
+ replyToMessageId?: string;
69
+ }): Promise<SendMediaResult>;
70
+ /**
71
+ * Helper to detect file type from extension
72
+ */
73
+ export declare function detectFileType(fileName: string): "opus" | "mp4" | "pdf" | "doc" | "xls" | "ppt" | "stream";
74
+ /**
75
+ * Upload and send media (image or file) from URL, local path, or buffer
76
+ */
77
+ export declare function sendMediaLark(params: {
78
+ account: ResolvedLarkAccount;
79
+ to: string;
80
+ mediaUrl?: string;
81
+ mediaBuffer?: Buffer;
82
+ fileName?: string;
83
+ replyToMessageId?: string;
84
+ }): Promise<SendMediaResult>;
package/dist/src/media.js CHANGED
@@ -2,6 +2,7 @@ import { createLarkClient } from "./client.js";
2
2
  import fs from "fs";
3
3
  import path from "path";
4
4
  import os from "os";
5
+ import { Readable } from "stream";
5
6
  /**
6
7
  * Download an image from Lark using image_key.
7
8
  */
@@ -97,4 +98,262 @@ async function processResponseData(response, responseAny, tempPrefix) {
97
98
  }
98
99
  return buffer;
99
100
  }
101
+ /**
102
+ * Upload an image to Lark and get an image_key for sending.
103
+ * Supports: JPEG, PNG, WEBP, GIF, TIFF, BMP, ICO
104
+ */
105
+ export async function uploadImageLark(params) {
106
+ const { account, image, imageType = "message" } = params;
107
+ const client = createLarkClient(account);
108
+ // SDK expects a Readable stream, not a Buffer
109
+ // Use type assertion since SDK actually accepts any Readable at runtime
110
+ const imageStream = typeof image === "string" ? fs.createReadStream(image) : Readable.from(image);
111
+ const response = await client.im.image.create({
112
+ data: {
113
+ image_type: imageType,
114
+ image: imageStream,
115
+ },
116
+ });
117
+ // SDK v1.30+ returns data directly without code wrapper on success
118
+ // On error, it throws or returns { code, msg }
119
+ const responseAny = response;
120
+ if (responseAny.code !== undefined && responseAny.code !== 0) {
121
+ throw new Error(`Lark image upload failed: ${responseAny.msg || `code ${responseAny.code}`}`);
122
+ }
123
+ const imageKey = responseAny.image_key ?? responseAny.data?.image_key;
124
+ if (!imageKey) {
125
+ throw new Error("Lark image upload failed: no image_key returned");
126
+ }
127
+ return { imageKey };
128
+ }
129
+ /**
130
+ * Upload a file to Lark and get a file_key for sending.
131
+ * Max file size: 30MB
132
+ */
133
+ export async function uploadFileLark(params) {
134
+ const { account, file, fileName, fileType, duration } = params;
135
+ const client = createLarkClient(account);
136
+ // SDK expects a Readable stream, not a Buffer
137
+ // Use type assertion since SDK actually accepts any Readable at runtime
138
+ const fileStream = typeof file === "string" ? fs.createReadStream(file) : Readable.from(file);
139
+ const response = await client.im.file.create({
140
+ data: {
141
+ file_type: fileType,
142
+ file_name: fileName,
143
+ file: fileStream,
144
+ ...(duration !== undefined && { duration }),
145
+ },
146
+ });
147
+ // SDK v1.30+ returns data directly without code wrapper on success
148
+ const responseAny = response;
149
+ if (responseAny.code !== undefined && responseAny.code !== 0) {
150
+ throw new Error(`Lark file upload failed: ${responseAny.msg || `code ${responseAny.code}`}`);
151
+ }
152
+ const fileKey = responseAny.file_key ?? responseAny.data?.file_key;
153
+ if (!fileKey) {
154
+ throw new Error("Lark file upload failed: no file_key returned");
155
+ }
156
+ return { fileKey };
157
+ }
158
+ /**
159
+ * Send an image message using an image_key
160
+ */
161
+ export async function sendImageLark(params) {
162
+ const { account, to, imageKey, replyToMessageId } = params;
163
+ const client = createLarkClient(account);
164
+ const receiveId = to;
165
+ const content = JSON.stringify({ image_key: imageKey });
166
+ // Determine receive_id_type from recipient ID format
167
+ const inferReceiveIdType = (recipientId) => {
168
+ if (recipientId.startsWith("oc_"))
169
+ return "chat_id";
170
+ if (recipientId.startsWith("ou_"))
171
+ return "open_id";
172
+ if (recipientId.startsWith("on_"))
173
+ return "union_id";
174
+ return "open_id";
175
+ };
176
+ const receiveIdType = inferReceiveIdType(receiveId);
177
+ if (replyToMessageId) {
178
+ const response = await client.im.message.reply({
179
+ path: { message_id: replyToMessageId },
180
+ data: {
181
+ content,
182
+ msg_type: "image",
183
+ },
184
+ });
185
+ if (response.code !== 0) {
186
+ throw new Error(`Lark image reply failed: ${response.msg || `code ${response.code}`}`);
187
+ }
188
+ return {
189
+ messageId: response.data?.message_id ?? "unknown",
190
+ chatId: receiveId,
191
+ };
192
+ }
193
+ const response = await client.im.message.create({
194
+ params: { receive_id_type: receiveIdType },
195
+ data: {
196
+ receive_id: receiveId,
197
+ content,
198
+ msg_type: "image",
199
+ },
200
+ });
201
+ if (response.code !== 0) {
202
+ throw new Error(`Lark image send failed: ${response.msg || `code ${response.code}`}`);
203
+ }
204
+ return {
205
+ messageId: response.data?.message_id ?? "unknown",
206
+ chatId: receiveId,
207
+ };
208
+ }
209
+ /**
210
+ * Send a file message using a file_key
211
+ */
212
+ export async function sendFileLark(params) {
213
+ const { account, to, fileKey, replyToMessageId } = params;
214
+ const client = createLarkClient(account);
215
+ const receiveId = to;
216
+ const content = JSON.stringify({ file_key: fileKey });
217
+ // Determine receive_id_type from recipient ID format
218
+ const inferReceiveIdType = (recipientId) => {
219
+ if (recipientId.startsWith("oc_"))
220
+ return "chat_id";
221
+ if (recipientId.startsWith("ou_"))
222
+ return "open_id";
223
+ if (recipientId.startsWith("on_"))
224
+ return "union_id";
225
+ return "open_id";
226
+ };
227
+ const receiveIdType = inferReceiveIdType(receiveId);
228
+ if (replyToMessageId) {
229
+ const response = await client.im.message.reply({
230
+ path: { message_id: replyToMessageId },
231
+ data: {
232
+ content,
233
+ msg_type: "file",
234
+ },
235
+ });
236
+ if (response.code !== 0) {
237
+ throw new Error(`Lark file reply failed: ${response.msg || `code ${response.code}`}`);
238
+ }
239
+ return {
240
+ messageId: response.data?.message_id ?? "unknown",
241
+ chatId: receiveId,
242
+ };
243
+ }
244
+ const response = await client.im.message.create({
245
+ params: { receive_id_type: receiveIdType },
246
+ data: {
247
+ receive_id: receiveId,
248
+ content,
249
+ msg_type: "file",
250
+ },
251
+ });
252
+ if (response.code !== 0) {
253
+ throw new Error(`Lark file send failed: ${response.msg || `code ${response.code}`}`);
254
+ }
255
+ return {
256
+ messageId: response.data?.message_id ?? "unknown",
257
+ chatId: receiveId,
258
+ };
259
+ }
260
+ /**
261
+ * Helper to detect file type from extension
262
+ */
263
+ export function detectFileType(fileName) {
264
+ const ext = path.extname(fileName).toLowerCase();
265
+ switch (ext) {
266
+ case ".opus":
267
+ case ".ogg":
268
+ return "opus";
269
+ case ".mp4":
270
+ case ".mov":
271
+ case ".avi":
272
+ return "mp4";
273
+ case ".pdf":
274
+ return "pdf";
275
+ case ".doc":
276
+ case ".docx":
277
+ return "doc";
278
+ case ".xls":
279
+ case ".xlsx":
280
+ return "xls";
281
+ case ".ppt":
282
+ case ".pptx":
283
+ return "ppt";
284
+ default:
285
+ return "stream";
286
+ }
287
+ }
288
+ /**
289
+ * Check if a string is a local file path (not a URL)
290
+ */
291
+ function isLocalPath(urlOrPath) {
292
+ // Starts with / or ~ or drive letter (Windows)
293
+ if (urlOrPath.startsWith("/") || urlOrPath.startsWith("~") || /^[a-zA-Z]:/.test(urlOrPath)) {
294
+ return true;
295
+ }
296
+ // Try to parse as URL - if it fails or has no protocol, it's likely a local path
297
+ try {
298
+ const url = new URL(urlOrPath);
299
+ return url.protocol === "file:";
300
+ }
301
+ catch {
302
+ return true; // Not a valid URL, treat as local path
303
+ }
304
+ }
305
+ /**
306
+ * Upload and send media (image or file) from URL, local path, or buffer
307
+ */
308
+ export async function sendMediaLark(params) {
309
+ const { account, to, mediaUrl, mediaBuffer, fileName, replyToMessageId } = params;
310
+ let buffer;
311
+ let name;
312
+ if (mediaBuffer) {
313
+ buffer = mediaBuffer;
314
+ name = fileName ?? "file";
315
+ }
316
+ else if (mediaUrl) {
317
+ if (isLocalPath(mediaUrl)) {
318
+ // Local file path - read directly
319
+ const filePath = mediaUrl.startsWith("~")
320
+ ? mediaUrl.replace("~", process.env.HOME ?? "")
321
+ : mediaUrl.replace("file://", "");
322
+ if (!fs.existsSync(filePath)) {
323
+ throw new Error(`Local file not found: ${filePath}`);
324
+ }
325
+ buffer = fs.readFileSync(filePath);
326
+ name = fileName ?? path.basename(filePath);
327
+ }
328
+ else {
329
+ // Remote URL - fetch
330
+ const response = await fetch(mediaUrl);
331
+ if (!response.ok) {
332
+ throw new Error(`Failed to fetch media from URL: ${response.status}`);
333
+ }
334
+ buffer = Buffer.from(await response.arrayBuffer());
335
+ name = fileName ?? (path.basename(new URL(mediaUrl).pathname) || "file");
336
+ }
337
+ }
338
+ else {
339
+ throw new Error("Either mediaUrl or mediaBuffer must be provided");
340
+ }
341
+ // Determine if it's an image based on extension
342
+ const ext = path.extname(name).toLowerCase();
343
+ const isImage = [".jpg", ".jpeg", ".png", ".gif", ".webp", ".bmp", ".ico", ".tiff"].includes(ext);
344
+ if (isImage) {
345
+ const { imageKey } = await uploadImageLark({ account, image: buffer });
346
+ return sendImageLark({ account, to, imageKey, replyToMessageId });
347
+ }
348
+ else {
349
+ const fileType = detectFileType(name);
350
+ const { fileKey } = await uploadFileLark({
351
+ account,
352
+ file: buffer,
353
+ fileName: name,
354
+ fileType,
355
+ });
356
+ return sendFileLark({ account, to, fileKey, replyToMessageId });
357
+ }
358
+ }
100
359
  //# sourceMappingURL=media.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/media.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"media.js","sourceRoot":"","sources":["../../src/media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAOlC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,MAGvC;IACC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAErC,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAEzC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;QACzC,IAAI,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE;KAC9B,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,QAAe,CAAC;IACpC,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,+BAA+B,WAAW,CAAC,GAAG,IAAI,QAAQ,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,QAAQ,EAAE,CAAC,CAAC;IACrF,OAAO,EAAE,MAAM,EAAE,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAKtC;IACC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACrD,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAEzC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC;QACnD,IAAI,EAAE;YACJ,UAAU,EAAE,SAAS;YACrB,QAAQ,EAAE,OAAO;SAClB;QACD,MAAM,EAAE;YACN,IAAI,EAAE,IAAI;SACX;KACF,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,QAAe,CAAC;IACpC,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,8BAA8B,WAAW,CAAC,GAAG,IAAI,QAAQ,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,OAAO,EAAE,CAAC,CAAC;IACnF,OAAO,EAAE,MAAM,EAAE,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAChC,QAAa,EACb,WAAgB,EAChB,UAAkB;IAElB,IAAI,MAAc,CAAC;IAEnB,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,GAAG,QAAQ,CAAC;IACpB,CAAC;SAAM,IAAI,QAAQ,YAAY,WAAW,EAAE,CAAC;QAC3C,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,WAAW,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACjE,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC;IAC5B,CAAC;SAAM,IAAI,WAAW,CAAC,IAAI,YAAY,WAAW,EAAE,CAAC;QACnD,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;SAAM,IAAI,OAAO,WAAW,CAAC,iBAAiB,KAAK,UAAU,EAAE,CAAC;QAC/D,wCAAwC;QACxC,MAAM,MAAM,GAAG,WAAW,CAAC,iBAAiB,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,OAAO,WAAW,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;QACvD,kDAAkD;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,UAAU,EAAE,CAAC,CAAC;QAC3E,MAAM,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,UAAU;IAC/D,CAAC;SAAM,IAAI,OAAO,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,UAAU,EAAE,CAAC;QACnE,gCAAgC;QAChC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,OAAO,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAClD,gCAAgC;QAChC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,WAAuB,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,uCAAuC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,OAAO,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzE,MAAM,IAAI,KAAK,CACb,4DAA4D,KAAK,GAAG,CACrE,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAiBD;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAIrC;IACC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,EAAE,GAAG,MAAM,CAAC;IAEzD,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAEzC,8CAA8C;IAC9C,wEAAwE;IACxE,MAAM,WAAW,GACf,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEhF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;QAC5C,IAAI,EAAE;YACJ,UAAU,EAAE,SAAS;YACrB,KAAK,EAAE,WAAkB;SAC1B;KACF,CAAC,CAAC;IAEH,mEAAmE;IACnE,+CAA+C;IAC/C,MAAM,WAAW,GAAG,QAAe,CAAC;IACpC,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,6BAA6B,WAAW,CAAC,GAAG,IAAI,QAAQ,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,IAAI,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC;IACtE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAMpC;IACC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAE/D,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAEzC,8CAA8C;IAC9C,wEAAwE;IACxE,MAAM,UAAU,GACd,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7E,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;QAC3C,IAAI,EAAE;YACJ,SAAS,EAAE,QAAQ;YACnB,SAAS,EAAE,QAAQ;YACnB,IAAI,EAAE,UAAiB;YACvB,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,EAAE,QAAQ,EAAE,CAAC;SAC5C;KACF,CAAC,CAAC;IAEH,mEAAmE;IACnE,MAAM,WAAW,GAAG,QAAe,CAAC;IACpC,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC7D,MAAM,IAAI,KAAK,CAAC,4BAA4B,WAAW,CAAC,GAAG,IAAI,QAAQ,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC;IACnE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAKnC;IACC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;IAE3D,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;IAExD,qDAAqD;IACrD,MAAM,kBAAkB,GAAG,CAAC,WAAmB,EAAsC,EAAE;QACrF,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACpD,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACpD,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC;QACrD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAEpD,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;YAC7C,IAAI,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE;YACtC,IAAI,EAAE;gBACJ,OAAO;gBACP,QAAQ,EAAE,OAAO;aAClB;SACF,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,GAAG,IAAI,QAAQ,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACzF,CAAC;QAED,OAAO;YACL,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,IAAI,SAAS;YACjD,MAAM,EAAE,SAAS;SAClB,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;QAC9C,MAAM,EAAE,EAAE,eAAe,EAAE,aAAa,EAAE;QAC1C,IAAI,EAAE;YACJ,UAAU,EAAE,SAAS;YACrB,OAAO;YACP,QAAQ,EAAE,OAAO;SAClB;KACF,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,GAAG,IAAI,QAAQ,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,IAAI,SAAS;QACjD,MAAM,EAAE,SAAS;KAClB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAKlC;IACC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;IAE1D,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,EAAE,CAAC;IACrB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAEtD,qDAAqD;IACrD,MAAM,kBAAkB,GAAG,CAAC,WAAmB,EAAsC,EAAE;QACrF,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACpD,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QACpD,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC;QACrD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAEpD,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;YAC7C,IAAI,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE;YACtC,IAAI,EAAE;gBACJ,OAAO;gBACP,QAAQ,EAAE,MAAM;aACjB;SACF,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,GAAG,IAAI,QAAQ,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxF,CAAC;QAED,OAAO;YACL,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,IAAI,SAAS;YACjD,MAAM,EAAE,SAAS;SAClB,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;QAC9C,MAAM,EAAE,EAAE,eAAe,EAAE,aAAa,EAAE;QAC1C,IAAI,EAAE;YACJ,UAAU,EAAE,SAAS;YACrB,OAAO;YACP,QAAQ,EAAE,MAAM;SACjB;KACF,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,GAAG,IAAI,QAAQ,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,IAAI,SAAS;QACjD,MAAM,EAAE,SAAS;KAClB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAC5B,QAAgB;IAEhB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACjD,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO,CAAC;QACb,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,KAAK,CAAC;QACf,KAAK,MAAM;YACT,OAAO,KAAK,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,KAAK,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,KAAK,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,KAAK,CAAC;QACf;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,SAAiB;IACpC,+CAA+C;IAC/C,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3F,OAAO,IAAI,CAAC;IACd,CAAC;IACD,iFAAiF;IACjF,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/B,OAAO,GAAG,CAAC,QAAQ,KAAK,OAAO,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,uCAAuC;IACtD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAOnC;IACC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;IAElF,IAAI,MAAc,CAAC;IACnB,IAAI,IAAY,CAAC;IAEjB,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,GAAG,WAAW,CAAC;QACrB,IAAI,GAAG,QAAQ,IAAI,MAAM,CAAC;IAC5B,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,kCAAkC;YAClC,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC;gBACvC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;gBAC/C,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAEpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,GAAG,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,qBAAqB;YACrB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,mCAAmC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;YACnD,IAAI,GAAG,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;IAED,gDAAgD;IAChD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAElG,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,eAAe,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACvE,OAAO,aAAa,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC;IACpE,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,cAAc,CAAC;YACvC,OAAO;YACP,IAAI,EAAE,MAAM;YACZ,QAAQ,EAAE,IAAI;YACd,QAAQ;SACT,CAAC,CAAC;QACH,OAAO,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAClE,CAAC;AACH,CAAC"}
@@ -43,3 +43,20 @@ export declare function formatMentionForCard(target: {
43
43
  * Format @everyone for card message
44
44
  */
45
45
  export declare function formatMentionAllForCard(): string;
46
+ /**
47
+ * Build complete message with @mentions (text format)
48
+ *
49
+ * Prepends all mention tags to the message for proper forwarding.
50
+ */
51
+ export declare function buildMentionedMessage(targets: Array<{
52
+ openId: string;
53
+ name?: string;
54
+ }>, message: string): string;
55
+ /**
56
+ * Build card content with @mentions (Markdown format)
57
+ *
58
+ * Prepends all mention tags to the message for card rendering.
59
+ */
60
+ export declare function buildMentionedCardContent(targets: Array<{
61
+ openId: string;
62
+ }>, message: string): string;
@@ -74,4 +74,26 @@ export function formatMentionForCard(target) {
74
74
  export function formatMentionAllForCard() {
75
75
  return `<at id=all></at>`;
76
76
  }
77
+ /**
78
+ * Build complete message with @mentions (text format)
79
+ *
80
+ * Prepends all mention tags to the message for proper forwarding.
81
+ */
82
+ export function buildMentionedMessage(targets, message) {
83
+ if (targets.length === 0)
84
+ return message;
85
+ const mentionParts = targets.map((t) => formatMentionForText(t));
86
+ return `${mentionParts.join(" ")} ${message}`;
87
+ }
88
+ /**
89
+ * Build card content with @mentions (Markdown format)
90
+ *
91
+ * Prepends all mention tags to the message for card rendering.
92
+ */
93
+ export function buildMentionedCardContent(targets, message) {
94
+ if (targets.length === 0)
95
+ return message;
96
+ const mentionParts = targets.map((t) => formatMentionForCard(t));
97
+ return `${mentionParts.join(" ")} ${message}`;
98
+ }
77
99
  //# sourceMappingURL=mention.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mention.js","sourceRoot":"","sources":["../../src/mention.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAuB,EACvB,SAAkB;IAElB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IAE9C,OAAO,QAAQ;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACZ,yBAAyB;QACzB,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC1D,oBAAoB;QACpB,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;IACxB,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,OAAQ;QACrB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,GAAG,EAAE,CAAC,CAAC,GAAG;KACX,CAAC,CAAC,CAAC;AACR,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAuB,EACvB,SAAkB;IAElB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC9C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAExC,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC;IAC1D,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;IAEzE,IAAI,eAAe,EAAE,CAAC;QACpB,+CAA+C;QAC/C,OAAO,eAAe,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,kDAAkD;QAClD,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;QACvE,OAAO,aAAa,IAAI,eAAe,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,cAAwB;IACvE,IAAI,MAAM,GAAG,IAAI,CAAC;IAElB,4BAA4B;IAC5B,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAyC;IAC5E,OAAO,gBAAgB,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,IAAI,MAAM,OAAO,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,iCAAiC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA0B;IAC7D,OAAO,UAAU,MAAM,CAAC,MAAM,QAAQ,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,kBAAkB,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"mention.js","sourceRoot":"","sources":["../../src/mention.ts"],"names":[],"mappings":"AAWA;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAuB,EACvB,SAAkB;IAElB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IAE9C,OAAO,QAAQ;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACZ,yBAAyB;QACzB,IAAI,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QAC1D,oBAAoB;QACpB,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC;IACxB,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,OAAQ;QACrB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,GAAG,EAAE,CAAC,CAAC,GAAG;KACX,CAAC,CAAC,CAAC;AACR,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAuB,EACvB,SAAkB;IAElB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IAC9C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAExC,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,KAAK,KAAK,CAAC;IAC1D,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;IAEzE,IAAI,eAAe,EAAE,CAAC;QACpB,+CAA+C;QAC/C,OAAO,eAAe,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,kDAAkD;QAClD,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;QACvE,OAAO,aAAa,IAAI,eAAe,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,cAAwB;IACvE,IAAI,MAAM,GAAG,IAAI,CAAC;IAElB,4BAA4B;IAC5B,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;QACjC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAyC;IAC5E,OAAO,gBAAgB,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,IAAI,MAAM,OAAO,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,iCAAiC,CAAC;AAC3C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA0B;IAC7D,OAAO,UAAU,MAAM,CAAC,MAAM,QAAQ,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAiD,EAAE,OAAe;IACtG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAEzC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CAAC,OAAkC,EAAE,OAAe;IAC3F,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAEzC,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;AAChD,CAAC"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Message Context and Quoting
3
+ *
4
+ * Functions for fetching quoted/replied message content to provide
5
+ * better conversational context to the AI agent.
6
+ */
7
+ import type { ResolvedLarkAccount } from "./types.js";
8
+ export type LarkMessageInfo = {
9
+ messageId: string;
10
+ chatId: string;
11
+ senderId?: string;
12
+ senderOpenId?: string;
13
+ content: string;
14
+ contentType: string;
15
+ createTime?: number;
16
+ parent_id?: string;
17
+ thread_id?: string;
18
+ root_id?: string;
19
+ };
20
+ /**
21
+ * Get a message by its ID.
22
+ *
23
+ * Useful for fetching quoted/replied message content when the user
24
+ * replies to a previous message. This provides context to the AI agent.
25
+ *
26
+ * @param params - Account and message ID
27
+ * @returns Message info or null if not found
28
+ */
29
+ export declare function getLarkMessage(params: {
30
+ account: ResolvedLarkAccount;
31
+ messageId: string;
32
+ }): Promise<LarkMessageInfo | null>;
33
+ /**
34
+ * Format quoted message context for inclusion in the message body.
35
+ *
36
+ * When a user replies to a previous message, this function formats
37
+ * the quoted content for inclusion in the AI context.
38
+ *
39
+ * @param quotedMessage - The message being replied to
40
+ * @returns Formatted context string
41
+ */
42
+ export declare function formatQuotedContext(quotedMessage: LarkMessageInfo | null): string;
43
+ /**
44
+ * Check if a message event is a reply to another message.
45
+ *
46
+ * Lark messages have a parent_id field when they are replies.
47
+ *
48
+ * @param parent_id - The parent_id from the message event
49
+ * @returns true if this is a reply
50
+ */
51
+ export declare function isReplyMessage(parent_id?: string): boolean;
52
+ /**
53
+ * Build context with quoted message if applicable.
54
+ *
55
+ * This combines the original message body with quoted context
56
+ * when the user is replying to a previous message.
57
+ *
58
+ * @param params - Message details
59
+ * @returns Combined message body with context
60
+ */
61
+ export declare function buildMessageContextWithQuote(params: {
62
+ account: ResolvedLarkAccount;
63
+ messageBody: string;
64
+ parentId?: string;
65
+ }): Promise<string>;
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Message Context and Quoting
3
+ *
4
+ * Functions for fetching quoted/replied message content to provide
5
+ * better conversational context to the AI agent.
6
+ */
7
+ import { createLarkClient } from "./client.js";
8
+ import { extractText as extractTextFromMessage } from "./monitor.js";
9
+ /**
10
+ * Get a message by its ID.
11
+ *
12
+ * Useful for fetching quoted/replied message content when the user
13
+ * replies to a previous message. This provides context to the AI agent.
14
+ *
15
+ * @param params - Account and message ID
16
+ * @returns Message info or null if not found
17
+ */
18
+ export async function getLarkMessage(params) {
19
+ const { account, messageId } = params;
20
+ const client = createLarkClient(account);
21
+ try {
22
+ const response = (await client.im.message.get({
23
+ path: { message_id: messageId },
24
+ }));
25
+ if (response.code !== 0) {
26
+ return null;
27
+ }
28
+ const item = response.data?.items?.[0];
29
+ if (!item) {
30
+ return null;
31
+ }
32
+ // Extract text content based on message type
33
+ const content = extractTextFromMessage(item.content ?? "", item.msg_type ?? "text");
34
+ return {
35
+ messageId: item.message_id ?? messageId,
36
+ chatId: item.chat_id ?? "",
37
+ senderId: item.sender_id?.union_id || item.sender_id?.user_id,
38
+ senderOpenId: item.sender_id?.open_id,
39
+ content,
40
+ contentType: item.msg_type ?? "text",
41
+ createTime: item.create_time ? parseInt(item.create_time, 10) : undefined,
42
+ };
43
+ }
44
+ catch (error) {
45
+ console.error(`[lark] Failed to get message ${messageId}:`, error);
46
+ return null;
47
+ }
48
+ }
49
+ /**
50
+ * Format quoted message context for inclusion in the message body.
51
+ *
52
+ * When a user replies to a previous message, this function formats
53
+ * the quoted content for inclusion in the AI context.
54
+ *
55
+ * @param quotedMessage - The message being replied to
56
+ * @returns Formatted context string
57
+ */
58
+ export function formatQuotedContext(quotedMessage) {
59
+ if (!quotedMessage) {
60
+ return "";
61
+ }
62
+ const sender = quotedMessage.senderOpenId || quotedMessage.senderId || "Unknown";
63
+ const content = quotedMessage.content.slice(0, 200); // Limit to 200 chars
64
+ const ellipsis = quotedMessage.content.length > 200 ? "..." : "";
65
+ return `[Replying to ${sender}: "${content}"${ellipsis}]`;
66
+ }
67
+ /**
68
+ * Check if a message event is a reply to another message.
69
+ *
70
+ * Lark messages have a parent_id field when they are replies.
71
+ *
72
+ * @param parent_id - The parent_id from the message event
73
+ * @returns true if this is a reply
74
+ */
75
+ export function isReplyMessage(parent_id) {
76
+ return !!parent_id && parent_id.length > 0;
77
+ }
78
+ /**
79
+ * Build context with quoted message if applicable.
80
+ *
81
+ * This combines the original message body with quoted context
82
+ * when the user is replying to a previous message.
83
+ *
84
+ * @param params - Message details
85
+ * @returns Combined message body with context
86
+ */
87
+ export async function buildMessageContextWithQuote(params) {
88
+ const { account, messageBody, parentId } = params;
89
+ // If not a reply, return as-is
90
+ if (!parentId || !isReplyMessage(parentId)) {
91
+ return messageBody;
92
+ }
93
+ // Fetch the quoted message
94
+ const quotedMessage = await getLarkMessage({
95
+ account,
96
+ messageId: parentId,
97
+ });
98
+ const quotedContext = formatQuotedContext(quotedMessage);
99
+ // Combine quoted context with new message
100
+ if (quotedContext) {
101
+ return `${quotedContext}\n\n${messageBody}`;
102
+ }
103
+ return messageBody;
104
+ }
105
+ //# sourceMappingURL=message-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-context.js","sourceRoot":"","sources":["../../src/message-context.ts"],"names":[],"mappings":"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"}