[VS Code] Codex Diff editor tab always crashes with "Thread context is unavailable for non-thread routes"

Open 💬 5 comments Opened Jul 24, 2026 by dbsrlskfdk
💡 Likely answer: A maintainer (github-actions[bot], contributor) responded on this thread — see the highlighted reply below.

What version of the IDE extension are you using?

26.721.30844

What subscription do you have?

Pro

Which IDE are you using?

VS Code with Remote-SSH

What platform is your computer?

Local : Darwin 25.5.0 arm64 arm / Remote: Linux 7.0.0-28-generic x86_64 x86_64

What issue are you seeing?

Opening a Codex diff as a full editor tab always fails. The tab opens but renders the app's error boundary (Oops, an error has occurred).

The Codex sidebar itself works normally.

The webview DevTools console shows:

app-initial-Cm7fGZvY.js:289 Error: Thread context is unavailable for non-thread routes
    at app-initial-Bc0jVuU9.js:715:89492
    at app-initial-Cm7fGZvY.js:196:28173
    at Object.read (app-initial-Cm7fGZvY.js:196:7845)
    at Object.read (app-initial-Cm7fGZvY.js:196:17940)
    at $be (app-initial-Cm7fGZvY.js:175:27897)
    at oxe (app-initial-Cm7fGZvY.js:175:29844)
    at pxe (app-initial-Cm7fGZvY.js:175:31967)
    at Object.get (app-initial-Cm7fGZvY.js:175:27109)
    at app-initial-Cm7fGZvY.js:196:17367
    at app-initial-Cm7fGZvY.js:196:19779
    at app-initial-Bc0jVuU9.js:715:89900
    at app-initial-Cm7fGZvY.js:196:28173
    at Object.read (app-initial-Cm7fGZvY.js:196:7845)
    at Object.read (app-initial-Cm7fGZvY.js:196:17940)
    at $be (app-initial-Cm7fGZvY.js:175:27897)
    at oxe (app-initial-Cm7fGZvY.js:175:29844)
    at pxe (app-initial-Cm7fGZvY.js:175:31967)
    at Object.get (app-initial-Cm7fGZvY.js:175:27109)
    at app-initial-Cm7fGZvY.js:196:17367
    at app-initial-Cm7fGZvY.js:196:19779
    at app-initial-Bc0jVuU9.js:715:89939
    at app-initial-Cm7fGZvY.js:196:28173
    at Object.read (app-initial-Cm7fGZvY.js:196:7845)
    at Object.read (app-initial-Cm7fGZvY.js:196:17940)
    at $be (app-initial-Cm7fGZvY.js:175:27897)
    at oxe (app-initial-Cm7fGZvY.js:175:29844)
    at pxe (app-initial-Cm7fGZvY.js:175:31967)
    at Object.get (app-initial-Cm7fGZvY.js:175:27109)
    at app-initial-Cm7fGZvY.js:196:37125
    at Object.withCurrentRead (app-initial-Cm7fGZvY.js:196:8574)
    at getSnapshot (app-initial-Cm7fGZvY.js:196:4248)
    at Object.useSyncExternalStore (app-initial-Cm7fGZvY.js:9:60825)
    at e.useSyncExternalStore (app-initial-Cm7fGZvY.js:2:7564)
    at eTe (app-initial-Cm7fGZvY.js:196:37216)
    at R (editor-diff-page-AYqiUD9X.js:1:1304)
    at vo (app-initial-Cm7fGZvY.js:9:47572)
    at ac (app-initial-Cm7fGZvY.js:9:70186)
    at Sc (app-initial-Cm7fGZvY.js:9:80470)
    at Ou (app-initial-Cm7fGZvY.js:9:116051)
    at Tu (app-initial-Cm7fGZvY.js:9:115098)
    at wu (app-initial-Cm7fGZvY.js:9:114931)
    at fu (app-initial-Cm7fGZvY.js:9:111408)
    at od (app-initial-Cm7fGZvY.js:9:123537)
    at td (app-initial-Cm7fGZvY.js:9:122090)
    at gu (app-initial-Cm7fGZvY.js:9:113500)
    at Object.Aee [as f] (app-initial-Cm7fGZvY.js:10:16819)
    at e.flushSync (app-initial-Cm7fGZvY.js:2:12773)
    at T (app-initial-Bc0jVuU9.js:3937:444983)
    at app-initial-Cm7fGZvY.js:9:61770
    at e.deliverMessage (app-initial-Bc0jVuU9.js:2:17211)Caused by: React ErrorBoundary Error: Thread context is unavailable for non-thread routes
    at R (editor-diff-page-AYqiUD9X.js:1:1030)
    at L (editor-diff-page-AYqiUD9X.js:1:643)
    at o (app-initial-Bc0jVuU9.js:717:17015)
    at I7e (app-initial-Cm7fGZvY.js:280:3053)
    at Y7e (app-initial-Cm7fGZvY.js:280:7298)
    at o$t (app-initial-Bc0jVuU9.js:3937:229413)
    at l$t (app-initial-Bc0jVuU9.js:3937:230746)
    at I7e (app-initial-Cm7fGZvY.js:280:3053)
    at Q7e (app-initial-Cm7fGZvY.js:280:8418)
    at Suspense (<anonymous>)
    at qwe (app-initial-Cm7fGZvY.js:196:33715)
    at Rnn (app-initial-Bc0jVuU9.js:3937:604054)
    at qwe (app-initial-Cm7fGZvY.js:196:33715)
    at Unn (app-initial-Bc0jVuU9.js:3937:605090)
    at qwe (app-initial-Cm7fGZvY.js:196:33715)
    at Hnn (app-initial-Bc0jVuU9.js:3937:604622)
    at lu (app-initial-Bo2X13xU.js:2:46751)
    at T4t (app-initial-Bc0jVuU9.js:3937:369052)
    at p4t (app-initial-Bc0jVuU9.js:3937:366937)
    at Iw (app-initial-DmPXxV0h.js:60:75346)
    at aFn (app-initial-DmPXxV0h.js:533:369105)
    at uTn (app-initial-DmPXxV0h.js:533:127202)
    at Ann (app-initial-Bc0jVuU9.js:3937:603153)
    at FYe (app-initial-DmPXxV0h.js:60:79370)
    at kMn (app-initial-DmPXxV0h.js:533:312003)
    at tEn (app-initial-DmPXxV0h.js:533:140881)
    at Iw (app-initial-DmPXxV0h.js:60:75346)
    at t (app-initial-Cm7fGZvY.js:94:8798)
    at A4t (app-initial-Bc0jVuU9.js:3937:369685)
    at c (app-initial-Cm7fGZvY.js:197:171381)
    at o (app-initial-Cm7fGZvY.js:197:170713)
    at akn (app-initial-DmPXxV0h.js:533:206834)
    at rkn (app-initial-DmPXxV0h.js:533:204136)
    at QOn (app-initial-DmPXxV0h.js:533:198124)
    at ZOn (app-initial-DmPXxV0h.js:533:197460)
    at Z6t (app-initial-Bc0jVuU9.js:3937:424834)
    at REn (app-initial-DmPXxV0h.js:533:152975)
    at S4t (app-initial-Bc0jVuU9.js:3937:367627)
    at Z7e (app-initial-Cm7fGZvY.js:280:7488)
    at q7e (app-initial-Cm7fGZvY.js:280:6216)
    at Cgt (app-initial-DmPXxV0h.js:118:11673)
    at su (app-initial-Bo2X13xU.js:2:45831)
    at Yrn (app-initial-Bc0jVuU9.js:3987:13961)
    at qwe (app-initial-Cm7fGZvY.js:196:33715)
    at Kwe (app-initial-Cm7fGZvY.js:196:33550)
    at oan (app-initial-Bc0jVuU9.js:3994:2604)
    at qSe (app-initial-Cm7fGZvY.js:175:70984)
    at RDe (app-initial-Cm7fGZvY.js:197:4743)
    at Tan (app-initial-Bc0jVuU9.js:3994:5152)
    at VBn (app-initial-DmPXxV0h.js:535:82998)
    at Nan (app-initial-Bc0jVuU9.js:3994:6542)
    at $in (app-initial-Bc0jVuU9.js:3994:823)
    at ou (app-initial-Bo2X13xU.js:2:40559)
    at Iw (app-initial-DmPXxV0h.js:60:75346)
