Skip to content

UI Component Rewrite - #529

Merged
Juliusolsson05 merged 4 commits into
mainfrom
refactor/ui-component-rewrite
Jul 16, 2026
Merged

Juliusolsson05 merged 4 commits into
mainfrom
refactor/ui-component-rewrite

Conversation

@Juliusolsson05

@Juliusolsson05 Juliusolsson05 commented Jul 12, 2026 •

Copy link
Copy Markdown
Owner

Summary\n\n- establish as the locally owned shared primitive boundary, following shadcn/ui naming while preserving Agent Code semantic tokens and dense visual language\n- add shared , , , , and primitives plus and a reviewed \n- migrate app-wide feature and provider modals to the Radix-backed dialog contract for portals, focus trapping and restoration, Escape handling, outside interaction, and accessible titles and descriptions\n- add an explicit DOM interaction-ownership contract that gates background typing, paste, Enter submission, workspace shortcuts, native menu commands, and native dictation starts\n- scope provider condition keyboard handling to the focused tile and close the remaining focus and shortcut ownership races\n- document the component boundary, exceptions, and anti-overengineering rules in \n\n## Latest-main integration\n\nThis branch is rebased directly onto current at .\n\n- preserved the lightweight closed-state command palette added on main while moving its open surface to the shared dialog primitive\n- blocked native-menu command dispatch whenever another app-owned interaction surface is active\n- audited the Workflow UI added after this branch diverged and migrated its ordinary Cancel, Resume, and Retry actions to the shared button primitive\n- intentionally kept workflow tabs, disclosures, and activity rows feature-native because they are specialized navigation widgets rather than generic actions\n\n## Why\n\nThe previous modal family reimplemented different subsets of focus, Escape, backdrop, accessibility, and input suppression. A visually open surface could still send typing, paste, Enter, shortcuts, native menu commands, or dictation into an agent behind it.\n\nThe rewrite separates those contracts: dialog primitives own browser dialog behavior, global input ingress queries one synchronous ownership marker, and pane-local condition strips handle keys only inside their focused pane. Feature business logic and layout remain in their feature or provider folders.\n\n## Verification\n\n-

agent-code@0.0.2-beta.1 conditions-core:check
node scripts/sync-conditions-core.mjs --check\n-
agent-code@0.0.2-beta.1 typecheck
npm run workflow-mcp:build && tsc -b --pretty false

agent-code@0.0.2-beta.1 workflow-mcp:build
npm --prefix packages/workflow-mcp run build

workflow-mcp@0.0.0 build
tsc\n- focused renderer regression suite: 9 files, 23 tests passed\n-
agent-code@0.0.2-beta.1 test
npm run workflow-mcp:build && NODE_ENV=test vitest run

agent-code@0.0.2-beta.1 workflow-mcp:build
npm --prefix packages/workflow-mcp run build

workflow-mcp@0.0.0 build
tsc

RUN v4.1.7 /Users/juliusolsson/Desktop/Development/agent-code/.worktrees/ui-component-rewrite

❯ |unit| packages/workflow-mcp/test/processOwnedProviderHost.test.ts (5 tests | 1 failed) 5315ms
× pins a private Codex home and copies authentication before spawning the attempt 1883ms
❯ |unit| packages/claude-code-headless/src/transcript/JsonlTailer.test.ts (2 tests | 1 failed) 3251ms
× a second tailer on the same path survives the first one closing 3022ms

Test Files 2 failed | 127 passed | 1 skipped (130)
Tests 2 failed | 789 passed | 5 skipped (796)
Start at 14:00:18
Duration 43.83s (transform 64.41s, setup 4.23s, import 117.60s, tests 79.32s, environment 10.30s): 129 files passed, 1 skipped; 791 tests passed, 5 skipped\n-

agent-code@0.0.2-beta.1 build
npm run build:app

agent-code@0.0.2-beta.1 build:app
npm run workflow-mcp:build && electron-vite build && node scripts/copy-packaged-resources.mjs && node scripts/build-hotkey-helper.mjs

agent-code@0.0.2-beta.1 workflow-mcp:build
npm --prefix packages/workflow-mcp run build

workflow-mcp@0.0.0 build
tsc

