@lmcl/ailo-mcp-feishu 0.2.4 → 0.2.6
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/feishu-handler.js
CHANGED
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@ if (!FEISHU_APP_ID || !FEISHU_APP_SECRET) {
|
|
|
11
11
|
}
|
|
12
12
|
const handler = new FeishuHandler({ appId: FEISHU_APP_ID, appSecret: FEISHU_APP_SECRET });
|
|
13
13
|
handler.setOnBotRemovedFromGroup(() => { });
|
|
14
|
-
function
|
|
14
|
+
function feishuBuildChannelInstructions() {
|
|
15
15
|
return `ID 格式:ou_xxx 是飞书用户 ID,oc_xxx 是群组 ID。
|
|
16
16
|
|
|
17
17
|
@提及:@提及格式为 @显示名(ou_xxx)。使用此格式可触发飞书强提醒。
|
|
@@ -27,6 +27,6 @@ runMcpChannel({
|
|
|
27
27
|
handler,
|
|
28
28
|
displayName: "飞书",
|
|
29
29
|
defaultRequiresResponse: true,
|
|
30
|
-
|
|
30
|
+
buildChannelInstructions: feishuBuildChannelInstructions,
|
|
31
31
|
mcpServer,
|
|
32
32
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lmcl/ailo-mcp-feishu",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"description": "Ailo 飞书/Lark 通道 MCP",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -10,20 +10,17 @@
|
|
|
10
10
|
"scripts": {
|
|
11
11
|
"build": "tsc",
|
|
12
12
|
"start": "node dist/index.js",
|
|
13
|
-
"dev": "tsx src/index.ts"
|
|
14
|
-
"postinstall": "patch-package"
|
|
13
|
+
"dev": "tsx src/index.ts"
|
|
15
14
|
},
|
|
16
15
|
"files": [
|
|
17
|
-
"dist"
|
|
18
|
-
"patches"
|
|
16
|
+
"dist"
|
|
19
17
|
],
|
|
20
18
|
"dependencies": {
|
|
21
19
|
"@larksuiteoapi/node-sdk": "^1.56.1",
|
|
22
|
-
"@lmcl/ailo-mcp-sdk": "^0.2.
|
|
20
|
+
"@lmcl/ailo-mcp-sdk": "^0.2.5",
|
|
23
21
|
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
24
22
|
"dotenv": "^16.4.5",
|
|
25
23
|
"form-data": "^4.0.0",
|
|
26
|
-
"patch-package": "^8.0.1",
|
|
27
24
|
"zod": "^4.3.6"
|
|
28
25
|
},
|
|
29
26
|
"devDependencies": {
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
diff --git a/node_modules/@larksuiteoapi/node-sdk/lib/index.js b/node_modules/@larksuiteoapi/node-sdk/lib/index.js
|
|
2
|
-
index e0a1198..efbd5a0 100644
|
|
3
|
-
--- a/node_modules/@larksuiteoapi/node-sdk/lib/index.js
|
|
4
|
-
+++ b/node_modules/@larksuiteoapi/node-sdk/lib/index.js
|
|
5
|
-
@@ -85550,25 +85550,22 @@ class WSClient {
|
|
6
|
-
data: payload
|
|
7
|
-
});
|
|
8
|
-
if (!mergedData) {
|
|
9
|
-
+ // 分片未收齐:必须立即 ACK 该帧,否则飞书认为未收到会暂停推送,后续消息延后重试才到
|
|
10
|
-
+ const partialRespPayload = { code: HttpStatusCode.ok };
|
|
11
|
-
+ this.sendMessage(Object.assign(Object.assign({}, data), { headers: [...data.headers, { key: HeaderKey.biz_rt, value: "0" }], payload: new TextEncoder().encode(JSON.stringify(partialRespPayload)) }));
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
this.logger.debug('[ws]', `receive message, message_type: ${type}; message_id: ${message_id}; trace_id: ${trace_id}; data: ${mergedData.data}`);
|
|
15
|
-
- const respPayload = {
|
|
16
|
-
- code: HttpStatusCode.ok,
|
|
17
|
-
- };
|
|
18
|
-
- const startTime = Date.now();
|
|
19
|
-
- try {
|
|
20
|
-
- const result = yield ((_a = this.eventDispatcher) === null || _a === void 0 ? void 0 : _a.invoke(mergedData, { needCheck: false }));
|
|
21
|
-
- if (result) {
|
|
22
|
-
- respPayload.data = Buffer.from(JSON.stringify(result)).toString("base64");
|
|
23
|
-
- }
|
|
24
|
-
- }
|
|
25
|
-
- catch (error) {
|
|
26
|
-
- respPayload.code = HttpStatusCode.internal_server_error;
|
|
27
|
-
- this.logger.error('[ws]', `invoke event failed, message_type: ${type}; message_id: ${message_id}; trace_id: ${trace_id}; error: ${error}`);
|
|
28
|
-
+ // [patch] 立即 ACK,不等 handler 完成。飞书要求 3 秒内 ACK,handler 可能耗时远超此限。
|
|
29
|
-
+ const immediateAckPayload = { code: HttpStatusCode.ok };
|
|
30
|
-
+ this.sendMessage(Object.assign(Object.assign({}, data), { headers: [...data.headers, { key: HeaderKey.biz_rt, value: "0" }], payload: new TextEncoder().encode(JSON.stringify(immediateAckPayload)) }));
|
|
31
|
-
+ // [patch] handler 异步执行,不阻塞后续消息的 ACK
|
|
32
|
-
+ const dispatcher = this.eventDispatcher;
|
|
33
|
-
+ if (dispatcher) {
|
|
34
|
-
+ dispatcher.invoke(mergedData, { needCheck: false }).catch((error) => {
|
|
35
|
-
+ this.logger.error('[ws]', `invoke event failed, message_type: ${type}; message_id: ${message_id}; trace_id: ${trace_id}; error: ${error}`);
|
|
36
|
-
+ });
|
|
37
|
-
}
|
|
38
|
-
- const endTime = Date.now();
|
|
39
|
-
- this.sendMessage(Object.assign(Object.assign({}, data), { headers: [...data.headers, { key: HeaderKey.biz_rt, value: String(startTime - endTime) }], payload: new TextEncoder().encode(JSON.stringify(respPayload)) }));
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
sendMessage(data) {
|