(anonymous) @ app-initial-Cm7fGZvY.js:289
oee @ app-initial-Cm7fGZvY.js:9
Vs @ app-initial-Cm7fGZvY.js:9
Ws.o.componentDidCatch.e.callback @ app-initial-Cm7fGZvY.js:9
Ga @ app-initial-Cm7fGZvY.js:9
Ka @ app-initial-Cm7fGZvY.js:9
Pc @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
Fu @ app-initial-Cm7fGZvY.js:9
Nu @ app-initial-Cm7fGZvY.js:9
pu @ app-initial-Cm7fGZvY.js:9
fu @ app-initial-Cm7fGZvY.js:9
od @ app-initial-Cm7fGZvY.js:9
td @ app-initial-Cm7fGZvY.js:9
gu @ app-initial-Cm7fGZvY.js:9
Aee @ app-initial-Cm7fGZvY.js:10
e.flushSync @ app-initial-Cm7fGZvY.js:2
T @ app-initial-Bc0jVuU9.js:3937
(anonymous) @ app-initial-Cm7fGZvY.js:9
deliverMessage @ app-initial-Bc0jVuU9.js:2
handleMessage @ app-initial-Bc0jVuU9.js:2
(anonymous) @ app-initial-Bc0jVuU9.js:2
postMessage
(anonymous) @ index.html?id=25ef25e2-1a67-4376-a5cb-4c80cbf3ea7e&parentId=2&origin=e97e6ed7-53c9-4ed8-82c8-41c68b56def5&swVersion=6&extensionId=openai.chatgpt&platform=electron&vscode-resource-base-authority=vscode-resource.vscode-cdn.net&parentOrigin=vscode-file%3A%2F%2Fvscode-app&remoteAuthority=ssh-remote%2Brtx5090:1250
HostMessaging.channel.port1.onmessage @ index.html?id=25ef25e2-1a67-4376-a5cb-4c80cbf3ea7e&parentId=2&origin=e97e6ed7-53c9-4ed8-82c8-41c68b56def5&swVersion=6&extensionId=openai.chatgpt&platform=electron&vscode-resource-base-authority=vscode-resource.vscode-cdn.net&parentOrigin=vscode-file%3A%2F%2Fvscode-app&remoteAuthority=ssh-remote%2Brtx5090:304
postMessage
doPostMessage @ webviewElement.ts:591
_send @ webviewElement.ts:411
postMessage @ webviewElement.ts:402
postMessage @ overlayWebview.ts:354
$postMessage @ mainThreadWebviews.ts:72
_doInvokeHandler @ rpcProtocol.ts:458
_invokeHandler @ rpcProtocol.ts:443
_receiveRequest @ rpcProtocol.ts:373
_receiveOneMessage @ rpcProtocol.ts:299
(anonymous) @ rpcProtocol.ts:161
_deliver @ event.ts:1364
fire @ event.ts:1395
fire @ ipc.net.ts:658
_receiveMessage @ ipc.net.ts:1028
(anonymous) @ ipc.net.ts:885
_deliver @ event.ts:1364
fire @ event.ts:1395
acceptChunk @ ipc.net.ts:400
(anonymous) @ ipc.net.ts:356
_deliver @ event.ts:1364
fire @ event.ts:1395
fire @ event.ts:1562
(anonymous) @ managedSocket.ts:108
_deliver @ event.ts:1364
fire @ event.ts:1395
$onDidManagedSocketHaveData @ mainThreadManagedSockets.ts:79
_doInvokeHandler @ rpcProtocol.ts:458
_invokeHandler @ rpcProtocol.ts:443
_receiveRequest @ rpcProtocol.ts:373
_receiveOneMessage @ rpcProtocol.ts:308
(anonymous) @ rpcProtocol.ts:161
_deliver @ event.ts:1364
fire @ event.ts:1395
fire @ ipc.net.ts:658
(anonymous) @ localProcessExtensionHost.ts:438
app-initial-Cm7fGZvY.js:289  POST https://o33249.ingest.us.sentry.io/api/4510999349821440/envelope/?sentry_version=7&sentry_key=6719eaa18601933a26ac21499dcaba2f&sentry_client=sentry.javascript.browser%2F10.29.0 429 (Too Many Requests)
i @ app-initial-Cm7fGZvY.js:289
(anonymous) @ app-initial-Cm7fGZvY.js:289
i @ app-initial-Cm7fGZvY.js:289
a @ app-initial-Cm7fGZvY.js:289
sendEnvelope @ app-initial-Cm7fGZvY.js:289
sendEvent @ app-initial-Cm7fGZvY.js:289
(anonymous) @ app-initial-Cm7fGZvY.js:289
(anonymous) @ app-initial-Cm7fGZvY.js:289
(anonymous) @ app-initial-Cm7fGZvY.js:289
_executeHandlers @ app-initial-Cm7fGZvY.js:289
(anonymous) @ app-initial-Cm7fGZvY.js:289
_runExecutor @ app-initial-Cm7fGZvY.js:289
e @ app-initial-Cm7fGZvY.js:289
then @ app-initial-Cm7fGZvY.js:289
_processEvent @ app-initial-Cm7fGZvY.js:289
_captureEvent @ app-initial-Cm7fGZvY.js:289
(anonymous) @ app-initial-Cm7fGZvY.js:289
(anonymous) @ app-initial-Cm7fGZvY.js:289
(anonymous) @ app-initial-Cm7fGZvY.js:289
_executeHandlers @ app-initial-Cm7fGZvY.js:289
(anonymous) @ app-initial-Cm7fGZvY.js:289
_runExecutor @ app-initial-Cm7fGZvY.js:289
e @ app-initial-Cm7fGZvY.js:289
then @ app-initial-Cm7fGZvY.js:289
(anonymous) @ app-initial-Cm7fGZvY.js:289
i @ app-initial-Cm7fGZvY.js:289
_process @ app-initial-Cm7fGZvY.js:289
captureException @ app-initial-Cm7fGZvY.js:289
captureException @ app-initial-Cm7fGZvY.js:289
wxt @ app-initial-Cm7fGZvY.js:289
KFe @ app-initial-Bc0jVuU9.js:181
GFe @ app-initial-Bc0jVuU9.js:181
componentDidCatch @ app-initial-DmPXxV0h.js:60
Ws.o.componentDidCatch.e.callback @ app-initial-Cm7fGZvY.js:9
Ga @ app-initial-Cm7fGZvY.js:9
Ka @ app-initial-Cm7fGZvY.js:9
Pc @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
dl @ app-initial-Cm7fGZvY.js:9
Zc @ app-initial-Cm7fGZvY.js:9
Fu @ app-initial-Cm7fGZvY.js:9
Nu @ app-initial-Cm7fGZvY.js:9
pu @ app-initial-Cm7fGZvY.js:9
fu @ app-initial-Cm7fGZvY.js:9
od @ app-initial-Cm7fGZvY.js:9
td @ app-initial-Cm7fGZvY.js:9
gu @ app-initial-Cm7fGZvY.js:9
Aee @ app-initial-Cm7fGZvY.js:10
e.flushSync @ app-initial-Cm7fGZvY.js:2
T @ app-initial-Bc0jVuU9.js:3937
(anonymous) @ app-initial-Cm7fGZvY.js:9
deliverMessage @ app-initial-Bc0jVuU9.js:2
handleMessage @ app-initial-Bc0jVuU9.js:2
(anonymous) @ app-initial-Bc0jVuU9.js:2
postMessage
(anonymous) @ index.html?id=25ef25e2-1a67-4376-a5cb-4c80cbf3ea7e&parentId=2&origin=e97e6ed7-53c9-4ed8-82c8-41c68b56def5&swVersion=6&extensionId=openai.chatgpt&platform=electron&vscode-resource-base-authority=vscode-resource.vscode-cdn.net&parentOrigin=vscode-file%3A%2F%2Fvscode-app&remoteAuthority=ssh-remote%2Brtx5090:1250
HostMessaging.channel.port1.onmessage @ index.html?id=25ef25e2-1a67-4376-a5cb-4c80cbf3ea7e&parentId=2&origin=e97e6ed7-53c9-4ed8-82c8-41c68b56def5&swVersion=6&extensionId=openai.chatgpt&platform=electron&vscode-resource-base-authority=vscode-resource.vscode-cdn.net&parentOrigin=vscode-file%3A%2F%2Fvscode-app&remoteAuthority=ssh-remote%2Brtx5090:304
postMessage
doPostMessage @ webviewElement.ts:591
_send @ webviewElement.ts:411
postMessage @ webviewElement.ts:402
postMessage @ overlayWebview.ts:354
$postMessage @ mainThreadWebviews.ts:72
_doInvokeHandler @ rpcProtocol.ts:458
_invokeHandler @ rpcProtocol.ts:443
_receiveRequest @ rpcProtocol.ts:373
_receiveOneMessage @ rpcProtocol.ts:299
(anonymous) @ rpcProtocol.ts:161
_deliver @ event.ts:1364
fire @ event.ts:1395
fire @ ipc.net.ts:658
_receiveMessage @ ipc.net.ts:1028
(anonymous) @ ipc.net.ts:885
_deliver @ event.ts:1364
fire @ event.ts:1395
acceptChunk @ ipc.net.ts:400
(anonymous) @ ipc.net.ts:356
_deliver @ event.ts:1364
fire @ event.ts:1395
fire @ event.ts:1562
(anonymous) @ managedSocket.ts:108
_deliver @ event.ts:1364
fire @ event.ts:1395
$onDidManagedSocketHaveData @ mainThreadManagedSockets.ts:79
_doInvokeHandler @ rpcProtocol.ts:458
_invokeHandler @ rpcProtocol.ts:443
_receiveRequest @ rpcProtocol.ts:373
_receiveOneMessage @ rpcProtocol.ts:308
(anonymous) @ rpcProtocol.ts:161
_deliver @ event.ts:1364
fire @ event.ts:1395
fire @ ipc.net.ts:658
(anonymous) @ localProcessExtensionHost.ts:438