vite v5.4.21 building SSR bundle for production...
transforming...
✓ 498 modules transformed.
rendering chunks...
out/main/workflowProviderHost.js 0.60 kB
out/main/chunks/workerMessages-BTrzPYRU.js 0.93 kB
out/main/chunks/sessionIndex-D9sZmXUd.js 15.25 kB
out/main/workflowWorker.js 20.07 kB
out/main/chunks/fileWorkflowStore-Dw10IvSj.js 127.34 kB
out/main/index.js 1,597.05 kB
✓ built in 4.23s
vite v5.4.21 building SSR bundle for production...
transforming...
✓ 31 modules transformed.
rendering chunks...
out/preload/index.mjs 25.40 kB
✓ built in 80ms
vite v5.4.21 building for production...
transforming...
✓ 2255 modules transformed.
rendering chunks...
../../out/renderer/index.html 1.50 kB
../../out/renderer/assets/codicon-DCmgc-ay.ttf 80.34 kB
../../out/renderer/assets/editor.worker-ZSx8gsAZ.js 503.10 kB
../../out/renderer/assets/json.worker-CYJeM0Vc.js 802.53 kB
../../out/renderer/assets/html.worker-CLkxC0C0.js 1,200.21 kB
../../out/renderer/assets/css.worker-rtSqh8pb.js 1,829.45 kB
../../out/renderer/assets/ts.worker-BEz7rTSH.js 12,093.58 kB
../../out/renderer/assets/editor-DjMEC8bx.css 190.45 kB
../../out/renderer/assets/index-CSQLwXOB.css 244.37 kB
../../out/renderer/assets/azcli-BXM2IlsQ.js 1.69 kB
../../out/renderer/assets/javascript-DVendiHg.js 1.72 kB
../../out/renderer/assets/ini-x6GHxt7E.js 2.05 kB
../../out/renderer/assets/csp-C2AJIiui.js 2.09 kB
../../out/renderer/assets/scheme-CnrVPi0g.js 2.74 kB
../../out/renderer/assets/bat-CXk6R9i1.js 3.04 kB
../../out/renderer/assets/flow9-D8e8abbC.js 3.14 kB
../../out/renderer/assets/sb-NjH6_omD.js 3.20 kB
../../out/renderer/assets/pla-CsZTrHnY.js 3.26 kB
../../out/renderer/assets/dockerfile-CmPC2DZV.js 3.40 kB
../../out/renderer/assets/pascaligo-Cmaorwot.js 3.63 kB
../../out/renderer/assets/bicep-BF8AAygK.js 3.81 kB
../../out/renderer/assets/lua-DRbkEJ__.js 3.81 kB
../../out/renderer/assets/objective-c-Bsf9Adr2.js 3.86 kB
../../out/renderer/assets/cameligo-nP5XeB7Z.js 3.89 kB
../../out/renderer/assets/xml-CWAbYb4t.js 4.01 kB
../../out/renderer/assets/graphql-BAUBdV83.js 4.15 kB
../../out/renderer/assets/lexon-CS1RGqME.js 4.19 kB
../../out/renderer/assets/typespec-D3BaxOKL.js 4.26 kB
../../out/renderer/assets/sparql-BwgSs7wE.js 4.32 kB
../../out/renderer/assets/mips-CaM-c8sw.js 4.52 kB
../../out/renderer/assets/m3-DYNA-e-5.js 4.54 kB
../../out/renderer/assets/sophia-Z6PHlxcE.js 4.65 kB
../../out/renderer/assets/shell-nZFhZCI1.js 4.87 kB
../../out/renderer/assets/go-Co3voQ1F.js 4.88 kB
../../out/renderer/assets/fsharp-b9EwJ6OO.js 4.89 kB
../../out/renderer/assets/pascal-DLtAU0x_.js 5.10 kB
../../out/renderer/assets/r-Hxn2SnYa.js 5.18 kB
../../out/renderer/assets/less-BQjbkuJA.js 5.38 kB
../../out/renderer/assets/tcl-CF3tYq1H.js 5.43 kB
../../out/renderer/assets/qsharp-BD7c0_xf.js 5.53 kB
../../out/renderer/assets/cypher-CLz3A125.js 5.54 kB
../../out/renderer/assets/java-BqOgBITW.js 5.54 kB
../../out/renderer/assets/hcl-BgDEIw1l.js 5.59 kB
../../out/renderer/assets/kotlin-D1TiZq8i.js 5.63 kB
../../out/renderer/assets/redis-yl8TqW_z.js 5.63 kB
../../out/renderer/assets/restructuredtext-C45krjdV.js 5.71 kB
../../out/renderer/assets/powershell-BLZmOKjF.js 5.77 kB
../../out/renderer/assets/coffee-CY60ZdVX.js 5.90 kB
../../out/renderer/assets/liquid-DEjJNEjh.js 6.33 kB
../../out/renderer/assets/css-Dc1e6frd.js 6.49 kB
../../out/renderer/assets/rust-C2rcm8y9.js 6.66 kB
../../out/renderer/assets/apex-DG5IjXEF.js 6.77 kB
../../out/renderer/assets/dart-BdL3T2qP.js 6.87 kB
../../out/renderer/assets/markdown-C1LDbTIq.js 7.03 kB
../../out/renderer/assets/yaml-CtyMVnnI.js 7.04 kB
../../out/renderer/assets/mdx-DLv_Yjll.js 7.17 kB
../../out/renderer/assets/msdax-Dkw0rKnc.js 7.33 kB
../../out/renderer/assets/csharp-B3nfFqjg.js 7.36 kB
../../out/renderer/assets/swift-pEk5NNOh.js 7.56 kB
../../out/renderer/assets/python-C6CXzHxv.js 7.66 kB
../../out/renderer/assets/ecl-BRZtCkhn.js 8.32 kB
../../out/renderer/assets/cpp-BteEkr-J.js 8.60 kB
../../out/renderer/assets/pug-KZRE8PkR.js 8.65 kB
../../out/renderer/assets/vb-dhxRY2dE.js 8.71 kB
../../out/renderer/assets/html-BMUM55SO.js 8.81 kB
../../out/renderer/assets/typescript-B4LDETZn.js 9.15 kB
../../out/renderer/assets/scss-Dsuw-lBL.js 9.45 kB
../../out/renderer/assets/wgsl-CaHBWX8o.js 10.14 kB
../../out/renderer/assets/st-BG4-BhrP.js 10.53 kB
../../out/renderer/assets/twig-CHKK6meg.js 10.64 kB
../../out/renderer/assets/julia-CFXRrAu4.js 10.87 kB
../../out/renderer/assets/scala-BjP-ReDi.js 11.08 kB
../../out/renderer/assets/handlebars-CBn_rkh-.js 11.59 kB
../../out/renderer/assets/systemverilog-Bn-PPJj.js 12.01 kB
../../out/renderer/assets/php-NQU4bmpL.js 12.87 kB
../../out/renderer/assets/protobuf-Dg-80f8u.js 13.06 kB
../../out/renderer/assets/perl-BPi58r3D.js 13.20 kB
../../out/renderer/assets/clojure-BQC0MhrY.js 14.33 kB
../../out/renderer/assets/razor-Dxn0NGx4.js 14.52 kB
../../out/renderer/assets/ruby-Bvv4DQ04.js 15.70 kB
../../out/renderer/assets/sql-Dl7Picx6.js 15.94 kB
../../out/renderer/assets/mysql--o_yUUHh.js 16.54 kB
../../out/renderer/assets/redshift-Bf-JYjU
.js 16.71 kB
../../out/renderer/assets/pgsql-BYfQsqS2.js 18.63 kB
../../out/renderer/assets/elixir-DST-1xVL.js 19.12 kB
../../out/renderer/assets/postiats-BEsqrLND.js 19.69 kB
../../out/renderer/assets/powerquery-B2m3ADxD.js 22.03 kB
../../out/renderer/assets/abap-C1iBNFz_.js 23.36 kB
../../out/renderer/assets/solidity-DLTEqBGt.js 26.41 kB
../../out/renderer/assets/tsMode-ClExUbaU.js 43.25 kB
../../out/renderer/assets/freemarker2-BX3ik6EJ.js 43.38 kB
../../out/renderer/assets/cssMode-1yABIVuE.js 68.93 kB
../../out/renderer/assets/htmlMode-ssxS2Ohi.js 69.94 kB
../../out/renderer/assets/jsonMode-Cxp6TKAm.js 91.76 kB
../../out/renderer/assets/DebugSurfacesImpl-z8Aab-38.js 102.23 kB
../../out/renderer/assets/index-M0vBRYHM.js 4,582.67 kB
../../out/renderer/assets/editor.main-CUncnaxs.js 6,352.09 kB
✓ built in 46.42s
[build-hotkey-helper] built universal helper at /Users/juliusolsson/Desktop/Development/agent-code/.worktrees/ui-component-rewrite/out/main/runtime/hotkey-helper/AgentCodeDictationHotkeyHelper\n-

