惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
博客园 - 叶小钗
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 司徒正美
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - Franky
爱范儿
爱范儿
罗磊的独立博客
IT之家
IT之家
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
N
Netflix TechBlog - Medium
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
U
Unit 42
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
T
Tailwind CSS Blog
H
Help Net Security
博客园_首页
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
人人都是产品经理
人人都是产品经理

Recent Commits to openclaw:main

test: merge chat side-result checks · openclaw/openclaw@ddd2c2a test: merge cron history checks · openclaw/openclaw@f7eb746 test: merge responsive navigation shell checks · openclaw/openclaw@c2e4b47 docs(changelog): add codex oauth fixes · openclaw/openclaw@628e6cd test: merge navigation routing cases · openclaw/openclaw@5d8cecb Tests: mock channel registry bundled fallback · openclaw/openclaw@2b08233 Secrets: avoid broad web search discovery for single plugin config · openclaw/openclaw@a464f59 test: merge config view browser checks · openclaw/openclaw@20cf511 fix(status): align oauth health with runtime · openclaw/openclaw@eed7116 feat: add macOS screen snapshots for monitor preview (#67954) thanks … · openclaw/openclaw@f377db1 fix: report shared auth scopes in hello-ok (#67810) thanks @BunsDev · openclaw/openclaw@0b6c39b Auto-reply: avoid eager bundled route fallback · openclaw/openclaw@3ea1bf4 Tests: narrow session binding contract setup · openclaw/openclaw@54e4e16 fix(macOS): enable undo/redo in webchat composer text input (#34962) · openclaw/openclaw@00951dc Tests: speed up channel setup promotion · openclaw/openclaw@82b529a Docs: refresh agent instructions · openclaw/openclaw@5775fe2 fix(auth): serialize OAuth refresh across agents to fix #26322 (#67876) · openclaw/openclaw@8e79080 test: allow ollama public surface boundary test · openclaw/openclaw@7d4f1a6 Docs: add test performance guardrails · openclaw/openclaw@89706d3 Tests: restore context-engine usage proof · openclaw/openclaw@e4c4f95 Tests: slim context engine runtime coverage · openclaw/openclaw@74c198f ci: retry failed custom checkouts · openclaw/openclaw@0ee5baf test: trim duplicate provider auth onboarding cases · openclaw/openclaw@1ffc02e matrix: fix sessions_spawn --thread subagent session spawning (#67643) · openclaw/openclaw@1ce2596 test: reduce auth choice fixture churn · openclaw/openclaw@857b9cd test: mock health status config boundaries · openclaw/openclaw@9d5ab4a test: mock onboard config io boundary · openclaw/openclaw@299694d test: mock legacy state plugin boundaries · openclaw/openclaw@2713089 test: mock channel install boundaries · openclaw/openclaw@b945248 test: mock doctor preview channel boundaries · openclaw/openclaw@b1a3ad4
fix: scope codex attempt watchdog to turn progress · open...
2026-05-16 · via Recent Commits to openclaw:main

@@ -1068,6 +1068,9 @@ export async function runCodexAppServerAttempt(

10681068

let turnCompletionLastActivityAt = Date.now();

10691069

let turnCompletionLastActivityReason = "startup";

10701070

let turnCompletionLastActivityDetails: Record<string, unknown> | undefined;

1071+

let turnAttemptLastProgressAt = Date.now();

1072+

let turnAttemptLastProgressReason = "startup";

1073+

let turnAttemptLastProgressDetails: Record<string, unknown> | undefined;

10711074

let activeAppServerTurnRequests = 0;

10721075

const activeOpenClawDynamicToolCallIds = new Set<string>();

10731076

const activeTurnItemIds = new Set<string>();

@@ -1154,7 +1157,7 @@ export async function runCodexAppServerAttempt(

11541157

) {

11551158

return;

11561159

}

1157-

const idleMs = Math.max(0, Date.now() - turnCompletionLastActivityAt);

1160+

const idleMs = Math.max(0, Date.now() - turnAttemptLastProgressAt);

11581161

if (idleMs < turnAttemptIdleTimeoutMs) {

11591162

scheduleTurnAttemptIdleWatch();

11601163

return;

@@ -1169,16 +1172,16 @@ export async function runCodexAppServerAttempt(

11691172

turnId,

11701173

idleMs,

11711174

timeoutMs: turnAttemptIdleTimeoutMs,

1172-

lastActivityReason: turnCompletionLastActivityReason,

1173-

...turnCompletionLastActivityDetails,

1175+

lastActivityReason: turnAttemptLastProgressReason,

1176+

...turnAttemptLastProgressDetails,

11741177

});

11751178

embeddedAgentLog.warn("codex app-server turn idle timed out waiting for progress", {

11761179

threadId: thread.threadId,

11771180

turnId,

11781181

idleMs,

11791182

timeoutMs: turnAttemptIdleTimeoutMs,

1180-

lastActivityReason: turnCompletionLastActivityReason,

1181-

...turnCompletionLastActivityDetails,

1183+

lastActivityReason: turnAttemptLastProgressReason,

1184+

...turnAttemptLastProgressDetails,

11821185

});

11831186

runAbortController.abort("turn_progress_idle_timeout");

11841187

};

@@ -1296,7 +1299,7 @@ export async function runCodexAppServerAttempt(

12961299

) {

12971300

return;

12981301

}

1299-

const elapsedMs = Math.max(0, Date.now() - turnCompletionLastActivityAt);

1302+

const elapsedMs = Math.max(0, Date.now() - turnAttemptLastProgressAt);

13001303

const delayMs = Math.max(1, turnAttemptIdleTimeoutMs - elapsedMs);

13011304

turnAttemptIdleTimer = setTimeout(fireTurnAttemptIdleTimeout, delayMs);

13021305

turnAttemptIdleTimer.unref?.();

@@ -1318,13 +1321,24 @@ export async function runCodexAppServerAttempt(

13181321

turnTerminalIdleTimer.unref?.();

13191322

}

132013231324+

function scheduleTurnProgressWatches() {

1325+

scheduleTurnAttemptIdleWatch();

1326+

scheduleTurnCompletionIdleWatch();

1327+

scheduleTurnTerminalIdleWatch();

1328+

}

1329+13211330

const touchTurnCompletionActivity = (

13221331

reason: string,

1323-

options?: { arm?: boolean; details?: Record<string, unknown> },

1332+

options?: { arm?: boolean; details?: Record<string, unknown>; attemptProgress?: boolean },

13241333

) => {

13251334

turnCompletionLastActivityAt = Date.now();

13261335

turnCompletionLastActivityReason = reason;

13271336

turnCompletionLastActivityDetails = options?.details;

1337+

if (options?.attemptProgress) {

1338+

turnAttemptLastProgressAt = turnCompletionLastActivityAt;

1339+

turnAttemptLastProgressReason = reason;

1340+

turnAttemptLastProgressDetails = options.details;

1341+

}

13281342

emitTrustedDiagnosticEvent({

13291343

type: "run.progress",

13301344

runId: params.runId,

@@ -1336,9 +1350,7 @@ export async function runCodexAppServerAttempt(

13361350

turnCompletionIdleWatchArmed = true;

13371351

turnCompletionIdleWatchPinnedByTerminalError = false;

13381352

}

1339-

scheduleTurnAttemptIdleWatch();

1340-

scheduleTurnCompletionIdleWatch();

1341-

scheduleTurnTerminalIdleWatch();

1353+

scheduleTurnProgressWatches();

13421354

};

1343135513441356

const disarmTurnCompletionIdleWatch = () => {

@@ -1444,6 +1456,7 @@ export async function runCodexAppServerAttempt(

14441456

if (isCurrentTurnNotification) {

14451457

touchTurnCompletionActivity(`notification:${notification.method}`, {

14461458

details: describeNotificationActivity(notification),

1459+

attemptProgress: true,

14471460

});

14481461

reportCodexExecutionNotification(notification);

14491462

}

@@ -1569,8 +1582,8 @@ export async function runCodexAppServerAttempt(

15691582

activeAppServerTurnRequests += 1;

15701583

clearTurnCompletionIdleTimer();

15711584

disarmTurnAssistantCompletionIdleWatch();

1572-

touchTurnCompletionActivity(`request:${request.method}`);

15731585

let armCompletionWatchOnResponse = false;

1586+

let requestCountsAsTurnActivity = false;

15741587

try {

15751588

if (request.method === "account/chatgptAuthTokens/refresh") {

15761589

return refreshCodexAppServerAuthTokens({

@@ -1584,6 +1597,7 @@ export async function runCodexAppServerAttempt(

15841597

}

15851598

if (request.method === "mcpServer/elicitation/request") {

15861599

armCompletionWatchOnResponse = true;

1600+

requestCountsAsTurnActivity = true;

15871601

return handleCodexAppServerElicitationRequest({

15881602

requestParams: request.params,

15891603

paramsForRun: params,

@@ -1595,6 +1609,7 @@ export async function runCodexAppServerAttempt(

15951609

}

15961610

if (request.method === "item/tool/requestUserInput") {

15971611

armCompletionWatchOnResponse = true;

1612+

requestCountsAsTurnActivity = true;

15981613

return userInputBridge?.handleRequest({

15991614

id: request.id,

16001615

params: request.params,

@@ -1603,6 +1618,7 @@ export async function runCodexAppServerAttempt(

16031618

if (request.method !== "item/tool/call") {

16041619

if (isCodexAppServerApprovalRequest(request.method)) {

16051620

armCompletionWatchOnResponse = true;

1621+

requestCountsAsTurnActivity = true;

16061622

return handleApprovalRequest({

16071623

method: request.method,

16081624

params: request.params,

@@ -1619,6 +1635,7 @@ export async function runCodexAppServerAttempt(

16191635

return undefined;

16201636

}

16211637

armCompletionWatchOnResponse = true;

1638+

requestCountsAsTurnActivity = true;

16221639

turnCrossedToolHandoff = true;

16231640

activeOpenClawDynamicToolCallIds.add(call.callId);

16241641

trajectoryRecorder?.recordEvent("tool.call", {

@@ -1698,9 +1715,14 @@ export async function runCodexAppServerAttempt(

16981715

return response as JsonValue;

16991716

} finally {

17001717

activeAppServerTurnRequests = Math.max(0, activeAppServerTurnRequests - 1);

1701-

touchTurnCompletionActivity(`request:${request.method}:response`, {

1702-

arm: armCompletionWatchOnResponse,

1703-

});

1718+

if (requestCountsAsTurnActivity) {

1719+

touchTurnCompletionActivity(`request:${request.method}:response`, {

1720+

arm: armCompletionWatchOnResponse,

1721+

attemptProgress: true,

1722+

});

1723+

} else {

1724+

scheduleTurnProgressWatches();

1725+

}

17041726

}

17051727

});

17061728

@@ -1999,7 +2021,7 @@ export async function runCodexAppServerAttempt(

19992021

setActiveEmbeddedRun(params.sessionId, handle, params.sessionKey);

20002022

turnAttemptIdleWatchArmed = true;

20012023

turnTerminalIdleWatchArmed = true;

2002-

touchTurnCompletionActivity("turn:start", { arm: true });

2024+

touchTurnCompletionActivity("turn:start", { arm: true, attemptProgress: true });

2003202520042026

const abortListener = () => {

20052027

const shouldRetireClient = timedOut;