What steps can reproduce the bug?

  1. Connect VS Code to a Linux host with Remote-SSH.
  2. Install/enable the Codex extension (26.721.30844) on the remote side.
  3. Open a Codex thread and let it edit files in the workspace.
  4. Open the diff as a full editor tab (not the inline sidebar diff).
  5. The tab renders blank. Run Developer: Open Webview Developer Tools and check the

Console for the error above.

What is the expected behavior?

The Codex Diff editor tab should render the diff, the same way the inline diff in the Codex sidebar does.

Additional information

Tried without success:

  • Developer: Reload Window
  • Full VS Code restart
  • Remote-SSH: Kill VS Code Server on Host + reconnect
  • View: Close All Editors before reopening

Workarounds that do work:

  • Viewing the diff inline in the Codex sidebar instead of the editor tab
  • VS Code's built-in Source Control diff / git diff

View original on GitHub ↗

5 Comments

github-actions[bot] contributor · 1 month ago

Potential duplicates detected. Please review them and close your issue if it is a duplicate.

  • #35058

Powered by Codex Action

lishiao144 · 1 month ago

Confirmed the same failure on Windows 11 x64 + VS Code 1.130.0 + Remote-SSH to Ubuntu Linux x86_64, using extension 26.721.30844.

I traced the exception to the bundled editor-diff-page-AYqiUD9X.js at the reported :1:1304 frame. In the minified EditorDiffPage component, the relevant sequence is:

