@max1874/feishu 0.2.24 → 0.2.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/package.json +1 -1
- package/src/bot.ts +1 -0
- package/src/reply-dispatcher.ts +5 -1
- package/src/send.ts +10 -4
package/package.json
CHANGED
package/src/bot.ts
CHANGED
|
@@ -775,6 +775,7 @@ export async function handleFeishuMessage(params: {
|
|
|
775
775
|
runtime: runtime as RuntimeEnv,
|
|
776
776
|
chatId: ctx.chatId,
|
|
777
777
|
replyToMessageId: effectiveReplyToMessageId,
|
|
778
|
+
replyInThread: !!effectiveReplyToMessageId,
|
|
778
779
|
mentionTargets: ctx.mentionTargets,
|
|
779
780
|
});
|
|
780
781
|
|
package/src/reply-dispatcher.ts
CHANGED
|
@@ -34,13 +34,15 @@ export type CreateFeishuReplyDispatcherParams = {
|
|
|
34
34
|
runtime: RuntimeEnv;
|
|
35
35
|
chatId: string;
|
|
36
36
|
replyToMessageId?: string;
|
|
37
|
+
/** When true, reply only appears in thread (not in main chat timeline) */
|
|
38
|
+
replyInThread?: boolean;
|
|
37
39
|
/** Mention targets, will be auto-included in replies */
|
|
38
40
|
mentionTargets?: MentionTarget[];
|
|
39
41
|
};
|
|
40
42
|
|
|
41
43
|
export function createFeishuReplyDispatcher(params: CreateFeishuReplyDispatcherParams) {
|
|
42
44
|
const core = getFeishuRuntime();
|
|
43
|
-
const { cfg, agentId, chatId, replyToMessageId, mentionTargets } = params;
|
|
45
|
+
const { cfg, agentId, chatId, replyToMessageId, replyInThread, mentionTargets } = params;
|
|
44
46
|
|
|
45
47
|
const prefixContext = createReplyPrefixContext({
|
|
46
48
|
cfg,
|
|
@@ -127,6 +129,7 @@ export function createFeishuReplyDispatcher(params: CreateFeishuReplyDispatcherP
|
|
|
127
129
|
to: chatId,
|
|
128
130
|
text: chunk,
|
|
129
131
|
replyToMessageId,
|
|
132
|
+
replyInThread,
|
|
130
133
|
mentions: isFirstChunk ? mentionTargets : undefined,
|
|
131
134
|
});
|
|
132
135
|
isFirstChunk = false;
|
|
@@ -142,6 +145,7 @@ export function createFeishuReplyDispatcher(params: CreateFeishuReplyDispatcherP
|
|
|
142
145
|
to: chatId,
|
|
143
146
|
text: chunk,
|
|
144
147
|
replyToMessageId,
|
|
148
|
+
replyInThread,
|
|
145
149
|
mentions: isFirstChunk ? mentionTargets : undefined,
|
|
146
150
|
});
|
|
147
151
|
isFirstChunk = false;
|
package/src/send.ts
CHANGED
|
@@ -201,12 +201,14 @@ export type SendFeishuMessageParams = {
|
|
|
201
201
|
to: string;
|
|
202
202
|
text: string;
|
|
203
203
|
replyToMessageId?: string;
|
|
204
|
+
/** When true, reply only appears in thread (not in main chat timeline) */
|
|
205
|
+
replyInThread?: boolean;
|
|
204
206
|
/** Mention target users */
|
|
205
207
|
mentions?: MentionTarget[];
|
|
206
208
|
};
|
|
207
209
|
|
|
208
210
|
export async function sendMessageFeishu(params: SendFeishuMessageParams): Promise<FeishuSendResult> {
|
|
209
|
-
const { cfg, to, text, replyToMessageId, mentions } = params;
|
|
211
|
+
const { cfg, to, text, replyToMessageId, replyInThread, mentions } = params;
|
|
210
212
|
const feishuCfg = cfg.channels?.feishu as FeishuConfig | undefined;
|
|
211
213
|
if (!feishuCfg) {
|
|
212
214
|
throw new Error("Feishu channel not configured");
|
|
@@ -239,6 +241,7 @@ export async function sendMessageFeishu(params: SendFeishuMessageParams): Promis
|
|
|
239
241
|
data: {
|
|
240
242
|
content,
|
|
241
243
|
msg_type: "text",
|
|
244
|
+
...(replyInThread ? { reply_in_thread: true } : {}),
|
|
242
245
|
},
|
|
243
246
|
});
|
|
244
247
|
|
|
@@ -276,10 +279,11 @@ export type SendFeishuCardParams = {
|
|
|
276
279
|
to: string;
|
|
277
280
|
card: Record<string, unknown>;
|
|
278
281
|
replyToMessageId?: string;
|
|
282
|
+
replyInThread?: boolean;
|
|
279
283
|
};
|
|
280
284
|
|
|
281
285
|
export async function sendCardFeishu(params: SendFeishuCardParams): Promise<FeishuSendResult> {
|
|
282
|
-
const { cfg, to, card, replyToMessageId } = params;
|
|
286
|
+
const { cfg, to, card, replyToMessageId, replyInThread } = params;
|
|
283
287
|
const feishuCfg = cfg.channels?.feishu as FeishuConfig | undefined;
|
|
284
288
|
if (!feishuCfg) {
|
|
285
289
|
throw new Error("Feishu channel not configured");
|
|
@@ -300,6 +304,7 @@ export async function sendCardFeishu(params: SendFeishuCardParams): Promise<Feis
|
|
|
300
304
|
data: {
|
|
301
305
|
content,
|
|
302
306
|
msg_type: "interactive",
|
|
307
|
+
...(replyInThread ? { reply_in_thread: true } : {}),
|
|
303
308
|
},
|
|
304
309
|
});
|
|
305
310
|
|
|
@@ -383,17 +388,18 @@ export async function sendMarkdownCardFeishu(params: {
|
|
|
383
388
|
to: string;
|
|
384
389
|
text: string;
|
|
385
390
|
replyToMessageId?: string;
|
|
391
|
+
replyInThread?: boolean;
|
|
386
392
|
/** Mention target users */
|
|
387
393
|
mentions?: MentionTarget[];
|
|
388
394
|
}): Promise<FeishuSendResult> {
|
|
389
|
-
const { cfg, to, text, replyToMessageId, mentions } = params;
|
|
395
|
+
const { cfg, to, text, replyToMessageId, replyInThread, mentions } = params;
|
|
390
396
|
// Build message content (with @mention support)
|
|
391
397
|
let cardText = text;
|
|
392
398
|
if (mentions && mentions.length > 0) {
|
|
393
399
|
cardText = buildMentionedCardContent(mentions, text);
|
|
394
400
|
}
|
|
395
401
|
const card = buildMarkdownCard(cardText);
|
|
396
|
-
return sendCardFeishu({ cfg, to, card, replyToMessageId });
|
|
402
|
+
return sendCardFeishu({ cfg, to, card, replyToMessageId, replyInThread });
|
|
397
403
|
}
|
|
398
404
|
|
|
399
405
|
/**
|