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 CHANGED
@@ -98744,12 +98744,15 @@ var EExecStatus;
98744
98744
  })(EExecStatus || (EExecStatus = {}));
98745
98745
 
98746
98746
  // src/feishu/dedup.ts
98747
- var SEEN_TTL_MS = 10 * 60 * 1e3;
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 > SEEN_TTL_MS) seen.delete(k);
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, POLL_INTERVAL_MS));
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 >= STABLE_POLLS) break;
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 = DEFAULT_MAX_MESSAGES, log } = options;
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: 50,
99285
+ maxMessages: resolvedConfig.maxHistoryMessages,
99275
99286
  log
99276
99287
  }).catch((err) => {
99277
99288
  log("error", "\u7FA4\u804A\u5386\u53F2\u6444\u5165\u5931\u8D25", {