let h=m,g=w(n),v=w(p),y=w(j),b=x(),...

The value y is later passed as hostConfig. Evaluating w(j) reads state that requires a thread route, but the standalone editor diff is rendered on the non-thread /diff route. That matches the thrown error exactly:

Thread context is unavailable for non-thread routes

As a temporary diagnostic hot patch, I changed only the bundled expression:

- y=w(j)
+ y=void 0

I applied this to both the local and Remote-SSH copies of the extension, reloaded VS Code, and repeatedly opened the same full-editor Codex Diff. The split diff rendered normally each time, and fresh logs no longer contained the thread-context exception. The sidebar continued to work normally.

This strongly suggests the source-level fix should avoid reading a thread-only host-config atom from the standalone /diff route. Possible fixes would be to use an optional/non-throwing context accessor, pass the required host config in the diff route state, or omit hostConfig when no thread context exists. A regression test covering the full-editor diff under Remote-SSH would be useful.

The bundle edit is only a diagnostic workaround and will be overwritten by an extension update/reinstall.

krystic · 1 month ago

Confirmed on a native Linux ARM64 environment as well, without Remote-SSH:

  • VS Code: 1.130.0 (arm64)
  • Codex extension: 26.721.41059-linux-arm64
  • OS: Ubuntu 25.10 / Linux 7.0.0-28-generic / aarch64
  • Environment: Ubuntu running locally in Parallels
  • Codex CLI /diff: works normally
  • Full-editor Codex Diff opened by the VS Code extension: always renders Oops, an error has occurred

