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

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
J
Java Code Geeks
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Last Week in AI
Last Week in AI
雷峰网
雷峰网
博客园_首页
小众软件
小众软件
美团技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
腾讯CDC
P
Proofpoint News Feed
MongoDB | Blog
MongoDB | Blog
Google DeepMind News
Google DeepMind News
MyScale Blog
MyScale Blog
U
Unit 42
The Cloudflare Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
大猫的无限游戏
大猫的无限游戏
Engineering at Meta
Engineering at Meta
N
Netflix TechBlog - Medium
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 叶小钗

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(codex): isolate shared app-server clients · openclaw/...
steipete · 2026-05-17 · via Recent Commits to openclaw:main

@@ -1038,6 +1038,7 @@ export async function runCodexAppServerAttempt(

10381038

let timedOut = false;

10391039

let turnCompletionIdleTimedOut = false;

10401040

let turnCompletionIdleTimeoutMessage: string | undefined;

1041+

let clientClosedPromptError: string | undefined;

10411042

let lifecycleStarted = false;

10421043

let lifecycleTerminalEmitted = false;

10431044

let resolveCompletion: (() => void) | undefined;

@@ -1758,6 +1759,7 @@ export async function runCodexAppServerAttempt(

17581759

}

17591760

}

17601761

});

1762+

let closeCleanup: (() => void) | undefined;

1761176317621764

const forceContextEngineCompactionForCodexOverflow = async (error: unknown): Promise<boolean> => {

17631765

if (!activeContextEngine?.info.ownsCompaction) {

@@ -2016,6 +2018,30 @@ export async function runCodexAppServerAttempt(

20162018

nativePostToolUseRelayEnabled:

20172019

nativeHookRelay?.allowedEvents.includes("post_tool_use") === true,

20182020

});

2021+

closeCleanup = (

2022+

client as {

2023+

addCloseHandler?: (handler: (client: CodexAppServerClient) => void) => () => void;

2024+

}

2025+

).addCloseHandler?.(() => {

2026+

if (completed || runAbortController.signal.aborted) {

2027+

return;

2028+

}

2029+

clientClosedPromptError = "codex app-server client closed before turn completed";

2030+

trajectoryRecorder?.recordEvent("turn.client_closed", {

2031+

threadId: thread.threadId,

2032+

turnId: activeTurnId,

2033+

});

2034+

embeddedAgentLog.warn("codex app-server client closed before turn completed", {

2035+

threadId: thread.threadId,

2036+

turnId: activeTurnId,

2037+

});

2038+

completed = true;

2039+

clearTurnAttemptIdleTimer();

2040+

clearTurnCompletionIdleTimer();

2041+

clearTurnAssistantCompletionIdleTimer();

2042+

clearTurnTerminalIdleTimer();

2043+

resolveCompletion?.();

2044+

});

20192045

emitLifecycleStart();

20202046

const activeProjector = projector;

20212047

turnTerminalIdleWatchArmed = true;

@@ -2081,11 +2107,13 @@ export async function runCodexAppServerAttempt(

20812107

await completion;

20822108

const result = activeProjector.buildResult(toolBridge.telemetry, { yieldDetected });

20832109

const finalAborted = result.aborted || runAbortController.signal.aborted;

2084-

let finalPromptError = turnCompletionIdleTimedOut

2085-

? turnCompletionIdleTimeoutMessage

2086-

: timedOut

2087-

? "codex app-server attempt timed out"

2088-

: result.promptError;

2110+

let finalPromptError =

2111+

clientClosedPromptError ??

2112+

(turnCompletionIdleTimedOut

2113+

? turnCompletionIdleTimeoutMessage

2114+

: timedOut

2115+

? "codex app-server attempt timed out"

2116+

: result.promptError);

20892117

const finalPromptErrorMessage =

20902118

typeof finalPromptError === "string"

20912119

? finalPromptError

@@ -2104,7 +2132,8 @@ export async function runCodexAppServerAttempt(

21042132

signal: runAbortController.signal,

21052133

});

21062134

}

2107-

const finalPromptErrorSource = timedOut ? "prompt" : result.promptErrorSource;

2135+

const finalPromptErrorSource =

2136+

timedOut || clientClosedPromptError ? "prompt" : result.promptErrorSource;

21082137

recordCodexTrajectoryCompletion(trajectoryRecorder, {

21092138

attempt: params,

21102139

result,

@@ -2247,6 +2276,7 @@ export async function runCodexAppServerAttempt(

22472276

clearTurnTerminalIdleTimer();

22482277

notificationCleanup();

22492278

requestCleanup();

2279+

closeCleanup?.();

22502280

nativeHookRelay?.unregister();

22512281

runAbortController.signal.removeEventListener("abort", abortListener);

22522282

params.abortSignal?.removeEventListener("abort", abortFromUpstream);