fix(codex): await computer use elicitation bridge#85117
Conversation
|
Codex review: needs real behavior proof before merge. Workflow note: Future ClawSweeper reviews update this same comment in place. How this review workflow works
Summary Reproducibility: yes. for the source-level seam: current main requires a JSON-object PR rating Rank-up moves:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. Real behavior proof Mantis proof suggestion Risk before merge
Maintainer options:
Next step before merge Security Review detailsBest possible solution: Land the narrow bridge fix only after redacted Slack/Computer Use proof demonstrates prompt delivery, Do we have a high-confidence way to reproduce the issue? Yes for the source-level seam: current main requires a JSON-object Is this the best way to solve the issue? Unclear until maintainers accept the approval-boundary policy. The Label justifications:
Security concerns:
What I checked:
Likely related people:
Codex review notes: model gpt-5.5, reasoning high; reviewed against f015c3ff5236. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 02eb2086a4
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
ClawSweeper PR egg 🎁 Pass real behavior proof to wake the egg and unlock a hatchable treat. Where did the egg go?
|
* fix(codex): bridge computer use elicitations * fix(codex): preserve computer use approval boundary * fix(codex): await app-server elicitation bridge
* fix(codex): bridge computer use elicitations * fix(codex): preserve computer use approval boundary * fix(codex): await app-server elicitation bridge
* fix(codex): bridge computer use elicitations * fix(codex): preserve computer use approval boundary * fix(codex): await app-server elicitation bridge
* fix(codex): bridge computer use elicitations * fix(codex): preserve computer use approval boundary * fix(codex): await app-server elicitation bridge
* fix(codex): bridge computer use elicitations * fix(codex): preserve computer use approval boundary * fix(codex): await app-server elicitation bridge
* fix(codex): bridge computer use elicitations * fix(codex): preserve computer use approval boundary * fix(codex): await app-server elicitation bridge
* fix(codex): bridge computer use elicitations * fix(codex): preserve computer use approval boundary * fix(codex): await app-server elicitation bridge
* fix(codex): bridge computer use elicitations * fix(codex): preserve computer use approval boundary * fix(codex): await app-server elicitation bridge
* fix(codex): bridge computer use elicitations * fix(codex): preserve computer use approval boundary * fix(codex): await app-server elicitation bridge
* fix(codex): bridge computer use elicitations * fix(codex): preserve computer use approval boundary * fix(codex): await app-server elicitation bridge
* fix(codex): bridge computer use elicitations * fix(codex): preserve computer use approval boundary * fix(codex): await app-server elicitation bridge
Summary
requestedSchema, and the app-server request handler returned the asynchronous elicitation bridge promise without awaiting it, letting request-response bookkeeping/finally run before the bridge settled.return await handleCodexAppServerElicitationRequest(...)so request-response bookkeeping/finally waits for the approval bridge result.{ type: "object", properties: {} }, custom configured Computer Use server names remain supported, pending approval elicitations keep the turn request active until the bridge resolves, non-form elicitations remain unhandled, the app-server bridge tests cover those cases, and Slack docs list/approve.Motivation
mainwhile keeping the existing configured-server authorization boundary intact and preserving the manual approval request lifetime.Change Type (select all)
Scope (select all touched areas)
Linked Issue/PR
Real behavior proof (required for external PRs)
node scripts/run-vitest.mjs extensions/codex/src/app-server/run-attempt.test.ts extensions/codex/src/app-server/elicitation-bridge.test.ts;git diff --check.Test Files 2 passed (2); Tests 230 passed (230)andgit diff --checkexited cleanly.Root Cause (if applicable)
requestedSchemavalues before plugin approval handling could accept a valid configured Computer Use form elicitation. Separately, returning the bridge promise from inside atry/finallywithoutawaitlet request-response bookkeeping run before manual approval finished.Regression Test Plan (if applicable)
extensions/codex/src/app-server/elicitation-bridge.test.ts;extensions/codex/src/app-server/run-attempt.test.ts.:responseprogress marker does not fire until the elicitation bridge promise resolves.User-visible / Behavior Changes
Slack channel docs now list
/approveamong app commands. Computer Use app-server approval elicitations are more reliably bridged into plugin approval handling when their request schema is omitted or not an object, and pending approval requests are not treated as responded before the approval bridge resolves.Diagram (if applicable)
Security Impact (required)
Yes/No): NoYes/No): NoYes/No): NoYes/No): NoYes/No): NoYes, explain risk + mitigation: N/ARepro + Verification
Environment
scripts/run-vitest.mjsSteps
node scripts/run-vitest.mjs extensions/codex/src/app-server/run-attempt.test.ts extensions/codex/src/app-server/elicitation-bridge.test.ts.git diff --check.Expected
Actual
Test Files 2 passed (2); Tests 230 passed (230).git diff --checkexited cleanly.Evidence
Human Verification (required)
What you personally verified (not just CI), and how:
desktop-controlserver names work; non-form elicitations remain unhandled; non-Computer Use server names remain unhandled by the Computer Use bridge; request response progress is emitted only after the bridge promise resolves.Review Conversations
Compatibility / Migration
Yes/No): YesYes/No): NoYes/No): NoRisks and Mitigations
mode: "form"guard remain in place, the normalized response schema has no fields, and focused tests cover custom configured servers plus non-form rejection.