opencode-feishu 0.3.3 → 0.3.4
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/index.js +22 -11
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -98744,12 +98744,15 @@ var EExecStatus;
|
|
|
98744
98744
|
})(EExecStatus || (EExecStatus = {}));
|
|
98745
98745
|
|
|
98746
98746
|
// src/feishu/dedup.ts
|
|
98747
|
-
var
|
|
98747
|
+
var seenTtlMs = 10 * 60 * 1e3;
|
|
98748
98748
|
var seen = /* @__PURE__ */ new Map();
|
|
98749
|
+
function initDedup(ttl) {
|
|
98750
|
+
seenTtlMs = ttl;
|
|
98751
|
+
}
|
|
98749
98752
|
function isDuplicate(messageId) {
|
|
98750
98753
|
const now = Date.now();
|
|
98751
98754
|
for (const [k, ts] of seen) {
|
|
98752
|
-
if (now - ts >
|
|
98755
|
+
if (now - ts > seenTtlMs) seen.delete(k);
|
|
98753
98756
|
}
|
|
98754
98757
|
if (!messageId) return false;
|
|
98755
98758
|
if (seen.has(messageId)) return true;
|
|
@@ -99011,8 +99014,6 @@ async function getOrCreateSession(client, sessionKey, directory) {
|
|
|
99011
99014
|
}
|
|
99012
99015
|
|
|
99013
99016
|
// src/handler/chat.ts
|
|
99014
|
-
var POLL_INTERVAL_MS = 1500;
|
|
99015
|
-
var STABLE_POLLS = 2;
|
|
99016
99017
|
async function handleChat(ctx, deps) {
|
|
99017
99018
|
const { content, chatId, chatType, senderId, createTime, shouldReply } = ctx;
|
|
99018
99019
|
if (!content.trim()) return;
|
|
@@ -99046,6 +99047,8 @@ async function handleChat(ctx, deps) {
|
|
|
99046
99047
|
}
|
|
99047
99048
|
const timeout = config.timeout;
|
|
99048
99049
|
const thinkingDelay = config.thinkingDelay;
|
|
99050
|
+
const pollInterval = config.pollInterval;
|
|
99051
|
+
const stablePolls = config.stablePolls;
|
|
99049
99052
|
let placeholderId = "";
|
|
99050
99053
|
let done = false;
|
|
99051
99054
|
const timer = thinkingDelay > 0 ? setTimeout(async () => {
|
|
@@ -99071,7 +99074,7 @@ async function handleChat(ctx, deps) {
|
|
|
99071
99074
|
let lastText = "";
|
|
99072
99075
|
let sameCount = 0;
|
|
99073
99076
|
while (Date.now() - start < timeout) {
|
|
99074
|
-
await new Promise((r) => setTimeout(r,
|
|
99077
|
+
await new Promise((r) => setTimeout(r, pollInterval));
|
|
99075
99078
|
const { data: messages } = await client.session.messages({ path: { id: session.id }, query });
|
|
99076
99079
|
const text = extractLastAssistantText(messages ?? []);
|
|
99077
99080
|
if (text && text !== lastText) {
|
|
@@ -99085,7 +99088,7 @@ async function handleChat(ctx, deps) {
|
|
|
99085
99088
|
}
|
|
99086
99089
|
} else if (text && text.length > 0) {
|
|
99087
99090
|
sameCount++;
|
|
99088
|
-
if (sameCount >=
|
|
99091
|
+
if (sameCount >= stablePolls) break;
|
|
99089
99092
|
}
|
|
99090
99093
|
}
|
|
99091
99094
|
const { data: finalMessages } = await client.session.messages({ path: { id: session.id }, query });
|
|
@@ -99121,10 +99124,9 @@ function extractLastAssistantText(messages) {
|
|
|
99121
99124
|
}
|
|
99122
99125
|
|
|
99123
99126
|
// src/feishu/history.ts
|
|
99124
|
-
var DEFAULT_MAX_MESSAGES = 50;
|
|
99125
99127
|
var DEFAULT_PAGE_SIZE = 50;
|
|
99126
99128
|
async function ingestGroupHistory(feishuClient, opencodeClient, chatId, options) {
|
|
99127
|
-
const { maxMessages
|
|
99129
|
+
const { maxMessages, log } = options;
|
|
99128
99130
|
log("info", "\u5F00\u59CB\u6444\u5165\u7FA4\u804A\u5386\u53F2\u4E0A\u4E0B\u6587", { chatId, maxMessages });
|
|
99129
99131
|
const messages = await fetchRecentMessages(feishuClient, chatId, maxMessages, log);
|
|
99130
99132
|
if (!messages.length) {
|
|
@@ -99211,7 +99213,11 @@ var isDebug = !!process.env.FEISHU_DEBUG;
|
|
|
99211
99213
|
var DEFAULT_CONFIG = {
|
|
99212
99214
|
timeout: 12e4,
|
|
99213
99215
|
thinkingDelay: 2500,
|
|
99214
|
-
logLevel: "info"
|
|
99216
|
+
logLevel: "info",
|
|
99217
|
+
maxHistoryMessages: 200,
|
|
99218
|
+
pollInterval: 1e3,
|
|
99219
|
+
stablePolls: 3,
|
|
99220
|
+
dedupTtl: 10 * 60 * 1e3
|
|
99215
99221
|
};
|
|
99216
99222
|
var FeishuPlugin = async (ctx) => {
|
|
99217
99223
|
const { client } = ctx;
|
|
@@ -99252,8 +99258,13 @@ var FeishuPlugin = async (ctx) => {
|
|
|
99252
99258
|
appSecret: feishuRaw.appSecret,
|
|
99253
99259
|
timeout: feishuRaw.timeout ?? DEFAULT_CONFIG.timeout,
|
|
99254
99260
|
thinkingDelay: feishuRaw.thinkingDelay ?? DEFAULT_CONFIG.thinkingDelay,
|
|
99255
|
-
logLevel: feishuRaw.logLevel ?? DEFAULT_CONFIG.logLevel
|
|
99261
|
+
logLevel: feishuRaw.logLevel ?? DEFAULT_CONFIG.logLevel,
|
|
99262
|
+
maxHistoryMessages: feishuRaw.maxHistoryMessages ?? DEFAULT_CONFIG.maxHistoryMessages,
|
|
99263
|
+
pollInterval: feishuRaw.pollInterval ?? DEFAULT_CONFIG.pollInterval,
|
|
99264
|
+
stablePolls: feishuRaw.stablePolls ?? DEFAULT_CONFIG.stablePolls,
|
|
99265
|
+
dedupTtl: feishuRaw.dedupTtl ?? DEFAULT_CONFIG.dedupTtl
|
|
99256
99266
|
};
|
|
99267
|
+
initDedup(resolvedConfig.dedupTtl);
|
|
99257
99268
|
const botOpenId = await fetchBotOpenId(resolvedConfig.appId, resolvedConfig.appSecret, log);
|
|
99258
99269
|
gateway = startFeishuGateway({
|
|
99259
99270
|
config: resolvedConfig,
|
|
@@ -99271,7 +99282,7 @@ var FeishuPlugin = async (ctx) => {
|
|
|
99271
99282
|
onBotAdded: (chatId) => {
|
|
99272
99283
|
if (!gateway) return;
|
|
99273
99284
|
ingestGroupHistory(gateway.client, client, chatId, {
|
|
99274
|
-
maxMessages:
|
|
99285
|
+
maxMessages: resolvedConfig.maxHistoryMessages,
|
|
99275
99286
|
log
|
|
99276
99287
|
}).catch((err) => {
|
|
99277
99288
|
log("error", "\u7FA4\u804A\u5386\u53F2\u6444\u5165\u5931\u8D25", {
|