Uh oh!
There was an error while loading. Please reload this page.
feat(cu): add fenced OpenAI computer observation loop - #920
Conversation
hqhq1025
commented
Jul 13, 2026
@Astro-Han#920 is clean and all CI checks pass. It is deliberately observation-only by default: real gpt-5.6-sol via the Azure Responses bridge completed a two-turn native computer screenshot continuation with no physical input action. The primary Accessibility-first product model path is isolated in fork stacked PR hqhq1025#9 and will be opened upstream after #920 merges. |
hqhq1025
commented
Jul 13, 2026
Ready for review. This remains an observation-only native OpenAI surface; the primary product mutation path is the AX-first provider-neutral function tool continued in #925. cc @Astro-Han |
14c0387 to
258dba8Compare
Astro-Han
left a comment
There was a problem hiding this comment.
Approved. I did not find a P0 or P1. The loop is still an explicit experimental API rather than the default product path, so these are non-blocking P2/P3 findings:
P2 —
packages/runtime/src/openai-computer-codec.ts:49-57,150-214andopenai-responses-transport.ts:41-46: requests do not include the Responses APIstorebody field, so desktop screenshots inherit the API's default retention. The transport test'sstore=falsequery parameter does not set the request-body option. Make the storage choice explicit, or use a continuation that does not depend on a stored response.P2 —
packages/runtime/src/openai-computer-loop.ts:84-101: top-levelin_progressand per-callin_progress/incompletestates are accepted as actionable. An emptyin_progressresponse is returned ascompleted, while an incomplete call's actions are executed. Only terminal completed responses and calls should advance the loop.P2 —
packages/runtime/src/openai-computer-loop.ts:24-48,157-164: once a batch starts, the result type cannot represent partial delivery or an unknown outcome. If action two throws after action one succeeded, the caller receives only the raw exception and can retry the already-delivered action.P2 —
packages/runtime/src/openai-computer-loop.ts:157-176: the final allowed turn still executes its actions and captures a screenshot, then throwsmax_turns_exceededwithout sending that screenshot or reporting the delivered actions. Check the continuation budget before dispatch, or return the delivery state.P2 —
packages/runtime/src/openai-computer-codec.ts:73-76andopenai-computer-loop.ts:74-78:maxTurnslimits responses, not actions, and it acceptsInfinity. One response can contain an unboundedactions[]; even the default-allowedwaitaction consumes two seconds per item. Add finite turn and per-batch action limits.P2 —
packages/runtime/src/openai-computer-actions.ts:78-83,108-112: the default policy calls this path observation-only but allowsmove, which is converted to a raw host coordinate and sent to an executor with no isolated-target or display-identity proof. A normal host executor can therefore move the user's real pointer withoutallowAction.P3 —
packages/runtime/src/openai-computer-actions.ts:108-110andopenai-computer-loop.ts:157-164: a providerscreenshotaction is sent through the executor, then the screenshot provider is called unconditionally. That turns one requested capture into two capture paths while discarding the executor's result.P3 —
packages/runtime/src/openai-computer-loop.ts:74-81: when no signal is supplied, the loop creates an AbortController that never aborts. A stalled transport, executor, or capture can hang forever despitemaxTurns; add a default deadline or make the required caller timeout explicit.
Summary
Adds a provider-native OpenAI Responses computer-call codec, bounded transport, and pure loop as an observation-only experimental surface.
This is not the primary Maka Computer path. The primary product path remains the provider-neutral
maka_computerfunction tool, where the model observes an AX tree and explicitly uses semantic element actions. The native OpenAI loop does not implicitly convert coordinates into Accessibility elements.Safety boundary
screenshot,wait, and visual-onlymove;Protocol hardening
actions[]and previewactiondialects remain separate;parallel_tool_callsis disabled;Real evidence
Using the local Azure Responses bridge and
gpt-5.6-sol, the GA nativecomputertool returned onlyscreenshotunder the default policy. The new transport/codec/loop completed the screenshot continuation in two turns and executed no physical input action.Verification