Repository navigation
feat(agents): serve MUI X in the agent chat (JS-4c) - #12483
Merged
Merged
Conversation
MUI X joins the JavaScript runtime's served libraries and the admin deploy's
_LIBRARIES, so 13 of the 15 catalogue libraries are served. plot.tsx renders
through the renderer's JavaScript row (esbuild bundle through the closed import
plugin, mounted as a React component) from the typed table; files written for
MUI X 7 are served coupled with the deprecated-api note (question 13, A).
- adapter_javascript.md: MUI X idioms measured with MUI X 9.16 in the renderer
image: module imports and one default export, ChartContainer ->
ChartsContainer, axis bands sized for the labels, overlays through
@mui/x-charts/hooks instead of pixel positions from margin, a "utc" time
axis with a formatter ("time" follows the browser's zone), fmt on value
axes, a series valueFormatter that guards null (unguarded, a hover over a
gap removes the whole chart). root.md names plot.tsx and MUI X's page.
- Fixtures: 60 MUI X cases (780 generated), smoke pie-basic-muix-renamed;
5 clean (9.16), 5 coupled (7.29), scatter-basic with deprecated-api.
- Eval preflight: a library's first case whose file bundles as it stands
(unavailable-import), so a MUI X 7 file first no longer stops the run.
- page_probe.mjs: a MUI X snippet; the hover takes the largest canvas or
svg (MUI X legend marks are svgs). The renderer CI step builds and probes
a MUI X page next to the Chart.js one.
- Image tests for MUI X: idioms render in both themes, the 7.29 import fails
at its line until rewritten, the page and the relay probes pass.
- Docs: agents/README.md, agent-network.md, the plan's "What JS-4c built",
changelog fragment.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
The matrix preflight is a renderer health check, not a case evaluation. When no selected case of a library has a catalogue file that bundles as it stands (every one imports what MUI X 9.16 lacks, e.g. `--cases scatter-basic-muix-*` in a per-spec run), it fell back to the first file, which cannot bundle, so the case that tests the ChartContainer rewrite could never run. It now renders the library's smoke case from the committed fixtures (pie-basic-muix-renamed for MUI X) and says so; only a library without such a smoke case renders its first file and fails as before. Measured for the plan (no prompt change): MUI X calls a value axis's valueFormatter only for its ticks, with numbers, in line, horizontal and vertical bar, and stacked area charts with gaps; only the category or date axis is a tooltip axis, and the tooltip hands the gap's null to the series' own formatter, which the prompt already guards. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
A critical changelog fragment issue remains: the hard-coded (#12483) suffix will fail validation and may reference the wrong pull request.
1 open issue
What changed in this PR
This pull request adds MUI X Charts support to the JavaScript agent runtime, including TSX rendering, admin deployment configuration, renderer probing, preflight handling, and an expanded evaluation fixture matrix.
Changes:
- Registers
muixandplot.tsxacross runtime configuration, prompts, deployment settings, eligibility checks, and tests. - Adds MUI X-specific rendering idioms, MUI X 7 import rewriting, smoke coverage, and 60 evaluation cases.
- Updates page probing to hover the largest chart surface and adds preflight fallback for incompatible catalogue files.
- Review findings: remove the hard-coded
(#12483)suffix from the changelog fragment; change “runs” to “run” in the user-facing prompt.
| File | Description |
|---|---|
tests/unit/agents/test_image.py |
Updates deployment-library expectations for MUI X. |
tests/unit/agents/runtime/test_runtimes.py |
Verifies MUI X runtime registration and TSX artifacts. |
tests/unit/agents/runtime/test_policy.py |
Covers MUI X in JavaScript policy validation. |
tests/unit/agents/evals/test_matrix.py |
Tests MUI X preflight fallback behavior. |
tests/unit/agents/evals/test_make_fixtures.py |
Verifies MUI X fixture counts, smoke coverage, and eligibility. |
tests/unit/agents/evals/test_cases.py |
Updates evaluation case totals. |
tests/unit/agents/code/test_profile_javascript_page_image.py |
Exercises MUI X page probes and interactive previews. |
tests/unit/agents/code/test_profile_javascript_image.py |
Tests MUI X idiom rendering and legacy import rewriting. |
tests/unit/agents/code/conftest.py |
Adds MUI X idiom snippets and validation expectations. |
changelog.d/agent-muix.md |
Documents MUI X support; contains the hard-coded PR-number suffix requiring removal. |
agents/renderer/page_probe.mjs |
Adds MUI X probing and largest-chart hover selection. |
agents/evals/matrix.py |
Adds MUI X preflight fallback and smoke-case selection. |
agents/evals/make_fixtures.py |
Generates MUI X fixtures and defines the smoke case. |
agents/evals/fixtures/cases/violin-basic-muix-x10/case.json |
Adds scaled violin fixture metadata. |
agents/evals/fixtures/cases/violin-basic-muix-renamed/case.json |
Adds renamed-header violin fixture metadata. |
agents/evals/fixtures/cases/violin-basic-muix-n5000/case.json |
Adds large violin fixture metadata. |
agents/evals/fixtures/cases/violin-basic-muix-n12/data.csv |
Adds small violin input data. |
agents/evals/fixtures/cases/violin-basic-muix-n12/case.json |
Adds small violin fixture metadata. |
agents/evals/fixtures/cases/violin-basic-muix-decimal-comma/case.json |
Adds decimal-comma violin metadata. |
agents/evals/fixtures/cases/violin-basic-muix-date/case.json |
Adds date-augmented violin metadata. |
agents/evals/fixtures/cases/scatter-basic-muix-x10/data.csv |
Adds scaled scatter input data. |
agents/evals/fixtures/cases/scatter-basic-muix-x10/case.json |
Adds scaled scatter fixture metadata. |
agents/evals/fixtures/cases/scatter-basic-muix-renamed/data.csv |
Adds renamed-header scatter input data. |
agents/evals/fixtures/cases/scatter-basic-muix-renamed/case.json |
Adds renamed-header scatter metadata. |
agents/evals/fixtures/cases/scatter-basic-muix-n5000/case.json |
Adds large scatter fixture metadata. |
agents/evals/fixtures/cases/scatter-basic-muix-n12/data.csv |
Adds small scatter input data. |
agents/evals/fixtures/cases/scatter-basic-muix-n12/case.json |
Adds small scatter fixture metadata. |
agents/evals/fixtures/cases/scatter-basic-muix-decimal-comma/data.csv |
Adds decimal-comma scatter input data. |
agents/evals/fixtures/cases/scatter-basic-muix-decimal-comma/case.json |
Adds decimal-comma scatter metadata. |
agents/evals/fixtures/cases/scatter-basic-muix-date/case.json |
Adds date-augmented scatter metadata. |
agents/evals/fixtures/cases/pie-basic-muix-x10/data.csv |
Adds scaled pie input data. |
agents/evals/fixtures/cases/pie-basic-muix-x10/case.json |
Adds scaled pie fixture metadata. |
agents/evals/fixtures/cases/pie-basic-muix-renamed/data.csv |
Adds renamed-header pie input data. |
agents/evals/fixtures/cases/pie-basic-muix-renamed/case.json |
Adds the MUI X smoke-case metadata. |
agents/evals/fixtures/cases/pie-basic-muix-n5000/case.json |
Adds large pie fixture metadata. |
agents/evals/fixtures/cases/pie-basic-muix-n12/data.csv |
Adds small pie input data. |
agents/evals/fixtures/cases/pie-basic-muix-n12/case.json |
Adds small pie fixture metadata. |
agents/evals/fixtures/cases/pie-basic-muix-decimal-comma/data.csv |
Adds decimal-comma pie input data. |
agents/evals/fixtures/cases/pie-basic-muix-decimal-comma/case.json |
Adds decimal-comma pie metadata. |
agents/evals/fixtures/cases/pie-basic-muix-date/data.csv |
Adds date-augmented pie input data. |
agents/evals/fixtures/cases/pie-basic-muix-date/case.json |
Adds date-augmented pie metadata. |
agents/evals/fixtures/cases/line-timeseries-muix-x10/case.json |
Adds scaled time-series metadata. |
agents/evals/fixtures/cases/line-timeseries-muix-renamed/case.json |
Adds renamed-header time-series metadata. |
agents/evals/fixtures/cases/line-timeseries-muix-n5000/case.json |
Adds large time-series metadata. |
agents/evals/fixtures/cases/line-timeseries-muix-n12/data.csv |
Adds small time-series input data. |
agents/evals/fixtures/cases/line-timeseries-muix-n12/case.json |
Adds small time-series metadata. |
agents/evals/fixtures/cases/line-timeseries-muix-decimal-comma/case.json |
Adds decimal-comma time-series metadata. |
agents/evals/fixtures/cases/line-timeseries-muix-date/case.json |
Adds date-axis time-series metadata. |
agents/evals/fixtures/cases/line-basic-muix-x10/data.csv |
Adds scaled line input data. |
agents/evals/fixtures/cases/line-basic-muix-x10/case.json |
Adds scaled line metadata. |
agents/evals/fixtures/cases/line-basic-muix-renamed/data.csv |
Adds renamed-header line input data. |
agents/evals/fixtures/cases/line-basic-muix-renamed/case.json |
Adds renamed-header line metadata. |
agents/evals/fixtures/cases/line-basic-muix-n5000/case.json |
Adds large line metadata. |
agents/evals/fixtures/cases/line-basic-muix-n12/data.csv |
Adds small line input data. |
agents/evals/fixtures/cases/line-basic-muix-n12/case.json |
Adds small line metadata. |
agents/evals/fixtures/cases/line-basic-muix-decimal-comma/data.csv |
Adds decimal-comma line input data. |
agents/evals/fixtures/cases/line-basic-muix-decimal-comma/case.json |
Adds decimal-comma line metadata. |
agents/evals/fixtures/cases/line-basic-muix-date/data.csv |
Adds date-axis line input data. |
agents/evals/fixtures/cases/line-basic-muix-date/case.json |
Adds date-axis line metadata. |
agents/evals/fixtures/cases/histogram-basic-muix-x10/case.json |
Adds scaled histogram metadata. |
agents/evals/fixtures/cases/histogram-basic-muix-renamed/case.json |
Adds renamed-header histogram metadata. |
agents/evals/fixtures/cases/histogram-basic-muix-n5000/case.json |
Adds large histogram metadata. |
agents/evals/fixtures/cases/histogram-basic-muix-n12/data.csv |
Adds small histogram input data. |
agents/evals/fixtures/cases/histogram-basic-muix-n12/case.json |
Adds small histogram metadata. |
agents/evals/fixtures/cases/histogram-basic-muix-decimal-comma/case.json |
Adds decimal-comma histogram metadata. |
agents/evals/fixtures/cases/histogram-basic-muix-date/case.json |
Adds date-augmented histogram metadata. |
agents/evals/fixtures/cases/heatmap-basic-muix-x10/data.csv |
Adds scaled heatmap input data. |
agents/evals/fixtures/cases/heatmap-basic-muix-x10/case.json |
Adds scaled heatmap metadata. |
agents/evals/fixtures/cases/heatmap-basic-muix-renamed/data.csv |
Adds renamed-header heatmap input data. |
agents/evals/fixtures/cases/heatmap-basic-muix-renamed/case.json |
Adds renamed-header heatmap metadata. |
agents/evals/fixtures/cases/heatmap-basic-muix-n5000/case.json |
Adds large heatmap metadata. |
agents/evals/fixtures/cases/heatmap-basic-muix-n12/data.csv |
Adds small heatmap input data. |
agents/evals/fixtures/cases/heatmap-basic-muix-n12/case.json |
Adds small heatmap metadata. |
agents/evals/fixtures/cases/heatmap-basic-muix-decimal-comma/data.csv |
Adds decimal-comma heatmap input data. |
agents/evals/fixtures/cases/heatmap-basic-muix-decimal-comma/case.json |
Adds decimal-comma heatmap metadata. |
agents/evals/fixtures/cases/heatmap-basic-muix-date/case.json |
Adds date-augmented heatmap metadata. |
agents/evals/fixtures/cases/box-basic-muix-x10/case.json |
Adds scaled box-plot metadata. |
agents/evals/fixtures/cases/box-basic-muix-renamed/data.csv |
Adds renamed-header box-plot input data. |
agents/evals/fixtures/cases/box-basic-muix-renamed/case.json |
Adds renamed-header box-plot metadata. |
agents/evals/fixtures/cases/box-basic-muix-n5000/case.json |
Adds large box-plot metadata. |
agents/evals/fixtures/cases/box-basic-muix-n12/data.csv |
Adds small box-plot input data. |
agents/evals/fixtures/cases/box-basic-muix-n12/case.json |
Adds small box-plot metadata. |
agents/evals/fixtures/cases/box-basic-muix-decimal-comma/case.json |
Adds decimal-comma box-plot metadata. |
agents/evals/fixtures/cases/box-basic-muix-date/case.json |
Adds date-augmented box-plot metadata. |
agents/evals/fixtures/cases/bar-grouped-muix-x10/data.csv |
Adds scaled grouped-bar input data. |
agents/evals/fixtures/cases/bar-grouped-muix-x10/case.json |
Adds scaled grouped-bar metadata. |
agents/evals/fixtures/cases/bar-grouped-muix-renamed/data.csv |
Adds renamed-header grouped-bar input data. |
agents/evals/fixtures/cases/bar-grouped-muix-renamed/case.json |
Adds renamed-header grouped-bar metadata. |
agents/evals/fixtures/cases/bar-grouped-muix-n5000/case.json |
Adds large grouped-bar metadata. |
agents/evals/fixtures/cases/bar-grouped-muix-n12/data.csv |
Adds small grouped-bar input data. |
agents/evals/fixtures/cases/bar-grouped-muix-n12/case.json |
Adds small grouped-bar metadata. |
agents/evals/fixtures/cases/bar-grouped-muix-decimal-comma/data.csv |
Adds decimal-comma grouped-bar input data. |
agents/evals/fixtures/cases/bar-grouped-muix-decimal-comma/case.json |
Adds decimal-comma grouped-bar metadata. |
agents/evals/fixtures/cases/bar-grouped-muix-date/data.csv |
Adds date-augmented grouped-bar input data. |
agents/evals/fixtures/cases/bar-grouped-muix-date/case.json |
Adds date-augmented grouped-bar metadata. |
agents/evals/fixtures/cases/area-basic-muix-x10/data.csv |
Adds scaled area input data. |
agents/evals/fixtures/cases/area-basic-muix-x10/case.json |
Adds scaled area metadata. |
agents/evals/fixtures/cases/area-basic-muix-renamed/data.csv |
Adds renamed-header area input data. |
agents/evals/fixtures/cases/area-basic-muix-renamed/case.json |
Adds renamed-header area metadata. |
agents/evals/fixtures/cases/area-basic-muix-n5000/case.json |
Adds large area metadata. |
agents/evals/fixtures/cases/area-basic-muix-n12/data.csv |
Adds small area input data. |
agents/evals/fixtures/cases/area-basic-muix-n12/case.json |
Adds small area metadata. |
agents/evals/fixtures/cases/area-basic-muix-decimal-comma/data.csv |
Adds decimal-comma area input data. |
agents/evals/fixtures/cases/area-basic-muix-decimal-comma/case.json |
Adds decimal-comma area metadata. |
agents/evals/fixtures/cases/area-basic-muix-date/data.csv |
Adds date-axis area input data. |
agents/evals/fixtures/cases/area-basic-muix-date/case.json |
Adds date-axis area metadata. |
agents/evals/eligibility.py |
Includes MUI X in eligibility scans. |
agents/evals/cases.py |
Updates evaluation case documentation and totals. |
agents/cloudbuild.yaml |
Enables MUI X in the admin deployment library list. |
agents/anyplot/settings.py |
Documents MUI X as a supported runtime library. |
agents/anyplot/render/runtimes/javascript.py |
Documents MUI X TSX runtime behavior and API adaptation. |
agents/anyplot/render/runtimes/__init__.py |
Registers MUI X in the JavaScript runtime registry. |
agents/anyplot/render/contract.py |
Documents MUI X runtime mapping. |
agents/anyplot/prompts/root.md |
Documents MUI X code and downloadable TSX artifacts; contains the noted grammar nit. |
agents/anyplot/code/profiles/javascript/__init__.py |
Updates JavaScript profile service coverage documentation. |
Review effort: Lite
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
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.

Summary
muix, React +@mui/x-charts9.16, code fileplot.tsx) joins Chart.js, D3, ECharts and Highcharts on the JavaScript runtime and in the admin deploy's_LIBRARIES: 13 of 15 libraries served for the admin's live tests. Catalogue files written for MUI X 7.29 are servedcoupledwith thedeprecated-apinote (owner decision, question 13); the adapter rewritesChartContainertoChartsContainer.adapter_javascript.md, each measured in the renderer image: a"utc"time axis (a"time"axis follows the browser's zone in the exported page), a null-guarded seriesvalueFormatter(MUI X calls it with a gap'snullon hover; unguarded, the hover removes the whole chart), axis bands sized for the labels, overlays throughuseXScale/useYScale/useDrawingAreainstead ofmarginpixels,fmton value axes,skipAnimation.pie-basic-muix-renamed; the matrix preflight falls back to the library's smoke case when every selected file is a MUI X 7 file that cannot bundle as it stands;page_probe.mjshovers the largest canvas/svg (MUI X's first svg is a legend mark); the renderer image's CI builds and probes a MUI X page.Plan
agentic/specs/261024-agent-all-libraries.md, "What JS-4c built (2026-10-31): MUI X served for the admin".Test plan
api core agents),pytest tests/unit tests/integration -n autowith the renderer image tests on (22,930 passed, 27 skipped),make_fixtures --check, changelog checkChartContainer) rewritten as the prompt teaches passes R1-R3 in both themes through the local Docker backend+01:00timestamps with microseconds, integers past 2^53): R1-R3 pass in both themes, notes count 60/58/58plot.html(749 KB) and relay preview pass every page-probe check with hover in both themes; no harness, CSP or frame changenull(line with gaps, horizontal bars, stacked areas); only the series formatter does, which the prompt guardshttps://claude.ai/code/session_01H7HSkGyea1k2v293XiAMo8