fix(desktop): remote media fallback, recording transfer, browser menus and installer art - #462
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
rynfar
force-pushed
the
upstream/2026-09-10-desktop-fixes
branch
from
September 11, 2026 01:40
0fa2309 to
901e393
Compare
Pylon adaptation: the new fallback tests share an import block with Pylon's existing asset URL metadata test; no behavior differs from upstream. Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com> (cherry picked from commit a01b227d6f37d1cfed7a2f47aaace2f72ea76ce3)
Pylon adaptation: the new recording tests mock getUserMedia, which Pylon's tab capture uses, instead of upstream's getDisplayMedia capture trigger. Upstream's gesture-free capture-trigger test belongs to earlier capture work Pylon does not have and is not added. (cherry picked from commit 9e37f0c291974d084a59d7b9f165a1cb056e6043)
Pylon adaptation: the test's fake renderer keeps Pylon's pylon-code-dev:// URL. (cherry picked from commit b5f7fa0ede2a0d791226e6474c9cc4374dd89cc9)
…them (#10501)
Bound the snapshot text an agent reads below harness output limits, report
what was left out, return preview_evaluate results as { value }, cap element
names in the desktop snapshot script, and let preview_snapshot save its PNG
under the environment's browser-artifacts directory with save: true.
Pylon adaptations: PreviewScreenshotSaveError extends
Schema.TaggedErrorClass because Pylon's Effect version has no
Schema.TaggedError. The user snapshot guide describes bounded text and
saved screenshots.
(cherry picked from commit 061543e9e5b54ec0048725c37d52fef2962df173)
Adopt upstream's refreshed DMG installer layout: a 640x432 Finder window, 120px app and Applications icons at (166, 214) and (474, 214), a direct "Drag Pylon into Applications." instruction with a curved arrow, and a ribbon behind the icons. Nightly keeps upstream's abstract night sky (stars and blurred clouds, no marks) with a pastel ribbon and a NIGHTLY label; stable uses the neutral gray background and silver ribbon. Pylon adaptations: both backgrounds embed the Pylon mark (hexagon with the cube cutout, from assets/prod/app-icon.icon/Assets/text.svg) where upstream embeds its wordmark, and the instruction names Pylon. DMG titles, artifact names, signing, and app identity are unchanged. Adopted from 991526383f95eefdd66ffd2853136c6dd34ae008 (#10632) Adopted from 5d14c0e9686d8bedf47dd93dd3811fd639255c7e (#10819) Adopted from 0fe4c99ee6df4cbb7a9064d2d86ece65ecef5eb3 (#10820)
Explain that desktop retries missing absolute media from remote threads against its own environment, and that agent recordings are transferred to the agent's environment with a 50 MiB and two-minute limit. Documents behavior adopted from a01b227d6f37d1cfed7a2f47aaace2f72ea76ce3 (#10619) Documents behavior adopted from 9e37f0c291974d084a59d7b9f165a1cb056e6043 (#10572)
Adopted from a01b227d6f37d1cfed7a2f47aaace2f72ea76ce3 (#10619) Adopted from 9e37f0c291974d084a59d7b9f165a1cb056e6043 (#10572) Adopted from b5f7fa0ede2a0d791226e6474c9cc4374dd89cc9 (#10670) Adopted from 061543e9e5b54ec0048725c37d52fef2962df173 (#10501) Adopted from 991526383f95eefdd66ffd2853136c6dd34ae008 (#10632) Adopted from 5d14c0e9686d8bedf47dd93dd3811fd639255c7e (#10819) Adopted from 0fe4c99ee6df4cbb7a9064d2d86ece65ecef5eb3 (#10820)
…r the desktop's own environment A transferred recording was a thread attachment that no message referenced, so a rollback deleted it even when a kept turn embedded it. Transferred recordings and saved snapshot screenshots now live in the thread's own browser-artifacts folder, which rollbacks never sweep and thread deletion removes. The desktop no longer uploads a recording to its own primary environment. It returns the saved path, as before recording transfer, and tells the server so instead of looking like an outdated desktop. Other environments still get one transfer. preview_snapshot is no longer annotated read-only or idempotent, because save: true writes a new file on each call.
…edia fallback A remote thread could embed a UNC path and make a Windows desktop's own server resolve it without a click. The fallback now accepts only POSIX and drive paths on the client, and the server issues thread-free media URLs only for those paths.
Stopping a recording can take up to 120 seconds, longer than older Codex releases (60 or 120 s) and OpenCode (60 s) wait for an MCP tool. Pylon now configures 180 seconds for its MCP server in both. Claude's defaults already cover it, and ACP providers accept no per-server timeout.
rynfar
force-pushed
the
upstream/2026-09-10-desktop-fixes
branch
from
September 11, 2026 01:41
901e393 to
ab596cf
Compare
save: true writes only to the thread's own browser-artifacts store, which deleting the thread removes, so dropping upstream's read-only and idempotent hints only made Codex ask before every snapshot in supervised modes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Five small desktop problems from upstream T3 Code, ported as one PR:
What changed
/paths and Windows drive paths fall back. UNC and device paths (\\server\share,\\?\C:\,//server/share) never do, on the client or the server, so a remote thread cannot make a Windows desktop open a network share.save: truewrites the PNG into the agent's environment and returns its path.assets/prod/app-icon.icon/Assets/text.svg) where upstream shows its wordmark, with the text "Drag Pylon into Applications."docs/user/composer.mdanddocs/user/browser-snapshots.mddescribe the media fallback,save: true, recording transfer and how long saved files last.Sources
a01b227d6f37d1cfed7a2f47aaace2f72ea76ce39e37f0c291974d084a59d7b9f165a1cb056e6043b5f7fa0ede2a0d791226e6474c9cc4374dd89cc9pylon-code-dev://URL.061543e9e5b54ec0048725c37d52fef2962df173Schema.TaggedErrorClassfor Pylon's Effect version. Saved screenshots are stored per thread (see below).991526383f95eefdd66ffd2853136c6dd34ae0085d14c0e9686d8bedf47dd93dd3811fd639255c7e0fe4c99ee6df4cbb7a9064d2d86ece65ecef5eb3Window capture (#8103, #10645, #9001) and the skipped v0.0.40 release bump are in #461. The ledger rows need a trivial rebase. Since #461's
afa94547damoved recording capture togetDisplayMedia,apps/web/src/browser/browserRecording.test.tsalso conflicts: whichever PR lands second must move #10572's two transfer tests from thegetUserMediamock to #9001's display-media capture trigger, which is how upstream wrote them. No other file this PR changes conflicts with #461 or #463; their remaining conflicts (pnpm-lock.yaml,MessagesTimeline.test.tsx) are withpylonitself.Pylon adaptations and removals
Saved browser files live with their thread. Upstream stores a transferred recording as a thread attachment that no message references. Pylon's rollback (
thread.reverted) prunes exactly those files, so a recording the agent embedded in a kept earlier turn was deleted by any later rollback. In remote mode the only other copy is on the desktop. Transferred recordings andsave: truescreenshots now go to<state>/browser-artifacts/<thread>/. Revert cleanup never looks there. Deleting the thread removes the folder from the same deletion path that removes its attachments, so feat(chat): attach files to question answers #463's cleanup cursor replays it too.preview_snapshotannotations. Upstream's read-only and idempotent hints are kept.save: truewrites only to the thread's ownbrowser-artifacts/<thread>/store, never the workspace, and deleting the thread removes it. Dropping the hints would make Codex ask before every snapshot in Supervised and Auto-accept edits with no safety benefit, so review kept them. A comment at the annotation records why.MCP tool timeouts.
preview_recording_stopcan take up to 120 s. Pylon now configures 180 s for its MCP server where a provider accepts a per-server value:DEFAULT_TOOL_TIMEOUTincodex-rs)mcp_servers.t3-code.tool_timeout_sec=180.0.tool_timeout_secpredatesbearer_token_env_var, which Pylon already requires.timeoutfalls back toexperimental.mcp_timeout, then the SDK)timeout: 180000onmcp.add. OpenCode also uses it for connecting and listing tools.MCP_TOOL_TIMEOUTdefault) and a 300 s idle limit for HTTP servers, checked in Claude Code 2.1.267McpServerHttphas no timeout fieldOnly the previous DMG artwork and window geometry are replaced. Both came from an earlier upstream port, so they are not Pylon-original.
Nothing Pylon-specific was removed from the MCP, asset or window code. Prime usage is unchanged (
PRIME_AGENT_DRIVER_KINDstill appears 3 times).Risks for review
preview_evaluateresult shape. It now returns{ value }. No Pylon consumer of the old raw result was found.Verification
vp test run):path: 6 passed;src/mcp,AssetAccess,cli/config,attachmentStore,ProjectionPipeline,CodexAdapterandOpenCodeAdapter: 308 passed;server.test.ts -t "asset|media|upload": 5 passed;Manager,ipc/preview,DesktopWindowandElectronMenu: 126 passed, andCI=true scripts/build-desktop-artifact.test.ts: 80 passed (first push; this round did not touch those files).McpHttpServer, previewtoolsandhandlerstests, 24 passed;vp fmt --checkand lint clean on the changed files.t3and web clean this round; contracts, desktop, mobile and scripts clean on the first push.vp fmt --checkpasses on 24 files; the first push checked 27 and 29 files;git diff --checkis clean.sips, the builder's converter, and inspected at 1x and 2x.No local client pass or Finder/Electron check was run; the orchestrator does one integrated pass. Upstream evidence: #10632, #10819, #10820, #10670, #10619 and #10572.
Ported by Claude Opus 5 in Claude Code.