The fatal Webview console error is:

Error: Thread context is unavailable for non-thread routes
    ...
    at R (editor-diff-page-DVdvmt2c.js:1:1304)

This is the same failure signature reported here, but it is still reproducible in the newer 26.721.41059 ARM64 build. Therefore, the issue does not appear to be specific to Remote-SSH, x86_64, or extension 26.721.30844.

I also initially investigated an earlier:

fs/readFile — No such file or directory

However, that message is not required to reproduce the Diff crash. On a later reproduction, the Diff page failed with the same thread-context exception without a preceding fs/readFile error.

The following Webview console messages also appear, but seem unrelated because the React error boundary is triggered by the thread-context exception:

  • Unrecognized feature: 'local-network-access'
  • iframe sandbox warning
  • CSP-blocked data: font

The fact that CLI /diff works against the same repository and uncommitted changes also suggests this is isolated to the extension's full-editor /diff route rather than Git state or diff generation.

gaboull · 1 month ago

Additional confirmation from VS Code 1.130.0 on Windows with WSL2 Ubuntu (Linux x86_64), with a useful regression boundary:

  • 26.715.61943: full-editor Codex Diff works
  • 26.721.30844: full-editor Codex Diff consistently renders Oops, an error has occurred
  • 26.721.41059: the same failure persists

The failure reproduced across two unrelated repositories. In both failing builds, native git diff remained valid. The Codex extension log recorded the React error boundary in the bundled editor-diff-page component (editor-diff-page-AYqiUD9X.js for 26.721.30844 and editor-diff-page-DVdvmt2c.js for 26.721.41059). Downgrading only the extension to 26.715.61943, without changing the repositories, immediately restored the Codex Diff editor.

This supports a client-side regression introduced after 26.715.61943 and still present in both 26.721.x builds.

pawelkania · 20 days ago

confirmed on ubuntu 24 and newest release of codex.