agent-code@0.0.2-beta.1 client:build
vite build --config src/remote-client/vite.config.ts

vite v5.4.21 building for production...
transforming...
✓ 688 modules transformed.
rendering chunks...
computing gzip size...
../../out/remote-client/index.html 0.67 kB │ gzip: 0.40 kB
../../out/remote-client/assets/index-B8QXqjKk.css 88.93 kB │ gzip: 15.02 kB
../../out/remote-client/assets/index-Bw9Xh_PH.js 1,529.12 kB │ gzip: 489.33 kB
✓ built in 4.56s\n- \n- production dependency audit matches current main exactly: 5 moderate and 3 high advisories, with no advisory introduced by the UI dependencies\n

@Juliusolsson05

Copy link
Copy Markdown
Owner Author

Superseded by #533, which merged the tested combined UI component/modal foundation and follow-up interaction-boundary fixes into main.

@Juliusolsson05

Copy link
Copy Markdown
Owner Author

Correction: #533 was reverted by #534 because these changes are unfinished. Reopening this draft PR for its original review and development lifecycle.

@Juliusolsson05
Juliusolsson05 force-pushed the refactor/ui-component-rewrite branch from 9c955c0 to 3db88b2 Compare July 16, 2026 11:59
@Juliusolsson05
Juliusolsson05 marked this pull request as ready for review July 16, 2026 12:01
@Juliusolsson05
Juliusolsson05 merged commit 6d99eb2 into main Jul 16, 2026
@Juliusolsson05
Juliusolsson05 deleted the refactor/ui-component-rewrite branch July 16, 2026 12:02
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