Skip to content

Show the images and PDFs an agent's tools return or write inline in the chat - #18401

Merged
teamleaderleo merged 46 commits into
feat-cmux-nextfrom
feat-cmux-next-media-thumbnails
Oct 7, 2026
Merged

teamleaderleo merged 46 commits into
feat-cmux-nextfrom
feat-cmux-next-media-thumbnails

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Oct 7, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Image outputs from an agent's tool calls now show inline in the chat, and a PDF an agent writes or links shows as a thumbnail of its first page. Before this, the transcript dropped returned images and showed a PDF only as a file chip.

This PR now includes #18357 (closed into this one), so it lands both changes:

  • Returned images (from cmux-next agent pane: tool calls show the images they return or write #18357): a tool that returns an image, such as a browser screenshot, shows it. ACP image content blocks are kept as data URLs, png/jpeg/gif/webp only, up to 8 MB each.

  • Written images (from cmux-next agent pane: tool calls show the images they return or write #18357): a tool that writes or prints an image file shows that file: the edited file, the call's locations, and absolute image paths in its output. They load through the host like a reply's local image (image.load), so only files inside the session's folders show. At most four per call, each capped at 360x220 and decoded lazily. A click opens the image viewer (Agent pane: image viewer for chat images #18200), as do reply images, through the shared OpenableImage.

  • Host-drawn page: the host draws page 1 of the PDF with CoreGraphics, on white, with the longest side at 1024 px. It hands the pane a PNG data URL through the existing image.load path. The page never receives the document and keeps its img-src data: CSP.

  • Limits: only page 1 is decoded, so PDFs up to 100 MB qualify (other images stay at 10 MB). A file that CoreGraphics can't read as a PDF is refused, as is a locked one. As for any reply image, only files inside the session's folders load.

  • Tool outputs: a .pdf a tool edits, lists in its locations or prints as an absolute path now joins the tool's image strip. A reply link to a local PDF shows the same thumbnail through ReplyImage.

  • Click: opens the in-pane image viewer (Agent pane: image viewer for chat images #18200), never a browser tab.

Targets feat-cmux-next and carries #18357's commits. Part of bead cx-ncc.51. Video and artifact links follow in separate PRs.

Testing

  • cmux-next agent pane: tool calls show the images they return or write #18357's part: red commit 5c3dbb8, then the fix; toolImages.test.tsx covers returned and written images.
  • Red commit 788b662, then the fix.
  • bun test src/agent-session/acpmux/conversation/toolImages.test.tsx (local): 3 pass, 1 fail at the red commit; 4 pass after the fix.
  • AgentPaneReplyImageTests.aPDFShowsItsFirstPageAsAPNG checks a two-page portrait PDF. The result must be a PNG data URL whose longest side is thumbnailSide and which stays portrait, and a fake .pdf must be refused. Fleet Swift suite (step 18909ba90b44, run-swift-testing-suites.sh at c24deb9, which carries this PR's Swift unchanged): passes.
  • Review follow-up: a page smaller than the thumbnail was drawn at its natural size in white margins, because CoreGraphics' page transform never scales up. Red commit 6c94740 samples pixels on a Letter page and adds a /Rotate 90 page. Fleet suite at 6c94740: aPDFShowsItsFirstPageAsAPNG fails with 2 issues, one on each page. The fix 8eb5524 builds the transform by hand and clips to the crop box. At 8eb5524 the rotated page passes, but the Letter-page check still failed: that page stores its blue as sRGB, and its device-RGB value missed the exact-byte threshold. 476b12d matches blue by hue, and the test passes on the fleet at 476b12d.
  • vp check and vp fmt pass on the changed files. verify-local.py --only swift-syntax passes on the changed Swift file. The agent pane bundle is no longer committed (base dropped it); builds generate it.

Changelog

Added: Images an agent's tools return or save (screenshots, charts) show inline in the agent chat, and a click zooms them
Added: A PDF an agent writes or links shows a first-page thumbnail in the agent chat, and a click zooms it

Proof

Before (feat-cmux-next): a tool call shows only text; returned and written images are dropped, and a PDF shows only as a file chip. The base gallery has no tool-images variant: /live/?entry=agent-pane.transcript

After: variant tool-images shows a sign-in page screenshot a browser tool returned, a build-time chart a script saved, and a three-page build-report PDF a script wrote, shown as its real first page. Preview: /wt/feat-cmux-next-media-thumbnails/?entry=agent-pane.transcript#/agent-pane.transcript/tool-images

The gallery host's branch sync is stuck on a deleted branch, so the preview shows the newest build before the latest base merge. The variant's content is the same.

🤖 Generated with Claude Code


Note

Medium Risk
Adds host-side PDF decoding and new transcript UI for tool outputs; bounded by size caps and session-folder rules, but CoreGraphics PDF handling is a new attack surface for malicious files.

Overview
Tool calls in the agent transcript now show inline image thumbnails under each row (even when collapsed): ACP image content blocks are kept as capped data URLs, and absolute image/PDF paths from edits, locations, or output text load through the existing host image.load path via ReplyImage, at most four per call.

On macOS, local PDFs (replies and tool outputs) no longer pass through the raster pipeline—the host renders page 1 with CoreGraphics to a PNG data URL (1024px longest side, up to 100 MB), including /Rotate, so the webview still only sees data: images under CSP.

OpenableImage centralizes click-to-zoom for shown images (markdown inline, reply images, and tool strips); gallery adds a tool-images transcript variant and tests cover PDF thumbnails and toolImages merging.

Reviewed by Cursor Bugbot for commit 654801f. Bugbot is set up for automated code reviews on this repo. Configure here.

teamleaderleo and others added 30 commits October 6, 2026 20:03
A reply's inline image opens a viewer over the pane: zoom about the
pointer (pinch, Command-scroll, double click, + - 0), pan a zoomed image,
arrows and the arrow keys through every image of the chat, copy as PNG,
Escape or a click beside the image to close. The mock light-theme chat
shows three screens to open.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
agent-pane.image-viewer: a reply with three screenshots, and images in
two replies the viewer's arrows go through. The opened viewer needs a
click, so its states wait for play steps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Red: the viewer's image list keeps an image on a fence's later line,
loses images after a lone backtick, with parentheses in the target or
inside bold; Tab leaves the viewer; an image the list misses opens
without its name.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The viewer's image list now comes from Markdown.tsx's own block parser
and inline pattern (inlineImages), so it holds exactly the images a
reply draws: none from code, and those after a lone backtick, with
parentheses in the target or inside bold. An image the list still
misses opens under its own name. WebKit's pinch (gesture events) zooms
about the pointer; the stage's padding is symmetric so zoom stays about
the pointer; Tab wraps inside the viewer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e data URLs

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Notes draw under the reply by first reference, so the viewer lists their
images there too; a reply whose only image has an upper-case data URL
scheme is read, as Markdown.tsx draws it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The mock chat and the gallery entry show a chart, a gradient and a
diagram instead of drawn app screens: previews are never mockups of cmux.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The viewer is a ui/Dialog (Base UI): it traps focus, makes the pane
behind inert, closes on Escape and returns focus to the image, replacing
the hand-rolled role, tab index and Tab handling the UI rules forbid.
Only its own image keys (arrows, + - 0) stay a key handler, marked
ui-allow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ext-image-viewer

# Conflicts:
#	webviews/src/agent-session/acpmux/conversation/Markdown.tsx
…e reply budget

Red: since base moved data URLs over 4 KB behind short refs and capped a
reply at 8 MB, chatImages lists none of a reply's long images.

Focused: bun test src/agent-session/acpmux/conversation/imageViewer.test.tsx -t budget
(fail: 0 listed, 6 drawn)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he reply budget

inlineImages mirrors renderInline again: it takes the URLs back from
capDataUrls' short refs (passed down into bold, italic and link text),
and chatImages drops the reply's images past dataUrlsOverBudget, which
draw as their name.

Focused: bun test src/agent-session/acpmux/conversation/imageViewer.test.tsx -t budget
(pass)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Red since the move to ui/Dialog: a press inside the viewer focuses the
dialog popup, above the body that handled the image keys, and the
wheel and gesture listeners ran before the portal mounted the stage.

Focused: bun test src/agent-session/acpmux/conversation/imageViewer.test.tsx
(fail: keys stay at scale(1); Control-scroll not prevented)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ui/Dialog passes onKeyDown to its popup, which takes focus after a press
inside, so the viewer's arrows and + - 0 keys go there. The stage is a
callback ref, so the pinch and wheel listeners attach once the portal
mounts it.

Focused: bun test src/agent-session/acpmux/conversation/imageViewer.test.tsx
(11 pass)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ext-image-viewer

# Conflicts:
#	webviews/src/agent-session/acpmux/App.tsx
The opened viewer as play steps on the reply with three images, and
anchors that prove nothing under the viewer moves. Regenerated agent
pane bundle for the base merge.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ext-image-viewer

# Conflicts:
#	webviews/src/agent-session/acpmux/Localizable.xcstrings
#	webviews/src/agent-session/acpmux/conversation/Markdown.tsx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ext-image-viewer

# Conflicts:
#	webviews/src/agent-session/acpmux/conversation/Markdown.tsx
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Red: direct.ts drops ACP image content blocks, and a tool that writes or
prints an image path (a screenshot, a rendered chart) shows only text.

Red (local): bun test src/agent-session/acpmux/conversation/toolImages.test.tsx
fails: ../toolImages does not exist.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An agent's image outputs now show inline under the tool row, without
opening it:
- images a call returns (ACP image content blocks), kept as data URLs
  up to 8 MB each;
- image files it wrote or printed (a saved screenshot, a rendered
  chart): its edited file, its locations and absolute image paths in
  its output, loaded through the host like a reply's local image.

At most four per call, capped at 360x220 and lazily decoded. A click
opens the image viewer, as does a local or web image in a reply now
(ReplyImage's shown image is OpenableImage). Gallery: transcript
variant tool-images with a returned screenshot and a saved chart.

Focused (local): bun test src/agent-session/acpmux/conversation/toolImages.test.tsx
4 pass (red at 5c3dbb8).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ext-image-viewer

# Conflicts:
#	webviews/src/agent-session/acpmux/App.tsx
…r branch

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Red: the host's image.load refuses a PDF (not a raster or SVG), and a
tool's PDF output path shows no preview.

Red (local): bun test src/agent-session/acpmux/conversation/toolImages.test.tsx
fails on the report.pdf case; AgentPaneReplyImageTests
.aPDFShowsItsFirstPageAsAPNG names thumbnailSide, which does not exist
yet (runs in hosted cmux-next swift test).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The host draws page 1 of a local PDF (CoreGraphics, on white, longest side
1024) and hands the pane a PNG data URL, so the chip and the tool image strip
show it like any image and a click opens the in-pane viewer. Only page 1 is
decoded, so PDFs up to 100 MB qualify; a file that is not a PDF is refused.
Tool output and edited paths ending in .pdf now count as image outputs.

Gallery: the transcript tool-images variant adds a build-report PDF thumbnail.

Focused: bun test toolImages.test.tsx (red 3/1 at 788b662, green 4/0);
AgentPaneReplyImageTests.aPDFShowsItsFirstPageAsAPNG on the fleet suite runner.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration
  • Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 51610c2c-ee8e-4ccc-9a60-6362c73c0a9e

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@blacksmith-sh

blacksmith-sh Bot commented Oct 7, 2026 •

Copy link
Copy Markdown

Blacksmith runners detected OOM events on the following jobs:

Job Details
web / react-apps-check View Job

@github-actions

github-actions Bot commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

CI fast guards failed on 476b12d758 (https://github.com/manaflow-ai/cmux/actions/runs/37675335094). It does not block the merge; a red guard merged into main breaks it for every open PR.

Check that push and pull_request path filters agree

Test: python3 tests/test_ci_workflow_path_filter_parity.py

Traceback (most recent call last):
  File "/home/runner/_work/cmux/cmux/tests/test_ci_workflow_path_filter_parity.py", line 247, in <module>
    test_every_push_only_pattern_is_still_needed()
  File "/home/runner/_work/cmux/cmux/tests/test_ci_workflow_path_filter_parity.py", line 183, in test_every_push_only_pattern_is_still_needed
    assert not stale, (
           ^^^^^^^^^
AssertionError: cmux-next.yml: Packages/Shared/**, Packages/iOS/** is no longer push-only. Remove it from PUSH_ONLY_PATTERNS.

Fix: the assertion above names what the guard expects; change the tree to match it.
Reproduce in seconds, no build: scripts/ci/guards-local.sh --step 'Check that push and pull_request path filters agree'

Validate package test selection

Test: python3 tests/test_ci_select_package_tests.py

    result, count = run_package_step("CmuxUpdater", [(startup, 1), (passed, 0)])
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/runner/_work/cmux/cmux/tests/test_ci_select_package_tests.py", line 102, in run_package_step
    count = int((root / "calls").read_text())
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/pathlib.py", line 1029, in read_text
    with self.open(mode='r', encoding=encoding, errors=errors) as f:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/pathlib.py", line 1015, in open
    return io.open(self, mode, buffering, encoding, errors, newline)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/tmpiijicu32/calls'

Fix: the assertion above names what the guard expects; change the tree to match it.
Reproduce in seconds, no build: scripts/ci/guards-local.sh --step 'Validate package test selection'

Validate local hook trust boundary

Test: python3 tests/test_preflight_trust.py

  • PreflightTrustTests.test_hook_installation_has_no_candidate_code_runner
AssertionError: True is not false

Fix: the assertion above names what the guard expects; change the tree to match it.
Reproduce in seconds, no build: scripts/ci/guards-local.sh --step 'Validate local hook trust boundary'

Validate the package test lane's single-suite phase

suite run failed (1): ::error title=No macOS SDK::package-test-lane.sh: xcrun found no macOS SDK in /Applications/Xcode_26.6.app/Contents/Developer (got '')
no build of the package: ''
no filtered test run: ''
string catalogs were not compiled in the package: ''

... and 11 more failing tests in the run log.
Fix: the assertion above names what the guard expects; change the tree to match it.
Reproduce in seconds, no build: scripts/ci/guards-local.sh --step 'Validate the package test lane'"'"'s single-suite phase'

Validate fork runner routing

Test: python3 tests/test_ci_fork_runner_routing.py

  • ForkRunnerRoutingTests.test_fork_pull_requests_into_manaflow_ai_never_reach_an_owned_runner_label
AssertionError: Lists differ: ['cmux-next.yml:954 has no top-level fork [6389 chars] }}"] != []

First list contains 11 additional elements.
First extra element 0:
'cmux-next.yml:954 has no top-level fork pull-request branch: runs-on: ${{ needs.macos-placement.outputs.runner || github.repository_owner != \'manaflow-ai\' && \'macos-26\' || (github.event_name == \'pull_request\' && github.event.pull_request.head.repo.full_name != github.repository && \'blacksmith-6vcpu-macos-26\' || vars.CI_PR_POOL_OWNED == \'1\' && contains(fromJSON(\'["pull_request","push","workflow_dispatch"]\'), github.event_name) && (github.run_attempt <= 2 || github.triggering_actor != \'github-actions[bot]\') && vars.CI_SIDE_LANE_RUNNER || vars.MACOS_RUNNER_26 || \'blacksmith-6vcpu-macos-26\') }}'

Diff is 6836 characters long. Set self.maxDiff to None to see it.
  • ForkRunnerRoutingTests.test_no_workflow_falls_back_to_blacksmith_outside_manaflow_ai
AssertionError: Lists differ: ["cmux-next.yml:954: blacksmith-6vcpu-maco[2411 chars] }}"] != []

First list contains 10 additional elements.
First extra element 0:
"cmux-next.yml:954: blacksmith-6vcpu-macos-26 is selectable outside manaflow-ai, where no Blacksmith runner exists; start the expression with the owner fork branch, e.g. ${{ github.repository_owner != 'manaflow-ai' && 'ubuntu-24.04' || ... }}"

Diff is 2673 characters long. Set self.maxDiff to None to see it. : 
cmux-next.yml:954: blacksmith-6vcpu-macos-26 is selectable outside manaflow-ai, where no Blacksmith runner exists; start the expression with the owner fork branch, e.g. ${{ github.repository_owner != 'manaflow-ai' && 'ubuntu-24.04' || ... }}
cmux-next.yml:962: blacksmith-6vcpu-macos-26 is selectable outside manaflow-ai, where no Blacksmith runner exists; start the expression with the owner fork branch, e.g. ${{ github.repository_owner != 'manaflow-ai' && 'ubuntu-24.04' || ... }}
cmux-next.yml:1175: blacksmith-6vcpu-macos-26 is selectable outside manaflow-ai, where no Blacksmith runner exists; start the expression with the owner fork branch, e.g. ${{ github.repository_owner != 'manaflow-ai' && 'ubuntu-24.04' || ... }}
cmux-next.yml:1184: blacksmith-6vcpu-macos-26 is selectable outside manaflow-ai, where no Blacksmith runner exists; start the expression with the owner fork branch, e.g. ${{ github.repository_owner != 'manaflow-ai' && 'ubuntu-24.04' || ... }}
cmux-next.yml:1345: blacksmith-6vcpu-macos-26 is sel ...

Fix: the assertion above names what the guard expects; change the tree to match it.
Reproduce in seconds, no build: scripts/ci/guards-local.sh --step 'Validate fork runner routing'

Validate reusable guard workflow structure

  • Wiring.test_main_full_suite_admission_compiles_on_the_seed_pool_and_xcode
AssertionError: 'blacksmith-6vcpu-macos-15' != 'pool-pr'
- blacksmith-6vcpu-macos-15
+ pool-pr
  • Wiring.test_no_retry_attempt_of_any_workflow_takes_an_owned_label (workflow='cmux-next-batch.yml', job='regen', attempt='3')
AssertionError: True is not false : ['glaeda-side-std-xcode-26.6']
  • Wiring.test_no_retry_attempt_of_any_workflow_takes_an_owned_label (workflow='cmux-next-batch.yml', job='build', attempt='3')
AssertionError: True is not false : ['glaeda-side-std-xcode-26.6']

Fix: the assertion above names what the guard expects; change the tree to match it.
Reproduce in seconds, no build: scripts/ci/guards-local.sh --step 'Validate reusable guard workflow structure'

Run canonical CMUX CI guard profile

test_cmux_next_does_not_run_full_suite_for_unrelated_packages

Fix: the assertion above names what the guard expects; change the tree to match it.
Reproduce in seconds, no build: scripts/ci/guards-local.sh --step 'Run canonical CMUX CI guard profile'

Agents: python3 scripts/ci/guard_attribution.py fix applies the mechanical fixes locally. This comment is updated in place on each push.

@github-actions

github-actions Bot commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Unclear: web / react-apps-check failed: no known signature; failed step: Test webviews.

CI failed on 654801fecc (run 37685720481 attempt 1): 1 unknown.
macOS jobs did not run: compile and app tests were skipped: Fast static checks skipped.

Job Verdict Why
web / react-apps-check unknown no known signature; failed step: Test webviews

Not re-run automatically: web / react-apps-check is not a machine failure.

Written by scripts/ci/classify_failures.py (ci-failure-attribution.yml); signatures are its SIGNATURES table. A machine verdict is the runner's fault, not this PR's; yours means the failing file is one this PR changes, also red on main that main's latest full suite fails the same way, seen on other PRs that it failed on another pull request's run lately.

teamleaderleo and others added 9 commits October 7, 2026 08:33
Base no longer commits the web bundles: the agent-pane bundle files are
dropped; only GENERATED.md stays.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Drops the committed agent-pane bundle files, as base did.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Drops the committed agent-pane bundle files, as base did.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Picks up the bundle-removal CI fixes. The string catalog keeps base's text
and adds only this branch's keys.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Carries feat-cmux-next 754e544 (#18409) down the stack.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Carries feat-cmux-next 754e544 (#18409) down the stack.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
CGPDFPageGetDrawingTransform only scales a page down, so a page smaller
than the thumbnail drew at its natural size in white margins. Build the
transform by hand and clip to the crop box.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@teamleaderleo
teamleaderleo changed the base branch from feat-cmux-next-tool-images to feat-cmux-next October 7, 2026 20:35
@teamleaderleo teamleaderleo changed the title Show a PDF an agent writes or links as its first page Show the images and PDFs an agent's tools return or write inline in the chat Oct 7, 2026
# Conflicts:
#	webviews/src/agent-session/acpmux/conversation/Markdown.tsx
@teamleaderleo
teamleaderleo merged commit 7672e43 into feat-cmux-next Oct 7, 2026
77 of 92 checks passed
@teamleaderleo
teamleaderleo deleted the feat-cmux-next-media-thumbnails branch October 7, 2026 21:25
@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor

The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/37689519735 at 3e0a1ad failed: cmux-next generated files.
Those jobs last passed at a14deb7. This pull request is one of 4 merged since: #18399, #18200, #18401, #18431.
If the failure is in your change, fix forward on feat-cmux-next. Pull requests run only the tiers their paths reach (docs/ci/cmux-next-tiers.md); label a batch PR full-ci to run them all before merging.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant