@xwang152/claw-lark 0.1.22 → 0.1.24

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,9 +12,13 @@ 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";
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";
18
22
  export type { LarkDomain, LarkConnectionMode, LarkAccountConfig, ResolvedLarkAccount, LarkChannelConfig, LarkMessageEvent, ParsedMessage, SendResult, } from "./src/types.js";
19
23
  declare const plugin: {
20
24
  id: string;
package/dist/index.js CHANGED
@@ -16,9 +16,12 @@ 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";
22
25
  const plugin = {
23
26
  id: "claw-lark",
24
27
  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;AAYlC,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":"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"}
@@ -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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"}
@@ -10,6 +10,25 @@ import { startWebhookServer } from "./webhook.js";
10
10
  // Active connections for cleanup
11
11
  let activeWsClient = null;
12
12
  let activeWebhookServer = null;
13
+ /**
14
+ * Determine receive_id_type from recipient ID format.
15
+ * IDs starting with "oc_" are chat IDs,
16
+ * IDs starting with "ou_" are open IDs (user),
17
+ * IDs starting with "on_" are union IDs (user).
18
+ */
19
+ function inferReceiveIdType(recipientId) {
20
+ if (recipientId.startsWith("oc_")) {
21
+ return "chat_id";
22
+ }
23
+ if (recipientId.startsWith("ou_")) {
24
+ return "open_id";
25
+ }
26
+ if (recipientId.startsWith("on_")) {
27
+ return "union_id";
28
+ }
29
+ // Default to open_id for other formats
30
+ return "open_id";
31
+ }
13
32
  /**
14
33
  * Extract plain text from Lark message content.
15
34
  * Handles different message types (text, post/rich-text).
@@ -150,9 +169,42 @@ export async function routeMessage(event, account) {
150
169
  cfg: api.config,
151
170
  dispatcherOptions: {
152
171
  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)}`);
172
+ // Send reply to Lark
173
+ try {
174
+ const client = createLarkClient(account);
175
+ const text = payload.text || "";
176
+ const mediaUrls = payload.mediaUrls || [];
177
+ const replyToId = payload.replyToId || parsed.threadId;
178
+ // Send text message
179
+ if (text || mediaUrls.length > 0) {
180
+ let finalText = text;
181
+ // If there are media URLs, append them to the text
182
+ // Note: Lark requires media to be uploaded first, then sent with media_key
183
+ // For now, we'll just send the text
184
+ const response = await client.im.message.create({
185
+ params: {
186
+ receive_id_type: inferReceiveIdType(parsed.chatId),
187
+ },
188
+ data: {
189
+ receive_id: parsed.chatId,
190
+ msg_type: "text",
191
+ content: JSON.stringify({ text: finalText }),
192
+ ...(replyToId && { root_id: replyToId }),
193
+ // Reply to specific message if in thread
194
+ ...(parsed.threadId && { parent_id: parsed.messageId }),
195
+ },
196
+ });
197
+ if (response.code === 0) {
198
+ api.logger.info(`[feishu] Reply sent: message_id=${response.data?.message_id}`);
199
+ }
200
+ else {
201
+ api.logger.error(`[feishu] Failed to send reply: ${response.msg}`);
202
+ }
203
+ }
204
+ }
205
+ catch (err) {
206
+ api.logger.error(`[feishu] Error sending reply: ${err}`);
207
+ }
156
208
  },
157
209
  onError: (err) => {
158
210
  api.logger.error(`[feishu] Reply error: ${err}`);
@@ -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,54 @@
1
+ /**
2
+ * Sender Name Resolution
3
+ *
4
+ * Resolves sender display names from open_id using Lark contact API.
5
+ * Caches results for 10 minutes to avoid excessive API calls.
6
+ *
7
+ * This is useful in group chats where the agent needs to distinguish
8
+ * who is speaking (by name rather than just open_id).
9
+ */
10
+ import type { ResolvedLarkAccount } from "./types.js";
11
+ /**
12
+ * Resolve sender display name from open_id.
13
+ *
14
+ * Uses the contact.user.get API to fetch the user's display name.
15
+ * Results are cached for 10 minutes to reduce API calls.
16
+ *
17
+ * @param params - Account and sender open_id
18
+ * @returns Display name or undefined if not found
19
+ */
20
+ export declare function resolveLarkSenderName(params: {
21
+ account: ResolvedLarkAccount;
22
+ senderOpenId: string;
23
+ log?: (...args: any[]) => void;
24
+ }): Promise<string | undefined>;
25
+ /**
26
+ * Clear the sender name cache.
27
+ *
28
+ * This can be useful for testing or when you need fresh data.
29
+ */
30
+ export declare function clearSenderNameCache(): void;
31
+ /**
32
+ * Get cache statistics.
33
+ *
34
+ * Useful for monitoring and debugging.
35
+ */
36
+ export declare function getSenderNameCacheStats(): {
37
+ size: number;
38
+ entries: Array<{
39
+ openId: string;
40
+ name: string;
41
+ expireAt: number;
42
+ }>;
43
+ };
44
+ /**
45
+ * Prefetch sender names for a list of open_ids.
46
+ *
47
+ * This can be useful for warming up the cache before processing
48
+ * a batch of messages.
49
+ */
50
+ export declare function prefetchLarkSenderNames(params: {
51
+ account: ResolvedLarkAccount;
52
+ senderOpenIds: string[];
53
+ log?: (...args: any[]) => void;
54
+ }): Promise<void>;
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Sender Name Resolution
3
+ *
4
+ * Resolves sender display names from open_id using Lark contact API.
5
+ * Caches results for 10 minutes to avoid excessive API calls.
6
+ *
7
+ * This is useful in group chats where the agent needs to distinguish
8
+ * who is speaking (by name rather than just open_id).
9
+ */
10
+ import { createLarkClient } from "./client.js";
11
+ // Cache display names by open_id to avoid an API call on every message
12
+ const SENDER_NAME_TTL_MS = 10 * 60 * 1000; // 10 minutes
13
+ const senderNameCache = new Map();
14
+ /**
15
+ * Resolve sender display name from open_id.
16
+ *
17
+ * Uses the contact.user.get API to fetch the user's display name.
18
+ * Results are cached for 10 minutes to reduce API calls.
19
+ *
20
+ * @param params - Account and sender open_id
21
+ * @returns Display name or undefined if not found
22
+ */
23
+ export async function resolveLarkSenderName(params) {
24
+ const { account, senderOpenId, log = console.log } = params;
25
+ if (!senderOpenId)
26
+ return undefined;
27
+ // Check cache first
28
+ const cached = senderNameCache.get(senderOpenId);
29
+ const now = Date.now();
30
+ if (cached && cached.expireAt > now) {
31
+ return cached.name;
32
+ }
33
+ try {
34
+ const client = createLarkClient(account);
35
+ // contact/v3/user/:user_id?user_id_type=open_id
36
+ const res = await client.contact.user.get({
37
+ path: { user_id: senderOpenId },
38
+ params: { user_id_type: "open_id" },
39
+ });
40
+ // Try multiple name fields in order of preference
41
+ const name = res?.data?.user?.name ||
42
+ res?.data?.user?.display_name ||
43
+ res?.data?.user?.nickname ||
44
+ res?.data?.user?.en_name;
45
+ if (name && typeof name === "string") {
46
+ // Cache the result
47
+ senderNameCache.set(senderOpenId, { name, expireAt: now + SENDER_NAME_TTL_MS });
48
+ return name;
49
+ }
50
+ return undefined;
51
+ }
52
+ catch (err) {
53
+ // Best-effort. Don't fail message handling if name lookup fails.
54
+ log(`[lark] Failed to resolve sender name for ${senderOpenId}: ${String(err)}`);
55
+ return undefined;
56
+ }
57
+ }
58
+ /**
59
+ * Clear the sender name cache.
60
+ *
61
+ * This can be useful for testing or when you need fresh data.
62
+ */
63
+ export function clearSenderNameCache() {
64
+ senderNameCache.clear();
65
+ }
66
+ /**
67
+ * Get cache statistics.
68
+ *
69
+ * Useful for monitoring and debugging.
70
+ */
71
+ export function getSenderNameCacheStats() {
72
+ const now = Date.now();
73
+ const entries = Array.from(senderNameCache.entries())
74
+ .filter(([, value]) => value.expireAt > now)
75
+ .map(([openId, value]) => ({
76
+ openId,
77
+ name: value.name,
78
+ expireAt: value.expireAt,
79
+ }));
80
+ return {
81
+ size: entries.length,
82
+ entries,
83
+ };
84
+ }
85
+ /**
86
+ * Prefetch sender names for a list of open_ids.
87
+ *
88
+ * This can be useful for warming up the cache before processing
89
+ * a batch of messages.
90
+ */
91
+ export async function prefetchLarkSenderNames(params) {
92
+ const { account, senderOpenIds, log = console.log } = params;
93
+ // Only fetch names that aren't already cached
94
+ const now = Date.now();
95
+ const uncachedIds = senderOpenIds.filter((id) => {
96
+ const cached = senderNameCache.get(id);
97
+ return !cached || cached.expireAt <= now;
98
+ });
99
+ // Process in parallel with a limit to avoid overwhelming the API
100
+ const batchSize = 10;
101
+ for (let i = 0; i < uncachedIds.length; i += batchSize) {
102
+ const batch = uncachedIds.slice(i, i + batchSize);
103
+ await Promise.all(batch.map((id) => resolveLarkSenderName({ account, senderOpenId: id, log }).catch(() => {
104
+ // Ignore errors - best effort prefetch
105
+ })));
106
+ }
107
+ }
108
+ //# sourceMappingURL=sender-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sender-name.js","sourceRoot":"","sources":["../../src/sender-name.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Typing Indicators for Lark/Feishu
3
+ *
4
+ * Since Lark/Feishu doesn't have a native typing indicator API,
5
+ * we use emoji reactions as a substitute.
6
+ *
7
+ * When the bot starts processing a message, it adds a "Typing" reaction.
8
+ * When the reply is sent, it removes the reaction.
9
+ *
10
+ * Reference: https://open.feishu.cn/document/server-docs/im-v1/message-reaction/emojis-introduce
11
+ */
12
+ import type { OpenClawConfig } from "openclaw/plugin-sdk";
13
+ export type TypingIndicatorState = {
14
+ messageId: string;
15
+ reactionId: string | null;
16
+ };
17
+ /**
18
+ * Add a typing indicator (reaction) to a message.
19
+ *
20
+ * This adds a visual indicator that the bot is "typing" or processing the message.
21
+ * Uses the "Typing" emoji reaction if available, falls back gracefully if not.
22
+ *
23
+ * @param params - Configuration and message ID
24
+ * @returns State object containing message ID and reaction ID (for later removal)
25
+ */
26
+ export declare function addTypingIndicator(params: {
27
+ cfg: OpenClawConfig;
28
+ messageId: string;
29
+ accountId?: string;
30
+ }): Promise<TypingIndicatorState>;
31
+ /**
32
+ * Remove a typing indicator (reaction) from a message.
33
+ *
34
+ * This should be called after the reply is sent to clean up the typing indicator.
35
+ *
36
+ * @param params - Configuration and typing indicator state
37
+ */
38
+ export declare function removeTypingIndicator(params: {
39
+ cfg: OpenClawConfig;
40
+ state: TypingIndicatorState;
41
+ accountId?: string;
42
+ }): Promise<void>;
43
+ /**
44
+ * Create a typing indicator controller for managing the lifecycle.
45
+ *
46
+ * This is useful for ensuring the typing indicator is removed even if errors occur.
47
+ *
48
+ * @example
49
+ * ```typescript
50
+ * const typing = createTypingController({ cfg, messageId });
51
+ * await typing.start();
52
+ * try {
53
+ * // ... process message and send reply ...
54
+ * } finally {
55
+ * await typing.stop();
56
+ * }
57
+ * ```
58
+ */
59
+ export declare function createTypingController(params: {
60
+ cfg: OpenClawConfig;
61
+ messageId: string;
62
+ accountId?: string;
63
+ }): {
64
+ /**
65
+ * Start the typing indicator
66
+ */
67
+ start(): Promise<void>;
68
+ /**
69
+ * Stop the typing indicator
70
+ */
71
+ stop(): Promise<void>;
72
+ /**
73
+ * Get current state
74
+ */
75
+ getState(): TypingIndicatorState | null;
76
+ };
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Typing Indicators for Lark/Feishu
3
+ *
4
+ * Since Lark/Feishu doesn't have a native typing indicator API,
5
+ * we use emoji reactions as a substitute.
6
+ *
7
+ * When the bot starts processing a message, it adds a "Typing" reaction.
8
+ * When the reply is sent, it removes the reaction.
9
+ *
10
+ * Reference: https://open.feishu.cn/document/server-docs/im-v1/message-reaction/emojis-introduce
11
+ */
12
+ import { createLarkClient } from "./client.js";
13
+ // Lark emoji type for typing indicator
14
+ // Note: "Typing" may not be available in all Lark instances
15
+ // Fallback options: "THUMBSUP", "OK", "SMILE"
16
+ const TYPING_EMOJI = "Typing";
17
+ /**
18
+ * Extract Lark channel config from OpenClaw config
19
+ */
20
+ function getChannelConfig(cfg) {
21
+ return cfg.channels?.lark ?? {};
22
+ }
23
+ /**
24
+ * Add a typing indicator (reaction) to a message.
25
+ *
26
+ * This adds a visual indicator that the bot is "typing" or processing the message.
27
+ * Uses the "Typing" emoji reaction if available, falls back gracefully if not.
28
+ *
29
+ * @param params - Configuration and message ID
30
+ * @returns State object containing message ID and reaction ID (for later removal)
31
+ */
32
+ export async function addTypingIndicator(params) {
33
+ const { cfg, messageId, accountId = "default" } = params;
34
+ const channelConfig = getChannelConfig(cfg);
35
+ const accountConfig = channelConfig.accounts?.[accountId];
36
+ if (!accountConfig?.appId || !accountConfig?.appSecret) {
37
+ return { messageId, reactionId: null };
38
+ }
39
+ const client = createLarkClient({
40
+ accountId,
41
+ enabled: true,
42
+ configured: true,
43
+ appId: accountConfig.appId,
44
+ appSecret: accountConfig.appSecret,
45
+ domain: accountConfig.domain ?? "feishu",
46
+ connectionMode: "websocket",
47
+ webhookPort: 3000,
48
+ dmPolicy: "open",
49
+ dmAllowlist: [],
50
+ groupPolicy: "open",
51
+ groupAllowlist: [],
52
+ requireMention: true,
53
+ mediaMaxMb: 30,
54
+ renderMode: "auto",
55
+ historyLimit: 10,
56
+ });
57
+ try {
58
+ const response = await client.im.messageReaction.create({
59
+ path: { message_id: messageId },
60
+ data: {
61
+ reaction_type: { emoji_type: TYPING_EMOJI },
62
+ },
63
+ });
64
+ const reactionId = response?.data?.reaction_id ?? null;
65
+ return { messageId, reactionId };
66
+ }
67
+ catch (err) {
68
+ // Silently fail - typing indicator is not critical
69
+ console.log(`[lark] Failed to add typing indicator: ${err}`);
70
+ return { messageId, reactionId: null };
71
+ }
72
+ }
73
+ /**
74
+ * Remove a typing indicator (reaction) from a message.
75
+ *
76
+ * This should be called after the reply is sent to clean up the typing indicator.
77
+ *
78
+ * @param params - Configuration and typing indicator state
79
+ */
80
+ export async function removeTypingIndicator(params) {
81
+ const { cfg, state, accountId = "default" } = params;
82
+ if (!state.reactionId)
83
+ return;
84
+ const channelConfig = getChannelConfig(cfg);
85
+ const accountConfig = channelConfig.accounts?.[accountId];
86
+ if (!accountConfig?.appId || !accountConfig?.appSecret)
87
+ return;
88
+ const client = createLarkClient({
89
+ accountId,
90
+ enabled: true,
91
+ configured: true,
92
+ appId: accountConfig.appId,
93
+ appSecret: accountConfig.appSecret,
94
+ domain: accountConfig.domain ?? "feishu",
95
+ connectionMode: "websocket",
96
+ webhookPort: 3000,
97
+ dmPolicy: "open",
98
+ dmAllowlist: [],
99
+ groupPolicy: "open",
100
+ groupAllowlist: [],
101
+ requireMention: true,
102
+ mediaMaxMb: 30,
103
+ renderMode: "auto",
104
+ historyLimit: 10,
105
+ });
106
+ try {
107
+ await client.im.messageReaction.delete({
108
+ path: {
109
+ message_id: state.messageId,
110
+ reaction_id: state.reactionId,
111
+ },
112
+ });
113
+ }
114
+ catch (err) {
115
+ // Silently fail - cleanup is not critical
116
+ console.log(`[lark] Failed to remove typing indicator: ${err}`);
117
+ }
118
+ }
119
+ /**
120
+ * Create a typing indicator controller for managing the lifecycle.
121
+ *
122
+ * This is useful for ensuring the typing indicator is removed even if errors occur.
123
+ *
124
+ * @example
125
+ * ```typescript
126
+ * const typing = createTypingController({ cfg, messageId });
127
+ * await typing.start();
128
+ * try {
129
+ * // ... process message and send reply ...
130
+ * } finally {
131
+ * await typing.stop();
132
+ * }
133
+ * ```
134
+ */
135
+ export function createTypingController(params) {
136
+ let state = null;
137
+ return {
138
+ /**
139
+ * Start the typing indicator
140
+ */
141
+ async start() {
142
+ state = await addTypingIndicator(params);
143
+ },
144
+ /**
145
+ * Stop the typing indicator
146
+ */
147
+ async stop() {
148
+ if (state) {
149
+ await removeTypingIndicator({
150
+ cfg: params.cfg,
151
+ state,
152
+ accountId: params.accountId,
153
+ });
154
+ state = null;
155
+ }
156
+ },
157
+ /**
158
+ * Get current state
159
+ */
160
+ getState() {
161
+ return state;
162
+ },
163
+ };
164
+ }
165
+ //# sourceMappingURL=typing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typing.js","sourceRoot":"","sources":["../../src/typing.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xwang152/claw-lark",
3
- "version": "0.1.22",
3
+ "version": "0.1.24",
4
4
  "type": "module",
5
5
  "description": "Lark/Feishu channel plugin for OpenClaw with WebSocket and Webhook support",
6
6
  "license": "MIT",