@neomei/opencode-feishu 0.2.6 → 0.2.7
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/core/message-handler.d.ts +18 -11
- package/dist/core/message-handler.d.ts.map +1 -1
- package/dist/core/message-handler.js +266 -97
- package/dist/core/message-handler.js.map +1 -1
- package/dist/core/types.d.ts +21 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/feishu/api.d.ts +6 -0
- package/dist/feishu/api.d.ts.map +1 -1
- package/dist/feishu/api.js +71 -6
- package/dist/feishu/api.js.map +1 -1
- package/dist/feishu/card.d.ts +3 -4
- package/dist/feishu/card.d.ts.map +1 -1
- package/dist/feishu/card.js +61 -94
- package/dist/feishu/card.js.map +1 -1
- package/dist/feishu/event-source.d.ts +6 -0
- package/dist/feishu/event-source.d.ts.map +1 -1
- package/dist/feishu/event-source.js +54 -0
- package/dist/feishu/event-source.js.map +1 -1
- package/dist/opencode/client.d.ts +1 -0
- package/dist/opencode/client.d.ts.map +1 -1
- package/dist/opencode/client.js +28 -9
- package/dist/opencode/client.js.map +1 -1
- package/dist/opencode/event-handler.d.ts +1 -0
- package/dist/opencode/event-handler.d.ts.map +1 -1
- package/dist/opencode/event-handler.js +82 -16
- package/dist/opencode/event-handler.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +10 -3
- package/dist/plugin.js.map +1 -1
- package/dist/services/doc-service.d.ts +11 -45
- package/dist/services/doc-service.d.ts.map +1 -1
- package/dist/services/doc-service.js +72 -174
- package/dist/services/doc-service.js.map +1 -1
- package/dist/services/im-service.d.ts.map +1 -1
- package/dist/services/im-service.js +10 -6
- package/dist/services/im-service.js.map +1 -1
- package/dist/standalone.d.ts.map +1 -1
- package/dist/standalone.js +10 -3
- package/dist/standalone.js.map +1 -1
- package/dist/types/extended.d.ts +2 -1
- package/dist/types/extended.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import type { FeishuConfig, FeishuMessage } from '../core/types.js';
|
|
1
|
+
import type { FeishuConfig, FeishuMessage, FeishuCardAction, CardContent } from '../core/types.js';
|
|
2
2
|
import type { SessionManager } from '../core/session-manager.js';
|
|
3
3
|
import type { FeishuAPI } from '../feishu/api.js';
|
|
4
4
|
import type { OpenCodeClient } from '../opencode/client.js';
|
|
5
|
-
import type { DocService } from '../services/doc-service.js';
|
|
6
5
|
export declare class MessageHandler {
|
|
7
6
|
private config;
|
|
8
7
|
private sessionManager;
|
|
@@ -10,30 +9,38 @@ export declare class MessageHandler {
|
|
|
10
9
|
private opencode;
|
|
11
10
|
private dedup;
|
|
12
11
|
private fileDownloader;
|
|
13
|
-
private docService?;
|
|
14
12
|
private botName;
|
|
15
|
-
|
|
16
|
-
constructor(config: FeishuConfig, sessionManager: SessionManager, feishuApi: FeishuAPI, opencode: OpenCodeClient, docService?: DocService, botName?: string);
|
|
13
|
+
constructor(config: FeishuConfig, sessionManager: SessionManager, feishuApi: FeishuAPI, opencode: OpenCodeClient, botName?: string);
|
|
17
14
|
handleMessage(message: FeishuMessage): Promise<void>;
|
|
18
|
-
private stopThinkingAnimation;
|
|
19
15
|
/**
|
|
20
16
|
* Try to parse the user message as a reply to a pending interaction.
|
|
21
17
|
* Returns true if handled.
|
|
22
18
|
*/
|
|
23
19
|
private handleInteractionReply;
|
|
20
|
+
/**
|
|
21
|
+
* Handle a card button click (card.action.trigger event).
|
|
22
|
+
* Parses the button value and routes to the appropriate OpenCode API.
|
|
23
|
+
* Returns a card callback response for Feishu (toast / updated card).
|
|
24
|
+
*/
|
|
25
|
+
handleCardAction(action: FeishuCardAction): Promise<{
|
|
26
|
+
toast?: {
|
|
27
|
+
type: string;
|
|
28
|
+
content: string;
|
|
29
|
+
};
|
|
30
|
+
card?: CardContent;
|
|
31
|
+
} | undefined>;
|
|
32
|
+
private handlePermissionCardAction;
|
|
33
|
+
private handleQuestionCardAction;
|
|
24
34
|
/**
|
|
25
35
|
* Parse a slash command from text.
|
|
26
36
|
* Returns { command, args } if text starts with /, otherwise null.
|
|
27
37
|
* Examples: `/help` → { command: 'help' }, `/compact all` → { command: 'compact', args: 'all' }
|
|
28
38
|
*/
|
|
29
39
|
private parseSlashCommand;
|
|
30
|
-
/**
|
|
31
|
-
* Detect document creation intent from user message.
|
|
32
|
-
* Supports patterns like: "创建文档 XXX", "新建一个文档", "写个文档"
|
|
33
|
-
*/
|
|
34
|
-
private detectDocCreationIntent;
|
|
35
40
|
/**
|
|
36
41
|
* Unified media download handler for images, files, audio, and video.
|
|
42
|
+
* Returns a text placeholder for the message and optionally the file info
|
|
43
|
+
* for forwarding to OpenCode.
|
|
37
44
|
*/
|
|
38
45
|
private downloadMedia;
|
|
39
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-handler.d.ts","sourceRoot":"","sources":["../../src/core/message-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"message-handler.d.ts","sourceRoot":"","sources":["../../src/core/message-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACnG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAQ5D,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,OAAO,CAAS;gBAGtB,MAAM,EAAE,YAAY,EACpB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,cAAc,EACxB,OAAO,SAAO;IAWV,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAsR1D;;;OAGG;YACW,sBAAsB;IAqFpC;;;;OAIG;IACG,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,KAAK,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,IAAI,CAAC,EAAE,WAAW,CAAA;KAAE,GAAG,SAAS,CAAC;YA8F1H,0BAA0B;YAsE1B,wBAAwB;IAqDtC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;;;OAIG;YACW,aAAa;CA6B5B"}
|
|
@@ -10,15 +10,12 @@ export class MessageHandler {
|
|
|
10
10
|
opencode;
|
|
11
11
|
dedup;
|
|
12
12
|
fileDownloader;
|
|
13
|
-
docService;
|
|
14
13
|
botName;
|
|
15
|
-
|
|
16
|
-
constructor(config, sessionManager, feishuApi, opencode, docService, botName = '点点') {
|
|
14
|
+
constructor(config, sessionManager, feishuApi, opencode, botName = '点点') {
|
|
17
15
|
this.config = config;
|
|
18
16
|
this.sessionManager = sessionManager;
|
|
19
17
|
this.feishuApi = feishuApi;
|
|
20
18
|
this.opencode = opencode;
|
|
21
|
-
this.docService = docService;
|
|
22
19
|
this.botName = botName;
|
|
23
20
|
this.dedup = new MessageDeduplicator(config.dedupTtl || 600_000);
|
|
24
21
|
this.fileDownloader = new FileDownloader();
|
|
@@ -85,6 +82,9 @@ export class MessageHandler {
|
|
|
85
82
|
await this.feishuApi.sendText(chatId, '⏳ 正在处理上一条消息,请稍候...');
|
|
86
83
|
return;
|
|
87
84
|
}
|
|
85
|
+
// Clear previous turn's card reference so a new card is created for this turn.
|
|
86
|
+
// (EventHandler no longer clears this on session.idle to avoid race conditions.)
|
|
87
|
+
this.sessionManager.clearCurrentMessage(chatId);
|
|
88
88
|
// Resolve sender name (with cache)
|
|
89
89
|
const senderUnionId = message.sender.sender_id?.union_id || 'unknown';
|
|
90
90
|
const senderName = await this.feishuApi.getUserName(senderUnionId);
|
|
@@ -98,18 +98,34 @@ export class MessageHandler {
|
|
|
98
98
|
case 'text':
|
|
99
99
|
text = content.text || '';
|
|
100
100
|
break;
|
|
101
|
-
case 'image':
|
|
102
|
-
|
|
101
|
+
case 'image': {
|
|
102
|
+
const result = await this.downloadMedia(message.message_id, content.image_key, 'image', 'image.jpg', 'image/jpeg', '图片');
|
|
103
|
+
text = result.text;
|
|
104
|
+
if (result.file)
|
|
105
|
+
files.push(result.file);
|
|
103
106
|
break;
|
|
104
|
-
|
|
105
|
-
|
|
107
|
+
}
|
|
108
|
+
case 'file': {
|
|
109
|
+
const result = await this.downloadMedia(message.message_id, content.file_key, 'file', content.file_name || 'unknown', 'application/octet-stream', '文件');
|
|
110
|
+
text = result.text;
|
|
111
|
+
if (result.file)
|
|
112
|
+
files.push(result.file);
|
|
106
113
|
break;
|
|
107
|
-
|
|
108
|
-
|
|
114
|
+
}
|
|
115
|
+
case 'audio': {
|
|
116
|
+
const result = await this.downloadMedia(message.message_id, content.file_key, 'file', 'audio.opus', 'audio/opus', '语音');
|
|
117
|
+
text = result.text;
|
|
118
|
+
if (result.file)
|
|
119
|
+
files.push(result.file);
|
|
109
120
|
break;
|
|
110
|
-
|
|
111
|
-
|
|
121
|
+
}
|
|
122
|
+
case 'media': {
|
|
123
|
+
const result = await this.downloadMedia(message.message_id, content.file_key, 'file', content.file_name || 'video.mp4', 'video/mp4', '视频');
|
|
124
|
+
text = result.text;
|
|
125
|
+
if (result.file)
|
|
126
|
+
files.push(result.file);
|
|
112
127
|
break;
|
|
128
|
+
}
|
|
113
129
|
case 'sticker':
|
|
114
130
|
text = `[表情消息]`;
|
|
115
131
|
break;
|
|
@@ -138,30 +154,26 @@ export class MessageHandler {
|
|
|
138
154
|
return;
|
|
139
155
|
}
|
|
140
156
|
log.info({ chatType, chatId, text: text.substring(0, 100) }, 'Message content');
|
|
141
|
-
// Check for document creation intent
|
|
142
|
-
if (this.docService) {
|
|
143
|
-
const docIntent = this.detectDocCreationIntent(text);
|
|
144
|
-
if (docIntent.intent) {
|
|
145
|
-
log.info({ title: docIntent.title }, 'Document creation intent detected');
|
|
146
|
-
try {
|
|
147
|
-
const doc = await this.docService.createDocumentFromMarkdown(docIntent.title, `# ${docIntent.title}\n\n> 由 OpenCode AI 助手创建\n\n请在此处编辑文档内容...\n`);
|
|
148
|
-
await this.feishuApi.sendText(chatId, `✅ 已为您创建文档「${doc.title}」\n🔗 ${doc.url}\n\n您可以点击链接查看和编辑文档。`);
|
|
149
|
-
// Continue to OpenCode to let AI generate a friendly response
|
|
150
|
-
text = `${text}\n\n[系统提示:已为用户创建飞书文档「${doc.title}」,链接:${doc.url}。请告诉用户文档已创建,并简要说明可以如何使用。]`;
|
|
151
|
-
}
|
|
152
|
-
catch (err) {
|
|
153
|
-
log.error({ err, title: docIntent.title }, 'Failed to create document');
|
|
154
|
-
await this.feishuApi.sendText(chatId, '❌ 创建文档失败,请确认已开通文档相关权限(docx:document、docx:document:readonly)');
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
157
|
// Check for pending interaction reply before proceeding with normal message flow
|
|
159
158
|
const pendingInteraction = this.sessionManager.getPendingInteraction?.(chatId);
|
|
160
159
|
if (pendingInteraction) {
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
160
|
+
try {
|
|
161
|
+
const handled = await this.handleInteractionReply(chatId, text.trim(), pendingInteraction);
|
|
162
|
+
if (handled)
|
|
163
|
+
return;
|
|
164
|
+
// The user's message does not match an interaction reply pattern.
|
|
165
|
+
// Do NOT clear the pending interaction — the user may still click the
|
|
166
|
+
// card buttons. Instead, tell them to finish the interaction first.
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
// Error handling interaction reply: clear to prevent the user from
|
|
170
|
+
// getting permanently stuck.
|
|
171
|
+
this.sessionManager.clearPendingInteraction(chatId);
|
|
172
|
+
}
|
|
173
|
+
await this.feishuApi.sendText(chatId, pendingInteraction.kind === 'permission'
|
|
174
|
+
? '⏳ 请先处理上方的权限请求(点击卡片按钮),或等待当前任务完成。'
|
|
175
|
+
: '⏳ 请先处理上方的选择(点击卡片按钮或回复选项),或等待当前任务完成。');
|
|
176
|
+
return;
|
|
165
177
|
}
|
|
166
178
|
// Atomically check and set busy status to prevent race conditions
|
|
167
179
|
const currentSession = this.sessionManager.getSession(chatId);
|
|
@@ -172,30 +184,12 @@ export class MessageHandler {
|
|
|
172
184
|
this.sessionManager.updateStatus(chatId, 'busy');
|
|
173
185
|
// Show thinking card immediately before sending prompt
|
|
174
186
|
if (!this.config.showProcess) {
|
|
175
|
-
const
|
|
176
|
-
|
|
177
|
-
const thinkingCard = FeishuCard.createThinkingCard(this.botName, dots[frame]);
|
|
187
|
+
const thinkingCard = FeishuCard.createThinkingCard(this.botName);
|
|
188
|
+
log.info({ chatId }, 'Sending thinking card');
|
|
178
189
|
const msg = await this.feishuApi.sendCard(chatId, thinkingCard);
|
|
190
|
+
log.info({ chatId, messageId: msg?.message_id }, 'Thinking card sent result');
|
|
179
191
|
if (msg?.message_id) {
|
|
180
|
-
this.sessionManager.setCurrentMessage
|
|
181
|
-
// Animate the ellipsis until content arrives
|
|
182
|
-
const timer = setInterval(async () => {
|
|
183
|
-
const session = this.sessionManager.getSession(chatId);
|
|
184
|
-
if (!session?.currentMessageId || !this.thinkingTimers.has(chatId)) {
|
|
185
|
-
clearInterval(timer);
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
if (session.currentContent) {
|
|
189
|
-
this.stopThinkingAnimation(chatId);
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
frame = (frame + 1) % dots.length;
|
|
193
|
-
try {
|
|
194
|
-
await this.feishuApi.updateCard(session.currentMessageId, FeishuCard.createThinkingCard(this.botName, dots[frame]));
|
|
195
|
-
}
|
|
196
|
-
catch { /* best-effort */ }
|
|
197
|
-
}, 500);
|
|
198
|
-
this.thinkingTimers.set(chatId, timer);
|
|
192
|
+
this.sessionManager.setCurrentMessage(chatId, msg.message_id);
|
|
199
193
|
}
|
|
200
194
|
}
|
|
201
195
|
// Send message to OpenCode
|
|
@@ -208,7 +202,17 @@ export class MessageHandler {
|
|
|
208
202
|
}
|
|
209
203
|
else {
|
|
210
204
|
log.info({ sessionId: session.id, files: files.length }, 'Sending prompt to OpenCode');
|
|
211
|
-
|
|
205
|
+
// Inject chat context so the AI knows the current chat_id for Feishu operations
|
|
206
|
+
const contextPrefix = `[系统上下文] 当前飞书对话ID: ${chatId}\n\n` +
|
|
207
|
+
`你配置了飞书 MCP 工具,可以使用以下工具来操作飞书文档、日历等:\n` +
|
|
208
|
+
`- docx.v1.document.create — 创建飞书文档\n` +
|
|
209
|
+
`- docx.v1.documentBlockChildren.create — 在文档中插入内容\n` +
|
|
210
|
+
`- docx.v1.documentBlock.patch — 更新文档块\n` +
|
|
211
|
+
`- drive.v1.file.createFolder — 创建文件夹\n` +
|
|
212
|
+
`- drive.v1.media.uploadPrepare/uploadFinish — 上传文件\n` +
|
|
213
|
+
`当用户请求创建飞书文档时,请直接调用 MCP 工具创建,不要在回复中询问。\n` +
|
|
214
|
+
`重要:飞书文档的访问链接必须使用 https://www.feishu.cn/docx/ 域名,不要使用 https://open.feishu.cn/docx/ 域名。\n\n`;
|
|
215
|
+
await this.opencode.sendPrompt(session.id, contextPrefix + text, files.length > 0 ? files : undefined);
|
|
212
216
|
log.info('Prompt sent successfully');
|
|
213
217
|
}
|
|
214
218
|
}
|
|
@@ -217,7 +221,6 @@ export class MessageHandler {
|
|
|
217
221
|
await this.feishuApi.sendCard(chatId, FeishuCard.createErrorCard(`发送消息失败: ${err instanceof Error ? err.message : String(err)}`));
|
|
218
222
|
this.sessionManager.updateStatus(chatId, 'idle');
|
|
219
223
|
this.sessionManager.clearCurrentMessage(chatId);
|
|
220
|
-
this.stopThinkingAnimation(chatId);
|
|
221
224
|
}
|
|
222
225
|
}
|
|
223
226
|
catch (err) {
|
|
@@ -230,13 +233,6 @@ export class MessageHandler {
|
|
|
230
233
|
}
|
|
231
234
|
}
|
|
232
235
|
}
|
|
233
|
-
stopThinkingAnimation(chatId) {
|
|
234
|
-
const timer = this.thinkingTimers.get(chatId);
|
|
235
|
-
if (timer) {
|
|
236
|
-
clearInterval(timer);
|
|
237
|
-
this.thinkingTimers.delete(chatId);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
236
|
/**
|
|
241
237
|
* Try to parse the user message as a reply to a pending interaction.
|
|
242
238
|
* Returns true if handled.
|
|
@@ -260,10 +256,7 @@ export class MessageHandler {
|
|
|
260
256
|
log.info({ chatId, permissionId: perm.id, reply }, 'Replying to permission');
|
|
261
257
|
await this.opencode.replyPermission(perm.id, reply);
|
|
262
258
|
this.sessionManager.clearPendingInteraction(chatId);
|
|
263
|
-
|
|
264
|
-
const confirmText = reply === 'reject' ? '已拒绝该权限请求。' :
|
|
265
|
-
reply === 'always' ? '已永久授权该权限。' : '已授权一次该权限。';
|
|
266
|
-
await this.feishuApi.sendCard(chatId, FeishuCard.createErrorCard(confirmText));
|
|
259
|
+
await this.feishuApi.sendCard(chatId, FeishuCard.createInteractionRepliedCard('permission', reply));
|
|
267
260
|
return true;
|
|
268
261
|
}
|
|
269
262
|
if (interaction.kind === 'question') {
|
|
@@ -317,6 +310,199 @@ export class MessageHandler {
|
|
|
317
310
|
return false;
|
|
318
311
|
}
|
|
319
312
|
}
|
|
313
|
+
/**
|
|
314
|
+
* Handle a card button click (card.action.trigger event).
|
|
315
|
+
* Parses the button value and routes to the appropriate OpenCode API.
|
|
316
|
+
* Returns a card callback response for Feishu (toast / updated card).
|
|
317
|
+
*/
|
|
318
|
+
async handleCardAction(action) {
|
|
319
|
+
const { chatId, messageId } = action;
|
|
320
|
+
const value = action.action.value;
|
|
321
|
+
if (!value || typeof value !== 'object') {
|
|
322
|
+
log.warn({ chatId, messageId, value }, 'Card action missing value');
|
|
323
|
+
return { toast: { type: 'error', content: '无效操作' } };
|
|
324
|
+
}
|
|
325
|
+
const actionType = value.action || value._oc;
|
|
326
|
+
log.info({ chatId, messageId, actionType, value }, 'Card action received');
|
|
327
|
+
if (actionType !== 'perm' && actionType !== 'q') {
|
|
328
|
+
log.warn({ chatId, actionType, value }, 'Unknown card action type');
|
|
329
|
+
return { toast: { type: 'error', content: '不支持的操作' } };
|
|
330
|
+
}
|
|
331
|
+
// Verify there is a pending interaction for this chat
|
|
332
|
+
const pending = this.sessionManager.getPendingInteraction(chatId);
|
|
333
|
+
const session = this.sessionManager.getSession(chatId);
|
|
334
|
+
log.info({ chatId, messageId, hasPending: !!pending, pendingKind: pending?.kind, currentMessageId: session?.currentMessageId }, 'Checking pending interaction');
|
|
335
|
+
if (!pending) {
|
|
336
|
+
log.info({ chatId, messageId, currentMessageId: session?.currentMessageId }, 'No pending interaction for this chat, ignoring card action');
|
|
337
|
+
const valueId = (value.id || '').toString();
|
|
338
|
+
// If the button looks like an AI-generated permission card (not from OpenCode's permission.asked event),
|
|
339
|
+
// simulate a text reply so the AI can continue processing.
|
|
340
|
+
const isAiGeneratedPerm = actionType === 'perm' && valueId.startsWith('perm-');
|
|
341
|
+
if (isAiGeneratedPerm) {
|
|
342
|
+
const replyMap = {
|
|
343
|
+
once: '确认',
|
|
344
|
+
always: '始终允许',
|
|
345
|
+
reject: '拒绝',
|
|
346
|
+
};
|
|
347
|
+
const replyText = replyMap[value.reply] || '确认';
|
|
348
|
+
const confirmMap = {
|
|
349
|
+
once: '已授权一次',
|
|
350
|
+
always: '已永久授权',
|
|
351
|
+
reject: '已拒绝',
|
|
352
|
+
};
|
|
353
|
+
const confirmText = confirmMap[value.reply] || '已授权';
|
|
354
|
+
try {
|
|
355
|
+
// Wait for card update to complete before sending prompt,
|
|
356
|
+
// so the user sees the confirmation state immediately.
|
|
357
|
+
await this.feishuApi.updateCard(messageId, FeishuCard.createInteractionRepliedCard('permission', value.reply));
|
|
358
|
+
log.info({ chatId, messageId }, 'Updated AI-generated perm card to confirmed state');
|
|
359
|
+
}
|
|
360
|
+
catch (err) {
|
|
361
|
+
log.warn({ err, chatId, messageId }, 'Failed to update AI-generated perm card');
|
|
362
|
+
}
|
|
363
|
+
// Re-bind currentMessageId to the clicked card so subsequent
|
|
364
|
+
// flushCard calls update the same card instead of creating a new one.
|
|
365
|
+
if (session) {
|
|
366
|
+
this.sessionManager.setCurrentMessage(chatId, messageId);
|
|
367
|
+
log.info({ chatId, messageId }, 'Re-bound currentMessageId to clicked card');
|
|
368
|
+
}
|
|
369
|
+
// Simulate user text reply to OpenCode so the AI continues
|
|
370
|
+
if (session) {
|
|
371
|
+
try {
|
|
372
|
+
await this.opencode.sendPrompt(session.id, replyText);
|
|
373
|
+
log.info({ chatId, replyText }, 'Simulated permission reply sent to OpenCode');
|
|
374
|
+
}
|
|
375
|
+
catch (err) {
|
|
376
|
+
log.error({ err, chatId, replyText }, 'Failed to send simulated permission reply');
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
return { toast: { type: 'success', content: confirmText } };
|
|
380
|
+
}
|
|
381
|
+
// Real OpenCode permission IDs are `per_*`. If we see one with no pending,
|
|
382
|
+
// it's almost always a duplicate event (Feishu re-delivery or quick re-click)
|
|
383
|
+
// for a request we already handled. The card is already in confirmation state
|
|
384
|
+
// from the first click — return success silently rather than misleading
|
|
385
|
+
// "已过期" warning.
|
|
386
|
+
const isRealOpencodePerm = actionType === 'perm' && valueId.startsWith('per_');
|
|
387
|
+
if (isRealOpencodePerm) {
|
|
388
|
+
log.info({ chatId, messageId, valueId }, 'Permission already processed (likely duplicate event), returning success');
|
|
389
|
+
return { toast: { type: 'success', content: '已处理' } };
|
|
390
|
+
}
|
|
391
|
+
// Update the card to remove stale buttons so the user doesn't keep clicking
|
|
392
|
+
this.feishuApi.updateCard(messageId, FeishuCard.createExpiredCard())
|
|
393
|
+
.then(() => log.info({ chatId, messageId }, 'Updated stale card to expired state'))
|
|
394
|
+
.catch((err) => log.warn({ err, chatId, messageId }, 'Failed to update stale card to expired'));
|
|
395
|
+
return { toast: { type: 'warning', content: '该操作已过期' } };
|
|
396
|
+
}
|
|
397
|
+
// Route to the appropriate handler
|
|
398
|
+
if (actionType === 'perm') {
|
|
399
|
+
return this.handlePermissionCardAction(chatId, messageId, value, pending);
|
|
400
|
+
}
|
|
401
|
+
return this.handleQuestionCardAction(chatId, messageId, value, pending);
|
|
402
|
+
}
|
|
403
|
+
async handlePermissionCardAction(chatId, messageId, value, pending) {
|
|
404
|
+
if (pending.kind !== 'permission') {
|
|
405
|
+
return { toast: { type: 'error', content: '当前不是权限请求' } };
|
|
406
|
+
}
|
|
407
|
+
const reply = value.reply;
|
|
408
|
+
if (!reply || !['once', 'always', 'reject'].includes(reply)) {
|
|
409
|
+
return { toast: { type: 'error', content: '无效的权限响应' } };
|
|
410
|
+
}
|
|
411
|
+
const perm = pending.data;
|
|
412
|
+
log.info({ chatId, permissionId: perm.id, reply }, 'Card action: replying to permission');
|
|
413
|
+
const confirmText = reply === 'reject'
|
|
414
|
+
? '已拒绝该权限请求。'
|
|
415
|
+
: reply === 'always'
|
|
416
|
+
? '已永久授权该权限。'
|
|
417
|
+
: '已授权一次该权限。';
|
|
418
|
+
const confirmCard = FeishuCard.createInteractionRepliedCard('permission', reply);
|
|
419
|
+
// Update in-memory state synchronously so concurrent flushCard / re-clicks
|
|
420
|
+
// see the new state immediately. This must happen BEFORE we return so the
|
|
421
|
+
// caller doesn't process duplicate events.
|
|
422
|
+
this.sessionManager.clearPendingInteraction(chatId);
|
|
423
|
+
const session = this.sessionManager.getSession(chatId);
|
|
424
|
+
if (session) {
|
|
425
|
+
// Re-bind currentMessageId to the clicked card so subsequent flushCard
|
|
426
|
+
// calls update the same card the user sees (AI may have sent cards via
|
|
427
|
+
// MCP, causing currentMessageId to diverge from the clicked messageId).
|
|
428
|
+
if (messageId !== session.currentMessageId) {
|
|
429
|
+
this.sessionManager.setCurrentMessage(chatId, messageId);
|
|
430
|
+
}
|
|
431
|
+
// Mark that the interaction was handled via card click so flushCard
|
|
432
|
+
// won't overwrite the confirmation state with AI streaming output.
|
|
433
|
+
session.interactionReplied = true;
|
|
434
|
+
}
|
|
435
|
+
this.sessionManager.updateStatus(chatId, 'idle');
|
|
436
|
+
// Fire the network calls in the background and return the toast immediately.
|
|
437
|
+
// Feishu's UI has a strict callback timeout — awaiting both replyPermission
|
|
438
|
+
// and updateCard (~500ms total) was overrunning it and causing the client
|
|
439
|
+
// to display its own error popup despite our handler succeeding.
|
|
440
|
+
void (async () => {
|
|
441
|
+
try {
|
|
442
|
+
await this.opencode.replyPermission(perm.id, reply);
|
|
443
|
+
log.info({ chatId, permissionId: perm.id }, 'replyPermission relayed to OpenCode');
|
|
444
|
+
}
|
|
445
|
+
catch (err) {
|
|
446
|
+
log.error({ err, chatId, permissionId: perm.id }, 'replyPermission failed (background)');
|
|
447
|
+
}
|
|
448
|
+
try {
|
|
449
|
+
await this.feishuApi.updateCard(messageId, confirmCard);
|
|
450
|
+
log.info({ chatId, messageId, permissionId: perm.id }, 'Confirmation card updated');
|
|
451
|
+
}
|
|
452
|
+
catch (err) {
|
|
453
|
+
log.error({ err, chatId, messageId }, 'updateCard for confirmation failed (background)');
|
|
454
|
+
}
|
|
455
|
+
})();
|
|
456
|
+
// NOTE: do NOT include the `card` field in the response. Feishu requires
|
|
457
|
+
// it wrapped as `{ type: 'raw'|'template', data: {...} }`; passing the raw
|
|
458
|
+
// CardContent directly is treated as a malformed response and the client
|
|
459
|
+
// shows its own error popup. We update the card via API in the background
|
|
460
|
+
// call above, so the response only needs a toast.
|
|
461
|
+
return { toast: { type: 'success', content: confirmText } };
|
|
462
|
+
}
|
|
463
|
+
async handleQuestionCardAction(chatId, messageId, value, pending) {
|
|
464
|
+
if (pending.kind !== 'question') {
|
|
465
|
+
return { toast: { type: 'error', content: '当前不是问题选择' } };
|
|
466
|
+
}
|
|
467
|
+
const answers = value.ans;
|
|
468
|
+
if (!answers || !Array.isArray(answers)) {
|
|
469
|
+
return { toast: { type: 'error', content: '无效的选择' } };
|
|
470
|
+
}
|
|
471
|
+
const q = pending.data;
|
|
472
|
+
log.info({ chatId, requestId: q.id, answers }, 'Card action: replying to question');
|
|
473
|
+
const label = answers.map(a => a.join(', ')).join('; ');
|
|
474
|
+
const confirmCard = FeishuCard.createInteractionRepliedCard('question', label);
|
|
475
|
+
// Update in-memory state synchronously and return immediately, doing the
|
|
476
|
+
// network calls in the background — see handlePermissionCardAction for the
|
|
477
|
+
// rationale on returning fast.
|
|
478
|
+
this.sessionManager.clearPendingInteraction(chatId);
|
|
479
|
+
const session = this.sessionManager.getSession(chatId);
|
|
480
|
+
if (session) {
|
|
481
|
+
if (messageId !== session.currentMessageId) {
|
|
482
|
+
this.sessionManager.setCurrentMessage(chatId, messageId);
|
|
483
|
+
}
|
|
484
|
+
session.interactionReplied = true;
|
|
485
|
+
}
|
|
486
|
+
this.sessionManager.updateStatus(chatId, 'idle');
|
|
487
|
+
void (async () => {
|
|
488
|
+
try {
|
|
489
|
+
await this.opencode.replyQuestion(q.id, answers);
|
|
490
|
+
log.info({ chatId, requestId: q.id }, 'replyQuestion relayed to OpenCode');
|
|
491
|
+
}
|
|
492
|
+
catch (err) {
|
|
493
|
+
log.error({ err, chatId, requestId: q.id }, 'replyQuestion failed (background)');
|
|
494
|
+
}
|
|
495
|
+
try {
|
|
496
|
+
await this.feishuApi.updateCard(messageId, confirmCard);
|
|
497
|
+
log.info({ chatId, messageId, requestId: q.id }, 'Confirmation card updated');
|
|
498
|
+
}
|
|
499
|
+
catch (err) {
|
|
500
|
+
log.error({ err, chatId, messageId }, 'updateCard for confirmation failed (background)');
|
|
501
|
+
}
|
|
502
|
+
})();
|
|
503
|
+
// See note in handlePermissionCardAction about omitting the `card` field.
|
|
504
|
+
return { toast: { type: 'success', content: `已提交选择:${label}` } };
|
|
505
|
+
}
|
|
320
506
|
/**
|
|
321
507
|
* Parse a slash command from text.
|
|
322
508
|
* Returns { command, args } if text starts with /, otherwise null.
|
|
@@ -335,48 +521,31 @@ export class MessageHandler {
|
|
|
335
521
|
const args = withoutPrefix.slice(firstSpace + 1).trim();
|
|
336
522
|
return { command, args: args || undefined };
|
|
337
523
|
}
|
|
338
|
-
/**
|
|
339
|
-
* Detect document creation intent from user message.
|
|
340
|
-
* Supports patterns like: "创建文档 XXX", "新建一个文档", "写个文档"
|
|
341
|
-
*/
|
|
342
|
-
detectDocCreationIntent(text) {
|
|
343
|
-
const patterns = [
|
|
344
|
-
/(?:创建|新建|写个?)(?:一个|个)?(?:飞书)?(?:云)?文档[,::]?\s*["「『【]([^"」』】]+)["」』】]/i,
|
|
345
|
-
/(?:创建|新建|写个?)(?:一个|个)?(?:飞书)?(?:云)?文档[,::]?\s*(.+?)(?:\n|$)/i,
|
|
346
|
-
/(?:创建|新建|写个?)(?:一个|个)?(.+?)(?:的|的)?(?:飞书)?(?:云)?文档/i,
|
|
347
|
-
/(?:帮我|请)?(?:创建|新建|写)(?:一个|个)?(.+)/i,
|
|
348
|
-
];
|
|
349
|
-
for (const pattern of patterns) {
|
|
350
|
-
const match = text.match(pattern);
|
|
351
|
-
if (match && match[1]) {
|
|
352
|
-
const title = match[1].trim().replace(/^(?:一个|个|这份|这个|的)\s*/, '');
|
|
353
|
-
if (title && title.length > 0 && title.length < 100) {
|
|
354
|
-
return { intent: true, title };
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
// Simple keyword detection as fallback
|
|
359
|
-
if (/^(?:创建|新建|写个?)文档/.test(text.trim())) {
|
|
360
|
-
return { intent: true, title: '未命名文档' };
|
|
361
|
-
}
|
|
362
|
-
return { intent: false, title: '' };
|
|
363
|
-
}
|
|
364
524
|
/**
|
|
365
525
|
* Unified media download handler for images, files, audio, and video.
|
|
526
|
+
* Returns a text placeholder for the message and optionally the file info
|
|
527
|
+
* for forwarding to OpenCode.
|
|
366
528
|
*/
|
|
367
529
|
async downloadMedia(messageId, fileKey, resourceType, fileName, mimeType, typeLabel) {
|
|
368
530
|
if (!fileKey) {
|
|
369
|
-
return `[${typeLabel}消息]
|
|
531
|
+
return { text: `[${typeLabel}消息]` };
|
|
370
532
|
}
|
|
371
533
|
try {
|
|
372
534
|
log.info({ messageId, fileKey, fileName }, `Downloading ${typeLabel}...`);
|
|
373
535
|
const buffer = await this.feishuApi.downloadMedia(messageId, fileKey, resourceType);
|
|
374
536
|
const downloaded = await this.fileDownloader.saveBuffer(buffer, fileName, mimeType);
|
|
375
|
-
return
|
|
537
|
+
return {
|
|
538
|
+
text: `[${typeLabel}已上传: ${downloaded.filePath}]`,
|
|
539
|
+
file: {
|
|
540
|
+
filePath: downloaded.filePath,
|
|
541
|
+
fileName: downloaded.fileName,
|
|
542
|
+
mimeType,
|
|
543
|
+
},
|
|
544
|
+
};
|
|
376
545
|
}
|
|
377
546
|
catch (err) {
|
|
378
547
|
log.error({ err, messageId, fileKey }, `Failed to download ${typeLabel}`);
|
|
379
|
-
return `[${typeLabel}消息(下载失败)]
|
|
548
|
+
return { text: `[${typeLabel}消息(下载失败)]` };
|
|
380
549
|
}
|
|
381
550
|
}
|
|
382
551
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message-handler.js","sourceRoot":"","sources":["../../src/core/message-handler.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,GAAG,GAAG,YAAY,CAAC,gBAAgB,CAAC,CAAC;AAE3C,MAAM,OAAO,cAAc;IACjB,MAAM,CAAe;IACrB,cAAc,CAAiB;IAC/B,SAAS,CAAY;IACrB,QAAQ,CAAiB;IACzB,KAAK,CAAsB;IAC3B,cAAc,CAAiB;IAC/B,UAAU,CAAc;IACxB,OAAO,CAAS;IAChB,cAAc,GAAG,IAAI,GAAG,EAA0C,CAAC;IAE3E,YACE,MAAoB,EACpB,cAA8B,EAC9B,SAAoB,EACpB,QAAwB,EACxB,UAAuB,EACvB,OAAO,GAAG,IAAI;QAEd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,mBAAmB,CAAC,MAAM,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAsB;QACxC,IAAI,CAAC;YACH,GAAG,CAAC,IAAI,CAAC;gBACP,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,WAAW,EAAE,OAAO,CAAC,MAAM,EAAE,WAAW;gBACxC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC;aAC5C,EAAE,kBAAkB,CAAC,CAAC;YAEvB,sBAAsB;YACtB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,GAAG,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;gBAClD,OAAO;YACT,CAAC;YAED,oCAAoC;YACpC,IAAI,OAAO,CAAC,MAAM,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;gBACzC,GAAG,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;gBACjD,OAAO;YACT,CAAC;YAED,sDAAsD;YACtD,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC/C,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,6BAA6B,CAAC,CAAC;gBAC3E,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;YAEnC,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,IAAI,SAAS,EAAE,EAAE,oBAAoB,CAAC,CAAC;YAEtG,uCAAuC;YACvC,IAAI,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;gBACvD,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,mBAAmB,CAAC,CAAC;gBAC9D,qDAAqD;gBACrD,yDAAyD;gBACzD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;gBAChD,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,IAAI,CACxC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,EAAE,OAAO,KAAK,SAAS,CAChD,CAAC;gBAEF,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,2CAA2C,CAAC,CAAC;oBAClE,OAAO;gBACT,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAChC,CAAC;YAED,qBAAqB;YACrB,IAAI,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;gBACnE,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBACpC,OAAO;YACT,CAAC;YAED,kBAAkB;YAClB,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC;gBACpD,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC3D,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,yBAAyB,CAAC,CAAC;oBAClD,OAAO;gBACT,CAAC;YACH,CAAC;YAED,wBAAwB;YACxB,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,6BAA6B,CAAC,CAAC;YACpD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC/E,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,eAAe,CAAC,CAAC;YAE7E,kDAAkD;YAClD,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC9B,GAAG,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;gBAClD,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAC3B,MAAM,EACN,oBAAoB,CACrB,CAAC;gBACF,OAAO;YACT,CAAC;YAED,mCAAmC;YACnC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,IAAI,SAAS,CAAC;YACtE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YACnE,GAAG,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,sBAAsB,CAAC,CAAC;YAE1E,2DAA2D;YAC3D,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,MAAM,KAAK,GAAoE,EAAE,CAAC;YAElF,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC5C,QAAQ,OAAO,CAAC,YAAY,EAAE,CAAC;oBAC7B,KAAK,MAAM;wBACT,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;wBAC1B,MAAM;oBACR,KAAK,OAAO;wBACV,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAC7B,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,SAAS,EACjB,OAAO,EACP,WAAW,EACX,YAAY,EACZ,IAAI,CACL,CAAC;wBACF,MAAM;oBACR,KAAK,MAAM;wBACT,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAC7B,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,QAAQ,EAChB,MAAM,EACN,OAAO,CAAC,SAAS,IAAI,SAAS,EAC9B,0BAA0B,EAC1B,IAAI,CACL,CAAC;wBACF,MAAM;oBACR,KAAK,OAAO;wBACV,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAC7B,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,QAAQ,EAChB,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,IAAI,CACL,CAAC;wBACF,MAAM;oBACR,KAAK,OAAO;wBACV,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAC7B,OAAO,CAAC,UAAU,EAClB,OAAO,CAAC,QAAQ,EAChB,MAAM,EACN,OAAO,CAAC,SAAS,IAAI,WAAW,EAChC,WAAW,EACX,IAAI,CACL,CAAC;wBACF,MAAM;oBACR,KAAK,SAAS;wBACZ,IAAI,GAAG,QAAQ,CAAC;wBAChB,MAAM;oBACR;wBACE,IAAI,GAAG,cAAc,OAAO,CAAC,YAAY,GAAG,CAAC;gBACjD,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC;YACnH,CAAC;YAAC,MAAM,CAAC;gBACP,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,EAAE,iCAAiC,CAAC,CAAC;gBACtG,IAAI,GAAG,cAAc,OAAO,CAAC,YAAY,GAAG,CAAC;YAC/C,CAAC;YAED,uCAAuC;YACvC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACvC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC9C,CAAC;gBACD,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,8BAA8B,CAAC,CAAC;YAC7E,CAAC;YAED,iDAAiD;YACjD,IAAI,QAAQ,KAAK,OAAO,IAAI,UAAU,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;gBACvE,IAAI,GAAG,IAAI,UAAU,MAAM,IAAI,EAAE,CAAC;YACpC,CAAC;YAED,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;gBACzC,OAAO;YACT,CAAC;YAED,GAAG,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,iBAAiB,CAAC,CAAC;YAEhF,qCAAqC;YACrC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,MAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;gBACrD,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;oBACrB,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE,mCAAmC,CAAC,CAAC;oBAC1E,IAAI,CAAC;wBACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,0BAA0B,CAC1D,SAAS,CAAC,KAAK,EACf,KAAK,SAAS,CAAC,KAAK,6CAA6C,CAClE,CAAC;wBAEF,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAC3B,MAAM,EACN,aAAa,GAAG,CAAC,KAAK,SAAS,GAAG,CAAC,GAAG,qBAAqB,CAC5D,CAAC;wBAEF,8DAA8D;wBAC9D,IAAI,GAAG,GAAG,IAAI,wBAAwB,GAAG,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,2BAA2B,CAAC;oBAC5F,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,EAAE,2BAA2B,CAAC,CAAC;wBACxE,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAC3B,MAAM,EACN,6DAA6D,CAC9D,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAED,iFAAiF;YACjF,MAAM,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAC,CAAC;YAC/E,IAAI,kBAAkB,EAAE,CAAC;gBACvB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAC/C,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,kBAAkB,CACxC,CAAC;gBACF,IAAI,OAAO;oBAAE,OAAO;gBACpB,yEAAyE;YAC3E,CAAC;YAED,kEAAkE;YAClE,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YAC9D,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBACxD,GAAG,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;gBAC5D,OAAO;YACT,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAEjD,uDAAuD;YACvD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAC7B,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;gBACxC,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,MAAM,YAAY,GAAG,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC9E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;gBAChE,IAAI,GAAG,EAAE,UAAU,EAAE,CAAC;oBACpB,IAAI,CAAC,cAAc,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;oBAChE,6CAA6C;oBAC7C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;wBACnC,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;wBACvD,IAAI,CAAC,OAAO,EAAE,gBAAgB,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;4BACnE,aAAa,CAAC,KAAK,CAAC,CAAC;4BACrB,OAAO;wBACT,CAAC;wBACD,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;4BAC3B,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;4BACnC,OAAO;wBACT,CAAC;wBACD,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;wBAClC,IAAI,CAAC;4BACH,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAC7B,OAAO,CAAC,gBAAgB,EACxB,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CACzD,CAAC;wBACJ,CAAC;wBAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;oBAC/B,CAAC,EAAE,GAAG,CAAC,CAAC;oBACR,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YAED,2BAA2B;YAC3B,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAClD,IAAI,YAAY,EAAE,CAAC;oBACjB,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,EAAE,6BAA6B,CAAC,CAAC;oBAC3H,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,EAAE,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;oBACrF,GAAG,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;gBACxC,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,4BAA4B,CAAC,CAAC;oBACvF,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;oBACvF,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAC;gBAE5C,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAC3B,MAAM,EACN,UAAU,CAAC,eAAe,CACxB,WAAW,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC9D,CACF,CAAC;gBAEF,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBACjD,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBAChD,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;YACrC,CAAC;QAEH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,EAAE,wBAAwB,CAAC,CAAC;YAE7C,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAC3B,OAAO,CAAC,OAAO,EACf,iBAAiB,CAClB,CAAC;YACJ,CAAC;YAAC,OAAO,OAAO,EAAE,CAAC;gBACjB,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,8BAA8B,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAGO,qBAAqB,CAAC,MAAc;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,KAAK,EAAE,CAAC;YACV,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,sBAAsB,CAClC,MAAc,EACd,IAAY,EACZ,WAAoD;QAEpD,IAAI,CAAC;YACH,IAAI,WAAW,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC;gBAC9B,IAAI,KAA+C,CAAC;gBAEpD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;oBACtF,KAAK,GAAG,MAAM,CAAC;gBACjB,CAAC;qBAAM,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBAC/D,KAAK,GAAG,QAAQ,CAAC;gBACnB,CAAC;qBAAM,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;oBAC5F,KAAK,GAAG,QAAQ,CAAC;gBACnB,CAAC;gBAED,IAAI,CAAC,KAAK;oBAAE,OAAO,KAAK,CAAC;gBAEzB,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,wBAAwB,CAAC,CAAC;gBAC7E,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpD,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;gBAEpD,0EAA0E;gBAC1E,MAAM,WAAW,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;oBACpD,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC;gBACjD,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;gBAC/E,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBACpC,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC;gBAC3B,yDAAyD;gBACzD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACnE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;oBAAE,OAAO,KAAK,CAAC;gBAE1C,MAAM,OAAO,GAAe,EAAE,CAAC;gBAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;oBACrD,MAAM,MAAM,GAAa,EAAE,CAAC;oBAC5B,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;wBAC7B,0BAA0B;wBAC1B,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;wBAC9B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;4BAC9D,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;wBAC/C,CAAC;6BAAM,CAAC;4BACN,qBAAqB;4BACrB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CACtC,CAAC,CAAC,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,CAC/D,CAAC;4BACF,IAAI,KAAK;gCAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;wBACtC,CAAC;oBACH,CAAC;oBACD,cAAc;oBACd,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;oBACpC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACtB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACvB,CAAC;yBAAM,IAAI,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACzC,iEAAiE;wBACjE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC;gBAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC/D,8DAA8D;oBAC9D,OAAO,KAAK,CAAC;gBACf,CAAC;gBAED,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,sBAAsB,CAAC,CAAC;gBACvE,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;gBACjD,IAAI,CAAC,cAAc,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC;gBAEpD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACxD,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,4BAA4B,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;gBAClG,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,oCAAoC,CAAC,CAAC;YACpG,gFAAgF;YAChF,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,iBAAiB,CAAC,IAAY;QACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAE1C,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE9C,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;QACpC,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACxD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,SAAS,EAAE,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACK,uBAAuB,CAAC,IAAY;QAC1C,MAAM,QAAQ,GAAG;YACf,uEAAuE;YACvE,8DAA8D;YAC9D,qDAAqD;YACrD,oCAAoC;SACrC,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;gBAClE,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;oBACpD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC1C,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CACzB,SAAiB,EACjB,OAA2B,EAC3B,YAA8B,EAC9B,QAAgB,EAChB,QAAgB,EAChB,SAAiB;QAEjB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,IAAI,SAAS,KAAK,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC;YACH,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,eAAe,SAAS,KAAK,CAAC,CAAC;YAC1E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;YACpF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACpF,OAAO,IAAI,SAAS,QAAQ,UAAU,CAAC,QAAQ,GAAG,CAAC;QACrD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,sBAAsB,SAAS,EAAE,CAAC,CAAC;YAC1E,OAAO,IAAI,SAAS,WAAW,CAAC;QAClC,CAAC;IACH,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"message-handler.js","sourceRoot":"","sources":["../../src/core/message-handler.ts"],"names":[],"mappings":"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"}
|