chatccc 0.2.84 → 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.
- package/package.json +1 -1
- package/src/session.ts +20 -5
package/package.json
CHANGED
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
|
-
|
|
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
|
|
|
@@ -1154,7 +1163,7 @@ export function ensureDisplayLoop(sessionId: string): void {
|
|
|
1154
1163
|
const oldCard = buildProgressCard(oldDisplayContent, { showStop: false, headerTitle: "生成中...(上轮)" });
|
|
1155
1164
|
await p.cardUpdate(display.cardId, oldCard, oldSeqBase + 1).catch(() => {});
|
|
1156
1165
|
const newCardId = await p.cardCreate(buildProgressCard(
|
|
1157
|
-
|
|
1166
|
+
"",
|
|
1158
1167
|
{ showStop: true, headerTitle: "生成中..." },
|
|
1159
1168
|
));
|
|
1160
1169
|
if (newCardId) {
|
|
@@ -1189,9 +1198,14 @@ export function ensureDisplayLoop(sessionId: string): void {
|
|
|
1189
1198
|
replyDelta = state.finalReply;
|
|
1190
1199
|
}
|
|
1191
1200
|
const delta = (accDelta + replyDelta).trim();
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1201
|
+
|
|
1202
|
+
// 无论有无新内容,都追加点点点动画,避免轮转后卡片静止
|
|
1203
|
+
dotCount = (dotCount % 9) + 1;
|
|
1204
|
+
const displayContent = (delta || "") + "\n" + "。" .repeat(dotCount);
|
|
1205
|
+
if (displayContent === display.lastSentContent) return;
|
|
1206
|
+
|
|
1207
|
+
display.lastSentContent = displayContent;
|
|
1208
|
+
const deltaCard = buildProgressCard(truncateContent(displayContent) || "处理中...", { showStop: true, headerTitle: "生成中..." });
|
|
1195
1209
|
display.cardBusy = true;
|
|
1196
1210
|
const mySeq = display.sequence + 1;
|
|
1197
1211
|
try {
|
|
@@ -1238,6 +1252,7 @@ export function ensureDisplayLoop(sessionId: string): void {
|
|
|
1238
1252
|
}
|
|
1239
1253
|
|
|
1240
1254
|
if (isTerminal) {
|
|
1255
|
+
console.log(`[${ts()}] [DISPLAY] loop stopping for ${sessionId} (terminal state: ${state.status})`);
|
|
1241
1256
|
clearInterval(interval);
|
|
1242
1257
|
displayLoops.delete(sessionId);
|
|
1243
1258
|
}
|