@vibe-lark/larkpal 0.1.80 → 0.1.81
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/main.mjs +25 -3
- package/package.json +1 -1
package/dist/main.mjs
CHANGED
|
@@ -22,7 +22,6 @@ import { pipeline } from "node:stream/promises";
|
|
|
22
22
|
import { PassThrough, Readable, Transform } from "node:stream";
|
|
23
23
|
import express, { Router } from "express";
|
|
24
24
|
import Busboy from "busboy";
|
|
25
|
-
import { EventEmitter as EventEmitter$1 } from "events";
|
|
26
25
|
import cron from "node-cron";
|
|
27
26
|
import * as Lark from "@larksuiteoapi/node-sdk";
|
|
28
27
|
import { DEFAULT_ACCOUNT_ID, normalizeAccountId } from "openclaw/plugin-sdk/account-id";
|
|
@@ -7794,13 +7793,17 @@ const sessionNoReplyFlags = /* @__PURE__ */ new Map();
|
|
|
7794
7793
|
/** TTL: 30 分钟 */
|
|
7795
7794
|
const TTL_MS = 1800 * 1e3;
|
|
7796
7795
|
/** 定期清理过期的 pending requests(每 5 分钟检查一次) */
|
|
7797
|
-
|
|
7796
|
+
function cleanupExpiredPendingRequests() {
|
|
7798
7797
|
const now = Date.now();
|
|
7799
7798
|
let cleaned = 0;
|
|
7800
7799
|
for (const [id, req] of pendingRequests) if (now - req.createdAt > TTL_MS) {
|
|
7801
7800
|
pendingRequests.delete(id);
|
|
7802
7801
|
cleaned++;
|
|
7803
7802
|
}
|
|
7803
|
+
return cleaned;
|
|
7804
|
+
}
|
|
7805
|
+
setInterval(() => {
|
|
7806
|
+
const cleaned = cleanupExpiredPendingRequests();
|
|
7804
7807
|
if (cleaned > 0) logger$4.info("TTL cleanup completed", {
|
|
7805
7808
|
cleaned,
|
|
7806
7809
|
remaining: pendingRequests.size
|
|
@@ -7811,7 +7814,7 @@ setInterval(() => {
|
|
|
7811
7814
|
* 事件名: `callback:${sessionId}`,payload 为 PendingMcpRequest。
|
|
7812
7815
|
* 用于 dispatch-cc 订阅并在收到 ask_user/request_permission 回调时发送飞书卡片。
|
|
7813
7816
|
*/
|
|
7814
|
-
const onMcpCallback = new EventEmitter
|
|
7817
|
+
const onMcpCallback = new EventEmitter();
|
|
7815
7818
|
onMcpCallback.setMaxListeners(100);
|
|
7816
7819
|
/**
|
|
7817
7820
|
* 将 result 存入对应的 pending request
|
|
@@ -7943,6 +7946,25 @@ function createMcpCallbackRouter() {
|
|
|
7943
7946
|
requestId
|
|
7944
7947
|
});
|
|
7945
7948
|
});
|
|
7949
|
+
router.get("/pending", (req, res) => {
|
|
7950
|
+
const sessionId = typeof req.query.session_id === "string" ? req.query.session_id : typeof req.query.sessionId === "string" ? req.query.sessionId : void 0;
|
|
7951
|
+
const cleaned = cleanupExpiredPendingRequests();
|
|
7952
|
+
const now = Date.now();
|
|
7953
|
+
const requests = [...pendingRequests.values()].filter((pending) => pending.result === void 0).filter((pending) => !sessionId || pending.sessionId === sessionId).map((pending) => ({
|
|
7954
|
+
requestId: pending.requestId,
|
|
7955
|
+
tool: pending.tool,
|
|
7956
|
+
sessionId: pending.sessionId,
|
|
7957
|
+
params: pending.params,
|
|
7958
|
+
createdAt: pending.createdAt,
|
|
7959
|
+
waitingMs: now - pending.createdAt
|
|
7960
|
+
}));
|
|
7961
|
+
logger$4.debug("pending requests listed", {
|
|
7962
|
+
sessionId,
|
|
7963
|
+
count: requests.length,
|
|
7964
|
+
cleaned
|
|
7965
|
+
});
|
|
7966
|
+
res.json({ requests });
|
|
7967
|
+
});
|
|
7946
7968
|
router.get("/resolve/:requestId", (req, res) => {
|
|
7947
7969
|
const requestId = req.params.requestId;
|
|
7948
7970
|
logger$4.debug("resolve poll", { requestId });
|