Use TypeScript 7 for direct tsc checks#13523
Conversation
🌐 Website E2ETip All tests passed.
🔗 Website PreviewWebsite Preview: https://comfy-website-preview-pr-13523.vercel.app This commit: https://website-frontend-o5bs4xwe2-comfyui.vercel.app Last updated: 2026-07-08T23:41:44Z for |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds ChangesTypeScript 7 Dependency Rollout
Type Signature and Casting Cleanups
Estimated code review effort: 2 (Simple) | ~15 minutes Suggested labels: Suggested reviewers: Important Pre-merge checks failedPlease resolve all errors before merging. Addressing warnings is optional. ❌ Failed checks (1 inconclusive)
✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
🎨 Storybook: ✅ Built — View Storybook🎭 Playwright: ✅ 1692 passed, 0 failed · 2 flaky📊 Browser Reports
📦 Bundle: 7.78 MB gzip 🟢 -224 BDetailsSummary
Category Glance App Entry Points — 47.8 kB (baseline 47.8 kB) • ⚪ 0 BMain entry bundles and manifests
Status: 1 added / 1 removed Graph Workspace — 1.27 MB (baseline 1.27 MB) • ⚪ 0 BGraph editor runtime, canvas, workflow orchestration
Status: 1 added / 1 removed Views & Navigation — 98 kB (baseline 98 kB) • ⚪ 0 BTop-level views, pages, and routed surfaces
Status: 12 added / 12 removed Panels & Settings — 547 kB (baseline 547 kB) • ⚪ 0 BConfiguration panels, inspectors, and settings screens
Status: 12 added / 12 removed / 15 unchanged User & Accounts — 29.1 kB (baseline 29.1 kB) • ⚪ 0 BAuthentication, profile, and account management bundles
Status: 9 added / 9 removed / 1 unchanged Editors & Dialogs — 117 kB (baseline 117 kB) • ⚪ 0 BModals, dialogs, drawers, and in-app editors
Status: 5 added / 5 removed UI Components — 57.5 kB (baseline 57.5 kB) • ⚪ 0 BReusable component library chunks
Status: 13 added / 13 removed Data & Services — 270 kB (baseline 270 kB) • ⚪ 0 BStores, services, APIs, and repositories
Status: 16 added / 16 removed Utilities & Hooks — 3.38 MB (baseline 3.38 MB) • ⚪ 0 BHelpers, composables, and utility bundles
Status: 24 added / 24 removed / 10 unchanged Vendor & Third-Party — 15.3 MB (baseline 15.3 MB) • ⚪ 0 BExternal libraries and shared vendor chunks
Status: 7 added / 7 removed / 9 unchanged Other — 11.7 MB (baseline 11.7 MB) • ⚪ 0 BBundles that do not match a named category
Status: 107 added / 107 removed / 58 unchanged ⚡ Performance Report
Show regressions
All metrics
Historical variance (last 15 runs)
Trend (last 15 commits on main)
Raw data{
"timestamp": "2026-07-08T23:51:50.770Z",
"gitSha": "d52d9ff9487a1ac763b8f2fe6047bf79f1ee06bc",
"branch": "agent/upgrade-typescript-7",
"measurements": [
{
"name": "canvas-idle",
"durationMs": 2022.232000000031,
"styleRecalcs": 10,
"styleRecalcDurationMs": 9.581,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 366.952,
"heapDeltaBytes": 2753408,
"heapUsedBytes": 67980112,
"domNodes": 20,
"jsHeapTotalBytes": 20471808,
"scriptDurationMs": 16.977999999999998,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-idle",
"durationMs": 2071.9369999999913,
"styleRecalcs": 9,
"styleRecalcDurationMs": 9.699000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 460.11,
"heapDeltaBytes": -7511400,
"heapUsedBytes": 62060624,
"domNodes": -282,
"jsHeapTotalBytes": 18501632,
"scriptDurationMs": 20.609999999999996,
"eventListeners": -199,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1976.3269999999693,
"styleRecalcs": 80,
"styleRecalcDurationMs": 56.291,
"layouts": 12,
"layoutDurationMs": 3.6490000000000005,
"taskDurationMs": 944.8710000000001,
"heapDeltaBytes": -12571384,
"heapUsedBytes": 56880692,
"domNodes": -238,
"jsHeapTotalBytes": 18763776,
"scriptDurationMs": 138.424,
"eventListeners": -199,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "canvas-mouse-sweep",
"durationMs": 1829.8810000000003,
"styleRecalcs": 76,
"styleRecalcDurationMs": 42.13999999999999,
"layouts": 12,
"layoutDurationMs": 3.8369999999999993,
"taskDurationMs": 797.457,
"heapDeltaBytes": -2543756,
"heapUsedBytes": 62751332,
"domNodes": 58,
"jsHeapTotalBytes": 20996096,
"scriptDurationMs": 129.43099999999998,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1744.4810000000075,
"styleRecalcs": 30,
"styleRecalcDurationMs": 17.63,
"layouts": 6,
"layoutDurationMs": 0.6199999999999999,
"taskDurationMs": 324.61600000000004,
"heapDeltaBytes": 4892768,
"heapUsedBytes": 56595120,
"domNodes": -241,
"jsHeapTotalBytes": 1175552,
"scriptDurationMs": 18.536000000000005,
"eventListeners": -186,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "canvas-zoom-sweep",
"durationMs": 1721.5400000000045,
"styleRecalcs": 32,
"styleRecalcDurationMs": 15.981000000000002,
"layouts": 6,
"layoutDurationMs": 0.655,
"taskDurationMs": 309.115,
"heapDeltaBytes": 2286920,
"heapUsedBytes": 61101516,
"domNodes": 78,
"jsHeapTotalBytes": 24379392,
"scriptDurationMs": 18.033,
"eventListeners": 19,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "dom-widget-clipping",
"durationMs": 586.2280000000055,
"styleRecalcs": 10,
"styleRecalcDurationMs": 6.768000000000002,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 346.138,
"heapDeltaBytes": 7155592,
"heapUsedBytes": 65989868,
"domNodes": 16,
"jsHeapTotalBytes": 17825792,
"scriptDurationMs": 60.804,
"eventListeners": 2,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "dom-widget-clipping",
"durationMs": 592.960000000005,
"styleRecalcs": 12,
"styleRecalcDurationMs": 9.633999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 395.20300000000003,
"heapDeltaBytes": -22835020,
"heapUsedBytes": 46690216,
"domNodes": -277,
"jsHeapTotalBytes": 4870144,
"scriptDurationMs": 60.919000000000004,
"eventListeners": -203,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-idle",
"durationMs": 2033.7710000000015,
"styleRecalcs": 8,
"styleRecalcDurationMs": 6.9110000000000005,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 516.068,
"heapDeltaBytes": -981932,
"heapUsedBytes": 59041636,
"domNodes": -275,
"jsHeapTotalBytes": -1089536,
"scriptDurationMs": 86.26700000000001,
"eventListeners": -197,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-idle",
"durationMs": 2007.2450000000117,
"styleRecalcs": 10,
"styleRecalcDurationMs": 11.248999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 546.5210000000001,
"heapDeltaBytes": -9706248,
"heapUsedBytes": 62096732,
"domNodes": 20,
"jsHeapTotalBytes": 10366976,
"scriptDurationMs": 103.583,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66999999999998,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "large-graph-pan",
"durationMs": 2115.201000000013,
"styleRecalcs": 69,
"styleRecalcDurationMs": 16.793999999999997,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1102.7089999999998,
"heapDeltaBytes": 14258100,
"heapUsedBytes": 82763572,
"domNodes": -274,
"jsHeapTotalBytes": -1638400,
"scriptDurationMs": 423.665,
"eventListeners": -197,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "large-graph-pan",
"durationMs": 2083.184000000074,
"styleRecalcs": 66,
"styleRecalcDurationMs": 15.975000000000003,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 1069.517,
"heapDeltaBytes": 27599344,
"heapUsedBytes": 82490320,
"domNodes": 10,
"jsHeapTotalBytes": 1777664,
"scriptDurationMs": 397.135,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333335,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-zoom",
"durationMs": 3103.464000000031,
"styleRecalcs": 63,
"styleRecalcDurationMs": 15.39,
"layouts": 60,
"layoutDurationMs": 7.200000000000001,
"taskDurationMs": 1265.118,
"heapDeltaBytes": 14010536,
"heapUsedBytes": 68274572,
"domNodes": 6,
"jsHeapTotalBytes": 0,
"scriptDurationMs": 476.7710000000001,
"eventListeners": 8,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "large-graph-zoom",
"durationMs": 3146.571999999992,
"styleRecalcs": 63,
"styleRecalcDurationMs": 17.206000000000003,
"layouts": 60,
"layoutDurationMs": 7.812000000000001,
"taskDurationMs": 1371.1689999999999,
"heapDeltaBytes": 16604144,
"heapUsedBytes": 79848884,
"domNodes": -275,
"jsHeapTotalBytes": 4997120,
"scriptDurationMs": 508.29099999999994,
"eventListeners": -128,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "minimap-idle",
"durationMs": 2013.8479999999959,
"styleRecalcs": 9,
"styleRecalcDurationMs": 9.194999999999999,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 494.75699999999995,
"heapDeltaBytes": -9745892,
"heapUsedBytes": 64288280,
"domNodes": 18,
"jsHeapTotalBytes": 8007680,
"scriptDurationMs": 92.97999999999999,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "minimap-idle",
"durationMs": 2008.2119999999577,
"styleRecalcs": 9,
"styleRecalcDurationMs": 8.347,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 512.648,
"heapDeltaBytes": -3275708,
"heapUsedBytes": 57903292,
"domNodes": -265,
"jsHeapTotalBytes": 3948544,
"scriptDurationMs": 84.956,
"eventListeners": -126,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 594.4610000000239,
"styleRecalcs": 46,
"styleRecalcDurationMs": 12.614000000000003,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 406.485,
"heapDeltaBytes": -4083860,
"heapUsedBytes": 48772084,
"domNodes": -277,
"jsHeapTotalBytes": 126976,
"scriptDurationMs": 125.677,
"eventListeners": -197,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.663333333333338,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "subgraph-dom-widget-clipping",
"durationMs": 579.6410000000378,
"styleRecalcs": 47,
"styleRecalcDurationMs": 10.812000000000001,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 366.05,
"heapDeltaBytes": -16384568,
"heapUsedBytes": 47960340,
"domNodes": 20,
"jsHeapTotalBytes": 23879680,
"scriptDurationMs": 125.88,
"eventListeners": 6,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-idle",
"durationMs": 2087.3700000000213,
"styleRecalcs": 10,
"styleRecalcDurationMs": 17.431,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 411.2710000000001,
"heapDeltaBytes": -8257156,
"heapUsedBytes": 61278644,
"domNodes": -282,
"jsHeapTotalBytes": 19025920,
"scriptDurationMs": 18.252000000000006,
"eventListeners": -199,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "subgraph-idle",
"durationMs": 2024.6510000000058,
"styleRecalcs": 10,
"styleRecalcDurationMs": 10.575,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 372.339,
"heapDeltaBytes": 2260708,
"heapUsedBytes": 67957112,
"domNodes": 20,
"jsHeapTotalBytes": 20209664,
"scriptDurationMs": 15.861,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1726.5810000000101,
"styleRecalcs": 75,
"styleRecalcDurationMs": 38.86,
"layouts": 16,
"layoutDurationMs": 4.418,
"taskDurationMs": 680.6809999999999,
"heapDeltaBytes": 19088120,
"heapUsedBytes": 76921368,
"domNodes": 62,
"jsHeapTotalBytes": 19398656,
"scriptDurationMs": 93.304,
"eventListeners": 4,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.800000000000182
},
{
"name": "subgraph-mouse-sweep",
"durationMs": 1740.2460000000701,
"styleRecalcs": 76,
"styleRecalcDurationMs": 38.928000000000004,
"layouts": 16,
"layoutDurationMs": 4.388,
"taskDurationMs": 745.899,
"heapDeltaBytes": -7067724,
"heapUsedBytes": 45342316,
"domNodes": -260,
"jsHeapTotalBytes": 17428480,
"scriptDurationMs": 97.074,
"eventListeners": -199,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "subgraph-transition-enter",
"durationMs": 999.0840000000389,
"styleRecalcs": 19,
"styleRecalcDurationMs": 33.294000000000004,
"layouts": 15,
"layoutDurationMs": 16.09,
"taskDurationMs": 761.9419999999997,
"heapDeltaBytes": 2628508,
"heapUsedBytes": 79138080,
"domNodes": 13673,
"jsHeapTotalBytes": 16515072,
"scriptDurationMs": 29.21699999999999,
"eventListeners": 2533,
"totalBlockingTimeMs": 165,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.699999999999818
},
{
"name": "viewport-pan-sweep",
"durationMs": 8188.572999999962,
"styleRecalcs": 251,
"styleRecalcDurationMs": 51.913000000000004,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 3713.566,
"heapDeltaBytes": 2509904,
"heapUsedBytes": 69721852,
"domNodes": -264,
"jsHeapTotalBytes": 983040,
"scriptDurationMs": 1228.277,
"eventListeners": -183,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "viewport-pan-sweep",
"durationMs": 8215.8290000001,
"styleRecalcs": 252,
"styleRecalcDurationMs": 60.857000000000006,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 3713.1310000000003,
"heapDeltaBytes": -391560,
"heapUsedBytes": 71468304,
"domNodes": 20,
"jsHeapTotalBytes": 18145280,
"scriptDurationMs": 1263.331,
"eventListeners": 20,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.66333333333332,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-idle",
"durationMs": 12534.474000000046,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 12503.144000000002,
"heapDeltaBytes": -46266468,
"heapUsedBytes": 166244140,
"domNodes": -3300,
"jsHeapTotalBytes": -1863680,
"scriptDurationMs": 601.9460000000001,
"eventListeners": -16380,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "vue-large-graph-idle",
"durationMs": 11963.735000000042,
"styleRecalcs": 0,
"styleRecalcDurationMs": 0,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 11945.161,
"heapDeltaBytes": -45161092,
"heapUsedBytes": 170258392,
"domNodes": -3301,
"jsHeapTotalBytes": 15962112,
"scriptDurationMs": 519.4499999999999,
"eventListeners": -16385,
"totalBlockingTimeMs": 0,
"frameDurationMs": 17.216666666666665,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 15353.548000000046,
"styleRecalcs": 81,
"styleRecalcDurationMs": 19.518000000000036,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 15305.298,
"heapDeltaBytes": -41566980,
"heapUsedBytes": 164421512,
"domNodes": -3300,
"jsHeapTotalBytes": 1019904,
"scriptDurationMs": 852.428,
"eventListeners": -16376,
"totalBlockingTimeMs": 24,
"frameDurationMs": 17.223333333333358,
"p95FrameDurationMs": 16.799999999999272
},
{
"name": "vue-large-graph-pan",
"durationMs": 14932.877000000077,
"styleRecalcs": 68,
"styleRecalcDurationMs": 16.771000000000036,
"layouts": 0,
"layoutDurationMs": 0,
"taskDurationMs": 14908.943,
"heapDeltaBytes": -9872192,
"heapUsedBytes": 181864492,
"domNodes": -3300,
"jsHeapTotalBytes": 21671936,
"scriptDurationMs": 792.0480000000001,
"eventListeners": -16364,
"totalBlockingTimeMs": 62,
"frameDurationMs": 17.223333333333358,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "workflow-execution",
"durationMs": 479.48800000000347,
"styleRecalcs": 19,
"styleRecalcDurationMs": 31.771,
"layouts": 5,
"layoutDurationMs": 1.433,
"taskDurationMs": 240.94199999999998,
"heapDeltaBytes": -22122824,
"heapUsedBytes": 48694492,
"domNodes": -169,
"jsHeapTotalBytes": 4345856,
"scriptDurationMs": 19.439999999999998,
"eventListeners": -134,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.666666666666668,
"p95FrameDurationMs": 16.700000000000728
},
{
"name": "workflow-execution",
"durationMs": 453.63499999996293,
"styleRecalcs": 19,
"styleRecalcDurationMs": 27.073,
"layouts": 5,
"layoutDurationMs": 1.4230000000000003,
"taskDurationMs": 120.938,
"heapDeltaBytes": 4958776,
"heapUsedBytes": 69433428,
"domNodes": 157,
"jsHeapTotalBytes": 4980736,
"scriptDurationMs": 18.034000000000002,
"eventListeners": 71,
"totalBlockingTimeMs": 0,
"frameDurationMs": 16.670000000000012,
"p95FrameDurationMs": 16.800000000000182
}
]
} |
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/design-system/package.json`:
- Around line 22-23: The typecheck script is still using the default tsc binary,
so it may not run with the intended TypeScript 7 toolchain. Update the
package.json typecheck entry in packages/design-system to invoke the TypeScript
7 executable directly, using the existing typescript-7 dependency reference so
the script is pinned to that version instead of the default compiler.
In `@pnpm-workspace.yaml`:
- Around line 178-200: The TypeScript age-exclude entries are pinned to an
outdated catalog version, so keep the `minimumReleaseAgeExclude` list in
`pnpm-workspace.yaml` synchronized with the current `typescript-7` version.
Update the `@typescript/*` package entries and the `typescript` entry together
whenever the catalog version changes, so the exclusions continue to match the
exact published artifacts.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 327dd794-ff19-44e6-9f5a-ecd7f74156c3
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (16)
apps/desktop-ui/.storybook/preview.tsapps/desktop-ui/src/composables/bottomPanelTabs/useTerminal.test.tsapps/desktop-ui/src/composables/bottomPanelTabs/useTerminalBuffer.test.tsapps/desktop-ui/src/constants/desktopDialogs.test.tsapps/desktop-ui/src/constants/desktopMaintenanceTasks.test.tsapps/desktop-ui/src/utils/electronMirrorCheck.test.tsapps/desktop-ui/src/utils/envUtil.tsapps/desktop-ui/tsconfig.jsonpackages/design-system/package.jsonpackages/object-info-parser/package.jsonpackages/shared-frontend-utils/package.jsonpackages/shared-frontend-utils/src/piiUtil.test.tspackages/shared-frontend-utils/src/piiUtil.tspackages/tailwind-utils/package.jsonpnpm-workspace.yamlsrc/composables/maskeditor/useGPUResources.ts
💤 Files with no reviewable changes (1)
- apps/desktop-ui/.storybook/preview.ts
Codecov Report✅ All modified and coverable lines are covered by tests. @@ Coverage Diff @@
## main #13523 +/- ##
==========================================
+ Coverage 77.50% 77.52% +0.01%
==========================================
Files 1650 1651 +1
Lines 92928 92979 +51
Branches 32116 32788 +672
==========================================
+ Hits 72021 72078 +57
+ Misses 20236 20228 -8
- Partials 671 673 +2
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 17 files with indirect coverage changes 🚀 New features to boost your workflow:
|
77edc2c to
90ab044
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/desktop-ui/tsconfig.json`:
- Around line 10-15: The TypeScript config in tsconfig.json is missing Node
ambient types, which breaks imports and process usage in the Vite/Vitest config
files. Update the types whitelist to include node alongside the existing entries
so vite.config.mts and vitest.config.mts can use node:path, node:url, and
process.env; the key symbols to check are the types array in tsconfig.json and
the config files that rely on Node globals.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: ec546d1d-62f6-43a6-be18-44a3d35a2ae0
📒 Files selected for processing (11)
apps/desktop-ui/.storybook/preview.tsapps/desktop-ui/src/composables/bottomPanelTabs/useTerminal.test.tsapps/desktop-ui/src/composables/bottomPanelTabs/useTerminalBuffer.test.tsapps/desktop-ui/src/constants/desktopDialogs.test.tsapps/desktop-ui/src/constants/desktopMaintenanceTasks.test.tsapps/desktop-ui/src/utils/electronMirrorCheck.test.tsapps/desktop-ui/src/utils/envUtil.tsapps/desktop-ui/tsconfig.jsonpackages/shared-frontend-utils/src/piiUtil.test.tspackages/shared-frontend-utils/src/piiUtil.tssrc/composables/maskeditor/useGPUResources.ts
💤 Files with no reviewable changes (1)
- apps/desktop-ui/.storybook/preview.ts
90ab044 to
b690add
Compare
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/desktop-ui/src/utils/envUtil.ts`:
- Around line 3-7: The ElectronWindow alias is too loosely typed because
electronAPI is using Record<string, unknown>, so it won’t validate mocks or
downstream usage. Update ElectronWindow in envUtil.ts to reference the shared
ElectronAPI contract (or a narrow explicit interface that matches it) instead of
a generic record, and keep Config typed from that same shape so the cast
provides real compile-time safety.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: 641bea5b-33b5-4402-983b-c31c6ed1f9f9
📒 Files selected for processing (11)
apps/desktop-ui/.storybook/preview.tsapps/desktop-ui/src/composables/bottomPanelTabs/useTerminal.test.tsapps/desktop-ui/src/composables/bottomPanelTabs/useTerminalBuffer.test.tsapps/desktop-ui/src/composables/bottomPanelTabs/useTerminalBuffer.tsapps/desktop-ui/src/constants/desktopDialogs.test.tsapps/desktop-ui/src/constants/desktopMaintenanceTasks.test.tsapps/desktop-ui/src/utils/electronMirrorCheck.test.tsapps/desktop-ui/src/utils/envUtil.tsapps/desktop-ui/tsconfig.jsonpackages/shared-frontend-utils/src/piiUtil.test.tssrc/composables/maskeditor/useGPUResources.ts
💤 Files with no reviewable changes (1)
- apps/desktop-ui/.storybook/preview.ts
|
@coderabbitai full review |
✅ Action performedFull review finished. |
There was a problem hiding this comment.
Actionable comments posted: 4
♻️ Duplicate comments (1)
apps/desktop-ui/src/utils/envUtil.ts (1)
3-7: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win
ElectronWindowstill loosely typed — previously flagged.The
electronAPIproperty remainsRecord<string, unknown>, so the cast on line 14 carries all the type safety. WiringElectronAPIdirectly intoElectronWindowwould give compile-time validation at mock sites (e.g.,InstallView.stories.ts) and eliminate the redundantas ElectronAPIassertion.This was raised in a prior review and remains unaddressed.
♻️ Proposed fix
export type ElectronWindow = typeof window & { - electronAPI: Record<string, unknown> & { - Config: Record<string, unknown> - } + electronAPI: ElectronAPI }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/desktop-ui/src/utils/envUtil.ts` around lines 3 - 7, The ElectronWindow type is still too loose because electronAPI is defined with Record<string, unknown>, so the later cast to ElectronAPI remains necessary. Update ElectronWindow in envUtil to use the concrete ElectronAPI type for electronAPI (while keeping Config typed), and then remove the redundant as ElectronAPI assertion at the usage site so mock callers like InstallView.stories.ts get compile-time validation.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/desktop-ui/tsconfig.json`:
- Around line 9-15: The apps/desktop-ui tsconfig.json types array is overriding
the parent config and dropping Node ambient declarations, which breaks
typechecking for vite.config.mts and vitest.config.mts usages like node:path,
node:url, and process.env. Update the types array in this config to include node
alongside the existing entries so the Node globals and module typings are
restored without affecting the other referenced type packages.
In `@packages/object-info-parser/package.json`:
- Line 22: The typecheck scripts are still invoking the generic tsc binary,
which can resolve to TypeScript 6.x instead of the intended 7.x when both
toolchains are present. Update the typecheck commands in the affected package
manifests to explicitly use the TypeScript 7 entrypoint, and keep the existing
typescript-7 dependency wiring in place so the scripts in
packages/object-info-parser, packages/design-system,
packages/shared-frontend-utils, and packages/tailwind-utils consistently run
against 7.x.
In `@packages/shared-frontend-utils/package.json`:
- Around line 21-22: The typecheck script is using the plain tsc binary, so make
sure it resolves to the TypeScript 7 toolchain instead of the older TypeScript
package. Update the package setup around the typecheck entry in package.json and
verify the tsc resolution logic used by object-info-parser so this workspace
consistently runs tsc from typescript-7. Keep the fix aligned with the existing
package manager/catalog dependency names and the typecheck script behavior.
In `@packages/tailwind-utils/package.json`:
- Around line 19-20: The package’s typecheck flow may be picking up the wrong
tsc binary, so verify that `tsc --noEmit` resolves to the TypeScript 7 package
rather than the TypeScript package. Update the package.json setup around the
typecheck script and dependency aliases so the `typescript-7` entry is the one
actually used, following the same verification approach as `object-info-parser`.
Use the `typecheck` script and the `typescript` / `typescript-7` package entries
as the key symbols to check and adjust.
---
Duplicate comments:
In `@apps/desktop-ui/src/utils/envUtil.ts`:
- Around line 3-7: The ElectronWindow type is still too loose because
electronAPI is defined with Record<string, unknown>, so the later cast to
ElectronAPI remains necessary. Update ElectronWindow in envUtil to use the
concrete ElectronAPI type for electronAPI (while keeping Config typed), and then
remove the redundant as ElectronAPI assertion at the usage site so mock callers
like InstallView.stories.ts get compile-time validation.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro Plus
Run ID: e851012d-8e07-4c96-be37-791d6afc8a01
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (16)
apps/desktop-ui/.storybook/preview.tsapps/desktop-ui/src/composables/bottomPanelTabs/useTerminal.test.tsapps/desktop-ui/src/composables/bottomPanelTabs/useTerminalBuffer.test.tsapps/desktop-ui/src/composables/bottomPanelTabs/useTerminalBuffer.tsapps/desktop-ui/src/constants/desktopDialogs.test.tsapps/desktop-ui/src/constants/desktopMaintenanceTasks.test.tsapps/desktop-ui/src/utils/electronMirrorCheck.test.tsapps/desktop-ui/src/utils/envUtil.tsapps/desktop-ui/tsconfig.jsonpackages/design-system/package.jsonpackages/object-info-parser/package.jsonpackages/shared-frontend-utils/package.jsonpackages/shared-frontend-utils/src/piiUtil.test.tspackages/tailwind-utils/package.jsonpnpm-workspace.yamlsrc/composables/maskeditor/useGPUResources.ts
💤 Files with no reviewable changes (1)
- apps/desktop-ui/.storybook/preview.ts
| }, | ||
| "devDependencies": { | ||
| "typescript": "catalog:", | ||
| "typescript-7": "catalog:", |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Check what binaries each typescript package exposes in the lockfile
echo "== typescript and typescript-7 in lockfile =="
rg -n -A10 'typescript-7:' pnpm-lock.yaml | head -30
echo "---"
rg -n -A10 "^\s+typescript:" pnpm-lock.yaml | head -30
# Check if TS 6.x provides a differently-named bin (e.g. tsc6) or standard tsc
echo
echo "== Check bin field in installed typescript packages =="
for pkg in typescript typescript-7; do
if [ -f "node_modules/$pkg/package.json" ]; then
echo "--- $pkg bin ---"
jq '.bin' "node_modules/$pkg/package.json" 2>/dev/null || echo "no package.json"
fi
done
# Check .bin directory for tsc symlinks
echo
echo "== .bin/tsc resolution =="
ls -la node_modules/.bin/tsc* 2>/dev/null || echo "no .bin/tsc found"
readlink -f node_modules/.bin/tsc 2>/dev/null || trueRepository: Comfy-Org/ComfyUI_frontend
Length of output: 2377
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== relevant package manifests =="
for f in \
packages/object-info-parser/package.json \
packages/design-system/package.json \
packages/shared-frontend-utils/package.json \
packages/tailwind-utils/package.json \
package.json
do
if [ -f "$f" ]; then
echo "--- $f ---"
cat -n "$f" | sed -n '1,220p'
echo
fi
done
echo "== workspace references to tsc/typecheck =="
rg -n '"typecheck"|\\btsc --noEmit\\b|typescript-7|typescript": "catalog:|typescript-7": "catalog:' packages package.json pnpm-workspace.yaml pnpm-lock.yaml -g '!**/dist/**' -g '!**/build/**'
echo
echo "== installed package bin metadata, if present =="
for pkg in typescript typescript-7; do
if [ -f "node_modules/$pkg/package.json" ]; then
echo "--- node_modules/$pkg/package.json ---"
jq '{name, version, bin}' "node_modules/$pkg/package.json"
fi
done
echo
echo "== .bin entries related to tsc, if present =="
ls -la node_modules/.bin/tsc* 2>/dev/null || true
readlink -f node_modules/.bin/tsc 2>/dev/null || trueRepository: Comfy-Org/ComfyUI_frontend
Length of output: 15684
🌐 Web query:
pnpm alias package binary conflict two dependencies expose same bin name .bin resolution order tsc typescript alias
💡 Result:
When two dependencies expose a binary with the same name, pnpm may encounter a conflict in the node_modules/.bin directory [1][2]. Because pnpm does not currently enforce strict conflict prevention for non-global installs, one of the binaries will generally overwrite or take precedence over the other, often depending on the order of operations or package name [1][2]. For scenarios involving TypeScript (tsc) or other tools where bin conflicts arise (e.g., when using multiple versions of a package via aliases), you can manage these conflicts using the following strategies: 1. Use pnpm exec: Instead of relying on the binaries linked in node_modules/.bin, use pnpm exec . This command automatically resolves the binary to the correct package based on your project's dependency graph, effectively bypassing path-based resolution conflicts [3]. 2. Avoid reliance on.bin resolution: If you are encountering issues where tools like tsc call the wrong binary, ensure your scripts are explicitly running via pnpm run or pnpm exec, which set up the environment to correctly prioritize the locally installed versions of your direct dependencies. 3. Monitor Issue Tracker: pnpm development is ongoing regarding bin conflict resolution, with efforts to improve consistency, particularly by applying bin ownership overrides [4]. If you are using package aliases (e.g., installing a package under a different name to avoid version conflicts), note that pnpm treats these as separate packages [5]. If those separate packages still expose the same bin name, the conflict will persist because the binary filename remains the same [1]. There is currently no native feature to automatically rename binaries via package aliases in the dependencies section of package.json [1]. You may need to use tools or scripts to manually manage or symlink the desired binary if pnpm's default conflict resolution does not select the one you require [2]. Top results: [1][4][2][3][5]
Citations:
- 1: Installing packages with colliding executable produces no error pnpm/pnpm#7027
- 2: Allow rewriting pkg.bin in pnpmfile pnpm/pnpm#4033
- 3: bin from optional dependencies of a devDependencies are not linked in node_modules/.bin pnpm/pnpm#7121
- 4: link-bins: apply bin ownership overrides in conflict resolution pnpm/pnpm#10850
- 5: https://pnpm.io/aliases
Invoke TypeScript 7 explicitly in these typecheck scripts. tsc --noEmit is ambiguous when both typescript and typescript-7 expose tsc, so these packages can still run against 6.x instead of 7.x: packages/object-info-parser/package.json, packages/design-system/package.json, packages/shared-frontend-utils/package.json, and packages/tailwind-utils/package.json.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@packages/object-info-parser/package.json` at line 22, The typecheck scripts
are still invoking the generic tsc binary, which can resolve to TypeScript 6.x
instead of the intended 7.x when both toolchains are present. Update the
typecheck commands in the affected package manifests to explicitly use the
TypeScript 7 entrypoint, and keep the existing typescript-7 dependency wiring in
place so the scripts in packages/object-info-parser, packages/design-system,
packages/shared-frontend-utils, and packages/tailwind-utils consistently run
against 7.x.
b690add to
1b0d458
Compare
Summary
typescript-7catalog alias for packages that run directtsc, while keepingtypescripton 6.0.3 for API-based tooling likevue-tsc.design-system,shared-frontend-utils,object-info-parser, andtailwind-utilsdirecttscchecks to TypeScript 7.0.2.Direct
tscPerformanceLocal median wall time over 5 runs per package. Scope is only the four package
tsc --noEmitchecks; Vue/Astro typechecks still use TS6 API tooling.@comfyorg/design-system@comfyorg/shared-frontend-utils@comfyorg/tailwind-utils@comfyorg/object-info-parserValidation
pnpm install --frozen-lockfilepnpm lint:unstagedpnpm typecheckpnpm typecheck:browserpnpm typecheck:desktoppnpm typecheck:website- passes with existing Astro/Vite/TS warning outputpnpm --filter @comfyorg/desktop-ui run test:unitpnpm --filter @comfyorg/design-system run typecheckpnpm --filter @comfyorg/shared-frontend-utils run typecheckpnpm --filter @comfyorg/tailwind-utils run typecheckpnpm --filter @comfyorg/object-info-parser run typecheckpnpm knip --cacheoxfmt,oxlint,eslint,pnpm typecheckknip --cache