chatccc 0.2.85 → 0.2.86

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/src/session.ts +11 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chatccc",
3
- "version": "0.2.85",
3
+ "version": "0.2.86",
4
4
  "description": "Feishu bot bridge for Claude Code",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
package/src/session.ts CHANGED
@@ -955,7 +955,16 @@ export async function runAgentSession(
955
955
  const CARD_ROTATE_MS = 9 * 60 * 1000;
956
956
 
957
957
  export function ensureDisplayLoop(sessionId: string): void {
958
- if (displayLoops.has(sessionId)) return;
958
+ // 杀掉旧 loop(如果存在),避免竞态:旧 loop 正在处理 terminal 分支
959
+ // (发送完成卡片、清理 display)尚未 delete 自己,新 turn 的
960
+ // runAgentSession 调用 ensureDisplayLoop 时因 guard 直接返回,
961
+ // 导致新 turn 没有 display loop → 卡片永久不更新。
962
+ const oldStop = displayLoops.get(sessionId);
963
+ if (oldStop) {
964
+ console.log(`[${ts()}] [DISPLAY] ensureDisplayLoop restarting loop for ${sessionId} (old loop existed)`);
965
+ oldStop();
966
+ displayLoops.delete(sessionId);
967
+ }
959
968
 
960
969
  let dotCount = 0;
961
970
 
@@ -1243,6 +1252,7 @@ export function ensureDisplayLoop(sessionId: string): void {
1243
1252
  }
1244
1253
 
1245
1254
  if (isTerminal) {
1255
+ console.log(`[${ts()}] [DISPLAY] loop stopping for ${sessionId} (terminal state: ${state.status})`);
1246
1256
  clearInterval(interval);
1247
1257
  displayLoops.delete(sessionId);
1248
1258
  }