Repository navigation
Codex desktop: send_message_to_thread fails with "'sendRequest.bind' is not a function" #51790
Description
What version of the Codex App are you using (From “About Codex” dialog)?
26.1002.51308 (build 13417), read from the installed desktop application's Info.plist
What subscription do you have?
Not collected for this sanitized report
What platform is your computer?
macOS 26.4 (25E246), arm64
What issue are you seeing?
From a side conversation of an active local Codex task, all observed calls to mcp__codex_app__send_message_to_thread failed with:
'sendRequest.bind' is not a function.
Captured tool result:
{
"isError": true,
"texts": ["'sendRequest.bind' is not a function."]
}list_threads and read_thread succeeded for the same local task. The target existed and was active. No successful delivery receipt was returned, and a subsequent thread read did not show the intended message.
This prevents a side-conversation assistant from delivering an explicitly authorized follow-up to the main task.
What steps can reproduce the bug?
- Open a side conversation of an existing active local Codex task.
- Explicitly authorize the assistant to send a short follow-up message to the main task.
- Call the exposed
mcp__codex_app__send_message_to_threadtool with an existing task ID and a normal text prompt:
{
"threadId": "<existing-main-thread-id>",
"hostId": "local",
"prompt": "Please review the consumer-coverage checklist when appropriate."
}- Observe the tool error.
- Retry with
hostIdomitted or with a shorter prompt. The same error occurs. - Read the target thread to check whether the follow-up was delivered; no intended message was observed.
Real session and thread IDs are omitted from this public report.
What is the expected behavior?
The follow-up should be delivered or queued in the specified existing task, and the tool should return an accurate success receipt.
Additional information
Observed on 2026-10-08. Installed codex-app-tools plugin cache version: 0.1.5.
The internal root cause is unknown; this report establishes the observed repeatable execution failure. No desktop restart, permission changes, plugin changes, project-code changes, or task-state changes were made to work around it.
This report excludes real thread IDs, project code, business data, credentials, and full conversation logs. A public issue search for repo:openai/codex "sendRequest.bind" returned no results before submission.
Activity
kkc84719-byte commentedon Oct 8, 2026
Additional report with update-regression evidence and a likely failing call site.
Environment
Observed behavior
A development side chat can find/read the main local conversation, but sending an authorized follow-up to that conversation fails. The user's screenshot reports:
Restarting the desktop client did not resolve the reported failure. Desktop logs separately confirm repeated
send_message_to_threadcalls returningsuccess=false, while the target'sthread/turns/listrequest succeeds immediately beforehand.Update comparison
On this machine, logs from the previous client process (build 13232) contain successful
send_message_to_threadcalls. After updating to build 13536, the logs contain repeated failed calls through the same tool. This is observational regression evidence, not a controlled clean-install bisect.Read-only inspection of the installed client bundle
In
webview/assets/app-initial-61c077dcc1af.js, the side-chat parent-resolution functiona4s:fp(e, a).t.listThreadTurns(...).The imported
fpresolves tojIinapp-shared-6c00c2afcf84.js, which returns a host RPC proxy (i.forHost(t)orclient.rpc). The item-reading helper resolves toXz, which expects a callable request function and invokesthread/items/list.The reported error and the successful first-turn request followed by immediate send failure are consistent with
.bindbeing unavailable on that RPC proxy'ssendRequestmember. Please check whether this path retained a legacy client-method assumption after the RPC migration, and use the supported RPC item/history-reading interface. This diagnosis is an inference from the shipped bundle and logs; no patched client was run.Expected behavior
A side chat should deliver or queue the authorized follow-up in its main conversation and return an accurate delivery receipt.
Application signature verification passes. No client package, permission settings, or project code was modified during this investigation. Real conversation IDs, local usernames/paths, business content, full logs, and the original screenshot are omitted from this public comment.
maxitaaaa commentedon Oct 8, 2026
I am also seeing this failure on Windows when a side chat tries to send an authorized status report to its main chat.
Environment:
The task list could be read successfully, but both attempts to send a message to the main chat failed with the same reported error: the implementation tried to use sendRequest.bind(), but sendRequest was not a callable function. This matches the non-function error tracked in this issue.
Read-only inspection of the desktop logs independently found two send_message_to_thread calls with success=false, at 08:39:01.315 UTC and 08:39:36.001 UTC. The exact exception wording above comes from the side chat's report; those desktop log entries confirm the failed calls but do not include the exception text.
The spreadsheet update and website update had already completed successfully. Only delivery of the completion report to the main chat was blocked. This distinction matters: the reporting failure should not cause the completed work to be repeated.
Expected behavior: the side chat should deliver or queue the report in the existing main chat and return an accurate delivery receipt.
I have not established why sendRequest has the wrong type, or whether an app update caused it. I did not issue additional test messages during this read-only check. Please include the Windows side-chat-to-main-chat path when investigating this issue.
This comment excludes private messages, real thread IDs, project names and paths, workbook contents, credentials, screenshots, and full logs. No UI automation or changes to the app package, task state, or queue were made for this report.
GGQJavakf commentedon Oct 9, 2026
Additional Windows reproduction, observed on 2026-10-09 (UTC+8).
Environment
codex-app-toolsplugin cache version: 0.1.5.Observed behavior
From a side conversation, the user explicitly authorized sending follow-up instructions to existing local Codex tasks. Calls to
mcp__codex_app__send_message_to_threadfailed across five destinations with the same error:No successful delivery receipt was returned, and reading the destination threads did not show the intended new prompts.
read_threadandwait_threadsworked.The error persisted when:
hostId: "local".hostId.Reproduction
send_message_to_threadwith its task ID and a normal text prompt.Read-only investigation
In the installed Windows bundle,
webview/assets/app-initial-25361a10f2bf.js, the cross-thread send path resolves the side conversation's parent. Itsa4shelper falls back to reading the parent's opening turn/items and calls:The imported accessor
fpresolves throughlXttojIinapp-shared-40678a67f0e3.js. This accessor returns a host RPC interface/proxy, including paths returningi.forHost(t)orclient.rpc.This is consistent with the RPC-interface mismatch discussed above. It is a source-based diagnostic inference, not a confirmed runtime stack trace or a version bisect.
Workaround and expected behavior
The bundled official CLI's
codex exec resume <original-thread-id> - --json, run in each task's original working directory with the prompt on stdin, successfully continued the same existing sessions. Desktop thread reads confirmed the new prompts. Already-running tasks were allowed to finish before CLI resumption to avoid simultaneous execution.The native desktop sending failure remains unresolved. Valid messages should be delivered/queued with an accurate receipt; unavailable destinations should produce an actionable policy/state error rather than this internal JavaScript exception.
No desktop package, credentials, permissions, or global configuration were modified. This public report excludes real thread IDs, private prompts, repository details, credentials, and full session logs.
aidawilliam41-ops commentedon Oct 9, 2026
Further Windows diagnostics, adding RPC property-resolution evidence to the call-site analyses above.
Environment: Observed 2026-10-09 UTC on Windows; running AppX package
OpenAI.Codex_26.1002.7124.0_x64__2p2nqsd0c76g0. This identifies the package, not every internal component version.Observed: Three
send_message_to_threadcalls returnedisError: truewith'sendRequest.bind' is not a function.BothhostId: "local"and omission failed. Desktop logs independently show renderer-handler execution, successfulthread/turns/list, thensuccess=falseafter 28 ms, 28 ms, and 160 ms. Those log entries contain no exception stack.Additional static evidence: In
app-shared-40678a67f0e3.js:DFt.getextends an RPC path when a string property is accessed.uFtpermits only own properties when traversing a function (Object.hasOwn), excluding inheritedFunction.prototype.bind.OFt.callrejects a non-callable resolved value using the exact error template'<path>' is not a function.On this proxy path, the previously identified
t.sendRequest.bind(t)call inapp-initial-25361a10f2bf.jswould invoke the remote pathsendRequest.bind, explaining the precise error. The expected RPC target also definessendRequest, and another bundled call usesjI(...).sendRequest('thread/items/list', ...)directly.The live target selected by
jI, its value/type, and the exception stack were not captured; this remains a static explanation consistent with the failure. Earlier delivery remains unconfirmed.A source correction should avoid
.bindon the RPC stub and use its supported item-reading interface. A forwarding function is an untested candidate. Verification should require tool success and exactly one matching harmless message in the destination.Bundle identity:
app.asarSHA-25676FE7078248C00E4E03DD2177A4275EC9CE158A9DD43452A4F0427D39A4ED012.sysoft commentedon Oct 9, 2026
I'm also encountering this on macOS with Codex 26.1007.21159 (build 20052, production channel). The app updater reports no available update.
From a side conversation,
list_threadssuccessfully found the active main thread, butsend_message_to_threadfailed twice—both withhostId: "local"and withhostIdomitted—with:Both calls returned
isError: true, with no successful delivery confirmation. Observed on October 9, 2026.rasokiwayami commentedon Oct 9, 2026
Adding an executable regression and a forwarding-callback candidate to the
call-site and RPC-path analyses above.
Environment and observed failure
'sendRequest.bind' is not a function.on October 9, 2026.thread/turns/listsucceeding immediatelybefore each failed send; elapsed time from renderer execution start to failure
was 5 ms and 4 ms. Those log records do not contain an exception stack.
Source-level candidate
In this build,
Mocinapp-initial-c468e3fd7f91.jspassesr.sendRequest.bind(r)to the opening-item pagination helper. Whenris thehost RPC stub,
.bindextends the remote property path instead of binding alocal JavaScript method. The shared bundle's
pPtfunction permits only ownproperties while traversing a function, so inherited
Function.prototype.binddoes not resolve. Its caller rejects the non-callable
sendRequest.bindpath.The narrow candidate is a normal forwarding callback at this call site:
The production source should use the request callback's existing type/contextual
typing. These are minified symbols identifying the shipped call site, not a
patch against a file in the public repository. This candidate leaves RPC
property-access restrictions and message-authorization checks unchanged.
Verification performed
reported RPC-path error; the forwarding adapter passed all 4.
Moc, item-page helperVV,and property resolver
pPtfunctions in isolation. The unmodified call sitereproduces the exact error. Replacing only its callback expression passes
checks for compaction skipping and pagination, request parameters/timeouts,
rejection propagation without retry, repeated-cursor rejection, empty parent
history, and the cached opening-context path.
transport were modeled in process; all IDs, data and messages were synthetic.
This supports the narrow callback correction, but it is not an end-to-end
desktop fix verification. A patched app was not run, and the original live
exception stack was not captured. Maintainers should still verify that the
authorized side-to-parent send yields one matching message and an accurate
delivery receipt, including the paginated-history fallback.
For identifying the tested build, the local checks required these asset hashes:
The portable regression below is original test code, not a copy of the app
implementation. It models the relevant RPC property-path behavior and requires
no app installation or account. Inspection and test preparation were assisted
by Codex. No conversation IDs, private prompts, local user paths, credentials,
or full logs are included.
Portable regression: save as regression.test.mjs and run node --test regression.test.mjs
rasokiwayami commentedon Oct 9, 2026
Verified local workaround:
codex queueusing the bundled CLI.Following up on my earlier regression analysis: on October 9, 2026, I delivered
a harmless test message to the same existing parent conversation through the
CLI while leaving the desktop app unmodified.
Tested environment: macOS 26.6.2, desktop 26.1007.21159 / build 20052,
bundled CLI 0.162.0-alpha.17.2. On this installation the command was:
Use the CLI bundled with the app; its installation path may differ.
Verification went beyond the command's success response:
destination and complete test text. The parent was still processing its
existing work at that point.
userMessageinthe parent's conversation, and the corresponding queue item was gone.
This confirms delivery to the parent history for the tested message. It does
not establish that the parent performed any requested work, and it does not fix
the original desktop
send_message_to_threadcall path. This is queued delivery,not a guarantee of immediate steering.
I used the ordinary command without
--remote. An earlier explicit--remote unix://attempt failed before sending because this installation hadno default shared-server control socket; the ordinary command then succeeded.
I did not run
exec resume, interrupt the parent, patch or re-sign the app,restart it, change configuration/permissions, or write directly to its database
for this workaround. Only the CLI's normal queue operation wrote the message.
This is one verified macOS case; Windows and other versions remain untested by
me. Real conversation IDs and private message contents are omitted.
chenzilin100 commentedon Oct 10, 2026
Still reproducible on Windows x64, Codex Desktop 26.1007.2314.0, observed on October 10, 2026 (UTC+8). Adding a comparison between side-conversation and ordinary cross-thread sends in the same running Desktop process.
sendRequest.bind is not a functionerror. Desktop logs showsend_message_to_threadrenderer execution followed bysuccess=falseafter 43 ms, 48 ms, and 21 ms. The target'sthread/turns/listrequest succeeded immediately before each failure. The exact error wording was reported by the user from the side conversation; these log entries contain no exception stack.mcp__codex_app__send_message_to_threadtool succeeded. The destination was idle. No model or reasoning override was supplied. The tool returned the intended destination ID, the destination replied with the unique test marker, a subsequentread_threadreturned that reply, and the same Desktop process loggedsuccess=true.A read-only check of this Windows bundle found the corresponding call site in
webview/assets/app-initial-b8e1c8014bb4.js. In the minifiedjocfunction, the call toMocis conditional on the source's opening context havingsideConversation === true, together with parent and host checks. Ordinary source conversations skip that branch. InMoc, the opening-history fallback still passesr.sendRequest.bind(r)toxHe.The successful ordinary send and the conditional call site support narrowing this reproduction to the side-conversation path. The RPC proxy internals and a live exception stack were not independently captured in this Windows check. No client patch, restart, configuration change, or direct database edit was used.
upeartaker commentedon Oct 10, 2026
Additional reproduction and read-only RPC diagnosis on macOS.
Environment
codex-app-toolscache version: 0.1.6.Observed behavior
From a side conversation, explicitly authorized
send_message_to_threadcalls to the existing active parent failed with the exact tool result:The same side conversation could read the parent using
read_thread. Ordinary conversations were successfully sending messages in the same running desktop process. Four failed send responses were found in this session's desktop logs; the parentthread/turns/listrequest succeeded immediately before each failure. For example, the relevant sanitized fields from one attempt were:Additional code-level evidence
Read-only inspection of this installed bundle found:
webview/assets/app-initial-c468e3fd7f91.js,jocconditionally enters the parent-resolution path forsideConversation === true. TheMocopening-history fallback callsxHe(r.sendRequest.bind(r), ...)afterlistThreadTurns.rresolves toQLinapp-shared-2f2228189a8d.js, returning a host RPC proxy (forHost(...)/client.rpc). The exposed facade does have asendRequestgetter..sendRequest.bindconstructs the remote path["sendRequest", "bind"].pPtpermits only own properties when traversing a function.Function.prototype.bindis inherited, so it resolves to undefined.APt.callthen emits the exact error template'<path>' is not a function., which matches the observed message.This provides a specific explanation for the error wording beyond the suspected call site:
.bindis being resolved over RPC instead of applied as a local function operation. A local forwarding callback such as(...args) => r.sendRequest(...args)appears to be the appropriate direction for a fix, subject to maintainers' type/lifetime checks and regression tests for side conversations with paginated/unloaded opening history.The diagnosis is based on observed tool failures, desktop logs, and static inspection of the installed bundle; no live exception stack was captured and no patch was applied or validated. The app was not restarted, re-signed, or modified, and no direct database edits were made. Real thread IDs, usernames, project paths, credentials, and conversation contents are omitted.
sysoft commentedon Oct 10, 2026
macOS candidate hotfix: minimal copy-and-patch script
Building on the RPC-path analysis and forwarding-callback proposal above, I prepared a small macOS patch script and verified that it produces an internally consistent, ad-hoc-signed application copy.
This is an experimental local hotfix, not a confirmed end-to-end fix or an official release. The patched app has not been launched, and real side-conversation message delivery through it has not been verified.
The one-call-site change is:
This avoids resolving
sendRequest.bindas a remote RPC property path. The local callback forwards the arguments throughr.sendRequest(...args), retaining its receiver. It does not change destination checks, authorization rules, or the downstream send operation.Verified locally: macOS desktop 26.1007.21159 / build 20052.
ElectronAsarIntegrity.codesign --verify --deep --strictpassed for the generated copy and the untouched original.Usage
Requires Python 3, macOS
ditto, andcodesign. Save the script aspatch_macos.py, then run:The default output is
~/Applications/ChatGPT-Sidechat-Fix.app. It preserves the original app and does not change user data, launch either app, or send a message. Quit the original before testing the copy; do not run both against the same profile simultaneously. Return to the original to roll back.There is no version or file-hash allowlist. It searches embedded JavaScript for the exact faulty call above and only patches a unique match. This does not make it universal: builds with renamed minified symbols or different packaging will stop without patching. The script recalculates SHA-256 ASAR integrity metadata because Electron needs it; those hashes are not compatibility fingerprints. Avoid running it while the source app is being updated.
Signing caveat: modifying the app invalidates its original signature, so the copy is locally ad-hoc signed. It is no longer OpenAI-signed/notarized; launch, Keychain access, sign-in, system permissions, or updates may be affected. Passing
codesignverification does not establish runtime compatibility. The script does not disable Gatekeeper or Electron integrity enforcement. Windows/Linux are not implemented or tested by this script.Complete 86-line macOS script (Python standard library only; messages are in Chinese)
The existing bundled CLI queue workaround remains an alternative for keeping the official app unmodified. For the actual product fix, the local forwarding callback should be integrated and tested in the desktop source rather than relying on users patching packaged bundles.
cxc20251020-oss commentedon Oct 10, 2026
Additional Windows verification on 2026-10-11 (UTC+8), building on the forwarding-callback candidate already discussed above.
Environment
codex-app-toolscache 0.1.6.'sendRequest.bind' is not a function.; the destination read did not contain the intended message.Offline candidate and checks
The installed
webview/assets/app-initial-b8e1c8014bb4.jscontains onesendRequest.bindoccurrence, inMoc. An offline copy changes only this callback:The installed
Moc, item-page helpernB, and RPC property resolveraFtwere extracted and evaluated in isolation. Transport, scope and opening-context parsing were synthetic test doubles; no live messages or credentials were used in these tests.14 local tests passed, 0 failed, including:
binderror with the original function, before any item request.The complete candidate asset also passed
node --check. Installed assets were re-read afterward and remained unchanged.Source SHA-256:
app-initial-b8e1c8014bb4.js:799331dde54905c4df5e360f23a9621141759e2c0acb230aeab909f9904b646fapp-shared-737655e1fb23.js:a1daa891e89a395b8db399ff6eaa365f12a86880c3d8cf891caf4ccbcb9eebf5This is not a patched-desktop end-to-end result. The Windows-protected installed package was not modified; no permissions were changed and the client was not restarted. A live exception stack was not captured. Maintainers still need to verify native side-to-parent delivery and its receipt in a patched build.
Separately, the CLI queue workaround is now verified on this Windows installation. The app's CLI 0.162.0-alpha.17.2 accepted one harmless message for the existing idle parent using
codex queue --thread ... --message .... Desktopread_threadthen showed the exact test text as a user message and the parent's matching acknowledgment; the turn completed. This used neither--remotenorexec resume, and does not repair the native tool. Real IDs and private message contents are omitted.80533 commentedon Oct 11, 2026
Additional macOS reproduction observed on October 11, 2026.
Environment (verified from the installed app and local plugin cache):
From a side conversation, the user explicitly authorized sending a completion handover to its existing local main conversation. Two calls to
mcp__codex_app__send_message_to_threadfailed with the exact tool result:Both returned
isError: true. SupplyinghostId: "local"and omittinghostIdproduced the same error. The main conversation could be listed/read successfully. No successful delivery receipt was returned, so this report does not claim that the handover was delivered.Read-only desktop-log inspection confirms that each failed send immediately followed a successful
thread/turns/listresponse. Sanitized example:A second attempt shows the same sequence. The exact exception comes from the tool response; these log records contain no exception stack.
The user reports that a previous desktop restart did not resolve the problem. No restart, patched app, permission/configuration change, or additional test message was performed for this report.
Expected: deliver or queue the explicitly authorized side-to-main message and return an accurate receipt, instead of an internal JavaScript exception.
This report was prepared with Codex assistance and posted at the user's request. Real thread IDs, business content, local paths/usernames, credentials, screenshots, and full logs are omitted.
drewmad commentedon Oct 12, 2026
Also seeing this on macOS.
send_message_to_threadfails with "'sendRequest.bind' is not a function" and the message isn't delivered.list_threads,read_threadandwait_threadswork.maxitaaaa commentedon Oct 14, 2026
I retested this on Windows on October 14, 2026, after updating to installed Codex Desktop package 26.1007.9446.0 (verified from Windows package metadata, not the About dialog). The side-chat-to-main-chat failure is still reproducible.
Side chat -> its main chat
isError: truewith the same exact error:Ordinary chat -> another ordinary chat, tested shortly beforehand
send_message_to_threadtool returned success for a separate, unarchived local conversation.A read-only inspection of the current installed bundle also found one
sendRequest.bindoccurrence inwebview/assets/app-initial-102e45562729.js. This static observation is consistent with the reported failure; it is not a claim that a candidate patch has been validated.Please verify the side-conversation parent-resolution path, including its opening-history fallback, in a supported Windows release. A successful ordinary cross-chat send does not verify that path. Please provide a fix version or a supported workaround.
The communication test did not modify business files or patch the installed application. This comment contains no real conversation IDs, private prompts, project paths, credentials, raw logs, or screenshots. The original screenshot was omitted because it includes non-English UI text.
eric-1219 commentedon Oct 14, 2026
Additional Windows reproduction and isolated candidate-fix verification on 2026-10-15 (UTC+08:00).
Environment
up_to_dateduring diagnosis.codex-app-tools: 0.1.6.Observed behavior
An explicitly authorized side-conversation message to its existing active local parent fails with:
The tool returns
isError: true. Both supplyinghostId: "local"and omitting it failed. Reading the main thread works. No successful delivery receipt was returned. This is a side-to-parent failure, not a claim that all cross-thread messaging fails.Read-only local logs show
thread/turns/listsucceeding immediately before the send tool reports failure at 2026-10-14 16:16:16 UTC and 16:16:43 UTC. The exact exception is from the tool result; those log entries do not provide a live exception stack.Installed-code observation
In
webview/assets/app-initial-102e45562729.js, the side-conversation path usesNocto load the parent's opening context. With an unloadedopeningTurn, it calls:The imported client getter resolves to
KIin the shared asset and returns an RPC proxy. The observed failure is consistent with resolvingsendRequest.bindas an unsupported RPC path rather than local Function.bind.This independently supports the forwarding-callback candidate discussed above:
Isolated verification
The installed
Nocand actual item-page helpernBwere extracted read-only and executed with an isolated RPC mock; transport/scope/opening-context fixtures were synthetic.c59b2a0be6c13496b30ebda167925cdccab26799cae350c62d2b37afe3589b57.Limits: This is not patched-app end-to-end verification. No installed application files, permissions, main-task state, or project files were modified, and the app was not restarted. Please validate native side-to-parent delivery and its success receipt in a supported fix build.
Prepared with Codex assistance and posted at the user's request. Email, real thread IDs, private prompts, credentials, full logs, and personal local paths are excluded.
youngandboor commentedon Oct 15, 2026
Additional macOS reproduction on 2026-10-15, with read-only inspection of the installed desktop bundle.
Environment
Observed behavior
The main conversation was discoverable through
list_threads. Callingsend_message_to_threadwith its ID,hostId: "local", and an ordinary text prompt returnedisError: true:Sanitized desktop-log sequence:
No successful delivery receipt was returned. The exception text comes from the tool result; these desktop log entries do not contain an exception stack.
Installed-code observation
In
webview/assets/app-initial-6350d04672d0.js, the side-conversation routing functionjoccallsMocto resolve the parent's opening context. WhenopeningTurnis null,Mocfetches the first turn, then invokes:The client getter
jgresolves through the shared export toKI, which returns a host RPC proxy (forHost(...)orclient.rpc). This is consistent with attempting to resolve.bindthrough the RPC proxy instead of binding a local JavaScript function. The problematic call precedes the message dispatch step.Please validate the supported RPC history-reading interface or a normal forwarding callback, and add a regression covering side-to-parent delivery when the parent's opening history is not already loaded. No patched-client verification was performed here.
Earlier success and limits
Logs from this machine show a successful
send_message_to_threadcall on 2026-10-08 under build 11645. That earlier call's conversation relationship and history state were not established, so this is NOT a version bisect and does not prove which update introduced the bug. Ordinary cross-thread success should not be treated as coverage of the side-parent opening-history fallback.No application files, permissions, configuration, or project code were modified for this investigation. This report was prepared with Codex assistance and posted at the user's request. It excludes actual conversation IDs, private prompts, business data, credentials, local usernames/paths, and full logs.
WantoChange commentedon Oct 16, 2026
Additional macOS confirmation: this is still reproducible on Codex desktop 26.1007.71326 (build 20398), observed on 2026-10-16 UTC (2026-10-15 PDT).
Environment and trigger
codex-app-tools0.1.6. The cached and app-bundledserver.mjsfiles have identical SHA-256 hashes.Observed behavior
Two actual calls failed with exactly:
One call supplied
hostId: "local"; the other omittedhostId. The destination could be listed/read normally. Each failed send immediately followed a successfulthread/turns/listresponse in the desktop log, then the tool returnedsuccess=false. A subsequent destination read did not show the forwarded message. No further live messages were sent for diagnosis.Installed-code evidence in this build
In
webview/assets/app-initial-1ab6fbe93c4f.js, the origin-check helperNocobtains an RPC proxy throughDgand passesr.sendRequest.bind(r)to the thread-item reading helper when opening history is unloaded.In
webview/assets/app-shared-8340f229c2b3.js, the proxy appends chained property accesses to the remote method path. The resolver permits only own properties when traversing a function, excluding inheritedFunction.prototype.bind. The call therefore resolves the remote pathsendRequest.bindand constructs the exact error reported above. This supports the previously discussed diagnosis of an RPC/local-function mismatch in the side-conversation origin check, before message dispatch.Isolated verification
The shipped pure property resolver and Proxy traps were extracted into memory and exercised with local test doubles, without network requests or real message sends:
rpc.sendRequest.bind(rpc)produced the pathsendRequest.bindand reproduced the exact error.(...args) => rpc.sendRequest(...args)produced the pathsendRequest; the local test-double call succeeded.Please include this macOS build in regression coverage for the paginated/unloaded opening-history fallback. The expected result is delivery or queuing of the authorized message with an accurate receipt.
Limits and privacy: no live exception stack was captured, the installed app was not patched or restarted, and a patched-app end-to-end send was not tested. The forwarding closure has only been verified in isolation. This report was prepared with Codex assistance and posted at the user's request. It excludes conversation transcripts, raw logs, private thread IDs, account details, credentials, server addresses, and business repository information.
joy648759-ux commentedon Oct 17, 2026
补充 Windows 当前版本复现及实际安装包 RPC 的离线验证(2026-10-17)。此反馈经用户授权,由 Codex 协助整理。
环境:Windows x64;应用更新器报告桌面版本
26.1013.31256、build20586、prod、up_to_date。Windows 安装包版本为26.1013.3656.0,这是另一版本字段。实际现象:临时侧聊调用
send_message_to_thread,显示'sendRequest.bind' is not a function.。本地桌面日志在2026-10-17T00:54:19.936Z和00:57:36.068Z记录两次发送失败,前面均有成功的thread/turns/list。这些日志没有异常栈。读取失败源聊天返回ephemeral threads do not support thread/turns/list;普通持久主聊天之间另有发送成功记录,不能将普通发送成功视为侧聊路径已修复。当前安装包证据:
webview/assets/app-initial-df84a35d942d.js:Vh返回 AppServerManager RPC stub;Xeu在消息发送前核对 sideConversation/父聊天关系,必要时调用Zeu。Zeu的 openingTurn 未加载、分页历史分支,在成功调用listThreadTurns后,将r.sendRequest.bind(r)传给条目读取 helperix。webview/assets/worker-3fe306248590.js:RPC proxy 将字符串属性链解析为远程方法路径;函数的继承属性不在可调用的自有属性内。因此.sendRequest.bind被解析为远程路径并产生相同 TypeError。离线验证比静态推断多做了一步:只读提取本机实际安装的 RPC 实现,以及原始
ix、Zeu,在独立 Node VM 中运行。原版Zeu的未加载 opening-history 分支确定性复现完全相同的错误。候选只在该函数中替换一处回调表达式:11 项检查通过、0 失败,并由独立复核者再次实际运行通过。包括 3 项 RPC 检查和 8 项实际函数分支检查:原错误复现、参数/返回值与异常传递、opening history 已加载/未加载、空历史、分页及 compaction 过滤、请求参数、重复 cursor 保护。此计数不是完整应用集成测试。
资产 SHA-256,供维护者识别本次构建:
验证边界:主机选择、输入来源解析及部分上下文是测试接缝;未执行完整 Xeu、真实消息发送、真实侧聊来源解析或非分页历史加载分支;没有捕获原线上异常栈。未修改、重新签名或重启已安装应用,未修改业务数据库。候选离线通过不等于已部署修复。
请在受支持的 Windows 修复版本中核验:侧聊向已有父聊天交接,父聊天 opening history 已加载及未加载/分页两种情况;保留原有祖先关系与权限检查;正确传递读取异常;只产生一次目标消息并返回准确回执。也请告知包含修复的版本或受支持的临时解决方法。
此评论不包含客户内容、真实聊天 ID、账号信息、凭据、私人路径、原始截图或完整日志。
补充核查(2026-10-17 09:01 UTC):官方 prod 新更新包仍含相同缺陷;以下为未安装新版的离线验证。
官方 production Windows 更新源此时返回包版本
26.1013.4894.0、releaseVersion26.1013.40934。只读提取该官方 x64 MSIX 的 AppxManifest 和 app.asar,包内 package.json 确认为桌面版本26.1013.40934、build20770、prod。来源为应用内配置的官方地址:新包的
webview/assets/app-initial-5851df3f6cb1.js中,Zeu的 opening-history fallback 仍将r.sendRequest.bind(r)传入ix。本次从新包重新提取实际Zeu、ix和 RPC 实现,在隔离 Node VM 中运行,原函数仍确定性抛出'sendRequest.bind' is not a function.。转发回调候选仍只改测试副本中的一处表达式,11 项离线检查通过、0 失败。未将离线通过当成实际应用修复。新包资产 SHA-256:
该 RPC worker 与前述已安装版本的 SHA-256 完全相同。测试接缝和边界同前述说明;本次没有安装或运行新版桌面应用,没有新增真实消息测试,没有修改现有应用、权限或业务数据。此结果证明新包中同一离线故障仍在,不是新版实际侧聊发送的现场测试。请提供包含原生侧聊交接修复的受支持版本,并在 opening history 未加载/分页的真实场景验证准确且仅一次送达。
Andrew1957 commentedon Oct 18, 2026
Additional Windows reproduction on 2026-10-18 (UTC+08:00), posted at the user’s request with Codex assistance.
Environment
OpenAI.Codex_26.1013.3656.0.20586, commitf07f286327f3c9ef2b2f799b64b0393fdc1bdeed.Observed failure
A side conversation forwarding an explicitly authorized message to its existing active local main conversation repeatedly returns
'sendRequest.bind' is not a function.fromsend_message_to_thread. Both supplyinghostId: "local"and omitting it fail.list_threadssucceeds. No successful delivery receipt is returned.Read-only desktop-log correlation:
The exact exception comes from the tool results; these log lines do not contain a live exception stack.
Shipped-code observation
In
webview/assets/app-initial-df84a35d942d.js,Xeu()resolves side-chat ancestry throughZeu(). In the unloaded opening-history fallback,Zeu()callslistThreadTurns(...)and then passesr.sendRequest.bind(r)toix(...), withr = Vh(...)returning a host RPC proxy. The proxy inapp-shared-2f18b1632f37.jsmaps string property chains to remote paths. This independently matches the RPC/local-function mismatch already discussed here. Please retain regression coverage for unloaded/paginated opening history, not only ordinary cross-chat delivery.Limits
This report adds actual failures on the above installed Windows build plus read-only bundle inspection. It does not claim a live stack trace, a controlled version bisect, an isolated patch test, or patched-app end-to-end verification. No application files, permissions, configuration, or business code were changed. A forwarding callback or supported RPC item-reading interface remains a candidate for maintainers to validate.
Expected: deliver or queue the authorized message exactly once and return an accurate receipt. This public comment excludes real thread IDs, private prompts, account details, local personal paths, server addresses, credentials, screenshots, and full logs.
kexu818 commentedon Oct 18, 2026
Additional macOS evidence on October 18, 2026.
up_to_datefor its configured channel.'sendRequest.bind' is not a function.Desktop logs show successfulthread/turns/listimmediately before both failed tool responses. No live exception stack was captured.Read-only inspection of this build identifies the same path described above: the cross-thread routing function
Xeucan call the opening-context resolverZeu. For an unloaded opening turn,Zeuobtains an AppServerManager RPC proxy viaVh, lists the first turn, then passesr.sendRequest.bind(r)to the item readerix.The shipped RPC property resolver permits only own properties on functions; inherited
Function.prototype.binddoes not resolve. Its call handler produces the reported error for the remote pathsendRequest.bind.A local isolated fixture using the installed
Zeuand relevant RPC traversal/call code reproduces the exact error. Replacing only the callback expression with(...args) => r.sendRequest(...args)passes that fixture. The transport and item-read bridge are synthetic; this is not a patched-desktop end-to-end test.A separate ordinary persistent chat successfully delivered the authorized message through the same native tool. Reading the destination confirmed the complete payload once. This does not verify the failing side-chat opening-history branch or prove the bug has been fixed.
Please provide a supported desktop fix release, preserving the existing source/ancestry and authorization checks. Regression coverage should include unloaded/paginated opening history and accurate exactly-once delivery receipts.
No installed app, permissions, global configuration, or conversation database was modified. No restart or experimental signed application copy was used. This report omits private conversation IDs, messages, account details, local paths and raw logs.
LBatsoft commentedon Oct 19, 2026
Additional macOS reproduction and offline candidate-fix validation, October 19, 2026.
Environment and observed failure
26.1007.71326, build20398, macOS arm64.codex-app-toolsversion0.1.6.'sendRequest.bind' is not a function.read_threadsucceeded. Desktop logs show a successfulthread/turns/listresponse immediately before each failed send response. No live exception stack was captured.Installed-build evidence and candidate change
In
webview/assets/app-initial-1ab6fbe93c4f.js, the side-chat opening-history resolverNocfirst obtains a host RPC stub, then useslistThreadTurnsto find the opening turn. Its unloaded/paginated-history branch passesr.sendRequest.bind(r)to the item readerCHe(exported fromnBinapp-shared-8340f229c2b3.js).The actual property traversal function
aFtin that shared asset excludes inherited function properties. Consequently, attempting.bindon the remote function stub addresses the remote pathsendRequest.bind, rather than invoking localFunction.prototype.bind.Candidate change, confined to this callback expression:
Please keep the existing source/ancestry checks and RPC own-property restrictions. This proposal does not broaden RPC access to inherited properties.
Offline verification
A local Node VM fixture reads, without modifying, the installed ASAR and evaluates its actual
Noc,nB, andaFtfunctions. Only the candidate resolver's callback is replaced in memory. The original deterministically reproduces the exact reported error. Twelve checks pass:The RPC transport, local value-type classifier, host selection, envelope decoder and timeout constant are test seams. The fixture does not execute the complete send/routing path, real envelope parsing, non-paginated history loading or a patched desktop application. This is candidate-fix evidence, not an end-to-end fix claim.
Asset SHA-256:
Separately, the application's bundled
codex queue --thread <existing-thread-id> --message <text>successfully queued the authorized message. Reading the target confirmed the complete message and a new active processing turn. This verifies a workaround, not the failing desktop branch.Please validate the callback change in the maintained desktop source, including loaded and unloaded/paginated opening history, ancestry checks, propagated read failures, and exactly one target message with an accurate receipt. The public repository's contribution policy currently excludes external PRs, and the affected desktop module was not found in the public tree, so this is supplied as analysis for the existing issue.
No installed application, permissions or global configuration was modified, and conversation storage was not edited directly. This report omits real chat IDs, private prompts, personal paths, account details, credentials and raw logs.
luziyi123448-gif commentedon Oct 20, 2026
Confirming this on Windows again on 2026-10-21 (UTC+08:00). This is additional evidence for the existing issue, not a separate bug or a claim of a deployed fix.
10.0.26100.OpenAI.Codex_26.1013.4894.0_x64, established from the running executable path; this is the package version, not an About-dialog version.send_message_to_threadcalls to an existing local main conversation failed with'sendRequest.bind' is not a function.One specifiedhostId: "local"; the other omitted it.read_threadfor the destination succeeded. Neither send returned a successful delivery receipt.Read-only inspection of this package finds the same previously reported path in
webview/assets/app-initial-5851df3f6cb1.js:Xeu()can invokeZeu()while resolving side-conversation ancestry. When the opening turn is unloaded,Zeu()obtains an RPC stub throughVh(), callslistThreadTurns(), then passesr.sendRequest.bind(r)to the item readerix().I also ran an isolated in-memory test using this installed package's actual
Zeu()and RPC implementation fromapp-shared-bbfeca5e5737.js, with synthetic host data and a mocked item-reader seam:'sendRequest.bind' is not a function.; the fake target recordedlistThreadTurnsbut no item requestr.sendRequest.bind(r)with(...args) => r.sendRequest(...args)in memorythread/items/listThis agrees with the existing diagnosis: the RPC proxy treats
sendRequest.bindas a remote property path, not localFunction.prototype.bind. The candidate change should preserve the existing RPC own-property restrictions and ancestry/authorization checks.The offline test does not exercise the complete live send path, the real item-reader/ancestry-envelope parser, or a patched desktop application. No live exception stack was obtained. The installed app, configuration, permissions, and conversation storage were not modified, and no additional live test messages were sent during diagnosis.
Please include unloaded/paginated opening history in regression coverage for the supported desktop fix. Private conversation IDs, prompts, personal filesystem paths, project data, credentials, and raw session logs are omitted. Posted with Codex assistance at the user's explicit request.
Taurusxw commentedon Oct 21, 2026
Additional confirmation on Windows x64, observed October 21, 2026.
Environment
26.1013.40934, build20770.26.1013.4894.0.Observed failure
From a side conversation, explicitly authorized calls to
mcp__codex_app__send_message_to_threadtargeting the existing main conversation repeatedly return:The failure occurs both with
hostId: "local"and withhostIdomitted. Neither call returned a successful delivery receipt. Thread listing and status reads work; desktop logs show a successfulthread/turns/listrequest immediately before the failed send response.Installed-code evidence and isolated validation
In
webview/assets/app-initial-5851df3f6cb1.js,Xeuinvokes the ancestry resolverZeu. Its unloaded, paginated opening-history branch obtains an RPC proxy throughVh, lists the first turn, and passesr.sendRequest.bind(r)to the item readerix. This matches the RPC property-path problem already described in this issue.An isolated fixture executing the extracted installed resolver with a simulated RPC proxy reproduces the exact error. Replacing only that callback expression with
(...args) => r.sendRequest(...args)passes eight checks covering the original failure, corrected request forwarding, cached context, ordinary opening messages, compaction pagination, delegation in tool output, empty history, and repeated-cursor protection.The fixture uses synthetic data and does not exercise the complete live send path. No candidate patch was installed or executed in the desktop application. No clean-install comparison was performed.
Expected behavior: an authorized side conversation should deliver or queue the message and return an accurate receipt. Please include this Windows build and unloaded/paginated opening history in regression coverage, preserving the existing ancestry checks and RPC property restrictions.
cain473-cmd commentedon Oct 21, 2026
Confirmed on Windows on 2026-10-21. This is additional evidence for the same side-conversation-to-parent delivery failure, including an idle parent.
Environment
check_app_update: version 26.1013.40934, build 20770, channel prod.codex-app-toolscached plugin version: 0.1.6.Reproduction / observed behavior
mcp__codex_app__send_message_to_threadwith an existing parent ID and a normal text prompt.isError: trueand the exact message:hostId, changing prompt length, and navigating to the parent before retrying did not resolve the observed error.list_threads,read_thread, and navigation work. A bounded read after failed sends still showed the prior completed turn and an idle parent, with no new delivery receipt.The report concerns execution failures after authorization. Separate automatic-approval rejections also occurred during the session, but they are not counted as reproductions of this JavaScript error.
Desktop log correlation (sanitized)
Two failed sends at 2026-10-21T02:11:10.687Z and 2026-10-21T02:11:37.814Z show the same sequence:
dynamic_app_tool_renderer_execution_started,tool=send_message_to_threadAppServerConnection response_routed,method=thread/turns/list,errorCode=nullSending server response,tool=send_message_to_thread,success=falseNo application stack trace was available in the inspected log slice. No successful delivery was claimed.
Static-code investigation / suspected fault
Read-only inspection of the installed renderer bundle identified a side-conversation ancestry/opening-context helper, minified as
Zeu. WhenopeningTurnis null, it obtains a manager throughVh(...), callslistThreadTurns(..., itemsView: 'notLoaded', sortDirection: 'asc'), and then passesr.sendRequest.bind(r)to the item-loading helperix(...).Vh(...)can return a host/manager RPC proxy. This is a plausible mismatch between an RPC method proxy and a normal JavaScript function supporting.bind, and the call order matches the observed successfulthread/turns/listimmediately followed by failure. This is a suspected location based on static code and logs, not a confirmed runtime stack diagnosis.Please inspect whether that callback should instead use a normal forwarding function, for example
(...args) => r.sendRequest(...args), and add a regression test covering a paginated parent with null opening context accessed through the RPC-proxy path. Preserve ancestry checks and normal authorization behavior.Impact / safety
Explicitly authorized work cannot be handed back from the side conversation to the parent. Repeated consent does not fix the runtime binding failure. No installed application code, plugin code, permissions, project/runtime state, or stored conversation history was modified to work around the error. No credentials, actual thread IDs, project code, financial data, or complete logs are included in this public report.
Related later reproduction: #55023.
johnlanni commentedon Oct 21, 2026
Additional macOS reproduction on 2026-10-21 (UTC+08:00), on desktop version 26.1013.40934, build 20770.
Environment
com.openai.codex.Info.plist, not an update check.Observed behavior
The user explicitly authorized sending findings back to the parent task.
mcp__codex_app__list_threadssucceeded and showed that parent as active.Two calls to
mcp__codex_app__send_message_to_threadfailed: the first suppliedhostId: "local"; the second omitted it. Both used the same existing parent ID and ordinary text prompts, with optional model/thinking overrides omitted. The prompts differed in length, so this is not a controlled identical-payload comparison.Both returned exactly:
{"content":[{"type":"text","text":"'sendRequest.bind' is not a function."}],"isError":true}A sanitized reproduction, from a side conversation after explicit user authorization:
Expected: deliver or queue the authorized message and return an accurate receipt, or return an actionable supported-operation/state error.
Neither observed call returned a successful delivery receipt. This report does not claim permanent non-delivery or a confirmed internal root cause; no destination-history read after these calls, regular-chat control, or runtime stack trace was collected. No extra live send attempts were made for this report.
No app package, permissions, global configuration, project code, or conversation storage was modified. Real thread IDs, private prompts, personal paths, credentials, and full conversation logs are omitted. Reporting this reproduction on the existing issue rather than opening a duplicate.