@meetquinn/animactl 0.1.5 → 0.1.6-canary.178.1.b6b4e8f
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/server/feishu/client.d.ts +15 -2
- package/dist/server/feishu/client.d.ts.map +1 -1
- package/dist/server/feishu/client.js +34 -0
- package/dist/server/feishu/events.d.ts.map +1 -1
- package/dist/server/feishu/events.js +32 -14
- package/dist/server/feishu/markdown-to-feishu-post.d.ts +33 -0
- package/dist/server/feishu/markdown-to-feishu-post.d.ts.map +1 -0
- package/dist/server/feishu/markdown-to-feishu-post.js +165 -0
- package/dist/server/feishu/message-content.d.ts +18 -0
- package/dist/server/feishu/message-content.d.ts.map +1 -0
- package/dist/server/feishu/message-content.js +81 -0
- package/dist/server/messages/message.projection.js +6 -0
- package/dist/server/runtime/delivery-prompt.d.ts.map +1 -1
- package/dist/server/runtime/delivery-prompt.js +2 -1
- package/dist/server/storage/schema/wake-queue.store.d.ts +7 -0
- package/dist/server/storage/schema/wake-queue.store.d.ts.map +1 -1
- package/dist/server/tests/feishu-processing-reaction.test.js +12 -0
- package/dist/server/tests/feishu.test.js +135 -14
- package/dist/server/tools/feishu-transcript.d.ts.map +1 -1
- package/dist/server/tools/feishu-transcript.js +20 -44
- package/dist/server/tools/messages.d.ts.map +1 -1
- package/dist/server/tools/messages.js +6 -4
- package/dist/shared/inbox.d.ts +23 -1
- package/dist/shared/inbox.d.ts.map +1 -1
- package/dist/shared/inbox.js +3 -1
- package/dist/web/assets/activity-B4OJwnP3.js +7 -0
- package/dist/web/assets/{arc-Bq-ap94z.js → arc-CgJjs1Mz.js} +1 -1
- package/dist/web/assets/architecture-7EHR7CIX-DT1kO6Bc.js +1 -0
- package/dist/web/assets/{architectureDiagram-3BPJPVTR-t8drNSRC.js → architectureDiagram-3BPJPVTR-DX05pNcQ.js} +1 -1
- package/dist/web/assets/{blockDiagram-GPEHLZMM-DR8owwwr.js → blockDiagram-GPEHLZMM-D-Mludb1.js} +1 -1
- package/dist/web/assets/{c4Diagram-AAUBKEIU-BPSIzguF.js → c4Diagram-AAUBKEIU-Bsb0K6vl.js} +1 -1
- package/dist/web/assets/channel-Dq4eYvKQ.js +1 -0
- package/dist/web/assets/{chunk-2J33WTMH-Co8mLZIL.js → chunk-2J33WTMH-6dBIHha3.js} +1 -1
- package/dist/web/assets/{chunk-3OPIFGDE-Dw12raUi.js → chunk-3OPIFGDE-Bqc3pfAk.js} +1 -1
- package/dist/web/assets/{chunk-4BX2VUAB-CKY8wz3c.js → chunk-4BX2VUAB-CZ0plHul.js} +1 -1
- package/dist/web/assets/{chunk-55IACEB6-yRziqR2X.js → chunk-55IACEB6-Yv1JzgZq.js} +1 -1
- package/dist/web/assets/{chunk-5ZQYHXKU-B7px7Cf9.js → chunk-5ZQYHXKU-ByWKqMem.js} +1 -1
- package/dist/web/assets/{chunk-727SXJPM-ES9jIHjA.js → chunk-727SXJPM-CK8zARLR.js} +1 -1
- package/dist/web/assets/{chunk-AQP2D5EJ-dvPDnAU2.js → chunk-AQP2D5EJ-BYroXC5B.js} +1 -1
- package/dist/web/assets/{chunk-BSJP7CBP-DltKnvao.js → chunk-BSJP7CBP-BcQMAxs9.js} +1 -1
- package/dist/web/assets/{chunk-CSCIHK7Q-3pfrIzKT.js → chunk-CSCIHK7Q-CCRuWCB9.js} +3 -3
- package/dist/web/assets/{chunk-FMBD7UC4-BgQjJpYE.js → chunk-FMBD7UC4-BMhbhPc_.js} +1 -1
- package/dist/web/assets/{chunk-KSCS5N6A-B1O-rUSG.js → chunk-KSCS5N6A-J3Q4NOwx.js} +1 -1
- package/dist/web/assets/{chunk-L5ZTLDWV-C67PfGbV.js → chunk-L5ZTLDWV-BOS7d14S.js} +1 -1
- package/dist/web/assets/{chunk-LZXEDZCA-B14hRkIS.js → chunk-LZXEDZCA-CwK_uG2G.js} +2 -2
- package/dist/web/assets/{chunk-ND2GUHAM-sYz_EpRL.js → chunk-ND2GUHAM-DYJIwnjb.js} +1 -1
- package/dist/web/assets/{chunk-NZK2D7GU-CLPku5Kv.js → chunk-NZK2D7GU-DBfJbGzg.js} +1 -1
- package/dist/web/assets/{chunk-O5CBEL6O-C2OO7Ssv.js → chunk-O5CBEL6O-BT_cb43i.js} +1 -1
- package/dist/web/assets/chunk-QZHKN3VN-BHdrmoTT.js +1 -0
- package/dist/web/assets/chunk-WU5MYG2G-DDfHagP8.js +1 -0
- package/dist/web/assets/{chunk-XPW4576I-DCvCOr3M.js → chunk-XPW4576I-BfTb7X-k.js} +1 -1
- package/dist/web/assets/classDiagram-4FO5ZUOK-EliXg_Ep.js +1 -0
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-EliXg_Ep.js +1 -0
- package/dist/web/assets/{clipboard-C0sMuar0.js → clipboard-CXudDRSe.js} +1 -1
- package/dist/web/assets/{cose-bilkent-S5V4N54A-BZRJ4Jzy.js → cose-bilkent-S5V4N54A-CQhFUQ5D.js} +1 -1
- package/dist/web/assets/{dagre-BM42HDAG-8ihJGwzN.js → dagre-BM42HDAG-Cg7Li6TZ.js} +1 -1
- package/dist/web/assets/{diagram-2AECGRRQ-D2pIyh4W.js → diagram-2AECGRRQ-Bt8WwwG2.js} +1 -1
- package/dist/web/assets/{diagram-5GNKFQAL-C3en9YXC.js → diagram-5GNKFQAL-B4aKVe-O.js} +1 -1
- package/dist/web/assets/{diagram-KO2AKTUF-Dee0kaUI.js → diagram-KO2AKTUF-DgqsYMpc.js} +1 -1
- package/dist/web/assets/{diagram-LMA3HP47-Dzgkv6tA.js → diagram-LMA3HP47-BoL19Yv5.js} +1 -1
- package/dist/web/assets/{diagram-OG6HWLK6-Ave__fK2.js → diagram-OG6HWLK6-CyDXkt3B.js} +1 -1
- package/dist/web/assets/{dist--6OkHJI9.js → dist-CPSyhEnI.js} +1 -1
- package/dist/web/assets/{erDiagram-TEJ5UH35-CWJN2-tQ.js → erDiagram-TEJ5UH35-BBy2TqSC.js} +1 -1
- package/dist/web/assets/eventmodeling-FCH6USID-DB0pvw2x.js +1 -0
- package/dist/web/assets/{file-text-BK8U-C4x.js → file-text-BEUVQjYd.js} +1 -1
- package/dist/web/assets/{flowDiagram-I6XJVG4X-hHMpBiLU.js → flowDiagram-I6XJVG4X-CPH9NwnF.js} +1 -1
- package/dist/web/assets/{ganttDiagram-6RSMTGT7-BNGJdAUM.js → ganttDiagram-6RSMTGT7-DpVc_Nge.js} +1 -1
- package/dist/web/assets/gitGraph-WXDBUCRP-BQhZBd8e.js +1 -0
- package/dist/web/assets/{gitGraphDiagram-PVQCEYII-jj9z0o-I.js → gitGraphDiagram-PVQCEYII-X3xT0XYM.js} +1 -1
- package/dist/web/assets/{index-DuZLxlts.js → index-BLCvi8UP.js} +2 -2
- package/dist/web/assets/info-J43DQDTF-B9YnVpsL.js +1 -0
- package/dist/web/assets/{infoDiagram-5YYISTIA-FNnONIvQ.js → infoDiagram-5YYISTIA-BgIZ3cTo.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-DjWsSmof.js → ishikawaDiagram-YF4QCWOH-DGGIcHxT.js} +1 -1
- package/dist/web/assets/{journeyDiagram-JHISSGLW-B6ywrGOO.js → journeyDiagram-JHISSGLW-29KvSTfj.js} +1 -1
- package/dist/web/assets/{kanban-definition-UN3LZRKU-CNQDx5Xd.js → kanban-definition-UN3LZRKU-0cJjZJ4H.js} +1 -1
- package/dist/web/assets/katex-FN5Pcbwv.js +1 -0
- package/dist/web/assets/{kb-D01wLh0T.js → kb-DUI-dkvk.js} +10 -10
- package/dist/web/assets/{line-CaHt4eNS.js → line-nlywd2qi.js} +1 -1
- package/dist/web/assets/{linear-T0bpnKBd.js → linear-02wgkeKe.js} +1 -1
- package/dist/web/assets/{mermaid-parser.core-DovFxha1.js → mermaid-parser.core-DjqcOAHA.js} +2 -2
- package/dist/web/assets/{mermaid.core-BApZkfAm.js → mermaid.core-CNUFKED5.js} +3 -3
- package/dist/web/assets/{mindmap-definition-RKZ34NQL-BKnf57gR.js → mindmap-definition-RKZ34NQL-QIHhR4-s.js} +1 -1
- package/dist/web/assets/packet-YPE3B663-C8sJqBG3.js +1 -0
- package/dist/web/assets/pie-LRSECV5Y-CPdDAoVs.js +1 -0
- package/dist/web/assets/{pieDiagram-4H26LBE5-Dc3LirDD.js → pieDiagram-4H26LBE5-C1qG92-A.js} +1 -1
- package/dist/web/assets/profile-BZzzRdY3.js +1 -0
- package/dist/web/assets/{quadrantDiagram-W4KKPZXB-CNCuEUat.js → quadrantDiagram-W4KKPZXB-DwTJjUzw.js} +1 -1
- package/dist/web/assets/radar-GUYGQ44K-CU1SYt4t.js +1 -0
- package/dist/web/assets/{reminders-uYqExOOq.js → reminders-P3JN1m3w.js} +1 -1
- package/dist/web/assets/{requirementDiagram-4Y6WPE33-nDm5DU62.js → requirementDiagram-4Y6WPE33-9eavvD4H.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-5OEKKPKP-Br3-NhNM.js → sankeyDiagram-5OEKKPKP-BlHTJdNW.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-3UESZ5HK-CxtVtgnc.js → sequenceDiagram-3UESZ5HK-DPlUGZcQ.js} +1 -1
- package/dist/web/assets/{src-Dj_Q9HRB.js → src-qcqv7H0T.js} +1 -1
- package/dist/web/assets/{stateDiagram-AJRCARHV-V1ciPLdQ.js → stateDiagram-AJRCARHV-DdQ1LmEo.js} +1 -1
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-DRcHu2Yx.js +1 -0
- package/dist/web/assets/{timeline-definition-PNZ67QCA-DCwFkWHv.js → timeline-definition-PNZ67QCA-CwQL43iL.js} +1 -1
- package/dist/web/assets/treeView-BLDUP644-ZolFQtHt.js +1 -0
- package/dist/web/assets/treemap-LRROVOQU-Dr7GKZtp.js +1 -0
- package/dist/web/assets/{vennDiagram-CIIHVFJN-Cgp-V4M6.js → vennDiagram-CIIHVFJN-BHVycGCG.js} +1 -1
- package/dist/web/assets/wardley-L42UT6IY-Bw7qw1Pw.js +1 -0
- package/dist/web/assets/{wardleyDiagram-YWT4CUSO-DLFZVmUE.js → wardleyDiagram-YWT4CUSO-Cxcs7nNB.js} +1 -1
- package/dist/web/assets/{xychartDiagram-2RQKCTM6-DbAVAe1y.js → xychartDiagram-2RQKCTM6-DylLURsE.js} +1 -1
- package/dist/web/index.html +1 -1
- package/package.json +1 -1
- package/dist/web/assets/activity-kje4ts5R.js +0 -7
- package/dist/web/assets/architecture-7EHR7CIX-CqAPN6oJ.js +0 -1
- package/dist/web/assets/channel-DimUZ2zE.js +0 -1
- package/dist/web/assets/chunk-QZHKN3VN-BpdTaHkN.js +0 -1
- package/dist/web/assets/chunk-WU5MYG2G-C6gdqv9X.js +0 -1
- package/dist/web/assets/classDiagram-4FO5ZUOK-HsCEyoHK.js +0 -1
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-HsCEyoHK.js +0 -1
- package/dist/web/assets/eventmodeling-FCH6USID-Z45912nw.js +0 -1
- package/dist/web/assets/gitGraph-WXDBUCRP-DMmcyfIb.js +0 -1
- package/dist/web/assets/info-J43DQDTF-r6NlxeWh.js +0 -1
- package/dist/web/assets/katex-DWeCakCI.js +0 -1
- package/dist/web/assets/packet-YPE3B663-CvG9YA9T.js +0 -1
- package/dist/web/assets/pie-LRSECV5Y-BQlUFUbz.js +0 -1
- package/dist/web/assets/profile-gaKf76nc.js +0 -1
- package/dist/web/assets/radar-GUYGQ44K-CmlM6a2X.js +0 -1
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-Dmy0oX9c.js +0 -1
- package/dist/web/assets/treeView-BLDUP644-CSk2l7ql.js +0 -1
- package/dist/web/assets/treemap-LRROVOQU-ByHPkuSm.js +0 -1
- package/dist/web/assets/wardley-L42UT6IY-BLWHOwEu.js +0 -1
|
@@ -2,6 +2,7 @@ import * as lark from '@larksuiteoapi/node-sdk';
|
|
|
2
2
|
import type { Readable } from 'node:stream';
|
|
3
3
|
import type { FeishuConfig } from '../../shared/agent-config.js';
|
|
4
4
|
import type { FeishuMessageResourceType } from './feishu-file.service.js';
|
|
5
|
+
import type { FeishuPostContent } from './markdown-to-feishu-post.js';
|
|
5
6
|
export declare const FEISHU_OPEN_API_BASE_URL = "https://open.feishu.cn/open-apis";
|
|
6
7
|
export type FeishuReceiveIdType = 'chat_id' | 'open_id';
|
|
7
8
|
export type FeishuTextSendInput = {
|
|
@@ -17,6 +18,16 @@ export interface FeishuTextReplyInput {
|
|
|
17
18
|
replyInThread: boolean;
|
|
18
19
|
text: string;
|
|
19
20
|
}
|
|
21
|
+
export type FeishuPostSendInput = {
|
|
22
|
+
receiveId: string;
|
|
23
|
+
receiveIdType: FeishuReceiveIdType;
|
|
24
|
+
content: FeishuPostContent;
|
|
25
|
+
};
|
|
26
|
+
export interface FeishuPostReplyInput {
|
|
27
|
+
messageId: string;
|
|
28
|
+
replyInThread: boolean;
|
|
29
|
+
content: FeishuPostContent;
|
|
30
|
+
}
|
|
20
31
|
export interface FeishuTextSendResult {
|
|
21
32
|
chatId?: string;
|
|
22
33
|
messageId?: string;
|
|
@@ -103,8 +114,10 @@ export interface FeishuMessageClient {
|
|
|
103
114
|
listMessages(input: FeishuMessageListInput): Promise<FeishuMessageListResult>;
|
|
104
115
|
removeReaction(input: FeishuReactionRemoveInput): Promise<void>;
|
|
105
116
|
replyText(input: FeishuTextReplyInput): Promise<FeishuTextSendResult>;
|
|
117
|
+
replyPost(input: FeishuPostReplyInput): Promise<FeishuTextSendResult>;
|
|
106
118
|
sendUploadedFile(input: FeishuFileSendInput): Promise<FeishuTextSendResult>;
|
|
107
119
|
sendText(input: FeishuTextSendInput): Promise<FeishuTextSendResult>;
|
|
120
|
+
sendPost(input: FeishuPostSendInput): Promise<FeishuTextSendResult>;
|
|
108
121
|
uploadFile(input: FeishuFileUploadInput): Promise<FeishuUploadedFile>;
|
|
109
122
|
}
|
|
110
123
|
export interface FeishuTenantAccessToken {
|
|
@@ -157,7 +170,7 @@ interface FeishuTenantAccessTokenDeps {
|
|
|
157
170
|
interface FeishuSdkMessageCreateInput {
|
|
158
171
|
data: {
|
|
159
172
|
content: string;
|
|
160
|
-
msg_type: 'file' | 'image' | 'text';
|
|
173
|
+
msg_type: 'file' | 'image' | 'post' | 'text';
|
|
161
174
|
receive_id: string;
|
|
162
175
|
};
|
|
163
176
|
params: {
|
|
@@ -167,7 +180,7 @@ interface FeishuSdkMessageCreateInput {
|
|
|
167
180
|
interface FeishuSdkMessageReplyInput {
|
|
168
181
|
data: {
|
|
169
182
|
content: string;
|
|
170
|
-
msg_type: 'file' | 'image' | 'text';
|
|
183
|
+
msg_type: 'file' | 'image' | 'post' | 'text';
|
|
171
184
|
reply_in_thread: boolean;
|
|
172
185
|
};
|
|
173
186
|
path: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../server/feishu/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,yBAAyB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../server/feishu/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -198,6 +198,23 @@ export function createFeishuMessageClient(config, deps = {}) {
|
|
|
198
198
|
...(response.data?.thread_id ? { threadId: response.data.thread_id } : {}),
|
|
199
199
|
};
|
|
200
200
|
},
|
|
201
|
+
async replyPost(input) {
|
|
202
|
+
const response = await client.im.message.reply({
|
|
203
|
+
data: {
|
|
204
|
+
content: JSON.stringify(input.content),
|
|
205
|
+
msg_type: 'post',
|
|
206
|
+
reply_in_thread: input.replyInThread,
|
|
207
|
+
},
|
|
208
|
+
path: {
|
|
209
|
+
message_id: input.messageId,
|
|
210
|
+
},
|
|
211
|
+
});
|
|
212
|
+
return {
|
|
213
|
+
...(response.data?.chat_id ? { chatId: response.data.chat_id } : {}),
|
|
214
|
+
...(response.data?.message_id ? { messageId: response.data.message_id } : {}),
|
|
215
|
+
...(response.data?.thread_id ? { threadId: response.data.thread_id } : {}),
|
|
216
|
+
};
|
|
217
|
+
},
|
|
201
218
|
async sendUploadedFile(input) {
|
|
202
219
|
const msgType = input.file.kind;
|
|
203
220
|
const content = input.file.kind === 'image'
|
|
@@ -248,6 +265,23 @@ export function createFeishuMessageClient(config, deps = {}) {
|
|
|
248
265
|
...(response.data?.thread_id ? { threadId: response.data.thread_id } : {}),
|
|
249
266
|
};
|
|
250
267
|
},
|
|
268
|
+
async sendPost(input) {
|
|
269
|
+
const response = await client.im.message.create({
|
|
270
|
+
data: {
|
|
271
|
+
content: JSON.stringify(input.content),
|
|
272
|
+
msg_type: 'post',
|
|
273
|
+
receive_id: input.receiveId,
|
|
274
|
+
},
|
|
275
|
+
params: {
|
|
276
|
+
receive_id_type: input.receiveIdType,
|
|
277
|
+
},
|
|
278
|
+
});
|
|
279
|
+
return {
|
|
280
|
+
...(response.data?.chat_id ? { chatId: response.data.chat_id } : {}),
|
|
281
|
+
...(response.data?.message_id ? { messageId: response.data.message_id } : {}),
|
|
282
|
+
...(response.data?.thread_id ? { threadId: response.data.thread_id } : {}),
|
|
283
|
+
};
|
|
284
|
+
},
|
|
251
285
|
};
|
|
252
286
|
}
|
|
253
287
|
function feishuSdkClient(config, deps) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../server/feishu/events.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../server/feishu/events.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,uBAAuB,CAAC;AAE5E,MAAM,WAAW,yBAAyB;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,KAAK,CAAC;YACf,EAAE,EAAE;gBACF,OAAO,CAAC,EAAE,MAAM,CAAC;gBACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;gBAClB,OAAO,CAAC,EAAE,MAAM,CAAC;aAClB,CAAC;YACF,GAAG,EAAE,MAAM,CAAC;YACZ,cAAc,CAAC,EAAE,MAAM,CAAC;YACxB,IAAI,EAAE,MAAM,CAAC;YACb,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;QACH,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,MAAM,EAAE;QACN,SAAS,CAAC,EAAE;YACV,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,OAAO,GAAG,yBAAyB,GAAG,SAAS,CAOtG;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,yBAAyB,CAAC;CAClC,GAAG,eAAe,GAAG,SAAS,CAiC9B;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAEtE;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,yBAAyB,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAGrG;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,yBAAyB,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAItG;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAET"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { nowIso } from '../ids.js';
|
|
2
|
+
import { feishuMessageAttachmentsFromContent, parseFeishuContent, } from './message-content.js';
|
|
2
3
|
export function feishuReceiveMessageEventFromData(data) {
|
|
3
4
|
if (isFeishuReceiveMessageEvent(data))
|
|
4
5
|
return data;
|
|
@@ -10,8 +11,10 @@ export function feishuReceiveMessageEventFromData(data) {
|
|
|
10
11
|
return undefined;
|
|
11
12
|
}
|
|
12
13
|
export function normalizeFeishuMessage(input) {
|
|
13
|
-
const
|
|
14
|
-
|
|
14
|
+
const parsedContent = parseFeishuContent(input.event.message.content);
|
|
15
|
+
const files = feishuFilesFromMessage(input.event.message, parsedContent);
|
|
16
|
+
const text = feishuTextFromMessage(input.event.message, parsedContent) ?? feishuAttachmentText(files);
|
|
17
|
+
if (!text && !files.length)
|
|
15
18
|
return undefined;
|
|
16
19
|
const tenantKey = input.event.tenant_key ?? input.event.sender.tenant_key;
|
|
17
20
|
const appId = input.event.app_id ?? input.appId;
|
|
@@ -21,6 +24,7 @@ export function normalizeFeishuMessage(input) {
|
|
|
21
24
|
appId,
|
|
22
25
|
chatId: input.event.message.chat_id,
|
|
23
26
|
chatType: input.event.message.chat_type,
|
|
27
|
+
...(files.length ? { files } : {}),
|
|
24
28
|
handling: { createdAt: handlingAt, queuedAt: handlingAt, status: 'queued', updatedAt: handlingAt },
|
|
25
29
|
id: feishuMessageEventId({
|
|
26
30
|
appId,
|
|
@@ -35,7 +39,7 @@ export function normalizeFeishuMessage(input) {
|
|
|
35
39
|
receivedAt: feishuTimestampToIso(input.event.message.create_time),
|
|
36
40
|
...(input.event.message.root_id ? { rootId: input.event.message.root_id } : {}),
|
|
37
41
|
...(tenantKey ? { tenantKey } : {}),
|
|
38
|
-
text,
|
|
42
|
+
text: text ?? '',
|
|
39
43
|
...(input.event.message.thread_id ? { threadId: input.event.message.thread_id } : {}),
|
|
40
44
|
};
|
|
41
45
|
return result;
|
|
@@ -68,25 +72,39 @@ function feishuActor(event) {
|
|
|
68
72
|
...(senderId?.user_id ? { userId: senderId.user_id } : {}),
|
|
69
73
|
};
|
|
70
74
|
}
|
|
71
|
-
function feishuTextFromMessage(message) {
|
|
75
|
+
function feishuTextFromMessage(message, parsed) {
|
|
72
76
|
if (message.message_type !== 'text')
|
|
73
77
|
return undefined;
|
|
74
|
-
const parsed = parseFeishuContent(message.content);
|
|
75
78
|
const rawText = typeof parsed?.['text'] === 'string' ? parsed['text'] : undefined;
|
|
76
79
|
if (!rawText?.trim())
|
|
77
80
|
return undefined;
|
|
78
81
|
return replaceFeishuMentionKeys(rawText, message.mentions ?? []);
|
|
79
82
|
}
|
|
80
|
-
function
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
83
|
+
function feishuFilesFromMessage(message, parsed) {
|
|
84
|
+
return feishuMessageAttachmentsFromContent({
|
|
85
|
+
content: parsed,
|
|
86
|
+
messageId: message.message_id,
|
|
87
|
+
messageType: message.message_type,
|
|
88
|
+
}).map(inboxFileMeta);
|
|
89
|
+
}
|
|
90
|
+
function inboxFileMeta(file) {
|
|
91
|
+
return {
|
|
92
|
+
id: file.fileId,
|
|
93
|
+
mimetype: file.mimetype,
|
|
94
|
+
name: file.name,
|
|
95
|
+
sizeBytes: file.sizeBytes ?? 0,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
function feishuAttachmentText(files) {
|
|
99
|
+
if (!files.length)
|
|
88
100
|
return undefined;
|
|
89
|
-
|
|
101
|
+
if (files.length > 1)
|
|
102
|
+
return `[${files.length} attachments]`;
|
|
103
|
+
const file = files[0];
|
|
104
|
+
if (!file)
|
|
105
|
+
return undefined;
|
|
106
|
+
const kind = file.id.includes(':image:') ? 'image' : 'file';
|
|
107
|
+
return `[${kind}] ${file.name}`;
|
|
90
108
|
}
|
|
91
109
|
function replaceFeishuMentionKeys(text, mentions) {
|
|
92
110
|
let result = text;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export type FeishuPostInlineItem = {
|
|
2
|
+
tag: 'text';
|
|
3
|
+
text: string;
|
|
4
|
+
style?: string[];
|
|
5
|
+
} | {
|
|
6
|
+
tag: 'a';
|
|
7
|
+
text: string;
|
|
8
|
+
href: string;
|
|
9
|
+
} | {
|
|
10
|
+
tag: 'code_block';
|
|
11
|
+
language: string;
|
|
12
|
+
text: string;
|
|
13
|
+
};
|
|
14
|
+
export type FeishuPostParagraph = FeishuPostInlineItem[];
|
|
15
|
+
export interface FeishuPostContent {
|
|
16
|
+
zh_cn: {
|
|
17
|
+
title: string;
|
|
18
|
+
content: FeishuPostParagraph[];
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Converts a Markdown string to Feishu's "post" rich-text format.
|
|
23
|
+
*
|
|
24
|
+
* Supported constructs:
|
|
25
|
+
* - Fenced code blocks (``` … ```)
|
|
26
|
+
* - Headings (# / ## / ###) → bold text paragraph
|
|
27
|
+
* - Bullet lists (- / *)
|
|
28
|
+
* - Numbered lists (1. / 2. …)
|
|
29
|
+
* - Inline bold, italic, inline-code, links
|
|
30
|
+
* - Empty lines → empty paragraph separator
|
|
31
|
+
*/
|
|
32
|
+
export declare function markdownToFeishuPost(text: string): FeishuPostContent;
|
|
33
|
+
//# sourceMappingURL=markdown-to-feishu-post.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-to-feishu-post.d.ts","sourceRoot":"","sources":["../../../server/feishu/markdown-to-feishu-post.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAC5B;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/C;IAAE,GAAG,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,GAAG,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,MAAM,mBAAmB,GAAG,oBAAoB,EAAE,CAAC;AAEzD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,mBAAmB,EAAE,CAAC;KAChC,CAAC;CACH;AAqFD;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAsFpE"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses inline Markdown spans within a single line of text and returns an
|
|
3
|
+
* array of FeishuPostInlineItem values. Patterns handled (left-to-right,
|
|
4
|
+
* greedy, `**` before `*`):
|
|
5
|
+
* **text** / __text__ → bold text
|
|
6
|
+
* *text* / _text_ → italic text
|
|
7
|
+
* `code` → inline_code text
|
|
8
|
+
* [text](url) → link
|
|
9
|
+
*/
|
|
10
|
+
function parseInline(line) {
|
|
11
|
+
const items = [];
|
|
12
|
+
let i = 0;
|
|
13
|
+
while (i < line.length) {
|
|
14
|
+
const ch = line[i];
|
|
15
|
+
// ---- bold: **text** or __text__ ----
|
|
16
|
+
if ((ch === '*' && line[i + 1] === '*') ||
|
|
17
|
+
(ch === '_' && line[i + 1] === '_')) {
|
|
18
|
+
const delim = line.slice(i, i + 2);
|
|
19
|
+
const end = line.indexOf(delim, i + 2);
|
|
20
|
+
if (end !== -1) {
|
|
21
|
+
const text = line.slice(i + 2, end);
|
|
22
|
+
items.push({ tag: 'text', text, style: ['bold'] });
|
|
23
|
+
i = end + 2;
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
// ---- inline code: `code` ----
|
|
28
|
+
if (ch === '`') {
|
|
29
|
+
const end = line.indexOf('`', i + 1);
|
|
30
|
+
if (end !== -1) {
|
|
31
|
+
const text = line.slice(i + 1, end);
|
|
32
|
+
items.push({ tag: 'text', text, style: ['inline_code'] });
|
|
33
|
+
i = end + 1;
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// ---- link: [text](url) ----
|
|
38
|
+
if (ch === '[') {
|
|
39
|
+
const closeBracket = line.indexOf(']', i + 1);
|
|
40
|
+
if (closeBracket !== -1 && line[closeBracket + 1] === '(') {
|
|
41
|
+
const closeParen = line.indexOf(')', closeBracket + 2);
|
|
42
|
+
if (closeParen !== -1) {
|
|
43
|
+
const text = line.slice(i + 1, closeBracket);
|
|
44
|
+
const href = line.slice(closeBracket + 2, closeParen);
|
|
45
|
+
items.push({ tag: 'a', text, href });
|
|
46
|
+
i = closeParen + 1;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// ---- italic: *text* or _text_ (single delimiter) ----
|
|
52
|
+
if (ch === '*' || ch === '_') {
|
|
53
|
+
const end = line.indexOf(ch, i + 1);
|
|
54
|
+
if (end !== -1) {
|
|
55
|
+
const text = line.slice(i + 1, end);
|
|
56
|
+
items.push({ tag: 'text', text, style: ['italic'] });
|
|
57
|
+
i = end + 1;
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// ---- plain text: accumulate until the next possible span opener ----
|
|
62
|
+
let j = i + 1;
|
|
63
|
+
while (j < line.length) {
|
|
64
|
+
const next = line[j];
|
|
65
|
+
if (next === '*' || next === '_' || next === '`' || next === '[')
|
|
66
|
+
break;
|
|
67
|
+
j++;
|
|
68
|
+
}
|
|
69
|
+
const text = line.slice(i, j);
|
|
70
|
+
if (text)
|
|
71
|
+
items.push({ tag: 'text', text });
|
|
72
|
+
i = j;
|
|
73
|
+
}
|
|
74
|
+
return items;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Converts a Markdown string to Feishu's "post" rich-text format.
|
|
78
|
+
*
|
|
79
|
+
* Supported constructs:
|
|
80
|
+
* - Fenced code blocks (``` … ```)
|
|
81
|
+
* - Headings (# / ## / ###) → bold text paragraph
|
|
82
|
+
* - Bullet lists (- / *)
|
|
83
|
+
* - Numbered lists (1. / 2. …)
|
|
84
|
+
* - Inline bold, italic, inline-code, links
|
|
85
|
+
* - Empty lines → empty paragraph separator
|
|
86
|
+
*/
|
|
87
|
+
export function markdownToFeishuPost(text) {
|
|
88
|
+
const paragraphs = [];
|
|
89
|
+
const lines = text.split('\n');
|
|
90
|
+
let i = 0;
|
|
91
|
+
while (i < lines.length) {
|
|
92
|
+
// Safe: guarded by `i < lines.length`
|
|
93
|
+
const line = lines[i];
|
|
94
|
+
// ---- fenced code block ----
|
|
95
|
+
if (/^```/.test(line)) {
|
|
96
|
+
const codeLines = [];
|
|
97
|
+
i++;
|
|
98
|
+
while (i < lines.length && !/^```/.test(lines[i])) {
|
|
99
|
+
codeLines.push(lines[i]);
|
|
100
|
+
i++;
|
|
101
|
+
}
|
|
102
|
+
i++; // consume the closing ```
|
|
103
|
+
paragraphs.push([
|
|
104
|
+
{
|
|
105
|
+
tag: 'code_block',
|
|
106
|
+
language: 'PLAIN_TEXT',
|
|
107
|
+
text: codeLines.join('\n'),
|
|
108
|
+
},
|
|
109
|
+
]);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
// ---- empty line ----
|
|
113
|
+
if (line.trim() === '') {
|
|
114
|
+
paragraphs.push([]);
|
|
115
|
+
i++;
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
// ---- heading: # / ## / ### ----
|
|
119
|
+
const headingMatch = /^#{1,3} (.+)$/.exec(line);
|
|
120
|
+
if (headingMatch) {
|
|
121
|
+
const headingText = headingMatch[1] ?? '';
|
|
122
|
+
const inlineItems = parseInline(headingText);
|
|
123
|
+
const boldItems = inlineItems.map((item) => {
|
|
124
|
+
if (item.tag === 'text') {
|
|
125
|
+
return { tag: 'text', text: item.text, style: ['bold'] };
|
|
126
|
+
}
|
|
127
|
+
return item;
|
|
128
|
+
});
|
|
129
|
+
paragraphs.push(boldItems);
|
|
130
|
+
i++;
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
// ---- bullet list: - or * ----
|
|
134
|
+
const bulletMatch = /^[*-] (.*)$/.exec(line);
|
|
135
|
+
if (bulletMatch) {
|
|
136
|
+
const rest = bulletMatch[1] ?? '';
|
|
137
|
+
const bulletItem = { tag: 'text', text: '• ' };
|
|
138
|
+
const inlineItems = parseInline(rest);
|
|
139
|
+
paragraphs.push([bulletItem, ...inlineItems]);
|
|
140
|
+
i++;
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
// ---- numbered list: 1. / 2. … ----
|
|
144
|
+
const numberedMatch = /^(\d+)\. (.*)$/.exec(line);
|
|
145
|
+
if (numberedMatch) {
|
|
146
|
+
const num = numberedMatch[1] ?? '';
|
|
147
|
+
const rest = numberedMatch[2] ?? '';
|
|
148
|
+
const numItem = { tag: 'text', text: `${num}. ` };
|
|
149
|
+
const inlineItems = parseInline(rest);
|
|
150
|
+
paragraphs.push([numItem, ...inlineItems]);
|
|
151
|
+
i++;
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
// ---- regular text line ----
|
|
155
|
+
const inlineItems = parseInline(line);
|
|
156
|
+
paragraphs.push(inlineItems);
|
|
157
|
+
i++;
|
|
158
|
+
}
|
|
159
|
+
return {
|
|
160
|
+
zh_cn: {
|
|
161
|
+
title: '',
|
|
162
|
+
content: paragraphs,
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type FeishuMessageResourceType } from './feishu-file.service.js';
|
|
2
|
+
export interface FeishuMessageAttachmentMeta {
|
|
3
|
+
fileId: string;
|
|
4
|
+
fileKey: string;
|
|
5
|
+
messageId: string;
|
|
6
|
+
mimetype: string;
|
|
7
|
+
name: string;
|
|
8
|
+
providedName?: string;
|
|
9
|
+
resourceType: FeishuMessageResourceType;
|
|
10
|
+
sizeBytes?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function parseFeishuContent(content: string | undefined): Record<string, unknown> | undefined;
|
|
13
|
+
export declare function feishuMessageAttachmentsFromContent(input: {
|
|
14
|
+
content: Record<string, unknown> | undefined;
|
|
15
|
+
messageId: string;
|
|
16
|
+
messageType: string | undefined;
|
|
17
|
+
}): FeishuMessageAttachmentMeta[];
|
|
18
|
+
//# sourceMappingURL=message-content.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-content.d.ts","sourceRoot":"","sources":["../../../server/feishu/message-content.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,yBAAyB,EAC/B,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,yBAAyB,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAUnG;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE;IACzD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC,GAAG,2BAA2B,EAAE,CAkChC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { feishuMessageResourceId, } from './feishu-file.service.js';
|
|
2
|
+
export function parseFeishuContent(content) {
|
|
3
|
+
if (!content)
|
|
4
|
+
return undefined;
|
|
5
|
+
try {
|
|
6
|
+
const parsed = JSON.parse(content);
|
|
7
|
+
return parsed && typeof parsed === 'object' && !Array.isArray(parsed)
|
|
8
|
+
? parsed
|
|
9
|
+
: undefined;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function feishuMessageAttachmentsFromContent(input) {
|
|
16
|
+
if (input.messageType === 'image') {
|
|
17
|
+
const imageKey = stringContentField(input.content, 'image_key');
|
|
18
|
+
if (!imageKey)
|
|
19
|
+
return [];
|
|
20
|
+
return [attachmentMeta({
|
|
21
|
+
fileKey: imageKey,
|
|
22
|
+
messageId: input.messageId,
|
|
23
|
+
mimetype: stringContentField(input.content, 'mime_type')
|
|
24
|
+
?? stringContentField(input.content, 'mimetype')
|
|
25
|
+
?? 'image/*',
|
|
26
|
+
name: fallbackFeishuResourceName('image', input.messageId),
|
|
27
|
+
resourceType: 'image',
|
|
28
|
+
sizeBytes: feishuFileSize(input.content),
|
|
29
|
+
})];
|
|
30
|
+
}
|
|
31
|
+
if (input.messageType === 'file') {
|
|
32
|
+
const fileKey = stringContentField(input.content, 'file_key');
|
|
33
|
+
if (!fileKey)
|
|
34
|
+
return [];
|
|
35
|
+
const providedName = stringContentField(input.content, 'file_name');
|
|
36
|
+
return [attachmentMeta({
|
|
37
|
+
fileKey,
|
|
38
|
+
messageId: input.messageId,
|
|
39
|
+
mimetype: stringContentField(input.content, 'mime_type')
|
|
40
|
+
?? stringContentField(input.content, 'mimetype')
|
|
41
|
+
?? 'application/octet-stream',
|
|
42
|
+
name: providedName ?? fallbackFeishuResourceName('file', input.messageId),
|
|
43
|
+
...(providedName ? { providedName } : {}),
|
|
44
|
+
resourceType: 'file',
|
|
45
|
+
sizeBytes: feishuFileSize(input.content),
|
|
46
|
+
})];
|
|
47
|
+
}
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
function attachmentMeta(input) {
|
|
51
|
+
return {
|
|
52
|
+
fileId: feishuMessageResourceId({
|
|
53
|
+
fileKey: input.fileKey,
|
|
54
|
+
messageId: input.messageId,
|
|
55
|
+
resourceType: input.resourceType,
|
|
56
|
+
}),
|
|
57
|
+
fileKey: input.fileKey,
|
|
58
|
+
messageId: input.messageId,
|
|
59
|
+
mimetype: input.mimetype,
|
|
60
|
+
name: input.name,
|
|
61
|
+
...(input.providedName ? { providedName: input.providedName } : {}),
|
|
62
|
+
resourceType: input.resourceType,
|
|
63
|
+
...(input.sizeBytes !== undefined ? { sizeBytes: input.sizeBytes } : {}),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
function stringContentField(content, field) {
|
|
67
|
+
const value = content?.[field];
|
|
68
|
+
return typeof value === 'string' && value.trim().length > 0 ? value.trim() : undefined;
|
|
69
|
+
}
|
|
70
|
+
function feishuFileSize(content) {
|
|
71
|
+
const candidates = [content?.['file_size'], content?.['size'], content?.['size_bytes']];
|
|
72
|
+
const numeric = candidates.find((value) => typeof value === 'number' && Number.isFinite(value));
|
|
73
|
+
if (numeric !== undefined)
|
|
74
|
+
return numeric;
|
|
75
|
+
const stringValue = candidates.find((value) => typeof value === 'string' && value.length > 0);
|
|
76
|
+
const parsed = stringValue === undefined ? Number.NaN : Number(stringValue);
|
|
77
|
+
return Number.isFinite(parsed) ? parsed : undefined;
|
|
78
|
+
}
|
|
79
|
+
function fallbackFeishuResourceName(kind, messageId) {
|
|
80
|
+
return `${kind}-${messageId}`;
|
|
81
|
+
}
|
|
@@ -109,6 +109,12 @@ function feishuInboxMessage(item) {
|
|
|
109
109
|
channelId: item.chatId,
|
|
110
110
|
channelKind: item.chatType,
|
|
111
111
|
direction: 'in',
|
|
112
|
+
...(item.files?.length ? { files: item.files.map((file) => ({
|
|
113
|
+
filename: file.name,
|
|
114
|
+
fileId: file.id,
|
|
115
|
+
mimetype: file.mimetype,
|
|
116
|
+
sizeBytes: file.sizeBytes,
|
|
117
|
+
})) } : {}),
|
|
112
118
|
kind: 'message',
|
|
113
119
|
messageId: messageIdForInboxItem(item),
|
|
114
120
|
messageTs: item.messageId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delivery-prompt.d.ts","sourceRoot":"","sources":["../../../server/runtime/delivery-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,SAAS,
|
|
1
|
+
{"version":3,"file":"delivery-prompt.d.ts","sourceRoot":"","sources":["../../../server/runtime/delivery-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,SAAS,EAIV,MAAM,uBAAuB,CAAC;AAM/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,GAAE,sBAA2B,GAAG,MAAM,CA6B3G;AA+FD,wBAAgB,6CAA6C,IAAI,MAAM,CAKtE;AAED,wBAAgB,qCAAqC,CAAC,KAAK,EAAE;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB,GAAG,MAAM,CAQT"}
|
|
@@ -57,6 +57,7 @@ function buildFeishuDeliveryPrompt(event) {
|
|
|
57
57
|
const envelope = `${feishuMessageEnvelope(event)} ${feishuActorLabel(event)}: ${event.text}`;
|
|
58
58
|
return [
|
|
59
59
|
`New Feishu message:\n\n${envelope}`,
|
|
60
|
+
formatAttachedFiles(event.files),
|
|
60
61
|
[
|
|
61
62
|
'Reply target:',
|
|
62
63
|
`Use \`anima message send --channel ${event.chatId}\` to post back to this Feishu chat.`,
|
|
@@ -64,7 +65,7 @@ function buildFeishuDeliveryPrompt(event) {
|
|
|
64
65
|
'Use `anima message send --channel <chat_id>` to send to an explicit Feishu chat.',
|
|
65
66
|
'Feishu API access: use `FEISHU_TENANT_ACCESS_TOKEN`, `FEISHU_APP_ID`, `FEISHU_APP_SECRET`, and `FEISHU_API_BASE_URL` from env when you need Feishu APIs. Do not print these values.',
|
|
66
67
|
].join('\n'),
|
|
67
|
-
].join('\n\n');
|
|
68
|
+
].filter(Boolean).join('\n\n');
|
|
68
69
|
}
|
|
69
70
|
function buildFeishuOnboardingDeliveryPrompt(event) {
|
|
70
71
|
return `Agent onboarding:
|
|
@@ -93,6 +93,13 @@ export declare const WakeQueueFileSchema: z.ZodPreprocess<z.ZodRecord<z.ZodStrin
|
|
|
93
93
|
appId: z.ZodOptional<z.ZodString>;
|
|
94
94
|
chatId: z.ZodString;
|
|
95
95
|
chatType: z.ZodString;
|
|
96
|
+
files: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
97
|
+
downloadError: z.ZodOptional<z.ZodString>;
|
|
98
|
+
id: z.ZodString;
|
|
99
|
+
mimetype: z.ZodString;
|
|
100
|
+
name: z.ZodString;
|
|
101
|
+
sizeBytes: z.ZodNumber;
|
|
102
|
+
}, z.core.$strip>>>;
|
|
96
103
|
kind: z.ZodLiteral<"feishu">;
|
|
97
104
|
messageId: z.ZodString;
|
|
98
105
|
parentId: z.ZodOptional<z.ZodString>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wake-queue.store.d.ts","sourceRoot":"","sources":["../../../../server/storage/schema/wake-queue.store.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAsBtD,eAAO,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"wake-queue.store.d.ts","sourceRoot":"","sources":["../../../../server/storage/schema/wake-queue.store.ts"],"names":[],"mappings":"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"}
|
|
@@ -40,6 +40,12 @@ function fakeFeishuClient() {
|
|
|
40
40
|
async replyText() {
|
|
41
41
|
return {};
|
|
42
42
|
},
|
|
43
|
+
async replyPost() {
|
|
44
|
+
return {};
|
|
45
|
+
},
|
|
46
|
+
async sendPost() {
|
|
47
|
+
return {};
|
|
48
|
+
},
|
|
43
49
|
async sendUploadedFile() {
|
|
44
50
|
return {};
|
|
45
51
|
},
|
|
@@ -107,6 +113,12 @@ test('feishu processing reaction add swallows client errors', async () => {
|
|
|
107
113
|
async replyText() {
|
|
108
114
|
return {};
|
|
109
115
|
},
|
|
116
|
+
async replyPost() {
|
|
117
|
+
return {};
|
|
118
|
+
},
|
|
119
|
+
async sendPost() {
|
|
120
|
+
return {};
|
|
121
|
+
},
|
|
110
122
|
async sendUploadedFile() {
|
|
111
123
|
return {};
|
|
112
124
|
},
|